转载 https://colah.github.io/posts/2015-08-Understanding-LSTMs/

如何理解 LSTM神经网络模型

循环神经网络

人类不会每分每秒都从头开始思考。当你阅读这篇文章时,你会根据对前面单词的理解来理解每个单词。你不会抛弃一切,重新从头开始思考。你的思想具有持久性。

传统的神经网络无法做到这一点,这似乎是一个重大缺陷。例如,假设你想对电影中每个时刻发生的事件进行分类。目前还不清楚传统的神经网络如何利用其对电影中先前事件的推理来指导后续事件。

循环神经网络解决了这个问题。它们是具有循环的网络,可使信息持久存在。

img

循环神经网络

在上图中,神经网络的一个部分,A,查看一些输入X_t,并输出一个值h_t. 循环允许信息从网络的一个步骤传递到下一个步骤。

这些循环使得循环神经网络看起来有些神秘。但是,如果你再仔细想想,就会发现它们与普通神经网络并没有太大区别。循环神经网络可以看作是同一网络的多个副本,每个副本都会向后继者传递一条消息。考虑一下如果我们展开循环会发生什么:

展开的循环神经网络。

展开的循环神经网络。

这种链式特性表明循环神经网络与序列和列表密切相关。它们是用于此类数据的神经网络的自然架构。

而且它们确实被使用!在过去的几年中,RNN 在各种问题上的应用取得了令人难以置信的成功:语音识别、语言建模、翻译、图像字幕……等等。在 Andrej Karpathy 的优秀博客文章《循环神经网络的不合理有效性》中讨论使用 RNN 可以实现的惊人成就。但它们确实非常了不起。

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

长期依赖的问题

RNN 的吸引力之一是它们可能能够将先前的信息与当前任务联系起来,例如使用先前的视频帧可能有助于理解当前帧。如果 RNN 能够做到这一点,它们将非常有用。但它们能做到吗?这取决于情况。

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

img

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

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

神经网络难以应对长期依赖关系。

理论上,RNN 绝对有能力处理这种“长期依赖关系”。人类可以仔细挑选参数来解决这种形式的小问题。遗憾的是,在实践中,RNN 似乎无法学习它们。Hochreiter [(1991) 德语]Bengio 等人 (1994)深入探讨了这个问题,他们发现了一些非常根本的原因,说明这个问题可能很难解决。

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

LSTM 网络

长短期记忆网络(通常简称为“LSTM”)是一种特殊的 RNN,能够学习长期依赖关系。它们由Hochreiter 和 Schmidhuber(1997 年)提出,并在后续工作中被许多人改进和推广。1它们在解决各种问题方面都表现出色,目前已被广泛使用。

LSTM 的设计明确地避免了长期依赖问题。长时间记忆信息实际上是它们的默认行为,而不是它们需要努力学习的事情!

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

img

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

LSTM 也具有这种链式结构,但重复模块的结构不同。它不是只有一个神经网络层,而是有四个,并以非常特殊的方式相互作用。

LSTM 神经网络。

LSTM 中的重复模块包含四个交互层。

不必担心细节。稍后我们将逐步介绍 LSTM 图。现在,我们先熟悉一下我们将要使用的符号。

img

在上图中,每条线都承载着一个完整的向量,从一个节点的输出到其他节点的输入。粉色圆圈表示逐点运算,如向量加法,而黄色框表示学习到的神经网络层。线合并表示连接,而线分叉表示其内容被复制,副本被发送到不同的位置。

LSTM 背后的核心思想

LSTM 的关键是细胞状态,即贯穿图表顶部的水平线。

细胞状态有点像传送带。它沿着整个链条笔直运行,只有一些微小的线性相互作用。信息很容易不加改变地沿着它流动。

img

LSTM 确实有能力从细胞状态中删除或添加信息,并由称为门的结构严格调节。

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

img

S 型层输出介于 0 和 1 之间的数字,描述每个组件应通过的量。值为 0 表示“不让任何组件通过”,而值为 1 表示“让所有组件通过!”

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

逐步了解 LSTM

