循环神经网络
经典神经网络结构如下图:
从图中可以看出,循环神经网络主体A的输入除了来自输入层的xt,还有一个循环的边来提供上一时刻的隐藏状态(hidden state)ht-1。在每一时刻,循环神经网络的模块A读取了xt和ht-1后,会生成新的隐藏状态ht,并产生本时刻输出ot。因为模块A中运算和变量在不同时刻是相同的,因此RNN理论上可以被看做是同一神经网络结构被无限复制的结果。
正如CNN在不同的空间位置参数共享,RNN是在不同的时间位置参数共享,从而能够使用有限的参数处理任意长度的序列。
将完整的输入输出序列展开,可以得到下图展示的结构:
从图中可以看到RNN对长度为N的序列展开后,可以视为一个有N个中间层的前馈神经网络。这个前馈神经网络没有循环连接,因此可以使用反向传播算法进行训练。
对于一个序列数据,可以将这个序列上不同时刻的数据依次传入RNN的输入层,而输出可以是对序列中下一时刻的预测,也可以是对当前时刻信息的处理结果。RNN要求每个时刻都要有一个输入,但不一定每个时刻都要有输出。
如前面所说,RNN可以看做是同一神经网络结构在时间序列上被复制多次的结果,这个被复制多次的结构被称为循环体。如何设计循环体的网络结构是解决问题的关键。下图展示了一个最简单的循环体结构。