2026年4月19日

序列建模(RNN / LSTM / GRU / Transformer)

序列建模是处理"有顺序关系的数据"(文本、语音、时间序列、视频帧)的核心能力。演进路径是:

知识库深度学习deep-learningsequence-modelingrnnlstmtransformer

序列建模(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)时这是巨大优势。

最后记几个点

  1. RNN 的梯度消失来自 BPTT 每步乘 W_hh,长序列无法建模长依赖
  2. LSTM 用门控机制和线性记忆路径缓解梯度消失,但 O(n) 串行计算仍是瓶颈
  3. GRU 是 LSTM 的简化版,2/3 参数量,大多数任务效果接近
  4. Transformer 用 Self-Attention 直接建模任意距离关系,O(n²) 但并行化友好
  5. Multi-Head Attention 让不同 Head 关注不同的语义关系(主语、动词、指代等)
  6. 位置编码解决了 Attention 不感知位置的问题,RoPE 是当前主流(Llama 采用)
  7. NLP 和多模态领域 Transformer 一统天下,LSTM/GRU 在时间序列等特定场景仍有价值

跨库关联

本文件的 RNN/LSTM/GRU 部分是深度学习基础知识,Transformer 的 LLM 专项深入在 大模型知识库 中: