GPT 和 BERT 的架构及训练目标有什么区别?
简化版
BERT 是 Transformer Encoder,以掩码语言建模学习双向表示,常用于分类、抽取和匹配;GPT 是 Decoder-only Transformer,以因果语言建模逐 token 生成。核心差异是注意力可见范围与预训练目标,这使二者分别更直接适配编码理解和开放式生成,但不表示 Encoder 不能参与生成系统,也不表示 Decoder-only 不能完成分类任务。
详细版
| 维度 | BERT | GPT |
|---|---|---|
| 主体结构 | Transformer Encoder | Transformer Decoder |
| 注意力范围 | 双向,可看左右全文 | 单向因果,只看当前位置及之前 |
| 训练目标 | 掩码语言建模 MLM | 预测下一个 token(CLM) |
| 监督信号密度 | 只对被遮的 ~15% token 算损失 | 每个 token 都是预测目标 |
| 典型任务 | 分类、抽取、语义匹配 | 生成、问答、对话 |
| 生成能力 | 不擅长(无自回归) | 天生擅长 |
BERT 随机选择部分 token 作为预测目标,根据两侧上下文恢复,学到双向表示;原始 BERT 的替换策略并非全部换成 [MASK],但预训练扰动与下游原始输入之间仍存在差异。GPT 在每个位置预测下一个 token,目标与自回归生成一致,并可把许多任务表述为文本续写,更容易复用统一生成接口。
完整版教学
一、可见范围决定天然能力
一切差异的起点是注意力掩码。Encoder 不加因果掩码,每个 token 能同时看到左右;Decoder 加因果掩码,位置 t 只能看 0…t。用可见性矩阵看最直观(✓=可见):
双向(BERT) 因果(GPT)
t1 t2 t3 t4 t1 t2 t3 t4
t1 ✓ ✓ ✓ ✓ t1 ✓ · · ·
t2 ✓ ✓ ✓ ✓ t2 ✓ ✓ · ·
t3 ✓ ✓ ✓ ✓ t3 ✓ ✓ ✓ ·
t4 ✓ ✓ ✓ ✓ t4 ✓ ✓ ✓ ✓
理解完整文本时,双向信息有利于构造每个位置的上下文表示;自回归生成则必须按概率分解从左到右预测,不能读取尚未生成的未来 token。这使 BERT 更直接地产生双向编码表示,GPT 更直接地定义生成分布;实际效果仍取决于规模、数据和微调方式。
二、BERT 怎么训练:完形填空
BERT 的核心目标是掩码语言建模(MLM):随机遮住约 15% 的 token,让模型用双向上下文还原。例如:
输入: 巴黎 是 法国 的 [MASK]
目标: 还原 [MASK] = 首都
这样学到的是上下文相关的双向表示,非常适合分类、命名实体识别、语义匹配、抽取式问答。原始 BERT 还有「下一句预测(NSP)」目标,但后续(如 RoBERTa)发现它作用有限,多被移除——MLM 才是核心。
MLM 的一个代价是预训练输入包含人工扰动,而下游原始文本通常没有;同时损失只落在被选中的预测位置,单个序列上的目标位置少于因果语言建模。不过这不等价于 BERT “学习效率必然更低”,训练效率还受双向信息、数据、目标设计和任务迁移影响。
三、GPT 怎么训练:文字接龙
GPT 用因果语言建模(CLM):给定前缀 x₁…xₜ,预测 xₜ₊₁,损失是下一个 token 的交叉熵:
L = − Σ_t log P(x_{t+1} | x_1 … x_t)
训练时靠因果掩码一次并行算出所有位置的预测(每个位置看不到自己的未来);真实生成时没有未来 token,只能逐个采样、把新 token 接回上下文再生成下一个。
它有两个 BERT 没有的优势:
- 目标位置密集:除边界外,序列中几乎每个 token 都参与下一 token 损失;MLM 只在被选中的位置计算恢复损失,但不能仅由目标数量推出总体学习效率。
- 训练与生成一致:训练就是「预测下一个词」,生成也是,无
[MASK]那种不一致。
预测下一个词这个简单目标,逼模型从海量文本里学会语法、事实、风格、任务格式——只要任务能写成「文本输入→文本输出」,就能复用同一个生成接口,再经指令微调和对齐变成对话助手。
四、“Decoder-only”到底去掉了什么
一个常见误解:GPT 是「Transformer 解码器的下半部分」。准确说,GPT 是带因果掩码的自注意力 + 前馈网络的堆叠,去掉了原始 encoder-decoder 里连接编码器的交叉注意力(因为没有独立的编码器要连)。所以它不是照搬原始 Decoder,而是「因果掩码的 Transformer 层」的堆叠——结构极其规整、同构,最利于放大和扩展。
五、为什么通用大模型选了 GPT 路线
把优势叠起来就明白 decoder-only 为何统治大模型:
- 训练信号密集(每 token 都预测)→ 数据利用率高。
- 任务大一统(万物皆续写)→ 一个模型通吃分类/翻译/问答。
- 规模化后涌现上下文学习(few-shot)→ 给几个例子就会做新任务。
- 结构同构简单 → 最契合 Scaling Law,越大越强。
- 因果掩码天然配 KV Cache → 推理高效。
但 BERT 系并未过时:检索/嵌入(句向量、RAG 的 embedding 模型) 上,双向 encoder(BERT、E5、BGE)在同规模下通常更强更省;数据充足的判别任务微调 BERT 也又快又好。现实是分工共存:生成与通用智能用 GPT 系,检索与轻量判别用 BERT 系。
六、如何选型
- 分类、实体抽取、语义匹配、向量表示 → Encoder(BERT 系)更直接经济;
- 对话、创作、代码、通用助手 → Decoder-only(GPT 系)更自然;
- 翻译、摘要等输入输出边界清晰的转换 → Encoder-Decoder(T5/BART)也很合适;
- 检索系统 → 常用双 Encoder 分别编码查询和文档。
易错点:生成第一个输出 token 的最后提示位置可以条件化于此前全部 Prompt;但 Prompt 内较早位置的隐藏状态仍遵守因果掩码,不能看其右侧 token。不能说整段 Prompt “不受因果掩码影响”。
七、面试拆解算例
基础题也可以用数字把差异讲实。以 BERT 和 GPT 的预训练为例,同样是 512 token 的文本,BERT 可以同时看左右两侧上下文,适合做理解类表示;GPT 只能看当前位置之前的 token,训练目标与生成过程一致,更适合自回归生成。这个差异不是“谁更高级”,而是训练目标和注意力掩码不同。
BERT: P(masked_token | left_context, right_context)
GPT : P(token_t | token_1 ... token_{t-1})
| 维度 | BERT 类模型 | GPT 类模型 |
|---|---|---|
| 注意力 | 双向可见 | 因果可见 |
| 训练目标 | masked language modeling | next token prediction |
| 擅长任务 | 分类、抽取、匹配 | 生成、对话、续写 |
| 推理方式 | 一次编码拿表示 | 逐 token 自回归生成 |
BERT: [左文] <mask> [右文] -> 预测 mask
GPT : [已生成 token] ------> 预测下一个 token
所以回答「GPT 和 BERT 的架构及训练目标有什么区别?」时,要把结构、目标和任务形态串起来。只说“BERT 双向、GPT 单向”太薄;能进一步说明为什么双向适合理解、因果适合生成,答案才算闭环。
八、常见误区与追问
- 误区:BERT 只是不能生成文本的 GPT。 BERT 用双向编码和掩码目标学习上下文表示,GPT 用因果掩码预测下一个 token,信息流和训练目标不同。
- 误区:GPT 在所有 NLP 任务上都优于 BERT。 分类、检索编码等场景中,双向 Encoder 可用更低推理成本得到稳定表示,选型取决于任务。
- 误区:把 BERT 改成更大就会自然获得自回归生成能力。 双向 MLM 不学习从左到右的生成分解,生成能力需要匹配的注意力掩码和训练目标。
- 追问:为什么 BERT 分类常用 [CLS]? 该位置经过双向注意力聚合整段信息,微调时可把其表示接分类头,但也可用 pooling 替代。
- 追问:如何为同一业务比较两者? 固定数据与指标,比较分类/生成质量、延迟、显存和部署复杂度,不用参数规模直接判胜负。
九、加强记忆
BERT 像做完形填空:双向可见,在被选中的位置恢复 token,适合学习编码表示;GPT 像文字接龙:因果可见,在各位置预测下一个 token,天然定义生成分布。回答时钉住“可见范围 + 训练目标”,再说明这是任务适配倾向而非绝对能力边界。Decoder-only 便于统一生成接口和扩展,Encoder 则仍广泛用于检索、嵌入与低成本判别任务。