RNN介绍
熟烂了,不多BB,直接上干活
前向反向传播
前向(重点)
损失函数定义如下:
L
t
=
g
(
y
′
,
y
)
L_t = g(y',y)
Lt=g(y′,y) # 这里不需要指出具体的损失函数形式,可能是交叉熵,也可能是别的。
反向
对 W h W_h Wh、 W x W_x Wx求导
这样我们把公式(6)中的第三项就展开成了(10)
(10)带入(6)即可得到:
最后进行梯度更新。
RNN梯度消失分析(重点)
clip是梯度裁剪,pytorch也有专门的功能函数。具体梯度爆炸/消失问题如何解决,之前写论文的时候也有遇到过相关问题,过段时间总结一下解决方案。
补充问题:为什么RNN训练的时候Loss波动很大?
由于RNN特有的memory的特点,梯度更新时,一荣俱荣 一损俱损,所以梯度时大时小,lr也难以个性化进行调整,即Loss会波动。为了解决这个问题,可以设置clip,当梯度大于某个临界值,直接截断。