深入解讀Resnet


殘差網絡的設計目的

隨着網絡深度增加,會出現一種退化問題,也就是當網絡變得越來越深的時候,訓練的准確率會趨於平緩,但是訓練誤差會變大,這明顯不是過擬合造成的,因為過擬合是指網絡的訓練誤差會不斷變小,但是測試誤差會變大。為了解決這種退化現象,ResNet被提出。我們不再用多個堆疊的層直接擬合期望的特征映射,而是顯式的用它們擬合一個殘差映射。假設期望的特征映射為H(x),那么堆疊的非線性層擬合的是另一個映射,也就是F(x)=H(x)-x。假設最優化殘差映射比最優化期望的映射更容易,也就是F(x)=H(x)-x比F(x)=H(x)更容易優化,則極端情況下,期望的映射要擬合的是恆等映射,此時殘差網絡的任務是擬合F(x)=0,普通網絡要擬合的是F(x)=x,明顯前者更容易優化。

殘差塊

定義一個殘差塊的形式為y=F(x,Wi)+x,其中x和y分別為殘差塊的輸入和輸出向量,F(x,Wi)是要學習的殘差映射,在上圖中有2層,F=W2σ(W1X),σ是Relu激活函數,在這個表達式中為了方便起見,省略了偏置,這里的shortcut connections是恆等映射,之所以用恆等映射是因為這樣沒有引進額外的參數和計算復雜度。殘差函數F的形式是靈活的,殘差塊也可以有3層,但是如果殘差塊只有一層,則y=W1x+x,它只是一個線性層,3層的殘差塊如下如所示。

 

一般的我們稱上圖這種3層殘差塊為'bottleneck block',這里1x1的卷積起到了降維的作用,並且引入了更多的非線性變換,明顯的增加了殘差塊的深度,能提高殘差網絡的表示能力。

殘差網絡的優點

 

殘差網絡與普通網絡不同的地方就是引入了跳躍連接,這可以使上一個殘差塊的信息沒有阻礙的流入到下一個殘差塊,提高了信息流通,並且也避免了由與網絡過深所引起的消失梯度問題和退化問題。

 

假設有一個大型的神經網絡Big NN,它的輸入為X,輸出激活值為al,則如果我們想要增加這個網絡的深度,再給這個網絡額外的加兩層,最后的輸出為al+2,可以把這兩層看做一個殘差塊,並且帶有捷徑連接,整個網絡中使用的激活函數為Relu.

al+2=g(zl+2+al),其中zl+2=Wl+2al+1+bl+1,若Wl+2=0,bl+1=0,則al+2=g(al),當al>=0時,al+2=al。這相當於是建立起了al和al+2的線性關系,相當於是忽略了al之后的兩層神經層,實現了隔層線性傳遞,模型本身也就能夠容忍更深層的網絡,並且這個額外的殘差塊也不會影響它的性能.

殘差網絡的結構

上圖一共是5中殘差網絡的結構,深度分別是18,34,50,101,152.首先都通過一個7x7的卷積層,接着是一個最大池化,之后就是堆疊殘差塊,其中50,101,152層的殘差網絡使用的殘差塊是瓶頸結構,各網絡中殘差塊的個數從左到右依次是8,16,16,33,50。最后在網絡的結尾通常連接一個全局平均池化.全局平均池化的好處是沒有參數需要最優化防止過擬合,對輸入輸出的空間變換更具有魯棒性,加強了特征映射與類別的一致性。

殘差網絡的本質

殘差網絡事實上是由多個淺的網絡融合而成,它沒有在根本上解決消失的梯度問題,只是避免了消失的梯度問題,因為它是由多個淺的網絡融合而成,淺的網絡在訓練時不會出現消失的梯度問題,所以它能夠加速網絡的收斂.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM