A Critical Review of Recurrent Neural Networks for Sequence Learning

Abstract摘要

很多学习任务需要输入(时间序列预测、视频分析和音乐信息检索)或输出(图像字幕、语音合成和视频游戏)序列,或两者兼具(自然语言翻译、参与对话和机器人控制等交互式任务)。
循环神经网络可以反映任意长度的上下文窗口,但循环神经网络包含上百万参数难以训练。近期网络结构、技术优化与并行计算的进步使循环神经网络的大规模学习成为可能。
在过去的几年里,基于最先进的长短时记忆(LSTM)和双向循环神经网络(BRNN)体系结构的系统在图像字幕、语言翻译和手写记录等各种任务上都表现出了创纪录的性能。在这篇文献综述中,我们综合了过去三十年来产生和衰落的用以实践这些强大的模型的研究。我们会适当地调和相互冲突的表示法和命名法。我们的目标是提供一个最独立的先进技术系统的解释,以及一个历史的观点和基本研究的充足参考。

Introduction简介

循环神经网络(RNNs)是具有跨时间步长的信息传递能力的前馈神经网络的超集。众所周知,1991年Siegelman和Sontag的结论表明,一个具有sigmoid激活函数的有限规模的循环神经网络可以模拟通用图灵机。在实践中,模拟时间相关性的能力使得循环神经网络特别适合于由非独立的点序列组成输入和/或输出的任务。

1.1 Comparison to Prior Work与以往工作的比较

对于外行来说,关于循环神经网络的文献似乎难以理解。较短的论文假定读者熟悉大量的背景知识。图经常得不到充分的说明,无法指出哪些边跨越时间步长,哪些边不跨越时间步长。更糟糕的是,术语比比皆是,而符号在不同的论文中常常不一致,或者在论文中超载。读者常常处于这样一种尴尬的境地:他们不得不只为了理解一篇论文,而综合许多论文中相互矛盾的信息。例如,在许多论文中下标同时索引节点和时间步长。在另一些论文中,h既表示连接函数又表示一层隐藏节点。变量t同时代表时间指标和目标,有时出现在同一个方程中。最近出现了许多了不起的突破性论文,但对循环神经网络文献的明晰综述却不多见。
其中最有用的资源是Alex Graves 2012年出版的关于循环神经网络监督序列标记的书和Felix Gers的博士论文。最近,[15]涵盖了用于语言建模的循环神经网络。其他资源侧重于特定的技术方面,如[50],它调查循环神经网络中的梯度计算。在这篇综述中,我们的目标是为序列学习的循环神经网络提供一个可读的、直观的、一致标注的综述。我们强调模型、算法和结果,但同样注重提炼直觉,这种直觉引导了这个主要是启发式和实验的领域。除了具体的建模细节外,我们还适当地提供了定性的论据、历史的观点以及替代方法间的比较。

1.2 Why Recurrent Nets?为什么要循环网络

在这一节中,我们讨论了循环神经网络在时序输入和输出建模中值得认真研究的根本原因。需要明确的是,我们的目的是获得实证结果。这一点需要澄清,因为循环网络既有认知建模的基础,也有监督机器学习的基础,而且由于视角的不同,这些论文中的许多都有不同的目标和重点。在通常发表于《认知科学》和《计算神经科学日报》([33],[34],[18])的基础论文中,强调了生物学上可能的机制。在其他的论文([53],[57],[35])中,为了在重要任务和数据集上获得实证结果,生物灵感被淡化了。考虑到实验目的,在继续阅读之前,我们现在要解决三个重要的问题。

Why Explicitly Model Time?

