1. 程式人生 > >ResNet V1 vs V2詳解

ResNet V1 vs V2詳解

最近看李沐的gluon課程提到了conv、bn、relu等的順序問題,現將resnet v1和v2總結如下。

首先給出resnet v2的paper裡面kaiming大神給出的不同的結構對比:

圖a為resnet v1的結構,圖e為resnet v2的結構。(weight為conv層),左分支為identity分支,右分支為residual分支。

圖的結構有兩個特點:1、conv-bn-relu;2、最後的relu在addition後面,這麼為什麼這麼做呢,下面我將一一講解。

如果我們把relu作為residual分之的結尾,即圖c所示,這樣做會導致該分之經過relu後永遠為非負值,這樣在做forward的時候輸入會單調遞增,從而影響該層的表達能力,所以我們希望resdiual分支的結果應該為R。如果按照圖c這樣的做法,導致bn改變了分支的分佈。

如果按照圖b的做法,這裡bn改變了identity的分支的分佈,影響了資訊的分佈,在訓練的時候會阻礙loss的下降,導致不能優化。

那麼為什麼identity分支的改變會影響其資訊傳遞從而影響訓練呢?下面的推導可以很好的解釋這個問題。

根據上面的推導可以看出:如果identity改變,即導致h(x) != x,不管是左relu還是做線性對映變換(h(x)=ax),都會導致資訊傳遞問題,詳細的說明見上面的推導。

總結:圖b(bn after addition):效果差,因為bn在addition後會改變分佈,影響傳遞,會出現的現象就是訓練初期誤差下降緩慢。

圖c(relu bafore addition):這樣做或導致residual分支的分佈為非負,會影響模型的表達能力。

圖d和圖e有兩個特點:1、f為恆等變換,整個網路更易於優化;2、使用bn作為預啟用函式可以加強對模型的正則化。