我们的 LSTM 的第一步是决定要从细胞状态中丢弃哪些信息。这个决定是由一个叫做“遗忘门”的 S 型层做出的。它查看h_{t-1}x_t,并输出一个介于 0 和 1 对于细胞状态中的每个数字C_{t-1}。 A. 1 代表“完全保留这一点”,而0 代表“彻底摆脱这个。”

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

img

下一步是决定我们要在单元状态中存储哪些新信息。这分为两部分。首先,一个称为“输入门”的 S 型层决定我们要更新哪些值。接下来,一个 tanh 层创建一个新候选值的向量,C̃_t,可以将其添加到状态中。在下一步中,我们将把这两者结合起来,以创建对状态的更新。

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

img

现在是时候更新旧的细胞状态了,x_{t-1},进入新的细胞状态 C_t 前面的步骤已经决定了要做什么,我们只需要实际去做。

我们将旧状态乘以 f~_t,忘记我们之前决定忘记的事情。然后我们添加 i_t*C̃_t。这是新的候选值,根据我们决定更新每个状态值的程度进行缩放。

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

img

最后,我们需要决定要输出什么。此输出将基于我们的细胞状态,但将是一个经过过滤的版本。首先,我们运行一个 S 型层,它决定要输出细胞状态的哪些部分。然后,我们将细胞状态通过双曲函数双曲函数(将值推至− 1 和 1 )并将其乘以 S 型门的输出,这样我们就只输出我们决定的部分。

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

img

长期短期记忆的变体

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

Gers 和 Schmidhuber (2000)提出的一种流行的 LSTM 变体是添加“窥孔连接”。这意味着我们让门层查看单元状态。

img

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

另一种变体是使用耦合的遗忘门和输入门。我们不是分别决定遗忘什么以及应该向什么添加新信息,而是一起做出这些决定。我们只会在要输入某些东西来代替它时才会忘记。我们只会在忘记旧东西时向状态输入新值。

img

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

门控循环单元神经网络。

这些只是最值得注意的 LSTM 变体中的一小部分。还有很多其他的变体,例如Yao 等人 (2015)提出的深度门控 RNN 。还有一些完全不同的方法来解决长期依赖关系,例如Koutnik 等人 (2014)提出的 Clockwork RNN 。

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

结论

之前,我提到了人们使用 RNN 取得的显著成果。基本上,所有这些都是使用 LSTM 实现的。它们在大多数任务上确实表现更好!

LSTM 写成一组方程式后,看起来相当吓人。希望本文一步步介绍它们能让你更容易理解。

LSTM 是我们利用 RNN 实现的一大进步。人们自然会想:还有另一大进步吗?研究人员的普遍看法是:“是的!还有下一步,那就是注意力!”这个想法是让 RNN 的每一步都从更大的信息集合中挑选信息来查看。例如,如果您使用 RNN 创建描述图像的标题,它可能会挑选图像的一部分来查看它输出的每个单词。事实上,Xu等人(2015)就是这么做的——如果您想探索注意力,这可能是一个有趣的起点!使用注意力已经取得了许多非常令人兴奋的成果,而且似乎还有更多的成果即将面世……

注意力并不是 RNN 研究中唯一令人兴奋的线索。例如,Kalchbrenner等人(2015)的网格 LSTM看起来非常有前景。在生成模型中使用 RNN 的工作 - 例如Gregor等人(2015)Chung等人(2015)Bayer & Osendorfer (2015) - 也看起来非常有趣。过去几年对于循环神经网络来说是激动人心的几年,而未来的几年只会更加激动人心!

致谢

我非常感谢许多人帮助我更好地理解 LSTM、对可视化效果发表评论并对这篇文章提供反馈。

我非常感谢 Google 的同事们提供的有益反馈,特别是Oriol VinyalsGreg CorradoJon ShlensLuke VilnisIlya Sutskever。我还要感谢许多其他朋友和同事抽出时间帮助我,包括Dario AmodeiJacob Steinhardt。我特别感谢Kyunghyun Cho对我的图表的极其周到的反馈。

在写这篇文章之前,我在两个关于神经网络的研讨会系列中练习解释 LSTM。感谢所有参加研讨会的人对我的耐心和反馈。