經典網絡結構(六)ResNet


論文題目:Deep Residual Learning for Image Recognition

文獻地址:https://arxiv.org/pdf/1512.03385.pdf

源碼地址:https://github.com/KaimingHe/deep-residual-networks

 

論文題目:Identity Mappings in Deep Residual Networks

文獻地址:https://arxiv.org/pdf/1603.05027.pdf

源碼地址:https://github.com/KaimingHe/resnet-1k-layers

 

ResNet v1: DBL結構

ResNet v2: post-activation or pre-activation BLD的結構, 先使用BN進行預激活。

  

  深度學習最顯著的特點就是它的網絡深。之前在卷積神經網絡中也提到過,淺層的卷積層只能提取一些諸如紋理等比較簡單,抽象的特征,而比較深層的卷積層可以提取到諸如器官、人臉等比較復雜、具體的特征。 直觀的感受:深的網絡一般會比淺的網絡好,想要提升模型的准確率,最直接的方法就是加深模型網絡的深度

  然而,從之前介紹的經典深度網絡(LeNet, AlexNet, VGG, GooLeNet)中可以看出,雖然網絡深度有所增加,並且越深的效果越好,但總體網絡層數並不大。如下圖所示,最深的GooLeNet不過也就22層為什么不直接搞個成百上千層呢

  對於一個常規網絡,如下圖所示,通過實驗驗證可得,當網絡層數比較深的時候,模型的效果卻越來越差(模型的誤差越來越高)。如果對於神經網絡有一定基礎的話,其實不難理解,隨着網絡層數的加深,反向傳播的過程中,靠后的網絡參數可以獲得比較好的訓練更新,而比較靠前的網絡,由於鏈式求導法則連乘的性質,梯度信號越來越弱,網絡參數更新越來越難。 也就是說,隨着網絡的加深,網絡將會遇到梯度彌散(梯度消失)的問題,深度網絡變得難以訓練不同深度的層訓練不同步。【舉一個直觀的例子,假如采用Sigmoid函數,對於幅度為1的信號,每向后傳遞一層,梯度就衰減為原來的0.25,層數越多,衰減越厲害】。

  前面的實驗描述的是,當網絡比較深時,模型的准確率會不如淺層的神經網絡。下面的實驗描述的是隨着網絡層數的增加,模型的准確率會先上升,然后達到飽和,如果網絡深度繼續加深時,會導致准確率的下降,如下圖所示:

Residual Network v1

  ResNet引入了殘差網絡結構(residual network),通過這種殘差網絡結構可以把網絡層弄的很深(據說目前可以達到1000多層),並且最終的分類效果也非常好,殘差網絡的基本結構如下圖所示,很明顯,該圖是帶有跳躍結構的:

  從上述結構中可以看出,Residual network中包含一條捷徑,可以直接將前兩層的信息x傳輸到后兩層,(其結構會想到過控當中的前饋控制)這種結構實際上是想讓x無損失的傳遞到更深層的網絡當中,也就是說,讓模型自己去選擇接受x的量。當第二層的權重和偏執為0時,就相當於只走了捷徑,即a[l]直接將信息傳到了a[l+2]。但如果僅這樣理解,會感覺有種深層的網絡好像也只是淺層的網絡的錯覺,你給它開辟了捷徑,走捷徑就好了。

  實際上,這樣種理解只是為了描述殘差塊具有學習恆等式函數的能力,也是證明當信息經過很深的層進行轉換后,信息不會丟失。這是基於前向信息轉換過程的理解。基於反向誤差的傳播過程的理解其將深層的網絡截成一小段、一小段的網絡,並且能夠保證誤差在各段之間幾乎無衰減的傳播,而殘差塊中層數比較少,誤差傳播起來衰減的程度在可以接受的范圍之內。這樣也就有效的解決了深層網絡中,梯度消失的問題。

  深度學習中的問題不僅僅是隨着網絡層數的增加,誤差的反向傳播可能會消失彌散的問題,還有信息經過正向傳播至網絡輸出時,信息也會有彌散丟失的問題。

  【DenseNet】一文中有相應的描述:

  As CNNs become increasingly deep, a new research problem emerges: as information about the input or gradient passes through many layers, it can be vanish and "wash out" by the time it reaches the end (or begining) of the network.

  從上述34層的結構圖中可以看出,在網絡的捷徑中,有實線的捷徑,也有虛線的捷徑。

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

  殘差塊有兩層殘差學習單元,也有三層殘差學習單元,如下圖所示yolo中用的就是三層的殘差學習塊。

  三層的殘差學習單元的結構與優化的Inception V1中的思想一致,首先由於輸入的feature map的通道數量可能比較大,直接進行3*3卷積可能會造成卷積核參數數量過大。需要首先降低輸入的feature map的通道數量,再進行3*3的same卷積,最后,為了與捷徑進行很好的加和,需要采用1*1卷積將通道數量提升至256。 由於做的都是same卷積,但為了減少輸入的尺寸,網絡中會不定期的選擇池化操作,或者步長為大於1的卷積操作 進行降采樣

  以下是實驗對比,可以看出加了殘差塊的深層網絡能夠獲得更好的效果。

