理解 LSTM 网络 | Ilya Sutskever’s Top 30 Reading List

作者:colah | 日期:2015年8月27日

循环神经网络

人类并不是每一秒都从零开始思考的。当你阅读这篇文章时,你对每一个词的理解,都是建立在你对前面词语的理解之上的。你不会把之前的一切全部丢弃,然后重新从头开始思考。你的思想是具有连续性的。

传统的神经网络无法做到这一点,而这似乎是一个重大的缺陷。举例来说,假设你希望在一部电影的每一个时间点上,对正在发生的事件进行分类。很难想象,一个传统的神经网络如何能够利用它对影片中先前事件的推理,来辅助理解后续的事件。

循环神经网络正是为了解决这一问题而提出的。它们是一类内部存在循环结构的网络,这种结构使得信息能够持续地被保留下来。

在上面的示意图中,一个神经网络模块   接收某一时刻的输入  ,并输出一个值  。这个循环结构使得信息可以从网络的一个时间步传递到下一个时间步。

这种循环使得循环神经网络看起来有些神秘。然而,如果你再深入思考一下,就会发现它们与普通的神经网络并没有本质上的不同。一个循环神经网络可以被看作是同一个网络的多次拷贝,每一个拷贝都会向下一个拷贝传递一条信息。考虑一下,当我们将这个循环展开时会发生什么:

这种链式结构揭示了一个重要事实:循环神经网络与序列和列表有着密切的关系。它们是处理这类数据的天然神经网络架构。

而且,循环神经网络确实被广泛使用!在过去的几年中,RNN 在多种任务上取得了令人惊叹的成功:语音识别、语言建模、机器翻译、图像描述生成……应用场景不胜枚举。关于 RNN 能够实现的这些惊人成就,我将把讨论留给 Andrej Karpathy 那篇出色的博客文章《循环神经网络不合理的有效性 | Ilya Sutskever’s Top 30 Reading List》。但无论如何,它们确实非常了不起。

这些成功的关键在于一种被称为 “LSTM” 的特殊循环神经网络。对于许多任务而言,它们的表现远远优于标准的 RNN。几乎所有基于循环神经网络的激动人心的成果,都是通过使用 LSTM 实现的。正是这些 LSTM,构成了本文讨论的核心。

长期依赖问题

循环神经网络的一个重要吸引力在于:它们或许能够将过去的信息与当前任务联系起来。例如,使用先前的视频帧来帮助理解当前帧的内容。如果 RNN 真的能够做到这一点,那么它们将会极其有用。但它们真的可以吗?答案是:视情况而定。

在某些情况下,我们只需要查看最近的信息,就可以完成当前的任务。例如,考虑一个语言模型,它试图根据前面的词来预测下一个词。如果我们要预测句子 “the clouds are in the sky” 的最后一个词,我们并不需要任何更早的上下文——显然,下一个词应该是 “sky”。在这种相关信息与使用位置之间间隔很短的情况下,RNN 是可以学会利用过去信息的。

但也存在需要更多上下文信息的情况。比如,尝试预测文本 “I grew up in France… I speak fluent French.” 中的最后一个词。最近的信息提示下一个词很可能是某种语言的名称,但如果我们希望进一步确定是哪一种语言,就必须依赖更早之前提到的 “France”。在这种情况下,相关信息与其被使用的位置之间的间隔,可能会变得非常大。

不幸的是,随着这种间隔的增大,RNN 会逐渐无法学会将这些信息有效地联系起来。

从理论上讲,RNN 是完全有能力处理这类“长期依赖”问题的。人类可以通过精心挑选参数,使 RNN 在某些玩具问题上成功解决这类任务。但遗憾的是,在实际应用中,RNN 似乎并不能很好地学会这一点。Hochreiter(1991)以及 Bengio 等人(1994)对这一问题进行了深入研究,并发现了一些相当根本性的原因,解释了为什么这类学习过程会如此困难。

幸运的是,LSTM 并不存在这个问题。

LSTM 网络

长短期记忆网络(Long Short-Term Memory networks),通常简称为 “LSTM”,是一种特殊的循环神经网络,能够学习长期依赖关系。它们最早由 Hochreiter 和 Schmidhuber 于 1997 年提出,并在随后的研究中被许多人不断改进和推广。它们在各种任务上都表现得极其出色,如今已经被广泛使用。

