基座模型

Transformer 与现代生成式 AI:核心组件与计算图的工程演化

从原始编码器-解码器架构到现代 Decoder-Only 范式,系统解析注意力机制优化、激活函数选择、显存优化与混合专家系统(MoE)演化与工程实践。

发布于 7 分钟阅读

引言:现代大模型的工程底座

在人工智能的学术史与工业应用史上,极少有单一神经网络架构能够像 Transformer 一样,在长达数年的时间里不仅彻底统治自然语言处理领域,更全面辐射至计算机视觉、自动驾驶、多模态音视频合成、计算生物学(如 AlphaFold)以及代码工程生成等多个垂直分支。

自 2017 年 Vaswani 等人在经典论文《Attention Is All You Need》中首次揭开其面纱以来,Transformer 已经从一个最初用于解决英语到德语机器翻译的对称型序列到序列模型,演变成参数量跨越数百亿乃至数万亿的现代生成式 AI 基石。在这场波澜壮阔的演化过程中,虽然“自注意力”(Self-Attention)的核心数学思想始终未变,但在底层的计算图拓扑、微架构组件、显存存取效率以及稀疏激活机制上,整个工业界完成了一轮又一轮极其硬核的工程重构。

本文将从宏观系统拓扑与底层计算图演进两个维度,系统剖析现代 Transformer 核心组件的技术沿革与设计权衡。


一、架构范式的历史收敛:Decoder-Only 为何一统天下

回望 2017 年的原版 Transformer,它是一个由自注意力编码器(Encoder)和交叉注意力解码器(Decoder)构成的经典双端架构:

       输入序列                     目标输出序列 (训练时位移)
          │                                  │
          ▼                                  ▼
   ┌─────────────┐                    ┌─────────────┐
   │ Encoder 栈  │                    │ Decoder 栈  │
   │  双向注意力  │ ── 键值对传递 (K, V) ──►│ 因果掩码注意力 │
   │   全词上下文  │                    │ 交叉注意力   │
   └─────────────┘                    └─────────────┘
                                             │
                                             ▼
                                     自回归输出概率

然而,在经历了 BERT(纯编码器)、T5(编码器-解码器)与 GPT(纯解码器)的三国争霸后,现代生成式基座大模型(如 LLaMA、Mistral、DeepSeek、Qwen、Gemma)几乎无一例外地彻底倒向了 Decoder-Only(仅解码器) 架构。促成这一宏大收敛的核心原因在于以下三大关键工程与理论优势:

1. 预训练任务与推理任务的完美统一

在因果解码器中,模型只使用单一的自回归因果语言建模目标(Causal Language Modeling, 即根据上下文预测下一个词元)。这种纯粹的自回归目标天然兼容任意形式的任务形态:无论是文本补全、单轮问答、长篇翻译、指令遵循还是代码生成,均可自然地被编码为单一连续字符串的续写过程。系统无需在编码器与解码器之间设计专门的接口协议,实现了零样本上下文学习(In-Context Learning)的极致纯粹。

2. 键值缓存(KV Cache)的工程复用

在 Encoder-Decoder 架构中,编码器输出的中间表示在解码生成期间必须持续通过交叉注意力(Cross-Attention)被重复查询。而在 Decoder-Only 架构中,计算流水线被彻底扁平化,所有的历史词元均处于同一个因果注意力栈中。这种对齐使得 KV Cache 的显存布局高度连续,极大地简化了底层推理引擎(如 PagedAttention)的分页虚拟内存管理设计。

3. 注意力矩阵的下三角因果不变性

因果掩码保证了已有词元的隐藏状态不会受到后续生成词元的影响。这种计算的确定性使得模型在面对长序列批处理(Batching)与动态上下文共享(Prefix Caching)时,能够实现近乎零开销的计算结果复用。


二、注意力机制的演进:MHA、MQA 与 GQA 的工程权衡

自注意力机制的计算开销为 O(N2)O(N^2),但在生成式解码(Decode Phase)阶段,系统的致命瓶颈往往不是矩阵乘法算力,而是高带宽显存(HBM)的读取带宽。

为了在模型表达能力与显存带宽消耗之间寻求最优平衡,注意力机制经历了三次关键演化:

1. 多头注意力(Multi-Head Attention, MHA)

在原始 MHA 中,若隐藏层维度为 dmodeld_{\text{model}},模型将其切分为 HH 个独立的头,每个头的维度为 dk=dmodel/Hd_k = d_{\text{model}} / H。对于每一个注意力头,都需要独立的线性权重矩阵投影出独立的 Query (QQ)、Key (KK) 和 Value (VV):

Headi=Attention(QWiQ,KWiK,VWiV)\text{Head}_i = \text{Attention}(Q W_i^Q, K W_i^K, V W_i^V)

MHA 赋予了模型在不同表示子空间同时关注不同位置信息的能力。但缺陷在于,推理时每一个头都必须独立保存一份 KK 和 VV 缓存,随着并发批次与上下文长度增加,显存占用极其恐怖。

