GPT 和 BERT 的架构及训练目标有什么区别?
简化版
BERT 是 Transformer Encoder,用掩码语言建模(MLM) 学习双向上下文,擅长理解类任务(分类、抽取、匹配);GPT 是 Transformer Decoder,用因果语言建模(预测下一个 token) 做单向自回归生成,擅长生成、对话。核心差异就两点:注意力可见范围(双向 vs 只看左侧)和预训练目标(还原被遮的词 vs 预测下一个词)。这两点决定了 BERT 天生擅理解、GPT 天生擅生成,也决定了通用大模型走了 GPT 这条 decoder-only 路线。
详细版
| 维度 | BERT | GPT |
|---|---|---|
| 主体结构 | Transformer Encoder | Transformer Decoder |
| 注意力范围 | 双向,可看左右全文 | 单向因果,只看当前位置及之前 |
| 训练目标 | 掩码语言建模 MLM | 预测下一个 token(CLM) |
| 监督信号密度 | 只对被遮的 ~15% token 算损失 | 每个 token 都是预测目标 |
| 典型任务 | 分类、抽取、语义匹配 | 生成、问答、对话 |
| 生成能力 | 不擅长(无自回归) | 天生擅长 |
BERT 随机遮住部分 token,根据两侧上下文恢复,学到双向表示;但训练用的 [MASK] 符号在真实输入里几乎不出现,存在训练/使用不一致。GPT 在每个位置预测下一个 token,训练目标和逐 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 ✓ ✓ ✓ ✓
理解一段完整文本时,双向信息有优势(判断某词含义能参考它后面的词);生成文本时必须从左到右,不能看未来(否则就”作弊看答案”)。这就注定了 BERT 长于理解、GPT 长于生成——不是谁更强,而是可见范围不同。
二、BERT 怎么训练:完形填空
BERT 的核心目标是掩码语言建模(MLM):随机遮住约 15% 的 token,让模型用双向上下文还原。例如:
输入: 巴黎 是 法国 的 [MASK]
目标: 还原 [MASK] = 首都
这样学到的是上下文相关的双向表示,非常适合分类、命名实体识别、语义匹配、抽取式问答。原始 BERT 还有「下一句预测(NSP)」目标,但后续(如 RoBERTa)发现它作用有限,多被移除——MLM 才是核心。
MLM 有个固有短板:训练/使用不一致——训练时输入里有大量 [MASK],真实推理时却没有;而且只对被遮的 ~15% token 算损失,监督信号稀疏。这两点为后来 GPT 路线的胜出埋下伏笔。
三、GPT 怎么训练:文字接龙
GPT 用因果语言建模(CLM):给定前缀 x₁…xₜ,预测 xₜ₊₁,损失是下一个 token 的交叉熵:
L = − Σ_t log P(x_{t+1} | x_1 … x_t)
训练时靠因果掩码一次并行算出所有位置的预测(每个位置看不到自己的未来);真实生成时没有未来 token,只能逐个采样、把新 token 接回上下文再生成下一个。
它有两个 BERT 没有的优势:
- 监督信号密集:简要说里每个 token 都是预测目标,1000 词提供近 1000 个信号;MLM 只用被遮的 ~15%,学习效率更低。
- 训练与生成一致:训练就是「预测下一个词」,生成也是,无
[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 分别编码查询和文档。
易错点:GPT 生成时看不到「未来要生成的 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 单向”太薄;能进一步说明为什么双向适合理解、因果适合生成,答案才算闭环。
八、常见误区与追问
- 误区:把「GPT 和 BERT 的架构及训练目标有什么区别?」背成名词解释就算掌握。 面试官通常会追问边界、代价和工程取舍,只会定义很容易在第二问暴露理解断层。
- 追问:这个机制主要解决什么问题? 要先说清它对应的痛点,再说明为什么大模型规模变大后这个痛点会被放大。
- 误区:参数调一调就能补齐模型能力。 解码、窗口或提示只能改变使用方式,不能凭空增加模型没有学到的知识和推理能力。
- 追问:线上系统应该怎样验证效果? 至少要看准确率、延迟、成本、稳定性和失败样例,而不是只看一次演示是否回答得漂亮。
- 误区:模型输出流畅就代表事实正确。 大模型擅长生成高概率文本,事实可靠性还需要检索、工具调用、引用证据和后处理校验共同保证。
九、加强记忆
BERT 像做完形填空(双向可见、还原被遮词、擅理解、只监督 15%),GPT 像文字接龙(因果单向、预测下一个词、擅生成、每 token 都监督、训练与生成一致)。两点本质差异钉死:注意力可见范围(双向 vs 只看左)+ 预训练目标(MLM vs 预测下一个词)。通用大模型选 GPT 路线,是因为信号密集 + 任务统一 + 上下文学习涌现 + 结构易扩展 + KV Cache 高效;而 BERT 在检索/嵌入上仍有一席之地——这是常被忽略的加分认知。