简单循环神经网络及基本结构

简单循环网络(Simple Recurrent Networks,SRN)又称为 Elman Network,是由杰夫·埃尔曼(Jeff Elman)在 1990 年提出来的。埃尔曼在 Jordan Network 的基础上进行了创新,并且简化了它的结构,最终提出了 Elman Network。Jordan Network 和 Elman Network 的网络结构如图 1 所示。
Jordan Network(左)和Elman Network(右)
图 1:Jordan Network(左)和Elman Network(右)

从图 1 中可以很直观地看出,两种网络结构最主要的区别在于记忆单元中保存的内容不同。Jordan Network 的记忆单元中保存的是整个网络的最终输出,而 Elman Nnetwork 的记忆单元只保存中间的循环层,所以如果是基于 Elman Network 的深层循环神经网络,那么每一个循环的中间层都会有一个相应的记忆单元。

Jordan Network 和 Elman Network 都可以扩展应用到深度学习中,但由于 Elman Network 的结构更易于扩展(Elman Network 的每一个循环层都是相互独立的,因此网络结构的设计可以更加灵活。另外,当 Jordan Network 的输出层与循环层的维度不一致时还需要额外的调整,而 Elman Network 则不存在该问题),因此当前主流的循环神经网络都是基于 Elman Network 的,例如我们后面会介绍的 LSTM 等。

通常我们所说的循环神经网络(RNN),默认指的就是 Elman Network 结构的循环神经网络。本教程中所提到的循环神经网络,如果没有特别注明,均指 Elman Network 结构的循环神经网络。

循环神经网络的基本结构

循环神经网络的基本结构如图 2 所示(注意:为了清晰,图中没有画出所有的连接线)。

图 2:循环神经网络的基本结构

关于循环神经网络的结构有很多种不同的图形化描述,但是其所表达的含义都与图 2 一致。将循环神经网络的结构与一般的全连接神经网络比较,我们会发现循环神经网络只是多了一个记忆单元,而这个记忆单元就是循环神经网络的关键所在。

从图 2 中我们可以看到,循环神经网络的记忆单元会保存 t 时刻循环层(即图 2 中的隐藏层)的状态 St,并在 t+1 时刻,将记忆单元的内容和 t+1 时刻的输入 Xt+1 一起给到循环层。为了更直观地表示清楚,我们将循环神经网络按时间展开,如图 3 所示。
循环神经网络及其按时间展开后的效果图
图 3:循环神经网络及其按时间展开后的效果图

图 3 左边部分是一个简化的循环神经网络示意图,右边部分是将整个网络按时间展开后的效果。在左边部分中,X 是神经网络的输入,U 是输入层到隐藏层之间的权重矩阵,W 是记忆单元到隐藏层之间的权重矩阵,V 是隐藏层到输出层之间的权重矩阵,S 是隐藏层的输出,同时也是要保存到记忆单元中,并与下一时刻的 X 一起作为输入,O 是循环神经网络的输出。

从右边的展开部分可以更清楚地看到,循环神经网络每个时刻隐藏层的输出都会传递给下一时刻,因此每个时刻的网络都会保留一定的来自之前时刻的历史信息,并结合当前时刻的网络状态一并再传给下一时刻。

理论上来说,循环神经网络是可以记忆任意长度序列的信息的,即循环神经网络的记忆单元可以保存此前很长时刻网络的状态,但是我们在实际的使用中发现,循环神经网络的记忆能力总是很有限,它通常只能记住最近几个时刻的网络状态,后面会具体讨论这个问题。