理解RNN

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不适宜太大

原文地址:https://www.cnblogs.com/semen/p/6862319.html