Feature Extractor[ResNet]



0. 背景

眾所周知,深度學習,要的就是深度,VGG主要的工作貢獻就是基於小卷積核的基礎上,去探尋網絡深度對結果的影響。而何愷明大神等人發現,不是隨着網絡深度增加,效果就好的,他們發現了一個違背直覺的現象。

圖0.1 不同層數的傳統網絡下的結果表現
最開始,我們認為隨着深度的增加,網絡效果不好,那是因為存在着梯度消失和梯度爆炸的原因。不過隨着大家的努力,這些問題可以通過歸一化初始化(即用特定的初始化算法)和歸一化層(Batch Normailzation)來極大的緩解。

可是,我們仍然能夠發現隨着網絡深度的增加,網絡反而在某些時刻結果變差了,如圖0.1所示。這並不是過擬合造成的,而且隨着網絡層數再增加,錯誤反而變得更高了。作者將這一現象稱之為“退化”現象。從這個現象中,我們得知,不是所有系統的優化方式都是一樣的。

圖0.1 "退化"現象
如圖0.1所示。我們假設這么一個場景:先訓練一個淺層的網絡A,然后構建一個深層的網絡B,其中網絡B比網絡A多出的那些層是為了學到恆等映射(identity mapping)(即y=x),然后與A相同的部分就直接用A代替。那么我們可以很自然的認為網絡B的錯誤率應該不會超過網絡A。可是我們現在能用到的方法都顯示達不到這樣的效果。

何愷明大神等人從恆等映射出發,並通過前人的工作中發現,如果將一個問題進行形式轉換,那么可能可以得到更容易的解決方法(如SVM中的對偶),也就是對問題進行重新定義或者預先條件約束,那么就能更容易解決這個優化問題。他們發明的殘差網絡,直接將之前的googlenet和vgg等不到40層的網絡直接提升到1000層(雖然大神實驗發現101的挺不錯),不過后續大家大多還是用着ResNet-101和ResNet-152這兩個。

1. ResNet

1.1 殘差學習

假設想要擬合的函數為\(H(x)\),我們用堆疊的非線性層網絡去擬合另一個函數\(F(x)=H(x)-x\),從而想要學習的函數可以表示成\(H(x)=F(x)+x\)。假如在極端情況下,恆等映射是最優的(即我們學習的函數就是一個恆等函數),那么,將殘差逼近到0(\(F(x)=0\))相比於只用堆疊非線性層的網絡去擬合恆等映射(\(H(x)=x\))要更容易。這是因為如果直接學習該函數,並不是那么容易(前人的大量實驗也證明了這點),可是如果學習的是殘差,那么網絡可以變得敏感起來,微小的擾動都能讓網絡產生較大的反映,即優化算法讓網絡中的權重都趨近於0從而達到恆等映射的目的。

圖1.1.1 殘差學習:一個構建塊
然而現實生活中,恆等映射並不是最優的。如果希望擬合的最優函數更像恆等函數(\(H(x)=x\))而不是0映射(\(F(x)=0\)),那么對於優化算法來說,找到擾動總比學習一個新函數要簡單。后續實驗也證實了ResNet通常有較小的響應,這表明恆等映射提供了對函數合理的預定義條件。

1.2 快捷連接

1 - feature map和通道維度相同時
\begin{align}
y=F(x,{W_i})+x \
\end{align}
這里\(x\)\(y\)分別對應輸入和輸出,函數\(F(x,{W_i})\)就是需要學的殘差映射,如果拿圖1.1.1舉例,那么\(F=W_2\sigma(W_1x)\),其中\(\sigma\)就是ReLU了。\(F+x\)就是一個快捷連接,並且是逐像素的,所以他們能夠計算的前提就是維度相同。而且該方法不需要引入新的參數