Residual Network v2

  ResNet v2 和 ResNet v1 的主要區別在於,

  • "shortcut connection"(捷徑連接)的非線性激活函數(如ReLU)替換為 Identity Mappings。
  • ResNet v2 在每一層中都使用了 Batch Normalization。  

  以下有5張與Residual Network很像的圖,一起來辨別真偽吧!

  其中,weight為conv層; addition表示相加。  

  根據之前Residual Network v1的描述,仿佛這5種結構都能夠滿足要求。 那么2016年ResNet原文是哪一個結構呢?而且其他四組結構的設計是否可行?

  首先, 2016年ResNet原文中使用的是結構(1),其特點包括:

  • BN和ReLU在weight的后面,這與yolo中理解的DBL是相同的
  • 最后的ReLU在addition的后面  

  【如果將右側的部分稱為residual分支,左側的部分稱為identity分支。

  按照常規,把兩個DBL都放在residual分支中不更好么?就是(3)中的結構。那么(3)是否OK?

  在(3)中,ReLU作為residual分支的結束,則residual分支得到的結果永遠非負,這樣前向的時候輸入會單調遞增,從而影響特征的表達能力。也就是說,希望residual分支的結果是(-∞, +∞)的圖(3)不OK!圖(3)會使得前向過程輸出單調遞增,影響模型對於特征的表達。

  那如果把BN和ReLU均移到addition后面呢?圖(2)是否OK?

  將BN也放在addition外面,BN將會改變identity分支的分布,影響了整個的信息傳遞,在訓練的時候會阻礙loss的下降。 ----- 它的存在會有損反向傳播過程中identity誤差的傳播。(它是一層,會對其進行鏈式法則的求導,會有衰減,會對后續的identity分支產生影響。層數多了,依舊會有梯度消失的可能) 因此,圖(2)不OK! 圖(2)會阻礙反向傳播時梯度信息無障礙的傳遞。  

  綜上ResNet的特點:

  1. 不輕易改變identity分支的值;
  2. 不在其外部添加分支;

  總之,就是讓identity在反向的過程中,梯度信息可以無障礙的傳遞。  

  再來看圖(1)~圖(3)與圖(4)~圖(5)的區別,圖(1)~圖(3)是典型的"post-activation",而圖(4)~圖(5)是"pre-activation"。也就是激活函數是在conv層之前,還是之后。

  【"post-activation"】

  xl表示第l個殘差單元的輸入特征,Wl表示

  作者將ResNet v1中相同形狀連接堆疊的模塊稱之為殘差單元(Residual Units)。

  那實際上,殘差網絡可以表示為一個遞歸的運算

  也就是說,任意深層L的單元xL都可以表示成所有的殘差輸出的總和再加上x0

  對於Eq.4 其反向傳播的可以表示為:

  Eq.5中,描述了在ResNet中,梯度可以分解為兩個部分:

  • 其一,是將誤差在沒有任何權重的層中直接傳播;其保證了誤差信息可以直接的傳輸到任意的淺層單元中---- 此處驗證了之前對於V1可以解決反向傳播梯度消失的理解的正確性!
  • 其二,是通過一些包含權重的層進行傳播。 與常規的plain network 一樣。  

  作者又分析了,如果在identity分支中增加一些東西的話(如下圖的(b-f)),都會影響誤差的反向傳遞。即使是一個因子λ,都會因反向傳播時λ的連乘而導致誤差信號的衰減。

  Table 1 顯示的實驗結果驗證了 short-cut中的操作 (縮放、門控、1×1 的卷積以及 dropout) 會阻礙誤差信息的傳遞,以致於對優化造成困難。【門控與LSTM中的門一樣,就是一個logistic函數】

  

  接下來,才是關於ResNet V2的描述

  使用了He2016中的ResNet-110和164層瓶頸結構進行實驗,殘差單元包含一個1×1的層來降維一個3×3的層,還有一個1×1的層恢復維度。【之前提到的3層殘差結構】

  其在original的基礎上,提出了4種變體,並論證其可能性:(前文詳細的介紹過了)

  1. BN after addition (圖b)
  2. ReLU before addtion (圖c)
  3. post-activation or pre-activation(圖d and 圖e)  

  從Table 2的實驗結果上,我們可以發現圖(4)的結構與ResNet原結構伯仲之間,稍稍遜色,然而圖(5)的結構卻好於ResNet原結構

  圖5的結構好的原因在於兩點:

  1)反向傳播基本符合假設,信息傳遞無阻礙;

  2)BN層作為pre-activation,起到了正則化的作用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM