• <center id="9nwwp"></center>
  • <code id="9nwwp"><small id="9nwwp"><optgroup id="9nwwp"></optgroup></small></code>
    <del id="9nwwp"><menu id="9nwwp"><samp id="9nwwp"></samp></menu></del>
    <big id="9nwwp"><nobr id="9nwwp"></nobr></big>
    <object id="9nwwp"><nobr id="9nwwp"></nobr></object>

    <nav id="9nwwp"><address id="9nwwp"></address></nav>

    <center id="9nwwp"><em id="9nwwp"><p id="9nwwp"></p></em></center>

    <th id="9nwwp"><option id="9nwwp"></option></th>

    <pre id="9nwwp"><menu id="9nwwp"><track id="9nwwp"></track></menu></pre>
    1. 殘差網絡基礎教程(殘差網絡為什么叫殘差)

      網絡設計 868
      本篇文章給大家談談殘差網絡基礎教程,以及殘差網絡為什么叫殘差對應的知識點,希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、一個殘差網絡的簡介【MATLAB】

      本篇文章給大家談談殘差網絡基礎教程,以及殘差網絡為什么叫殘差對應的知識點,希望對各位有所幫助,不要忘了收藏本站喔。

      本文目錄一覽:

      一個殘差網絡的簡介【MATLAB】

      對于許多應用來說,使用由一個簡單的層序列組成的網絡就已足夠。但是,某些應用要求網絡具有更復雜的層次圖結構,其中的層可接收來自多個層的輸入,也可以輸出到多個層。這些類型的網絡通常稱為有向無環圖 (DAG) 網絡。殘差網絡就是一種 DAG 網絡,其中的殘差(或快捷)連接會繞過主網絡層。殘差連接讓參數梯度可以更輕松地從輸出層傳播到較淺的網絡層,從而能夠訓練更深的網絡。增加網絡深度可在執行更困難的任務時獲得更高的準確度。

      主分支 - 順序連接的卷積層、批量歸一化層和 ReLU 層。

      殘差連接 - 繞過主分支的卷積單元。殘差連接和卷積單元的輸出按元素相加。當激活區域的大小變化時,殘差連接也必須包含 1×1 卷積層。殘差連接讓參數梯度可以更輕松地從輸出層流到較淺的網絡層,從而能夠訓練更深的網絡。

      首先創建網絡的主分支。主分支包含五部分。

      初始部分 - 包含圖像輸入層和帶激活函數的初始卷積層。

      三個卷積層階段 - 分別具有不同的特征大?。?2×32、16×16 和 8×8)。每個階段包含 N 個卷積單元。在示例的這一部分中,N = 2。每個卷積單元包含兩個帶激活函數的 3×3 卷積層。netWidth 參數是網絡寬度,定義為網絡第一卷積層階段中的過濾器數目。第二階段和第三階段中的前幾個卷積單元會將空間維度下采樣二分之一。為了使整個網絡中每個卷積層所需的計算量大致相同,每次執行空間下采樣時,都將過濾器的數量增加一倍。

      最后部分 - 包含全局平均池化層、全連接層、softmax 層和分類層。

      使用 convolutionalUnit(numF,stride,tag) 創建一個卷積單元。numF 是每一層中卷積過濾器的數量,stride 是該單元第一個卷積層的步幅,tag 是添加在層名稱前面的字符數組。convolutionalUnit 函數在示例末尾定義。

      為所有層指定唯一名稱。卷積單元中的層的名稱以 'SjUk' 開頭,其中 j 是階段索引,k 是該階段內卷積單元的索引。例如,'S2U1' 表示第 2 階段第 1 單元。

      殘差網絡(ResNet)

      殘差操作這一思想起源于論文《Deep Residual Learning for Image Recognition》。如果存在某個K層的網絡f是當前最優的網絡,那么可以構造一個更深的網絡,其最后幾層僅是該網絡f第K層輸出的恒等映射(IdentityMapping),就可以取得與f一致的結果;也許K還不是所謂“最佳層數”,那么更深的網絡就可以取得更好的結果。 總而言之,與淺層網絡相比,更深的網絡的表現不應該更差。但是如下圖所示,56層的神經網絡表現明顯要比20層的差。 證明更深的網絡在訓練過程中的難度更大,因此作者提出了殘差網絡的思想。+

      ResNet 的作者將這些問題歸結成了一個單一的假設:直接映射是難以學習的。而且他們提出了一種修正方法: 不再學習從 x 到 H(x) 的基本映射關系,而是學習這兩者之間的差異,也就是「殘差(residual)」。然后,為了計算 H(x),我們只需要將這個殘差加到輸入上即可。假設殘差為 F(x)=H(x)-x,那么現在我們的網絡不會直接學習 H(x) 了,而是學習 F(x)+x。

      這就帶來了你可能已經見過的著名 ResNet(殘差網絡)模塊:

      ResNet 的每一個「模塊(block)」都由一系列層和一個「捷徑(shortcut)」連接組成,這個「捷徑」將該模塊的輸入和輸出連接到了一起。然后在元素層面上執行「加法(add)」運算,如果輸入和輸出的大小不同,那就可以使用零填充或投射(通過 1×1 卷積)來得到匹配的大小。

      回到我們的思想實驗,這能大大簡化我們對恒等層的構建。直覺上就能知道,比起從頭開始學習一個恒等變換,學會使 F(x) 為 0 并使輸出仍為 x 要容易得多。一般來說,ResNet 會給層一個「參考」點 x,以 x 為基礎開始學習。

      在此之前,深度神經網絡常常會有梯度消失問題的困擾,因為 ResNet 的梯度信號可以直接通過捷徑連接回到更早的層,而且它們的表現依然良好。

      ResNet本質上就干了一件事:降低數據中信息的冗余度具體說來,就是對非冗余信息采用了線性激活(通過skip connection獲得無冗余的identity部分),然后對冗余信息采用了非線性激活(通過ReLU對identity之外的其余部分進行信息提取/過濾,提取出的有用信息即是殘差)。

      其中,提取identity這一步,就是ResNet思想的核心。 對ResNet本質的一些思考

      一方面是殘差網絡更好的擬合分類函數以獲得更高的分類精度,另一方面是殘差網絡如何解決網絡在層數加深時優化訓練上的難題。

      首先從萬能近似定理(Universal Approximation Theorem)入手。這個定理表明,一個前饋神經網絡(feedforward neural network)如果具有線性輸出層,同時至少存在一層具有任何一種“擠壓”性質的激活函數(例如logistic sigmoid激活函數)的隱藏層,那么只要給予這個網絡足夠數量的隱藏單元,它就可以以任意的精度來近似任何從一個有限維空間到另一個有限維空間的波萊爾可測函數(Borel Measurable Function)。

      萬能近似定理意味著我們在構建網絡來學習什么函數的時候,我們知道一定存在一個多層感知機(Multilayer Perceptron Model,MLP)能夠表示這個函數。然而,我們不能保證訓練算法能夠學得這個函數。因為即使多層感知機能夠表示該函數,學習也可能會失敗,可能的原因有兩種。

      第二種過擬合情況不在我們的討論范圍之內,因此我們聚焦在前一種情況,為何殘差網絡相比簡單的多層網絡能更好的擬合分類函數,即找到期望函數的參數值。

      對于普通的不帶短連接的神經網絡來說,存在這樣一個命題。

      事實上對于高維函數,這一特點依然適用。因此,當函數的輸入維度非常高時,這一做法就變的非常有意義。盡管在高維空間這一特點很難被可視化,但是這個理論給了一個很合理的啟發,就是原則上,帶短連接的網絡的擬合高維函數的能力比普通連接的網絡更強。這部分我們討論了殘差網絡有能力擬合更高維的函數,但是在實際的訓練過程中仍然可能存在各種各樣的問題使得學習到最優的參數非常困難,因此下一小節討論殘差在訓練過程中的優越性。

      這個部分我們討論為什么殘差能夠緩解深層網絡的訓練問題,以及探討可能的短連接方式和我們最終選擇的殘差的理由。正如本章第三部分討論的一樣,整個殘差卷積神經網絡是由以上的殘差卷積子模塊堆積而成。如上一小節所定義的,假設第 層的殘差卷積字子模塊的映射為

      十分鐘一起學會ResNet殘差網絡

      深度卷積網絡自然的整合了低中高不同層次的特征,特征的層次可以靠加深網絡的層次來豐富。從而,在構建卷積網絡時,網絡的深度越高,可抽取的特征層次就越豐富。所以一般我們會傾向于使用更深層次的網絡結構,以便取得更高層次的特征。但是在使用深層次的網絡結構時我們會遇到兩個問題,梯度消失,梯度爆炸問題和網絡退化的問題。

      但是當使用更深層的網絡時,會發生梯度消失、爆炸問題,這個問題很大程度通過標準的初始化和正則化層來基本解決,這樣可以確保幾十層的網絡能夠收斂,但是隨著網絡層數的增加,梯度消失或者爆炸的問題仍然存在。

      還有一個問題就是網絡的退化,舉個例子,假設已經有了一個最優化的網絡結構,是18層。當我們設計網絡結構的時候,我們并不知道具體多少層次的網絡時最優化的網絡結構,假設設計了34層網絡結構。那么多出來的16層其實是冗余的,我們希望訓練網絡的過程中,模型能夠自己訓練這五層為恒等映射,也就是經過這層時的輸入與輸出完全一樣。但是往往模型很難將這16層恒等映射的參數學習正確,那么就一定會不比最優化的18層網絡結構性能好,這就是隨著網絡深度增加,模型會產生退化現象。它不是由過擬合產生的,而是由冗余的網絡層學習了不是恒等映射的參數造成的。

      ResNet是在2015年有何凱明,張翔宇,任少卿,孫劍共同提出的,ResNet使用了一個新的思想,ResNet的思想是假設我們涉及一個網絡層,存在最優化的網絡層次,那么往往我們設計的深層次網絡是有很多網絡層為冗余層的。那么我們希望這些冗余層能夠完成恒等映射,保證經過該恒等層的輸入和輸出完全相同。具體哪些層是恒等層,這個會有網絡訓練的時候自己判斷出來。將原網絡的幾層改成一個殘差塊,殘差塊的具體構造如下圖所示:

      可以看到X是這一層殘差塊的輸入,也稱作F(x)為殘差,x為輸入值,F(X)是經過第一層線性變化并激活后的輸出,該圖表示在殘差網絡中,第二層進行線性變化之后激活之前,F(x)加入了這一層輸入值X,然后再進行激活后輸出。在第二層輸出值激活前加入X,這條路徑稱作shortcut連接。

      我們發現,假設該層是冗余的,在引入ResNet之前,我們想讓該層學習到的參數能夠滿足h(x)=x,即輸入是x,經過該冗余層后,輸出仍然為x。但是可以看見,要想學習h(x)=x恒等映射時的這層參數時比較困難的。ResNet想到避免去學習該層恒等映射的參數,使用了如上圖的結構,讓h(x)=F(x)+x;這里的F(x)我們稱作殘差項,我們發現,要想讓該冗余層能夠恒等映射,我們只需要學習F(x)=0。學習F(x)=0比學習h(x)=x要簡單,因為一般每層網絡中的參數初始化偏向于0,這樣在相比于更新該網絡層的參數來學習h(x)=x,該冗余層學習F(x)=0的更新參數能夠更快收斂,如圖所示:

      假設該曾網絡只經過線性變換,沒有bias也沒有激活函數。我們發現因為隨機初始化權重一般偏向于0,那么經過該網絡的輸出值為[0.6 0.6],很明顯會更接近與[0 0],而不是[2 1],相比與學習h(x)=x,模型要更快到學習F(x)=0。

      并且ReLU能夠將負數激活為0,過濾了負數的線性變化,也能夠更快的使得F(x)=0。這樣當網絡自己決定哪些網絡層為冗余層時,使用ResNet的網絡很大程度上解決了學習恒等映射的問題,用學習殘差F(x)=0更新該冗余層的參數來代替學習h(x)=x更新冗余層的參數。

      這樣當網絡自行決定了哪些層為冗余層后,通過學習殘差F(x)=0來讓該層網絡恒等映射上一層的輸入,使得有了這些冗余層的網絡效果與沒有這些冗余層的網絡效果相同,這樣很大程度上解決了網絡的退化問題。

      我們發現很深的網絡層,由于參數初始化一般更靠近0,這樣在訓練的過程中更新淺層網絡的參數時,很容易隨著網絡的深入而導致梯度消失,淺層的參數無法更新。

      可以看到,假設現在需要更新 參數因為隨機初始化偏向于0,通過鏈式求導我們會發現, 相乘會得到更加接近于0的數,那么所求的這個 的梯度就接近于0,也就產生了梯度消失的現象。

      ResNet最終更新某一個節點的參數時,由于 ,由于鏈式求導后的結果如圖所示,不管括號內右邊部分的求導參數有多小,因為左邊的1的存在,并且將原來的鏈式求導中的連乘變成了連加狀態(正是 ),都能保證該節點參數更新不會發生梯度消失或梯度爆炸現象。

      這樣ResNet在解決了阻礙更深層次網絡優化問題的兩個重要問題后,ResNet就能訓練更深層次幾百層乃至幾千層的網絡并取得更高的精確度了。

      這里是應用了ResNet的網絡圖,這里如果遇到了h(x)=F(x)+x中x的維度與F(x)不同的維度時,我們需要對identity加入Ws來保持Ws*x的維度與F(x)的維度一致。

      x與F(x)維度相同時:

      x與F(x)維度不同時:

      下邊是ResNet的網絡結構圖:

      使用1*1卷積減少參數和計算量:

      如果用了更深層次的網絡時,考慮到計算量,會先用1 * 1的卷積將輸入的256維降到64維,然后通過1*1恢復。這樣做的目的是減少參數量和計算量。

      左圖是ResNet34,右圖是ResNet50/101/152。這一個模塊稱作building block,右圖稱之為bottleneck design。在面對50,101,152層的深層次網絡,意味著有很大的計算量,因此這里使用1 * 1卷積先將輸入進行降維,然后再經過3 * 3卷積后再用 卷積進行升維。使用1*1卷積的好處是大大降低參數量計算量。

      通過上述的學習,你應該知道了,現如今大家普遍認為更好的網絡是建立在更寬更深的網絡基礎上,當你需要設計一個深度網絡結構時,你永遠不知道最優的網絡層次結構是多少層,一旦你設計的很深入了,那勢必會有很多冗余層,這些冗余層一旦沒有成功學習恒等變換 ,那就會影響網絡的預測性能,不會比淺層的網絡學習效果好從而產生退化問題。

      ResNet的過人之處,是他很大程度上解決了當今深度網絡頭疼的網絡退化問題和梯度消失問題。使用殘差網絡結構 代替原來的沒有shortcut連接的 ,這樣更新冗余層的參數時需要學習 比學習 要容易得多。而shortcut連接的結構也保證了反向傳播更新參數時,很難有梯度為0的現象發生,不會導致梯度消失。

      這樣,ResNet的構建,使我們更朝著符合我們的直覺走下去,即越深的網絡對于高級抽象特征的提取和網絡性能更好,不用在擔心隨著網絡的加深發生退化問題了。

      近段時間,準備持續發表一些CNN常見的網絡模型講解。好了,今天的十分鐘就帶你一起學會ResNet,下次的十分鐘我們再見。

      關于殘差網絡基礎教程和殘差網絡為什么叫殘差的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。

      掃碼二維碼
      色哟哟AV
    2. <center id="9nwwp"></center>
    3. <code id="9nwwp"><small id="9nwwp"><optgroup id="9nwwp"></optgroup></small></code>
      <del id="9nwwp"><menu id="9nwwp"><samp id="9nwwp"></samp></menu></del>
      <big id="9nwwp"><nobr id="9nwwp"></nobr></big>
      <object id="9nwwp"><nobr id="9nwwp"></nobr></object>

      <nav id="9nwwp"><address id="9nwwp"></address></nav>

      <center id="9nwwp"><em id="9nwwp"><p id="9nwwp"></p></em></center>

      <th id="9nwwp"><option id="9nwwp"></option></th>

      <pre id="9nwwp"><menu id="9nwwp"><track id="9nwwp"></track></menu></pre>