梯度消失與梯度爆炸

1、產生緣由網絡

假設咱們使用的激活函數爲sigmoid函數。其導數爲g(x)*(1-g(x)),圖像以下:函數

也就是sigmoid函數導數最大值爲0.25。學習

當咱們根據鏈式法則進行反向求導的時候,公式最終是權重和sigmoid導數的連乘形式,以下:spa

若是使用一個均值0標準差爲1的高斯分佈來初始化權值,全部的權重一般會知足 |w|<1,而激活函數f的導數也是0-1之間的數,其連乘後,結果會變的很小,致使梯度消失。若咱們初始化的w是很大的數,w大到乘以激活函數的導數都大於1,即abs(w)>4,那麼連乘後,可能會致使求導的結果很大,造成梯度爆炸設計

 

2、解決辦法blog

 

1. 從新設計網絡模型ip

 

在深度神經網絡中,梯度爆炸能夠經過從新設計層數更少的網絡來解決。io

 

使用更小的批尺寸對網絡訓練也有好處。另外也許是學習率的緣由,學習率過大致使的問題,減少學習率。神經網絡

 

在循環神經網絡中,訓練過程當中在更少的先前時間步上進行更新(沿時間的截斷反向傳播,truncated Backpropagation through time)能夠緩解梯度爆炸問題。循環

 

 

 

2. 使用 ReLU 激活函數

 

在深度多層感知機神經網絡中,梯度爆炸的發生多是由於激活函數,如以前很流行的 Sigmoid 和 Tanh 函數。

 

使用 ReLU 激活函數能夠減小梯度爆炸。採用 ReLU 激活函數是最適合隱藏層的實踐,Relu一樣能夠防止梯度消失

 

 

 

3. 使用長短時間記憶網絡

 

 在循環神經網絡中,梯度爆炸的發生多是由於某種網絡的訓練自己就存在不穩定性,如隨時間的反向傳播本質上將循環網絡轉換成深度多層感知機神經網絡。

 

使用長短時間記憶(LSTM)單元和相關的門類型神經元結構能夠減小梯度爆炸問題,也能減小梯度消失。

 

採用 LSTM 單元是適合循環神經網絡的序列預測的最新最好實踐。

 

 

 

4. 使用梯度截斷(Gradient Clipping)

 

 在很是深且批尺寸較大的多層感知機網絡和輸入序列較長的 LSTM 中,仍然有可能出現梯度爆炸。若是梯度爆炸仍然出現,你能夠在訓練過程當中檢查和限制梯度的大小。這就是梯度截斷。

 

 

 

5. 使用權重正則化(Weight Regularization)

 

若是梯度爆炸仍然存在,能夠嘗試另外一種方法,即檢查網絡權重的大小,並懲罰產生較大權重值的損失函數。該過程被稱爲權重正則化,一般使用的是 L1 懲罰項(權重絕對值)或 L2 懲罰項(權重平方)。