LSTM 被明确设计用来避免长期依赖问题。对它们而言,在长时间范围内记住信息几乎是一种默认行为,而不是一件需要费力学习的事情。

所有循环神经网络的基本形式,都是由一系列重复的神经网络模块组成的链式结构。在标准的 RNN 中,这个重复模块的结构非常简单,例如只包含一个 tanh 层。

LSTM 同样具有这种链式结构,但它们的重复模块采用了完全不同的设计。与只包含一个神经网络层不同,LSTM 的模块包含四个相互作用的层,并以一种非常特殊的方式协同工作。

暂时不必担心这些细节。稍后我们会一步一步地详细解析 LSTM 的结构。现在,我们先熟悉一下接下来会用到的符号表示方法。

在上图中,每一条连线都承载着一个完整的向量,从某个节点的输出传递到其他节点的输入。粉色圆圈表示逐点运算(pointwise operations),例如向量加法;黄色方框表示经过学习得到的神经网络层。多条线汇合表示向量的拼接(concatenation),而一条线的分叉表示其内容被复制,并将这些副本发送到不同的位置。

LSTM 的核心思想

LSTM 的关键在于细胞状态(cell state),也就是图中顶部那条水平贯穿的线。

细胞状态有点像一条传送带。它几乎沿着整个链条笔直地向前流动,只经历少量的线性相互作用。信息可以非常容易地在其中保持不变地流动。

当然,LSTM 也具备向细胞状态中移除或添加信息的能力,而这一过程由称为门(gate) 的结构精细地进行控制。

门是一种有选择地让信息通过的机制。它们由一个 sigmoid 神经网络层以及一个逐元素相乘的操作共同组成。

sigmoid 层会输出介于 0 和 1 之间的数值,用来描述每个分量有多少信息可以通过。数值为 0 表示“完全不让任何信息通过”,而数值为 1 表示“让所有信息通过”。

一个 LSTM 一共包含三个这样的门,用来保护并调控细胞状态。

LSTM 的逐步解析

LSTM 的第一步,是决定我们要从细胞状态中丢弃哪些信息。这个决策由一个 sigmoid 层完成,该层被称为遗忘门(forget gate)层。它会查看   和  ,并为细胞状态   中的每一个数值输出一个介于 0 和 1 之间的结果。数值为 1 表示“完全保留该信息”,而数值为 0 表示“彻底丢弃该信息”。

回到语言模型预测下一个词的例子。在这个问题中,细胞状态中可能包含当前主语的性别信息,以便正确使用代词。当模型看到一个新的主语时,就需要遗忘旧主语的性别信息。

下一步是决定要向细胞状态中存储哪些新的信息。这个过程分为两个部分。首先,一个称为输入门(input gate)层的   层会决定哪些数值需要被更新。接着,一个   层会生成一组新的候选值  ,这些值可以被添加到状态中。在下一步中,我们会将这两部分结果结合起来,对状态进行更新。

在语言模型的例子中,这一步会将新主语的性别信息加入到细胞状态中,用以替换刚刚被遗忘的旧信息。

现在,是时候将旧的细胞状态   更新为新的细胞状态   了。前面的步骤已经决定了该做什么,现在只需要真正执行这些操作。

我们将旧状态与   相乘,从而遗忘那些之前决定要丢弃的信息;然后再加上  ,也就是按更新程度缩放后的候选新值。

在语言模型的情境中,这一步真正完成了旧主语性别信息的删除,以及新主语性别信息的写入。

最后,我们需要决定要输出什么信息。这个输出基于细胞状态,但会是一个经过过滤的版本。首先,我们通过一个 sigmoid 层来决定细胞状态中哪些部分将被输出。接着,我们将细胞状态送入 tanh 函数(将数值压缩到 −1 和 1 之间),并与 sigmoid 门的输出相乘,从而只输出我们选中的那部分信息。

在语言模型的例子中,由于模型刚刚看到一个主语,它可能希望输出与动词相关的信息,以防下一个词是动词。例如,它可能会输出主语是单数还是复数,从而在后续需要时正确地进行动词变形。

LSTM 的变体

到目前为止,我所描述的是一种相当标准的 LSTM。但并不是所有 LSTM 都与上述结构完全相同。事实上,几乎每一篇涉及 LSTM 的论文,都会使用某种略有不同的版本。这些差异通常都很小,但仍然值得一提。

