RNN循环神经网络学习笔记
本文图片截取自《Tensorflow 实战Google深度学习框架》
参考了Understanding LSTM Networks
注意阅读本文需要先学习了最基本的神经网络知识
以下是正文
在传统的神经网络中模型中,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题是无能为力的。比如,预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。循环神经网络(RNN)指的是一个序列当前的输出与之前的输出也有关。具体的表现形式为网络会对前面的信息进行记忆,保存在网络的内部状态中,并应用于当前输出的计算中,即隐含层之间的节点不再无连接而是有链接的,并且隐含层的输入不仅包含输入层的输出还包含上一时刻隐含层的输出。
RNN其基本结构如图:
先解释一下该图为一个最简单的三层神经网络,即(输入-隐含-输出)结构,其中该神经网络的隐含层。
图中为隐含层在第t个时间接受到的输入,为隐含层在第t个时间得出的输出。可以明显看到除了得出输出以外,还有一个箭头循环 ,即 在时刻t的计算结果都不仅仅会进行输出,还会将其得到的结果再一次作为其在时刻t+1的输入的一部分。
为什么说是一部分呢,因为在时刻t+1除了接受循环传递的上一个时刻的计算结果以外,其还要接受它在第t+1时刻本应该接受的输入Xt+1,上述等式右边将这个循环的过程给展开了,便于理解。即:
很明显
t=0时刻,只接受了输入,得到了输出,并将复制了一份作为下一时刻的输入的一部分。
t=1时,除了接受 作为输入以外,还接受了作为输入,将和结合起来作为这一时刻的总输入,得到了输出 ,同时又将复制了一遍,再次将其作为下一时刻输入的一部分。
以此类推。。。。。。。
直到达到了预设的迭代次数为止。
下面用一个计算的例子说明:
t=0时,输入为1,即图中的,而此时t=0,显然没有上一时刻的输入,所以设置其为0,即图中的,将这两个结合作为总输入,生成了一个1*3的行向量,即图中的,而该层的权重为一个3*2的矩阵,即图中的,偏置为1*2的行向量,即图中的,该层的**函数为tanh,故该时刻该层进行了如下计算:
故该时刻的输出为,该输出再经过输出层的计算得到最终的结果,即图中的:,然后该层将这一时刻的输出传送个下一时刻,即图中的:,然后重复这个步骤。直到所有输入序列都遍历完毕。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:RNN循环神经网络学习笔记 - Python技术站