鉴于时间无关模型已经取得的实际成功和经济价值,这确实值得思考。支持向量机、逻辑回归和前馈网络没有显式对时间建模,但十分有效。可以说,正是独立性的假设促成了最近机器学习的进步。此外,许多模型通过将每个输入与它的直接相邻的上一个输入和下一个输入联系起来,隐式地捕获时间信息,从而使用关于每个兴趣点的滑动上下文窗口来描述机器学习模型。该方法已被用于[43]语音建模的深度信念网。
不幸的是,尽管独立假设很有用,但它排除了对长范围时间相关分布进行建模的可能性。例如,使用长度为5的有限长度上下文窗口训练的模型永远不能回答这样一个简单的问题,“10个时间步之前看到的数据点是什么?”对于诸如呼叫中心自动化之类的实际应用程序,这样一个有限的系统可能会学习路由呼叫,但永远不能参与扩展对话。从最早的人工智能概念开始,我们就一直在寻求建立能及时与人类交互的系统。在艾伦·图灵开创性的论文《计算机器与智能》中,他提出了一种“模仿游戏”,通过机器令人信服地参与对话的能力来判断机器的智能[65]。除了对话系统,具有重要经济意义的现代交互系统还包括自动驾驶汽车和机器人手术等。忽略显式的时间模型,似乎不太可能将任何分类器或回归器组合在一起来提供此功能。

Why Neural Networks and Not Markov Models?为什么是神经网络而不是马尔可夫模型

循环神经网络不是第一个捕获时间依赖性的模型。马尔可夫链,它对观测序列的状态(s(1), s(2), …, s(T))间的转变进行建模,1906年,首次被数学家安德烈·马尔科夫(Andrey Markov)所描述。隐马尔可夫模型(HMMs)是对模型观测数据(o(1), o(2),…, o(T))的概率依赖于未观察到的状态建模,在20世纪50年代被描述,并在20世纪60年代被广泛研究。然而,传统的马尔可夫模型方法是有限的,因为它们的状态必须从适当大小的离散状态空间sj∈S中得出。Viterbi算法用于对隐马尔可夫模型进行有效的推理,在O(|S|2)的时间尺度。此外,捕获任意两个相邻状态之间移动的概率的转换表的大小为|S|2。因此,当可能的隐藏状态集大于大约106个状态时,隐马尔可夫模型的标准操作是不可行的。此外,每个隐藏状态s(t)只能依赖于前一个状态s(t−1)。虽然可以扩展任何马尔可夫模型占更大的上下文窗口通过创建一个新的状态方程的积等于在每一次可能的状态窗口,这个过程生长状态空间指数与窗口的大小,呈现马尔科夫模型计算不切实际的远程依赖关系建模。
鉴于马尔可夫模型的局限性,我们应该解释为什么连接主义模型,也就是人工神经网络应该会表现得更好是合理的。首先,循环神经网络克服了马尔可夫模型的主要局限性,能够捕获长时间依赖关系。这一点需要仔细解释。与马尔可夫模型一样,传统RNN中的任何状态都只依赖于当前的输入以及前一步网络的状态。但是,任何时候的隐藏状态都可能包含来自任意长上下文窗口的信息。这是可能的,因为可以在节点的隐层中表示的不同状态的数量随层中节点的数量呈指数增长。即使每个节点只接受二进制值,网络也可以表示2N个状态,其中N是隐含层的节点数。给定实值输出,即使假设64位数字的最小精度,一个节点隐含层也可以表示264N个不同的状态。当潜在的表达能力随着隐藏表示中的节点数呈指数增长时,推理和训练的复杂性都只呈二次增长。
其次,人们通常希望扩展神经网络来解决任何监督学习问题,因为它们是强大的学习模型,可以对各种监督学习任务取得先进成果。在过去的几年里,存储变得更便宜了,数据集变得更大了,并行计算领域也有了长足的进步。在这种大型高维数据集的设置中,简单的线性模型欠拟合,并且常常没有充分利用计算资源。深度学习方法,特别是基于深度信念网络(DNNs)和卷积神经网络(利用视觉信息的局部依赖性)的方法,已经在许多重要的应用中展示出了创纪录的成果。神经网络特别适合于机器感知任务,在这些任务中,原始的底层特征并不能提供单独的信息。这一成功归功于他们学习分层表示的能力,而不像传统算法那样依赖手工设计的特性。然而,前馈神经网络虽然具有强大的功能,但也存在一定的局限性。最明显的是,它们依赖于数据点之间的独立性假设。此外,这些网络通常依赖于由固定长度向量组成的输入。因此,将这些强大的学习工具扩展到具有时间结构的数据建模是明智的,特别是在许多神经网络已经处于最先进水平的领域。

