理解LSTM

2025-06-15

Understanding LSTM Networks

参考资料:理解 LSTM 网络 – colah 的博客 — Understanding LSTM Networks – colah’s blog

Recurrent Neural Networks

人类不会每一秒都从零开始思考。当你阅读这篇文章时,你理解每个单词都是基于你对之前单词的理解。你不会把所有事情都抛掉,然后重新从零开始思考。因为思维具有持续性

传统的神经网络做不到这一点,这似乎是一个主要的缺点。例如,想象一下,如果你想对电影中的每个点发生的事件进行分类。传统的神经网络是不清楚如何利用其对电影中先前事件的推理来为后续事件提供信息。

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

img

在上述图中,一个神经网络块 A 查看一些输入 xt 并输出一个值 ht 。回路允许信息从一个网络步骤传递到下一个步骤。

这些回路让循环神经网络看起来有点神秘。然而,如果你再多想一点,你会发现它们与普通神经网络并没有什么不同。一个循环神经网络可以看作是相同网络的多个副本,每个副本向其继任者传递信息。

An unrolled recurrent neural network.

这种链式结构表明循环神经网络与序列和列表密切相关。它们是神经网络处理此类数据的自然架构。成功的核心是使用“LSTMs”,一种非常特殊的循环神经网络,它在许多任务上比标准版本表现好得多。几乎所有基于循环神经网络的激动人心的成果都是通过它们实现的。本文将探讨的就是这些 LSTMs。

The Problem of Long-Term Dependencies

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

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

img

但也有一些情况我们需要更多的上下文。考虑尝试预测文本“我在法国长大……我说流利的法语。”最近的资讯表明下一个词可能是某种语言的名称,但如果我们想缩小是哪种语言,我们需要更早的法国背景。相关信息和需要它的点之间的差距完全可能变得非常巨大。不幸的是,随着这个差距的增长,RNNs 变得无法学习连接这些信息。

Neural networks struggle with long term dependencies.

理论上,RNNs 绝对能够处理这种“长期依赖”问题。人类可以仔细选择参数来为它们解决这种形式的玩具问题。遗憾的是,在实践中,RNNs 似乎无法学习它们。Hochreiter (1991) [德语]和 Bengio 等人(1994)深入探讨了这个问题,并发现了一些非常基本的原因,解释了为什么这可能很困难。

LSTM Networks

长短期记忆网络——通常简称为“LSTM”——是一种特殊的循环神经网络,能够学习长期依赖关系。它们由 Hochreiter & Schmidhuber (1997)于 1997 年提出,并在后续工作中被许多人改进和推广。 它们在各种问题上表现极好,现在被广泛使用。

LSTMs 明确设计用来避免长期依赖问题。长时间记忆信息实际上是它们的默认行为,而不是它们难以学习的东西!

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

img

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

A LSTM neural network.

img

在上述图中,每条线承载一个完整的向量,从某个节点的输出连接到其他节点的输入。粉红色圆圈代表逐元素操作,如向量加法,而黄色方框则是可学习的神经网络层。线段合并表示拼接操作,而线段分叉则表示其内容被复制并分发到不同的位置。

The Core Idea Behind LSTMs

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

单元状态有点像传送带。它直直地贯穿整个链条,只有一些轻微的线性交互。信息很容易沿着它不变地流动。

img

LSTM 确实具有向细胞状态中添加或删除信息的能力,这些操作由称为门的结构精心调节。门是一种可选地让信息通过的方式。它们由一个 Sigmoid 神经网络层和一个逐点乘法运算组成。

img

Sigmoid 层输出介于 0 和 1 之间的数值,描述每个组件应允许通过的程度。值为 0 表示“不允许任何内容通过”,而值为 1 表示“允许所有内容通过!”一个 LSTM 有三个这样的门,用来保护和控制细胞状态。

Step-by-Step LSTM Walk Through

我们 LSTM 的第一步是决定从细胞状态中丢弃哪些信息。这个决定是由一个称为“遗忘门层”的 Sigmoid 层做出的。它查看 ht−1 和 xt ,并为细胞状态 Ct−1中的每个数字输出一个介于 0 和 1 之间的数字。一个 1 代表“完全保留这个”,而一个 0 代表“完全丢弃这个”。让我们回到语言模型根据所有前面的词来预测下一个词的例子。在这样的问题中,细胞状态可能包括当前主语的性别,以便使用正确的代词。当我们看到一个新的主语时,我们希望忘记旧主语的性别。

img

下一步是决定我们将要在细胞状态中存储哪些新信息。这包括两个部分。首先,一个称为“输入门层”的 Sigmoid 层决定哪些值将被更新。接下来,一个 tanh 层创建一个新候选值向量 C~t ,这些值可以加到状态中。在下一步中,我们将结合这两个部分来创建状态的更新。在我们的语言模型示例中,我们希望将新主语的性别添加到细胞状态中,以替换我们正在遗忘的旧信息。

img

现在,是时候将旧的记忆状态 Ct−1 更新为新记忆状态 Ct了。前几个步骤已经决定了要做什么,我们只需要实际执行它。我们将旧状态乘以 ft,忘记我们之前决定要忘记的事情。然后我们加上 it∗C~t 。这是新的候选值,其大小由我们决定要更新每个状态值的程度决定。在语言模型的情况下,这就是我们根据前一步骤的决定,实际丢弃关于旧主题的性别信息并添加新信息的地方。

img

最后,我们需要决定要输出什么。这个输出将基于我们的细胞状态,但会是一个经过过滤的版本。首先,我们运行一个 sigmoid 层,它决定我们要输出的细胞状态的部分。然后,我们将细胞状态通过 tanh (将值推到 −1 和 1 之间),并将其乘以 sigmoid 门的输出,这样我们只输出我们决定要输出的部分。对于语言模型示例,由于它刚刚看到了一个主语,它可能想要输出与动词相关的信息,以防这就是接下来要出现的内容。例如,它可能会输出主语是单数还是复数,这样我们就能知道如果接下来是动词,应该将其变成什么形式。

img

Variants on Long Short Term Memory

一种流行的 LSTM 变体,由 Gers & Schmidhuber (2000) 引入,是添加“窥视连接”。这意味着我们让门层能够查看细胞状态。

img

上面的图给所有门都添加了窥视孔,但很多论文会只给某些门添加窥视孔而不给其他门添加。

另一种变体是使用耦合的遗忘门和输入门。我们不再分别决定该遗忘什么以及应该向其中添加哪些新信息,而是将这两个决策结合起来。只有当我们打算用新信息替换旧信息时,才会进行遗忘。只有当我们遗忘了一些旧信息时,才会将新值输入到状态中。

img

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

A gated recurrent unit neural network.

Conclusion

LSTMs 是我们能通过 RNNs 实现的重大进步。很自然地会想:还有没有另一大进步?研究人员普遍认为:“有!下一步是注意力机制!”这个想法是让 RNN 的每一步从一些更大的信息集合中选择信息来关注。例如,如果你使用 RNN 来生成描述图像的标题,它可能会为输出的每个词选择图像的一部分来关注。

事实上,Xu, et al. (2015)确实做了这样的事情——如果你想探索注意力机制,这可能是一个有趣的起点!