1. 程式人生 > >梯度爆炸與梯度消失

梯度爆炸與梯度消失

梯度消失:

這種情況往往在神經網路中選擇了不合適的啟用函式時出現。如神經網路使用sigmoid作為啟用函式,這個函式有個特點,就是能將負無窮到正無窮的數對映到0和1之間,並且對這個函式求導的結果是f′(x)=f(x)(1−f(x))。因此兩個0到1之間的數相乘,得到的結果就會變得很小。當神經網路層數非常深的時候,最後一層產生的梯度就因為乘了很多的小於1的導數而越來越小,最終就會變為0,從而導致層數比較淺的權重沒有更新,這就是梯度消失。

梯度爆炸:

初始化權值w時過大,導致前面層會比後面層變化的更快,這樣就會導致權值越來越大,這就是梯度爆炸。即網路層之間的梯度(值大於1.0)重複相乘導致的指數級增長會產生梯度爆炸。

在深層網路或迴圈神經網路中,誤差梯度可在更新中累積,變成非常大的梯度,然後導致網路權重的大幅更新,並因此使網路變得不穩定。在極端情況下,權重的值變得非常大,以至於溢位,導致 NaN 值。

如何修復梯度爆炸?

1、重新設計網路模型

將層數設計少一些;使用更小的批尺寸資料來訓練網路;減小學習率也可能有效。

2、使用 ReLU 啟用函式

在深度多層感知機神經網路中,梯度爆炸的發生可能是因為啟用函式,如之前很流行的 Sigmoid 和 Tanh 函式。使用 ReLU 啟用函式可以減少梯度爆炸。採用 ReLU 啟用函式是最適合神經網路隱藏層的新實踐。

3.、使用長短期記憶網路

在迴圈神經網路中,梯度爆炸的發生可能是因為某種網路的訓練本身就存在不穩定性

,如隨時間的反向傳播本質上將迴圈網路轉換成深度多層感知機神經網路。使用長短期記憶(LSTM)單元和相關的門型別神經元結構可以減少梯度爆炸問題。 LSTM 單元是適合迴圈神經網路的序列預測的最新最好實踐。

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

在訓練過程中檢查和限制梯度的大小,這就是梯度截斷。

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

檢查網路權重的大小,並懲罰產生較大權重值的損失函式。該過程被稱為權重正則化,通常使用的是 L1 懲罰項(權重絕對值)或 L2 懲罰項(權重平方)。