Skip to Content
Transformer 工程实战三种架构变体

从原始 Transformer 到三条路线

2017 年的原始 Transformer 是一个完整的 Encoder-Decoder 结构,专为机器翻译设计。Encoder 把源语言句子编码成一组向量,Decoder 逐词生成目标语言。这个设计在翻译任务上效果显著,但研究者很快意识到:并不是所有任务都需要这两个模块。

2018 年,两条新路线几乎同时出现:Google 发布 BERT,只用 Encoder;OpenAI 发布 GPT,只用 Decoder。这并不是偶然的分叉,而是对”什么任务需要什么能力”的工程判断。

核心区别在注意力机制的方向性:

  • Encoder 使用双向注意力:每个 token 可以看到序列中所有其他 token(包括左边和右边的)。这对于理解任务非常有用——判断情感、识别实体时,需要结合上下文才能做出准确判断。
  • Decoder 使用因果注意力(Causal Attention):每个 token 只能看到它左边的 token,不能看到未来的内容。这是生成任务的自然约束——生成第 5 个词时,你只知道前 4 个词。
  • Encoder-Decoder 结合两者:Encoder 双向理解输入,Decoder 基于 Encoder 的输出自回归地生成输出。

下面分三条路线详细展开。

Encoder-Only:BERT 系列

结构与注意力

BERT(Bidirectional Encoder Representations from Transformers)只使用 Transformer 的 Encoder 部分,堆叠多层。以 bert-base-uncased 为例:12 层 Encoder,768 维隐层,12 个注意力头,参数量 110M。

每一层的自注意力是全双向的:序列中任意两个位置都可以互相关注。对于句子”The bank can guarantee deposits”,模型在处理”bank”时,同时看到”deposits”,从而正确判断这里的”bank”是金融机构而非河岸。

预训练任务:MLM

BERT 的预训练使用掩码语言模型(Masked Language Model, MLM):随机遮盖输入中 15% 的 token,让模型预测被遮盖的内容。

输入:The [MASK] can guarantee deposits 目标:bank

这个任务天然要求模型同时利用左右上下文,所以需要双向注意力。

BERT 还有第二个预训练任务——下句预测(Next Sentence Prediction, NSP),但后续研究(RoBERTa)表明 NSP 对下游任务帮助不大,可以去掉。

适合的任务

Encoder-Only 的输出是每个 token 的向量表示,或者整个句子的向量表示(通常用 [CLS] token 的向量)。这些向量经过微调后用于:

  • 文本分类:情感分析、意图识别、主题分类——在 [CLS] 向量上接一个线性层
  • 命名实体识别(NER):序列标注,每个 token 预测一个标签(B-PER、I-ORG 等)
  • 文本相似度 / 语义匹配:双句子输入,判断是否语义相近(用于搜索、去重)
  • 阅读理解 / 抽取式问答:定位答案在段落中的起止位置

BERT 系列不适合生成任务——因为它的结构不支持自回归解码。

主要变种

模型改进点
RoBERTa更多数据、更长训练、去掉 NSP、动态 masking
ALBERT参数共享 + 嵌入分解,大幅压缩参数量
DistilBERT知识蒸馏,参数量减少 40%,速度提升 60%
DeBERTa分离位置编码与内容编码,引入解耦注意力
MacBERT中文 BERT,用相似词替代 [MASK] 减小预训练与微调的差异

Decoder-Only:GPT 系列

结构与注意力

GPT(Generative Pre-trained Transformer)只使用 Transformer 的 Decoder 部分,但去掉了原始 Decoder 中的 Cross-Attention(因为没有 Encoder 的输出可以关注)。每层只有自注意力 + FFN。

关键约束是因果掩码(Causal Mask):在注意力矩阵上施加一个上三角掩码,把未来位置的注意力权重设为负无穷,经过 Softmax 后变为 0。这样 position i 的 token 只能看到 position 0 到 i 的内容。

位置 0 1 2 3 位置 0: ✓ ✗ ✗ ✗ 位置 1: ✓ ✓ ✗ ✗ 位置 2: ✓ ✓ ✓ ✗ 位置 3: ✓ ✓ ✓ ✓

预训练任务:CLM

GPT 的预训练任务是因果语言模型(Causal Language Model, CLM),也叫下一词预测:给定前 n 个 token,预测第 n+1 个。

输入:The cat sat on the 目标:mat

对于长度为 L 的序列,一次前向传播可以同时计算 L 个预测任务(每个位置预测下一个词),训练非常高效。

为什么现代大模型都是 Decoder-Only

这是一个值得认真回答的问题。从 GPT-3 开始,几乎所有大规模语言模型(LLaMA、Mistral、Qwen、GLM 的生成版本等)都选择了 Decoder-Only 架构,原因是多方面的:

1. Few-shot 涌现能力

GPT-3 的论文(2020)发现,当模型规模足够大时,Decoder-Only 模型在没有微调的情况下,仅通过 few-shot prompt 就能完成多种任务。这种能力被称为 In-Context Learning(ICL),在 Encoder-Only 模型上没有被观察到。

2. 统一的训练目标

CLM 是一个极其简单的自监督目标,不需要任何标注数据,直接用所有文本都能训练。随着训练数据和参数规模增大,模型能力持续提升,没有明显的天花板。

3. 生成是最通用的接口

分类、问答、翻译、摘要……理论上都可以被表述为”给定 prompt,生成答案”。Decoder-Only 天然支持这种统一范式,而 Encoder-Only 在没有额外结构的情况下无法生成。

4. KV Cache 推理效率

自回归解码时,每一步只需要计算新 token 的 Key 和 Value,之前的可以缓存复用(KV Cache)。这让 Decoder-Only 模型的推理可以高效实现,是工程落地的关键。

主要变种

模型特点
GPT-21.5B,开源,可本地运行
GPT-3 / GPT-4API 访问,闭源
LLaMA 2 / 3Meta 开源,工业级可用
Mistral / Mixtral高效架构,GQA + Sliding Window Attention
Qwen 系列阿里开源,中英文优化
DeepSeek 系列强推理能力,部分开源

Encoder-Decoder:T5 / BART 系列

结构

Encoder-Decoder(也叫 Seq2Seq)保留了原始 Transformer 的完整结构:

  • Encoder:双向注意力,编码输入序列为向量序列
  • Decoder:因果注意力(自注意力部分),加上 Cross-Attention(关注 Encoder 的输出)
  • Cross-Attention:Decoder 的每个位置都可以关注 Encoder 的所有位置,这是传递输入信息的桥梁

这种结构天然适合输入和输出都是序列、但长度不必相等的任务。

T5:把一切表述为文本到文本

T5(Text-to-Text Transfer Transformer,2020)的核心思想是:把所有 NLP 任务统一表述为”输入文本 → 输出文本”。

翻译: "translate English to French: That is good." → "C'est bon." 摘要: "summarize: <长文本>" → "<摘要>" 分类: "sentiment: This movie is terrible." → "negative" 问答: "question: Who was Jim Henson? context: <段落>" → "a puppeteer"

T5 在 C4(Colossal Clean Crawled Corpus)上用这种统一格式预训练,然后在各任务上微调,在多个 benchmark 上达到当时 SOTA。

BART:去噪自编码器

BART(2020)的预训练策略更有创意:对输入文本施加各种噪声(删除 token、打乱句子顺序、添加遮盖、随机旋转),让 Decoder 恢复原始文本。这让 BART 在生成任务(特别是摘要)上效果突出。

适合的任务

Encoder-Decoder 最适合转换类任务

  • 机器翻译:输入源语言,输出目标语言
  • 文本摘要:输入长文,输出摘要(抽象式,非抽取式)
  • 问答:输入问题 + 上下文,输出答案(生成式)
  • 文本纠错:输入错误文本,输出正确文本
  • 数据到文本:输入结构化数据,输出描述文本

与 Decoder-Only 的竞争

随着 GPT-3 之后 Decoder-Only 大模型展示出强大的生成能力,Encoder-Decoder 的市场份额在逐渐收窄——因为一个足够大的 Decoder-Only 模型可以通过 prompt 完成翻译、摘要等任务,不再需要专门的 Encoder-Decoder 微调模型。

但在资源受限场景下(小模型、本地部署、任务明确),T5/BART 仍然是高效的选择。

选型指南

根据任务类型选择架构:

任务类型典型任务推荐架构代表模型
理解/分类情感分析、意图识别、主题分类Encoder-OnlyBERT、RoBERTa、DeBERTa
序列标注NER、词性标注、槽位填充Encoder-OnlyBERT、MacBERT(中文)
语义匹配相似度计算、文本检索、去重Encoder-OnlyBERT、Sentence-BERT
开放域生成对话、续写、创作Decoder-OnlyGPT-2、LLaMA、Qwen
指令跟随问答、助手、AgentDecoder-OnlyGPT-4、LLaMA-3-Instruct
机器翻译多语言互译Encoder-DecoderHelsinki-NLP/opus-mt、mBART
文本摘要长文压缩、新闻摘要Encoder-DecoderBART、T5
生成式问答基于段落生成答案Encoder-DecoderT5、BART
Embedding 生成向量检索、RAGEncoder-OnlyBGE、E5、text-embedding-ada

实用原则:

  • 任务标注数据充足 + 任务明确 → 选专门架构微调,更高效
  • 任务多变 + 追求零样本/少样本能力 → 选 Decoder-Only 大模型
  • 资源受限(本地 CPU 推理)→ 选 DistilBERT 或 T5-small
  • 中文任务 → BERT 系选 MacBERT 或 chinese-roberta-wwm;生成选 Qwen

现代 LLM 的架构改进

原始 Transformer 的设计在扩展到百亿、千亿参数规模时,暴露了几个工程问题。现代大模型(LLaMA、Mistral 等)对原始设计做了几处关键改动。

RoPE:旋转位置编码

改了什么:替代原始 Transformer 的绝对位置编码(正弦/余弦固定向量)。

为什么改:绝对位置编码的最大序列长度在预训练时固定,无法外推到更长的序列。RoPE(Rotary Position Embedding)把位置信息编码到 Query 和 Key 的旋转矩阵中,通过相对位置计算注意力,对序列长度的外推能力更好,且与注意力机制耦合更紧密。

LLaMA、Mistral、Qwen 等都使用 RoPE。

RMSNorm:均方根归一化

改了什么:替代 LayerNorm(Layer Normalization)。

为什么改:LayerNorm 同时计算均值和方差进行归一化。RMSNorm 去掉均值中心化步骤,只用均方根(Root Mean Square)归一化,计算量更小,实验表明效果与 LayerNorm 相当甚至更好。LLaMA、Mistral、Qwen 均使用 Pre-RMSNorm(归一化放在残差连接之前)。

SwiGLU:门控激活函数

改了什么:替代 FFN 层中的 ReLU 激活函数。

为什么改:SwiGLU = Swish + GLU(Gated Linear Unit),用门控机制控制信息流动,表达能力更强。实验(PaLM、LLaMA 论文)表明,在相同参数量下,SwiGLU 比 ReLU 和 GeLU 都有稳定的性能提升。代价是 FFN 层多一个线性变换,实际实现时通常把 FFN 隐层维度从 4x 调整到 ~2.67x 来保持总参数量不变。

GQA:分组查询注意力

改了什么:替代标准多头注意力(MHA)中”每个头独立 KV”的设计。

为什么改:推理时 KV Cache 占用大量显存。标准 MHA 有 H 个 Query 头,也有 H 个 Key/Value 头。GQA(Grouped Query Attention)把 H 个 Query 头分成 G 组,每组共享一组 KV,KV 头数量从 H 降到 G(G << H)。这直接减少了 KV Cache 的大小,显著降低推理时的显存占用和 I/O 压力。LLaMA 3、Mistral 均使用 GQA。

MHA → MQA(极端情况,1 个 KV 头) → GQA(折中,G 个 KV 头)是一条工程演进路线,GQA 在质量和效率之间取得了较好的平衡。


这四处改动是当前主流开源大模型的标配。理解”改了什么”和”为什么改”,有助于读懂 LLaMA、Mistral 等模型的源码和论文。第 9 章讨论推理优化时,KV Cache 和 GQA 会再次出现,届时会从工程实现角度深入展开。

Last updated on