大模型核心原理 / Transformer 架构深度剖析
CHAPTER 02 · TOPIC 02

Transformer 架构深度剖析

Transformer 是大模型时代一切的技术根基。2017 年 Google 发表的《Attention Is All You Need》提出了这个架构,彻底改变了 NLP 乃至整个深度学习领域的技术路线。本章将从数学原理到工程实现,逐层拆解 Transformer 的每一个组件。

一句话理解

Transformer 是大模型时代一切的技术根基。2017 年 Google 发表的《Attention Is All You Need》提出了这个架构,彻底改变了 NLP 乃至整个深度学习领域的技术路线。本章将从数学原理到工程实现,逐层拆解 Transformer 的每一个组件。

阅读前置

建议先阅读第 01 章

本文关注

Transformer 总体架构、自注意力机制(Self-Attention)深度解析、多头注意力(Multi-Head Attention)

所在知识层

技术地基 · 大模型核心原理

文章导航
主教学视觉Transformer 架构深度剖析 · 知识结构

点击图中节点可定位到对应正文。

核心主题关系与流向

引言

Transformer 是大模型时代一切的技术根基。2017 年 Google 发表的《Attention Is All You Need》提出了这个架构,彻底改变了 NLP 乃至整个深度学习领域的技术路线。本章将从数学原理到工程实现,逐层拆解 Transformer 的每一个组件。


1. Transformer 总体架构

1.1 三种变体

Transformer 有三种架构变体,分别适用于不同场景:

语义 SVG 重绘Transformer 架构深度剖析 · 结构 1

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

编码器 · (Encoder) · 双向注意力解码器 · (Decoder) · 因果注意力
查看原文结构
编码器-解码器(原始 Transformer)
┌────────────┐  ┌────────────┐
│  编码器     │→│  解码器     │→ 输出
│ (Encoder)  │  │ (Decoder)  │
│ 双向注意力  │  │ 因果注意力  │
└────────────┘  └────────────┘
应用:机器翻译、T5
语义 SVG 重绘Transformer 架构深度剖析 · 结构 2

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入 / 表示纯编码器(BERT 类)核心架构编码器输出(分类/表示)(Encoder)输出 / 应用双向注意力应用:文本分类、NER、语义搜索
查看原文结构
纯编码器(BERT 类)
┌────────────┐
│  编码器     │→ 输出(分类/表示)
│ (Encoder)  │
│ 双向注意力  │
└────────────┘
应用:文本分类、NER、语义搜索
语义 SVG 重绘Transformer 架构深度剖析 · 结构 3

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入 / 表示纯解码器(GPT 类)核心架构解码器输出(生成)(Decoder)输出 / 应用因果注意力应用:文本生成、对话、代码生成(当前主流 LLM)
查看原文结构
纯解码器(GPT 类)
┌────────────┐
│  解码器     │→ 输出(生成)
│ (Decoder)  │
│ 因果注意力  │
└────────────┘
应用:文本生成、对话、代码生成(当前主流 LLM)

为什么纯解码器成为主流:

  • 自回归生成天然适合对话和创作场景
  • 训练目标简单统一(next token prediction)
  • 随着规模增大,纯解码器模型展现了最强的通用能力
  • GPT 系列的成功验证了这一路线

1.2 解码器 Transformer 的整体结构

语义 SVG 重绘Transformer 架构深度剖析

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文输入文本 "Hello world"系统核心Tokenizertoken IDs: 15496, 995Token Embedding工具、结果与反馈向量序列: 0.12, -0.34, ... , …+ Positional Encoding
查看原文结构
输入文本 "Hello world"
       ↓
  [Tokenizer] → token IDs: [15496, 995]
       ↓
  [Token Embedding] → 向量序列: [[0.12, -0.34, ...], [0.56, 0.78, ...]]
       ↓
  [+ Positional Encoding] → 注入位置信息
       ↓
  ┌─ [Transformer Block × N] ─────────────────────┐
  │                                                 │
  │  ┌── Multi-Head Self-Attention ──┐             │
  │  │  Q, K, V 计算 → 注意力权重     │             │
  │  │  → 加权求和 → 多头拼接          │             │
  │  └───────────────────────────────┘             │
  │          ↓                                      │
  │  [+ Residual Connection + LayerNorm]           │
  │          ↓                                      │
  │  ┌── Feed-Forward Network ──────┐              │
  │  │  Linear → GELU/SwiGLU → Linear │            │
  │  └───────────────────────────────┘             │
  │          ↓                                      │
  │  [+ Residual Connection + LayerNorm]           │
  │                                                 │
  └─────────────────────────────────────────────────┘
       ↓
  [Output Projection] → 词汇表上的概率分布
       ↓
  [Softmax] → 选择下一个 token

