[DeeplearningAI筆記]卷積神經網絡2.3-2.4深度殘差網絡
阿新 • • 發佈:2018-07-25
.com 殘差網絡 效率 info cti 所有 網絡 com 調整
4.2深度卷積網絡
覺得有用的話,歡迎一起討論相互學習~Follow Me
2.3殘差網絡Residual Networks(ResNets)
- 非常非常深的網絡是很難訓練的,因為存在梯度消失和梯度爆炸的問題。使用跳遠連接(skip connections)
它可以從某一網絡層獲取激活,然後迅速反饋給另外一層,甚至是神經網絡的更深層,可以利用跳遠連接構建能夠訓練深度網絡的ResNets
Residual block
- Residual Networks殘差網絡由殘差塊構成,對於一個“普通的神經網絡層的結構”而言,神經層\(a^{[l]}\)到\(a^{[l+1]}\)再到\(a^{[l+2]}\)
網絡的主路徑"Main Path"可表示為:
- 但是對於殘差網絡,\(a^{[l]}\)可以拷貝到網絡的深層,可以直接在ReLU非線性激活函數前加上\(a^{[l]}\)。這被稱為是"Short cut",不再沿著主路徑傳遞。即原始公式中的\(a^{[l+2]}=g(z^{[l+2]})\)被替代為\(a^{[l+2]}=g(z^{[l+2]}+a^{[l]})\),也就是說加上的這個\(a^{[l]}\)產生了一個殘差塊。
- "跳遠連接(skip connection)"就是指\(a^{[l]}\)跳過一層或者好幾層,從而將信息傳遞給神經網絡的更深層。
- ResNet的發明者認為使用殘差塊能夠訓練更深的神經網絡,所以構建一個ResNet網絡就是通過將很多這樣的殘差塊堆積在一起,形成一個深度神經網絡。
Residual Networks(ResNets)殘差網絡構造方法與優勢
對於一個"Plain Network普通網絡",把它變為ResNet的方法是加上所有的跳遠連接(skip connections).每兩層增加一個跳遠連接構成一個殘差塊。如圖所示,五個殘差塊連接在一起構成一個殘差網絡。
- 理論上說越深的神經網絡應該會取得更好的結果,但是實際上對於普通網絡隨著神經網絡網絡層數的增加,訓練的誤差會先下降再上升。因為隨著網絡層數的增加,優化算法會更加難以訓練網絡。
- 但是ResNets不一樣,即使網絡再深,訓練的表現卻不錯,錯誤會更少。就算網絡的深度達到了1000層也會取得不錯的結果。這證明ResNet在訓練深度網絡方面非常有效。
2.4殘差網絡Residual Networks(ResNets)為什麽有用
殘差網絡在訓練集上的效果
- 通常情況下,一個網絡深度越深,它在訓練集上訓練集上訓練網絡的效率有所減弱。
- 假設網絡結構如下圖所示,其中BigNN表示一個很大很深的神經網絡模型,並且使用ReLU函數作為激活函數,且所有ReLU函數的輸入值都是非負值。
有如下計算式:
\[a^{[l+2]}=g(z^{[l+2]}+a^{[l]})\=g(w^{[l+2]}*a^{[l+1]}+b^{[l+2]}+a^{[l]})\] - 註意,如果我們使用了L2正則化,則會使公式中的w權值相應的減少。
- 這裏設w和b均為零值,因為使用ReLU函數作為激活函數,並且激活函數的輸入值是非負值則\(a^{[l+2]}=g(a^{[l]})=a^{[l]}\)。
NG認為殘差網絡起作用的主要原因是:這些殘差塊學習恒等函數非常容易,你能確定網絡性能不會受到影響,很多時候甚至可以提高效率,至少效率不會降低。
殘差塊維度
- 對於殘差塊的跳躍連接的維度大小,因為殘差塊的設計中使用了相當多的“SAME”模式的卷積方式所以可以實現\[z^{[l+2]}+a^{[l]}的跳躍連接的操作\]即"SAME"卷積模式保持了維度。
但是如果\(a^{[l+2]}和a^{[l]}\)的維度不一樣,例如\(a^{[l+2]}\)為256,\(a^{[l]}\)的維度為128,則在\(a^{[l]}\)前乘上一個可學習的變量\(W_{s}\),其中\(W_{s}\)維度為\(256*128\)以保持維度的一致。
Plain網絡(普通網絡)加上ResNet單元
其中卷積層使用“SAME”卷積模式,保持特征圖的維度信息即特征圖的長和寬,但是對於殘差塊中有池化層的情況,則需要使用\(W_s\)調整維度,使跳躍連接的前後層可以保持一致的維度使其可以相加。
[DeeplearningAI筆記]卷積神經網絡2.3-2.4深度殘差網絡