RNN与FNN的不同之处在于隐含层各个神经元之间是相互连接的,隐含层的输入包括正常输入和反馈输入(也就是上一个时刻隐含层的输出反馈个下一个时刻隐含层的输入),其他结构和BP神经网络相似
开始RNN的学习:
输入层的输出:x
隐含层的输入:Ih
隐含层的输出:Oh
输出层的输入:Io
输出层的输出:Oo
输入层到隐含层的权值:WIh
隐含层到输出层的权值:WHo
隐含层到隐含层的权值:WHh
隐含层的阈值:bh
输出层的阈值:b0
第t时刻隐含层第j个神经元的输入:
Ihj=(∑i=1 to m WIhixi+∑j=1 to n WHhjOhj(t-1))
第t时刻隐含层第j个神经元的输出:
Ohj=f(Ihj)
第t时刻输出层第k个神经元的输入:
Iok=∑j=1 to m WHoOhj
第t时刻输出层第k个神经元的输出:
Ook=g(Iok)
第t时刻输出层第k个神经元的误差:
ek=(dk-Ook)
网络总误差为:
E=1/2∑k=1 to s (ek)2
RNN的学习算法是BPTT算法,与Bp的不同之处就是在隐含层的反馈上,按梯度下降更新权值和阈值:
ΔWHo=α*e*Oh*d(g(Io))
设输入层的局部梯度为δ=e*d(g(Io))
ΔWIh=α*df(Ih)*x*∑k=1 to s WHoδ
同样地
ΔWHh=α*df(Ih)*Oh(t-1)*∑k=0 to s WHoδ
推导方法都是链式求导法,容易得到上面三式
RNN容易出现梯度消失问题,具体就是当时间步t很大时,激活函数就会被多次累积,及其容易趋于0,导致梯度消失,RNN能记忆很长时间段的内容,例如,“他的名字叫李明,他姓X",RNN需要记住上一个句子,才能准确的预测X,但是需要很长的时间步才能做到,梯度容易趋于0,”水是X色",RNN只需要记住前面几个词即可预测X,一般不会出现梯度消失的情况,所以在RNN的t不适宜太大