1. 前言
前面我们已经学了:
RNN
RNN 从零开始实现
RNN 简洁实现
GRU
GRU 代码
到这里,你应该已经很清楚一个主线:
基础 RNN 能处理序列,但长期依赖能力弱;门控机制是改进方向。
GRU 已经通过:
更新门
重置门
让模型具备了更强的记忆管理能力。
但在循环神经网络的发展中,另一个更经典、影响更深远的模型是:
LSTM(Long Short-Term Memory,长短期记忆网络)
LSTM 可以说是循环神经网络里最著名的结构之一。
它的核心目标和 GRU 一样,都是为了解决:
长期依赖问题
但它采用了比 GRU 更完整、更细致的记忆控制机制。
2. 为什么还需要 LSTM
你可能会问:
既然已经有 GRU 了,为什么还要学 LSTM?
原因很简单:
2.1 LSTM 是历史上最经典的门控循环结构
很多关于序列建模的基础讨论,几乎都绕不开 LSTM。
2.2 它对“记忆”的建模更显式
GRU 只有一个隐藏状态;
而 LSTM 单独引入了一个记忆单元,专门负责长期信息保存。
2.3 它在很多任务中效果非常强
尤其在 Transformer 彻底普及之前,LSTM 几乎是 NLP、语音、时间序列里的主力模型之一。
所以,学 LSTM 不只是为了多记一个模型名,
而是为了真正理解:
循环网络怎样更系统地管理长期记忆。
3. LSTM 的名字是什么意思
LSTM 的全称是:
Long Short-Term Memory
中文常翻译为:
长短期记忆网络
这个名字本身就很有意思。
它强调的是:
Short-Term:短期信息
Long-Term:长期信息
Memory:记忆能力
也就是说,LSTM 的设计目标不是只看眼前几步,
而是希望模型既能处理当前局部信息,又能把重要信息长期保留下来。
4. LSTM 和 GRU 的核心区别
GRU 的核心思想是:
通过门控控制一个隐藏状态的更新。
而 LSTM 更进一步,它把“状态”拆成了两部分:
4.1 隐藏状态H_t
用于当前时刻输出和短期表征。
4.2 记忆单元C_t
用于更稳定地保存长期信息。
所以,LSTM 相比 GRU 最本质的区别就是:
它单独维护了一条“记忆通道”。
这条记忆通道让长期信息更容易跨时间步流动。
5. 为什么要单独引入记忆单元
基础 RNN 和 GRU 都是把信息压在隐藏状态里。
但隐藏状态既要负责:
当前输出
当前状态更新
过去信息承载
任务比较重。
LSTM 的想法非常聪明:
干脆专门留一条通道,用来存长期记忆。
这样一来:
隐藏状态可以更偏向当前输出
记忆单元可以更偏向长期信息保存
这让信息流动变得更清晰,也更容易训练。
6. LSTM 有哪几个门
LSTM 比 GRU 多一个门,也多一个记忆单元。
它通常有三个核心门:
输入门(input gate)
遗忘门(forget gate)
输出门(output gate)
再加上一个:
候选记忆单元
于是整个 LSTM 的信息控制比 GRU 更细。
你可以先粗略理解成:
遗忘门
决定旧记忆丢掉多少。
输入门
决定新信息写入多少。
输出门
决定当前时刻从记忆中读出多少给隐藏状态。
这套结构已经很像一个真正“会读写记忆”的系统了。
7. 遗忘门是什么
遗忘门通常记作:
F_t它的作用是:
决定上一时刻记忆单元
C_{t-1}中,有多少内容要保留到当前时刻。
如果遗忘门接近 1,说明:
旧记忆大部分保留
如果接近 0,说明:
旧记忆大部分被忘掉
所以遗忘门解决的是:
过去的记忆,到底还值不值得继续留着。
8. 输入门是什么
输入门通常记作:
I_t它的作用是:
决定当前时刻的新候选信息,有多少应该写入记忆单元。
也就是说,输入门在控制:
新信息要不要写
写多少
如果输入门很小,说明当前输入带来的新内容不太重要;
如果很大,说明模型认为当前信息值得写进长期记忆。
所以输入门解决的是:
当前信息是否足够重要,值得存下来。
9. 输出门是什么
输出门通常记作:
O_t它的作用是:
决定当前时刻从记忆单元中“读出”多少信息,作为隐藏状态输出。
记忆单元C_t不会直接原封不动地暴露给外部,
而是先经过一个非线性变换,再由输出门控制读出多少。
所以输出门本质上解决的是:
当前时刻,该从记忆里拿多少信息出来给外界看。
10. 候选记忆单元是什么
除了三个门之外,LSTM 还会计算一个候选记忆内容,通常记作:
\tilde{C}_t它表示:
根据当前输入和上一隐藏状态生成的一份“候选新记忆”
然后这份候选记忆不会直接写进C_t,
而是要先经过输入门筛选。
所以你可以理解为:
\tilde{C}_t是“待写入的记忆草稿”I_t决定这份草稿真正写进去多少
11. LSTM 的核心公式
LSTM 的经典公式通常写成这样。
遗忘门
F_t = σ(X_t W_xf + H_{t-1} W_hf + b_f)输入门
I_t = σ(X_t W_xi + H_{t-1} W_hi + b_i)输出门
O_t = σ(X_t W_xo + H_{t-1} W_ho + b_o)候选记忆
\tilde{C}_t = tanh(X_t W_xc + H_{t-1} W_hc + b_c)当前记忆单元
C_t = F_t ⊙ C_{t-1} + I_t ⊙ \tilde{C}_t当前隐藏状态
H_t = O_t ⊙ tanh(C_t)这几条公式看起来多,但逻辑其实非常清楚。
12. 记忆单元更新公式怎么理解
最关键的一条是:
C_t = F_t ⊙ C_{t-1} + I_t ⊙ \tilde{C}_t它表示:
当前记忆 = 保留下来的旧记忆 + 写入的新记忆
你可以把它拆开理解:
第一部分:保留旧记忆
F_t ⊙ C_{t-1}遗忘门决定旧记忆留下多少。
第二部分:写入新记忆
I_t ⊙ \tilde{C}_t输入门决定新候选记忆写入多少。
这条式子非常漂亮,因为它让“忘”和“记”变成了两个明确、可控的动作。
13. 隐藏状态更新公式怎么理解
再看:
H_t = O_t ⊙ tanh(C_t)它表示:
先对当前记忆单元
C_t做tanh再通过输出门筛选
得到当前隐藏状态
H_t
所以隐藏状态并不是记忆本身,
而是:
从记忆中读出来的一部分内容
这让 LSTM 的结构层次非常清晰:
C_t更像“长期记忆仓库”H_t更像“当前对外输出的工作记忆”
14. 为什么 LSTM 比 RNN 更适合长期依赖
LSTM 之所以经典,关键就在记忆单元这条路径:
C_t = F_t ⊙ C_{t-1} + I_t ⊙ \tilde{C}_t你会发现,旧记忆C_{t-1}可以在遗忘门控制下直接流向C_t,
而不必每一步都被强行卷进一次复杂非线性更新。
这意味着:
长期信息可以更平滑地跨很多时间步传播。
这比基础 RNN 那种“每一步都混在一起重算”的方式,更容易保留远距离依赖。
15. LSTM 和 GRU 的区别怎么记
这部分特别容易混,所以一定要讲清楚。
GRU
只有一个隐藏状态
两个门:更新门、重置门
结构相对简洁
LSTM
有两个状态:隐藏状态
H_t和记忆单元C_t三个门:输入门、遗忘门、输出门
结构更细、更复杂
可以简单记成:
GRU 是“简化版门控记忆”,LSTM 是“完整版门控记忆系统”。
16. 为什么有人更喜欢 GRU,有人更喜欢 LSTM
因为两者各有特点。
GRU 的优点
参数更少
结构更简洁
训练和推理更轻量
LSTM 的优点
记忆控制更细致
长期依赖建模通常更经典
理论表达更完整
所以实际使用中:
有时 GRU 就够用了
有时 LSTM 效果更稳
也常常需要实验比较
17. LSTM 在语言模型里怎么理解
如果把 LSTM 放回语言模型场景中,它在做的事情可以理解为:
一边读当前字符/词,一边决定:哪些上下文信息要长期保留,哪些应该丢掉,哪些当前应该拿出来参与预测。
例如句子中:
主语信息可能要保留很久
某些局部修饰词影响很短
某些长距离依赖需要跨越很多时间步
LSTM 通过:
遗忘门
输入门
输出门
来自动管理这些信息。
所以它比基础 RNN 更像一个“真正有记忆策略”的模型。
18. 为什么说 LSTM 很像一个可读写记忆系统
这是理解 LSTM 的一个很好比喻。
你可以把记忆单元C_t看成一个记事本:
遗忘门
决定旧笔记擦掉多少。
输入门
决定新内容写进去多少。
输出门
决定当前时刻翻出来给别人看的有多少。
这样一看,LSTM 就不再只是“复杂公式”,
而像一个真正会管理记忆的系统。
这也是它名字叫Long Short-Term Memory的原因。
19. 李沐这一节最想让你理解什么
这一节最重要的,不是死背所有门的名字,
而是把主线抓住:
第一,LSTM 也是为了解决长期依赖问题
和 GRU 的目标一致。
第二,LSTM 核心在于引入了独立记忆单元C_t
这让长期信息流动更稳定。
第三,三个门分别负责“忘、写、读”
这让记忆管理更细致。
第四,LSTM 比 GRU 更复杂,但也更经典
所以后面很多序列模型讨论都离不开它。
20. 本节总结
这一节我们学习了 LSTM,核心内容可以总结为以下几点。
20.1 LSTM 是经典的门控循环神经网络
它主要为了解决基础 RNN 的长期依赖问题。
20.2 LSTM 引入了独立的记忆单元C_t
这使长期信息更容易跨时间步保留。
20.3 LSTM 有三个核心门
遗忘门
输入门
输出门
20.4 当前记忆由旧记忆和新候选记忆共同决定
遗忘门控制旧记忆保留多少,输入门控制新内容写入多少。
20.5 当前隐藏状态由输出门从记忆单元中读出
所以H_t和C_t职责不同。
21. 学习感悟
LSTM 这一节非常经典,因为它把“记忆”这件事做得几乎像一个小型操作系统。
基础 RNN 更像是“状态自然流动”;
GRU 更像是“给状态流动加两个阀门”;
而 LSTM 则进一步把记忆分成:
存储
写入
擦除
读取
这让它的记忆管理第一次变得真正系统化。
也正因为如此,LSTM 才会在很长一段时间里,成为序列建模的代表模型之一。