梯度消失&梯度爆炸(Vanishing/exploding gradients)


1.梯度消失

根據鏈式法則,如果每一層神經元對上一層的輸出的偏導乘上權重結果都小於1的話,那么即使這個結果是0.99,在經過足夠多層傳播之后,誤差對輸入層的偏導會趨於0。

這種情況會導致靠近輸入層的隱含層神經元調整極小。

2.梯度膨脹

根據鏈式法則,如果每一層神經元對上一層的輸出的偏導乘上權重結果都大於1的話,在經過足夠多層傳播之后,誤差對輸入層的偏導會趨於無窮大。

這種情況又會導致靠近輸入層的隱含層神經元調整變動極大。

3. 梯度消失的原因詳細解釋

生物神經元似乎是用 Sigmoid(S 型)激活函數活動的,因此研究人員在很長一段時間內堅持 Sigmoid 函數。但事實證明,Relu 激活函數通常在 ANN 工作得更好。這是生物研究誤導的例子之一。

當神經網絡有很多層,每個隱藏層都使用Sigmoid函數作為激勵函數時,很容易引起梯度消失的問題

我們知道Sigmoid函數有一個缺點:當x較大或較小時,導數接近0;並且Sigmoid函數導數的最大值是0.25

 我們將問題簡單化來說明梯度消失問題,假設輸入只有一個特征,沒有偏置單元,每層只有一個神經元:

 

我們先進行前向傳播,這里將Sigmoid激勵函數寫為s(x):

z1 = w1*x

a1 = s(z1)

z2 = w2*a1

a2 = s(z2)

...

zn = wn*an-1 (這里n-1是下標)

an = s(zn)

 根據鏈式求導和反向傳播,我們很容易得出,其中C是代價函數

 

 如果我們使用標准方法來初始化網絡中的權重,那么會使用一個均值為0標准差為1的高斯分布。因此所有的權重通常會滿足|wj|<1,而s‘是小於0.25的值,那么當神經網絡特別深的時候,梯度呈指數級衰減,導數在每一層至少會被壓縮為原來的1/4,當z值絕對值特別大時,導數趨於0,正是因為這兩個原因,從輸出層不斷向輸入層反向傳播訓練時,導數很容易逐漸變為0,使得權重和偏差參數無法被更新,導致神經網絡無法被優化,訓練永遠不會收斂到良好的解決方案。 這被稱為梯度消失問題。

 4.梯度爆炸的原因

當我們將w初始化為一個較大的值時,例如>10的值,那么從輸出層到輸入層每一層都會有一個s‘(zn)*wn的增倍,當s‘(zn)為0.25時s‘(zn)*wn>2.5,同梯度消失類似,當神經網絡很深時,梯度呈指數級增長,最后到輸入時,梯度將會非常大,我們會得到一個非常大的權重更新,這就是梯度爆炸的問題,在循環神經網絡中最為常見。

5.解決辦法

梯度消失和梯度爆炸問題都是因為網絡太深,網絡權值更新不穩定造成的,本質上是因為梯度反向傳播中的連乘效應。解決梯度消失、爆炸主要有以下幾種方法:

(1) pre-training+fine-tunning

此方法來自Hinton在2006年發表的一篇論文,Hinton為了解決梯度的問題,提出采取無監督逐層訓練方法,其基本思想是每次訓練一層隱節點,訓練時將上一層隱節點的輸出作為輸入,而本層隱節點的輸出作為下一層隱節點的輸入,此過程就是逐層“預訓練”(pre-training);在預訓練完成后,再對整個網絡進行“微調”(fine-tunning)。此思想相當於是先尋找局部最優,然后整合起來尋找全局最優,此方法有一定的好處,但是目前應用的不是很多了。

(2) 梯度剪切:對梯度設定閾值

梯度剪切這個方案主要是針對梯度爆炸提出的,其思想是設置一個梯度剪切閾值,然后更新梯度的時候,如果梯度超過這個閾值,那么就將其強制限制在這個范圍之內。這可以防止梯度爆炸

(3) 權重正則化

另外一種解決梯度爆炸的手段是采用權重正則化(weithts regularization),正則化主要是通過對網絡權重做正則來限制過擬合。如果發生梯度爆炸,那么權值就會變的非常大,反過來,通過正則化項來限制權重的大小,也可以在一定程度上防止梯度爆炸的發生。比較常見的是 L1 正則和 L2 正則,在各個深度框架中都有相應的API可以使用正則化。

(4) 選擇relu等梯度大部分落在常數上的激活函數

relu函數的導數在正數部分是恆等於1的,因此在深層網絡中使用relu激活函數就不會導致梯度消失和爆炸的問題

(5) batch normalization

BN就是通過對每一層的輸出規范為均值和方差一致的方法,消除了權重參數放大縮小帶來的影響,進而解決梯度消失和爆炸的問題,或者可以理解為BN將輸出從飽和區拉倒了非飽和區。

(6) 殘差網絡的捷徑(shortcut)

 相比較於以前直來直去的網絡結構,殘差中有很多這樣(如上圖所示)的跨層連接結構,這樣的結構在反向傳播中具有很大的好處,可以避免梯度消失

(7) LSTM的“門(gate)”結構

LSTM全稱是長短期記憶網絡(long-short term memory networks),LSTM的結構設計可以改善RNN中的梯度消失的問題。主要原因在於LSTM內部復雜的“門”(gates),如下圖所示。

 LSTM 通過它內部的“門”可以在接下來更新的時候“記住”前幾次訓練的”殘留記憶“。

參考:

https://blog.csdn.net/junjun150013652/article/details/81274958

https://zhuanlan.zhihu.com/p/72589432


免責聲明!

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



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