2. 多查询注意力(Multi-Query Attention, MQA)

Shazeer 在 2019 年提出了激进的 MQA 方案:保留所有的 Query 头,但让所有头强行共享同一份 Key 和 Value 投影矩阵。

  • 显存优势:KV Cache 的显存占用直接锐减至原来的 1/H1/H(通常为原来的 1/321/32 或 1/641/64),使得推理吞吐量实现数倍飙升;
  • 能力折损:由于整个模型在所有注意力子空间中只能共享单一的键值拓扑,模型在长距离复杂推理与细节检索任务中的表现会出现不可忽视的性能下降。

3. 分组查询注意力(Grouped-Query Attention, GQA)

为了弥合 MHA 的高质量与 MQA 的极致吞吐,Ainslie 等人在 2023 年提出了 GQA,并迅速被 LLaMA-2-70B、LLaMA-3、Mistral 等前沿模型全量采纳。

GQA 将 HH 个 Query 头均匀划分为 GG 个分组(Groups),每个分组内的所有 Query 头共享单一对 Key/Value 头。

# Grouped-Query Attention (GQA) 核心注意力矩阵计算与广播机制
import torch
import torch.nn.functional as F

def grouped_query_attention(
    q: torch.Tensor,       # [batch, num_q_heads, seq_len, head_dim]
    k: torch.Tensor,       # [batch, num_kv_heads, seq_len, head_dim]
    v: torch.Tensor,       # [batch, num_kv_heads, seq_len, head_dim]
    mask: torch.Tensor | None = None
) -> torch.Tensor:
    batch, num_q_heads, q_len, head_dim = q.shape
    _, num_kv_heads, kv_len, _ = k.shape
    
    # 验证分组整除性
    assert num_q_heads % num_kv_heads == 0
    group_size = num_q_heads // num_kv_heads
    
    # 对 Key 和 Value 沿分组维度进行复制扩展 (Broadcast)
    # [batch, num_kv_heads, 1, seq_len, head_dim] -> [batch, num_kv_heads, group_size, seq_len, head_dim]
    k_expanded = k.unsqueeze(2).expand(batch, num_kv_heads, group_size, kv_len, head_dim)
    v_expanded = v.unsqueeze(2).expand(batch, num_kv_heads, group_size, kv_len, head_dim)
    
    # 展平回匹配 Query 的头数维度
    k_expanded = k_expanded.reshape(batch, num_q_heads, kv_len, head_dim)
    v_expanded = v_expanded.reshape(batch, num_q_heads, kv_len, head_dim)
    
    # 计算缩放点积注意力
    scale = 1.0 / (head_dim ** 0.5)
    scores = torch.matmul(q, k_expanded.transpose(-2, -1)) * scale
    
    if mask is not None:
        scores = scores + mask
        
    attn_weights = F.softmax(scores, dim=-1)
    output = torch.matmul(attn_weights, v_expanded)
    return output

三大注意力机制的核心技术指标对比如下表所示:

机制名称

Query 头数

KV 头数

KV Cache 显存占用

吞吐加速比

任务精度保持度

典型应用模型

MHA

HH (如 32)

HH (如 32)

基准 (100%)

1.0x (基准)

100% (无损基准)

原始 Transformer, GPT-3

MQA

HH (如 32)

1

极小 (~3.1%)

3.5x ~ 4.5x

93% ~ 96% (存在轻微下降)

Falcon-40B, PaLM-2

GQA

HH (如 32)

GG (如 8)

中等 (~25%)

2.5x ~ 3.2x

99.2% ~ 99.8% (近乎无损)

LLaMA-3, Mistral-7B, DeepSeek-V2


三、微架构革新:归一化、激活函数与位置编码

除了注意力机制本身的演进,Transformer 内部的各个基础算子也经历了一整套现代化的重构工程:

1. 层归一化:从 Post-LN 到 Pre-LN,再到 RMSNorm

原始 Transformer 采用 Post-LN(在残差相加之后进行 LayerNorm)。在极深层网络中,这会导致初始阶段梯度回传极不稳定,必须依靠严格的 Warmup 策略。现代大模型全量转向了 Pre-LN(在子层计算之前归一化),彻底保障了百层网络的训练数值稳定性。

进一步地,Zhang 等人提出的 RMSNorm(Root Mean Square Normalization) 发现,LayerNorm 中的均值偏移(Mean Centering)对梯度的规范化作用微乎其微,核心贡献来自均方根缩放。RMSNorm 直接去除了减去均值的计算步,仅保留均方根缩放:

RMSNorm(x)=x1d∑i=1dxi2+ϵ⊙γ\text{RMSNorm}(x) = \frac{x}{\sqrt{\frac{1}{d} \sum_{i=1}^d x_i^2 + \epsilon}} \odot \gamma

