殘差網絡

NO IMAGE

殘差網絡

殘差網絡(Residual Network簡稱ResNet)是在2015年繼Alexnet Googlenet VGG三個經典的CNN網絡之後提出的,並在ImageNet比賽classification任務上拔得頭籌,ResNet因其簡單又實用的優點,現已在檢測,分割,識別等領域被廣泛的應用。
    ResNet可以說是過去幾年中計算機視覺和深度學習領域最具開創性的工作,有效的解決了隨著網絡的加深,出現了訓練集準確率下降的問題,如下圖所示:

殘差網絡
殘差網絡

Fig. 1
  圖中56層的普通神經網絡在訓練集上的表現明顯的比20層的差很多,從而導致在測試集上的表現也相對較差。

做過深度學習的同學應該都知道,隨著網絡層數的增加而導致訓練效果變差的一個原因是梯度彌散和梯度爆炸問題(vanishing/exploding gradients),這個問題抑制了淺層網絡參數的收斂。但是這個問題已經通過一些參數初始化的技術較好的解決了,有興趣的同學可以看下以下幾篇文章[2][3][4][5][6]。
但是即便如此,在網絡深度較高的時候(例如圖中的56層網絡)任然會出現效果變差的問題,我們在先前的Alexnet Googlenet VGG三個模型中可以看出,網絡的深度在圖片的識別中有著至關重要的作用,深度越深能自動學習到的不同層次的特徵可能就越多,那到底是什麼原因導致了效果變差呢?
ResNet的提出者做出了這樣的假設:如果一個深層的網絡在訓練的時候能夠訓練成一個淺層的網絡加上一堆恆等映射的網絡,那這樣的得到的深層網絡在訓練的誤差上是不會比這個淺層的網絡還要高的,所以問題的根源可能在於當網絡深度較深的時候,多層的非線性的網絡在擬合恆等映射的時候遇到了困難,於是就提出了一種“短路”(shortcut connections)的模型來幫助神經網絡的擬合,如下圖所示:

殘差網絡

     Fig. 2
假設

殘差網絡

是我們最終要擬合的函數,則令 

殘差網絡

 其中

殘差網絡

代表普通的堆疊起來的網絡擬合出來的函數,

殘差網絡

 是輸入,普通網絡的激活函數用的是ReLU函數。非常簡單的一個結構,整個網絡就是普通網絡加上一個恆等映射,普通網絡只是整個網絡的一部分(

殘差網絡

),這也是 Residual (剩餘的)名字的由來。由上述結構可以得到公式:

殘差網絡

                                                           

殘差網絡

這裡的 

殘差網絡

 是輸出,

殘差網絡

 是輸入,

殘差網絡

 是圖中“短路”的起點和終點之間的網絡所要擬合的函數,

殘差網絡

是第 

殘差網絡

 層的係數矩陣。圖中是用的普通的網絡,但對於卷積網絡這種結構也同樣適用。對於這個公式需要注意的 一點是這裡的輸入和輸出可能是不同維度的,需要用一個線性映射解決這個問題:
                                           

殘差網絡

                                                      

殘差網絡

這裡 

殘差網絡

 也是係數矩陣。
下面我們來看作者設計的34層ResNet的結構與VGG網絡結構的對比(參加比賽使用的網絡達到了152層):

殘差網絡

Fig. 3
左側19層的VGG模型的計算量是 19.6 billion FLOPs 中間是34層的普通卷積網絡計算量是3.6 billion FLOPs
右邊是34層的ResNet計算量是3.6billion FLOPs,圖中實線的箭頭是沒有維度變化的直接映射,虛線是有維度變化的映射。通過對比可以看出VGG雖然層數不多但是計算量還是很大的,後面我們可以通過實驗數據看到34層的ResNet的表現會比19層的更好。
更詳細的結構如下圖所示(包括一些層數更多的ResNet):

殘差網絡

Fig. 4

殘差網絡雖然在結構和原理上都非常簡單,但表現不俗且解決了隨著深度增加效果變差的問題,下面是實驗數據:

殘差網絡

                                                                            Fig. 5
這是普通網絡(左)和殘差網絡(右)的對比,圖中細線代表訓練誤差,粗線代表檢驗誤差,藍色是18層,紅色是34層。從圖中可以看出普通網絡是存在較深的網絡比淺的網絡效果差的問題,而殘差網絡卻是層數越高效果越好。

殘差網絡

