論文閱讀:ResNet(Deep Residual Learning for Image Recognition)

Original article can be found here (source): Deep Learning on Medium

論文閱讀:ResNet(Deep Residual Learning for Image Recognition)

論文

Introduciton

如果根據AlexNet、VGG等論文所言,CNN model的”深度”對於其performance極其重要,那麼做出一個更優秀的model,是否只要堆疊更多的convolution layer就沒問題了呢?答案很明顯並非那麼單純。

問題其一,是更深的CNN模型具有vanishing gradient的問題。對於這些問題,已經有許多解決方法被提出,舉凡normalized initialization,或者在network中implement normalization layers,都能有效的降低vanishing gradient的影響。

然而還有另一個問題。如下圖,我們可以觀察到,當使用更深的深度學習模型時,training error不降反增。顯然這狀況不是overfitting,因為不僅是testing error,training error同樣也因為層數的加深反而更高了。論文中這種狀況為”degradation”。

設想一個情境:現在你有一個淺層的網路A,如果往後堆疊許多identity mapping,理論上你能得到一個效果與A相同,深度更深的模型B,對吧? 然而經驗告訴我們,現實並不如我們所預期。

因此,論文提出了residual block的概念,如下圖

假設直接mapping input x的結果為H(x),則ResNet希望模型能學習到的是其殘差F(x)= H(x)−x,因此,只有F(x)會通過conv layer。這使得當殘差為0時,此時conv就像做了identity mapping。論文稱這條identity的路徑為”short cut”,short cut的設計使得Network的性能得以提升,並且不需要增加額外的參數。

Related Work

Deep Residual Learning

Residual Learning

論文認為,residual的學習(F(x))相對於直接學習整個output(H(x))更容易。從degradation的發生可以推測,由許多非線性單元組成的深度學習架構很難逼近indentity mapping。然而透過通過residual的學習,如果identity mapping是最佳解的,則模型只要將多個非線性層的權重設為零,便可以逼近identity mapping。

Identity Mapping by Shortcuts

在paper中,我們可以視一個buliding block如同以下公式:

y = F(x, {Wi}) + x.

x為input,y為output,F(x, {Wi})則表示一個residual mapping。F是可以有彈性,以Figure 2為例,F=W2σ(W1x) (σ表示ReLu function)。

Network Architectures

論文中測試了各種Plain/Residual Network,並觀察到了一致的現象,下面先簡單闡述論文中實驗的模型架構:

Plain Network:

啟發於VGG的架構,其conv layer主要由3×3的filter組成。並且遵循兩個規則

  1. 相同output尺寸的conv會有相同數量的filter
  2. 如果feature map的大小減半,則filter的數量也將增加一倍,以保持每層的時間複雜度。

downsampling會直接通過stride=2的conv layer完成。network的最後連接average pooling layer及一個1000個輸出的fully-connected layer + softmax。最後總共有34層。(如上圖中間)

值得一提的是,這個架構比起VGG有更少的filter/參數。

Residual Network:

如上圖右邊。基於plain network架構加入了shortcut。因為shortcut只能被用在input與output相同dimension的狀況下,因此shortcut使用了兩種選項:

  1. shortcut 只做identity mapping,其他多餘的地方就補0,好處是不用增加多餘的參數。
  2. 使用1×1 conv 使dimensions相同(映射)。

Implementation

(訓練細節略,基本上都是和AlexNet/VGG類似的概念。)

Experiments

在ImageNet 2012 classification dataset上測試模型

Plain Networks

論文首先測試18-layer 和 34-layer 的模型(模型的參數細節如上表)

可以看到,在plain network中,當把模型深度加深,反而error提高。追究其原因,從Figure4 左圖可以發現degradation的發生。

需注意問題並非是因為層數變多而發生vanishging gradient,網路是有使用BatchNorm 訓練的,可確保forward propagate具有non-zero variances。論文也驗證了在forward與backward上都沒有訊號的消失。

論文認為,問題應該是出在更深的網路具有極低的收斂速度。

Residual Networks

接下來我們來看看Residual Network的表現。(這邊對於input/output dimension不對應的狀況是採用zero-padding,因此不會增加多餘的參數)

可以看到error隨著網路加深可以變得更低(Table2),並且training error是會隨著epoch低於validation error的(Fig. 4)。也就是說,透過residual block的使用可以有效地降低degradation的發生。

Identity vs. Projection Shortcuts

從上一個實驗我們可以看到,使用identity mapping + zero-padding(如果input/output dimension不同)方式的short cut就足以使模型的表現變好。這裡論文嘗試了三種方案的short cut做實驗:

( A ) identity mapping + zero-padding shortcut(同上面的方法)
( B ) 對於input/output dimension有差異的使用映射的short cut,其他則維持identity mapping
( C ) 所有short cut 都使用映射

實驗結果則如下表:

可以看到B的方法是大於A的,論文認為這是因為被zero-padding的部分在網路中是不會被模型學習的。
而C方法又大於B,然而考慮到使用更多的映射就必須增加更多的參數,因此論文中最終的模型是沒有採用C作法的。

Deeper Bottleneck Architectures.

除了增加準確度之外,模型的時間複雜度無疑的也是需要考量的部分。論文往下提出了可以節省參數的架構”Bottleneck”。

如上圖右,bottleneck block使用了三層的架構取代原本的2層架構。其中1×1 layers被用來降維及增維。透過bottleneck block,可以堆疊出與使用residual block相同時間複雜度,但是層數更深的network架構。

在50/101/152-layer ResNets中,bottleneck架構都被使用。

Comparisons with State-of-the-art Methods

如圖,可以看到ResNet達到超過當時state-of-art的方法。

Conclusion

ResNet的貢獻在於提出解決”Degradation”的方法,透過short cut使CNN Network可以變得更深。因為ResNet的概念的成功,許多Deep learning上也常看到使用residual block來提升performance的技巧。

Reference

深度學習入門教程:經典CNN網絡ResNet的原理分析與TensorFlow實現

Review: ResNet — Winner of ILSVRC 2015