【AI不惑境】残差网络的前世今生与原理
大家好,這是專欄《AI不惑境》的第五篇文章,講述殘差網絡的來龍去脈和背后的原理。
進入到不惑境界,就是向高手邁進的開始了,在這個境界需要自己獨立思考。如果說學習是一個從模仿,到追隨,到創造的過程,那么到這個階段,應該躍過了模仿和追隨的階段,進入了創造的階段。從這個境界開始,講述的問題可能不再有答案,更多的是激發大家一起來思考。
作者&編輯 | 言有三
在深度學習模型發展史中,殘差網絡因其簡單而有效的結構與異常有效的結果而占據了非常重要的位置,今天就來仔細說說它的來龍去脈。
?
1 殘差網絡之前的歷史
殘差連接的思想起源于中心化,在神經網絡系統中,對輸入數據等進行中心化轉換,即將數據減去均值,被廣泛驗證有利于加快系統的學習速度。
Schraudolph[1]將這樣的思想拓展到了梯度的反向傳播中,不僅是輸入和隱藏層單元的激活值要中心化,梯度誤差以及權重的更新也可以中心化,這便是通過將輸入輸出進行連接的shortcut connection,也稱為跳層連接技術。
在1998年的時候,它們提出了將網絡分解為biased和centered兩個子網絡的思想,通過并行訓練兩個子網絡,分別學習線性和非線性變換部分,不僅降低了各個網絡的學習難度,也大大提升了梯度下降算法的訓練速度。
Raiko等人則在論文[2]中更加細致地研究了shortcut connections對模型能力的影響,在網絡包含2到5個隱藏層,使用與不使用正則化等各種環境配置下,MNIST和CIFAR圖像分類任務和MNIST圖像重構任務的結果都表明,這樣的技術提高了隨機梯度下降算法的學習能力,并且提高了模型的泛化能力。
Srivastava等人在2015年的文章[3]中提出了highway network,對深層神經網絡使用了跳層連接,明確提出了殘差結構,借鑒了來自于LSTM的控制門的思想。
當T(x,Wt)=0時,y=x,T(x,Wt)=1時,y=H(x,Wh)T(x,Wt)。在該文章中,研究者沒有使用特殊的初始化方法等技巧,也能夠訓練上千層的網絡。
從以上的發展可以看出來,跳層連接由來已久。
?
2 殘差網絡
何凱明等人在2015年的論文[4]中正式提出了ResNet,簡化了highway network中的形式,表達式如下:
相比于之前的卷積和池化相互堆疊的網絡,其基本的結構單元如下:
當我們直接將一個輸入添加到輸出的時候,輸出y可以明確的拆分為H(x,Wh)和x的線性疊加,從而讓梯度多了一條恒等映射通道,這被認為對于深層網絡的訓練是非常重要的,一個典型的resnet網絡結構如下:
resnet在當年的ImageNet的多項競賽中取得冠軍,風頭一時無兩,隨后被廣泛深扒。關于ResNet的詳細解讀,大家可以關注我們的往期文章。
【模型解讀】resnet中的殘差連接,你確定真的看懂了?
?
3 殘差網絡結構的發展
對于殘差網絡的研究,大部分集中在兩個方向,第一個是結構方面的研究,另一個是殘差網絡原理的研究,首先說幾個具有代表性的結構,不會將所有結構都包含進來,如果感興趣大家可以關注知識星球有三AI。
3.1、更密集的跳層連接DenseNet
如果將ResNet的跳層結構發揮到極致,即每兩層都相互連接,那么就成為了DenseNet,關于DenseNet的詳細解讀,可以查看我們的往期文章。
【模型解讀】“全連接”的卷積網絡,有什么好?
DenseNet是一個非常高效率的網絡結構,以更少的通道數更低的計算代價,獲得比ResNet更強大的性能。
3.2、更多并行的跳層連接
如果將ResNet和DenseNet分為作為兩個通道并行處理,之后再將信息融合,就可以得到Dual Path Network,網絡結構如下:
其背后的思想是resnet對于重用信息更有效,而densenet對于學習新的信息更有效,這個結構在最后一屆ImageNet競賽中也取得了很好的成績,分類比賽的亞軍,定位比賽的冠軍。類似的結構變種還有如下的結構,不再一一贅述。
當然,還有比上面的Dual Path Network更加簡單的并行結構,即直接使用多個完全獨立且相同的分支并行處理,然后合并。
也有更加復雜的變種,即所謂的resnet in resnet結構,如下圖。
篇幅原因本文不對所有殘差網絡的結構設計思想和發展做更多解讀,感興趣請移步知識星球《有三AI》。
?
4 殘差網絡結構為什么這么好用?
關于殘差網絡為什么有效,研究眾多,這里我們就集中講述幾個主流的思路。
4.1、簡化了學習過程,增強了梯度傳播
相比于學習原始的信號,殘差網絡學習的是信號的差值,這在許多的研究中被驗證是更加有效的,它簡化了學習的過程。
根據我們前面的內容可知,在一定程度上,網絡越深表達能力越強,性能越好。
然而隨著網絡深度的增加,帶來了許多優化相關的問題,比如梯度消散,梯度爆炸。
在殘差結構被廣泛使用之前,研究人員通過研究更好的優化方法,更好的初始化策略,添加Batch Normalization,提出Relu等激活函數的方法來對深層網絡梯度傳播面臨的問題進行緩解,但是仍然不能解決根本問題。
假如我們有這樣一個網絡:
其中f為卷積操作,g為非線性變換函數,k為分類器,依靠誤差的鏈式反向傳播法則,損失loss對f的導數為:
如果其中某一個導數很小,多次連乘后梯度可能越來越小,這就是常說的梯度消散,對于深層網絡,從靠近輸出的深層傳到靠近輸入的淺層時梯度值非常小,使得淺層無法有效地更新。
如果使用了殘差結構,因為導數包含了恒等項,仍然能夠有效的反向傳播。
舉一個非常直觀的例子方便理解,假如有一個網絡,輸入x=1,非殘差網絡為G,殘差網絡為H,其中H(x)=F(x)+x,假如有這樣的輸入關系:
因為兩者各自是對G的參數和F的參數進行更新,可以看出變化對F的影響遠遠大于G,說明引入殘差后的映射對輸出的變化更敏感,這樣是有利于網絡進行傳播的。
4.2、打破了網絡的不對稱性[5]
雖然殘差網絡可以通過跳層連接,增強了梯度的流動,從而使得上千層網絡的訓練成為可能,不過相關的研究表面殘差網絡的有效性,更加體現在減輕了神經網絡的退化。
如果在網絡中每個層只有少量的隱藏單元對不同的輸入改變它們的激活值,而大部分隱藏單元對不同的輸入都是相同的反應,此時整個權重矩陣的秩不高。并且隨著網絡層數的增加,連乘后使得整個秩變的更低,這就是我們常說的網絡退化問題。
雖然權重矩陣是一個很高維的矩陣,但是大部分維度卻沒有信息,使得網絡的表達能力沒有看起來那么強大。這樣的情況一定程度上來自于網絡的對稱性,而殘差連接打破了網絡的對稱性。
下面展示了三種跳層連接恢復網絡表達能力的案例,分別是消除輸入和權重零奇點,打破對稱性,線性依賴性。
4.3、增強了網絡的泛化能力[6]
有一些研究表明,深層的殘差網絡可以看做是不同深度的淺層神經網絡的ensemble,訓練完一個深層網絡后,在測試的時候隨機去除某個網絡層,并不會使得網絡的性能有很大的退化,而對于VGG網絡來說,刪減任何一層都會造成模型的性能奔潰,如下圖。
甚至去除和打亂一些網絡層,性能的下降也是一個很平滑的過程。
以上都證明了殘差結構其實是多個更淺的網絡的集成,所以它的有效深度看起來表面的那么深,因此優化自然也沒有那么難了。
關于殘差,還有需要的研究,大家可以持續關注我們公眾號和知乎,以及星球。
參考文獻
[1] Schraudolph N. Accelerated gradient descent by factor-centering decomposition[J]. Technical report/IDSIA, 1998, 98.
[2] Raiko T, Valpola H, LeCun Y. Deep learning made easier by linear transformations in perceptrons[C]//Artificial intelligence and statistics. 2012: 924-932.
[3] Srivastava R K, Greff K, Schmidhuber J. Training very deep networks[C]//Advances in neural information processing systems. 2015: 2377-2385.
[4] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.
[5] Orhan A E, Pitkow X. Skip Connections Eliminate Singularities[J]. international conference on learning representations, 2018.
[6] Veit A, Wilber M J, Belongie S. Residual networks behave like ensembles of relatively shallow networks[C]//Advances in neural information processing systems. 2016: 550-558.
?
總結
通過跳層連接而來的殘差網絡雖然結構非常簡單,但是卻異常有用,在很多的應用領域中都被廣泛使用,其原理也在被進一步廣泛研究中,大家可以持續關注,更多的內容我們會在知識星球《有三AI》中展示。
下期預告:深度學習中的多尺度設計與應用。
近期直播
有三AI紀念版撲克牌預售
下期預告:跳層連接對網絡性能的影響。
AI白身境系列完整閱讀:
第一期:【AI白身境】深度學習從棄用windows開始
第二期:【AI白身境】Linux干活三板斧,shell、vim和git
第三期:【AI白身境】學AI必備的python基礎
第四期:【AI白身境】深度學習必備圖像基礎
第五期:【AI白身境】搞計算機視覺必備的OpenCV入門基礎
第六期:【AI白身境】只會用Python?g++,CMake和Makefile了解一下
第七期:【AI白身境】學深度學習你不得不知的爬蟲基礎
第八期:?【AI白身境】深度學習中的數據可視化
第九期:【AI白身境】入行AI需要什么數學基礎:左手矩陣論,右手微積分
第十期:【AI白身境】一文覽盡計算機視覺研究方向
第十一期:【AI白身境】AI+,都加在哪些應用領域了
第十二期:【AI白身境】究竟誰是paper之王,全球前10的計算機科學家
AI初識境系列完整閱讀
第一期:【AI初識境】從3次人工智能潮起潮落說起
第二期:【AI初識境】從頭理解神經網絡-內行與外行的分水嶺
第三期:【AI初識境】近20年深度學習在圖像領域的重要進展節點
第四期:【AI初識境】激活函數:從人工設計到自動搜索
第五期:【AI初識境】什么是深度學習成功的開始?參數初始化
第六期:【AI初識境】深度學習模型中的Normalization,你懂了多少?
第七期:【AI初識境】為了圍剿SGD大家這些年想過的那十幾招
第八期:【AI初識境】被Hinton,DeepMind和斯坦福嫌棄的池化,到底是什么?
第九期:【AI初識境】如何增加深度學習模型的泛化能力
第十期:【AI初識境】深度學習模型評估,從圖像分類到生成模型
第十一期:【AI初識境】深度學習中常用的損失函數有哪些?
第十二期:【AI初識境】給深度學習新手開始項目時的10條建議
AI不惑境系列完整閱讀:
第一期:【AI不惑境】數據壓榨有多狠,人工智能就有多成功
第二期:【AI不惑境】網絡深度對深度學習模型性能有什么影響?
第三期:【AI不惑境】網絡的寬度如何影響深度學習模型的性能?
第四期:【AI不惑境】學習率和batchsize如何影響模型的性能?
第五期:【AI不惑境】殘差網絡的前世今生與原理
感謝各位看官的耐心閱讀,不足之處希望多多指教。后續內容將會不定期奉上,歡迎大家關注有三公眾號 有三AI!
總結
以上是生活随笔為你收集整理的【AI不惑境】残差网络的前世今生与原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【TensorFlow2.0】数据读取与
- 下一篇: “有三AI百人”专栏作者培养计划启动,爱