RNN神经网络的梯度消失和梯度爆炸

时间序列的反向传播算法
得到:
h t h s = h t h t 1 h t 1 h t 2 . . . h s + 1 h s \frac{\partial h_t}{\partial h_s} = \frac{\partial h_t}{\partial h_{t-1}} \frac{\partial h_{t-1}}{\partial h_{t-2}} ... \frac{\partial h_{s+1}}{\partial h_{s}}

注意到:
h t = W f ( h t 1 ) + U x t h_t=Wf(h_{t-1})+Ux_t

计算jacobian 矩阵
h t h s = k = s + 1 t W T d i a g [ f ( W h k 1 ) ] \frac{\partial h_t}{\partial h_s} = \prod^t_{k=s+1}W^Tdiag[f^{'}(Wh_{k-1})]

在这里插入图片描述
根据柯西-西瓦兹不等式
h t h t 1 W T d i a g [ f ( W h t 1 ) ] σ m a x γ \frac{\partial h_t}{\partial h_{t-1}} \leq ||W^T||||diag[f^{'}(Wh_{t-1})]|| \leq \sigma_{max} \gamma

σ m a x \sigma_{max} W T W^T 矩阵的最大奇异值, γ \gamma d i a g [ f ( W h t 1 ) ] ||diag[f^{'}(Wh_{t-1})]|| 上界, γ \gamma 依赖激活函数f, t a n h ( x ) 1 |tanh(x)^{'}|\leq 1 , σ ( x ) 1 4 \sigma(x)^{'} \leq \frac{1}{4}
所以
h t h s = h t h t 1 h t 1 h t 2 . . . h s + 1 h s ( σ m a x γ ) t s \frac{\partial h_t}{\partial h_s} = \frac{\partial h_t}{\partial h_{t-1}} \frac{\partial h_{t-1}}{\partial h_{t-2}} ... \frac{\partial h_{s+1}}{\partial h_{s}} \leq (\sigma_{max}\gamma)^{t-s}
由于参数共享 W W ,RNN存在梯度消失或者梯度爆炸。

解决办法:

梯度爆炸:

  • 权重惩罚 Weight Penalty (不work)
    W 2 I ||W||_2 \leq I
    不足:
    (1)W约束比较小的范围内,建模不足
    (2)信息比较快的衰减(梯度消失)
    (3)没办法长时序的建模

  • 梯度裁剪Gradient Clipping (work)

高曲率墙的存在造成了困难
虚线:当范数高于一个值的时候,梯度重新表定为固定的打小,引入了额外的裁剪。

在这里插入图片描述在这里插入图片描述

其他的方法
当W是正交矩阵的时候, W T W = I W^TW=I ,
( W T v ) T ( W T v ) = v T W W T v = v T v (W^Tv)^T(W^Tv) = v^TWW^Tv = v^Tv 初始化的时候W可以是正交的矩阵,但是训练的时候W会发生变化,无法保证是正交矩阵。