網絡退化問題:ResNet 通過殘差連接建立高速網絡,實現恆等映射

01 深層網絡診斷越深越好嗎?

深度學習的概念源於人工神經網絡,而之所以叫深度學習。我認為有 2 點,第一是網絡很深,非常深,第二是學習,如何學習呢?通過數學建模,不斷調整參數達到減少目標值和預測值之間的誤差,從而可以擬合任意的曲線,達到準確預測的目的。

而今天我們就來談談深度學習的一個特點:

深層網絡一般會比淺層網絡效果好,包含的信息更多,因此,如果我們想要提升模型準確率,最直接的方法就是把網絡設計的更深,這樣模型的準確率會越來越準確。

但是,現實場景真是這樣嗎?我們先來看一組數據,下表是經典的圖像識別深度學習模型。

CV 模型 發佈時間 層數 成就 LeNet 1998 5 經典手寫數字識別模型 AlexNet 2012 8 ILSVRC 2012 第一名 VGG 2014 19 ILSVRC 2014 第二名 GoogleNet 2014 22 ILSVRC 2014 第一名

這幾個模型都是世界頂級比賽中獲獎的著名模型,然而,這些模型的網絡層數,少則 5 層,多也就 22 層。這些世界頂級比賽中的模型並非我們想象中的那麼深,多則成百上千層。為什麼會出現這種問題?

帶著這個問題,我們先看一個實驗,對於常規網絡,直接堆疊很多層,經過圖像識別檢測,訓練集,測試集和誤差結果表現如圖:

網絡退化問題:ResNet 通過殘差連接建立高速網絡,實現恆等映射

上圖中,56 層 和 20 層相比,模型越深,訓練集和測試集上誤差越大,這也並不是過擬合,過擬合是訓練集表現優秀,測試集表現一般。實驗表明:隨著網絡層數增加,模型準確率會得到一定的提升,當網絡層數增加到一定數量後,訓練和測試誤差會準會先飽和,之後急劇下降。

在深層網絡訓練中,我們都知道,隨著層數增加,訓練和優化會變得越來越難,一個很大的原因就是梯度消失和爆炸問題,也就是退化問題。

02 網絡訓練失敗的罪魁禍首是退化問題

退化問題: 隨著網絡層數增加,錯誤率反而提高了。主要是因為當網絡深度很深的時候,會出現梯度消失等問題。

假設你有這樣一個神經網絡,第一層是輸入層,包含 2 個神經元 i1, i2,和截距項 b1;第二層是隱藏層,包含 2 個神經元 h1,h2 和截距項 b2,每條線上標的 wi 是層與層關係連接的權重,激活函數我們默認為 sigmoid 函數。

網絡退化問題:ResNet 通過殘差連接建立高速網絡,實現恆等映射

現對他們賦初始值。

網絡退化問題:ResNet 通過殘差連接建立高速網絡,實現恆等映射

  • 輸入數據:i1=0.05, i2=0.10
  • 輸出數據:o1=0.01, o2=0.99
  • 初始權重:w1=0.15, w2=0.20, w3=0.25, w4=0.30;w5=0.40, w6=0.45, w7=0.50, w8=0.55
  • 目標:給出輸入數據,使得輸出儘可能和原始輸出接近。

回想一下神經網絡的反向傳播,先通過正向傳播計算出結果,然後與樣本比較得出誤差值 Etotal。

網絡退化問題:ResNet 通過殘差連接建立高速網絡,實現恆等映射

根據誤差結果,利用鏈式法則求偏導,使得結果誤差反向傳播從而得出權重 w 調整梯度。下圖是輸出結果到隱含層的反向傳播過程。

網絡退化問題:ResNet 通過殘差連接建立高速網絡,實現恆等映射

通過不斷迭代,對參數矩陣進行不斷調整,使得輸出的誤差值更小,使得輸出結果與實際結果更接近。

從上面的過程可以看出,神經網絡在反向傳播過程中要不斷傳播梯度,而當層數加深,梯度在傳播過程中逐漸消失,導致無法對前面網絡的權重進行有效調整。

如何既能加深網絡層數,又能解決梯度消失問題,從而提升模型精度呢?

03 ResNet 建立高速網絡,輸入與輸出恆等映射

在 MobileNet V2 的論文中提到,由於非線性激活函數 Relu 的存在,每次輸入到輸出的過程幾乎是不可逆的,這也造成很多不可逆的信息損失,那我們可以試想一下,一個特質的一些有用信息損失了,那他的表現還能持平嗎?答案是顯然的。

我們用一個直觀的例子來感受一下深層網絡與淺層網絡持平的表現:

