殘差連接的思想被人們熟知且應用主要是何凱明大神將之應用到ResNet網絡的深度上面, 即解決因爲傳統網絡因爲深度的增加造成的 梯度消失 和 矩陣退化 等問題, 使之避免層數越多, 擬合程度越差的問題.
一. 概念
如下圖所示, 是一個殘差塊的基本結構.
殘差塊結構圖
其實做法很簡單, 就是在輸入和輸出層之間添加了一個快捷連接, 使得僅僅做恆等映射, 至少確保了網絡的精度不下降.
二. 算術表達
2.1. 殘差塊
殘差單元(通常每個殘差單元包含多層結構)
其中,
- 是殘差單元的輸入
- 是殘差單元的輸出
- 是殘差函數,表示學習到的殘差
- 是一中間變量, 表示殘差連接
- 指對連接結果進行RELU激活
2.2. 殘差網絡
假設是從淺層到深層的特徵學習, 爲了簡化說明, 假設所有的都大於0, 則可以消去:
然後根據鏈式法則,反向傳播過程中的梯度:
- 表示loss function的梯度
- 括號中的表明該方法可無損傳播梯度,保證不會出現梯度消失的現象
- (因爲若是普通的連接話, 一旦上述某個梯度很小, 在不斷梯度連乘的作用下, 總梯度會變得越來越小, 這就是常說的梯度消失, 二我們的殘差連接至少確保了一個, 避免了 梯度消失)
三. 有效性驗證
3.1. 避免梯度消除的有效性
接下來我們將殘差網絡和普通無skip connect的網絡進行梯度上的比對, 如下:
從結果上看, 殘差網絡能較有效的消除 梯度消失 這一現象.
3.2. 避免矩陣退化的有效性
何爲網絡(矩陣)退化?
每個層中只有少量的隱藏單元對不同的輸入改變它們的激活值,而大部分隱藏單元對不同的輸入都是相同的反應,此時整個權重矩陣的秩不高。並且隨着網絡層數的增加,連乘後使得整個秩變的更低
即雖然是一個高緯矩陣, 但大部分維度卻沒有信息(秩變小), 造成表達能力並沒有那麼強.
而殘差連接打破了神經網絡的對稱性, 恢復了網絡的表達能力(經過實驗證明, 此處不再論述).
四. 總結
通過使用殘差連接能使得網絡深度夠深的同時, 也能確保一定的擬合度, 是一個很實用的想法!