天天看點

如何解決RNN中梯度消失問題?梯度消失:解決

梯度消失:

由于0-1範圍内的導數累乘,會發現累乘會導緻激活函數導數的累乘,如果取tanh或sigmoid函數作為激活函數的話,那麼必然是一堆小數在做乘法,結果就是越乘越小。随着時間序列的不斷深入,小數的累乘就會導緻梯度越來越小直到接近于0,這就是“梯度消失“現象。

解決

  1. 選取更好的激活函數,如Relu激活函數。ReLU函數的左側導數為0,右側導數恒為1,這就避免了“梯度消失“的發生。但恒為1的導數容易導緻“梯度爆炸“,但設定合适的門檻值可以解決這個問題
  2. 加入BN層,其優點包括可加速收斂、控制過拟合,可以少用或不用Dropout和正則、降低網絡對初始化權重不敏感,且能允許使用較大的學習率等
  3. 改變傳播結構,如換成LSTM