一、为什么需要 LSTM?
因为普通 RNN 虽然可以通过 Hidden State 保存过去的信息,但是当序列很长时,早期信息很容易在多次计算和反向传播中逐渐丢失,因此 RNN 很难处理长期依赖。
增加一条专门的长期记忆通道 Cell State,并通过门控机制决定信息应该保留、删除还是输出。
RNN有记忆,但是很容易忘记很久之前的信息,所以LSTM出来了,专门管理记忆。
二、RNN 存在的问题
所有的历史信息都挤在hidden state里面,序列很长时,信息很容易被新的信息覆盖或者逐渐削弱。

过去记忆
↓
hₜ₋₁
+
当前输入
↓
RNN
↓
hₜ
三、LSTM 做了什么?
LSTM主要增加了Cell State(Ct),可以理解为一条专门用来保存长期信息的"记忆通道"。同时保留ht作为当前时刻对外输出的状态。
Cₜ = 长期记忆
hₜ = 当前状态 / 当前输出
四、为什么要搞两个状态?
可以理解为:
C:我的长期笔记
h:我现在正在说什么
五、LSTM 最核心的设计:三个门
为什么叫"门"?
这些gate本质是一个0~1 之间的控制器,0可以理解为完全不让信息通过,1反之,它们之间的数值代表这相应的范围。
为什么使用 Sigmoid?

它的输出范围:0--1,正好适合做们。
第一扇门:Forget Gate

干什么的?
决定旧的 Cell State 中哪些信息应该保留,哪些信息应该忘掉。
我们通过一个例子来解释:
当作长期笔记
Cₜ₋₁:
姓名:小明
年龄:20
住址:北京
天气:晴
现在:小明搬到了上海
那么以前的住址应该忘掉,forget gate就是再判断每次是否应该保留
第二扇门:Input Gate
干什么的?
决定当前输入产生的新信息中,哪些应该写入长期记忆 Cell State。
Input Gate(决定写多少)

Candidate Memory(决定写什么)

第三扇门:Output Gate
干什么?
决定当前 Cell State 中哪些信息应该暴露出来,形成当前的 Hidden State。


大概流程:
Cₜ
↓
Output Gate
↓
hₜ
六、现在看 LSTM 的完整流程
当前输入 xₜ
│
↓
┌─────────────┐
│ Forget Gate │
└──────┬──────┘
↓
旧记忆 Cₜ₋₁ ──────→ 删除一部分
│
↓
┌─────────────┐
│ Input Gate │
└──────┬──────┘
↓
写入新信息
│
↓
Cₜ
│
↓
┌─────────────┐
│ Output Gate │
└──────┬──────┘
↓
hₜ
七、现在正式进入数学
forget gate

input gate

candidate memory

更新cell state

output gate

更新Hidden state

我们来手算一个极简 LSTM
旧记忆
Cₜ₋₁ = 0.8
│
↓
Forget Gate = 0.9
│
↓
0.8 × 0.9 = 0.72 (原来的长期记忆保存90%)
│
│
新信息
Candidate = 0.5
│
↓
Input Gate = 0.6
│
↓
0.5 × 0.6 = 0.3(当前新信息写入60%)
│
↓
0.72 + 0.3
↓
Cₜ = 1.02(新的长期记忆)
│
↓
Output Gate = 0.7
↓
hₜ ≈ 0.54
八、LSTM 为什么比普通 RNN 更容易处理长期依赖?
因为 LSTM 有一条专门的 Cell State,并且 Cell State 的更新主要通过加法和门控完成,使长期信息能够更直接地沿着这条通道传播,从而比普通 RNN 更容易保留长期信息。
九、LSTM 和 RNN 的区别
| RNN | LSTM | |
|---|---|---|
| Hidden State | ✅ | ✅ |
| Cell State | ❌ | ✅ |
| Forget Gate | ❌ | ✅ |
| Input Gate | ❌ | ✅ |
| Output Gate | ❌ | ✅ |
| 长期依赖 | 较弱 | 更强 |
| 结构 | 简单 | 更复杂 |
| 可以理解为: |
RNN:
一个记忆状态
↓
容易忘
LSTM:
长期记忆 C
+
当前状态 h
+
三个 Gate
↓
更会管理记忆
十、LSTM 的真正核心
LSTM 的核心思想是让网络能够主动控制信息的流入、保留和输出。千万不要以为它有三个们,所以叫做LSTM