RNN结构如图所示:
Xt∈Rx 表示t时刻的输入( Xt 是多少维,则这一层有多少个神经元,这里设为 x 维,图中画的是3维)
yt∈Ry
表示t时刻的预测输出
dt∈Ry
表示t时刻的期望输出
V∈Rx×h
表示从输入层到隐层的权值矩阵
U∈Rh×h
表示上一个时刻到这个时刻的权值矩阵
bh∈Rh
表示隐层的偏置,其中每一项对应某一神经元的偏置项
W∈Rh×y
表示隐层到输出层的权值矩阵
by∈Ry
表示输出层的偏置项
正向传播过程:
Xti
表示t时刻某个样本第i维的输入,即输入层第i个神经元的输入
t时刻隐层第j个神经元的输入:
cthj=∑xi=1XtiVij+∑hs=1ht−1sUsj+bhj
t时刻隐层第j个神经元的输出:
htj=f(chj)
t时刻输出层第k个神经元的输入:
ctyk=∑hj=1htjWjk+byk
t时刻输出层第k个神经元的输出:
ytj=g(cyk)
矩阵表示(只有一个样本的情况):
t时刻隐层的输入,h*1向量,
cth=VTXt+UTht−1+bh
t时刻隐层的输出,h*1向量,
ht=f(cth)
t时刻输出层的输入,y*1向量,
cty=WTht+by
t时刻输出层的输出,y*1向量,
yt=g(cty)
反向求导过程:
假设共有p个样本,则t时刻的误差可以定义为:
Et=∑p12∥dt−yt∥2
,整个网络的误差为
E=∑tEt=12∑p∑Tt=1∥dt−yt∥2
,
∂E∂W=∑Tt=1∂E∂yt∂yt∂W
∂E∂yt=−(dt−yt)
∂yt∂W=∂yt∂cty∂cty∂W=g′(cty)ht
所以 ∂E∂W=−∑Tt=1(dt−yt)g′(cty)ht
∂E∂U=∑Tt=1∂E∂ht∂ht∂U , ∂E∂V=∑Tt=1∂E∂ht∂ht∂V
由于 ht 一方面输到 yt ,一方面输到 ht+1 ,所以它的误差来自两方面:
∂E∂ht=∂E∂yt∂yt∂ht+∂E∂ht+1∂ht+1∂ht=∂E∂yt∂yt∂cty∂cty∂ht+∂E∂ht+1∂ht+1∂ct+1h∂ct+1h∂ht=∂E∂ytg′(cty)W+∂E∂ht+1f′(ct+1h)U
∂ht∂U=∂ht∂cth∂cth∂U=f′(cth)ht−1 , ∂ht∂V=∂ht∂cth∂cth∂V=f′(cth)Xt
所以
∂E∂U=∑Tt=1[∂E∂ytg′(cty)W+∂E∂ht+1f′(ct+1h)U]f′(cth)ht−1
∂E∂V=∑Tt=1[∂E∂ytg′(cty)W+∂E∂ht+1f′(ct+1h)U]f′(cth)Xt
∂E∂by=∑Tt=1∂E∂yt∂yt∂cty∂cty∂by=−∑Tt=1(dt−yt)g′(cty)
∂E∂bh=∑Tt=1∂E∂ht∂ht∂cth∂cth∂bh=∑Tt=1[∂E∂ytg′(cty)W+∂E∂ht+1f′(ct+1h)U]f′(cth)