LSTM 结构图

拆开当前时间步

记忆通路 c当前输出 h输入与门的计算点图中模块查看 · 拖动平移 · 滚轮缩放

再看时间上的传递

输入一个个来,记忆接着往前走。

时间向右 → 这些是同一个 LSTM 单元在不同时刻的展开,共享参数;上方传记忆 c,下方传输出 h。

教学演示:聚焦一个记忆分量,使用预设权重进行标准 LSTM 计算,显示值已四舍五入。输入文字是读图标签,并非模型理解了这些文字。实际网络有许多记忆分量并行工作。

再亲手试一试

关掉输出,记忆也会消失吗?

先试“暂不输出”,再试“全部忘掉”。观察右侧两条线是否一起变化。

门的开度通常由当前输入与上一时刻输出共同计算,训练学习的是这些计算中的参数。

留下的记忆,与此刻的输出

━ 记忆 c━ 输出 h

当前记忆 c
当前输出 h
把图接回真实网络

记住这三个区别,就抓住了 LSTM。

01 / 两种状态

记忆 c ≠ 当前输出 h

c 是沿时间传递的内部记忆;h 是由当前记忆生成的输出特征,也会参与下一步门的计算。输出门关小,不等于直接清空 c。

02 / 连续控制

门是比例,不只是开或关

门通常给出 0~1 之间的数。遗忘门回答“旧内容保留多少”,输入门回答“新内容写入多少”;候选内容本身则可以是正数或负数。

03 / 有条件的保留

能保留更久,也会遗忘

当遗忘门接近 1、输入门接近 0 时,旧内容较容易沿记忆通路保留。能记多久取决于门值、参数和任务,LSTM 并不保证无限记忆。

展开本步计算与演示设定

本页展示单层、单向、无窥孔连接的一个标量 LSTM。三个门使用 sigmoid,候选内容和输出前的压缩使用 tanh;所有时间步使用同一套权重。手动开度属于教学干预,不是重新训练,后续状态会据此重新计算。

普通 RNN 也可以学习时间依赖,不能概括成“每步固定忘掉一半”。LSTM 的特点是增加单独的记忆通路和门控更新,让跨时间的信息保留更容易被调节。

结构依据:PyTorch LSTM 文档 ↗ · LSTM 原始论文(1997)↗。本页采用含遗忘门的常见现代结构,不能将所有细节归于 1997 年原版。

LSTM 每一步都在做同一件事:选择保留旧内容,选择写入新内容,再选择输出多少。

文字版:LSTM 记忆实验室在做什么

LSTM 是为了让网络「记得住很久以前的事」而设计的。它的核心是一条贯穿时间的记忆通路,加上三道闸门:遗忘门决定旧记忆保留多少,输入门决定新内容写进去多少,输出门决定这一步向外吐出多少。这一页把每道门的开度都做成了可以看的数字。

画面上正在发生什么

上面那条横贯的线是记忆通路 c,下面那条是输出 h。每个时间步里,当前输入和上一步的输出被合在一起,同时送给四个计算模块:三道门和一份候选内容。注意页面的提示——三道门是并列算出来的,不是串联的,图里拆成几步只是为了看清楚。

新记忆的构成是两部分相加:旧记忆乘以遗忘门的开度,加上候选内容乘以输入门的开度。把遗忘门调到接近 0,之前记住的东西一步之内就没了;调到接近 1 而输入门接近 0,记忆就原封不动地往下传。切换三种情境(记住再取用、旧线索换新的、什么时候才算忘掉),能看到同一套机制在不同任务下的门开度完全不同。

什么时候它会骗你

  • 门的开度是学出来的,不是设定的。这一页为了演示使用了预设权重,真实的 LSTM 里三道门的开度由参数决定,而参数是训练出来的。门「应该」什么时候开,没人能手工指定。
  • 记忆不会整条穿过输出门。页面特意标了这一点:记忆通路会继续往下一个时间步传,输出门只控制向外(向 h)分出的那一支。把两者混为一谈是理解 LSTM 时最常见的错误。
  • LSTM 缓解了梯度消失,不是消灭了它。记忆通路上的加法结构让梯度能较好地回传,但序列长到几百上千步时依然会衰减。这也是注意力机制后来取代它的原因之一。

常见问题

LSTM 和普通 RNN 的区别是什么?
普通 RNN 每一步都把隐状态整个重写一遍,信息经过多步连乘后迅速衰减,学不到长距离依赖。LSTM 增加了一条以加法为主的记忆通路和三道门,让信息可以近乎无损地穿过许多时间步,梯度也因此更容易回传。
三道门分别管什么?
遗忘门决定上一步的记忆保留多少比例;输入门决定这一步新算出的候选内容写入多少;输出门决定当前记忆里有多少被读出来作为这一步的输出。三者都是 0 到 1 之间的开度,由当前输入和上一步输出共同算出。
现在还需要学 LSTM 吗?
需要。虽然大模型领域已由 Transformer 主导,LSTM 在样本量不大、序列较短、算力受限的工业与科研场景仍在广泛使用,而且「门控」这个思路是理解后续各种序列模型的基础。

本页聚焦单个记忆分量,使用预设权重按标准 LSTM 公式计算,显示值经过四舍五入。

作者与维护:覃秉丰 · 关于覃秉丰 · 引用本页讲解

继续学习