理解LSTM神经网络 ---- 翻译 Understanding LSTM Networks

理解LSTM神经网络 —- 翻译 Understanding LSTM Networks

这篇文章是Understanding LSTM Networks博客的翻译,仅用于学习和理解。因为个人水平有限,翻译上难免有错误和不当,仅为了自己加深理解和记忆。如果想深入学习,强烈建议阅读原文,原文博客地址:http://colah.github.io/posts/2015-08-Understanding-LSTMs/

递归神经网络

人类在思考的时候,不会每秒都从头开始。当你阅读这篇文章的时候,根据对前面单词的理解你理解每个单词的意思。你不会想着每看一个单词就忘掉前面的然后重新思考。你的想法有持续性。

传统的神经网络无法做到这一点,这似乎已经成为一个主要的缺点。举个例子,想象你想分类一个电影中每个关键点发生了什么事。目前还不清楚传统神经网络如何利用其对电影中的先前事件的推理来传递给后面的事件。

递归神经网络解决了这个问题。这种网络是自身带有循环的,让信息能够持续传递下去。

1527667816036

上面的图是一块神经网络,我们称为A,输入是 Xt X t ,输出是 ht h t 。A循环允许信息能够从网络的一个步骤传递到下一个步骤。

这些循环让递归神经网络看起来变得非常神秘复杂。但是,如果你仔细考虑,它和正常的神经网络并没有太大的不同。一个递归神经网络可以看作是相同网络单元的多次拷贝,每个单元传递消息给后继者。如果我们将图展开,更容易理解。考虑下发生了什么:

1527668162549

这种链式相连的结构的揭示了递归神经网络与序列和列表密切相关的本质。它是处理序列数据的最合适的架构。

事实上确实如此。在过去的几年里,递归神经网络RNNs在各种问题的应用上取得了惊人的成功:语音识别,语言建模,翻译,图像描述等等,而且应用领域还在持续增加中。我贴出一个讨论RNNs应用的优秀博客,The Unreasonable Effectiveness of Recurrent Neural Networks.它真的太棒了。

这些应用成功的关键是使用“LSTMs”,一共特殊的递归神经网络。LSTMs可以适用于许多任务,并且都取得了比标准RNNs好的多的成绩。几乎所有基于递归神经网络架构取得的惊人成绩都可以使用LSTMs来获得。这边文章也将主要探讨LSTMs。

长期依赖问题

RNNs最吸引人的地方在于,它提出了一种思想,即可以将数据中的以前的信息与当前的任务联系起来。例如,一个视频的前一帧内容可能有助于理解视频当前帧的内容。如果RNNs可以做到这一点,那么RNNs将会非常有用。但是它可以做到吗?这要看情况而定。

有些情况下,我们仅需要看看最近的信息来执行当前的任务。举例来说,我们构建一个语言模型,使用前面的单词来预测下一个单词是什么。如果我们试着预测句子“the clouds are in the sky s k y ”的最后一个单词,我们不需要知道更多的内容—-很明显下一个单词应该是sky。在这种情况下,相关信息与需要处理的地方距离很小,RNNs可以学习使用过去的信息。

1527669473295

但是也有一些情况,我们需要知道更多的内容才能够进行预测。考虑我们要预测一段话”I grew up in France… I speak fluent French F r e n c h .”的最后一个单词。最近的信息表明下一个单词应该是一种语言的名称,但是假如我们想确认是哪种语言,我们需要从更远的前面获取France的内容。此时,相关信息与需要处理的地方之间的距离完全可能变得非常远。

不幸的是,随着距离增大,RNNs变得没有能力去学习连接信息。

1527675951161

理论上来说,RNNs绝对能够解决“长短依赖问题”.。人们可以通过仔细调整参数来解决这种形式的”toy problems”。不幸的是,从实际操作来看,RNNs似乎没有能力去学习解决这种问题的能力。这个问题被 Hochreiter (1991) German]Bengio, et al. (1994)在论文中详细讨论过,感兴趣的可以阅读原始论文,他们从根本上解释了造成这种情况的可能原因。

