【殘差連接】--- skip connect避免梯度消失及網絡(矩陣)退化

殘差連接的思想被人們熟知且應用主要是何凱明大神將之應用到ResNet網絡的深度上面, 即解決因爲傳統網絡因爲深度的增加造成的 梯度消失矩陣退化 等問題, 使之避免層數越多, 擬合程度越差的問題.



一. 概念

如下圖所示, 是一個殘差塊的基本結構.


殘差塊結構圖

其實做法很簡單, 就是在輸入和輸出層之間添加了一個快捷連接, 使得僅僅做恆等映射, 至少確保了網絡的精度不下降.

二. 算術表達

2.1. 殘差塊

殘差單元(通常每個殘差單元包含多層結構)
H(x)=F(x)+xy=RELU(H(x))H(x)=F(x)+x \\y={\rm RELU}(H(x))
其中,

  • xx是殘差單元的輸入
  • yy是殘差單元的輸出
  • F(x)F(x)是殘差函數,表示學習到的殘差
  • H(x)H(x)是一中間變量, 表示殘差連接
  • RELU(H(X)){\rm RELU}(H(X))指對連接結果進行RELU激活

2.2. 殘差網絡

假設是從淺層ll到深層LL的特徵學習, 爲了簡化說明, 假設所有的H(x)H(x)都大於0, 則可以消去RELU()\rm RELU():
yL=RELU(H(X))=xl+i=lL1F(xi)y_L={\rm RELU}(H(X))=x_l+\sum_{i=l}^{L-1}F(x_i)

然後根據鏈式法則,反向傳播過程中的梯度:
lossxl=lossxLxLxl=lossxL(1+xli=lL1F(xi))\frac{\partial loss}{\partial x_l}=\frac{\partial loss}{\partial x_L} \cdot \frac{\partial x_L}{\partial x_l}=\frac{\partial loss}{\partial x_L} \cdot\left ( 1+\frac{\partial }{\partial x_l} \sum_{i=l}^{L-1}F(x_i) \right )

  • lossxL\frac{\partial loss}{\partial x_L}表示loss function的梯度
  • 括號中的11表明該方法可無損傳播梯度,保證不會出現梯度消失的現象
    • (因爲若是普通的連接話, 一旦上述某個梯度很小, 在不斷梯度連乘的作用下, 總梯度會變得越來越小, 這就是常說的梯度消失, 二我們的殘差連接至少確保了一個11, 避免了 梯度消失)

三. 有效性驗證

3.1. 避免梯度消除的有效性

接下來我們將殘差網絡和普通無skip connect的網絡進行梯度上的比對, 如下:

從結果上看, 殘差網絡能較有效的消除 梯度消失 這一現象.

3.2. 避免矩陣退化的有效性

何爲網絡(矩陣)退化?

每個層中只有少量的隱藏單元對不同的輸入改變它們的激活值,而大部分隱藏單元對不同的輸入都是相同的反應,此時整個權重矩陣的秩不高。並且隨着網絡層數的增加,連乘後使得整個秩變的更低

即雖然是一個高緯矩陣, 但大部分維度卻沒有信息(秩變小), 造成表達能力並沒有那麼強.

而殘差連接打破了神經網絡的對稱性, 恢復了網絡的表達能力(經過實驗證明, 此處不再論述).

四. 總結

通過使用殘差連接能使得網絡深度夠深的同時, 也能確保一定的擬合度, 是一個很實用的想法!


五. 參考

[1]. https://www.jianshu.com/p/09643588f373

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