了解LSTM网络

递归神经网络

  人类不会每时每刻都开始思考。当你阅读这篇文章时,你会根据你对之前单词的理解来理解每个单词。你不要扔掉所有东西,然后再从头开始思考。你的想法有持久性。

  传统的神经网络不能做到这一点,这似乎是一个主要的缺点。例如,假设您想要对电影中每个点发生的事件进行分类。目前尚不清楚传统神经网络如何利用其对电影中先前事件的推理来告知后者。

  循环神经网络解决了这个问题。它们是带有循环的网络,允许信息持续存在。

递归神经网络具有循环

  这些循环使得循环神经网络看起来有点神秘。但是,如果你多想一点,事实证明它们与普通的神经网络并没有什么不同。可以将循环神经网络视为同一网络的多个副本,每个副本都将消息传递给后继者。考虑如果我们展开循环会发生什么:

展开的递归神经网络

  这种类似链的性质表明,递归神经网络与序列和列表密切相关。它们是用于此类数据的神经网络的自然架构。

  他们肯定会被使用!在过去几年中,将RNN应用于各种问题取得了令人难以置信的成功:语音识别,语言建模,翻译,图像字幕......这个列表还在继续。我将讨论使用RNNs可以实现的惊人壮举,以及Andrej Karpathy的优秀博客文章,回归神经网络的不合理有效性。但他们真的很棒。

  这些成功的关键在于使用“LSTM”,这是一种非常特殊的递归神经网络,对于许多任务而言,它比标准版本好得多。几乎所有基于递归神经网络的令人兴奋的结果都是用它们实现的。这篇论文将探讨这些LSTM。

长期依赖问题

  RNN的一个吸引力是他们可能能够将先前信息连接到当前任务,例如使用先前的视频帧可能通知对当前帧的理解。如果RNN可以做到这一点,它们将非常有用。但他们可以吗?这取决于。有时,我们只需要查看最近的信息来执行当前任务。例如,考虑一种语言模型,试图根据之前的单词预测下一个单词。如果我们试图预测“云在天空中”的最后一个词,我们不需要任何进一步的背景 - 很明显下一个词将是天空。在这种情况下,如果相关信息与所需信息之间的差距很小,则RNN可以学习使用过去的信息。

image

  但也有一些情况需要更多的背景。考虑尝试预测文本中的最后一个词“我在法国长大......我说流利的法语。”最近的信息表明,下一个词可能是一种语言的名称,但如果我们想缩小哪种语言,我们需要从更进一步的背景来看,法国的背景。相关信息与需要变得非常大的点之间的差距是完全可能的。

  不幸的是,随着差距的扩大,RNN无法学习连接信息。

神经网络与长期依赖关系斗争

  理论上,RNN绝对能够处理这种“长期依赖性”。人类可以仔细挑选参数来解决这种形式的玩具问题。遗憾的是,在实践中,RNN似乎无法学习它们。Hochreiter(1991)[德国]Bengio等人对该问题进行了深入探讨,他找到了一些非常根本的原因,为什么它可能很难。

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

LSTM网络

  长短期内存网络 - 通常只称为“LSTM” - 是一种特殊的RNN,能够学习长期依赖性。它们由Hochreiter&Schmidhuber(1997)介绍,并在以下工作中被许多人提炼和推广。它们在各种各样的问题上运作得非常好,现在被广泛使用。

  LSTM明确旨在避免长期依赖性问题。长时间记住信息实际上是他们的默认行为,而不是他们难以学习的东西!

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

标准RNN中的重复模块包含单个层

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

LSTM神经网络。

  不要担心发生了什么的细节。我们将逐步介绍LSTM图。现在,让我们试着对我们将要使用的符号感到满意。

image

  在上图中,每一行都携带一个整个向量,从一个节点的输出到其他节点的输入。粉色圆圈表示逐点运算,如矢量加法,而黄色框表示神经网络层。行合并表示连接,而行分叉表示其内容被复制,副本将转移到不同的位置。

LSTM背后的核心理念

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

  电池状态有点像传送带。它直接沿着整个链运行,只有一些次要的线性交互\。信息很容易沿着它不变地流动。

image

  LSTM确实能够移除或添加信息到细胞状态,由称为门的结构精心调节。

盖茨是一种可选择通过信息的方式。它们由S形神经网络层和逐点乘法运算组成。

image

  sigmoid层输出0到1之间的数字,描述每个组件应该通过多少。值为零意味着“不让任何东西通过”,而值为1则意味着“让一切都通过!”

LSTM具有三个这样的门,用于保护和控制电池状态。

一步一步的LSTM走过

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

image

  在我们的语言模型的例子中,我们想要将新主题的性别添加到单元格状态,以替换我们忘记的旧

image1

  在语言模型的情况下,我们实际上放弃了关于旧主题的性别的信息并添加新信息,正如我们在前面的步骤中所做的那样。

image

  对于语言模型示例,由于它只是看到一个主题,它可能想要输出与动词相关的信息,以防接下来会发生什么。例如,它可能输出主语是单数还是复数,以便我们知道动词应该与什么形式共轭,如果接下来的话。

image

长期记忆的变种

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

Gers&Schmidhuber(2000)引入的一种流行的LSTM变体是添加“窥视孔连接”。这意味着我们让栅极层看到单元状态。

image

  上面的图表为所有门增加了窥视孔,但许多论文会给一些窥视孔而不是其他的。

  另一种变化是使用耦合的遗忘和输入门。我们不是单独决定忘记什么以及应该添加新信息,而是共同做出这些决定。我们只会忘记当我们要在其位置输入内容时。当我们忘记旧事物时,我们只向州输入新值。

image

  LSTM稍微有点戏剧性的变化是由Cho等人引入的门控循环单元(GRU)(2014年)。它将遗忘和输入门组合成一个“更新门”。它还合并了单元状态和隐藏状态,并进行了一些其他更改。由此产生的模型比标准LSTM模型简单,并且越来越受欢迎。

门控递归单元神经网络。

  这些只是最着名的LSTM变种中的一小部分。还有很多其他的东西,比如Yao等人的 Depth Gated RNNs还有一些完全不同的解决长期依赖关系的方法,如Koutnik等人的Clockwork RNNs

  哪种变体最好?差异是否重要?格雷夫等人。(2015)对流行的变种做了很好的比较,发现它们都差不多。Jozefowicz,et al。(2015)测试了超过一万个RNN架构,找到了一些在某些任务上比LSTM更好的架构。
注:本文系翻译

posted @ 2019-02-13 17:47  编程自习室  阅读(374)  评论(0编辑  收藏  举报