这一改进减少了约 7% 的显存访存开销,成为了现代大模型的行业标配。

2. 前馈网络与激活函数:SwiGLU 的崛起

传统 Transformer 的前馈网络(FFN)采用两层线性变换搭配 ReLU 或 GELU 激活。现代架构普遍采用 Shazeer 提出的 SwiGLU(Swish Gated Linear Unit) 结构:

SwiGLU(x)=(Swish(xW1)⊗xW3)W2\text{SwiGLU}(x) = (\text{Swish}(x W_1) \otimes x W_3) W_2

SwiGLU 引入了门控机制,虽然增加了一个投影矩阵,但在保持总参数量相当(通常将隐藏层中间维度缩小为原来的 2/32/3)的前提下,大幅增强了非线性表征能力。


四、底层硬件 IO 革命:FlashAttention 的分块计算突破

在标准软硬件架构下,Transformer 的注意力计算是一个严重的“显存带宽受限”任务。GPU 拥有极高的计算核心算力(SRAM,时延极低但容量仅几十 MB)和相对缓慢的高带宽显存(HBM,容量数十 GB 但带宽有限)。

传统注意力实现中,计算流程必须多次往返读写 HBM:

  1. 计算 S=QKTS = QK^T,将大小为 N×NN \times N 的庞大中间矩阵完整写入 HBM;
  2. 从 HBM 读出 SS,计算 P=softmax⁡(S)P = \operatorname{softmax}(S),再将 PP 写回 HBM;
  3. 从 HBM 读出 PP 和 VV,计算加权输出 O=PVO = PV 并写回。

当序列长度 NN 达到数万时,N×NN \times N 矩阵不仅直接撑爆显存,频繁的显存读写更让 GPU 计算单元长时间处于饥饿等待状态。

Dao 等人在 2022 年提出的 FlashAttention 彻底革新了这一范式。其核心在于利用平铺(Tiling)算法与在线 Softmax(Online Softmax)数学恒等变形,将输入分块载入极高速的片上 SRAM,在 SRAM 内部一口气完成局部缩放、求和与输出累加,全程不向 HBM 写回庞大的 N×NN \times N 中间注意力权重矩阵。

FlashAttention 的演进将注意力计算的显存复杂度从 O(N2)O(N^2) 降低到了 O(N)O(N),且在实际吞吐上实现了 2 倍到 4 倍的端到端加速,是推动当今大模型上下文窗口迈入 128k 到 1M 的关键硬件使能技术。


五、算力与参数的解耦:混合专家模型(MoE)

随着模型参数突破千亿大关,稠密模型(Dense Model)每次处理任意 Token 时都必须激活全部参数,训练与推理成本难以承受。混合专家系统(Mixture of Experts, MoE) 实现了“参数容量(Capacity)”与“计算开销(Compute Cost)”的彻底解耦。

1. 稀疏路由机制(Sparse Gating)

MoE 将标准 Transformer 中的全连接 FFN 层替换为一组平行的“专家网络”(Experts,例如 8 个或 64 个),并引入一个轻量级的门控路由器(Router):

y=∑i=1EG(x)i⋅Experti(x),G(x)=TopK(Softmax(xWg),k)y = \sum_{i=1}^E G(x)_i \cdot \text{Expert}_i(x), \quad G(x) = \text{TopK}(\text{Softmax}(x W_g), k)

对于每一个 Token,路由器仅选择激活得分最高的 kk 个专家(如 k=2k=2)。这意味着一个拥有 6700 亿总参数的模型(如 DeepSeek-V3),在处理每个 Token 时实际激活的参数量仅有 370 亿,其计算开销与推理时延仅等同于一个中型稠密模型,但却拥有海量参数带来的庞大世界知识存储容量。

2. 细粒度专家与共享专家创新

传统 MoE 往往采用粗粒度大专家(如 8 选 2),容易导致专家专门化程度不足或负载严重倾斜。现代前沿架构(如 DeepSeekMoE 架构)进一步演化为:

  • 细粒度切分:将每个专家参数量缩小,专家总数大幅增加(如 64 选 8 或 256 选 8),赋予组合路由更高的灵活性;
  • 显式共享专家(Shared Experts):固定保留若干个专家对所有 Token 强制激活,专门捕获所有任务通用共享的宏观语义常识,让其余路由专家专注于专精领域的细分特征。

六、总结

Transformer 架构自 2017 年诞生至今,虽然其核心注意力算子历久弥坚,但其内部计算图与物理实现早已脱胎换骨。

从 Decoder-Only 的架构收敛,到 GQA 对显存带宽的精妙妥协;从 RMSNorm 与 SwiGLU 的高效微架构重整,到 FlashAttention 针对 GPU 存储层次的极致硬件榨取,再到 MoE 架构实现的参数稀疏扩展——现代生成式 AI 的繁荣,本质上是一场算法数学之美与计算机系统底层工程协同优化的伟大胜利。