梯度爆炸與梯度消失
阿新 • • 發佈:2018-12-18
梯度消失:
這種情況往往在神經網路中選擇了不合適的啟用函式時出現。如神經網路使用sigmoid作為啟用函式,這個函式有個特點,就是能將負無窮到正無窮的數對映到0和1之間,並且對這個函式求導的結果是f′(x)=f(x)(1−f(x))。因此兩個0到1之間的數相乘,得到的結果就會變得很小。當神經網路層數非常深的時候,最後一層產生的梯度就因為乘了很多的小於1的導數而越來越小,最終就會變為0,從而導致層數比較淺的權重沒有更新,這就是梯度消失。
梯度爆炸:
初始化權值w時過大,導致前面層會比後面層變化的更快,這樣就會導致權值越來越大,這就是梯度爆炸。即網路層之間的梯度(值大於1.0)重複相乘導致的指數級增長會產生梯度爆炸。
如何修復梯度爆炸?
1、重新設計網路模型
將層數設計少一些;使用更小的批尺寸資料來訓練網路;減小學習率也可能有效。
2、使用 ReLU 啟用函式
在深度多層感知機神經網路中,梯度爆炸的發生可能是因為啟用函式,如之前很流行的 Sigmoid 和 Tanh 函式。使用 ReLU 啟用函式可以減少梯度爆炸。採用 ReLU 啟用函式是最適合神經網路隱藏層的新實踐。
3.、使用長短期記憶網路
在迴圈神經網路中,梯度爆炸的發生可能是因為某種網路的訓練本身就存在不穩定性
4、使用梯度截斷(Gradient Clipping)
在訓練過程中檢查和限制梯度的大小,這就是梯度截斷。
5、使用權重正則化(Weight Regularization)
檢查網路權重的大小,並懲罰產生較大權重值的損失函式。該過程被稱為權重正則化,通常使用的是 L1 懲罰項(權重絕對值)或 L2 懲罰項(權重平方)。