Transformer 架构:Self-Attention 与位置编码的数学本质
一、算法概览
Transformer 是一种完全基于 Self-Attention(自注意力)机制 的序列建模架构,由 Vaswani 等人在 2017 年提出。它彻底抛弃了 RNN/LSTM 的循环结构,通过并行计算所有位置之间的关系,实现了对长距离依赖的高效建模。其核心思想可以浓缩为一句话:让序列中的每个 token 都能直接"看到"所有其他 token,并根据相关性动态加权聚合信息。
二、历史背景与问题起源
在 Transformer 出现之前,NLP 领域由 RNN 及其变体(LSTM、GRU)主导。RNN 的致命缺陷有三个:
- 串行计算瓶颈:第
t步必须等第t-1步完成,无法并行,训练慢。 - 长距离梯度消失:即使 LSTM 加了门控机制,超过 50 步的依赖关系仍然难以捕捉。
- 信息路径长度:两个距离为
n的 token 需要经过 O(n) 步才能交互。
2014-2015 年,Bahdanau 等人提出 Attention 机制用于 Seq2Seq,但本质上仍是 RNN 的"外挂"。Transformer 的突破在于:Attention 不再是辅助,而是主角。它用 O(1) 的路径长度替代了 O(n),使得任意两个位置的交互都是"一步直达"。
三、核心原理深入
3.1 Self-Attention 的数学本质
Self-Attention 的核心是一个 可学习的软检索(Soft Retrieval) 过程。想象你在一间图书馆里找书:
- 你心中有一个 查询意图(Query,即 Q)
- 每本书有一个 标签描述(Key,即 K)
- 每本书的 实际内容(Value,即 V)
你做的不是"挑一本",而是根据查询与所有标签的匹配度,对所有书的内容做加权平均。
数学上,对于输入序列 X ∈ R^(n×d):
第一步:线性投影
Q = X · W_Q
K = X · W_K
V = X · W_V
第二步:计算注意力权重并聚合
Attention(Q, K, V) = softmax( Q·K^T / √d_k ) · V
其中 d_k 是 Key 向量的维度,n 是序列长度。
三个关键细节值得深究:
① 为什么除以 √d_k?
点积 Q·K^T 的方差会随着维度 d_k 线性增长。当 d_k 很大时(如 64 或 128),点积值会变得很大,导致 softmax 输出趋向于 one-hot 分布——梯度趋近于零,模型无法学习。除以 √d_k 将方差控制为 1,保持梯度健康。
直观理解:假设 Q 和 K 的每个分量都是均值为 0、方差为 1 的独立随机变量,则点积
Q·K的方差 =d_k。除以√d_k后,方差回到 1,softmax 输入落在"温和区"。
② Multi-Head 的意义
单头 Attention 只能捕获一种"关系模式"。Multi-Head Attention 将 Q, K, V 分别投影到 h 个子空间,每个头学习不同的注意力模式:
MultiHead(Q, K, V) = Concat(head_1, head_2, ..., head_h) · W_O
其中:
head_i = Attention(Q·W_Qi, K·W_Ki, V·W_Vi)
类比:一个评审团中,有人关注语法,有人关注逻辑,有人关注情感——最后综合所有人的意见。这就是 Multi-Head 的本质:多角度并行建模。
③ 计算复杂度
Self-Attention 的复杂度是 O(n²·d),这也是它的最大软肋——序列长度翻倍,计算量翻四倍。后续的 Flash Attention、Sparse Attention 等优化技术正是为了解决这个问题。
3.2 位置编码(Positional Encoding)
因为 Self-Attention 是置换不变的(打乱输入顺序,输出相同),必须显式注入位置信息。原始论文使用正弦位置编码:
对于位置 pos 和维度索引 i:
PE(pos, 2i) = sin( pos / 10000^(2i/d) )
PE(pos, 2i+1) = cos( pos / 10000^(2i/d) )
这个设计的精妙之处在于:对于任意固定的偏移 k,PE(pos+k) 可以表示为 PE(pos) 的线性变换。这意味着模型理论上可以学会"相对位置"的概念。
现代大模型(如 LLaMA)普遍改用 RoPE(旋转位置编码),通过旋转矩阵编码相对位置,效果更优。
四、架构流程
Input Tokens → Embedding + Positional Encoding
│
▼
┌─────────────────────────────────────┐
│ Encoder Block (×N) │
│ ┌─────────────────────────────────┐│
│ │ Multi-Head Self-Attention ││
│ │ ↓ (Add & Norm) ││
│ │ Feed-Forward Network (FFN) ││
│ │ ↓ (Add & Norm) ││
│ └─────────────────────────────────┘│
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Decoder Block (×N) │
│ ┌─────────────────────────────────┐│
│ │ Masked Multi-Head Self-Attn ││
│ │ Cross-Attention (Encoder→Dec) ││
│ │ Feed-Forward Network ││
│ └─────────────────────────────────┘│
└─────────────────────────────────────┘
│
▼
Linear + Softmax → Output
关键组件:
- Add & Norm:残差连接 + Layer Normalization,解决深层网络的梯度传播问题
- FFN:两个线性变换 + 一个激活函数(通常是 ReLU/GELU),即
FFN(x) = W₂ · σ(W₁x + b₁) + b₂ - Masked Self-Attention:Decoder 中防止看到未来 token(自回归生成的要求),通过将注意力矩阵的上三角部分置为
-∞实现
五、与其他算法的关系
Transformer 是大模型技术栈的地基:
| 层级 | 代表技术 | 与 Transformer 的关系 |
|---|---|---|
| 架构变体 | GPT(Decoder-only)、BERT(Encoder-only)、T5(Encoder-Decoder) | 直接继承,裁剪不同子结构 |
| 高效推理 | Flash Attention、KV Cache、Speculative Decoding | 对 Attention 的工程优化 |
| 参数高效微调 | LoRA、QLoRA | 冻结 Transformer 主体,只训练低秩适配器 |
| 强化学习对齐 | RLHF、DPO、GRPO | 在预训练好的 Transformer 上做偏好对齐 |
| 稀疏化 | MoE(Mixture of Experts) | 将 FFN 替换为稀疏专家网络 |
可以说,理解 Transformer 是理解一切大模型技术的先决条件。
六、关键论文
| # | 论文 | 要点 |
|---|---|---|
| 1 | "Attention Is All You Need" — Vaswani et al., NeurIPS 2017 | 提出 Transformer 架构的原始论文,引用量已超 10 万次 |
| 2 | "Neural Machine Translation by Jointly Learning to Align and Translate" — Bahdanau et al., ICLR 2015 | 首次在 Seq2Seq 中引入 Attention 机制,是 Transformer 的前置工作 |
| 3 | "RoFormer: Enhanced Transformer with Rotary Position Embedding" — Su et al., 2021 | 提出 RoPE,已成为现代大模型(LLaMA、Qwen、DeepSeek)的位置编码标配 |
七、实践思考
三个常见理解误区:
| 误区 | 正解 |
|---|---|
| ❌ "Self-Attention 能自动学到位置关系" | ✅ 没有位置编码的 Self-Attention 是置换不变的,完全不知道词序 |
| ❌ "Multi-Head 就是把 Attention 算多次取平均" | ✅ 每个头在不同子空间独立计算,最后拼接而非平均 |
| ❌ "除以 √d_k 只是经验技巧" | ✅ 它有严格的方差控制原理:不除会导致 softmax 饱和、梯度消失 |