值得庆幸的是,LSTMs不存在这个问题!

LSTM神经网络

长短期记忆神经网络—-通常叫做“LSTMs”—-是一种特殊的RNN,能够学习长期依赖问题。它由 Hochreiter & Schmidhuber (1997)于1997年提出,并在接下来的时间里被更多的人改进和推广。它在各种各样的问题中都工作的非常好,所以现在被广泛使用。

LSTMs的提出,正是为了明确解决长期依赖问题。对于LSTMs来说,长期记住一些信息是一种天生行为,不需要刻意去学习。

对于所有的递归神经网络来说,它们都有着标准的形式:一条重复的神经网络模块链。在标准RNNs中,这种重复的模块有着非常简单的结构,比如一个单一的tanh层。

1527677120432

LSTMs从整体上看也有类似的链式结构,但是有不同的重复模块。不像RNNs的一个单一的神经网络层,LSTMs有四种,以某种特殊的方式进行交互。

1527677295688

暂时不用担心细节上的问题。稍后我们将逐步解释LSTM的结构。现在,让我们先熟悉一下我们要使用的符号:

1527677382735

在上图种,每条线表示一个向量,这个向量从输出节点指向其他输入节点,如上图的3、4、5。粉色圆圈代表点乘操作(pointwise operations),比如向量加法,同时黄色方框代表学习到的神经网络层。箭头合并(上图第四个)表示向量的连接操作,而箭头分叉(上图第五个)代表它的信息被复制成两份,这两份流向不同的地方。

LSTMs背后的核心思想

LSTMs的关键在于单元状态(cell state),即前面给出的图中上部的水平线信息流动过程中的状态。单元状态就像一条传送带,它贯穿整个神经网络链,并且仅进行一些次要的线性操作,信息很容易以不变的方式流过整个链路。

1527678117094

LSTM当然有能力增加或删除单元状态中的信息,这由叫做“门”(gates)的结构控制。

“门结构”是决定信息是否通过、通过多少的一种方式。它们由sigmoid神经网络层和向量乘法运算组成。

1527678314926

sigmoid层输出0-1之间的数,代表了每个组件通过信息的多少。0代表“全部不通过”,1代表“全部通过”。

一个LSTM有三种门,来保护和控制单元状态。

逐步解释LSTM

我们的LSTM的第一步是决定从单元状态中扔掉什么信息。这个决定可以通过一个由sigmoid层组成的叫做“遗忘门”的来实现。它输入 ht1 h t − 1 xt x t ,输出0-1之间的数到单元状态 Ct1 C t − 1 。1代表完全保留,0代表全部丢弃。

让我们回到前面举的那个试图基于前面单词预测最后一个单词的语言模型的例子。在这种问题中,单元状态包含了当前主语的类别,所以选择出正确的代词。当我们看到一个新的主语,我们便想忘记旧的主语的类别。

1527679278125

下一步是决定在单元状态中存储什么信息。这包括两个部分。第一部分,一个叫”输入层“的sigmoid层决定我们会更新哪部分的值。第二部分,一个tanh层创建新的候选值向量,记为 C˜t C ~ t ,这个向量可能会被加到单元状态上。接下来,我们合并这两部分然后更新单元状态。

在我们的语言模型的例子中,我们想增加一个新主语类别到单元状态,来取代我们将要忘记的旧的。

1527679786809

现在是时候将旧的单元状态 C˜t1 C ~ t − 1 更新为 C˜t C ~ t 。前面的几步已经决定了该做什么,我们只要做就好了。

我们用 ft f t 乘以旧的单元状态值(忘记我们早先决定要忘记的东西),然后我们加上 itC˜t i t ∗ C ~ t 。结果是一个新的候选值,可以根据我们更新每个单元状态的值的比例进行缩放。

