機器學習32:對Resnet幾個問題的理解

機器學習32:對Resnet幾個問題的理解

         Resnet對傳統網絡的改進:加入Shortcut連接,改善了深層網絡的網絡退化問題,使網絡模型可以訓練到很深層等已經是老生常談了,也訓練過Resnet模型有效地分類了Cifar數據集,但是對於Resnet始終存有幾個疑問。

         首先第一個問題是爲什麼F(x)=x較F(x)=0擬合難度大;第二個問題是如果殘差模塊的訓練目標是恆等映射,那麼網絡性能在不退化的情況下是如何提升的?爲什麼要加入恆等映射的單元?第三個問題是如何解釋殘差網絡的有效性。

         帶着這些問題主要在知乎/博客和慕課上查找了一些資料,對於這些問題不同的答主也有不同的理解方式,這裏摘抄整理了一些我覺得有說服力的解釋,基本可以解釋我對於這些問題的疑問。

1.傳統網絡和殘差網絡的比對:

         網絡輸入:x

         網絡輸出:F(x)

         網絡要擬合的目標H(x)​​​​​​​

         傳統網絡的訓練目標:H(x)​​​​​​​=F(x)​​​​​​​

         殘差網絡的訓練目標:F(x)​​​​​​​=H(x)​​​​​​​-x

         殘差網絡的輸出爲:F(x)​​​​​​​=傳統輸出+x

 

2.模型退化的原因:

     (1)第一個解釋:

       當堆疊模型時,理所當然會認爲效果是堆疊層數越高越好,然而事實上由於非線性激活函數Relu的存在,每次輸入到輸出的過程都幾乎是不可逆的(信息損失),很難從輸出反推回完整的輸入。

        “什麼都不做”的恆等變換恰好是當前神經網絡最難做到的東西之一。因此,可以認爲Resnet模塊的初衷,其實是讓模型的內部結構至少有恆等映射的能力。以保證在堆疊網絡的過程中,網絡至少不會因爲繼續堆疊而產生退化。

     (2)第二個解釋:

        神經網絡越來越深的時候,反傳回來的梯度之間的相關性會越來越差,最後接近白噪聲。

        因爲圖像是具備局部相關性的,那其實可以認爲梯度也應該具備類似的相關性,這樣更新的梯度纔有意義,如果梯度接近白噪聲,那梯度更新可能根本就是在做隨機擾動。

        有了梯度相關性這個指標之後,分析一系列的結構和激活函數可以發現Resnet在保持梯度相關性方面很優秀。

        這一點很好理解,從梯度流來看,有一路梯度是保持原樣不動地往回傳,這部分的相關性是非常強的。

 

3.爲什麼殘差模塊的輸出爲傳統輸出+x:

     (1)第一種解釋:

         因爲多餘層的目標是恆等變換,也就是F(x)​​​​​​​+x=x,那麼F(x)​​​​​​​的訓練目標就是0,比較容易;如果是其他比如F(x)​​​​​​​+x=x/2,那麼F(x)​​​​​​​的訓練目標就是x/2,是一個非0的值,比0難實現。

     (2)第二種解釋:

         殘差的作用類似於差分放大器,去掉相同的主體部分,從而突出微小的變化。

         如果F(5)=5.1 ,現在繼續訓練模型,使得映射函數F(5)=5。(5.1-5)/5.1=2%,也許淺層網路可以把學習率從0.01設置爲0.0000001可以處理,深層的話可能就不太好用了。

         如果設計爲殘差結構,5.1變化爲5,也就是F(5)=0.1變化爲F(5)=0.這個變化率增加了100%,引入殘差後映射對輸出變化變的更加敏感了,明顯後者輸出變化對權重的調整作用更大,所以效果更好。

         這也就是爲什麼ResNet雖然層數很多但是收斂速度也不會低的原因。

   

4.因爲Resnet深層網絡的訓練目標是恆等變換,也就是H(x)=x,那麼也就相當於F(x)​​​​​​​=0,爲什麼有博客說F(x)=0比F(x)=x的擬合難度低:

     (1)第一種解釋:

         把f(x)和x看作向量,要訓練的權重也是多個高維向量,假如x是二維(x1,x2),那麼權重就是2*2的矩陣。擬合F(x)​​​​​​​=x,w要做的運算爲求解下面方程組得到x爲單位矩陣:

                         w11x1+w12x2 = x1

                         w21x1+w22x2 = x2

        如果擬合F(x)=0,只需要w=0就可以了。

     (2)第二種解釋:​​​​​​​

 

