时间序列的反向传播算法
得到:
hths=htht1ht1ht2...hs+1hs\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}}

注意到:
ht=Wf(ht1)+Uxth_t=Wf(h_{t-1})+Ux_t

计算jacobian 矩阵
hths=k=s+1tWTdiag[f(Whk1)]\frac{\partial h_t}{\partial h_s} = \prod^t_{k=s+1}W^Tdiag[f^{'}(Wh_{k-1})]

RNN神经网络的梯度消失和梯度爆炸
根据柯西-西瓦兹不等式
htht1WTdiag[f(Wht1)]σmaxγ\frac{\partial h_t}{\partial h_{t-1}} \leq ||W^T||||diag[f^{'}(Wh_{t-1})]|| \leq \sigma_{max} \gamma

σmax\sigma_{max}WTW^T矩阵的最大奇异值, γ\gammadiag[f(Wht1)]||diag[f^{'}(Wh_{t-1})]||上界, γ\gamma依赖**函数f, tanh(x)1|tanh(x)^{'}|\leq 1, σ(x)14\sigma(x)^{'} \leq \frac{1}{4}
所以
hths=htht1ht1ht2...hs+1hs(σmaxγ)ts\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}
由于参数共享WW,RNN存在梯度消失或者梯度爆炸。

解决办法:

梯度爆炸:

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

  • 梯度裁剪Gradient Clipping (work)

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

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

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

相关文章: