1. RNN模型
2. RNN的前向传播
对于当前的索引号
t,隐藏状态
ht由
xt和
ht−1共同得到:
ht=tanh(Uxt+Wht−1+b)(1)
其中选用了tanh作为激活函数,
b是bias。
每次网络的输出值:
ot=Vht+c(2)
输出的预测值:
at=softmax(ot)=softmax(Vht+c)(3)
使用交叉熵损失函数:
Lt=−i=1∑Nyitlogait=−logakt
化简的结果是因为在所有的
N个分类中,只有
yk=1
3. RNN的反向传播
RNN的反向传播有时也叫做BPTT(back-propagation through time),所有的参数
U,W,V,b,c在网络的各个位置都是共享的。
成本函数:
L=t=1∑mLt
其中
m是训练集的数据量。
从《交叉熵的反向传播梯度推导(使用softmax激活函数)》一文得知,
∂ot∂Lt=at−yt
所以
∂ot∂L=t=1∑m(at−yt)(4)
参数
V,c的梯度可以直接计算:
⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧∂V∂L=∂ot∂L∂V∂ot=t=1∑m(at−yt)(ht)T∂c∂L=∂ot∂L∂c∂ot=t=1∑m(at−yt)
参数
W,U,b的梯度计算可以仿照DNN的反向传播算法,定义辅助变量,也即隐藏状态的梯度:
δt=∂ht∂Lt(5)
则
δt=∂ot∂Lt∂ht∂ot+∂ht+1∂Lt∂ht∂ht+1+⋯+∂ht+k∂Lt∂ht∂ht+k+⋯=VT(at−yt)+WTδt+1⊙(tanh′(ht+1))(6)
其中只有当
k=1,也即只有
ht+1中才含有
ht分量,因此式(6)中最后的扩展项中,只有
∂ht∂ht+1这一项有结果,随后的所有项,都为0。
最后一项:
δm=∂om∂Lm∂hm∂om=VT(am−ym)(7)
则参数
W,U,b的梯度可以计算如下:
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧∂W∂L=∂ht∂L∂W∂ht=t=1∑mδt⊙(1−(ht)2)(ht−1)T∂U∂L=∂ht∂L∂U∂ht=t=1∑mδt⊙(1−(ht)2)(xt)T∂b∂L=∂ht∂L∂b∂ht=t=1∑mδt⊙(1−(ht)2)(8)
其中
1−(ht)2=tanh′(ht)
4. RNN的缺点
- 前后的信息间隔变大时,RNN不能有效获得信息。对long-term dependencies 不能有效地学习。
解决方法:使用LSTM网络