ResNet网络解决的一些事
ResNet主要解決了網絡退化以及梯度消失/爆炸這兩個主要問題,使得網絡可以通過加深提高準確率~
深度卷積網絡自然的整合了低中高不同層次的特征,特征的層次可以靠加深網絡的層次來豐富。從而,在構建卷積網絡時,網絡的深度越高,可抽取的特征層次就越豐富。所以一般我們會傾向于使用更深層次的網絡結構,以便取得更高層次的特征。但是在使用深層次的網絡結構時我們會遇到兩個問題,梯度消失/爆炸問題和網絡退化的問題。
-
當使用更深層的網絡時,會發生梯度消失/爆炸問題,這個問題很大程度通過標準的初始化和正則化層來基本解決,這樣可以確保幾十層的網絡能夠收斂,但是隨著網絡層數的增加,梯度消失或者爆炸的問題仍然存在。
-
還有一個問題就是網絡的退化,如下圖所示,假設已經有了一個最優化的網絡結構(圖左),是8層。當我們設計網絡結構的時候,我們并不知道具體多少層次的網絡時最優化的網絡結構,假設設計了14層網絡結構(圖右)。那么多出來的6層其實是冗余的,我們希望訓練網絡的過程中,模型能夠自己訓練這6層(紅色方框)為恒等映射,也就是經過這層時的輸入與輸出完全一樣。但是往往模型很難將這6層恒等映射的參數學習正確,那么就一定會不比最優化的8層網絡結構性能好,這就是隨著網絡深度增加,模型會產生退化現象。它不是由過擬合產生的,而是由冗余的網絡層學習了不是恒等映射的參數造成的。
?
ResNet簡介
ResNet是在2015年有何凱明,張翔宇,任少卿,孫劍共同提出的,ResNet使用了一個新的思想,ResNet的思想是假設我們涉及一個網絡層,存在最優化的網絡層次,那么往往我們設計的深層次網絡是有很多網絡層為冗余層的。那么我們希望這些冗余層能夠完成恒等映射,保證經過該恒等層的輸入和輸出完全相同。具體哪些層是恒等層,這個會有網絡訓練的時候自己判斷出來。將原網絡的幾層改成一個殘差塊,殘差塊的具體構造如下圖所示:
?
可以看到X是這一層殘差塊的輸入,也稱作F(x)為殘差,x為輸入值,F(X)是經過第一層線性變化并激活后的輸出,該圖表示在殘差網絡中,第二層進行線性變化之后激活之前,F(x)加入了這一層輸入值X,然后再進行激活后輸出。在第二層輸出值激活前加入X,這條路徑稱作shortcut連接。
ResNet解決深度網絡瓶頸的魔力
-
網絡退化問題的解決:
我們發現,假設該層是冗余的,在引入ResNet之前,我們想讓該層學習到的參數能夠滿足h(x)=x,即輸入是x,經過該冗余層后,輸出仍然為x。但是可以看見,要想學習h(x)=x恒等映射時的這層參數時比較困難的。ResNet想到避免去學習該層恒等映射的參數,使用了如上圖的結構,讓h(x)=F(x)+x;這里的F(x)我們稱作殘差項,我們發現,要想讓該冗余層能夠恒等映射,我們只需要學習F(x)=0。學習F(x)=0比學習h(x)=x要簡單,因為一般每層網絡中的參數初始化偏向于0,這樣在相比于更新該網絡層的參數來學習h(x)=x,該冗余層學習F(x)=0的更新參數能夠更快收斂,如圖所示:
?
假設該曾網絡只經過線性變換,沒有bias也沒有激活函數。我們發現因為隨機初始化權重一般偏向于0,那么經過該網絡的輸出值為[0.6 0.6],很明顯會更接近與[0 0],而不是[2 1],相比與學習h(x)=x,模型要更快到學習F(x)=0。
并且ReLU能夠將負數激活為0,過濾了負數的線性變化,也能夠更快的使得F(x)=0。這樣當網絡自己決定哪些網絡層為冗余層時,使用ResNet的網絡很大程度上解決了學習恒等映射的問題,用學習殘差F(x)=0更新該冗余層的參數來代替學習h(x)=x更新冗余層的參數。
這樣當網絡自行決定了哪些層為冗余層后,通過學習殘差F(x)=0來讓該層網絡恒等映射上一層的輸入,使得有了這些冗余層的網絡效果與沒有這些冗余層的網絡效果相同,這樣很大程度上解決了網絡的退化問題。
-
梯度消失或梯度爆炸問題的解決:
我們發現很深的網絡層,由于參數初始化一般更靠近0,這樣在訓練的過程中更新淺層網絡的參數時,很容易隨著網絡的深入而導致梯度消失,淺層的參數無法更新。
?
可以看到,假設現在需要更新b1,w2,w3,w4參數因為隨機初始化偏向于0,通過鏈式求導我們會發現,w1w2w3相乘會得到更加接近于0的數,那么所求的這個b1的梯度就接近于0,也就產生了梯度消失的現象。
ResNet最終更新某一個節點的參數時,由于h(x)=F(x)+x,由于鏈式求導后的結果如下圖所示,不管括號內右邊部分的求導參數有多小,因為左邊的1的存在,并且將原來的鏈式求導中的連乘變成了連加狀態(正確?),都能保證該節點參數更新不會發生梯度消失或梯度爆炸現象。
?
這樣ResNet在解決了阻礙更深層次網絡優化問題的兩個重要問題后,ResNet就能訓練更深層次幾百層乃至幾千層的網絡并取得更高的精確度了。
下邊是ResNet的網絡結構圖:
?
?
?
左圖是ResNet34,右圖是ResNet50/101/152。這一個模塊稱作building block,右圖稱之為bottleneck design。在面對50,101,152層的深層次網絡,意味著有很大的計算量,因此這里使用11卷積先將輸入進行降維,然后再經過33卷積后再用11卷積進行升維。使用11卷積的好處是大大降低參數量計算量。
總結
通過上述的學習,你應該知道了,現如今大家普遍認為更好的網絡是建立在更寬更深的網絡基礎上,當你需要設計一個深度網絡結構時,你永遠不知道最優的網絡層次結構是多少層,一旦你設計的很深入了,那勢必會有很多冗余層,這些冗余層一旦沒有成功學習恒等變換h(x)=x,那就會影響網絡的預測性能,不會比淺層的網絡學習效果好從而產生退化問題。
ResNet的過人之處,是他很大程度上解決了當今深度網絡頭疼的網絡退化問題和梯度消失問題。使用殘差網絡結構h(x)=F(x)+x代替原來的沒有shortcut連接的h(x)=x,這樣更新冗余層的參數時需要學習F(x)=0比學習h(x)=x要容易得多。而shortcut連接的結構也保證了反向傳播更新參數時,很難有梯度為0的現象發生,不會導致梯度消失。
這樣,ResNet的構建,使我們更朝著符合我們的直覺走下去,即越深的網絡對于高級抽象特征的提取和網絡性能更好,不用在擔心隨著網絡的加深發生退化問題了。
參考鏈接:https://baijiahao.baidu.com/s?id=1609100487339160987&wfr=spider&for=pc
作者:鄧沉香
鏈接:https://www.jianshu.com/p/ad6b07fe3215
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
總結
以上是生活随笔為你收集整理的ResNet网络解决的一些事的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ResNet 残差、退化等细节解读
- 下一篇: 1MPa等于多少公斤压力?