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. 架构设计指导:新项目应基于这些共识
  2. 理解权衡:每个选择都有代价
  3. 识别异常:偏离栈的模型可能提供新方向

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/3RoPE标准
MistralRoPE标准
Qwen 1/2RoPE长上下文改进
DeepSeek V1/V2RoPE-
Gemma 1/2/3RoPE-
YiRoPE-
BaichuanALiBi早期
Command RALiBi部分
GPT-3/4Sinusoidal + Learned早期
T5Relative Bias编码器-解码器
MPTALiBi特例
FalconRoPE标准

4.2 为什么 RoPE 胜出?

优势 1:相对位置编码

  • 天然编码相对距离
  • 对长度外推友好

优势 2:与注意力兼容

  • 通过旋转实现,无需修改注意力公式
  • 计算高效

优势 3:长上下文扩展

  • 可通过 YaRN、LongRoPE 等扩展

优势 4:频率多样性

  • 多频率编码不同尺度的位置信息

4.3 RoPE 的演化

RoPE 的演进

  1. 原始(Su 2021):
  2. LLaMA 1:标准 RoPE
  3. LLaMA 2:相同
  4. LLaMA 3,支持 128K 上下文
  5. Code Llama:长上下文版本
  6. DeepSeek:RoPE + NTK-aware

4.4 仍然使用其他位置编码的模型

  • MPT:使用 ALiBi
  • Command R 系列:使用 ALiBi + 一些 RoPE 元素
  • xAI Grok:早期使用 RoPE 变体

5. 激活函数:SwiGLU 成为标准

5.1 主流选择对比

模型/系列MLP 激活
LLaMA 1/2/3SwiGLU
MistralSwiGLU
QwenSwiGLU
DeepSeekSwiGLU
GemmaGELU(近似 SwiGLU)
GPT-2/3GELU
BERTGELU
T5ReLU
PhiGELU
OLMoGELU

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 1MHA1:1
LLaMA 2 7BMHA1:1
LLaMA 2 70BGQA-88:1
LLaMA 3GQA-88:1
Mistral 7BGQA-
MixtralGQA-
Qwen 2GQA-
DeepSeek V2MLA(改进)-
GemmaGQA-
PaLMMHA → 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: 32768

12.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: 131072

13. 未来趋势

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 微调建议

基于主流模型微调时

  1. 保持原始架构:不要改变 norm、PE、激活
  2. GQA 设置:尊重原始的 num_kv_heads
  3. 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 核心洞察

  1. 现代 Transformer 栈:Pre-norm + RMSNorm + RoPE + SwiGLU + GQA + Bias-free

  2. 收敛原因:稳定性、效率、可扩展性的综合优化

  3. 异常的价值:偏离栈的模型(Gemma、DeepSeek)往往提供新方向

  4. 架构选择是 trade-off:每个选择都有代价,没有”最优”

15.2 给研究者

研究新架构时

  1. 必须显式比较与收敛栈
  2. 有明确目标(效率、稳定性、新能力)
  3. 创新应在关键点上(而非表面差异)

15.3 给工程师

新项目架构选择

  1. 默认使用收敛栈
  2. 仅在有明确理由时偏离
  3. 重视训练稳定性推理效率

16. 关键论文清单

架构基础

  1. Vaswani et al. (2017) — Attention Is All You Need
  2. Radford et al. (2019) — GPT-2
  3. Brown et al. (2020) — GPT-3

现代组件

  1. Su et al. (2021) — RoPE
  2. Shazeer (2020) — GLU Variants (SwiGLU)
  3. Zhang & Sennrich (2019) — RMSNorm

效率优化

  1. Ainslie et al. (2023) — GQA
  2. Shazeer (2019) — Fast Transformer Decoding (MQA)

偏离栈

  1. Team et al. (2024) — Gemma 2 (Post-norm)
  2. DeepSeek-AI (2024) — DeepSeek V2/V3 (MLA + MoE)

综合性分析

  1. Tan (2025) — Crystallization of Transformer Architectures

17. 与相关专题的连接

17.1 Transformer 架构专题

17.2 实现

17.3 应用


最后更新:2026-06-21

Footnotes

  1. Tan, Jun Yu (2025). The Crystallization of Transformer Architectures (2017-2025). https://jytan.net/blog/2025/transformer-architectures/