时间回到 1997 年。辣妹组合 (Spice Girls) 正高居音乐排行榜榜首,《泰坦尼克号》即将在影院上映,而两位研究员 Sepp Hochreiter 和 Jürgen Schmidhuber 发表了一篇论文,这篇论文最终将成为现代人工智能革命的基石。
这篇题为《长短期记忆》 (Long Short-Term Memory) 的论文提出了一种新型神经网络架构,能够将信息记忆极长时间。
在当时,这是一个巨大的挑战。神经网络存在记忆问题——它们是出了名的健忘。试图让一个标准循环神经网络 (RNN) 记住 100 个时间步之前发生的事情,就像读完整本书后试图回忆第一句话一样,信息几乎肯定会消失,被新数据的洪流冲刷得一干二净。
这种失忆症是将人工智能应用于文本、语音或时间序列等序列数据的重大障碍。
如果你在句子结尾就忘了开头,还怎么翻译一个句子?
如果你无法看到跨越几天的模式,又怎么预测股票价格?
长短期记忆 (LSTM) 网络就是答案。它引入了一种专门为克服这一根本限制而设计的新颖架构。
本文将深入解读这篇开创性的 1997 年论文——剖析 LSTM 旨在解决的问题、其背后的巧妙设计,以及那些证明它不仅仅是又一次渐进式改进,而是真正突破的实验。
循环神经网络的记忆衰退
要理解为什么 LSTM 如此重要,我们首先需要了解臭名昭著的梯度消失问题。
循环神经网络 (RNN) 是为处理序列而设计的。与标准前馈网络不同,RNN 有一个循环结构,允许信息在时间步之间持续存在。在每个时间步 \(t\),网络接收:
- 输入: \(x(t)\)
- 前一隐藏状态: \(h(t-1)\)
并利用这两者产生:
- 输出
- 新的隐藏状态: \(h(t)\)
这个隐藏状态就是网络的“记忆”。
训练 RNN 通常使用一种名为时间反向传播 (BPTT) 的算法。
它是标准反向传播的变体: 网络在时间上被展开,形成一个由重复计算构成的长链,每个时间步的计算共享权重。最终输出的误差会通过该展开的网络反向传播,以更新权重。
问题在于:
为了更新权重,我们需要误差关于权重的梯度。这个梯度是许多乘法的链——激活函数的导数与权重相乘——跨越多个时间步。
对于一个神经元 \(j\):
\[ \vartheta_j(t) = f'_j(net_j(t)) \sum_i w_{ij} \ \vartheta_i(t+1) \]其中,\(\vartheta_j(t)\) 是反向传播的误差信号。将这一过程在多个时间步 \(q\) 上串联起来,会产生一个缩放因子:
两种失效模式
梯度消失 (Vanishing Gradient)
多数常见激活函数 (如 logistic sigmoid) 的导数严格小于 1 (最大值为 0.25) 。许多小于 1 的数相乘会导致梯度呈指数级衰减。仅几个时间步后,梯度就可能几乎为零,网络因此无法学习相距较远的事件间的依赖。梯度爆炸 (Exploding Gradient)
若权重大于 1,梯度可能呈指数级增长,导致权重更新极不稳定,网络无法学习。
简而言之,过去输入的影响要么消失,要么爆炸,使得标准 RNN 的有效记忆跨度非常短。
这让它们无法应对长时滞问题。
初次尝试: 恒定误差传送带
作者们提出: 能否让误差在反向传播中既不缩小也不放大?
在循环反向传播中,流经神经元自连接的误差信号会按以下比例缩放:
\[ f'_j(net_j(t)) \cdot w_{jj} \]为了保持误差信号恒定,该项必须等于 1.0:
\[ f'_j(net_j(t)) \cdot w_{jj} = 1.0 \]最简单的实现是:
- 使用线性激活函数 \(f_j(x) = x\),因此 \(f'_j = 1\)。
- 将自连接权重设为 \(w_{jj} = 1.0\)。
这就构成了作者所称的恒定误差传送带 (CEC, Constant Error Carousel) ——能够无限期、无变化地传递信息的单元,梯度可以无衰减地反向传播。
但简单的 CEC 有两个致命缺陷:
- 输入权重冲突 — 相同的输入权重必须同时存储相关输入并忽略不相关输入。
- 输出权重冲突 — 相同的输出权重必须既能读取已存信息,又能在无关时防止其干扰网络。
解决办法是:** 用门控单元控制信息流**。
LSTM 单元: 带门控的记忆
LSTM 通过将 CEC 包裹在乘法门单元中来解决上述冲突——这些可学习的开关决定何时写入或读取单元信息。
LSTM 记忆单元结构解析
1. 单元状态: CEC
LSTM 单元的核心是单元状态 \(s_{c_j}(t)\)——即 CEC。
它通过在前一状态上加入新信息来更新,从而允许梯度无衰减地反向流动:
2. 输入门 (\(in_j\))
控制对记忆的写入。通过 sigmoid 激活函数输出介于 0 和 1 的数值:
- 1 → 允许存储新信息
- 0 → 阻止更新,保护已存状态
改进的状态更新公式为:
\[ s_{c_j}(t) = s_{c_j}(t-1) + y^{in_j}(t) \cdot g(net_{c_j}(t)) \]其中,\(g\) 是压缩函数 (如缩放后的 tanh) ,\(y^{in_j}(t)\) 是学习到的门控输出。
3. 输出门 (\(out_j\))
控制从记忆的读取:
\[ y^{c_j}(t) = y^{out_j}(t) \cdot h(s_{c_j}(t)) \]其中,\(h\) 通常为 tanh;\(y^{out_j}(t)\) 决定单元值是否影响网络其他部分。
单元块
LSTM 单元常被分组为块,共享输入/输出门,以提升效率。
例如的网络拓扑:
LSTM 上阵实测
LSTM 的精彩之处在于,它能解决普通 RNN 完全无能为力的问题。
实验 1: 嵌入式 Reber 语法
序列学习的基准测试——根据语法生成的字符串预测下一个符号。
LSTM 的结果:
其他算法要么步履维艰,要么彻底失败。LSTM 100% 的时间都能解决这个问题,而且速度更快。输出门至关重要——它们使网络能学习短期语法规则,同时不被更难的长期依赖干扰。
实验 2: 1000 步挑战
任务: 根据序列中的第二个符号预测最后一个符号。最小时间延迟为 1000 步,中间夹杂随机干扰符号。
这是典型的长期依赖测试——标准 RNN 无法完成。
LSTM 可靠解决了最小延迟为 1000 步的任务。即便干扰符号增多,训练时间增长也很缓慢——这是其他方法无法比拟的特性。
实验 4: 加法问题
测试: LSTM 能否存储连续、分布式数值?
输入一个数值-标记对的序列 → 在末尾输出所有被标记数值的总和。
LSTM 能在数百个时间步内精确保存实数值且无漂移——证明了 CEC 的稳定性。
实验 5: 乘法问题
与上述任务类似,但目标是被标记数值的乘积。这表明 LSTM 不仅能累加,还能执行非线性运算。
实验 6: 时间顺序
根据序列中 X 出现在 Y 之前还是之后进行分类,X 与 Y 之间隔着长段噪声。
同样,LSTM 轻松解决了该问题: 它将第一个符号存储于单元中,在第二个符号出现时更新状态。
为什么重要
这篇 LSTM 论文实现了:
- 真正的长期记忆 — 可跨越超 1000 步延迟
- 噪声鲁棒性
- 支持连续和分布式表示
- 高效、时空局域的学习
- 宽参数容忍度 — 几乎无需大量微调
影响与传承
1997 年的《长短期记忆》论文是深度学习的一次根本性突破。
通过引入恒定误差传送带并用门控保护,Hochreiter 和 Schmidhuber 解决了训练循环网络中最持久的问题之一。
如今,LSTM (及其变体,如 GRU) 驱动着:
- 语言翻译 (如谷歌翻译)
- 语音识别 (如 Siri)
- 大型语言模型中的文本生成
- 时间序列预测
回顾:
LSTM 的故事是一个典范,展示了如何识别核心问题、从第一性原理推理、设计优雅的机制并严谨验证。
它奠定了机器理解上下文、处理语言及从长时间跨度中学习的基础——一种真正不讲道理的有效性,持续塑造着人工智能的未来。