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