Deep Learning - Chapter 10
10 序列建模:循环和递归网络
卷积网络
专门用于处理网格化数据 X X X(如一个图像)的神经网络。
可以很容易地扩展到具有很大宽度和高度的图像,以及处理大小可变的图像。
循环神经网络( recurrent neural network)
是专门用于处理序列 x ( 1 ) , . . . , x ( τ ) x^{(1)},..., x^{(τ)} x(1),...,x(τ) 的神经网络。
可以扩展到更长的序列(比不基于序列的特化网络长得多),大多数也能处理可变长度的序列。
RNN的出现
从多层网络出发到循环网络,我们需要利用上世纪 80 年代机器学习和统计模型早期思想的优点:在模型的不同部分共享参数。 参数共享使得模型能够扩展到不同形式的样本(这里指不同长度的样本)并进行泛化。如果我们在每个时间点都有一个单独的参数,我们不但不能泛化到训练时没有见过序列长度,也不能在时间上共享不同序列长度和不同位置的统计强度。当信息的特定部分会在序列内多个位置出现时,这样的共享尤为重要。
例子
例如,考虑这两句话: “I went to Nepal in 2009’’ 和“In 2009, I went to Nepal.” 如果我们让一个机器学习模型读取这两个句子,并提取叙述者去Nepal的年份,无论 “2009 年’’ 是作为句子的第六个单词还是第二个单词出现,我们都希望模型能认出 “2009 年’’ 作为相关资料片段。
假设我们要训练一个处理固定长度句子的前馈网络。传统的全连接前馈网络会给每个输入特征分配一个单独的参数,所以需要分别学习句子每个位置的所有语言规则。相比之下, 循环神经网络在几个时间步内共享相同的权重,不需要分别学习句子每个位置的所有语言规则。
时延神经网络的“参数共享”
Related Work 时延神经网络的基础是在 1 维时间序列上使用卷积。卷积操作允许网络跨时间共享参数,但是浅层的。卷积的输出是一个序列,其中输出中的每一项是相邻几项输入的函数。 参数共享的概念体现在每个时间步中使用的相同卷积核。
循环神经网络的“参数共享”
循环神经网络以不同的方式共享参数。输出的每一项是前一项输出的函数。输出的每一项对先前的输出应用相同的更新规则而产生。这种循环方式导致参数通过很深的计算图共享。
为简单起见,我们说的 RNN 是指在序列上的操作,并且该序列在时刻 t t t(从1 到 τ τ τ)包含向量 x ( t ) x^{(t)} x(t)。时间索引不必是字面上现实世界中流逝的时间,有时它仅表示序列中的位置。 R N N RNN RNN 也可以应用于跨越两个维度的空间数据(如图像)。当应用于涉及时间的数据,并且将整个序列提供给网络之前就能观察到整个序列时,该网络可具有关于时间向后的连接。
10.1 展开计算图
计算图是形式化一组计算结构的方式。本节,我们对展开(unfolding)递归或循环计算得到的重复结构进行解释,这些重复结构通常对应于一个事件链。 展开(unfolding)这个计算图将导致深度网络结构中的参数共享。
动态系统
-
例如,考虑动态系统的经典形式:
s ( t ) = f ( s ( t − 1 ) ; θ ) \boldsymbol{s}^{(t)} =f(\boldsymbol{s}^{(t-1)};\boldsymbol{\theta}) s(t)=f(s(t−1);θ)
s s s 在时刻 t t t 的定义需要参考时刻 t − 1 t − 1 t−1 时同样的定义,因此上式是循环的。假设时间步=3,展开得:
s ( 3 ) = f ( s ( 2 ) ; θ ) = f ( f ( s ( 1 )