2. 自注意力机制(Self-Attention)深度解析

2.1 直觉理解

自注意力的核心思想是:在处理序列中的每个位置时,让它能够"看到"并"关注"序列中的所有其他位置。

以句子"The cat sat on the mat"为例,当模型处理"sat"这个词时:

  • 它可能需要关注"cat"来理解"谁"坐了
  • 关注"on"来理解坐在"什么上面"
  • 关注"mat"来理解坐在"哪里"

注意力机制让模型能够自动学习这些依赖关系。

2.2 Q、K、V 的计算

自注意力使用三个矩阵来描述每个 token 的角色:

TEXT
对于输入序列中的每个 token,计算三个向量:

Q(Query,查询):这个 token 想"问"什么
K(Key,键):这个 token 能"提供"什么
V(Value,值):这个 token 的实际内容

计算方式:
Q = X × Wq    (X: 输入向量, Wq: 查询权重矩阵)
K = X × Wk    (Wk: 键权重矩阵)
V = X × Wv    (Wv: 值权重矩阵)

类比理解(图书馆检索):

  • Q = 你脑中的问题("我想找关于猫的书")
  • K = 每本书的标签/关键词
  • V = 每本书的实际内容
  • 注意力分数 = Q 和 K 的匹配程度 → 决定你更关注哪些书

2.3 注意力分数的计算(Scaled Dot-Product Attention)

TEXT
Attention(Q, K, V) = softmax(QK^T / √d_k) × V

步骤分解:

1. 计算原始注意力分数:
   Score = Q × K^T
   (每个 Q 与所有 K 做点积,得到 n×n 的注意力矩阵)

2. 缩放:
   Score = Score / √d_k
   (除以 √d_k 防止点积值过大导致 softmax 梯度消失)

3. Softmax 归一化:
   Weights = softmax(Score)
   (将分数转换为概率分布,每行和为 1)

4. 加权求和:
   Output = Weights × V
   (用注意力权重对 V 进行加权求和)

数学细节:

语义 SVG 重绘Transformer 架构深度剖析

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

QK^T: n × n 矩阵每行是一个 token 对所有 tok…softmax(QK^T/√dk): …每行是一个概率分布Output: n × dk 矩阵每个 token 的新表示
查看原文结构
QK^T: [n × n] 矩阵 → 每行是一个 token 对所有 token 的注意力分数
softmax(QK^T/√d_k): [n × n] 矩阵 → 每行是一个概率分布
Output: [n × d_k] 矩阵 → 每个 token 的新表示

2.4 因果注意力掩码(Causal Mask)

在纯解码器 Transformer 中,生成是自回归的——预测第 t 个 token 时,只能看到前 t-1 个 token。通过因果掩码实现:

TEXT
注意力矩阵(4 个 token 的示例):

无掩码:              有因果掩码:
  t1  t2  t3  t4        t1  t2  t3  t4
t1 [1   1   1   1]    t1 [1   0   0   0]
t2 [1   1   1   1]    t2 [1   1   0   0]
t3 [1   1   1   1]    t3 [1   1   1   0]
t4 [1   1   1   1]    t4 [1   1   1   1]

1 = 可以关注, 0 = 被掩码(设为 -∞,softmax 后变为 0)

3. 多头注意力(Multi-Head Attention)

3.1 为什么需要多头

单头注意力只能学习一种关注模式。多头注意力让模型可以同时关注不同方面的信息:

TEXT
头 1:可能学习关注语法依赖(主语-动词一致性)
头 2:可能学习关注语义关系(代词指代)
头 3:可能学习关注位置相邻的词
头 4:可能学习关注长距离依赖

3.2 计算过程

TEXT
MultiHead(Q, K, V) = Concat(head₁, ..., headₕ) × Wₒ

其中每个 headᵢ = Attention(Q × Wqᵢ, K × Wkᵢ, V × Wvᵢ)

以 GPT-3 为例:
  d_model = 12288(模型维度)
  h = 96(注意力头数)
  d_k = d_model / h = 128(每个头的维度)

过程:
1. 将 Q, K, V 各分成 96 份
2. 每份独立计算注意力
3. 将 96 个结果拼接
4. 通过一个线性层 Wₒ 融合

3.3 GQA 和 MQA:推理优化

Multi-Query Attention (MQA):所有头共享同一组 K 和 V,只有 Q 是多头的

  • 优势:KV Cache 大幅减小,推理速度更快
  • 劣势:模型能力略有下降

Grouped-Query Attention (GQA):将注意力头分组,每组共享 K 和 V

  • 是 MHA 和 MQA 的折中方案
  • LLaMA 2 (70B)、Mistral 等模型采用
语义 SVG 重绘Transformer 架构深度剖析

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

查看原文结构
MHA: 每个头独立的 Q, K, V    → KV Cache 最大
GQA: 每组共享 K, V           → KV Cache 中等
MQA: 所有头共享 K, V         → KV Cache 最小

4. 位置编码(Positional Encoding)

4.1 为什么需要位置编码

自注意力机制是"置换不变"的——它不区分 token 的顺序。"猫追狗"和"狗追猫"在没有位置编码时会被模型视为相同的输入。位置编码为每个位置注入独特的信息。

4.2 正弦位置编码(原始 Transformer)

TEXT
PE(pos, 2i)   = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))

pos = token 的位置(0, 1, 2, ...)
i = 维度索引(0, 1, 2, ..., d_model/2)
d_model = 模型维度
  • 不同维度使用不同频率的正弦/余弦函数
  • 相对位置可以通过线性变换从绝对位置推导
  • 可以外推到训练时未见过的序列长度(但效果会下降)

4.3 RoPE(Rotary Position Embedding)

当前主流 LLM(LLaMA、Mistral、Qwen、DeepSeek 等)普遍采用 RoPE:

TEXT
核心思想:将位置信息编码为向量的旋转

对于位置 m 的 token:
  q_m = R(θ, m) × W_q × x_m
  k_n = R(θ, n) × W_k × x_n

其中 R(θ, m) 是旋转矩阵:
  R(θ, m) = diag(cos(mθ₁), cos(mθ₁), cos(mθ₂), cos(mθ₂), ...)
           + diag(-sin(mθ₁), sin(mθ₁), -sin(mθ₂), sin(mθ₂), ...) × P

注意力分数 q_m^T × k_n 自然包含了相对位置 (m-n) 的信息

RoPE 的优势:

  • 自然编码相对位置
  • 可以通过 NTK-aware Scaling 等方法外推到更长的上下文
  • 与注意力计算完美结合,不增加额外计算量

4.4 ALiBi(Attention with Linear Biases)

另一种位置编码方案,直接修改注意力分数:

TEXT
Attention_ij = q_i^T × k_j - m × |i - j|

m 是一个与注意力头相关的斜率参数
|i - j| 是位置距离
  • 不需要显式的位置编码向量
  • 对长序列有天然的长度惩罚
  • BLOOM 等模型采用

5. 前馈网络(Feed-Forward Network, FFN)

5.1 标准 FFN

语义 SVG 重绘Transformer 架构深度剖析

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

即:LinearReLULinear
查看原文结构
即:Linear → ReLU → Linear
  • FFN 通常占据模型参数量的约 2/3(注意力占 1/3)
  • 隐藏层维度通常是模型维度的 4 倍(d_ff = 4 × d_model)

5.2 SwiGLU(当前主流)

LLaMA、Mistral 等模型使用 SwiGLU 激活函数:

TEXT
SwiGLU(x) = (xW₁ ⊙ Swish(xW₁)) W₂

其中 Swish(x) = x × σ(βx),σ 是 sigmoid 函数
⊙ 是逐元素乘法

SwiGLU 相比 ReLU/GELU:

  • 性能略有提升(约 1-2% 的困惑度改善)
  • 计算量略大,但被更好的性能弥补
  • 隐藏层维度调整为 8/3 × d_model

6. 层归一化(Layer Normalization)

6.1 标准 LayerNorm

公式视图Transformer 架构深度剖析 · 关系式

把公式、变量和含义拆开呈现,便于对照阅读。

LayerNorm(x) = γ × (x - μ) / √(σ² + ε) + β
μ = mean(x)均值
σ² = variance(x)方差
γ, β = 可学习参数缩放和偏移
ε = 极小常数防止除以零

6.2 Pre-Norm vs Post-Norm

语义 SVG 重绘Transformer 架构深度剖析

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

