殘差網絡(ResNet)


一直拖着沒研究大名鼎鼎的殘差網絡,最近看YOLO系列,研究到YOLOv3時引入了殘差網絡的概念,逃不過去了,還是好好研究研究吧~

一,引言

   殘差網絡是深度學習中的一個重要概念,這篇文章將簡單介紹殘差網絡的思想,並結合文獻討論殘差網絡有效性的一些可能解釋。

  以下是本文的概覽:

  1.   動機:深度神經網絡的“兩朵烏雲”
  2.   殘差網絡的形式化定義與實現
  3.   殘差網絡解決了什么,為什么有效?
  4.   自然語言處理中的殘差結構
  5.   總結與擴展

二,動機:深度神經網絡的“兩朵烏雲”

  神經網絡具有非常強的表達能力,並且免去了繁重的特征工程,在BP算法提出以及算例逐漸提升的背景下,逐漸受到了研究人員和開發者的青睞。

  在展開文章前,首先以前饋神經網絡為例,定義以下神經網絡。一個前饋神經網絡$f(x; \theta)$,由若干層神經元組成,為了方便討論,我們以非線性單元(若干層神經元組成的函數單元)為單位討論神經網絡,即神經網絡$f(x; \theta)$由L個非線性單元堆疊而成(后面將每個單元稱為一層),令$a^{(0)} = x$,則神經網絡第$l$層(1≤l≤L)的凈輸入$z^{(l)}$與輸出$a^{(l)}$的計算由下式給出:

$a^{(l)}=H(a^{l-1})$          (1)

   $a^{(l)}=g(z^{(l)})$           (2)

  其中,$H(·)$是該層的內部運算,依照網絡類型有所不同;$g(·)$是第$l$層的輸出激活函數。

  一般認為,經過訓練的深度神經網絡能夠將數據特征逐層抽象,最終提取出完成任務所需要的特征/表示,最終使用一個簡單的分類器(或其他學習器),就可以完成最終任務——因此深度學習也被叫做表示/特征學習。

  在“層層抽象”的直覺下,很自然的想法就是,訓練一個很深的前饋神經網路,來完成任務。直觀上看,更深的神經網絡,在非線性激活函數的加持下,擁有更大的假設空間,因此當然“更有可能”包含了一個最優解。但是在實際使用時,訓練又成了一個難題。除了過擬合問題以外,更深的神經網絡會遇到如下兩個難題,我姑且按照物理史的比喻將其稱為深度神經網絡的“兩朵烏雲”:

2.1 梯度彌散/爆炸

  現代神經網絡一般是通過基於梯度的BP算法來優化,對前饋神經網絡而言,一般需要前向傳播輸入信號,然后反向傳播誤差並使用梯度方法更新參數。第 [公式] 層的某參數更新需要計算損失 [公式] 對其的梯度,該梯度依賴於該層的誤差項 [公式],根據鏈式法則,[公式]又依賴於后一層的誤差項[公式]:

 

[公式]

  假設網絡單元輸入輸出維度一致,定義 [公式] ,則有

[公式]

  當 [公式] 時,第 [公式] 層的誤差項較后一層減小,如果很多層的情況都是如此,就會導致反向傳播中,梯度逐漸消失,底層的參數不能有效更新,這也就是梯度彌散(或梯度消失);當 [公式] 時,則會使得梯度以指數級速度增大,造成系統不穩定,也就是梯度爆炸問題。

  在很深層的網絡中,由於不能保證 [公式] 的大小,也很容易出現梯度彌散/爆炸。這是兩朵烏雲中的第一朵。

2.2 網絡退化問題

  在前面的討論中,梯度彌散/爆炸問題導致模型訓練難以收斂,但是這個問題很大程度上已經被標准初始化和中間層正規化方法有效控制了,這些方法使得深度神經網絡可以收斂。深度神經網絡面臨的另一朵烏雲是網絡退化問題:

    在神經網絡可以收斂的前提下,隨着網絡深度增加,網絡的表現先是逐漸增加至飽和,然后迅速下降[1]

  需要注意,網絡退化問題不是過擬合導致的,即便在模型訓練過程中,同樣的訓練輪次下,退化的網絡也比稍淺層的網絡的訓練錯誤更高,如下圖[1]所示。

模型退化:深層模型反而取得更高的訓練和測試誤差

  這一點並不符合常理:如果存在某個 [公式] 層的網絡 [公式] 是當前最優的網絡,那么可以構造一個更深的網絡,其最后幾層僅是該網絡[公式] 第[公式] 層輸出的恆等映射(Identity Mapping),就可以取得與[公式] 一致的結果;也許[公式] 還不是所謂“最佳層數”,那么更深的網絡就可以取得更好的結果。總而言之,與淺層網絡相比,更深的網絡的表現不應該更差。因此,一個合理的猜測就是,對神經網絡來說,恆等映射並不容易擬合(在MobileNet V2的論文中提到,由於非線性激活函數Relu的存在,每次輸入到輸出的過程都幾乎是不可逆的,這也造成了許多不可逆的信息損失。我們試想一下,一個特征的一些有用的信息損失了,那他的表現還能做到持平嗎?答案是顯然的)。舉個例子,假設已經有了一個最優化的網絡結構,是18層。當我們設計網絡結構的時候,我們並不知道具體多少層次的網絡時最優化的網絡結構,假設設計了34層網絡結構。那么多出來的16層其實是冗余的,我們希望訓練網絡的過程中,模型能夠自己訓練這五層為恆等映射,也就是經過這層時的輸入與輸出完全一樣。但是往往模型很難將這16層恆等映射的參數學習正確,那么就一定會不比最優化的18層網絡結構性能好,這就是隨着網絡深度增加,模型會產生退化現象。它不是由過擬合產生的,而是由冗余的網絡層學習了不是恆等映射的參數造成的。

  我們要區分:degenerate(退化)問題和gradient vanish(梯度消失)是兩個層面的問題:

  • gradient vanish說的是只要層數高了,gradient就會vanish,而不是說隨着迭代數變多會越來越vanish(當然也可能有這個問題,但是本來不是指這個)。所以gradient vanish隨層數增多而變嚴重的,還沒迭代什么事呢。
  • degenerate問題是隨着迭代而變嚴重的。也就是fix住network層數,越迭代就會越degenerate。

  這是兩個層面的問題,當然都會導致Deep network訓練困難。 以下是對退化問題的闡述:

  • 准確率下降問題(degradation problem):層級大到一定程度時准確率就會飽和,然后迅速下降,這種下降即不是梯度消失引起的也不是overfit造成的,而是由於網絡過於復雜,以至於光靠不加約束的放養式的訓練很難達到理想的錯誤率。degradation problem不是網絡結構本身的問題,而是現有的訓練方式不夠理想造成的。
  • 另一種解釋:神經網絡越來越深的時候,反傳回來的梯度之間的相關性會越來越差,最后接近白噪聲。因為我們知道圖像是具備局部相關性的,那其實可以認為梯度也應該具備類似的相關性,這樣更新的梯度才有意義,如果梯度接近白噪聲,那梯度更新可能根本就是在做隨機擾動。
  • 還有種解釋:網絡退化的原因是非線性激活函數造成的不可逆信息損失,因此深層網絡比淺層網絡錯誤率更高,更難以被優化。 作者:PULSE_ https://www.bilibili.com/read/cv11180330 出處:bilibili

  也許我們可以對網絡單元進行一定的改造,來改善退化問題?這也就引出了殘差網絡的基本思路...

三,殘差網絡的形式化定義與實現

  既然神經網絡不容易擬合一個恆等映射,那么一種思路就是構造天然的恆等映射。假設神經網絡非線性單元的輸入和輸出維度一致,可以將神經網絡單元內要擬合的函數 [公式] 拆分成兩個部分,即:

