循环神经网络 (RNN) 是序列建模的主力军。从预测句子中的下一个单词到预测股票价格,它们维持内部状态 (即“记忆”) 的能力,使其格外适合处理上下文至关重要的任务。然而,传统的 RNN 记忆力出了名的短暂。当面对长序列时,它们容易陷入一种被称为梯度消失的问题——过去事件的影响在训练过程中会快速衰减。
1997 年,一种名为 长短期记忆 (LSTM) 的突破性架构被提出,用以解决这一问题。通过巧妙的门控系统和专门的记忆单元,LSTM 能够成功学习跨越数百个时间步的依赖关系,从而彻底改变了自然语言处理和时间序列分析等领域。
但即便是 LSTM 也存在潜在弱点。它们擅长处理单独且定义明确的序列,但在面对持续、无尽的数据流时却会表现不佳。在这种场景下,内部记忆可能会不受控制地增长,导致计算上的失效。赋予它们强大能力的机制——保持信息的能力——反而成了一种负担。
这引出了 Felix Gers、Jürgen Schmidhuber 和 Fred Cummins 于 2000 年发表的具有里程碑意义的论文: 《学会遗忘: 使用 LSTM 进行持续预测》。研究者们识别出了这一关键限制,并提出了一个优雅而强大的解决方案: 引入一个 遗忘门。这个简单的改动使得 LSTM 单元不仅能学习何时存储信息,还能学习何时丢弃信息。它教会了网络如何自我重置,为在连续、未分割的数据流上实现稳健学习铺平了道路。
本文将深入探索这篇论文,揭示这一改动如何彻底改变了 LSTM,并解释为什么学会遗忘与学会记忆同样重要。
快速回顾标准 LSTM
在了解作者的变更之前,我们先快速回顾一下标准 LSTM 的工作原理。其核心思想是拥有一个专用的记忆单元,该单元可以长时间维持一个恒定的状态,并由多个门控机制来控制信息流动。
图 1: 标准 LSTM 单元结构,包含输入门、输出门以及权重为 1.0 的自循环连接。虚线框标记的是后续引入的遗忘门。
如上图所示,一个标准的 LSTM 记忆块包括几个关键部分:
- 记忆单元 (\(s_c\)) — LSTM 的核心。它是一个线性单元,带有权重为 1.0 的自循环连接,称为 恒定误差环 (CEC) 。这一自连接能确保梯度不会消失,从而实现长期记忆。
- 输入门 (\(y^{in}\)) — 控制新输入信息进入记忆单元的比例。
- 输出门 (\(y^{out}\)) — 调节单元状态对当前时间步网络输出的影响程度。
单元状态通过将门控后的新信息加到前一状态上来更新:
公式 1: 在标准 LSTM 中,单元状态通过加法进行更新,从而保持长期一致性。
这种加法机制实现了持久记忆,但也可能导致单元状态在连续输入流中不受控制地增长。
问题所在: 记忆的失控增长
该加法更新规则 \(s_c(t) = s_c(t-1) + \dots\) 是 LSTM 记忆能力的关键所在,但在持续学习场景中,它也成为了阿喀琉斯之踵。
想象一个 LSTM 被喂以永无止境的文本流。网络在句子或文档之间没有“重置”信号。每一步都会向单元状态中添加新内容。长此以往,\(s_c\) 的值可能会无限制地增长。
这将引发两个严重问题:
- 饱和: 单元输出 \(y^c\) 通过一个非线性压缩函数 (例如 tanh) 计算。当 \(s_c\) 过度增长时,该函数会饱和,其导数趋近零,梯度流停止,单元也无法继续学习。
- 功能丧失: 当饱和发生时,记忆单元表现如同一个简单的前馈单元,失去了保留有意义历史的能力。
早期的 LSTM 实现通常在每个新序列开始时手动将单元状态重置为零。然而,在许多实际应用场景中,数据流是连续且未分割的。网络该如何学会自动重置记忆呢?
解决方案: 遗忘门
作者提出了一个极其简洁的解决办法——让 LSTM 单元具备控制自身记忆重置的能力。
他们通过添加一个 **遗忘门 **(记作 \(y^{\varphi}\)) 来实现这一点。该门与其他 LSTM 门的工作方式相似,为一个具有 sigmoid 激活函数、输出范围在 0 到 1 之间的神经单元:
公式 2: 遗忘门的激活计算方式与输入门和输出门类似。
遗忘门会调整单元内部的循环连接,将原本固定的自循环权重 (1.0) 转化为一个可学习的动态权重。新的状态更新规则如下:
公式 3: 扩展 LSTM 单元的更新方式;前一状态与遗忘门激活值相乘。
具体而言:
- 当 \(y^{\varphi} = 1\) 时,单元记住所有信息 (等同于标准 LSTM) 。
- 当 \(y^{\varphi} = 0\) 时,单元遗忘所有信息,其状态被重置。
- 当 \(y^{\varphi}\) 介于 0 与 1 之间时,单元执行渐进式衰减。
该机制使网络能够灵活控制信息保留与删除。它甚至可以学习根据输入模式有节奏地或条件性地遗忘。
此外,遗忘门还能提升训练效率。正如作者指出的那样: “当遗忘门激活值趋近零时,不仅单元状态被重置,其偏导数也随之重置——遗忘也意味着遗忘过去的错误。” 遗忘时,网络真正地学会了向前看。
实验: 检验遗忘的作用
为验证这一能力,作者在经典 RNN 基准测试的持续版本上测试了这种“扩展 LSTM”——这些任务专门设计来使标准 LSTM 失败。
任务 1: 持续嵌入式 Reber 语法 (CERG)
嵌入式 Reber 语法 (ERG) 是循环网络领域中的经典挑战。任务要求预测由有限状态图生成的序列中的下一个符号,这依赖于对远距离关系的记忆。
图 2: 持续 Reber 语法将标准有限语法扩展成一个循环形式,消除了明确的序列边界。
研究人员通过将无数个 Reber 语法字符串连接成一个连续输入流,构建了一个 持续版本 (CERG) ——既无明确开始,也无明确结束。网络需要无限地预测下一个符号。
扩展 LSTM 的实现采用一个包含四个记忆块 (每块含两个单元) 的隐藏层,所有记忆块与输入和输出层全连接。
图 3: 实验网络结构,一个扩展 LSTM,包含输入层、隐藏层 (记忆块) 和输出层。
结果: 遗忘确实有效
实验结果令人惊艳。
表 2: 在持续 Reber 预测任务中,扩展 LSTM 的表现明显优于标准模型。遗忘门与学习率衰减相结合取得了最佳效果。
标准 LSTM 在持续任务中完全失败——完美解比例为 0%。相比之下,带遗忘门的 LSTM 在 18% 的实验中解决了该任务,并在配合学习率衰减后成功率提高至 62%。
那么网络内部究竟发生了什么变化?对单元状态的可视化揭示了遗忘门如何学会进行内部重置。
图 4: 在标准 LSTM 中,随着新序列的积累,内部状态无界增长,最终导致饱和。
随着输入流的继续,标准 LSTM 中的单元激活值持续升高,最终导致网络崩溃。而扩展 LSTM 的表现截然不同。
图 5: 扩展 LSTM 学会了自我重置。在每个嵌入式语法字符串结束时,遗忘门激活值降至零,使单元状态保持有界且高效。
这里的激活值始终在限定范围内。遗忘门通常保持在 1.0,以在序列处理期间维持记忆;而在字符串末尾,它会迅速下降到零,重置状态。网络已学会识别内部边界,在新片段开始之前自动清空记忆。
进一步分析发现,记忆块之间形成了功能分工: 部分负责长期依赖,部分则专注于短期过渡。
图 6: 一个短期记忆块也学会了自我重置,但在更快的时间尺度上进行。
它们共同形成了一个学习到的时间行为层次结构——每个都由其对应的遗忘门调控。
任务 2: 持续含噪时序任务 (CNTO)
为了验证结果能否推广至非符号任务,作者将该方法应用于另一项具有挑战性的基准测试:** 含噪时序 (NTO)** 任务。该任务要求网络根据稀有符号在噪声中出现的顺序与位置对长序列进行分类。持续版本 (CNTO) 则将许多此类序列连接为一个无尽数据流。
表 3: 标准 LSTM 在 CNTO 上失败;带遗忘门的扩展 LSTM 成功,并在学习率衰减下表现进一步提升。
与前一任务相同,标准 LSTM 完全失效,无法从记忆饱和中恢复。而带遗忘门的网络顺利完成任务,并且通过学习率衰减后,其性能甚至超过了非持续版本的基准表现。
讨论: 为何遗忘如此重要
扩展 LSTM 的成功揭示了一个深刻原理:** 学习离不开遗忘**。
在持续学习中,如果无法遗忘,内部表示会不断积累,最终导致饱和。遗忘门将 LSTM 从一个序列处理器转变为一个可处理无限动态数据流的流学习器。
关键结论:
- 遗忘是必要的: 在持续信息流中必须周期性重置记忆,才能防止饱和并保持有效学习。
- 学习到的控制优于手动重置: 遗忘门以自适应、数据驱动的方式取代了外部切分或固定衰减常数。
- 层次化分解自然产生: 记忆块可自主解决子任务,并通过遗忘清空状态,从而支持动态、多尺度的时间结构。
结论: 优雅与深远的遗产
遗忘门的引入不仅是一次小小升级,更是一场根本性的概念飞跃。它让网络能够管理内部资源并自主重置记忆,从而解决了只有在模型足够强大时才会出现的关键难题。
如今,几乎所有的 LSTM 实现在 TensorFlow 和 PyTorch 等框架中都默认包括遗忘门。最初的一个简单乘法项,如今已成为处理流式视频、文本、传感器数据等先进系统的核心基础。
《学会遗忘》的故事提醒我们:** 智能不仅在于记住,更在于知道何时放手。**