Post-Norm(原始 Transf…Attention+xLNout xout
查看原文结构
Post-Norm(原始 Transformer):        Pre-Norm(当前主流 LLM):
x → [Attention] → +x → [LN] → out    x → [LN] → [Attention] → +x → out
x → [FFN] → +x → [LN] → out          x → [LN] → [FFN] → +x → out

6.3 RMSNorm

LLaMA、Mistral 等模型使用 RMSNorm 替代 LayerNorm:

公式视图Transformer 架构深度剖析 · 关系式

把公式、变量和含义拆开呈现,便于对照阅读。

RMSNorm(x) = x / RMS(x) × γ
RMS(x) = √(1/d × Σxᵢ²)
  • 去掉了减去均值的步骤,只保留缩放
  • 计算更快(减少一次遍历)
  • 实验证明效果与 LayerNorm 相当

7. KV Cache:推理加速的关键

7.1 问题

自回归生成时,每一步都需要对所有之前的 token 计算注意力。如果每次从头计算,计算量会随序列长度平方增长。

7.2 解决方案

缓存之前已经计算过的 K 和 V 向量,新 token 只需要计算自己的 Q、K、V,然后与缓存的 K、V 做注意力计算:

TEXT
Step t=3, 生成第 4 个 token:

缓存:K_cache = [k₁, k₂, k₃]
      V_cache = [v₁, v₂, v₃]

新 token:
  q₄ = W_q × x₄
  k₄ = W_k × x₄
  v₄ = W_v × x₄

注意力 = softmax(q₄ × [K_cache; k₄]^T / √d) × [V_cache; v₄]

更新缓存:
  K_cache = [k₁, k₂, k₃, k₄]
  V_cache = [v₁, v₂, v₃, v₄]

7.3 KV Cache 的内存挑战

语义 SVG 重绘Transformer 架构深度剖析

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

seqlen = 4096KV Cache ≈ 10 GBseqlen = 128KKV Cache ≈ 320 GB(需…
查看原文结构
seq_len = 4096 → KV Cache ≈ 10 GB
seq_len = 128K → KV Cache ≈ 320 GB(需要多张 GPU)

这就是为什么长上下文和大模型推理需要大量显存,也是 GQA/MQA 和 PagedAttention 等技术被提出的原因。


8. 完整的 Transformer Block

将所有组件组合起来,一个标准的 Transformer Block(Pre-Norm + RMSNorm + SwiGLU + GQA):

语义 SVG 重绘Transformer 架构深度剖析 · 结构 1

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文def transformerblock(x, K…系统核心1. 自注意力子层residual = xx = RMSNorm(x)工具、结果与反馈Q = x @ Wq seq, dmodelseq, dmodel
查看原文结构
def transformer_block(x, K_cache, V_cache):
    # 1. 自注意力子层
    residual = x
    x = RMSNorm(x)
    Q = x @ W_q           # [seq, d_model] → [seq, d_model]
    K = x @ W_k           # [seq, d_model] → [seq, kv_dim]
    V = x @ W_v           # [seq, d_model] → [seq, kv_dim]
语义 SVG 重绘Transformer 架构深度剖析 · 结构 2

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文2. FFN 子层系统核心residual = xx = RMSNorm(x)x = swigluffn(x) Linear工具、结果与反馈SwiGLULinear
查看原文结构
# 2. FFN 子层
    residual = x
    x = RMSNorm(x)
    x = swiglu_ffn(x)     # Linear → SwiGLU → Linear
    x = residual + x

9. 本章小结

组件功能当前主流方案
架构整体结构Decoder-only
注意力捕获 token 间关系Multi-Head / GQA
位置编码注入位置信息RoPE
FFN非线性特征变换SwiGLU
归一化稳定训练Pre-Norm + RMSNorm
推理优化加速生成KV Cache

核心洞察: Transformer 的成功在于三个关键设计的结合——自注意力提供了全局信息交互能力,并行计算使得大规模训练成为可能,模块化设计使得模型可以简单地通过堆叠层数来扩展规模。这三个特性共同使得 Transformer 成为了大模型时代的"通用架构"。


相关章节


延伸阅读

  • Vaswani, A. et al. (2017). "Attention Is All You Need". NeurIPS
  • Su, J. et al. (2021). "RoFormer: Enhanced Transformer with Rotary Position Embedding". arXiv:2104.09864
  • Press, O. et al. (2022). "Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation". ICLR
  • Ainslie, J. et al. (2023). "GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints". EMNLP
  • Zhang, B. & Sennrich, R. (2019). "Root Mean Square Layer Normalization". NeurIPS