序列建模(RNN / LSTM / GRU / Transformer)
先把结论放前面
序列建模是处理"有顺序关系的数据"(文本、语音、时间序列、视频帧)的核心能力。演进路径是:
- RNN → 能处理序列,但梯度消失严重,无法建模长依赖
- LSTM / GRU → 引入门控机制,部分解决梯度消失,但 O(n²) 复杂度和并行化困难是根本限制
- Transformer → Self-Attention 解决梯度消失,支持并行,O(n²) 但 n 短时效率极高
目前 NLP 和多模态领域 Transformer 已经一统天下。LSTM/GRU 在时间序列、语音处理等对顺序敏感且需要极长上下文的场景仍有价值。
RNN(循环神经网络)
核心结构
RNN 的核心是循环单元:每个时间步 t,隐藏状态 h_t 由当前输入 x_t 和上一时间步的隐藏状态 h_{t-1} 共同决定:
h_t = tanh(W_xh · x_t + W_hh · h_{t-1} + b_h)
y_t = W_hy · h_t + b_y
梯度消失问题
RNN 的反向传播通过时间展开(BPTT),每一步都乘以 W_hh(转移矩阵)。
当 W_hh 的特征值小于 1 时,梯度在时间维度上指数衰减:
∂L/∂W_xh = Σ_t ∂L/∂y_t × ∂y_t/∂h_t × ∂h_t/∂h_{t-1} × ... × ∂h_0/∂W_xh
长序列(t = 1000)时,远处时间步的梯度趋近于零,这就是梯度消失。导致 RNN 难以学习长距离依赖("The cat was drunk... it fell off the table" 中的 "it" 指代 "cat")。
LSTM(Long Short-Term Memory)
门控机制
LSTM 引入三个门(Gate)来控制信息流动:
- 遗忘门(Forget Gate):决定保留多少上一时刻的记忆
- 输入门(Input Gate):决定写入多少新信息
- 输出门(Output Gate):决定输出多少记忆
遗忘门: f_t = σ(W_f · [h_{t-1}, x_t] + b_f)
输入门: i_t = σ(W_i · [h_{t-1}, x_t] + b_i)
候选记忆: Ĉ_t = tanh(W_C · [h_{t-1}, x_t] + b_C)
输出门: o_t = σ(W_o · [h_{t-1}, x_t] + b_o)
记忆更新: C_t = f_t ⊙ C_{t-1} + i_t ⊙ Ĉ_t
隐藏状态: h_t = o_t ⊙ tanh(C_t)
为什么 LSTM 能缓解梯度消失
关键在于记忆单元 C_t 的传递路径是线性的(f_t ⊙ C_{t-1} + i_t ⊙ Ĉ_t)。
梯度可以在时间维度上沿着记忆单元传播,不经过激活函数和权重矩阵的连乘。只有遗忘门 f_t 接近 0 时才会梯度消失——可以通过调节遗忘门让网络主动选择保留长记忆。
Peephole Connection
LSTM 的一个变体:让门控直接看到记忆单元 C_{t-1},使门控决策更精确:
f_t = σ(W_f · [h_{t-1}, x_t, C_{t-1}] + b_f)
GRU(Gated Recurrent Unit)
简化设计
GRU 是 LSTM 的简化版,把三个门压缩成两个:
更新门: z_t = σ(W_z · [h_{t-1}, x_t])
重置门: r_t = σ(W_r · [h_{t-1}, x_t])
候选隐藏状态: ĥ_t = tanh(W · [r_t ⊙ h_{t-1}, x_t])
隐藏状态: h_t = (1 - z_t) ⊙ h_{t-1} + z_t ⊙ ĥ_t
- 更新门 z_t:类似 LSTM 的遗忘门 + 输入门,控制保留多少旧记忆、加入多少新记忆
- 重置门 r_t:控制遗忘多少旧隐藏状态
GRU vs LSTM:
- 参数量:GRU 约为 LSTM 的 2/3
- 效果:大多数任务上两者接近;LSTM 在超长序列(>1000 步)略优
- 工程建议:先试 GRU,效果差再换 LSTM
Transformer:Self-Attention
Self-Attention 的计算
Transformer 完全抛弃了循环结构,用 Self-Attention 替代:
Q = X · W_Q # Query(查询)
K = X · W_K # Key(键)
V = X · W_V # Value(值)
Attention(Q, K, V) = softmax(Q · K^T / √d_k) · V
为什么 Transformer 优于 RNN
| 维度 | RNN | Transformer |
|---|---|---|
| 长距离依赖 | 梯度消失,只能建模短依赖 | Attention 直接连接任意位置 |
| 并行化 | 必须按时间步序列化 | 全序列并行(矩阵乘法) |
| 计算复杂度 | O(n)(每步) | O(n²)(Attention 矩阵) |
| 梯度流 | 需要 BPTT | 无梯度消失(残差连接) |
O(n²) 的代价:n 是序列长度。n = 512 时 O(n²) = 262K;n = 64K 时 O(n²) = 4B。需要 FlashAttention 等优化。
Multi-Head Attention
多个 Attention Head 并行,各自关注不同的语义关系:
class MultiHeadAttention(nn.Module):
def __init__(self, d_model, num_heads):
self.head_dim = d_model // num_heads
self.W_Q = nn.Linear(d_model, d_model)
self.W_K = nn.Linear(d_model, d_model)
self.W_V = nn.Linear(d_model, d_model)
self.out_proj = nn.Linear(d_model, d_model)
def forward(self, x):
B, T, C = x.shape
Q = self.W_Q(x).view(B, T, self.num_heads, self.head_dim).transpose(1, 2)
# 同样的 K, V
attn = F.softmax(Q @ K.transpose(-2,-1) / sqrt(d_k), dim=-1)
return (attn @ V).transpose(1,2).contiguous().view(B, T, C)
Feed-Forward Network(FFN)
每个 Transformer Block 还有一个 FFN:
FFN(x) = max(0, x · W₁ + b₁) · W₂ + b₂
通常是两层的 MLP,hidden 维度是 d_model 的 4 倍。FFN 提供了非线性能力,是 Attention 之外的另一个重要模块。
Positional Encoding
Attention 本身不感知位置(Permutation Invariant)。注入位置信息:
Sinusoidal PE(原始 Transformer)
PE(pos, 2i) = sin(pos / 10000^(2i/d))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d))
不同频率的正弦波,让模型可以从位置编码中直接学习相对位置关系。
RoPE(Rotary Position Embedding)
Llama 采用的方案,把位置信息编码进 Q 和 K 的旋转:
# 对 q 和 k 的相邻维度做旋转变换,融入位置信息
# RoPE 天然满足相对位置关系,且不需要加在 Embedding 上
如果放到面试里怎么讲
"LSTM 是怎么缓解梯度消失的?"
梯度消失发生在 BPTT 过程中每一步都乘以转移矩阵。LSTM 的关键是记忆单元 C_t 的传递是线性路径(遗忘门 × 旧记忆 + 输入门 × 新记忆),梯度可以沿着这条线性路径传播,不经过激活函数。只有遗忘门 f_t 趋近 0 时才会梯度消失,网络可以主动调节。
"Transformer 为什么比 RNN 更适合长序列?"
RNN 的梯度消失让长距离依赖难以学习,因为远处梯度需要经过每一步的矩阵连乘。Transformer 的 Self-Attention 让任意两个位置直接连接(无中间步骤),梯度路径长度是 O(1)。代价是 O(n²) 的 Attention 矩阵,在序列长度较短(<1000)时这是巨大优势。
最后记几个点
- RNN 的梯度消失来自 BPTT 每步乘 W_hh,长序列无法建模长依赖
- LSTM 用门控机制和线性记忆路径缓解梯度消失,但 O(n) 串行计算仍是瓶颈
- GRU 是 LSTM 的简化版,2/3 参数量,大多数任务效果接近
- Transformer 用 Self-Attention 直接建模任意距离关系,O(n²) 但并行化友好
- Multi-Head Attention 让不同 Head 关注不同的语义关系(主语、动词、指代等)
- 位置编码解决了 Attention 不感知位置的问题,RoPE 是当前主流(Llama 采用)
- NLP 和多模态领域 Transformer 一统天下,LSTM/GRU 在时间序列等特定场景仍有价值
跨库关联
本文件的 RNN/LSTM/GRU 部分是深度学习基础知识,Transformer 的 LLM 专项深入在 大模型知识库 中:
- Transformer 详解 → Transformer
- 注意力机制 → 注意力机制
- 位置编码(RoPE/ALiBi)→ 位置编码
- 编码器 / 解码器架构取舍 → 编码器与解码器
- 长上下文与注意力优化 → 注意力优化前沿