【NLP 技术专栏 · 第二篇】从 Transformer 到 BERT、GPT:三种架构的分道扬镳
NLP 技术专栏 · 第二篇
第一篇我们拆解了完整的 Transformer。这一篇来看:同一棵大树如何分出三条枝干——Encoder-Decoder、Encoder-Only、Decoder-Only,以及它们各自的代表作和适用场景。
一、回顾:完整的 Transformer 长什么样?
先快速回忆第一篇的架构:
┌──────────┐ ┌──────────┐
│ Encoder │──────────────│ Decoder │
│ (6层) │──Cross-Attn──│ (6层) │
└──────────┘ └──────────┘
双向 Self-Attn Masked Self-Attn + Cross-Attn
输入: 源序列 输出: 目标序列(自回归生成)
用途: 理解输入 用途: 生成输出
原文用于机器翻译:Encoder 读源语言,Decoder 逐词生成目标语言。
但并非所有 NLP 任务都需要这样的完整结构。于是,研究者们开始做减法:
完整 Transformer (2017)
├── Encoder-Decoder → T5, BART
├── Encoder-Only → BERT
└── Decoder-Only → GPT, GPT-2/3, LLaMa
二、三种架构的直观对比
2.1 一张图看清差异
═══════════════════════════════════════════════════════════════════
Encoder-Decoder (T5, BART)
═══════════════════════════════════════════════════════════════════
输入 → [Encoder] → [Cross-Attn] → [Decoder] → 输出
双向注意力 桥梁 因果注意力
特点: Encoder "理解"输入,Decoder "生成"输出
任务: 翻译、摘要、文本生成(有明确输入→输出结构)
═══════════════════════════════════════════════════════════════════
Encoder-Only (BERT)
═══════════════════════════════════════════════════════════════════
输入 → [Encoder] → 分类头/标注头 → 输出
双向注意力
特点: 每个位置都能看到所有其他位置(双向)
任务: 分类、NER、问答(理解类任务)
═══════════════════════════════════════════════════════════════════
Decoder-Only (GPT, LLaMa)
═══════════════════════════════════════════════════════════════════
输入 → [Decoder] → 下一个token的概率
因果注意力(只能看到左边)
特点: 逐词生成,每一步只能看到之前的 token
任务: 文本生成、对话、代码生成(生成类任务)
2.2 注意力模式:最本质的区别
三种架构差异的核心就是注意力能看到什么:
Encoder-Only (BERT):
"猫 坐 在 垫子 上"
↓ ↓ ↓ ↓ ↓ 每个词都能看到全部(双向)
注意力矩阵(全连接):
猫 坐 在 垫子 上
猫 [ ✓ ✓ ✓ ✓ ✓ ]
坐 [ ✓ ✓ ✓ ✓ ✓ ]
在 [ ✓ ✓ ✓ ✓ ✓ ]
垫子[ ✓ ✓ ✓ ✓ ✓ ]
上 [ ✓ ✓ ✓ ✓ ✓ ]
Decoder-Only (GPT):
"猫 坐 在 垫子 上"
↓ ↓ ↓ ↓ ↓ 每个词只能看到左边(因果/自回归)
注意力矩阵(下三角):
猫 坐 在 垫子 上
猫 [ ✓ - - - - ]
坐 [ ✓ ✓ - - - ]
在 [ ✓ ✓ ✓ - - ]
垫子[ ✓ ✓ ✓ ✓ - ]
上 [ ✓ ✓ ✓ ✓ ✓ ]
Encoder-Decoder (T5):
Encoder: 双向(同 BERT)
Decoder: 因果(同 GPT)+ Cross-Attention(关注 Encoder 输出)
这带来了一个根本性的权衡:
| 双向(Encoder) | 因果(Decoder) | |
|---|---|---|
| 看到的信息 | 完整上下文 | 仅左侧上下文 |
| 适合的任务 | 理解:分类、匹配、抽取 | 生成:写作、对话、翻译 |
| 训练目标 | Masked LM(完形填空) | Next Token Prediction(接龙) |
| 推理方式 | 一次前向传播 | 自回归(逐步生成) |
三、Encoder-Only:BERT 的诞生
3.1 为什么叫 BERT?
BERT = Bidirectional Encoder Representations from Transformers
名字就说明了一切:用 Transformer 的 Encoder 部分,做双向的语言表示。
Google 2018 年发布,一出场就在 11 个 NLP 任务上刷新了记录。
3.2 核心创新:预训练 + 微调范式
BERT 证明了一件事:
先在海量无标注文本上预训练一个"通才",再在具体任务上微调成"专才"。
阶段一: 预训练(Pre-training)
数据: 维基百科 + 图书语料(约 33 亿词)
目标: 两个自监督任务(不需要人工标注)
├── Masked Language Model (MLM)
└── Next Sentence Prediction (NSP)
阶段二: 微调(Fine-tuning)
数据: 具体任务的标注数据(通常少得多)
方式: 在 BERT 顶部加一个任务特定的输出层
3.3 Masked Language Model(MLM)
BERT 的预训练方式非常巧妙:
原始句子: "我 今天 去 银行 取 钱"
掩码后: "我 今天 去 [MASK] 取 钱"
任务: 预测 [MASK] 位置的词 → "银行"
MLM 的具体操作:
- 随机遮盖 15% 的 token
- 其中 80% 替换为 [MASK]
- 其中 10% 替换为随机词
- 其中 10% 保持不变
- 模型需要预测被遮盖的原始词
为什么要这么设计?
- 双向上下文:预测一个词需要同时看左边和右边,天然支持双向理解
- 自监督:不需要人工标注,直接用文本自身构造训练信号
- 深层理解:不是简单地统计词频,而是需要真正"理解"语义
和 GPT 的对比:
GPT (自回归): "我 今天 去 银行" → 预测 "取"
只用左边上下文预测下一个词
BERT (完形填空): "我 今天 去 [MASK] 取 钱" → 预测 "银行"
用左右两边的上下文预测被遮盖的词
3.4 BERT 的输入设计
BERT 的输入支持单句和句子对两种格式:
输入格式: [CLS] + 句子A + [SEP] + 句子B + [SEP]
示例(句子对任务):
[CLS] 今天天气真好 [SEP] 我们出去玩吧 [SEP]
示例(单句任务):
[CLS] 这个电影非常好看 [SEP]
每个输入由三部分嵌入相加得到:
Token Embedding + Segment Embedding + Position Embedding
3.5 BERT 模型结构
# BERT-Base 的配置(最常用的版本)
bert_config = {
"vocab_size": 30522, # 词表大小
"hidden_size": 768, # 隐层维度(d_model)
"num_layers": 12, # Encoder 层数
"num_heads": 12, # 注意力头数
"intermediate_size": 3072, # FFN 隐层维度(4 × 768)
"max_position_embeddings": 512, # 最大序列长度
}
# 参数量: ~110M
# 对比: 原始 Transformer Base ~65M
3.6 下游任务微调
BERT 之所以流行,是因为同一个模型可以微调到各种不同的任务:
任务1: 文本分类(情感分析)
[CLS] 这部电影太棒了 [SEP]
↓
BERT Encoder
↓
取 [CLS] 的隐状态 → Linear → softmax → 正面/负面
任务2: 序列标注(命名实体识别)
[CLS] 张 三 在 北京 工作 [SEP]
↓
BERT Encoder
↓
每个 token 的隐状态 → Linear → B-PER I-PER O B-LOC O
任务3: 阅读理解(抽取式问答)
问题: [CLS] 北京是哪个国家的首都 [SEP]
文章: [CLS] ... 北京 是 中华人民共和国 的 首都 ... [SEP]
↓
BERT Encoder
↓
预测答案在文章中的起始和结束位置
3.7 BERT 的局限
- 无法做生成任务:BERT 的 MLM 预训练不支持自回归生成,不能直接用来写文章或对话
- 预训练和微调的 gap:预训练时 [MASK] 出现在输入中,但微调时没有 [MASK],造成不一致
- 计算效率:双向注意力的计算量大,推理时无法缓存(不像 GPT 可以 KV Cache)
- 序列长度限制:原版最大 512 个 token,处理长文档需要截断
四、Decoder-Only:GPT 的道路
4.1 GPT 的核心思想
GPT = Generative Pre-trained Transformer
OpenAI 的选择和 BERT 截然不同:只用 Transformer 的 Decoder 部分,做自回归的语言建模。
GPT 的预训练目标(和 BERT 的关键区别):
给定: "今天 天气 真好,我们"
预测: "天气" "真" "好" "," "我们" "出去"
↑ ↑ ↑ ↑ ↑ ↑
第2词 第3词 ... 逐步预测下一个词
每个位置的损失:
P(天气 | 今天) + P(真 | 今天,天气) + P(好 | 今天,天气,真) + ...
这就是 Next Token Prediction(下一个词预测),也叫 Causal Language Modeling
4.2 和 BERT 的对比
| 维度 | BERT (Encoder-Only) | GPT (Decoder-Only) |
|---|---|---|
| 注意力 | 双向(看左右) | 因果(只看左边) |
| 预训练目标 | MLM(完形填空) | Next Token Prediction |
| 擅长任务 | 理解:分类、匹配、抽取 | 生成:续写、对话、代码 |
| 推理方式 | 一次前向传播 | 自回归逐步生成 |
| 微调方式 | 加分类头,微调整个模型 | Few-shot / 微调 |
| 模型大小趋势 | 亿级参数 (110M-340M) | 亿→万亿参数 (117M-175B+) |
4.3 GPT 的演进之路
GPT-1 (2018)
├── 12层 Decoder, 117M 参数
├── 证明了"预训练+微调"在 Decoder-Only 上同样有效
└── 在多个 NLP 任务上超越 BERT 之前的 SOTA
GPT-2 (2019)
├── 48层 Decoder, 1.5B 参数
├── 口号: "Language Models are Unsupervised Multitask Learners"
├── 核心发现: 模型够大、数据够多,不需要微调也能做各种任务
└── 代码和模型一开始不敢公开,怕被滥用
GPT-3 (2020)
├── 96层 Decoder, 175B 参数
├── "Few-shot Learning":给几个例子,模型就能学会新任务
├── 不改参数,只改 prompt 就能切换任务
└── 开启了 Prompt Engineering 时代
ChatGPT / GPT-4 (2022-2023)
├── 加入 RLHF(人类反馈强化学习)
├── 指令跟随 + 对话能力大幅提升
└── 多模态能力(图像理解)
4.4 为什么 Decoder-Only 成了大模型时代的主流?
直觉上,双向(BERT)应该比单向(GPT)更强大,因为它能看到更多信息。但实践证明 Decoder-Only 在大规模场景下反而更强,原因有几个:
1. 统一的训练目标
Encoder-Only (BERT): 预训练是 MLM,微调时要换成分类/序列标注
→ 预训练和下游任务存在 gap
Decoder-Only (GPT): 预训练是 Next Token,推理也是 Next Token
→ 训练和推理完全一致,没有 gap
→ 所有任务都可以转化为"给文本续写"
2. Scaling Law 的受益者
OpenAI 的研究表明:模型越大、数据越多,损失按幂律下降。Decoder-Only 的简单目标让 scaling 更高效。
简单的目标 × 海量的数据 × 超大的模型 = 涌现出复杂能力
"Write me a poem about the sea"
→ 模型从未被专门训练写诗
→ 但见过足够多的诗歌文本
→ 自然学会了"续写"诗歌
3. KV Cache:推理效率的关键
Decoder-Only 的因果注意力有一个巨大的工程优势——KV Cache:
生成第 t 个 token 时:
Q_t: 只需当前 token 的 Query
K_1..t, V_1..t: 之前所有 token 的 Key/Value 可以缓存复用!
不用每次都重新计算前面 token 的 K、V
推理速度大幅提升
Token 1: 计算 K₁, V₁ → 缓存
Token 2: 计算 K₂, V₂ → 追加缓存, 复用 K₁, V₁
Token 3: 计算 K₃, V₃ → 追加缓存, 复用 K₁K₂, V₁V₂
...
BERT 的双向注意力无法使用这种缓存,因为每次推理都要看完整个序列。
五、Encoder-Decoder:T5 和 BART
5.1 保留完整结构的思路
T5(Text-to-Text Transfer Transformer,Google 2019)和 BART(Facebook 2019)保留了完整的 Encoder-Decoder 结构,但改变了预训练方式。
5.2 T5:一切皆为文本到文本
T5 的核心思想:把所有 NLP 任务都统一为"文本输入 → 文本输出"。
翻译: "translate English to German: That is good" → "Das ist gut"
情感分析: "sentiment: This movie is great!" → "positive"
摘要: "summarize: [长文章]" → "[摘要文本]"
问答: "question: 北京是哪国首都? context: 北京是中华人民共和国首都" → "中华人民共和国"
预训练目标: Span Corruption(破坏 span 并修复)
输入: "The <X> sat on <Y>"
输出: "<X> cute dog <Y> the mat"
随机遮盖连续的 token span(不只是单个词)
Encoder 看到输入(含占位符)
Decoder 生成被遮盖的内容
5.3 BART:去噪自编码
BART 的预训练方式更灵活,尝试了多种噪声:
噪声方式 输入 目标
─────────────────────────────────────────────────────────────────
Token Masking "The [M] sat on [M]" "The cat sat on the mat"
Token Deletion "The sat on " "The cat sat on the mat"
Text Infilling "The <X> on the mat" "The cat sat on the mat"
Sentence Permut. "sat the mat on The cat" "The cat sat on the mat"
Document Rotation"cat sat on the mat The" "The cat sat on the mat"
5.4 Encoder-Decoder 的优势与劣势
优势:
✓ Encoder 的双向注意力 → 更好的输入理解
✓ Decoder 的自回归 → 支持生成
✓ Cross-Attention → 明确的输入-输出对应关系
✓ 适合有明确输入输出结构的任务(翻译、摘要)
劣势:
✗ 比 Decoder-Only 复杂,参数效率相对低
✗ 预训练目标和推理目标有 gap(如 Span Corruption vs 生成)
✗ 在大规模场景下,表现往往不如同等规模的 Decoder-Only 模型
六、三种架构的深度对比
6.1 信息流对比
Encoder-Only (BERT):
┌───────────────────────────────┐
│ ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← │
│ → → → → → → → → → → → → → → → │
│ 双向信息流 │
└───────────────────────────────┘
优势: 充分利用上下文
代价: 无法自回归生成
Decoder-Only (GPT):
┌───────────────────────────────┐
│ → → → → → → → → → → → → → → → │
│ 单向信息流 │
└───────────────────────────────┘
优势: 自回归生成,KV Cache
代价: 只能利用左侧上下文
Encoder-Decoder (T5):
┌──────────────────┐ ┌──────────────────┐
│ ← ← ← ← ← ← ← ← ←│ │ → → → → → → → → │
│ → → → → → → → → →│ → │ 单向 + Cross-Attn │
│ 双向 Encoder │ │ Decoder │
└──────────────────┘ └──────────────────┘
优势: 兼顾理解和生成
代价: 参数量大,结构复杂
6.2 任务适配性
任务类型 最佳架构 原因
─────────────────────────────────────────────────────────
文本分类 Encoder-Only 双向理解,[CLS] 聚合
命名实体识别 Encoder-Only 双向理解,逐 token 标注
句子相似度 Encoder-Only 双向编码,语义匹配
文本生成 Decoder-Only 自回归,自然支持
对话系统 Decoder-Only 多轮对话本质是续写
机器翻译 Encoder-Decoder 需要理解源语言 + 生成目标语言
文本摘要 Encoder-Decoder 需要理解长文 + 生成短文
阅读理解 Encoder-Decoder 需要理解问题和文章 + 抽取/生成答案
代码生成 Decoder-Only 自回归生成代码
6.3 训练效率对比
| 维度 | Encoder-Only | Decoder-Only | Encoder-Decoder |
|---|---|---|---|
| 预训练目标 | MLM | Next Token | Span Corruption |
| 训练并行度 | 高(所有位置同时预测) | 低(因果依赖) | 中(Encoder 并行,Decoder 串行) |
| 推理方式 | 一次前向 | 自回归(逐步) | 自回归(逐步) |
| KV Cache | 不可用 | 可用 | 仅 Decoder 部分可用 |
| 参数效率 | 高 | 中 | 低(两套参数) |
6.4 规模化表现
模型规模 ↑ 的时候,三者的趋势:
小规模 (< 1B):
Encoder-Only (BERT) 最强
→ 双向信息在小模型上优势明显,MLM 目标信息密度高
中等规模 (1B - 10B):
各有千秋
→ Encoder-Decoder 在翻译等任务上仍有优势
→ Decoder-Only 在生成任务上开始领先
大规模 (> 10B):
Decoder-Only 全面领先
→ 简单目标 × 大数据 × 大模型 = 涌现能力
→ RLHF 等对齐技术更容易适配
→ KV Cache 的推理优势在大模型上更关键
这就是为什么当前的大模型(GPT-4、Claude、LLaMa、Gemini)几乎都是 Decoder-Only 架构。
七、从 BERT 到 LLaMa:演进脉络
7.1 时间线
2017 ─── Transformer (Attention Is All You Need)
│
2018 ─── ├── BERT (Encoder-Only, 双向, 预训练+微调)
├── GPT-1 (Decoder-Only, 自回归, 预训练+微调)
│
2019 ─── ├── GPT-2 (更大, 少样本学习初现)
├── T5 (Encoder-Decoder, 统一文本到文本)
├── BART (Encoder-Decoder, 去噪自编码)
│
2020 ─── ├── GPT-3 (175B, Few-shot, 涌现能力)
│
2021 ─── ├── Codex (代码生成)
│
2022 ─── ├── ChatGPT (RLHF 对齐)
├── InstructGPT
│
2023 ─── ├── GPT-4 (多模态)
├── LLaMa 1/2 (开源 Decoder-Only)
├── Claude (Constitutional AI)
├── Mistral
│
2024 ─── ├── LLaMa 3 (更大开源模型)
├── Claude 3.5
├── Gemini 1.5 (超长上下文)
│
2025 ─── ├── LLaMa 4, Claude 4, ...
└── 持续演进...
7.2 关键转折点
BERT 时代(2018-2020):预训练+微调是王道,Encoder-Only 是主流
GPT-3 转折(2020):证明了 Decoder-Only 在大规模下的涌现能力,不需要微调
ChatGPT 革命(2022):RLHF 让大模型变得真正可用,Decoder-Only 成为绝对主流
八、总结:没有银弹,只有权衡
8.1 选型指南
你需要做什么?
"理解文本" → Encoder-Only (BERT 及其变体)
- 情感分析、文本分类、NER、语义相似度
- 优势:双向理解,精确的语义表示
"生成文本" → Decoder-Only (GPT、LLaMa)
- 写作、对话、翻译、代码生成
- 优势:自回归生成,强大的涌现能力
"输入→输出的结构化转换" → Encoder-Decoder (T5、BART)
- 机器翻译、摘要、数据到文本
- 优势:明确的编码-解码分离
参考文献
- Devlin, J., et al. (2019). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL.
- Radford, A., et al. (2018-2020). GPT-1/2/3 系列论文. OpenAI.
- Raffel, C., et al. (2020). Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. JMLR.
- Lewis, M., et al. (2020). BART: Denoising Sequence-to-Sequence Pre-training. ACL.
更多推荐



所有评论(0)