ResNet網絡,本文獲得2016 CVPR best paper,獲得了ILSVRC2015的分類任務第一名。
本篇文章解決了深度神經網絡中產生的退化問題(degradation problem)。什么是退化問題呢?如下圖:
上圖所示,網絡隨着深度的增加(從20層增加到56層),訓練誤差和測試誤差非但沒有降低,反而變大了。然而這種問題的出現並不是因為過擬合(overfitting)。
照理來說,如果我們有一個淺層的網絡,然后我們可以構造一個這樣的深層的網絡:前面一部分的網絡和淺層網絡一模一樣,后面一部分的網絡采用恆等映射(identity mapping),那么,深層網絡的產生的誤差至少不會比淺層網絡的高。但是目前卻不能找到一個更好的方法比用剛才的方法構造的網絡效果要好。
於是,作者就提出了deep residual learning framework。結構如下:
其實就是在原來網絡的基礎上,每隔2層(或者3層,或者更多,這篇文章作者只做了2層和3層)的輸出F(x)上再加上之前的輸入x。這樣做,不會增加額外的參數和計算復雜度,整個網絡也可以用SGD方法進行端對端的訓練,用目前流行的深度學習庫(caffe等)也可以很容易的實現。
這種網絡的優點有:
1) 更容易優化(easier to optimize)
2) can gain accuracy from increased depth,即能夠做到網絡越深,准確率越高
對於作者提出的網絡結構,有2種情形。
1) 當F和x相同維度時,直接相加(element-wise addition),公式如下:
這種方法不會增加網絡的參數以及計算復雜度。
2) 當F和x維度不同時,需要先將x做一個變換(linear projection),然后再相加,公式如下:
Ws僅僅用於維度匹配上。
對於x的維度變換,一種是zero-padding,另一種是通過1x1的卷積。
網絡結構
測試網絡如下:
基准網絡為:基於VGGNet,采用的卷積核為3x3,其中有兩個設計原則,1)對於有相同的輸出feature map尺寸,filter的個數相同;2)當feature map尺寸減半時,filter的數量加倍。下采樣的策略是直接用stride=2的卷積核。網絡最后末尾是一個global average pooling layer(不需要參數,參考http://www.cnblogs.com/hejunlin1992/articles/7750759.html)和一個1000的全連接層(后面接softmax)。
殘差網絡為:在基准網絡的基礎上,插入了shortcut connections。當輸入輸出具有相同尺寸時,identity shortcuts可以直接使用(實線部分),就是公式1;當維度增加時(虛線部分),有以下兩種選擇:A)仍然采用恆等映射(identity mapping),超出部分的維度使用0填充;B) 利用1x1卷積核來匹配維度,就是公式2。對於上面兩種方案,當shortcuts通過兩種大小的feature map時,采取A或B方案的同時,stride=2。
實現細節:
Our implementation for ImageNet follows the practice in [21, 41]. The image is resized with its shorter side randomly sampled in [256, 480] for scale augmentation [41]. A 224×224 crop is randomly sampled from an image or its horizontal flip, with the per-pixel mean subtracted [21]. The standard color augmentation in [21] is used. We adopt batch normalization (BN) [16] right after each convolution and before activation, following [16]. We initialize the weights as in [13] and train all plain/residual nets from scratch. We use SGD with a mini-batch size of 256. The learning rate starts from 0.1 and is divided by 10 when the error plateaus, and the models are trained for up to 60 × 104 iterations. We use a weight decay of 0.0001 and a momentum of 0.9. We do not use dropout [14], following the practice in [16]. In testing, for comparison studies we adopt the standard 10-crop testing [21]. For best results, we adopt the fullyconvolutional form as in [41, 13], and average the scores at multiple scales (images are resized such that the shorter side is in {224, 256, 384, 480, 640}).
實驗
從上圖左邊,可以看出,plain-34網絡不管是訓練誤差還是驗證集上的誤差,都要比plain-18要大,由於plain網絡采用了BN來訓練,並且作者也驗證過前向傳播或者反向傳播中,信號並沒有消失,因此說明出現了退化現象(到底為什么會出現這種情況,作者也還在研究之中)。
再看上圖右邊的殘差網絡,結合下面的表2,34層的resNet比18層的resNet在訓練集和驗證集上的誤差都要小,說明並沒有出現退化現象。34層的resNet與34層的plain網絡相比,誤差減少了3.5%,說明在深度網絡中殘差學習是有效的。另外,18層的ResNet與18層的plain網絡相比,18層的ResNet訓練更快了。
Identity vs. Projection Shortcuts.
上面展示了,恆等映射(identity shortcuts)可以幫助訓練。下面我們測試一下projection shortcuts(公式2)的效果。有3種測試方案。A)當維度增加時,使用zero-padding shortcuts,這些所有的shortcuts是沒有參數的(與Table2和Fig4右側的圖一致);B) projection shortcuts只用於維度增加的情況,其他情況(輸入輸出維度一致時)還是使用恆等映射(即公式1);C)所有的shortcus都是projection(即公式2)。測試結果如下表:
從上表中可以看出,方案A,B和C的效果都要比plain-34要好。B比A稍微好一點,這是因為A的用零填充的那幾個維度沒有進行殘差學習。C要B好的多,這是因為引入了額外的參數。但是總體上A,B和C的差別還是比較小的,說明projection shortcuts在解決退化問題中並不是十分重要。因此,為了減少參數和計算量,我們在這篇文章中不使用方案C。
Deeper Bottleneck Architectures
下面描述用於ImageNet的更深的網絡結構。考慮到訓練時間,我們將下圖中左側的網絡改成右側的網絡。1x1的卷積的作用是減少和增加(恢復)維度,使得3x3的卷積核的個數可以減少。
50-layer ResNet
將34層中的每個2-layer block替換為3-layer bottleneck block,就得到了一個50層的ResNet。我們使用B方案來增加維度。
101-layer and 152-layer ResNets
我們使用更多的3-layer bottleneck block,就得到了101層和152層的ResNet。152層的網絡深度很深,但是參數量卻比VGG16/19要小。
模型之間的比對
如下圖所示,下圖中的ResNet是使用多個不同深度的ResNet,綜合結果而成的,效果非常好。