從AlexNet[1]在2012年的LSVRC分類大賽中取得勝利之后,“深度殘差網絡[2]”可以稱得上是近年來計算機視覺(或深度學習)領域中具開創性的工作了。ResNet的出現使上百甚至上千層的神經網絡的訓練成為可能,并且訓練的成果也是可圈可點的。
利用ResNet強大的表征能力,不僅是圖像分類,而且很多其他計算機視覺應用(比如物體檢測和面部識別)的性能都得到了極大的提升。
自從ResNet在2015年震驚學術界產業界后,許多研究界的專家人員就開始探究其背后的成功之道了,研究人員也對ResNet的結構做了很多改進。這篇文章分為兩部分,在部分我會為那些對ResNet不熟悉的讀者們重溫一下這個創新型的工作,而在第二部分我則會簡單介紹近我讀過的一些關于ResNet的解讀及其變體的論文。
重溫ResNet
根據無限逼近定理(Universal Approximation Theorem),我們知道,只要有足夠的容量,一個單層的“前饋神經網絡”就已經足以表示任何函數了。但是,這個層可能會非常龐大,所以網絡很容易會出現過擬合的問題。對此,學術界有一個常見的做法——讓我們的網絡結構不斷變深。
自AlexNet以來,state-of-the-art的CNN結構都在不斷地變深。VGG[3]和GoogLeNet[4]分別有19個和22個卷積層,而AlexNet只有5個。
然而,我們不能通過簡單地疊加層的方式來增加網絡的深度。梯度消失問題的存在,使深度網絡的訓練變得相當困難。“梯度消失”問題指的是即當梯度在被反向傳播到前面的層時,重復的相乘可能會使梯度變得無限小。因此,隨著網絡深度的不斷增加,其性能會逐漸趨于飽和,甚至還會開始下降。
在ResNet出現之前,研究人員們發現了幾個用于處理梯度消失問題的方法,比如,[4]在中間層添加輔助損失(auxiliary loss)作為額外的監督。但沒有一種方法能夠一次性徹底解決這一問題。
ResNet的基本思想是引入了能夠跳過一層或多層的“shortcut connection”,如上圖所示。
[2]的作者認為,增加網絡的層不應該降低網絡的性能,因為我們可以將“恒等變換(identity mapping)”簡單地疊加在網絡上,而且所得到的輸出架構也會執行相同的操作。這就暗示了更深層的模型的訓練錯誤率不應該高于與之對應的淺層模型。他們還作出了這樣的假設:讓堆疊的層適應一個殘差映射,與讓它們直接適應所需的底層映射相比要簡單一些,上圖所示的殘差塊能夠明確地使它完成這一點。
ResNet并不是個利用shortcut connection的,Highway Network[5]引入了“gated shortcut connection”,其中帶參數的gate控制了shortcut中可通過的信息量。類似的做法也存在于LSTM[6]單元里,在LSTM單元中也有一個forget gate來控制著流入下一階段的信息量。因此,ResNet可以被看作是HighwayNetwork的一個特例。
然而實驗結果顯示,Highway Network的表現并不比ResNet要出色。這個結果似乎有些奇怪,因為Highway Network的解空間(solution space)中包含了ResNet,所以它的性能表現按理來說應該要比ResNet好的。這就表明保持這些“梯度高速路”的暢通可能比追求更大的解空間更重要。
照著這一想法,文章的作者們進一步完善了殘差塊,并且提出了一個殘差塊的pre-activation變體,梯度可以在這個變體中通過shortcut無阻礙地傳播到前面的任何一層。實際上,利用[2]中的原始殘差塊,訓練后1201層ResNet的性能比110層的ResNet的性能要差。
殘差塊的變體
[7]的作者們在其論文中通過一些實驗表明,他們現在能夠訓練一個1001層的深度ResNet,使其性能優于跟它對應的淺層ResNet。結果證明,他們的訓練成果卓有成效,也正是因為這樣,ResNet才能在各種各樣的計算機視覺任務中迅速成為受歡迎的網絡結構之一。
ResNet的新變體及其新解讀
隨著ResNet在研究界的不斷普及,關于其架構的研究也在不斷深入。在接下來的內容中,我將首先介紹一些以ResNet為基礎的新網絡架構,然后介紹一篇論文,這篇論文通過小型網絡集合的角度來解讀ResNet。
ResNeXt
[8]的作者在文章中提出了ResNet的一種變體,代號為ResNeXt。下圖是其基本構件:
左邊是[2]中所提到的殘差塊;右邊是基數為32的ResNeXt構件
這看起來可能很熟悉,因為它跟[4]中的Inception模塊非常相似。在這個變體中,不同路徑輸出的合并是通過相加來實現的,除此之外,它們都遵循了“分割-轉換-合并”范例,而在[4]中它們卻是深度串聯(depth concatenated)的。另外一個區別在于,在[4]中,每一個路徑互不相同,而在這個架構中,所有的路徑都遵循了相同的拓撲結構。
作者們在文中引入了一個叫作“基數(cardinality)”(獨立路徑的數量)的超參數,提供了一種調整模型能力的新思路。實驗表明,通過擴大基數值,我們能夠更加高效地提升模型的表現。作者們表示,與Inception相比,這個全新的架構更容易適應新的數據集或任務,因為它只有一個簡單的范例和一個超參數需要調整,而Inception需要調整很多超參數(比如每個路徑卷積核的大小)。
這個全新的結構有三個等價形式:
在實際中,這個“分割-轉換-合并”范例通常是通過“逐點分組卷積層”實現的,這個卷積層會將它獲得的feature map輸入分成幾組,然后分別執行正常的卷積操作;終的輸出是depth concatenated的,并且會被輸入至一個1*1的卷積層中。
DenseNet
[9]的作者提出了一個叫作DenseNet的新網絡結構,這個結構進一步使用了shortcut connections,將所有的層互相連接起來。在這個新架構中,每一層的輸入都包含了所有較早的層的feature maps,而且它的輸出被傳遞至每個后續層。這些feature maps通過depth concatenation在一起。
除了解決梯度消失問題,[8]的作者們還稱,這個架構還支持“特征重用”,這就使得網絡更加“參數高效”。其中一個簡單的解讀是,在[2]和[7]中,恒等變換的輸出與模塊的輸出直接相加,如果兩個層的feature maps有著完全不同的分布,那么這可能會阻礙信息的流動。因此,用depth-concatenation能夠有效避免這種情況的發生,并且增加輸出的多樣性,進而促進特征的重新使用。
根據這種范例,我們知道第l層輸入feature map的數量會有k*(l-1)+k_o個,其中的k_0是輸入圖像中的通道數目。作者們使用一個叫做“增長率”(k)的超參數防止網絡變得過寬,他們還用了一個1*1的卷積瓶頸層在3*3卷積前減少特征映射的數量。整體架構如下表所示:
ImageNet的DenseNet架構
深度隨機的神經網絡
ResNet的強大性能在很多應用中已經得到了證實,盡管如此,ResNet還是有一個不可忽視的缺陷——更深層的網絡通常需要進行數周的訓練——因此,把它應用在實際場景下的成本非常高。為了解決這個問題,[10]的作者們引入了一個“反直覺”的方法,即在我們可以在訓練過程中任意地丟棄一些層,并在測試過程中使用完整的網絡。
作者們用了殘差塊作為他們網絡的構件,因此,在訓練中,如果一個特定的殘差塊被啟用了,那么它的輸入就會同時流經恒等表換shortcut(identity shortcut)和權重層;否則輸入就只會流經恒等變換shortcut。在訓練的過程中,每一個層都有一個“生存概率”,并且都會被任意丟棄。在測試過程中,所有的block都將保持被激活狀態,而且block都將根據其在訓練中的生存概率進行調整。
從形式上來看,H_l是第l個殘差塊的輸出結果,f_l是由l第l個殘差塊的權重映射所決定的映射,b_l是一個Bernoulli隨機變量(此變量的值只有1或0,反映出一個block是否是被激活的)。具體訓練過程如下:
當b_l=1時,這個block就是一個正常的殘差塊;當b_l=0時,上面的公式就變成了這樣:
既然我們已經知道了H_(l-1)是一個ReLU的輸出結果,而且這個輸出結果已經是非負的了,那么上面的方程式就會減少到只剩下一個恒等層:
如果p_l表示的是第l層在訓練中的生存概率,那么在測試過程中,我們就能得到以下的方程式:
作者們將一個“線性衰減規律”應用于每一層的生存概率,他們表示,由于較早的層會提取低級特征,而這些低級特征會被后面的層所利用,所以這些層不應該頻繁地被丟棄。這樣,終生成的規則就變成了這樣:
上面公式中的L表示block的總數量,因此p_L就是后一個殘差塊的生存幾率,這個幾率在整個實驗中一直都保持著0.5的水平。一定要注意的是,在這個情境中的輸入被視為個層(l=0),所以這個層永遠不會被丟棄。隨機深度訓練的整體框架如下圖所示:
與Dropout[11]類似,用任意的深度來訓練一個深度網絡可以看作是訓練一個小型ResNet集合,兩種訓練的區別在于上面的方法是任意地丟棄一整個層的,而Dropout在訓練中僅丟棄一個層的部分隱藏單元。
實驗表明,同樣是訓練一個110層的ResNet,以任意深度進行訓練的性能,比以固定深度進行訓練的性能要好。這就意味著ResNet中的一些層(路徑)可能是冗余的。
作為小型網絡集合的ResNet
[10]一文的作者們提出了一個訓練一個深度網絡的“反直覺”方法,即在訓練中任意地丟棄網絡的層,并在測試中使用整個網絡。Veit等人[12]介紹了一個更加“反直覺”的發現:我們可以刪除經過訓練后的ResNet中的部分層,同時保持相當不錯的網絡性能。這樣一來ResNet架構就變得更加有趣了,因為在Veit等人的論文中,作者對VGG網絡做了同樣的操作,移除了一個VGG網絡的部分層,而VGG網絡的性能出現了顯著的退化。
為了使訓練過程更清晰易懂,Veit等人首先介紹了一個ResNet的分解圖。當展開這個網絡架構以后,我們就能很清楚地發現,一個有著i個殘差塊的ResNet架構有2**i個不同的路徑(因為每一殘差塊會提供兩個獨立的路徑)。
根據以上的分解圖,我們就能清晰地理解為什么移除ResNet架構中的部分層不會降低其太多性能,這是因為ResNet架構有很多獨立有效路徑,而且大部分路徑在移除了部分層之后會保持完整無損。相反,VGG網絡只有一個有效路徑,因此移除一個層都會對它的路徑的性能產生極大的影響。
通過實驗,作者們還發現了ResNet中的路徑有著多模型集成的行為傾向。他們在測試時刪除不同數量的層,檢查網絡性能與刪除層的數量是否相關。結果顯示,網絡的表現確實有著整體聚集的傾向,具體如下圖所示:
后,作者們研究了ResNet中路徑的特征:
很明顯,所有可能路徑長度的分布都與一個Binomial分布相關,如下圖的(a)所示。大部分的路徑都流經了19到35個殘差塊。
為了得到路徑長度k的梯度幅度,作者們首先向網絡輸入了一批數據,然后任意采樣了k個殘差塊。當反向傳遞梯度時,他們僅將采樣的殘差塊通過權重層進行傳遞。(b)圖表示隨著路徑長度的增加,梯度幅度會迅速下降。
我們現在可以將每一路徑長度與其期望的梯度大小相乘,看每一路徑長度在訓練中起到多大的作用,就像(c)圖。令人驚訝的是,大多分布都來自于9到18的路徑長度,但它們都只包含少量的總路徑,如(a)圖。這是一個非常有趣的發現,因為這暗示著ResNet無法解決過長路徑的梯度消失問題,ResNet的成功實際上源自于它縮短了它的有效路徑(effective path)的長度。
總結
在本文中,我重新回顧了ResNet結構,簡要地介紹了隱藏在其背后的成功秘密。之后我還介紹了幾篇論文,有些提出了非常有趣的ResNet變體,有些對ResNet作了非常具有洞察力的解讀。我希望這篇文章能夠幫助你理解這項開創性的工作。
本文中的所有數據均來自參考文獻。
參考文獻
[1].A. Krizhevsky, I. Sutskever, and G. E. Hinton. Imagenet classification withdeep convolutional neural networks. In Advances in neural informationprocessing systems,pages1097–1105,2012.
[2].K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for imagerecognition. arXiv preprint arXiv:1512.03385,2015.
[3].K. Simonyan and A. Zisserman. Very deep convolutional networks for large-scaleimage recognition. arXiv preprint arXiv:1409.1556,2014.
[4].C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V.Vanhoucke, and A. Rabinovich. Going deeper with convolutions. In Proceedings ofthe IEEE Conference on Computer Vision and Pattern Recognition,pages 1–9,2015.
[5].R. Srivastava, K. Greff and J. Schmidhuber. Training Very Deep Networks. arXivpreprint arXiv:1507.06228v2,2015.
[6].S. Hochreiter and J. Schmidhuber. Long short-term memory. Neural Comput.,9(8):1735–1780, Nov. 1997.
[7].K. He, X. Zhang, S. Ren, and J. Sun. Identity Mappings in Deep ResidualNetworks. arXiv preprint arXiv:1603.05027v3,2016.
[8].S. Xie, R. Girshick, P. Dollar, Z. Tu and K. He. Aggregated ResidualTransformations for Deep Neural Networks. arXiv preprintarXiv:1611.05431v1,2016.
[9].G. Huang, Z. Liu, K. Q. Weinberger and L. Maaten. Densely ConnectedConvolutional Networks. arXiv:1608.06993v3,2016.
[10].G. Huang, Y. Sun, Z. Liu, D. Sedra and K. Q. Weinberger. Deep Networks withStochastic Depth. arXiv:1603.09382v3,2016.
[11].N. Srivastava, G. Hinton, A. Krizhevsky, I. Sutskever and R. Salakhutdinov.Dropout: A Simple Way to Prevent Neural Networks from Overfitting. The Journalof Machine Learning Research 15(1) (2014) 1929–1958.
[12].A. Veit, M. Wilber and S. Belongie. Residual Networks Behave Like Ensembles ofRelatively Shallow Networks. arXiv:1605.06431v2,2016.
關鍵詞;機器學習 深度學習 計算機視覺 數據科學 走向數據科學
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。