5.如果殘差學習的是恆等變換,那如何通過殘差模塊進行網絡性能上的提升:

     (1)第一個解釋:【知乎李其剛的回答】

         跳連接相加可以實現不同分辨率特徵的組合,淺層容易有高分辨率但是低級語義的特徵,而深層的特徵有高級語義,但分辨率比較低。

        事物本身的特徵就是不同層次的,比如區分男女相對容易,不需要複雜的計算或者那麼深層的網絡模型,但是要區分兩個女孩就需要更復雜的計算更深層的網絡,我們把網絡看作一個映射或者函數,在沒有殘差模塊的短路連接的網絡中,無論簡單還是複雜的特徵都要用一個很複雜的網絡來處理或轉換,這有一些不合常理,Resnet引入了捷徑,不同層次提取到的特徵可以通過捷徑影響預測結果。在Resnet中,我們要區分三個人的思路是:先提出男女特徵,這個特徵通過捷徑直接影響結果,更細緻的臉型皮膚等網絡區分兩個女孩。

        Resnet的短路連接至可以跨越一種分辨率,Densenet跳接組合了更多分辨率的特徵。

     (2)第二個解釋:

        引入跳接讓模型自身有了更加靈活的結構,也就是在訓練過程中,模型可以選擇在每一個部分是“更多進行卷積與非線性變換”還是更多傾向於“什麼也不做”,或者二者結合,模型在訓練時自適應本身的結構。

     (3)第三個解釋:

        “在初始化和BN已經解決了梯度消失/爆炸”這個客觀事實下,假設把淺層模型權重100%拷貝到深層,模型效果應該和淺層網絡一樣,不應該變差。在這個前提下,如果在淺層網絡上堆疊一些新層,這些層“哪怕有一點梯度傳過來,那都算是正向收益”。

          100%拷貝權重可以用X=H(x)​​​​​​​表示,X是淺層輸出,H(x)​​​​​​​是)拷貝完後的深層,這也就是作者說的理想情況下的恆等映射。假如我們在X和H(x)​​​​​​​之間加一些層“擾動或者delta”,也就是H(x)​​​​​​​=X+F(x)​​​​​​​,只要模型能學到這個delta網絡層的權重,那麼就是整個深層模型有效的。

     (4)第四個解釋:【知乎SuperMHP】
          殘差模塊並不是就是恆等,可以理解爲,當網絡需要這個模塊恆等時它比較容易變成恆等,而傳統的卷積模塊很難通過學習變成恆等,因爲信號與系統中Filter的衝擊響應要爲一個衝擊函數,3神經網絡本質是學習概率分佈,因此局部一層不容易變成恆等,而Resnet模塊的引入給了神經網絡學習恆等映射的能力。

         所以Resnet除了減弱梯度消失外,這也是一種自適應深度,也就是網絡可以自己調節層數的深淺,不需要太深的網絡時中間恆等映射就多,需要深層網絡時中間的恆等映射就少。

         當然實際上的神經網絡的訓練結果基本是一個整體,並不會有這麼強的局部特性,也不一定會出現某些模塊嚴格恆等的情況。

     (5)第五個解釋:

         當F(x)​​​​​​​=0時,那麼H(x)=x,也就是說學習到的是恆等變換,輸入爲x,輸出也爲x,這是一種非常極端的情況,在這個極端的情況下至少可以保證層數增加時網絡的性能不會下降,並且F(x)​​​​​​​=0很容易學習(只需要將對應的W和b均置0即可)。        

          既然是恆等變換,那爲什麼還要加這一層呢,不加這層直接輸出不就好了嗎?是因爲實際上學習到的殘差不一定爲0,這也會使得堆積層在輸入特徵基礎上學習到新的特徵,從而擁有更好的性能。

 

6.Resnet有效性的三種解釋:

     (1)第一個解釋【何凱明論文中指出的動機】:

         使網絡更容易在某些層學到的恆等變換,在某些層執行恆等變換是一種構造性解,使更深的模型的性能至少不低於較淺的模型。

         [1512.03385] Deep Residual Learning for Image Recognition

     (2)第二個解釋:

         殘差網絡是很多淺層網絡的集成,主要的實驗證據是:把Resnet中的某些層直接刪掉,模型的性能幾乎不下降。

         [1605.06431] Residual Networks Behave Like Ensembles of Relatively Shallow Networks

     (3)第三個解釋:

        殘差網絡使信息更容易在各層之間流動,包括在前向傳播時提供特徵重用,在反向傳播時緩解梯度信號消失。

         [1603.05027] Identity Mappings in Deep Residual Networks

 

7.參考資料:

        (1) https://blog.csdn.net/qq_34823656/article/details/96010327

        (2)https://www.zhihu.com/question/64494691

        (3)https://www.zhihu.com/question/53224378

        (4)https://www.cnblogs.com/aoru45/p/10798027.html

        (5)https://cloud.tencent.com/developer/news/221146

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章