ResNet 筆記

ResNet筆記

ResNet在2015年被Kaiming He等人提出,在ImageNet比賽classification任務上獲得第一名,因爲它“簡單與實用”並存,之後很多方法都建立在ResNet50或者ResNet101的基礎上完成的,檢測,分割,識別等領域都紛紛使用ResNet。下面我們從實用的角度去看看ResNet。

該ResNet是針對隨着網絡深度的加深,出現的 “degradation problem”(網絡退化問題)而提出的。

隨着網絡的加深,首先出現的問題就是梯度消失問題,但隨之被 batch normalization 解決。那加了BN層之後再加深,網絡性能是不是就更高了呢?錯!作者在論文中說:通過試驗證明,當隨着網絡的加深,正確率達到一定程度之後,不增反降。這時就出現了“網絡退化問題”。
這裏寫圖片描述

作者做了這樣的試驗,先訓練一個淺層網絡A,然後在已經訓練過的A的後面添加若干個identity mapping,得到深層網絡B。那麼,理論情況下,B的訓練誤差應該小於等於網絡A的,但是實際上,B的訓練誤差高於A的訓練誤差。(其實這裏我有個拿不準的問題,論文中說的identity mapping指的是什麼?我的理解:identity mapping 就是沒有卷積操作只有激活函數)
結論:這種下降即不是梯度消失引起的也不是overfit造成的,而是由於網絡過於複雜,不是所有的網絡都容易優化。以至於光靠不加約束的放養式的訓練很難達到理想的錯誤率。degradation problem不是網絡結構本身的問題,而是現有的訓練方式不夠理想造成的。當前廣泛使用的訓練方法,無論是SGD,還是AdaGrad,還是RMSProp,都無法在網絡深度變大後達到理論上最優的收斂結果。

那麼,殘差網絡是如何進行學習的呢
這裏寫圖片描述
殘差網絡中,殘差塊的具體形式如上圖所示。右側多出來的連接稱之爲:Identity shortcut connection。假定在原始形式的兩層卷積是爲了學習H(x)函數,那麼現在殘差塊中,H(x) = F(x) + x,殘差塊的目的是爲了學習F(x)。
殘差塊的計算形式:
當輸入feature mapping與殘差塊輸出的feature的寬高一樣時:output = relu(F(x) + x) ,
當輸入feature mapping與殘差塊輸出的feature的寬高不同時:output = relu(F(x) + Wx)
其中F(x) = bn( conv( layer1(x) ) ) , layer1(x) = relu( bn( conv(x) ) )
第二種情況,identity mapping 對輸入 feature mapping 做了卷積操作,爲了縮小feature mapping 大小。

那麼爲什麼將傳統卷積改編成殘差塊,網絡加深,不會出現網絡退化問題呢?
就像之前所說的小實驗,在淺層網絡中增加 identity mapping,並沒有降低網絡的訓練誤差,反而增大,即出現了網絡衰退的現象。那麼“網絡衰退現象”也就表明了網路很難通過multiple nonlinear layers 去近似擬合一個identity mapping。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章