對於梯度消失和梯度爆炸的理解

1、梯度消失、梯度爆炸產生的緣由html

   說白了,對於1.1 1.2,其實就是矩陣的高次冪致使的。在多層神經網絡中,影響因素主要是權值和激活函數的偏導數。算法

1.1 前饋網絡網絡

  假設存在一個網絡結構如圖:函數

  其表達式爲:優化

 

  若要對於w1求梯度,根據鏈式求導法則,獲得的解爲:spa

 

  一般,若使用的激活函數爲sigmoid函數,其導數:3d

  這樣能夠看到,若是咱們使用標準化初始w,那麼各個層次的相乘都是0-1之間的小數,而激活函數f的導數也是0-1之間的數,其連乘後,結果會變的很小,致使梯度消失。若咱們初始化的w是很大的數,w大到乘以激活函數的導數都大於1,那麼連乘後,可能會致使求導的結果很大,造成梯度爆炸htm

   固然,若對於b求偏導的話,其實也是一個道理:blog

  推出:get

1.2 RNN

  對於RNN的梯度降低方法,是一種基於時間的反向求導算法(BPTT),RNN的表達式:

  一般咱們會將一個完整的句子序列視做一個訓練樣本,所以總偏差即爲各時間步(單詞)的偏差之和。

  而RNN還存在一個權值共享的問題,即這幾個w都是一個,假設,存在一個反覆與w相乘的路徑,t步後,獲得向量:

  若特徵值大於1,則會出現梯度爆炸,若特徵值小於1,則會出現梯度消失。所以在必定程度上,RNN對比BP更容易出現梯度問題。主要是由於RNN處理時間步長一旦長了,W求導的路徑也變的很長,即便RNN深度不大,也會比較深的BP神經網絡的鏈式求導的過程長很大;另外,對於共享權值w,不一樣的wi相乘也在必定程度上能夠避免梯度問題。

 1.3 懸崖和梯度爆炸

  對於目標函數,一般存在梯度變化很大的一個「懸崖」,在此處求梯度,很容易致使求解不穩定的梯度爆炸現象。

 

 3、梯度消失和梯度爆炸哪一種常常出現

  事實上,梯度消失更容易出現,由於對於激活函數的求導:

  能夠看到,當w越大,其wx+b極可能變的很大,而根據上面sigmoid函數導數的圖像能夠看到,wx+b越大,導數的值也會變的很小。所以,若要出現梯度爆炸,其w既要大還要保證激活函數的導數不要過小。

 

 2、如何解決梯度消失、梯度爆炸

  一、對於RNN,能夠經過梯度截斷,避免梯度爆炸

  二、能夠經過添加正則項,避免梯度爆炸

  三、使用LSTM等自循環和門控制機制,避免梯度消失,參考:http://www.javashuo.com/article/p-hfuqwseq-gv.html

  四、優化激活函數,譬如將sigmold改成relu,避免梯度消失

相關文章
相關標籤/搜索