一种流行的 LSTM 变体由 Gers 和 Schmidhuber 于 2000 年提出,即引入了窥孔连接(peephole connections)。这意味着门结构在做决策时,也可以直接查看细胞状态。

上面的示意图为所有门都加入了窥孔连接,但在许多论文中,只会在部分门上使用窥孔连接。

另一种变体是将遗忘门和输入门进行耦合。与其分别决定遗忘什么以及写入什么,不如将这两个决策合并在一起。模型只有在打算用新信息替换旧信息时,才会进行遗忘;也只有在遗忘旧信息时,才会向状态中写入新的值。

一种变化幅度更大的 LSTM 结构是门控循环单元(Gated Recurrent Unit,GRU),由 Cho 等人于 2014 年提出。它将遗忘门和输入门合并为一个单一的“更新门”,同时合并了细胞状态和隐藏状态,并进行了若干其他修改。最终得到的模型比标准 LSTM 更为简单,并且正在变得越来越受欢迎。

以上只是一些较为著名的 LSTM 变体。除此之外,还有许多其他形式,例如 Yao 等人于 2015 年提出的深度门控 RNN。此外,也存在一些完全不同的方式来应对长期依赖问题,例如 Koutnik 等人于 2014 年提出的 Clockwork RNN。

这些变体中哪一种最好?这些差异真的重要吗?Greff 等人于 2015 年对多种流行变体进行了系统比较,发现它们的性能大致相当。Jozefowicz 等人于 2015 年测试了超过一万种 RNN 架构,发现其中一些在特定任务上甚至优于 LSTM。

结论

在前文中,我提到过人们利用 RNN 取得的那些令人瞩目的成果。事实上,几乎所有这些成果,都是通过使用 LSTM 实现的。对于大多数任务而言,它们的效果确实要好得多。

当以一组方程的形式写下来时,LSTM 看起来非常令人生畏。希望通过本文逐步展开的讲解,能让它们显得稍微容易理解一些。

LSTM 是 RNN 能力演进过程中的一次重要飞跃。自然会有人好奇:是否还存在下一次重大突破?研究者中一种常见的看法是:“是的!下一步是注意力机制(attention)。”其核心思想是,让 RNN 在每一个时间步,都可以从一个更大的信息集合中选择需要关注的部分。例如,如果你使用 RNN 来生成图像描述,那么模型在输出每一个词时,都可以选择关注图像的不同区域。Xu 等人于 2015 年的工作正是如此实现的——如果你想进一步探索注意力机制,这可能是一个很好的起点。近年来,基于注意力机制的研究成果层出不穷,未来似乎还会有更多令人兴奋的进展。

注意力机制并不是 RNN 研究中唯一值得关注的方向。例如,Kalchbrenner 等人于 2015 年提出的 Grid LSTM 看起来也极具潜力。此外,将 RNN 应用于生成模型的研究——如 Gregor 等人、Chung 等人,或 Bayer 与 Osendorfer 的工作——同样非常引人注目。过去几年对于循环神经网络而言是一个令人振奋的时期,而未来的几年似乎只会更加精彩。

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

如果觉得内容不错,欢迎你点一下「在看」,或是将文章分享给其他有需要的人^^

相关好文推荐:

循环神经网络不合理的有效性 | Ilya Sutskever’s Top 30 Reading List

复杂动力学第一定律 | Ilya Sutskever’s Top 30 Reading List

赋权于民:大语言模型如何逆转技术扩散的范式 | karpathy

软件 2.0 | karpathy

心智的空间 | karpathy

“通用智能根本不存在”?Yann LeCun 与 Demis Hassabis 正面开撕

可验证性 | karpathy

动物 vs 幽灵 | karpathy

2025年 LLM 年度回顾 | karpathy

让 AI 真正拥有“长时记忆”的开端

一次关于未来智能的深度对话

假如科学被做成了自动售卖机

聊一聊OpenAI新发布的Apps SDK
苦涩的教训
特朗普签署AI行动计划,AI全球赛跑加速,中国准备好了吗?
Flux Context Dev:一句话玩转AI修图,免费开源神器!
马斯克Neuralink最新发布会!大脑直接操控电脑,人类正式迈入“意识互联”时代!

0条留言

留言