在语言模型的例子中,我们丢掉了关于旧主语类别的信息并添加了新的信息,与我们的先前步骤一样。

1527680852775

最后,我们需要决定我们将要输出什么。输出结果基于我们的单元状态,但会进行一些过滤处理。首先,运行一个sigmoid层决定单元状态的哪部分会被输出。然后,将单元状态送进tanh(将值缩放到-1到1之间)并且将其乘以sigmoid门的输出,所以我们只输出了我们原本输出的一部分。

对于语言模型的例子,既然它看到一个代词,它可能想输出关于一个动词的信息,这种情况下会发生什么呢?也许输出这代词是单数还是复数,如果是动词我也可以知道动词词行的变化。

1527681350952

LSTM的变体

到目前为止,我所讲的是标准的LSTM。但不是所有的LSTM都像前面说的那样。事实上,几乎每一篇设计LSTMs的论文都有自己略有不同的版本。这种差异不大,但是有一些还是值得说道的。

一种比较流行的LSTM变体,由 Gers & Schmidhuber (2000)提出,增加了”peephole connections“。这是说,让所有的门控层与单元状态连接,即门控层也接受单元状态的输入。

1527681520821

上图就是对于所有的门控层增加了”peepholes“。许多论文会增加”peepholes“,但有些也不会。

其他的变体是使用耦合的”遗忘门“和”输入门“。不是分开决定遗忘什么信息和增加什么新信息,而是将这些决策放在一起。我们只在需要放一些信息到它该放的地方的时候进行遗忘操作。我们只在需要遗忘一些旧信息的时候输入新值。

1527690629781

一种变化比较大的LSTM的变体是门控循环单元,即GRU,由Cho, et al. (2014)提出。它将”遗忘门“和”输入门“合并成一个单一的”更新门“。它也将单元状态和隐藏状态合并,并做了一些其他的修改。最终的模型比LSTM模型更简单,并且逐渐变得更加流行。

1527691309540

上面介绍的这些仅仅是最流行的几个LSTM变体。还有许多其他的模型,比如深度门控递归神经网络(Depth Gated RNNs),它由 Yao, et al. (2015)提出。还有一些其他完全不同的方法来解决长期依赖问题,比如 Clockwork RNNs ,由Koutnik, et al. (2014)提出。

结论

早些时候,我提到了人们使用RNN实现的显著成果。实质上他们是使用LSTM取得这些成果的。它在大部分任务上都能工作的更好!

写下一组方程,让LSTM看起来很吓人。希望在这篇文章中逐步解释LSTM能让它更加容易被理解。

LSTM是我们可以使用RNNs去完成某些任务的重要一步。我们很自然的想知道:是否还会有其他比较大的突破?在研究领域有一个常识,那就是是的!这就是注意力机制(attention)!它的核心思想是让RNN的每一步都从更大的信息集合中挑选信息。例如,如果你想使用RNN来创建一个图片的描述,它可能会选择图像的一部分来查看输出的每个单词。实际上, Xu, et al.(2015) 已经做过此类工作—-如果你想深入了解注意力机制,这将是一个有趣的起点!使用注意力机制已经有大量非常令人兴奋的结果,而且似乎还有很多东西可以探寻。

注意力机制的研究不是RNN研究中唯一令人兴奋的线索。例如,由Kalchbrenner, et al. (2015)提出的grid LSTMs看起来非常有前景。在生成模型中使用RNNs—-例如Gregor, et al. (2015), Chung, et al. (2015), 或者Bayer & Osendorfer (2015)也很有趣。过去的几年对递归神经网络来说是一个蓬勃发展其,未来的发展也会更加有前景!

此人在Youtube发布了很多视频,连接如下:https://www.youtube.com/user/BrandonRohrer

再次贴出原博客链接:http://colah.github.io/posts/2015-08-Understanding-LSTMs/,建议阅读原文。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值