出現梯度消失和梯度爆炸的原因及解決方案


梯度消失和梯度爆炸其實是一種情況:均是在神經網絡中,當前面隱藏層的學習速率低於后面隱藏層的學習速率,即隨着隱藏層數目的增加,分類准確率反而下降了。

梯度消失產生的原因:

(1)隱藏層的層數過多;

(2)采用了不合適的激活函數(更容易產生梯度消失,但是也有可能產生梯度爆炸)

梯度爆炸產生的原因:

(1)隱藏層的層數太多;

(2)權重初始化值過大。

1、為什么說隱藏層數過多會造成梯度消失或梯度爆炸?

從深層網絡角度來講,不同的層學習的速度差異很大,表現為網路中靠近輸出的層學習的情況很好,靠近輸入的層學習的很慢,有時甚至訓練了很久,前基層的權值和剛開始隨機初始化的值差不多。因此,梯度消失、爆炸,其根本原因在於反向傳播訓練法則,屬於先天不足。

2、為什么激活函數會影響?

我們以下圖的反向傳播為例,假設每一層只有一個神經元且對於每一層都可以用公式1表示,其中δ為sigmoid函數,C表示的是代價函數,前一層的輸出和后一層的輸入關系如公式1所示。我們可以推導出公式2:

其導數圖像如下圖所示:

可見,sigmoid導數的最大值為1/4,而我們一般會使用標准方法來初始化網絡權重,即使用一個均值為0,標准差為1的高斯分布。因此,初始化的網絡權值通常都小於1,對於2的鏈式求導,層數越多,求導結果越小,最終導致梯度消失的情況出現。所以說,sigmoid函數一般不適合用於神經網絡中。

3、初始化權重的值過大

也就是w比較大的情況下,根據2式的鏈式相乘可得(反向傳播),則前面的網絡層比后面的網絡層梯度變化更快,引起了梯度爆炸的問題。所以,在一般的神經網絡中,權重的初始化一般都利用高斯分布隨機產生權重值。

梯度消失與梯度爆炸的解決方案:

(1)預訓練加微調

(2)梯度剪切、正則

(3)ReLU、LeakyReLU、ELU等激活函數

(4)BatchNormalization

(5)殘差結構

(6)LSTM

參考:https://www.cnblogs.com/XDU-Lakers/p/10553239.html

 


免責聲明!

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



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