Deep Residual Learning for Image Recognition 筆記
轉載於部落格
http://blog.csdn.net/cv_family_z/article/details/50328175
http://blog.csdn.net/u014114990/article/details/50505331
CVPR2016
https://github.com/KaimingHe/deep-residual-networks
這是微軟方面的最新研究成果, 在第六屆ImageNet年度影象識別測試中,微軟研究院的計算機影象識別系統在幾個類別的測試中獲得第一名。
本文是解決超深度CNN網路訓練問題,152層及嘗試了1000層。
隨著CNN網路的發展,尤其的VGG網路的提出,大家發現網路的層數是一個關鍵因素,貌似越深的網路效果越好。但是隨著網路層數的增加,問題也隨之而來。
首先一個問題是 vanishing/exploding gradients,即梯度的消失或發散。這就導致訓練難以收斂。但是隨著 normalized initialization [23, 9, 37, 13] and intermediate normalization layers[16]的提出,解決了這個問題。
當收斂問題解決後,又一個問題暴露出來:隨著網路深度的增加,系統精度得到飽和之後,迅速的下滑。讓人意外的是這個效能下降不是過擬合導致的。如文獻 [11, 42]指出,對一個合適深度的模型加入額外的層數導致訓練誤差變大。如下圖所示:
如果我們加入額外的 層只是一個 identity mapping,那麼隨著深度的增加,訓練誤差並沒有隨之增加。所以我們認為可能存在另一種構建方法,隨著深度的增加,訓練誤差不會增加,只是我們沒有找到該方法而已。
這裡我們提出一個 deep residual learning 框架來解決這種因為深度增加而導致效能下降問題。 假設我們期望的網路層關係對映為 H(x), 我們讓 the stacked nonlinear layers 擬合另一個對映, F(x):= H(x)-x , 那麼原先的對映就是 F(x)+x。 這裡我們假設優化殘差對映F(x) 比優化原來的對映 H(x)容易。
F(x)+x 可以通過shortcut connections 來實現,如下圖所示:
2 Related Work
Residual Representations
以前關於殘差表示的文獻表明,問題的重新表示或預處理會簡化問題的優化。 These methods suggest that a good reformulation or preconditioning can simplify the optimization
Shortcut Connections
CNN網路以前對shortcut connections 也有所應用。
3 Deep Residual Learning
3.1. Residual Learning
這裡我們首先求取殘差對映 F(x):= H(x)-x,那麼原先的對映就是 F(x)+x。儘管這兩個對映應該都可以近似理論真值對映 the desired functions (as hypothesized),但是它倆的學習難度是不一樣的。
這種改寫啟發於 圖1中效能退化問題違反直覺的現象。正如前言所說,如果增加的層數可以構建為一個 identity mappings,那麼增加層數後的網路訓練誤差應該不會增加,與沒增加之前相比較。效能退化問題暗示多個非線性網路層用於近似identity mappings 可能有困難。使用殘差學習改寫問題之後,如果identity mappings 是最優的,那麼優化問題變得很簡單,直接將多層非線性網路引數趨0。
實際中,identity mappings 不太可能是最優的,但是上述改寫問題可能對問題提供有效的預先處理 (provide reasonable preconditioning)。如果最優函式接近identity mappings,那麼優化將會變得容易些。 實驗證明該思路是對的。
3.2. Identity Mapping by Shortcuts
A building block
公式定義如下:
這裡假定輸入輸出維數一致,如果不一樣,可以通過 linear projection 轉成一樣的。
3.3. Network Architectures
Plain Network 主要是受 VGG 網路啟發,主要採用3*3濾波器,遵循兩個設計原則:1)對於相同輸出特徵圖尺寸,卷積層有相同個數的濾波器,2)如果特徵圖尺寸縮小一半,濾波器個數加倍以保持每個層的計算複雜度。通過步長為2的卷積來進行降取樣。一共34個權重層。
需要指出,我們這個網路與VGG相比,濾波器要少,複雜度要小。
Residual Network 主要是在 上述的 plain network上加入 shortcut connections
3.4. Implementation
針對 ImageNet網路的實現,我們遵循【21,41】的實踐,影象以較小的邊縮放至[256,480],這樣便於 scale augmentation,然後從中隨機裁出 224*224,採用【21,16】文獻的方法。
4 Experiments
目錄
————————————
1. Motivation
2. 網路結構
3. 實驗結果
4. 重要reference
1. Motivation
作者首先丟擲了這個問題, 深度神經網路是不是越深越好。
照我們一般的經驗,只要網路不訓飛(也就是最早在LSTM中提出的vanishing/exploding problem),而且不過擬合, 那應該是越深越好。
但是有這麼個情況,網路加深了, accuracy卻下降了,稱這種情況為degradation。如下圖所示(詳見[1]):
Cifar-10 上的training/testing error. 網路從20層加到56層,error卻上升了。
按理說我們有一個shallow net,在不過擬合的情況下再往深加幾層怎麼說也不會比shallow的結果差,所以degradation說明不是所有網路都那麼容易優化,這篇文章的motivation就是通過“deep residual network“解決degradation問題。
2. 網路結構
Shortcut Connections
其實本文想法和Highway networks(Jurgen Schmidhuber的文章)非常相似, 就連要解決的問題(degradation)都一樣。Highway networks一文借用LSTM中gate的概念,除了正常的非線性對映H(x, Wh)外,還設定了一條從x直接到y的通路,以T(x, Wt)作為gate來把握兩者之間的權重,如下公式所示:
shortcut原意指捷徑,在這裡就表示越層連線,就比如上面Highway networks裡從x直接到y的連線。其實早在googleNet的inception層中就有這種表示:
Residual Networks一文中,作者將Highway network中的含參加權連線變為固定加權連線,即
Residual Learning
至此,我們一直沒有提及residual networks中residual的含義。那這個“殘差“指什麼呢?我們想:
如果能用幾層網路去逼近一個複雜的非線性對映H(x),那麼同樣可以用這幾層網路去逼近它的residual function:,但我們“猜想“優化residual mapping要比直接優化H(x)簡單。
推薦讀者們還是看一下本文最後列出的這篇reference paper,本文中作者說與Highway network相比的優勢在於:
x | Highway Network | Residual Network | 評論 |
---|---|---|---|
gate引數 | 有引數變數 | 沒引數,定死的, 方便和沒有residual的網路比較 | 算不上優勢,引數少又data-independent,結果肯定不會是最優的,文章實驗部分也對比了效果,確實是帶引數的error更小,但是這個變數與解決degradation問題無關 |
關門? | 有可能關門() | 不會關門 | , 但一般不會為0 |
所以說這個比較還是比較牽強。。anyway,人家講個故事也是不容易了。
34層 residual network
網路構建思路:基本保持各層complexity不變,也就是哪層down-sampling了,就把filter數*2, 網路太大,此處不貼了,大家看paper去吧, paper中畫了一個34層全卷積網路, 沒有了後面的幾層fc,難怪說152層的網路比16-19層VGG的計算量還低。
這裡再講下文章中講實現部分的tricks:
- 圖片resize:短邊長random.randint(256,480)
- 裁剪:224*224隨機取樣,含水平翻轉
- 減均值
- 標準顏色擴充[2]
- conv和activation間加batch normalization[3]
幫助解決vanishing/exploding問題 - minibatch-size:256
- learning-rate: 初始0.1, error平了lr就除以10
- weight decay:0.0001
- momentum:0.9
- 沒用dropout[3]
其實看下來都是挺常規的方法。
3. 實驗結果
-
34層與18層網路比較:訓練過程中,
34層plain net(不帶residual function)比18層plain net的error大
34層residual net(不帶residual function)比18層residual net的error小,更比34層plain net小了3.5%(top1)
18層residual net比18層plain net收斂快 -
Residual function的設定:
A)在H(x)與x維度不同時, 用0充填補足
B) 在H(x)與x維度不同時, 帶
C)任何shortcut都帶
loss效果: A>B>C
4. 重要reference
[1].Highway Networks
[2].ImageNet Classification with Deep Convolutional Neural Networks
[3].Batch Normalization
[4].VGG