【深度學習】經典卷積神經網絡(七)ResNet

介紹

ResNet幾乎是現在應用最廣泛的特徵提取網絡,於2015年由何愷明等人提出拿到了ImageNet的冠軍,並且發表在2016年的CVPR上,現在針對各種問題也衍生了很多新的網絡。很多經典的網絡也通過借鑑其思想在效果上得到了提升。一般來說,隨着網絡變深學習能力應該會更強,但是事實上一味地增加深度並不能繼續提升性能,反而會導致模型收斂變慢,效果甚至還會變差,ResNet就是針對這樣的問題。文中提出了很多值得借鑑的思想,可以說將卷積神經網絡又向前推進了一個階段,我們可以去訓練更深的網絡。

一般來說,我們認爲隨着網絡深度的增加即使驗證集可能會因爲訓練集過擬合而準確率下降,但是訓練集的擬合效果會越來越好,而事實上更深的網絡無論是訓練集還是驗證集上表現都不好。
作者稱這種現象爲退化。ResNet研究的便是如何增加網絡深度並避免退化現象。

結構


這個思想該怎麼理解呢?比如先學一個20層的網絡,再學一個36層的網絡,其參數均爲0(表示退化現象),將20層網絡輸出到36層網絡中,這個結果再與20層網絡的輸出相加,可以保證56層的網絡的輸出一定不會比20層差。
我們的目標是學習一個複雜的H(x),但H(x) = F(x) + x,那麼可以先學習F(x),然後再加x。這樣如果F(x)要好學一些則能夠極大地提升性能,再通過求和進行跨層連接。
這樣的網絡最終發現深層的表現會好於淺層的,即解決了文章開頭提出的問題。

另外ResNet發現可以在FC前加入avg pool,可以降低參數量。

16年ECCV又對其做了調整,將BN和ReLU移到了裏面。可以看到,左邊那種情況即使第二個分支都是0但因爲ReLU的存在最終結果xl也不一定等於xl+1,除非都是正數。這種調整後的結果將更像是一個恆等映射。儘管過深的網絡不一定會有太大的提升,但通過這種方法至少不會下降。不過經過實驗,即使是1000層網絡,比150層的提升也沒有太大,甚至不如做個數據增強。

xl可以一直保留到xL從數學推導也可以很好地發現恆等映射對梯度消失避免的作用,使之在“1”周圍。
當然還可以從Adaboost角度來解釋,雖然有很多殘差塊學到互補的東西,最終提升性能。
然後再看一下ResNet結構上細節的東西,當X與Y通道數目不同時,作者嘗試了兩種identity mapping的方式。一種即簡單地將X相對Y缺失的通道直接補零從而使其能夠相對齊的方式,另一種則是通過使用1x1的conv來表示Ws映射從而使得最終輸入與輸出的通道達到一致的方式。

爲了計算效率,還使用了bottleneck,具體思路可以看GoogLeNet。不僅能縮小計算量和訓練時間,對精度的影響也並不大。

思考

ResNet的角度比很多網絡又新了很多,不是盲目的增加深度或寬度,而是從梯度消失這個問題出發尋找解決方案,最終設計殘差單元通過跨層連接有效地解決了問題,因此也成爲了很多後來的網絡的基本模塊。這裏總結一下里面一些思路:

  • 跨層連接抑制梯度消失
  • 殘差塊relu位置的選擇
  • bottleneck的應用

參考資料

https://www.jianshu.com/p/93990a641066

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章