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

梯度消失和梯度爆炸

1.梯度爆炸

1)原因

在深層網路或遞迴神經網路中,誤差梯度在更新中累積得到一個非常大的梯度,這樣的梯度會大幅度更新網路引數,進而導致網路不穩定。在極端情況下,權重的值變得特別大,以至於結果會溢位(NaN值,無窮與非數值)。當梯度爆炸發生時,網路層之間反覆乘以大於1.0的梯度值使得梯度值成倍增長。

2)現象

  • 模型無法在訓練資料上收斂(比如,損失函式值非常差);
  • 模型不穩定,在更新的時候損失有較大的變化;
  • 模型的損失函式值在訓練過程中變成NaN值;

3)解決方案

梯度爆炸更容易處理一些。因為梯度爆炸的時候,我們的程式會收到NaN錯誤。

  1. 可以設定一個梯度閾值,當梯度超過這個閾值的時候可以直接擷取。
  2. 可以使用權重正則化
  3. 使用長短週期記憶網路
  4. 使用修正線性啟用函式
  5. 重新設計網路模型

2梯度消失

梯度消失更難檢測,有三種方法應對梯度消失問題:

  1. 合理的初始化權重值。初始化權重,使每個神經元儘可能不要取極大或極小值,以躲開梯度消失的區域。
  2. 使用relu代替sigmoid和tanh作為啟用函式。
  3. 使用其他結構的RNNs,比如長短時記憶網路(LTSM)和Gated Recurrent Unit(GRU),這是最流行的做法。