1. 程式人生 > >影象識別的深度殘差學習Deep Residual Learning for Image Recognition

影象識別的深度殘差學習Deep Residual Learning for Image Recognition

原論文:Deep Residual Learning for Image Recognition

作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun (Microsoft Research)

時間:Dec 2015

本文的大部分觀點來自於這篇論文,並且加入了一些自己的理解。該部落格純屬讀書筆記。

神經網路的深度加深,帶來的其中一個重要的問題就是梯度的消失和發散(vanishing/exploding gradients),它會導致深層的網路引數得不到有效的校正訊號或者使得訓練難以收斂,通過歸一化或者之前提到的BN方法可以得到有效的緩解。但是當我們將神經網路的深度繼續加深期望獲得更好的輸出時,我們意外地發現事實並不是我們想的那樣:隨著深度加深,網路的準確度趨向於飽和了,然後當我們繼續加深網路,網路的準確度居然降低了,並且出現這種問題並不是因為過擬合導致的。如圖1所示。56層的網路比20層的網路準確度還低。

圖1

這是我們在訓練神經網路是會遇到的一個優化的難題,即隨著網路層數不斷加深,求解器不能找到解決的途徑,反而導致準確率下降。

Residual Network

文章提出的解決辦法就是使用殘差網路結構來代替原來的非線性網路結構。 假設現在有一個淺層的神經網路,具有比較理想的輸出結果,現在我們在這個神經網路的後邊再加幾層得到一個新的神經網路,我們發現輸出結果的準確度反而下降了。這是不合理的,因為如果我們後邊加上的那幾層對應的輸入輸出關係都是恆等的( identity mapping),至少新的深層神經網路也能和舊的神經網路的效能持平才對。但是,實驗的結果表明現在的求解方法並不能得到理想的結果。 這是我們目前遇到的一個優化的難題,就是隨著網路層數不斷加深,求解器不能找到正確的解決途徑。 所以文章提出了一種深度殘差學習(Deep Residual Learning)的方法。圖一(圖片來自何凱明的深度殘差網路PPT)是以往的神經網路使用的非線性函式。
圖一
H(x)是任何一種理想的對映,我們希望圖一的兩層中的權值能夠得到調整以適應H(x),但是前面已經說了,隨著層數加深,求解器很難找到正確的求解途徑。所以文章提出了深度殘差學習的方法,如圖二,圖三(圖片來自何凱明的深度殘差網路PPT)所示。 圖2
圖三
這裡H(x)仍然是一種理想的對映,但是我們在這裡不調整stacked layers的權值去適應H(x),而是適應另外一個F(x),然後讓H(x) = F(x) + x, x在這裡是stacked layers的輸入。之所以這麼做是基於這樣一個先驗條件:就是在深層的神經網路完成的是一種恆等對映,或者是一種接近於恆等的對映。這樣,我們stacked layers中的權值就更容易得到調整了。如PPT上說的,如果說恆等是理想,很容易將權重值設定為0;如果理想化對映更接近於恆等對映,便更容易發現微小波動。
這個時候stacked layers的輸出不是傳統神經網路當中輸入的對映,而是對映和輸入的疊加。通過如圖所示的shortcut connections,我們可以很容易的實現這種對映。 We hypothesize that it is easier to optimize the residual mapping than to optimize the original, unreferenced mapping. To the extreme, if an identity mapping were optimal, it would be easier to push the residual to zero than to fit an identity mapping by a stack of nonlinear layers.

Identity Shortcuts

前面也講了 identity shortcuts 的作用,在實際應用中,如果輸入輸出的維度不同(CNN中比較常見)則需要對其進行適當變形,簡單一點的方法就是對額外多出來的維度用零值填充,文章給出另外一種更合理的方法。公式如圖四所示。圖四 文章通過對VGG nets做適當的改進弄了一個Plain Netwrok作為Baseline,然後與34層的Residual Network做比較。其中的很多地方就需要提高維度,使用1*1的卷積核就可以實現,此外還需要注意卷積的步幅需要一致。

Experiments

通過對比實驗證明了殘差學習的效果。如圖五所示。 圖五
實驗還比較了三種projection shortcuts的實驗效果。 A:零值填充,沒有附加引數 B:維度上升時使用projection shortcuts,附加引數較少 C:all shortcuts are projections,附加引數很多 實驗結果如圖六所示。 圖六
B比A效果提高了很多,C比B效果略微提高了一些。因為projection shortcuts並不是解決degradation problem的關鍵,所以文章選擇B作為後續實驗的網路的構建方式。這樣可以減少引數,從而使得網路深度可以更深。

Deeper Bottleneck Architectures

文章提出了使用三層的building block來代替兩層的building block,達到減少引數的目的。如圖七所示。圖七 採用三層的building block可以使得引數減少大約一半,並且網路層數還增加了。這樣可以使得網路深度得到很大的提升而引數量卻沒有太大的變化。