深度學習(七)梯度彌散(消散)和梯度爆炸


靠近輸入的神經元會比靠近輸出的神經元的梯度成指數級衰減

 

靠近輸出層的hidden layer 梯度大,參數更新快,所以很快就會收斂;

而靠近輸入層的hidden layer 梯度小,參數更新慢,幾乎就和初始狀態一樣,隨機分布。

這種現象就是梯度彌散(vanishing gradient problem)。

而在另一種情況中,前面layer的梯度通過訓練變大,而后面layer的梯度指數級增大,這種現象又叫做梯度爆炸(exploding gradient problem)。

總的來說,就是在這個深度網絡中,梯度相當不穩定(unstable)。

 

1.梯度消失(vanishing gradient problem):

原因:例如三個隱層、單神經元網絡:

假設上面是一個三層hidden layer的神經網絡,每一層只有一個neuron,我們下面的分析僅僅針對bias,w也是可以類比的。

C是損失函數。

每一層的輸入為z,輸出為a,其中有z = w*a + b。

上面的等式∂c/∂b1由每一層的導數乘上對應的w最后乘上∂c/∂a4組成。

我們給b1一個小的改變Δb1,它會在神經網絡中起連鎖反應,影響最后的C。

我們使用變化率∂c/∂b1~Δc/Δb1來估計梯度。接下來可以進行遞推了。

 

先來計算Δb1對a1的影響。σ(z)為sigmoid函數。

 

 

結果正好是上面∂c/∂b1等式的第一項,然后影響下一層的輸出。

將上面推導出來的兩個式子聯合起來,就得到b1對於z2的影響:

再和∂c/∂b1等式對比一下,驚喜!!

然后的推導就是完全一樣了,每個neuron的導數,乘上w,最終得到C的變化量:

兩邊除以Δb1:

 

sigmoid導數圖像:

sigmoid導數在0取得最大值1/4。

如果我們使用均值為0,方差為1的高斯分布初始化參數w,有|w| < 1,所以有:

可以看出隨着網絡層數的加深的term也會變多,最后的乘積會指數級衰減,

這就是梯度彌散的根本原因。

而有人要問在train的時候如果參數w變得足夠大,就可能使|w|>1,就不滿足了。

的確這樣不會有梯度彌散問題,根據我們之前的分析,當|W|>1時,會使后面的layer參數指數級增加,從而引發梯度爆炸。

 

2.梯度爆炸(exploding gradient problem):

當權值過大,前面層比后面層梯度變化更快,會引起梯度爆炸問題。

 

3.sigmoid時,消失和爆炸哪個更易發生?

量化分析梯度爆炸出現時a的樹枝范圍:因為sigmoid導數最大為1/4,故只有當abs(w)>4時才可能出現

由此計算出a的數值變化范圍很小,僅僅在此窄范圍內會出現梯度爆炸問題。而最普遍發生的是梯度消失問題。

4.如何解決梯度消失和梯度爆炸?

梯度消失:

  1.使用ReLU,maxout等替代sigmoid。

梯度爆炸:

  1.使用Gradient Clipping(梯度裁剪)。通過Gradient Clipping,將梯度約束在一個范圍內,這樣不會使得梯度過大。 

 

Relu和sigmoid區別:

1)sigmoid函數值在[0,1],ReLU函數值在[0,+無窮],所以sigmoid函數可以描述概率,ReLU適合用來描述實數;

(2)sigmoid函數的梯度隨着x的增大或減小和消失,而ReLU不會。

 


免責聲明!

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



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