9.0 KiB
RNN → LSTM → GRU:循环神经网络发展史与技术原理总结
一、RNN(循环神经网络)
1.1 核心原理
RNN 的核心思想是引入循环结构,使网络能够"记住"之前的信息并将其用于当前时刻的计算。RNN 的隐藏状态 h_t 不仅取决于当前输入 $x_t$,还取决于上一时刻的隐藏状态 $h_{t-1}$:
h_t = f(W_{xh} \cdot x_t + W_{hh} \cdot h_{t-1} + b_h)
其中 $W_{xh}$、W_{hh} 为共享权重矩阵,f 通常为 \tanh 或 \text{ReLU} 激活函数。
这种设计天然适合序列数据(文本、时间序列、语音等),因为它建模了数据的时序依赖关系。
1.2 BPTT(反向传播通过时间)
RNN 的训练需要将网络沿时间步展开(unfold),形成一个深度前馈网络,然后使用标准反向传播算法。由于每个时间步共享权重矩阵 $W$,误差需要从最后一个时间步一路传回第一个时间步——这就是 BPTT(Backpropagation Through Time)。
1.3 梯度消失与梯度爆炸
BPTT 面临一个根本性问题:梯度需要沿时间链回传,涉及对同一权重矩阵 W 的反复链式求导:
\frac{\partial h_t}{\partial h_{t-k}} = \prod_{i=k+1}^{t} \frac{\partial h_i}{\partial h_{i-1}} = \prod_{i=k+1}^{t} W^T \cdot \text{diag}(f'(h_{i-1}))
- 若
|W|的特征值 > 1:梯度指数增长 → 梯度爆炸,权重大幅震荡,训练发散 - 若
|W|的特征值 < 1:梯度指数衰减 → 梯度消失,早期时间步的梯度接近零,网络无法学习长期依赖
直观地说,RNN 在处理长序列时,早期的信息被后期信息稀释或覆盖,导致"记不住太早的事情"。
1.4 RNN 的发展时间线
| 时间 | 里程碑事件 |
|---|---|
| 1982 | John Hopfield(加州理工)发明 Hopfield Network,最早的 RNN 雏形,用于组合优化问题 |
| 1986 | Michael Jordan 定义 Recurrent 概念,提出 Jordan Network |
| 1990 | Jeffrey Elman 简化 Jordan Network,使用 BP 算法训练,形成现代最简 RNN 结构 |
| 1990s | RNN 因梯度消失/爆炸问题训练困难,应用受限 |
二、LSTM(长短期记忆网络)
2.1 解决了什么问题
LSTM 由 Sepp Hochreiter 和 Jürgen Schmidhuber 于 1997 年在论文*"Long Short-Term Memory"*中提出,核心目标是解决标准 RNN 的长期依赖问题——即让网络能够记住很久以前的信息,同时避免梯度消失。
2.2 核心原理:门控机制 + 细胞状态
LSTM 引入了细胞状态(Cell State) C_t 作为信息传递的"高速公路",以及三个门控单元来控制信息流动:
遗忘门(Forget Gate)f_t
决定上一时刻的细胞状态 C_{t-1} 中有多少信息应该被"遗忘":
f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)
输出值在 [0, 1] 之间,0 表示完全遗忘,1 表示完全保留。
输入门(Input Gate)i_t + 候选记忆 \tilde{C}_t
决定当前输入中有多少新信息应该写入细胞状态:
i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) \\
\tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C)
细胞状态更新
将遗忘门和输入门结合起来更新细胞状态:
C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t
输出门(Output Gate)o_t
决定细胞状态中有多少信息输出为当前隐藏状态:
o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) \\
h_t = o_t \odot \tanh(C_t)
2.3 为什么 LSTM 能解决长期依赖
LSTM 解决梯度消失的关键在于细胞状态的加法更新机制(公式中的 + 号):
- 梯度可以沿
C_t路径几乎无损地反向传播,因为这条路径上没有反复的矩阵乘法和非线性激活 - 门控单元的值在 $[0,1]$,对梯度的缩放是可控的乘法(而非 RNN 中不受约束的矩阵连乘)
- 每个门都是数据驱动的(由 sigmoid 决定),网络自己学会在何时打开/关闭哪些门
2.4 LSTM 的发展
| 时间 | 里程碑事件 |
|---|---|
| 1997 | Hochreiter & Schmidhuber 提出 LSTM(原始版本) |
| 1997 | Mike Schuster 提出双向 RNN(Bi-RNN) |
| 1999 | Gers 等人加入窥视孔连接(Peephole Connection),进一步增强门控精度 |
| 2000s | LSTM 在语音识别、手写识别等任务上开始展现优势 |
| 2010s | 成为 NLP 领域序列建模的主流架构 |
三、GRU(门控循环单元)
3.1 在 LSTM 基础上的简化
GRU 由 Cho et al. 于 2014 年在论文*"Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation"*中提出,是对 LSTM 的一种工程简化,核心思想是:用更少的参数达到相近甚至更好的效果。
3.2 核心原理:两个门
GRU 合并了 LSTM 中的遗忘门和输入门,只保留两个门:
更新门(Update Gate)z_t
决定有多少过去的信息需要传递到未来——相当于 LSTM 中遗忘门 + 输入门的联合作用:
z_t = \sigma(W_z \cdot [h_{t-1}, x_t])
重置门(Reset Gate)r_t
决定有多少过去的信息需要被"忽略"(用于计算新的候选状态):
r_t = \sigma(W_r \cdot [h_{t-1}, x_t])
候选隐藏状态
\tilde{h}_t = \tanh(W \cdot [r_t \odot h_{t-1}, x_t])
最终隐藏状态更新
h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t
- 当
z_t \approx 1时:几乎完全保留旧状态(相当于 LSTM 的遗忘) - 当
z_t \approx 0时:几乎完全更新为新状态(相当于 LSTM 的输入)
3.3 与 LSTM 的关键对比
| 对比维度 | LSTM | GRU |
|---|---|---|
| 门数量 | 3个(遗忘门、输入门、输出门) | 2个(更新门、重置门) |
| 细胞状态 | 独立的 cell state C_t |
无独立 cell state,直接用隐藏状态 |
| 输出门 | 有,独立控制输出 | 无 |
| 窥视孔连接 | 可选(增强门控精度) | 无 |
| 参数数量 | 较多(12个权重矩阵) | 较少(9个权重矩阵) |
| 训练速度 | 较慢 | 较快(参数少约25-30%) |
| 表达能力 | 更强(更精细的控制) | 适中 |
| 适用场景 | 长序列、复杂依赖、需要精细控制 | 中短序列、计算资源受限、数据量较小 |
3.4 GRU 的优势
- 训练更快:参数更少,收敛速度通常快于 LSTM
- 小数据集表现好:参数少意味着过拟合风险低
- 与 LSTM 几乎等价:在许多任务上性能相当
- 结构更简洁:便于实现和调试
四、发展脉络总结
4.1 时间线总览
1982 Hopfield Network(最早的 RNN 雏形)
↓
1990 Elman RNN + BPTT(现代 RNN 基础)
↓
⚠️ 梯度消失/爆炸问题困扰学界
↓
1997 LSTM 提出(Hochreiter & Schmidhuber)
门控机制 + 细胞状态解决长期依赖
↓
1999 LSTM + Peephole Connection
↓
2014 GRU 提出(Cho et al.)
LSTM 的简化版本,参数更少
↓
2014 Seq2Seq + Attention(机器翻译突破)
↓
2015 Attention is All You Need(Transformer)
全新架构,完全替代 RNN 在 NLP 的地位
↓
2018- BERT、GPT、预训练模型时代
4.2 为什么要发展这些模型
| 问题 | 解决方案 |
|---|---|
| 标准 RNN 无法处理长序列 | LSTM(门控机制 + 细胞状态) |
| LSTM 参数量大、训练慢 | GRU(简化门控结构) |
| RNN 梯度消失无法学习远程依赖 | LSTM/GRU 的加法路径保证梯度流 |
| 序列并行计算需求 | Transformer(Self-Attention 替代 RNN) |
4.3 当前地位
- LSTM / GRU:在时间序列预测、语音识别、音乐生成、实时流处理等场景仍是常用选择,尤其在计算资源受限或需要流式处理的场景中比 Transformer 更高效。
- Transformer:在大多数 NLP 任务上占据主导地位,因其并行计算能力强、长期依赖建模更直接。
- 演进趋势:RNN → LSTM/GRU → Transformer 是序列建模的主流演进路径,但 RNN 系列并未消亡,在特定垂直场景(嵌入式、低延迟、工业 IoT)仍有生命力。
五、核心原理对比一览
数学公式对照
| 组件 | RNN | LSTM | GRU |
|---|---|---|---|
| 隐藏状态更新 | h_t = f(W[x_t,h_{t-1}]) |
h_t = o_t \odot \tanh(C_t) |
h_t = (1-z_t)h_{t-1} + z_t\tilde{h}_t |
| 梯度传播路径 | 反复矩阵乘法(不稳定) | 细胞状态加法路径(稳定) | 加法路径(稳定) |
| 长期信息保留 | ❌ 差 | ✅ 好 | ✅ 好 |
| 短期信息更新 | ✅ 好 | ✅ 好 | ✅ 好 |
| 门控机制 | 无 | 3个门 | 2个门 |
| 参数复杂度 | 低 | 高 | 中 |
参考来源:本总结综合了维基百科、华为云、知乎、CSDN、D2L.ai、Den
ny Britz 博客等多个来源的技术内容整理而成。
文档目的:系统梳理 RNN → LSTM → GRU 的技术发展脉络,为深度学习序列建模提供清晰的学习参考。