吳恩達深度學習筆記(84)-殘差網絡講解 (ResNets)

殘差網絡(Residual Networks (ResNets))

非常非常深的神經網絡是很難訓練的

非常非常深的神經網絡是很難訓練的,非常非常深的神經網絡是很難訓練的,記住這句話!

因為存在梯度消失和梯度爆炸問題。

這節課我們學習跳躍連接(Skip connection),它可以從某一層網絡層獲取激活,然後迅速反饋給另外一層,甚至是神經網絡的更深層。我們可以利用跳躍連接構建能夠訓練深度網絡的ResNets,有時深度能夠超過100層,讓我們開始吧。

ResNets是由殘差塊(Residual block)構建的,首先我解釋一下什麼是殘差塊。

吳恩達深度學習筆記(84)-殘差網絡講解 (ResNets)

這是一個兩層神經網絡,在L層進行激活,得到a^[l+1] ,再次進行激活,兩層之後得到a^[l+2] 。

計算過程是從a^([l])開始,首先進行線性激活,根據這個公式:z^[l+1] =W^[l+1] a^([l])+b^[l+1] ,通過a^([l])算出z^[l+1] ,即a^([l])乘以權重矩陣,再加上偏差因子。

然後通過ReLU非線性激活函數得到a^[l+1] ,a^[l+1] =g(z^[l+1] )計算得出。接著再次進行線性激活,依據等式z^[l+2] =W^[2+1] a^[l+1] +b^[l+2] ,

最後根據這個等式再次進行ReLu非線性激活,即a^[l+2] =g(z^[l+2] ),這裡的g是指ReLU非線性函數,得到的結果就是a^[l+2] 。

換句話說,信息流從a^[l] 到a^[l+2] 需要經過以上所有步驟,即這組網絡層的主路徑。

吳恩達深度學習筆記(84)-殘差網絡講解 (ResNets)

在殘差網絡中有一點變化,我們將a^([l])直接向後,拷貝到神經網絡的深層,在ReLU非線性激活函數前加上a^([l]),這是一條捷徑。捷徑哎,記得吶~

a^([l])的信息直接到達神經網絡的深層,不再沿著主路徑傳遞,這就意味著最後這個等式(a^[l+2] =g(z^[l+2] ))去掉了,取而代之的是另一個ReLU非線性函數,仍然對z^[l+2] 進行 g函數處理,但這次要加上a^([l]),即: a^[l+2] =g(z^[l+2] +a^([l]) ),也就是加上的這個a^([l])產生了一個殘差塊。

吳恩達深度學習筆記(84)-殘差網絡講解 (ResNets)

在上面這個圖中,我們也可以畫一條捷徑,直達第二層。實際上這條捷徑是在進行ReLU非線性激活函數之前加上的,而這裡的每一個節點都執行了線性函數和ReLU激活函數。

所以a^([l])插入的時機是在線性激活之後,ReLU激活之前。除了捷徑,你還會聽到另一個術語“跳躍連接”,就是指a^([l])跳過一層或者好幾層,從而將信息傳遞到神經網絡的更深層。

ResNet的發明者是何愷明(Kaiming He)、張翔宇(Xiangyu Zhang)、任少卿(Shaoqing Ren)和孫劍(Jiangxi Sun),他們發現使用殘差塊能夠訓練更深的神經網絡。所以構建一個ResNet網絡就是通過將很多這樣的殘差塊堆積在一起,形成一個很深神經網絡,我們來看看這個網絡。

吳恩達深度學習筆記(84)-殘差網絡講解 (ResNets)

這並不是一個殘差網絡,而是一個普通網絡(Plain network),這個術語來自ResNet論文。

吳恩達深度學習筆記(84)-殘差網絡講解 (ResNets)

把它變成ResNet的方法是加上所有跳躍連接,正如前一張幻燈片中看到的,每兩層增加一個捷徑,構成一個殘差塊。如圖所示,5個殘差塊連接在一起構成一個殘差網絡。

吳恩達深度學習筆記(84)-殘差網絡講解 (ResNets)

如果我們使用標準優化算法訓練一個普通網絡,比如說梯度下降法,或者其它熱門的優化算法。如果沒有殘差,沒有這些捷徑或者跳躍連接,憑經驗你會發現隨著網絡深度的加深,訓練錯誤會先減少,然後增多。

而理論上,隨著網絡深度的加深,應該訓練得越來越好才對。也就是說,理論上網絡深度越深越好。但實際上,如果沒有殘差網絡,對於一個普通網絡來說,深度越深意味著用優化算法越難訓練。實際上,隨著網絡深度的加深,訓練錯誤會越來越多。

但有了ResNets就不一樣了,即使網絡再深,訓練的表現卻不錯,比如說訓練誤差減少,就算是訓練深達100層的網絡也不例外

有人甚至在1000多層的神經網絡中做過實驗,儘管目前我還沒有看到太多實際應用。但是對x的激活,或者這些中間的激活能夠到達網絡的更深層。重點作用:這種方式確實有助於解決梯度消失和梯度爆炸問題,讓我們在訓練更深網絡的同時,又能保證良好的性能

也許從另外一個角度來看,隨著網絡越來深,網絡連接會變得臃腫,但是ResNet確實在訓練深度網絡方面非常有效。

現在大家對ResNet已經有了一個大致的瞭解,至於為什麼ResNets能有如此好的表現,接下來我會有更多更棒的內容分享給大家,我們下個筆記見。


分享到:


相關文章: