理解长短期记忆LSTM(翻译)

理解长短期记忆LSTM

RNN

博客链接:Understanding LSTM Networks – colah’s blog

人类不会每时每刻都从头开始思考。当你阅读这篇文章时,你根据你对以前单词的理解来理解每个单词。你不会扔掉一切,重新开始从头开始思考。你的想法具有持续性。

传统的神经网络无法做到这一点,这似乎是一个主要缺点(在之前的全连接神经网络当中,我们是将评论中所有的的单词转换成一个张量,再全部丢进神经网络)。例如,假设您要对电影中每个时刻正在发生的事件类型进行分类。对于传统的神经网络而言,很难学到这些时序事件之间的前后联系。

循环神经网络RNN解决了这个问题。它们是带有回路的网络,能够让信息持续传递下去。

img

Recurrent Neural Networks have loops.

在上图中,神经网络块A,输入xt,输出ht。循环能将信息从网络的一个步传递到下一个步。这些循环使递归神经网络看起来有点神秘。但是,如果您考虑得更多一些,事实证明它们与普通的神经网络并没有太大的不同。递归神经网络可以被认为是同一网络的多个副本,每个副本将一条消息传递给一个后续副本。考虑一下如果我们展开循环会发生什么:

An unrolled recurrent neural network.

这种链式结构表明了循环神经网络与序列和列表之间的关系密不可分。他们是用来处理这类数据的神经网络的自然架构。

在过去的一些年,将 RNN 应用于各种问题取得了令人难以置信的成功:语音识别、语言建模、翻译、图像字幕…这个清单还在继续。我将把关于使用RNNs可以实现的惊人壮举的讨论留给Andrej Karpathy的优秀博客文章, The Unreasonable Effectiveness of Recurrent Neural Networks。但它们真的非常神奇。

这些成功的关键是使用“LSTM”,这是一种非常特殊的循环神经网络,对于许多任务而言,它的工作原理比标准版本要好得多。几乎所有基于递归神经网络的激动人心的结果都是用它们实现的。本文将探讨的正是这些LSTM。

The Problem of Long-Term Dependencies

RNN的吸引力之一就是对于当前的任务,能够将之前的信息联系起来,例如使用视频之前的帧来预测下一帧。实际上RNN很擅长做这类事。

有时,我们只需要查看最近的信息即可执行当前任务。例如,考虑一个语言模型,该模型试图根据前一个单词预测下一个单词。如果我们试图预测 “the clouds are in the sky” 中的最后一个词,我们不需要任何进一步的上下文 —很明显,下一个词将是sky。在这种情况下,如果相关信息与需要它的地方之间的差距很小,RNN可以学习使用过去的信息。

img

但在某些情况下,我们需要更多的背景。考虑尝试预测文本中的最后一个词 “I grew up in China… I speak fluent Chinese.”。最近的信息表明,下一个词可能是一种语言的名称,但如果我们想缩小哪种语言的范围,我们需要China上下文,从更远的地方。相关信息与需要它的点之间的差距完全有可能变得非常大。

但随着这种差距的增长,RNN无法学到之前的信息。如果一条序列足够长,那它们将很难将信息从较早的时间步传送到后面的时间步。 因此,如果你正在尝试处理一段文本进行预测,RNN 可能从一开始就会遗漏重要信息。

Neural networks struggle with long term dependencies.

从理论上讲,RNN绝对能够处理这种“长期依赖关系”。人们可以仔细地为他们选择参数来解决这种形式的简单问题。不幸的是,在实践中,RNN似乎无法学习它们。HochreiterBengio等人(1994)深入探讨了这个问题,他们发现了一些非常基本的原因为什么它处理起来很困难的。

值得庆幸的是,LSTM没有这个问题!

LSTM Networks

长短期记忆网络 - 通常简称为“LSTM” - 是一种特殊的RNN,能够学习长期依赖关系。它们由Hochreiter&Schmidhuber(1997)引入,并在随后的工作中被许多人改进和推广。它们在各种各样的问题上都有很好的表现,被广泛使用。

LSTM 被设计用来避免长期依赖关系问题的。实际上他们的默认行为是长时间记住信息,而不是他们努力学习的东西!

所有递归神经网络都具有神经网络重复模块链的形式。在标准RNN中,这个重复模块将具有非常简单的结构,例如单个tanh层。

img

The repeating module in a standard RNN contains a single layer.

LSTM也具有这种链状结构,但重复模块具有不同的结构。没有一个神经网络层,而是有四个,以一种非常特殊的方式进行交互。

一个 LSTM 神经网络。

符号:

img

在上图中,每条线都携带一个完整的向量,从一个节点的输出到其他节点的输入。粉红色圆圈表示逐点操作,如矢量加法,而黄色框是学习的神经网络层。行合并表示串联,而行分叉表示其内容被复制,副本转到不同的位置。

The Core Idea Behind LSTMs

LSTM 的关键是单元状态,即贯穿图顶部的水平线。

单元状态有点像传送带。它直接沿着整个链条运行,只有一些小的线性相互作用。信息很容易沿着它原封不动地流动。

img

LSTM通过对gate的控制,有能力向单元状态中删除或者增加信息。

门是一种选择性地让信息通过的方法。它们由sigmoid神经网络层和逐点乘法运算组成。

img

Sigmoid层输出0到1之间的数字,描述每个组件应允许通过多少。值为0表示“不让任何内容通过”,而值为 1 表示“让一切通过!”

LSTM具有三个这样的门,以保护和控制单元状态。

Step-by-Step LSTM Walk Through

LSTM的第一步是决定要从单元状态中丢弃哪些信息。这个决定是由一个叫做“forget gate”的sigmoid层做出的。它看ht−1和xt,并输出一个介于0和1对于单元格状态中的每个数字Ct−1。一个1表示“完全保留”,而0表示“完全丢弃”。

让我们回到我们的语言模型示例,该示例试图根据所有以前的单词预测下一个单词。在这样的问题中,单元格状态可能包括当前主语的性别,以便可以使用正确的代词。当我们看到一个新主语时,我们想要忘记旧主语的性别。

img

下一步是确定要在单元状态中存储哪些新信息。这分为两部分。首先,称为“input gate”的 sigmoid 层决定了我们将更新哪些值。接下来,tanh 层创建新候选值的向量,C~t,可以将其添加到状态中。在下一步中,我们将这两者结合起来,以创建对状态的更新。

在我们的语言模型示例中,我们希望将新主语的性别添加到单元格状态中,以替换我们忘记的旧主语。

img

现在是时候更新旧的单元格状态了,Ct−1,进入新的单元格状态Ct。前面的步骤已经决定了要做什么,我们只需要实际去实现。

我们将旧状态乘以ft,忘记了我们之前决定忘记的事情。然后我们添加it*Ct。这是新的候选值,按我们决定更新每个状态值的程度进行缩放。

在语言模型的情况下,这是我们实际上删除有关旧主语性别的信息并添加新信息的地方,正如我们在前面的步骤中决定的那样。

img

最后,我们需要决定要输出的内容。此输出将基于我们的单元格状态,但将是经过筛选的版本。首先,我们运行一个sigmoid层,它决定了我们要输出的细胞状态的哪些部分。然后,我们将单元格状态通过tanh(将输出值控制在介于−1和1之间),并将其乘以 sigmoid 的输出,以便我们只输出我们决定输出的部分。

对于语言模型示例,由于它只看到了一个主题,因此它可能希望输出与动词相关的信息,以防万一这是接下来要执行的内容。例如,它可能会输出主语是单数还是复数,这样我们就知道如果接下来是动词应该变位成什么形式。

img

Variants on Long Short Term Memory

到目前为止,我所描述的是一个非常标准的LSTM。但并非所有 LSTM 都与上述相同。事实上,似乎几乎每篇涉及LSTM的论文都使用略有不同的版本。差异很小,但值得一提的是其中的一些。

Gers& Schmidhuber(2000)引入的一个流行的LSTM变体正在添加 “peephole connections”。这意味着我们让门来查看单元状态。

img

上图为所有门添加了peephole,但许多论文会给出一些peephole ,而不是其他peephole 。

另一种变体是使用耦合的forget gate和input gate。我们不是单独决定忘记什么以及应该添加新信息,而是一起做出这些决定。我们只会忘记何时要在它的位置上输入一些东西。只有当我们忘记了旧的东西时,我们才会向状态输入新的值。

img

LSTM的一个更加显著的的变化是由Cho等人(2014)引入的Gated Recurrent Unit或GRU。它将忘记和输入门组合成一个“update gate”。它还合并单元格状态和隐藏状态,并进行一些其他更改。由此产生的模型比标准LSTM模型更简单,并且越来越受欢迎。

A gated recurrent unit neural network.

这些只是一些最值得注意的LSTM变体。还有很多其他的,比如Yao等人(2015)的Deption Gated RNN。还有一些完全不同的方法来解决长期依赖关系,例如Koutnik等人(2014)的发条RNNs。

这些变体中哪一个是最好的?差异重要吗?Greff等人(2015)对流行的变体进行了很好的比较,发现它们都是相同的。Jozefowicz等人(2015)测试了一万多个RNN架构,发现一些在某些任务上比LSTM效果更好。

Conclusion

之前,我提到过人们使用 RNN 获得的显著结果。基本上,所有这些结果都是使用 LSTM 实现的。对于大多数任务,它们确实可以更好地工作!

如果写成一系列公式,那么LSTM看起来令人生畏。希望在本文中一步一步地走过它们,使它们更加平易近人。

LSTM 是我们使用 RNN 所能实现的一大步。人们很自然地想知道:还有一大步吗?研究人员的普遍看法是:“是的!还有下一步,那就是关注!这个想法是让RNN的每个步骤从一些更大的信息集合中选择要查看的信息。例如,如果使用 RNN 创建描述图像的标题,则它可能会为输出的每个单词选取图像的一部分进行查看。事实上,Xu等人( 2015)正是这样做的 - 如果你想探索注意力,这可能是一个有趣的起点!使用注意力已经取得了许多非常令人兴奋的结果,而且似乎还有更多的结果即将到来…

注意力并不是RNN研究中唯一令人兴奋的线索。例如,Kalchbrenner等人(2015)的Grid LSTM似乎非常有前途。在生成模型中使用RNNs的工作 - 例如Gregor,et al. (2015)Chung,et al. (2015)Bayer & Osendorfer (2015) - 似乎也非常有趣。过去几年对于递归神经网络来说是一个激动人心的时刻,而即将到来的神经网络只会更加如此!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值