本文只是简单的说明一下RNN的结构,不涉及RNN的发展历史
一般的神经网络,比如前馈神经网络,其特点是:
1 共有输入层,隐层,输出层3层;
2 输入层的输入与时间并无关系
隐层的每一层的神经元彼此之间并不相连
输出层的输出是由所有的输入层以及网络架构决定的,与时间无关
而循环神经网络恰恰相反,即:
1 隐层之间的节点不是相互独立而是有连接的,且隐层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出
2 而且输入层进行输入后,而是随时间进行变化进行相应的计算,同时每次计算都会产生一个输出,即就是输出也是随时间变化的
二者对比如下:左边为一个简单的神经网络结构图,右边则为RNN结构图
简单的神经网络 循环神经网络
看起来循环神经网络很复杂,我们可以循环神经网络进行展开:
参数意义:o表示输出,x为输入,s为隐层,U,V,W均为权重
那么,了解了RNN的结构,我们还需要知道怎么进行操作:
如上图所示,令X = {x1,x2,x3,......xt,xt+1,......}表示输入;令 O={o1,o2,.......ot,ot+1,......}表示输出;令S={s1,s2,......st,st+1,......}表示隐层的神经元的状态
U表示输入层与隐层之间的权重,W表示隐层自身的权重,V表示隐层与输出层之间的权重
X t 表示X在第 t 步的输入,由上图可以知道X i 是按照 i 从左向右由小向大依次作为输入的;
那么S在 t 时刻的状态由公式(1)决定: S(t) = f [S(t-1) * W + X(t) *U + b] (1)
其中 f 为激活函数,b为偏置
注意 W,U,V三个权重在所有时刻都是共享的
输出层:O(t) = softmax( V * S(t));
以上便为循环神经神经网络的基本结构。本文并没有接受相应的算法,只是简单的对循环神经网络的结构做了个了解,若有不足,恳请指正。
相关原理来源: http://blog.csdn.net/heyongluoyao8/article/details/48636251
https://zhuanlan.zhihu.com/p/22266022
http://blog.csdn.net/u010751535/article/details/54044222