白話深度殘差網路ResNet
一說起「深度學習」,自然就聯想到它非常顯著的特點「深、深、深」(重要的事說三遍),通過很深層次的網路實現準確率非常高的圖像識別、語音識別等能力。因此,我們自然很容易就想到:深的網路一般會比淺的網路效果好,如果要進一步地提升模型的準確率,最直接的方法就是把網路設計得越深越好,這樣模型的準確率也就會越來越準確。
那現實真的是這樣嗎?
先看幾個經典的圖像識別深度學習模型:
這幾個模型都是在世界頂級比賽中獲獎的著名模型,然而,一看這些模型的網路層次數量,似乎讓人很失望,少則5層,多的也就22層而已,這些世界級模型的網路層級也沒有那麼深啊,這種也算深度學習嗎?為什麼不把網路層次加到成百上千層呢?
帶著這個問題,我們先來看一個實驗,對常規的網路(plain network,也稱平原網路)直接堆疊很多層次,經對圖像識別結果進行檢驗,訓練集、測試集的誤差結果如下圖:
上面兩個圖可以看出,在網路很深的時候(56層相比20層),模型效果卻越來越差了(誤差率越高),並不是網路越深越好。
通過實驗可以發現:隨著網路層級的不斷增加,模型精度不斷得到提升,而當網路層級增加到一定的數目以後,訓練精度和測試精度迅速下降,這說明當網路變得很深以後,深度網路就變得更加難以訓練了。
【問題來了】為什麼隨著網路層級越深,模型效果卻變差了呢?
下圖是一個簡單神經網路圖,由輸入層、隱含層、輸出層構成:
回想一下神經網路反向傳播的原理,先通過正向傳播計算出結果output,然後與樣本比較得出誤差值Etotal
根據誤差結果,利用著名的「鏈式法則」求偏導,使結果誤差反向傳播從而得出權重w調整的梯度。下圖是輸出結果到隱含層的反向傳播過程(隱含層到輸入層的反向傳播過程也是類似):
通過不斷迭代,對參數矩陣進行不斷調整後,使得輸出結果的誤差值更小,使輸出結果與事實更加接近。
從上面的過程可以看出,神經網路在反向傳播過程中要不斷地傳播梯度,而當網路層數加深時,梯度在傳播過程中會逐漸消失(假如採用Sigmoid函數,對於幅度為1的信號,每向後傳遞一層,梯度就衰減為原來的0.25,層數越多,衰減越厲害),導致無法對前面網路層的權重進行有效的調整。
那麼,如何又能加深網路層數、又能解決梯度消失問題、又能提升模型精度呢?
【主角登場】深度殘差網路(Deep Residual Network,簡稱DRN)
前面描述了一個實驗結果現象,在不斷加神經網路的深度時,模型準確率會先上升然後達到飽和,再持續增加深度時則會導致準確率下降,示意圖如下:
那麼我們作這樣一個假設:假設現有一個比較淺的網路(Shallow Net)已達到了飽和的準確率,這時在它後面再加上幾個恆等映射層(Identity mapping,也即y=x,輸出等於輸入),這樣就增加了網路的深度,並且起碼誤差不會增加,也即更深的網路不應該帶來訓練集上誤差的上升。而這裡提到的使用恆等映射直接將前一層輸出傳到後面的思想,便是著名深度殘差網路ResNet的靈感來源。
ResNet引入了殘差網路結構(residual network),通過這種殘差網路結構,可以把網路層弄的很深(據說目前可以達到1000多層),並且最終的分類效果也非常好,殘差網路的基本結構如下圖所示,很明顯,該圖是帶有跳躍結構的:
殘差網路借鑒了高速網路(Highway Network)的跨層鏈接思想,但對其進行改進(殘差項原本是帶權值的,但ResNet用恆等映射代替之)。
假定某段神經網路的輸入是x,期望輸出是H(x),即H(x)是期望的複雜潛在映射,如果是要學習這樣的模型,則訓練難度會比較大;
回想前面的假設,如果已經學習到較飽和的準確率(或者當發現下層的誤差變大時),那麼接下來的學習目標就轉變為恆等映射的學習,也就是使輸入x近似於輸出H(x),以保持在後面的層次中不會造成精度下降。
在上圖的殘差網路結構圖中,通過「shortcut connections(捷徑連接)」的方式,直接把輸入x傳到輸出作為初始結果,輸出結果為H(x)=F(x)+x,當F(x)=0時,那麼H(x)=x,也就是上面所提到的恆等映射。於是,ResNet相當於將學習目標改變了,不再是學習一個完整的輸出,而是目標值H(X)和x的差值,也就是所謂的殘差F(x) := H(x)-x,因此,後面的訓練目標就是要將殘差結果逼近於0,使到隨著網路加深,準確率不下降。
這種殘差跳躍式的結構,打破了傳統的神經網路n-1層的輸出只能給n層作為輸入的慣例,使某一層的輸出可以直接跨過幾層作為後面某一層的輸入,其意義在於為疊加多層網路而使得整個學習模型的錯誤率不降反升的難題提供了新的方向。
至此,神經網路的層數可以超越之前的約束,達到幾十層、上百層甚至千層,為高級語義特徵提取和分類提供了可行性。
下面感受一下34層的深度殘差網路的結構圖,是不是很壯觀:
上圖可以看出,怎麼有一些「shortcut connections(捷徑連接)」是實線,有一些是虛線,有什麼區別呢?如下圖
因為經過「shortcut connections(捷徑連接)」後,H(x)=F(x)+x,如果F(x)和x的通道相同,則可直接相加,那麼通道不同怎麼相加呢。上圖中的實線、虛線就是為了區分這兩種情況的:
除了上面提到的兩層殘差學習單元,還有三層的殘差學習單元,如下圖所示:
兩種結構分別針對ResNet34(左圖)和ResNet50/101/152(右圖),其目的主要就是為了降低參數的數目。左圖是兩個3x3x256的卷積,參數數目: 3x3x256x256x2 = 1179648,右圖是第一個1x1的卷積把256維通道降到64維,然後在最後通過1x1卷積恢復,整體上用的參數數目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,右圖的參數數量比左圖減少了16.94倍,因此,右圖的主要目的就是為了減少參數量,從而減少計算量。
對於常規的ResNet,可以用於34層或者更少的網路中(左圖);對於更深的網路(如101層),則使用右圖,其目的是減少計算和參數量。
經檢驗,深度殘差網路的確解決了退化問題,如下圖所示,左圖為平原網路(plain network)網路層次越深(34層)比網路層次淺的(18層)的誤差率更高;右圖為殘差網路ResNet的網路層次越深(34層)比網路層次淺的(18層)的誤差率更低。
結語
ResNet在ILSVRC2015競賽中驚艷亮相,一下子將網路深度提升到152層,將錯誤率降到了3.57,在圖像識別錯誤率和網路深度方面,比往屆比賽有了非常大的提升,ResNet毫無懸念地奪得了ILSVRC2015的第一名。如下圖所示:
在ResNet的作者的第二篇相關論文《Identity Mappings in Deep Residual Networks》中,提出了ResNet V2。ResNet V2 和 ResNet V1 的主要區別在於,作者通過研究 ResNet 殘差學習單元的傳播公式,發現前饋和反饋信號可以直接傳輸,因此「shortcut connection」(捷徑連接)的非線性激活函數(如ReLU)替換為 Identity Mappings。同時,ResNet V2 在每一層中都使用了 Batch Normalization。這樣處理後,新的殘差學習單元比以前更容易訓練且泛化性更強。
牆裂建議
建議仔細閱讀下何凱明關於深度殘差網路的兩篇經典論文,深度殘差網路的主要思想便是在這論文中提出來的,值得收藏閱讀
想要閱讀完整版本的《Deep Residual Learning for Image Recognition》、《Identity Mappings in Deep Residual Networks》論文內容,請關注本公眾號,然後回復「論文」關鍵字可在線閱讀這兩篇經典論文的內容。


※雕刻——你的思想到手的延伸
※聲臨其境,重視的是否只是聲音?
TAG:全球大搜羅 |