从我们聆听的旋律,到我们阅读的句子,再到我们语音的原始波形,我们周围的世界充满了序列。对于机器学习而言,理解和生成这类数据是一项巨大的挑战。模型如何才能掌握一个长段落的语法结构,或者创作出一首从头到尾都感觉连贯的旋律?关键在于记忆——具体来说,是跨越长时间跨度存储信息的能力。
多年来,循环神经网络 (RNNs) 一直是序列建模的首选工具。其标志性特征是隐藏状态,它像一种记忆,将信息从序列的一个步骤传递到下一个步骤。但经典的 RNN 有一个致命缺陷: 它的记忆会迅速衰退。它难以长距离地保留信息,这个问题被称为梯度消失问题。
为了解决这个问题,研究人员开发了更复杂的、带有门的 RNN 单元——这是一种能精细控制信息流的机制。其中最著名的是长短期记忆 (LSTM) 单元。最近,一种更简单的替代方案——门控循环单元 (GRU) ——迅速流行起来。这就给从业者带来了一个关键问题:** 哪一个更好?**
在 2014 年的一篇奠基性论文《Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling》中,来自蒙特利尔大学的研究人员 (包括 Yoshua Bengio) 对这些架构进行了测试。本文将深入解析他们的工作,探讨 LSTM 和 GRU 的内部工作原理,并分析它们在具有挑战性的序列建模任务上的正面交锋表现。
背景: 标准 RNN 及其记忆问题
在深入探讨门控单元之前,我们先快速回顾一下标准 RNN 的工作原理。
RNN 一次处理序列中的一个元素。在每个时间步 \(t\),它接收当前输入 \(x_t\) 和前一个隐藏状态 \(h_{t-1}\) 来计算新的隐藏状态 \(h_t\):
公式: RNN 隐藏状态更新函数 \(\phi\),其中 \(h_t\) 依赖于 \(x_t\) 和 \(h_{t-1}\)。
在传统——或“普通”——RNN 中,\(\phi\) 通常实现为一个仿射变换,后跟一个非线性激活函数,如 tanh
:
普通 tanh RNN 中的隐藏状态更新。
在这里,网络学习权重矩阵 \(W\) 和 \(U\)。隐藏状态 \(h_t\) 作为网络对过去的全部记忆。对于生成式任务 (如创作音乐或文本) ,目标是通过在给定所有先前元素的条件下预测下一个元素来对序列的概率进行建模:
使用链式法则进行序列概率分解。
这种简单更新机制的问题出现在训练过程中。RNN 使用时间反向传播来调整其权重——计算 \(W\) 或 \(U\) 的微小变化如何影响最终的误差。在反向传播的每一步中,信号都会乘以 \(U\)。如果 \(U\) 中的值很小,信号会呈指数级衰减,迅速接近于零 (梯度消失) ;如果值很大,信号可能会爆炸 (梯度爆炸) 。这两种情况都使得学习长期依赖关系变得极其困难。
这一根本性限制促使研究人员创造了门控 RNN 单元——旨在保护和调节记忆的机制。
核心方法: 用门控制信息流
解决 RNN 记忆问题的方法是赋予每个单元更多的状态控制权。不是在每一步都重写隐藏状态,而是让单元学习何时记忆、何时遗忘以及该输出什么。这就是门控的核心思想。
门控单元的作用类似于控制信息流的阀门。它们被实现为小型神经网络 (通常使用输出值在 0 到 1 之间的 sigmoid 激活函数) ,用于决定信息的通行比例。我们来看两种最成功的实现:** LSTM** 和 GRU。
图 1: LSTM (左) 与 GRU (右) 的视觉对比。LSTM 维护独立的记忆单元 \(c\),而 GRU 将记忆融入隐藏状态 \(h\) 中。
元老: 长短期记忆 (LSTM)
LSTM 于 1997 年提出,是解决梯度消失问题的经典方案。其关键创新是**单元状态 **(\(c_t\)) ,这是一条贯穿整个单元的通路,像传送带一样,让信息在未被门修改的情况下能够持续流动。
LSTM 采用三个门:
- 遗忘门 (\(f_t\)) — 决定从单元状态中丢弃哪些信息。
- 输入门 (\(i_t\)) — 决定存储哪些新信息。
- 输出门 (\(o_t\)) — 控制将单元状态的哪部分作为隐藏状态输出。
遗忘门和输入门的计算公式如下:
遗忘门和输入门的计算公式。
新的候选记忆内容:
新的候选记忆 \(\tilde{c}_t\)。
单元状态更新公式:
通过部分遗忘旧信息并添加新信息来更新 \(c_t\)。
输出门公式:
输出门控制单元状态的输出程度。
最终隐藏状态:
根据 \(o_t\) 和 \(c_t\) 计算 \(h_t\)。
通过将单元状态与隐藏状态分离并结合明确的门机制,LSTM 能在数百个时间步内保存关键信息,且不会消失或被覆盖。
挑战者: 门控循环单元 (GRU)
GRU 于 2014 年提出,是更精简的替代方案。它将遗忘门和输入门合并为一个更新门,并取消单独的单元状态。
GRU 有两个门:
- 重置门 (\(r_t\)) — 在计算新的候选激活 \(\tilde{h}_t\) 时控制遗忘多少先前隐藏状态:
重置门控制过往记忆的贡献。
候选激活:
在重置门影响下计算出的 \(\tilde{h}_t\)。
- 更新门 (\(z_t\)) — 控制保留多少旧状态,用多少新候选替换:
更新门将旧记忆与新记忆进行融合。
最终隐藏状态:
对 \(h_{t-1}\) 和 \(\tilde{h}_t\) 进行线性插值。
若 \(z_t \approx 1\),GRU 更倾向于新信息;若 \(z_t \approx 0\),则保留更多旧记忆。这种简单的机制能有效捕捉长时依赖。
LSTM vs. GRU: 双门物语
LSTM 与 GRU 都通过加性状态更新和梯度捷径来应对梯度消失问题。主要差异包括:
- 复杂度: GRU 更简单,计算通常更快。
- 记忆控制: LSTM 有独立的记忆单元,并可控制其输出暴露程度;GRU 的隐藏状态始终完全暴露。
- 门的独立性: LSTM 能独立决定遗忘旧信息与添加新信息;GRU 则通过更新门将两者绑定。
到底哪个更好?理论不足以说明问题——需要实证对比。
实验: 理论见真章
为了比较 tanh-RNN、LSTM 和 GRU,研究人员设计了一个平衡实验。
任务与数据集
模型在序列建模任务中进行测试,优化目标是最大化对数似然:
序列建模的数学优化目标。
涵盖两个领域:
- 复调音乐建模 — 四个数据集: Nottingham、JSB Chorales、MuseData、Piano-midi。
- 语音信号建模 — Ubisoft 提供的两个包含原始音频波形的数据集。
模型设置
为确保公平,每种架构分配了相近的参数总量。更简单的 tanh
模型会增加隐藏单元数量,以匹配 LSTM 与 GRU 的参数规模。
表 1: 各架构的单元数与参数数量。
训练过程使用 RMSProp、梯度裁剪以及基于验证集性能的早停策略。
结果: 胜者是……视情况而定
最终性能
平均负对数概率 (数值越低越好) :
表 2: 各模型的测试性能。
关键结论:
- 门控单元表现亮眼 — 在 Ubisoft 语音数据集上,LSTM 与 GRU 的表现远超 tanh-RNN。Tanh-RNN 无法捕捉复杂依赖。
- 音乐任务结果不一 — 在多数音乐数据集中,GRU 略微优于 LSTM,但差别很小;在语音任务中,LSTM 在 Ubisoft A 上领先,GRU 在 Ubisoft B 上占优。
学习曲线
学习趋势揭示效率细节。
音乐数据集:
GRU 收敛速度常常优于 LSTM 和 tanh,无论从迭代次数还是实际运行时间来看。
语音数据集:
Tanh-RNN 在早期就进入停滞。LSTM 与 GRU 持续改进,验证了门控机制的重要性。
结论: 关键要点
- 门控机制至关重要 — 对于长时依赖任务,LSTM 和 GRU 明显优于传统的 tanh-RNN。
- GRU 是强有力的替代 — 表现与 LSTM 相当,有时运行更快、更简单。
- 没有绝对的赢家 — 不同数据集与任务会影响哪种门控单元的最佳表现。
尽管是初步研究,这项工作在验证 GRU 有效性方面发挥了重要作用,并稳固了它与 LSTM 在深度学习工具箱中的地位。对于实践者而言,这再次强调了同时尝试两种架构、以找出最契合问题的最佳方案的重要性。