[公式]

  其中 [公式] 是殘差函數。在網絡高層,學習一個恆等映射 [公式] 即等價於令殘差部分趨近於0,即 [公式] 。

  殘差單元可以以跳層連接的形式實現,即將單元的輸入直接與單元輸出加在一起,然后再激活。因此殘差網絡可以輕松地用主流的自動微分深度學習框架實現,直接使用BP算法更新參數[1]

  通過對深度網絡退化問題的認識我們已經明白,要讓之不退化,根本原因就是如何做到恆等映射。事實上,已有的神經網絡很難擬合潛在的恆等映射函數H(x)=x。但如果把網絡設計為H(x)=F(x)+x,即直接把恆等映射作為網絡的一部分,就可以把問題轉化為學習一個殘差函數F(x)=H(x)-x。只要F(x)=0,就構成了一個恆等映射H(x)=x。 而且,擬合殘差至少比擬合恆等映射容易得多(后面第三部分會解釋)。我們看一下殘差結構與正常結構對比圖:

  

    • 我們可以看到,殘差結構比正常的結構多了右側的曲線,這個曲線也叫作shortcut connection,通過跳接在激活函數前,將上一層(或幾層)的輸出與本層輸出相加,將求和的結果輸入到激活函數作為本層的輸出。
    • 我們從數學的角度來看殘差結構,假設殘差結構的輸入為x,則輸出H(x)等於:
      H(x)=F(x,W_{i})+x
    • 其中F(x,W_{i})就是我們要學習的殘差,我們把x移到等式的左側,殘差就等於H(x)-x,以上圖為例,殘差就是中間有一個Relu激活的雙層權重,即:
      F=W_{2}\sigma (W_{1}(x))
    • 其中\sigma是Relu激活函數,而W_{1}, W_{2}是指兩個weight layer。

 

  實驗表明,殘差網絡很好地解決了深度神經網絡的退化問題,並在ImageNet和CIFAR-10等圖像任務上取得了非常好的結果,同等層數的前提下殘差網絡也收斂得更快[1]。這使得前饋神經網絡可以采用更深的設計。除此之外,去除個別神經網絡層,殘差網絡的表現不會受到顯著影響[2],這與傳統的前饋神經網絡大相徑庭。

四, 殘差網絡解決了什么,為什么有效?

  殘差網絡在圖像領域已然成為了一種主流模型,雖然這種網絡范式的提出是為了解決網絡退化問題,但是關於其作用的機制,還是多有爭議。目前存在幾種可能的解釋,下面分別列舉2016年的兩篇文獻和2018年的一篇文獻中的內容。

4.1 從前后向信息傳播的角度來看

  何愷明等人從前后向信息傳播的角度給出了殘差網路的一種解釋[3]

  考慮式 [公式] 這樣的殘差塊組成的前饋神經網絡,為了討論簡便,暫且假設殘差塊不使用任何激活函數,即

[公式]

  考慮任意兩個層數 [公式] ,遞歸地展開 [公式] ,

[公式]

  可以得到

[公式]

  根據式 [公式] ,在前向傳播時,輸入信號可以從任意低層直接傳播到高層。由於包含了一個天然的恆等映射,一定程度上可以解決網絡退化問題。

這樣,最終的損失 [公式] 對某低層輸出的梯度可以展開為

[公式]

  或展開寫為

[公式]

  根據式 [公式] ,損失對某低層輸出的梯度,被分解為了兩項,前一項 [公式] 表明,反向傳播時,錯誤信號可以不經過任何中間權重矩陣變換直接傳播到低層,一定程度上可以緩解梯度彌散問題(即便中間層矩陣權重很小,梯度也基本不會消失)。

  綜上,可以認為殘差連接使得信息前后向傳播更加順暢。

  * 加入了激活函數的情況的討論(實驗論證)請參見[3]

4.2 集成學習的角度

  Andreas Veit等人提出了一種不同的視角[2]。他們將殘差網絡展開,以一個三層的ResNet為例,將得到下面的樹形結構:

  殘差網絡的展開形式使用圖來表示就是

殘差網絡的展開形式

  這樣,殘差網絡就可以被看作是一系列路徑集合組裝而成的一個集成模型,其中不同的路徑包含了不同的網絡層子集。Andreas Veit等人展開了幾組實驗(Lesion study),在測試時,刪去殘差網絡的部分網絡層(即丟棄一部分路徑)、或交換某些網絡模塊的順序(改變網絡的結構,丟棄一部分路徑的同時引入新路徑)。實驗結果表明,網絡的表現與正確網絡路徑數平滑相關(在路徑變化時,網絡表現沒有劇烈變化),這表明殘差網絡展開后的路徑具有一定的獨立性和冗余性,使得殘差網絡表現得像一個集成模型(ensemble)。

  作者還通過實驗表明,殘差網絡中主要在訓練中貢獻了梯度的是那些相對較短的路徑,從這個意味上來說,殘差網絡並不是通過保留整個網絡深度上的梯度流動來抑制梯度彌散問題,一定程度上反駁了何愷明等[3]中的觀點。但是,我覺得這個實驗結果與何凱明等的結論並不矛盾,因為這些較短的梯度路徑正是由殘差結構引入的。

  * 可以類比集成學習的網絡架構方法不僅有殘差網絡,Dropout機制也可以被認為是隱式地訓練了一個組合的模型。