2 - 維度不同時

  • 1 - 采用維度相同時候的公式,只不過將不能匹配的部分用0填充;
  • 2 - 如下面式子:
    \begin{align}
    y=F(x,{W_i})+W_sx \
    \end{align}
    其中\(W_s\)可以看成是\(1*1\)的卷積形式(如64通道需要輸出x,連接到128通道上去)。

對於這2種方法,如果上下的feature map維度不同,那么采用stride的方式,如圖1.3.1,虛線的部分就是stride=2進行跳躍的
因為恆等映射已經足夠處理"退化"問題了,所以這里的\(W_s\)只是為了處理維度不匹配的問題而已(相對維度相同基礎上,這里引入的額外參數就是\(W_s\))。

作者並比較了3種不同的升維方式,如圖

圖1.2.1 不同的模型結果對比
圖1.2.1中,其中(A)表示用0擴展的方式來升維,此方法不增加額外的參數; (B) 在需要升維的部分使用\(W_s\)的方式,其他部分直連;(C) 都使用\(W_s\)的方式,且可以看出ABC都比沒有快捷連接的效果好,而C比B只好一點點,所以通過\(W_s\)的方式升維的並不是處理"退化"問題的最優選擇,所以為了時間復雜度和模型參數量(即尺度),后續都不再用C方法,從而在1.3部分,作者又設計出了瓶頸式構建塊。

1.3 網絡結構

如圖1.1.1所示,ResNet相比傳統的網絡的區別就是將某一層的輸出接着連接到后面的幾層,這其中可以跳2層,3層(1層的話就是個線性層,一點效果都沒了)。具體的網絡結構對比如下。

圖1.3.1 3種網絡結構:VGG;沒有殘差快捷連接的網絡;34層的ResNet網絡
如圖1.3.1所示,作者基於第二種模型基礎上,增加了殘差的快捷連接(ResNet網絡中黑色實線表示直接連接,虛線表示需要處理升維的問題),且在每個卷積層中卷積后,激活函數前放置BN層。

為了對模型訓練進行加速,作者對圖1.1.1的構建塊進行了重新設計,如圖1.3.2。

圖1.3.2,正常構建塊和瓶頸式構建塊
其中\(1*1\)的卷積就是負責先降維,然后升維的。可以看出這種方式特別適合使用1.2中,維度相同時候的快捷連接方案。如果將瓶頸式構建塊用1.2中維度不同時候的快捷連接方案,那么模型的復雜度和尺度都會翻倍。所以這種設計的構建塊更能加速網絡訓練和減少網絡尺度。

通過使用圖1.3.2的瓶頸式構建塊,作者設計出了不同層下的ResNet網絡結構,如圖1.3.3所示。

圖1.3.3 不同層下的ResNet網絡結構

ps:在不同數據集上,訓練也略微有點不同,如在cifar-10上訓練的時候,0.1開始的學習率太大了,模型不收斂,所以先設成0.01,然后在訓練了大約400次迭代的時候,再將學習率設成0.1
ps:順帶貼上不同層下的ResNet的神經元響應

圖1.3.4不同層下網絡的響應
從圖1.3.4中可以看出,越是深的ResNet就有越小的響應,而且越是深的Resnet,單層越是少的去修改信號。

參考文獻:

  1. [本文] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.
  2. [初始化] Y. LeCun, L. Bottou, G. B. Orr, and K.-R.M¨uller. Efficient backprop.In Neural Networks: Tricks of the Trade, pages 9–50. Springer, 1998.
  3. [初始化] X. Glorot and Y. Bengio. Understanding the difficulty of training deep feedforward neural networks. In AISTATS, 2010.
  4. [初始化] A. M. Saxe, J. L. McClelland, and S. Ganguli. Exact solutions to the nonlinear dynamics of learning in deep linear neural networks. arXiv:1312.6120, 2013.
  5. [初始化] K. He, X. Zhang, S. Ren, and J. Sun. Delving deep into rectifiers: Surpassing human-level performance on imagenet classification. In ICCV, 2015


免責聲明!

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



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