Are RNNs Too Expressive?

如前所述,具有sigmoid激活的有限尺寸的rnns是图灵完备的。RNNs运行任意计算的能力清楚地展示了它们的表达能力,但是有人可能会说,C编程语言同样能够表达任意程序。然而,没有论文声称C语言的发明是机器学习的灵丹妙药。在开箱即用的情况下,C没有提供有效探索程序空间的简单方法。没有直接的方法来计算一个任意C程序的梯度来最小化一个选定的损失函数。此外,将C语言可表达的程序集作为机器学习模型家族来处理的最大问题是,这个集合太大了。对于任何有限大小的数据集,都存在无数的程序可以过度拟合数据,生成所需的输出,但却不能泛化到测试数据。
那么为什么RNN不会遇到类似的问题呢?首先,给定任意固定的结构(节点、边和激活函数集),本文描述的循环神经网络是完全可微的端到端。损失函数的导数总是可以根据模型中的每个参数(权重)计算出来。其次,虽然有限长度RNNs的图灵完备性是一个令人印象深刻的特性,但是,给定任何固定大小的RNN和特定的体系结构,实际上不可能生成任何任意的程序。此外,与用C语言编写的任意程序不同的是,一个循环神经网络可以通过标准技术(如权值衰减、dropout和限制自由度)进行正则化。

2 Background

在这里,我们介绍形式符号,并提供一个简单的背景神经网络。

2.1 Time

需要说明的是,rnns并不局限于索引时间的序列。它们已成功地应用于非时序数据,包括遗传数据[3]。然而,计算是按时间进行的,许多重要的应用程序都有显式或隐式的时间方面。虽然我们在本文中提到了时间,但这里描述的方法适用于更广泛的任务族。
在本文中,时间指的是在以t为索引的离散时间步长序列中生成的数据点x(t)和期望输出y(t)。我们使用带括号的上标而不是下标来消除时间步长和神经元之间的混淆。我们的序列可以是有限长度的,也可以是可数无限的。当它们是有限的,我们称序列的最大时间指标为T。因此,一个连续的输入序列可以标记为(x(1), x(2),…, x(T)),输出可以标记为(y(1), y(2),…y (T))。这些时间步长可能是来自连续的真实世界过程的等距样本。例如组成视频帧的静止图像或以固定间隔采样的离散振幅组成音频记录。时间步长也可以是序数步长,与持续时间没有确切的对应关系。事实上,这些技术可以扩展到包括基因序列在内的领域,其中序列有一个确定的顺序,但与时间没有真正的对应关系。自然语言就是这样。在单词序列“John Coltrane plays the saxophone”中,x(1) = John, x(2) = Coltrane,等等。

2.2 Neural Networks

神经网络是受生物学启发的计算模型。一般来说,神经网络由一组人工神经元(通常称为节点或单元)和它们之间的一组有向边组成,这些有向边直观地表示生物神经网络中的突触。与每个神经元j相联系的是一个激活函数lj,有时也称为连接函数。我们使用符号“lj”而不是“hj”(与其他一些论文不同)来区分激活函数lj和网络中隐藏节点的值,在RNN文献中通常标记为h。
与从节点j到节点j’的每条边相关联的是权重wjj’。根据几篇基础循环网络论文([32],[19],[21],[63])采用的惯例,我们用j和j’来索引神经元,用wjj’来指代从节点j到节点j’的有向边相对应的权重。值得注意的是,在许多论文、教科书和课堂笔记中,指数是翻转的,而wj’j表示从节点j’到节点j的有向边的权重≠wjj’,如[17]和Wikipedia[69]。
在这里插入图片描述
通过将神经元的激活函数应用于其输入的加权和来计算每个神经元j的值vj(图1):
为了方便起见,我们将括号内的加权和称为输入激活,并将其标记为aj。我们用图形来表示整个过程,把神经元描绘成用带箭头的边连接的圆圈。我们适当的将激活函数标记为符号,例如,σ为sigmoid函数。
常见的激活函数的选择包括sigmoidσ(z) =1 / (1 + e^−z)和双曲正切函数φ(z) = (ez-e−z) / (e^z + e^−z)已在前馈神经网络变得常见,并在[63]中应用于循环性网。另一种已成为深度学习研究中最先进的激活方法是线性整流单元(ReLU) lj(z) = max(0,z)。这些单元已经被证明可以改善许多深度神经网络([43],[47],[73])在语音处理和对象识别等各种任务上的性能,并被[7]用于循环神经网络。
在这里插入图片描述
输出节点上的激活函数取决于任务。对于多类分类,我们对该层应用softmax非线性化函数。softmax函数计算方式:
在这里插入图片描述
其中K是输出总数。分母是归一化,由所有输出节点上的指数之和组成,确保输出之和为1。对于多标签分类,激活函数只是一个点向的sigmoid。对于回归,我们可以得到线性输出。由于目前涉及多类分类的应用数量过多,特别是针对循环网络,在本文中,除非另有说明,否则我们默认在输出端应用了softmax。