網絡退化問題:ResNet 通過殘差連接建立高速網絡,實現恆等映射

右邊的網絡可以理解為左邊的淺層網絡加深了 3 層,假設我們希望右邊的深層網絡與左邊的淺層網絡持平,即是可以理解為右邊的 3 層網絡相當於沒增加 --- 輸入等於輸出。

03.1 恆等映射

所以,ResNet 的初衷,就是讓網絡擁有這種恆等映射能力,能在加深網絡的時候,至少能保證深層網絡和淺層網絡持平。ResNet 引入了殘差網絡結構 (Residual Network),通過這種殘差網絡結構,可以把網絡層弄得很深,甚至達到成百上千層。並且最終分類效果也非常好,殘差網絡基本結構如圖:

網絡退化問題:ResNet 通過殘差連接建立高速網絡,實現恆等映射

殘差網絡借鑑了高速網絡 (Higeway Network) 的跨層連接思想,但與其有些許不同 (殘差項本是帶權值的,但 ResNet 用恆等映射代替之)。

在上圖的殘差網絡結構圖中,通過 “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 層作為輸入的慣例,使某一層的輸出可以直接跨過幾層作為後面某一層的輸入,其意義在於為疊加多層網絡而使得整個學習模型的錯誤率不降反升的難題提供了新的方向。

下圖的網絡結構圖中,從左到右分別是 VGG,沒有殘差的 PlainNet,以及有殘差的 ResNet,從這張圖中可以感受到當年 ResNet 對 VGG 的統治力。

網絡退化問題:ResNet 通過殘差連接建立高速網絡,實現恆等映射

03.2 通道維度不同如何解決?

可以看到裡面的殘差網絡結構有些是實線,有些是虛線,有何區別?因為經過 “shortcut connections (捷徑連接)” 後,H(x)=F(x) + x,如果 F(x) 和 x 的通道相同,則可直接相加,那麼通道不同怎麼相加呢。上圖中的實線、虛線就是為了區分這兩種情況的:

  • 實線的 Connection 部分,由於通道相同,所以計算方式是 H(x)=F(x)+x。
  • 虛線的的 Connection 部分,由於通道不同,採用的計算方式為 H(x)=F(x)+Wx,其中 W 是卷積操作,用來調整 x 維度的。

03.3 兩層殘差結構和三層殘差結構的不同

網絡退化問題:ResNet 通過殘差連接建立高速網絡,實現恆等映射

兩種結構分別針對 ResNet34(左圖)和 ResNet50/101/152(右圖),其目的主要就是為了降低參數的數目。

左圖是兩個 3x3x256 的卷積,參數數目: 3x3x256x256x2 = 1179648,右圖是第一個 1x1 的卷積把 256 維通道降到 64 維,然後在最後通過 1x1 卷積恢復,整體上用的參數數目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,右圖的參數數量比左圖減少了 16.94 倍,因此,右圖的主要目的就是為了減少參數量,從而減少計算量。

對於常規的 ResNet,可以用於 34 層或者更少的網絡中(左圖);對於更深的網絡(如101層),則使用右圖,其目的是減少計算和參數量。

03.4 實驗結果

作者對比了 18 層的神經網絡和 34 層的神經網絡,發現殘差結構確實解決了網絡退化問題:

網絡退化問題:ResNet 通過殘差連接建立高速網絡,實現恆等映射

左圖為平原網絡,34 層的網絡比 18 層的網絡誤差率更高;右圖為殘差網絡結構模型,深層網絡比淺層網絡誤差率更低。

04 總結

ResNet 在 ILSVRC 2015 競賽中驚豔亮相,一下子將網絡深度提升到 152 層,將錯誤率降到了3.57,在圖像識別錯誤率和網絡深度方面,比往屆比賽有了非常大的提升,ResNet 毫無懸念地奪得了 ILSVRC 2015 的第一名。如下圖所示:

網絡退化問題:ResNet 通過殘差連接建立高速網絡,實現恆等映射

在 ResNet 的作者的第二篇相關論文《Identity Mappings in Deep Residual Networks》中,提出了 ResNet V2。ResNet V2 和 ResNet V1 的主要區別在於,作者通過研究 ResNet 殘差學習單元的傳播公式,發現前饋和反饋信號可以直接傳輸,因此 “shortcut connection”(捷徑連接)的非線性激活函數(如 ReLU)替換為 Identity Mappings。同時,ResNet V2 在每一層中都使用了 Batch Normalization。這樣處理後,新的殘差學習單元比以前更容易訓練且泛化性更強。


分享到:


相關文章: