【深度學習】深度殘差網絡ResNet

1 殘差網絡ResNet

1.1要解決的問題

  在傳統CNN架構中,如果我們簡單堆疊CNN的層數,深層CNN在訓練集上面的表現反而要比淺層CNN在訓練集上面的表現差的多。這明顯是不合理的,因爲淺層CNN很明顯只是深層CNN的一個子集。
  那也就是說,深層網絡並沒有能夠很好地學習到訓練集,它甚至連過擬合都做不到。由於深層網絡梯度消失的原因,導致無法對淺層的網絡權重進行有效的調整。於是,ResNet做了這樣的假設:在原先比較淺的網絡上,訓練得到較好的模型後,再在其後面添加恆等映射層,即讓輸入等於輸出,這樣就達到即增加深度,又不會增加誤差的效果。

1.2 殘差網絡結構

  ResNet提出了殘差學習的思想,通過直接將輸入信息繞道傳到輸出,保護信息的完整性,整個網絡只需要學習輸入、輸出差別的那一部分,簡化學習目標和難度。殘差網絡結構如下圖所示
在這裏插入圖片描述
  在原先的CNN架構中,神經網絡輸入x,輸出F(x),要擬合H(x),訓練目標是F(x)=H(x)。
  而在ResNet架構中,神經網絡輸入x,輸出變爲F(x)+x,要擬合的目標變爲H(x)-x,訓練目標是F(x)+x=H(x)-x。這裏的H(x)-x就是所謂的殘差
  而根據ResNet的假設,我們需要對淺層網絡做恆等變化,所以我們要訓練F(x)=x,但是在ResNet架構中,從學習恆等映射這一點出發,我們要擬合的目標變成了F(x)+x=x,相當於我們的目標變成了F(x)=0,這比原來的訓練目標要簡單的多,因爲一般每層網絡中的參數初始化偏向於0,這樣在相比於更新該網絡層的參數來學習h(x)=x,該冗餘層學習F(x)=0的更新參數能夠更快收斂。
  同時,這種殘差結構有使得某一層的輸出可以直接跨過幾層,作爲後面某一層的輸入,最終神經網路可以達到幾十層,上百層。

1.3 捷徑連接

  由於ResNet實際上還是有卷積層,有卷積層就有通道的變化以及圖像大小的變化。那麼隱藏層的輸入x經過捷徑連接連接到深層隱藏層的輸出F(x)後,如果F(x)和x的通道相同,則可直接相加,那麼通道不同怎麼處理呢?
  如果x的維度是3x3x64,F(x)的維度是3x3x128,那麼計算方式就變爲H(x)=F(x)+Wx,其中W是卷積操作,用於調整x的維度。但是這樣的話,我們就又需要學習多一個參數W。

1.4 總結

  使用殘差網絡結構h(x)=F(x)+x代替原來的沒有shortcut連接的h(x)=x,這樣更新冗餘層的參數時需要學習F(x)=0比學習h(x)=x要容易得多。並且shortcut連接的結構保證了反向傳播更新參數時,很難有梯度爲0的現象發生,不會導致梯度消失。因此ResNet使得我們可以學習很深的網絡,對於高級抽象特徵的提取和網絡性能更好,也不同擔心梯度消失的問題。

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