Home
/
大语言模型
/
LSTM:让远处的误差仍能教会网络记忆
# 001|LSTM:让远处的误差仍能教会网络记忆 [目录](README.md) · [下一篇](002-nnlm.md) **论文**:Sepp Hochreiter、Jürgen Schmidhuber,*Long Short-Term Memory*,1997,Neural Computation。[作者提供的原文 PDF](https://www.bioinf.jku.at/publications/older/2604.pdf)。本文讨论 1997 年原始结构;后来常见的遗忘门不属于这一初版。证据定位采用该 PDF 的章节,教学记号与原文记号有所简化。 ## 一分钟理解 一句话的前面给出一个条件,结尾才要求使用它,中间全是不相关内容。普通循环网络形式上可以把条件一直传下去,但训练时,结尾的误差信号往前传播,可能很快变小,无法告诉网络最初应该保存什么。LSTM 的核心不是笼统地“增加记忆”,而是为内部状态构造一条有利于误差长期传播的路径,再用可学习的门控制信息进入和离开。 作者在人工长时延任务上展示了学习优势,其中涉及超过 1000 步的时延。这个结果支持结构能处理特定长程信用分配问题,不等于它能精确记住任意长度、任意数量的自然语言事实。在长时延序列学习中,通过受保护的内部状态与门控,改善远程信号的可学习性,代价是更复杂的状态结构及仍然有限的存储容量。 ## 背景:能表示,不等于能学到 普通循环网络写成 $h_t=f(Wh_{t-1}+Ux_t)$。$x_t$ 是当前输入,$h_t$ 是循环状态。它可以递归依赖全部历史,但要训练早期输入对末端结果的影响,需要链式求导连续穿过许多变换。如果局部导数的尺度多数小于一,乘积就会衰减;多数大于一,又可能爆炸。 问题因此包含两个层次。表示层面问“是否存在一组参数可以保存信息”;优化层面问“实际梯度是否能找到它”。仅证明循环结构有表达能力,无法解释为什么随机初始化后训练失败。把学习率调大也不改变远程与近期梯度的相对比例,反而可能让近期信号过强。 原论文主要研究监督序列学习。输入是人工构造的符号或实数序列,输出是需要利用早期信息的预测或分类;反馈是预测误差。这里没有 RL 中的策略、环境奖励和 Critic。将 LSTM 放入语言模型或强化学习是后来的应用方式,不能倒过来把这些应用设定当作原论文实验。 ## 方法:保护一条存储路径 原始设计中的内部状态可以用以下教学式表达: $$ c_t=c_{t-1}+i_t\odot g_t,\qquad h_t=o_t\odot\phi$c_t$. $$ $c_t$ 是内部记忆,$i_t$ 是输入门,$g_t$ 是候选写入内容,$o_t$ 是输出门,$\odot$ 表示逐元素相乘。输入门决定当前内容是否应写入;输出门决定记忆是否应影响外部计算。原始算法还有特定连接与梯度处理,上式仅突出结构思想。 若暂时只看状态到自身的直接连接,导数是 1。无新内容写入时,状态可以原样保留,这就是 constant error carousel 的关键直觉。需要特别注意,“存在导数为 1 的路径”不意味着全网络所有梯度都恒定,也不意味着门的训练永不困难。其他计算路径、损失与输入分布仍然影响实际优化。 今天教材常写的 $c_t=f_t c_{t-1}+i_tg_t$ 加入了遗忘门。用它讲现代 LSTM 没有问题,但若讨论 1997 年的贡献,应说明版本差异。否则会把后来解决连续流重置和遗忘的问题,错误归给初版结构。 ```text 输入:监督序列 x[1:T]、目标 y、可训练门与候选变换 初始化内部状态 c、外部输出 h 对每个时间步 t: 根据当前输入及允许的循环连接计算输入门 i 计算候选内容 g c ← c + i * g # 原始恒等自连接的教学表示 计算输出门 o h ← o * activation(c) 根据任务读出预测,并与监督目标计算损失 按原始算法规定的梯度路径与截断规则更新参数 输出:能够选择写入、保持和读出的序列模型 ``` 数学上优化的仍是预测误差;机制上修改了梯度传播和状态访问;实验上观察的是成功学习次数、所需训练与长时延任务表现。三者不能混成“LSTM 直接优化记忆长度”。记忆长度是任务条件或行为表现,不是公式中单独最大化的量。 ## 实验设计与证据 | 项目 | 原论文范围及阅读要点 | |---|---| | 任务 | 第 5 节的人工长时延任务,含实值、噪声和符号模式 | | 数据 | 按任务规则生成;不是大型自然语言预训练语料 | | 对照 | BPTT、RTRL 等循环学习方法,以及论文讨论的其他方法 | | 指标 | 学习是否成功、训练工作量及可跨越的时延,按任务分别阅读 | | 预算 | 各实验单独给定;不能用一个现代 GPU 小时数概括 | | 重复与不确定性 | 关注第 5 节各任务的成功运行统计;不把单次成功视为平均可靠性 | **证据一,第 3 节误差传播分析。**作者展示普通循环路径上误差信号如何包含反复相乘的因子。它解释了优化困难的来源,但不是“所有普通 RNN 在所有任务上都会失败”的定理。 **证据二,第 4 节架构与附录 A.1。**门控和特殊内部连接给出了可执行的解决机制,而不仅是关于记忆的比喻。复现时要保留原版连接与梯度规则,若直接调用现代框架默认 LSTM,得到的是相关但不同的算法。 **证据三,第 5 节实验与第 6 节讨论。**人工任务提供关于长时延学习的受控证据,作者同时讨论适用特点。实验能够说明在这些构造中学习更容易,不能证明真实文本中的语义记忆、检索精度或语言生成质量。 这里最有价值的公平性问题,是任务是否真的要求长程记忆。如果中间输入本身泄露了答案,或者局部统计可以预测结果,模型并不需要保存早期条件。反过来,只有不可预测干扰而没有可学习标记,也可能让任务本身没有足够信息。一个好实验需要同时控制时延和信息位置。 ## 教学例子与贡献边界 构造一条序列:第一步给出一个数字,后面 99 步都是无关噪声,第 101 步要求输出第一步数字。理想门控在第一步写入,中间关闭输入,在最后打开输出。这个例子不是论文结果,而是用来区分“存储”“不被覆盖”和“按时取出”三个动作。 再把任务改成同时记住 100 个独立数字。即便每个数字都需要长期保持,固定维度状态的容量和读出方式也会成为瓶颈。由此可以理解为什么梯度传播改善不等于无限记忆。模型仍需要学习哪些信息值得保留,并解决多个事实相互干扰的问题。 真正的新意在于对长期信用分配作出结构性处理:不是单纯增加层数,而是让存储通路与输入输出变换部分分工。代价包括更多参数、顺序计算以及结构实现复杂性。本文的分析是,后来的注意力并非使这个问题消失,而是通过直接访问过去表示改变了信息路径和资源取舍。 理解本篇需要五个概念:循环状态是跨步传递的向量;BPTT 是展开时间后的反向传播;梯度消失是远程导数尺度衰减;门是可学习的乘性开关;信用分配是判断早期事件怎样影响后期误差。能区分这五项,才不会把“长短期记忆”只记成一个名称。 | 原有问题 | 作者改动 | 为什么可能有效 | 实验证据 | 代价与局限 | |---|---|---|---|---| | 普通循环路径上的梯度连乘使长时延信用分配困难 | 引入记忆单元、受保护的内部误差路径与输入/输出门 | 让信息保留和读写分开,减少重要误差信号沿内部路径衰减 | §3误差分析、§4结构、§5人工长时延任务 | 原版没有现代遗忘门;人工任务证据不能直接代表真实语言能力,连接与梯度规则影响复现 | ## 自测与参考答案 **1. 为什么把普通 RNN 的学习率提高十倍,不能根本解决长时延梯度消失?** 学习率同时放大近期和远程更新,而时间链上的相对衰减仍存在。若远程梯度比近期小很多,统一放大无法恢复合适比例,近期梯度还可能先造成不稳定。结构性改变针对的是传播路径,学习率针对的是整体更新尺度。 **2. 既然内部自连接导数为 1,是否说明 LSTM 不会梯度爆炸或遗忘?** 不是。这只描述特定直接路径,其他路径仍可放大误差;输入门持续写入会改变状态,多个内容也会干扰。原始结构与现代遗忘门版本还需要分开讨论。可靠记忆是结构、训练和任务共同产生的行为。 **3. 怎样设计实验,证明模型确实使用了早期信息?** 固定后半段噪声,仅改变第一步内容,检查输出是否随之改变;再删除或打乱第一步标记,观察表现是否下降。训练和测试使用不同延迟与噪声序列,并报告多次初始化。这样才能排除靠中间泄露信息或记忆训练样本完成任务的解释。