2.3 Feedforward Neural Networks

在计算的神经模型中,必须确定计算的顺序。应该一次采样一个节点并更新,还是应该一次计算所有节点的值,然后同时应用所有更新?前馈神经网络(图2)是一类受限制的神经网络,它通过禁止图中的循环来处理这个问题。因此,所有节点都可以被安排成层。根据下层的输出,可以计算出每一层的输出。
前馈网络的输入x是通过设置最低层的值来表示的。每个生成更高的层然后先后计算直到输出在顶端的层ˆy。这些网络经常用于监督学习任务,如分类和回归。学习是通过最小化损失函数,L(ˆy, y)迭代更新的每个权重,这个过程会惩罚输出ˆy和目标y之间的距离。反向传播,[52]中引入神经网络的一种算法,使用链式法则计算每个参数损失的梯度。虽然神经网络的优化曲面是非凸的,精确优化被认为是一个NP-hard的问题,但大量的启发式预训练和优化技术的工作已经在许多监督学习任务上取得了巨大的实证成功。由Yann LeCun开发的Convolutional neural networks,[38]是前馈神经网络的一种变体,自2012年以来,在许多计算机视觉任务中保有记录,例如目标检测[36]。
在这里插入图片描述
然而,前馈网络是有限的。在每一个例子被处理之后,整个网络的状态就会丢失。如果每个数据点都是独立采样的,则不会出现问题。但是如果数据点在时间上是相关的,这是不可接受的。视频中的帧、音频片段和句子中的单词表示独立性假设失败的设置。

2.4 Training Neural Networks via Backpropagation

最成功的神经网络训练算法是反向传播,Rumelhart等人在1985年[52]将其引入神经网络。反求权使用链式法则来计算损失函数L对网络中各参数的导数。然后用梯度下降法调整权重。因为损耗面是非凸的,所以不能保证反向传播达到全局最小值。然而,在实践中,使用反向传播和梯度跟踪技术训练的网络取得了令人瞩目的成功。在实践中,大多数网络都是使用小批量的随机梯度下降(SGD)训练的。在这里,不失其广义,我们只讨论批处理大小为1的情况。随机梯度更新方程如下:
在这里插入图片描述
η是学习速率和∇wFi是计算单一示例(xi, yi)时目标函数对参数w的梯度。
在实践中,许多SGD的变体被用来加速学习。一些流行的启发式方法,如AdaGrad[16]、AdaDelta[72]和RMSprop[1],自适应地调整每个特性的学习率。AdaGrad,可以说是最受欢迎的,通过缓存每一步中每个参数的梯度平方和来调整学习速率。每个特性的步长被缩放到这个缓存的倒数。这导致了凸误差曲面的快速收敛,但是由于缓存的和是单调递增的,所以AdaGrad的学习率是单调递减的。AdaGrad具有单调递减的学习速率。这在高度非凸的损耗面上是不可取的。RMSprop通过在缓存上引入衰减因子来修改AdaGrad,将单调增长的缓存转化为移动平均。Momentum方法是另一种常用的用于训练神经网络的SGD变体。这些方法给每个更新加上前一个更新的递减和。当动量参数调优且网络初始化良好时,动量方法可以训练深度网络和循环网络,与计算开销更大的方法如Hessian Free optimizer竞争[62]。

To be continued……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值