Fig. 6
這是殘差網絡,VGG和GoogleNet在ImageNet數據集上的測是數據,top-1 err表示1000種類別中分類錯誤的概率,top-5 err 表示1000種類別中網絡得出的最有可能的5種類別中任然沒有正確類別的概率。圖中34層A,B,C是指上文提到的輸入輸出維度不一致問題中當卷積層之間維度變高的時候採取的三種方案,A是將所有增加的維度都用0填充。(zero-padding)B 是保持原始輸入,增加的維度用線性映射填充。C 是將所有的輸入都進行線性映射再加到輸出中。
從圖中可以看出在效果上,34層的殘差網絡比VGG和GoogleNet都要好,A,B,C三種方案中C方案效果最好,但是B,C方案在計算量上比A方案要大很多,而效果提升的又很少,所以論文作者建議還是使用A方案較為實用。
下面我們介紹層數在50及以上的殘差網絡的結構: Deeper Bottleneck Architectures。這種結構是作者為了降低訓練時間所設計的,結構對比如下圖所示:

殘差網絡

Fig. 7
圖中左邊是34層ResNet使用的普通的結構,右邊是50層及以上的所使用的瓶頸(Bottleneck)結構,
這裡的瓶頸結構中有兩個1X1但通道數分別為64和256,第一個是將256通道的輸入降維到64通道,第二個是將64通道升維到256通道。中間是普通的3X3的卷積網絡,最後整體的計算量與左邊的相近。這樣的結構的好處是在卷積的同時就完成了維度上的適應,輸入可以直接加到輸出上,這樣可以讓計算量減少一半之多。在圖5中有50層網絡的整個結構,總共的計算量為 3.8 billion FLOPs 只比34層的多0.2 個billion。
同樣的在圖4和圖5中可以看出101層和152層的殘差網絡也用這種結構在計算量上比16層的VGG還要少,而在準確度上比VGG高出許多。

總結:

ResNet通過殘差學習解決了深度網絡的退化問題,讓我們可以訓練出更深的網絡,這稱得上是深度網絡的一個歷史大突破吧。也許不久會有更好的方式來訓練更深的網絡,讓我們一起期待吧!
目前,您可以在人工智能建模平臺 Mo 找到基於tensorflow 的34層的殘差網絡(ResNet)實現樣例,數據集是CIFAR-10 (CIFAR的十分類數據集),這個樣例在測試集上的精度為90%,驗證集上的精度為98%。主程序在ResNet_Operator.py中,網絡的Block結構在ResNet_Block.py中,訓練完的模型保存在results文件夾中。
項目源碼地址:momodel.cn/explore/5d1…

參考文獻:
[1] K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. arXiv preprint arXiv:1512.03385,2015.
[2] Y. LeCun, L. Bottou, G. B. Orr, and K.-R.M¨uller. Efficient backprop.In Neural Networks: Tricks of the Trade, pages 9–50. Springer, 1998.
[3] X. Glorot and Y. Bengio. Understanding the difficulty of training deep feedforward neural networks. In AISTATS, 2010.
[4] A. M. Saxe, J. L. McClelland, and S. Ganguli. Exact solutions to the nonlinear dynamics of learning in deep linear neural networks.arXiv:1312.6120, 2013.
[5] K. He, X. Zhang, S. Ren, and J. Sun. Delving deep into rectifiers:Surpassing human-level performance         on imagenet classification. In ICCV, 2015.
[6] S. Ioffe and C. Szegedy. Batch normalization: Accelerating deep network training by reducing internal covariate shift. In ICML, 2015.

關於我們

Mo(網址:momodel.cn)是一個支持 Python 的人工智能在線建模平臺,能幫助你快速開發、訓練並部署模型。


Mo 人工智能俱樂部 是由網站的研發與產品設計團隊發起、致力於降低人工智能開發與使用門檻的俱樂部。團隊具備大數據處理分析、可視化與數據建模經驗,已承擔多領域智能項目,具備從底層到前端的全線設計開發能力。主要研究方向為大數據管理分析與人工智能技術,並以此來促進數據驅動的科學研究。

目前俱樂部每週六在杭州舉辦以機器學習為主題的線下技術沙龍活動,不定期進行論文分享與學術交流。希望能匯聚來自各行各業對人工智能感興趣的朋友,不斷交流共同成長,推動人工智能民主化、應用普及化。

殘差網絡

相關文章

交通量預測——極端情況下的預測算法

使用Seq2Seq實現中英文翻譯

電商購物評論的情感分析

積神經網絡GoogLeNet