第10章 序列建模:循环和递归网络
循环神经网络(recurrent neural network)或RNN(Rumelhart et al.,1986c)是一类用于处理序列数据的神经网络。就像卷积网络是专门用于处理网格化数据X(如一个图像)的神经网络,循环神经网络是专门用于处理序列x(1),…,x(τ)的神经网络。正如卷积网络可以很容易地扩展到具有很大宽度和高度的图像,以及处理大小可变的图像,循环网络可以扩展到更长的序列(比不基于序列的特化网络长得多)。大多数循环网络也能处理可变长度的序列。
从多层网络出发到循环网络,我们需要利用20世纪80年代机器学习和统计模型早期思想的优点:在模型的不同部分共享参数。参数共享使得模型能够扩展到不同形式的样本(这里指不同长度的样本)并进行泛化。如果我们在每个时间点都有一个单独的参数,不但不能泛化到训练时没有见过序列长度,也不能在时间上共享不同序列长度和不同位置的统计强度。当信息的特定部分会在序列内多个位置出现时,这样的共享尤为重要。例如,考虑这两句话:“I went to Nepal in 2009”和“In 2009,I went to Nepal.”如果我们让一个机器学习模型读取这两个句子,并提取叙述者去Nepal的年份,无论“2009年”是作为句子的第六个单词还是第二个单词出现,我们都希望模型能认出“2009年”作为相关资料片段。假设我们要训练一个处理固定长度句子的前馈网络。传统的全连接前馈网络会给每个输入特征分配一个单独的参数,所以需要分别学习句子每个位置的所有语言规则。相比之下,循环神经网络在几个时间步内共享相同的权重,不需要分别学习句子每个位置的所有语言规则。
一个相关的想法是在一维时间序列上使用卷积。这种卷积方法是时延神经网络的基础(Lang and Hinton,1988;Waibel et al.,1989;Lang et al.,1990)。卷积操作允许网络跨时间共享参数,但是浅层的。卷积的输出是一个序列,其中输出中的每一项是相邻几项输入的函数。参数共享的概念体现在每个时间步中使用的相同卷积核。循环神经网络以不同的方式共享参数。输出的每一项是前一项的函数。输出的每一项对先前的输出应用相同的更新规则而产生。这种循环方式导致参数通过很深的计算图共享。
为简单起见,我们说的RNN是指在序列上的操作,并且该序列在时刻t(从1到τ)包含向量x(t)。在实际情况中,循环网络通常在序列的小批量上操作,并且小批量的每项具有不同序列长度τ。我们省略了小批量索引来简化记号。此外,时间步索引不必是字面上现实世界中流逝的时间。有时,它仅表示序列中的位置。RNN也可以应用于跨越两个维度的空间数据(如图像)。当应用于涉及时间的数据,并且将整个序列提供给网络之前就能观察到整个序列时,该网络可具有关于时间向后的连接。
本章将计算图的思想扩展到包括循环。这些周期代表变量自身的值在未来某一时间步对自身值的影响。这样的计算图允许我们定义循环神经网络。然后,我们描述许多构建、训练和使用循环神经网络的不同方式。
本章将简要介绍循环神经网络,为获取更多详细信息,我们建议读者参考Graves(2012)的著作。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论