RNN梯度問題

2022-06-18 07:09:11 字數 857 閱讀 4828

梯度消失的原因

在多層網路中,影響梯度大小的因素主要有兩個:權重和啟用函式的偏導。深層的梯度是多個啟用函式偏導乘積的形式來計算,如果這些啟用函式的偏導比較小(小於1)或者為0,那麼梯度隨時間很容易vanishing;相反,如果這些啟用函式的偏導比較大(大於1),那麼梯度很有可能就會exploding。因而,梯度的計算和更新非常困難。

解決方案:

使用乙個合適啟用函式,它的梯度在乙個合理的範圍。lstm使用gate function,有選擇的讓一部分資訊通過。gate是由乙個sigmoid單元和乙個逐點乘積操作組成,sigmoid單元輸出1或0,用來判斷通過還是阻止,然後訓練這些gate的組合。所以,當gate是開啟的(梯度接近於1),梯度就不會vanish。並且sigmoid不超過1,那麼梯度也不會explode。

lstm的效果:

1、當gate是關閉的,那麼就會阻止對當前資訊的改變,這樣以前的依賴資訊就會被學到。

2、當gate是開啟的時候,並不是完全替換之前的資訊,而是在之前資訊和現在資訊之間做加權平均。所以,無論網路的深度有多深,輸入序列有多長,只要gate是開啟的,網路都會記住這些資訊。

rnn訓練隨機問題

解決方案1 解決方案2 在訓練文件 ai lstm prob.py 的開頭處中加入 from numpy.random import seed seed 1 from tensorflow import set random seed set random seed 2 訓練結果仍然不同 結論 還存...

從根本上分析 RNN網路梯度消失的原因

和cnn等深度神經網路梯度消失的原因不同,rnn中所謂的梯度消失並不是真正意義上的梯度消失,準確的說應該是梯度消散 rnn 中同樣的優化引數在各個時刻共享,最終的梯度 g 各個時間步的梯度 g t 的和 較遠時刻的輸出對相比於相鄰時刻的輸出,梯度的計算需要更多次求導運算,這就導致遠距離的梯度更容易消...

梯度下降的問題

matplotlib inline import gluonbook as gb import math from mxnet import ndimport numpy as np eta 0.4 deff 2d x1,x2 return 0.1 x1 2 2 x2 2 defgd 2d x1,x...