Transformer架构收敛模式分析(2017-2026)
从 2017 年 Transformer 被提出到 2026 年的今天,LLM 架构经历了快速演化。但一个令人惊讶的事实是:53 个主流 LLM 收敛到了一个共同的架构栈。本文基于 Jun Yu Tan 2025 年的综合性分析1,系统梳理这一演化过程,揭示每个设计选择的形成原因和权衡。
1. 引言:架构趋同现象
1.1 一个有趣的事实
观察:从 2017 年到 2025 年,Transformer 经历了多种架构变体(Post-norm、Pre-norm、LayerNorm、RMSNorm、Sinusoidal、RoPE、ALiBi、MHA、MQA、GQA、GELU、SwiGLU 等),但在 2023-2025 年显著收敛。
收敛栈(截至 2025):
- Pre-norm + RMSNorm
- RoPE 位置编码
- SwiGLU MLP
- GQA/MQA KV Cache
- Bias-free 线性层
1.2 为什么研究收敛?
重要性:
- 架构设计指导:新项目应基于这些共识
- 理解权衡:每个选择都有代价
- 识别异常:偏离栈的模型可能提供新方向
1.3 53 个模型的范围
分析涵盖:
- OpenAI:GPT 系列(1-4, 4o)
- Meta:LLaMA 1/2/3, Code Llama
- Mistral AI:Mistral 7B, Mixtral 8x7B
- DeepSeek:V1/V2/V3
- Google:Gemma 1/2/3, PaLM, T5
- 阿里:Qwen 1/2, QwQ
- Microsoft:Phi 1/2/3/4, Orca
- Cohere:Command R 系列
- 01.AI:Yi
- 百川:Baichuan
- xAI:Grok 1/2
- 其他:Falcon, BLOOM, MPT, StableLM, GLM 等
2. 归一化:Pre-norm vs Post-norm
2.1 两种范式
Post-norm(原始 Transformer, GPT-1/2, BERT):
Pre-norm(GPT-3, LLaMA, 现代主流):
2.2 收敛结果
主流:Pre-norm(~80% 现代 LLM)
2.3 为什么 Pre-norm 胜出?
优势 1:训练稳定性
Pre-norm 中残差路径是干净的恒等映射:
即使某些 表现不佳,整个网络的梯度仍可通过恒等路径传播。
Post-norm 中:
每层都重新归一化,深度增加时易不稳定。
优势 2:学习率宽容度
Pre-norm 允许更大的学习率(特别是 Warmup 后的峰值)。
优势 3:层间可恢复性
训练失败时,Pre-norm 模型的部分层仍可独立使用。
2.4 仍然使用 Post-norm 的模型
- Gemma 2:使用 Post-norm + 混合注意力(局部 + 全局)
- GLM 系列:部分版本
- T5(编码器-解码器)
经验:Post-norm + 精心设计可能达到 Pre-norm 性能,但训练更困难。
2.5 数学对比
Pre-norm 的 Jacobian:
特征值大致在 ,稳定。
Post-norm 的 Jacobian:
其中 的谱变化较大,深层时可能放大/缩小信号。
3. LayerNorm vs RMSNorm
3.1 两种归一化
LayerNorm:
RMSNorm:
3.2 收敛结果
主流:RMSNorm(~70% 现代 LLM)
3.3 为什么 RMSNorm 胜出?
优势 1:计算效率
- 无需计算均值
- 节省约 10-15% FLOPs
- 特别有利于推理
优势 2:内存友好
- 无需存储
- 减少中间变量
优势 3:性能相当或更好
实践表明 RMSNorm 与 LayerNorm 性能相当,在某些任务上略优。
3.4 数学性质
LayerNorm 的不变量:
- 均值为 0
- 方差为 1
- 位置信息丢失(均值减法消除位置)
RMSNorm 的不变量:
- 二阶矩为 1
- 保留位置信息(不减均值)
关键差异:RMSNorm 对激活的均值偏移不敏感,这对模型鲁棒性有益。
3.5 仍然使用 LayerNorm 的模型
- GPT 系列(1/2/3)
- BERT 系列
- OLMo
- 部分 LLaMA 变体(Code Llama 等)
4. 位置编码:RoPE 主导
4.1 主流选择对比
| 模型/系列 | 位置编码 | 备注 |
|---|---|---|
| LLaMA 1/2/3 | RoPE | 标准 |
| Mistral | RoPE | 标准 |
| Qwen 1/2 | RoPE | 长上下文改进 |
| DeepSeek V1/V2 | RoPE | - |
| Gemma 1/2/3 | RoPE | - |
| Yi | RoPE | - |
| Baichuan | ALiBi | 早期 |
| Command R | ALiBi | 部分 |
| GPT-3/4 | Sinusoidal + Learned | 早期 |
| T5 | Relative Bias | 编码器-解码器 |
| MPT | ALiBi | 特例 |
| Falcon | RoPE | 标准 |
4.2 为什么 RoPE 胜出?
优势 1:相对位置编码
- 天然编码相对距离
- 对长度外推友好
优势 2:与注意力兼容
- 通过旋转实现,无需修改注意力公式
- 计算高效
优势 3:长上下文扩展
- 可通过 YaRN、LongRoPE 等扩展
优势 4:频率多样性
- 多频率编码不同尺度的位置信息
4.3 RoPE 的演化
RoPE 的演进:
- 原始(Su 2021):
- LLaMA 1:标准 RoPE
- LLaMA 2:相同
- LLaMA 3:,支持 128K 上下文
- Code Llama:长上下文版本
- DeepSeek:RoPE + NTK-aware
4.4 仍然使用其他位置编码的模型
- MPT:使用 ALiBi
- Command R 系列:使用 ALiBi + 一些 RoPE 元素
- xAI Grok:早期使用 RoPE 变体
5. 激活函数:SwiGLU 成为标准
5.1 主流选择对比
| 模型/系列 | MLP 激活 |
|---|---|
| LLaMA 1/2/3 | SwiGLU |
| Mistral | SwiGLU |
| Qwen | SwiGLU |
| DeepSeek | SwiGLU |
| Gemma | GELU(近似 SwiGLU) |
| GPT-2/3 | GELU |
| BERT | GELU |
| T5 | ReLU |
| Phi | GELU |
| OLMo | GELU |
5.2 为什么 SwiGLU 胜出?
优势 1:参数效率
相同参数下,SwiGLU 一致优于 GELU。
优势 2:门控机制
通过乘性门控实现软选择。
优势 3:与 FFN 的对齐
SwiGLU 自然地分解为”门”+“值”模式,与注意力机制中的 对齐。
5.3 SwiGLU 的代价
代价 1:参数增加
- 标准 FFN:2 个矩阵( 各)
- SwiGLU:3 个矩阵(但通常 减小以保持总参数)
代价 2:实现复杂度
需要计算两个独立的线性投影。
5.4 现代变体
Gemma 的 GeGLU(近 SwiGLU):
ReLU²(PaLM 部分使用):
5.5 SwiGLU 实现
class SwiGLU_MLP(nn.Module):
"""SwiGLU 前馈网络"""
def __init__(self, d_model, d_ff, dropout=0.0):
super().__init__()
# SwiGLU 使用 3 个矩阵
# 但 d_ff 调整以保持总参数与标准 FFN 一致
# 标准 FFN: 2 * d * d_ff
# SwiGLU: 3 * d * d_ff = 2 * d * (2/3 * d_ff * 4/3) = 2 * d * (8/9 * d_ff)
# 实践:d_ff_swiglue = int(2/3 * 4 * d_model) ≈ 2.67 * d_model
d_ff_swiglu = int(d_ff * 2 / 3) # 调整
self.w_gate = nn.Linear(d_model, d_ff_swiglu, bias=False)
self.w_up = nn.Linear(d_model, d_ff_swiglu, bias=False)
self.w_down = nn.Linear(d_ff_swiglu, d_model, bias=False)
self.dropout = nn.Dropout(dropout)
def forward(self, x):
gate = F.silu(self.w_gate(x))
up = self.w_up(x)
return self.dropout(self.w_down(gate * up))6. KV Cache 优化:GQA/MQA 主导
6.1 三种 KV 共享方式
MHA(Multi-Head Attention):
- 个 Q 头, 个 K 头, 个 V 头
- KV Cache 大小:
MQA(Multi-Query Attention):
- 个 Q 头,1 个 K 头,1 个 V 头
- KV Cache 大小:(减少 倍)
GQA(Grouped Query Attention):
- 个 Q 头, 个 K 头, 个 V 头()
- KV Cache 大小:(折中)
6.2 收敛结果
| 模型 | KV 共享方式 | 比例 |
|---|---|---|
| LLaMA 1 | MHA | 1:1 |
| LLaMA 2 7B | MHA | 1:1 |
| LLaMA 2 70B | GQA-8 | 8:1 |
| LLaMA 3 | GQA-8 | 8:1 |
| Mistral 7B | GQA | - |
| Mixtral | GQA | - |
| Qwen 2 | GQA | - |
| DeepSeek V2 | MLA(改进) | - |
| Gemma | GQA | - |
| PaLM | MHA → MQA | - |
6.3 为什么 GQA 胜出?
优势 1:推理效率
KV Cache 减少 倍,推理速度显著提升。
优势 2:性能保留
相比 MQA,GQA 保持高质量(多组共享保留差异性)。
优势 3:训练简单
直接复用 MHA 的训练代码,仅修改推理时 KV 头数。
6.4 MLA:DeepSeek 的创新
MLA(Multi-Head Latent Attention):
将 KV 投影到低维潜空间,再通过解压恢复。
优势:
- KV Cache 减少到 维(远小于 )
- 性能与 MHA 相当
劣势:
- 实现复杂
- 训练开销略增
6.5 KV Cache 演进
MHA → MQA → GQA → MLA
↓
主流共识
6.6 GQA 实现
class GQAttention(nn.Module):
"""分组查询注意力(GQA)"""
def __init__(self, d_model, num_q_heads, num_kv_heads):
super().__init__()
assert num_q_heads % num_kv_heads == 0
self.num_q_heads = num_q_heads
self.num_kv_heads = num_kv_heads
self.num_groups = num_q_heads // num_kv_heads
self.d_k = d_model // num_q_heads
self.W_q = nn.Linear(d_model, num_q_heads * self.d_k, bias=False)
self.W_k = nn.Linear(d_model, num_kv_heads * self.d_k, bias=False)
self.W_v = nn.Linear(d_model, num_kv_heads * self.d_k, bias=False)
self.W_o = nn.Linear(d_model, d_model)
def forward(self, x, mask=None):
B, n, _ = x.shape
Q = self.W_q(x).view(B, n, self.num_q_heads, self.d_k).transpose(1, 2)
K = self.W_k(x).view(B, n, self.num_kv_heads, self.d_k).transpose(1, 2)
V = self.W_v(x).view(B, n, self.num_kv_heads, self.d_k).transpose(1, 2)
# 重复 K 和 V 以匹配 Q 头数
K = K.repeat_interleave(self.num_groups, dim=1)
V = V.repeat_interleave(self.num_groups, dim=1)
scores = (Q @ K.transpose(-2, -1)) / (self.d_k ** 0.5)
if mask is not None:
scores = scores.masked_fill(mask == 0, -1e9)
attn = torch.softmax(scores, dim=-1)
out = attn @ V
out = out.transpose(1, 2).contiguous().view(B, n, -1)
return self.W_o(out)7. 偏置:Bias-free 成为主流
7.1 是否使用偏置
主流选择:
| 模型 | QKV 偏置 | FFN 偏置 |
|---|---|---|
| LLaMA 1/2/3 | ✗ | ✗ |
| Mistral | ✗ | ✗ |
| Qwen | ✗ | ✗ |
| DeepSeek | ✗ | ✗ |
| Gemma | ✓ | - |
| GPT-3 | ✓ | ✓ |
| BERT | ✓ | ✓ |
| T5 | ✓ | ✓ |
7.2 为什么 Bias-free?
优势 1:参数减少
矩阵的偏置占用 个参数(比例小但非零)。
优势 2:训练稳定性
偏置可能引入梯度流的不必要变化。
优势 3:与 RMSNorm 兼容
RMSNorm 没有均值中心化,偏置的影响更直接。
优势 4:与 GQA 一致
GQA 中 K/V 的投影共享,移除偏置避免子头间的偏差。
7.3 例外
Gemma 系列:保留偏置(但其他方面高度优化)。
经验:偏置的影响很小,但移除偏置使架构更”干净”。
8. 架构决策时间线
8.1 关键决策的演化
2017 ─┬─ Transformer 提出
│ - Post-norm
│ - Sinusoidal PE
│ - MHA
│ - GELU/Softmax
│
2018 ─┼─ GPT-1/BERT
│ - Pre-LN 在 BERT 中部分使用
│
2019 ─┼─ GPT-2
│ - Pre-norm(最终版本)
│ - Learned PE
│ - GELU
│
2020 ─┼─ GPT-3
│ - Pre-norm 标准化
│ - Sinusoidal PE 继续使用
│
2021 ─┼─ RoPE 提出
│ - 早期采用:PaLM、T5 v1.1
│
2022 ─┼─ LLaMA 1
│ - RoPE 全面采用
│ - RMSNorm 开始流行
│ - SwiGLU
│ - Bias-free
│ → 现代栈成型
│
2023 ─┼─ LLaMA 2
│ - GQA 在大模型中采用
│ - YaRN 等长上下文方法
│
2024 ─┼─ LLaMA 3
│ - $b = 500000$
│ - 128K 上下文
│ - GQA 标准化
│
2025 ─┼─ DeepSeek V3
│ - MLA + MoE
│ - 多头潜在注意力成熟
│
2026 ─┴─ 现代栈全面收敛
8.2 关键转折点
转折点 1:GPT-2 / GPT-3 确立 Pre-norm 标准
转折点 2:LLaMA 1 确立现代栈(RoPE + RMSNorm + SwiGLU)
转折点 3:LLaMA 2 推动 GQA 在大模型中的采用
转折点 4:DeepSeek V3 推动 MLA 在 MoE 模型中的采用
9. 偏离收敛栈的模型
9.1 Gemma 系列
偏离:Post-norm、GELU(接近 SwiGLU)、保留偏置
理由:
- Google 的实验表明 Post-norm 配合精心调优可达到 Pre-norm 水平
- 部分任务上 Post-norm 性能更稳定
实际表现:Gemma 2 在多项基准上达到 SOTA。
9.2 Command R(Cohere)
偏离:ALiBi 位置编码
理由:
- ALiBi 在某些长上下文任务上更稳定
- Cohere 的实验表明 ALiBi 在其场景下优于 RoPE
9.3 OLMo
偏离:LayerNorm(非 RMS)、GELU
理由:
- 完全开源可复现的目标
- 选择”经典”组件以确保可重现性
9.4 DeepSeek V3
偏离:MLA + MoE
理由:
- 极致推理效率
- 大规模 MoE 需要更高效的注意力
9.5 偏离的合理性
重要:偏离栈的模型不一定是错的。每个偏离都对应特定优化目标:
- Gemma:追求训练稳定性
- Command R:特定任务优化
- DeepSeek:极致推理效率
10. 收敛背后的原因
10.1 模型内在因素
优化稳定性
Pre-norm + RMSNorm 的组合提供最佳的优化稳定性。
质量-计算权衡
SwiGLU + GQA + RoPE 在质量与计算效率间达到最优平衡。
归纳偏置
RoPE 的相对位置编码更符合语言的结构。
10.2 实际约束因素
内核可用性
现代 GPU 内核(如 FlashAttention)针对标准配置优化。
可复用性
主流栈的代码、教程、工具链更完善。
社区知识
调试、优化、扩展主流栈的经验更丰富。
10.3 路径依赖
早期采用者的影响
LLaMA 的开源使其成为新项目的默认起点。
论文-实现的循环
主流架构 → 大量论文 → 改进 → 进一步主流化。
11. 关键设计原则
基于收敛分析,提炼出现代 Transformer 设计原则:
11.1 原则 1:Pre-norm + RMSNorm
理由:训练稳定性、效率、性能三者最优平衡。
11.2 原则 2:RoPE 位置编码
理由:相对位置、外推能力、频率多样性。
11.3 原则 3:SwiGLU 激活
理由:门控机制、参数效率。
11.4 原则 4:GQA(大模型)
理由:推理效率与质量平衡。
11.5 原则 5:Bias-free
理由:参数效率、与 RMSNorm 兼容。
11.6 原则 6:合适的初始化
理由:深度 Transformer 需要 scale init。
12. 现代 Transformer 配置示例
12.1 LLaMA 3 8B 配置
architecture:
num_layers: 32
d_model: 4096
num_q_heads: 32
num_kv_heads: 8 # GQA
d_ff: 14336 # SwiGLU 调整
normalization: RMSNorm
position_pretrain: Pre-norm
position_encoding: RoPE
rope_base: 500000
activation: SwiGLU
bias: false
attention: GQA
max_seq_len: 8192 # 训练长度
extended_seq_len: 131072 # 通过 YaRN 扩展12.2 Mistral 7B v0.1 配置
architecture:
num_layers: 32
d_model: 4096
num_q_heads: 32
num_kv_heads: 8 # GQA
d_ff: 14336
normalization: RMSNorm
position_pretrain: Pre-norm
position_encoding: RoPE
rope_base: 10000
activation: SwiGLU
bias: false
sliding_window: 4096 # 滑动窗口注意力
max_seq_len: 3276812.3 Qwen 2.5 配置
architecture:
num_layers: 80
d_model: 8192
num_q_heads: 64
num_kv_heads: 8 # GQA
d_ff: 29568
normalization: RMSNorm
position_pretrain: Pre-norm
position_encoding: RoPE
rope_base: 1000000
activation: SwiGLU
bias: false
max_seq_len: 32768
extended_seq_len: 13107213. 未来趋势
13.1 当前正在演进的方向
方向 1:MoE + Transformer
DeepSeek V3、Mistral Large 等已采用 MoE。
方向 2:MLA 替代 GQA
低秩潜在空间压缩有更大压缩比。
方向 3:滑动窗口 + 全局注意力
Mistral 的混合注意力模式被广泛采用。
方向 4:状态空间混合
Jamba、Zamba 等混合架构。
方向 5:推理时扩展
CoT、Test-time Compute 等改变训练-推理权衡。
13.2 潜在的下一波收敛
潜在收敛点 1:MLA 作为 GQA 替代
如果 MLA 训练成本下降,可能成为新标准。
潜在收敛点 2:MoE 的标准化
稀疏激活的 MoE 可能成为大模型标配。
潜在收敛点 3:混合架构
Transformer + SSM 的混合可能成为新的统一栈。
14. 实践建议
14.1 新项目起点
对于新 LLM 项目:
def recommend_architecture(target_params_billions, target_seq_len):
"""根据目标参数和长度推荐架构"""
if target_params_billions < 3:
# 小模型
return {
'num_layers': 32,
'd_model': 2560 if target_params_billions < 1 else 3072,
'num_q_heads': 32,
'num_kv_heads': 8,
'normalization': 'rmsnorm',
'position_encoding': 'rope',
'activation': 'swiglu',
'bias': False,
'max_seq_len': target_seq_len,
'rope_base': 1000000 if target_seq_len > 32768 else 10000,
}
elif target_params_billions < 15:
# 中等模型
return {
'num_layers': 40,
'd_model': 4096,
'num_q_heads': 32,
'num_kv_heads': 8, # GQA
'normalization': 'rmsnorm',
'position_encoding': 'rope',
'activation': 'swiglu',
'bias': False,
'max_seq_len': target_seq_len,
'rope_base': 500000,
}
else:
# 大模型
return {
'num_layers': 80,
'd_model': 8192,
'num_q_heads': 64,
'num_kv_heads': 8, # GQA
'normalization': 'rmsnorm',
'position_encoding': 'rope',
'activation': 'swiglu',
'bias': False,
'max_seq_len': target_seq_len,
'rope_base': 500000,
}14.2 微调建议
基于主流模型微调时:
- 保持原始架构:不要改变 norm、PE、激活
- GQA 设置:尊重原始的 num_kv_heads
- RoPE 设置:保持原始 base,避免外推困难
14.3 调试检查
架构设计自检:
def architecture_checklist(config):
"""检查架构是否符合现代最佳实践"""
issues = []
# Pre-norm?
if config.get('norm_position') != 'pre':
issues.append("考虑使用 Pre-norm(更稳定的训练)")
# RMSNorm?
if config.get('normalization') != 'rmsnorm':
issues.append("考虑使用 RMSNorm(更高效)")
# RoPE?
if config.get('position_encoding') != 'rope':
issues.append("考虑使用 RoPE(相对位置 + 外推)")
# SwiGLU?
if config.get('activation') != 'swiglu':
issues.append("考虑使用 SwiGLU(性能更优)")
# GQA(如果大模型)?
if config.get('num_layers', 0) >= 32 and config.get('num_kv_heads') == config.get('num_q_heads'):
issues.append("大模型考虑使用 GQA 减少 KV Cache")
# Bias-free?
if config.get('bias', True):
issues.append("考虑移除 bias(参数效率)")
return issues if issues else ["架构符合最佳实践"]15. 总结
Transformer 架构的收敛反映了深度学习社区的集体探索-验证-收敛过程。
15.1 核心洞察
-
现代 Transformer 栈:Pre-norm + RMSNorm + RoPE + SwiGLU + GQA + Bias-free
-
收敛原因:稳定性、效率、可扩展性的综合优化
-
异常的价值:偏离栈的模型(Gemma、DeepSeek)往往提供新方向
-
架构选择是 trade-off:每个选择都有代价,没有”最优”
15.2 给研究者
研究新架构时:
- 必须显式比较与收敛栈
- 应有明确目标(效率、稳定性、新能力)
- 创新应在关键点上(而非表面差异)
15.3 给工程师
新项目架构选择:
- 默认使用收敛栈
- 仅在有明确理由时偏离
- 重视训练稳定性和推理效率
16. 关键论文清单
架构基础
- Vaswani et al. (2017) — Attention Is All You Need
- Radford et al. (2019) — GPT-2
- Brown et al. (2020) — GPT-3
现代组件
- Su et al. (2021) — RoPE
- Shazeer (2020) — GLU Variants (SwiGLU)
- Zhang & Sennrich (2019) — RMSNorm
效率优化
- Ainslie et al. (2023) — GQA
- Shazeer (2019) — Fast Transformer Decoding (MQA)
偏离栈
- Team et al. (2024) — Gemma 2 (Post-norm)
- DeepSeek-AI (2024) — DeepSeek V2/V3 (MLA + MoE)
综合性分析
- Tan (2025) — Crystallization of Transformer Architectures
17. 与相关专题的连接
17.1 Transformer 架构专题
17.2 实现
17.3 应用
最后更新:2026-06-21
Footnotes
-
Tan, Jun Yu (2025). The Crystallization of Transformer Architectures (2017-2025). https://jytan.net/blog/2025/transformer-architectures/ ↩