4.3 梯度破碎問題

  2018年的一篇論文,The Shattered Gradients Problem: If resnets are the answer, then what is the question?[4],指出了一個新的觀點,盡管殘差網絡提出是為了解決梯度彌散和網絡退化的問題,它解決的實際上是梯度破碎問題(the shattering gradient problem):

在標准前饋神經網絡中,隨着深度增加,梯度逐漸呈現為白噪聲(white noise)。

  作者通過可視化的小型實驗(構建和訓練一個神經網絡 [公式] )發現,在淺層神經網絡中,梯度呈現為棕色噪聲(brown noise),深層神經網絡的梯度呈現為白噪聲。在標准前饋神經網絡中,隨着深度增加,神經元梯度的相關性(corelation)按指數級減少 ( [公式] );同時,梯度的空間結構也隨着深度增加被逐漸消除。這也就是梯度破碎現象。

  神經網絡梯度及其協方差矩陣的可視化,可以看到標准的前饋網絡的梯度在較深時(b)與白噪聲(e)類似。

  梯度破碎為什么是一個問題呢?這是因為許多優化方法假設梯度在相鄰點上是相似的,破碎的梯度會大大減小這類優化方法的有效性。另外,如果梯度表現得像白噪聲,那么某個神經元對網絡輸出的影響將會很不穩定。

  相較標准前饋網絡,殘差網絡中梯度相關性減少的速度從指數級下降到亞線性級(sublinearly, [公式] ),深度殘差網絡中,神經元梯度介於棕色噪聲與白噪聲之間(參見上圖中的c,d,e);殘差連接可以極大地保留梯度的空間結構。殘差結構緩解了梯度破碎問題。

  * 更細致的實驗與討論請參見[4]

五. 自然語言處理中的殘差結構

  與圖像領域不同的是,自然語言處理中的網絡往往“寬而淺”,在這些網絡中殘差結構很難有用武之地。但是在谷歌提出了基於自注意力的Transformer架構[5],特別是BERT[6]出現以后,自然語言處理也擁有了“窄而深”的網絡結構,因此當然也可以充分利用殘差連接,來達到優化網絡的目的。事實上,Transformer本身就包含了殘差連接,其中編碼器和解碼器中的每一個子模塊都包含了殘差連接,並使用了Layer Normalization。

Transformer架構

  可以預見的是,基於深度學習的自然語言處理的網絡結構很可能朝着更“深”的方向發展,那么殘差結構就是一個幾乎不可缺少的選項了。

六. 總結與擴展

  殘差網絡真可謂是深度學習的一把利器,它的出現使得更深的網絡訓練成為可能。類似殘差網絡的結構還有Highway Network[7],與殘差網絡的差別在於加入了門控機制(注意它和ResNet是同時期的工作),文獻[4]中也對Highway Network進行了討論,值得一讀;現在廣泛使用的門控RNN,我認為與Highway Network有異曲同工之妙,可以認為是在時間維上引入了門控的殘差連接;在殘差網絡中使用的跳層連接,在自然語言處理中也有相當多的應用,比如Bengio的神經語言模型[8]、文本匹配模型ESIM[9]等,區別在於這些工作中跳層連接僅僅將不同層次的特征拼接在一起(而不是相加),達到增加特征多樣性、加快訓練的目的。

參考

  1. ^abcdDeep Residual Learning for Image Recognition http://arxiv.org/abs/1512.03385
  2. ^abResidual Networks Behave Like Ensembles of Relatively Shallow Networks http://arxiv.org/abs/1605.06431
  3. ^abcIdentity Mappings in Deep Residual Networks https://arxiv.org/abs/1603.05027
  4. ^abcThe Shattered Gradients Problem: If resnets are the answer, then what is the question? https://arxiv.org/abs/1702.08591
  5. ^Attention Is All You Need https://arxiv.org/abs/1706.03762
  6. ^BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding https://arxiv.org/abs/1810.04805
  7. ^Highway Networks https://arxiv.org/abs/1505.00387
  8. ^A Neural Probabilistic Language Model http://www.researchgate.net/publication/2413241_A_Neural_Probabilistic_Language_Model
  9. ^Enhanced LSTM for Natural Language Inference http://arxiv.org/abs/1609.06038v3

轉自:殘差網絡解決了什么,為什么有效?

CVPR2016:ResNet 從根本上解決深度網絡退化問題

 


免責聲明!

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



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