Ch.03
Transformer 谱系:编码器(BERT)vs 解码器(GPT)
Transformer 这一伟大发明大体分成两支家族。一眼读完整句的 编码器家族 BERT(理解型) ,以及由前面词不断接龙下一个词的 解码器家族 GPT(生成型) 。若说 BERT 擅长“高考语文填空推理”,GPT 就是“接龙与写小说”的天才。本章说明两种模型如何训练,以及为何在实务中用途截然不同,并用初学者能懂的类比加以整理。
如何读公式
是输入 token 表示的起点。 提供词语语义, 提供位置信息,所以模型从第一层就同时接收“是什么词”和“在什么位置”。 是 self-attention 的核心公式。先用 计算相关性,再用 稳定尺度,最后按 softmax 权重混合 得到上下文表示。 是 BERT 的 MLM 目标。模型在遮盖位置集合 上预测真实 token ,从而学习利用双向上下文。 是 GPT 的下一 token 目标。每一步只依赖历史 token ,因此可以进行自回归生成,并通过因果掩码避免未来信息泄露。
BERT 看整句 建表示;GPT 只用已生成 token 追加下一个。
概念结构:编码器(理解)vs 解码器(生成)
I love deep learning 的 token 关系
BERT
双向: 每个 token 都可关注全部 token
左侧迷你图是对 Multi-Head Attention 的简化表达。多个头并行关注不同关系,再将结果合并(Concat + Projection),形成双向上下文表示。
GPT
因果: 当前 token 仅关注左侧(过去)token
未来屏蔽
右侧是 Masked Multi-Head Attention。结构与多头注意力相同,但加入因果掩码,使当前位置不能看到未来 token,从而支持自回归(next-token)训练。
BERT 系
学习流程:分词→掩码/目标→堆块→头
① 编码器(BERT):token 双向 互相关注
GPT 系
屏蔽未来 token
② 解码器(GPT):只看左侧 预测下一格
模型行为:双向向量 vs 自回归生成
③ 训练目标:MLM(掩码复原)vs 下一 token 对数似然
④ 推理:分类/嵌入 vs 提示驱动的 token 生成
BERT 系
学习流程:分词→掩码/目标→堆块→头
① 编码器(BERT):token 双向 互相关注
GPT 系
屏蔽未来 token
② 解码器(GPT):只看左侧 预测下一格
模型行为:双向向量 vs 自回归生成
③ 训练目标:MLM(掩码复原)vs 下一 token 对数似然
④ 推理:分类/嵌入 vs 提示驱动的 token 生成
Transformer 谱系:BERT 理解,GPT 生成
1. BERT:双向阅读、重在“理解”的编码器
概念: BERT(Bidirectional Encoder Representations from Transformers)只发展 Transformer 的 编码器。核心是 双向(Bidirectional)上下文:同时参考左右词,把当前词在句中最准确的含义压进 表示向量。
直觉: 像名医问诊时把既往(左)与今日检查(右)同时摊开综合判断——一次看清全局,上下文把握更强。
数学: 代表训练法是 MLM(掩码语言建模) :在句中挖洞(`[MASK]`),用周围上下文去拟合正确 token 的分布 。
应用: “这条评论正还是负?”“从文里找人名和日期?”等文本分类、命名实体识别、文档检索等场景大量使用。
2. GPT:不断“生成”下一个词(解码器)
概念: GPT(Generative Pre-trained Transformer)发展的是 解码器。模型不能一眼看完整句:用 掩码 遮住未来词,只能看 已出现的词() 来预测第 个词——自回归(Autoregressive)。
直觉: 像打字机写小说——还没写下的下一句不能先看,只能根据已写内容想象下一个词。
数学: 为防止未来信息泄漏,用 因果掩码(Causal Masking) 把注意力矩阵上三角置为 。训练最大化 。
应用: 聊天回复、邮件草稿、代码补全等一切要 “写出新东西” 的任务。
3. 训练目标:填空 vs 接龙
概念: 骨架不同,练法也不同。BERT 为深学 表示(Representation) ,挖空靠周边提示去猜;GPT 为强化 生成(Generation) ,只看前面把句子接下去。
直觉: BERT 训练营发 “我昨天在[MASK]吃饭” 让你猜空里是不是“餐厅”;GPT 只给你 “我昨天在餐厅……” ,逼你一直往下编。
4. 推理差异:一次判读 vs 流式生成
概念: 上线后用户体验也不同。BERT 整句进来,一次前向就算出各位置的语义向量;GPT 收到提示后产出一个词,再喂回去继续产下一个,字串流式吐出。
直觉: BERT 像 扫描仪 扫完一页就出标签;GPT 像 同声传译 或打字机一字一字接——输出越长,算力与时间往往越长。
为何重要
因地制宜:搞清模型“专业”才不容易翻车
常见误区是“GPT 很火,什么都用它”。若只做评论正负分类,上巨大 GPT 是 杀鸡用牛刀;让 BERT 写诗也会离谱。搞清谱系才能 在成本与性能间选对架构。
掩码规则决定安全性与性格
GPT 的因果掩码是在守 生成的规矩。股价或欺诈日志里,要防止“偷看未来再判过去”的 数据泄漏,时间顺序约束很关键;而基于已发生的全记录做归因分析时,双向 BERT 往往更合适。
流水线入口不同(分类头 vs 提示)
微调方式也不同:BERT 常在模型顶端加小 分类器;GPT 更常靠 提示工程 或对话式 指令微调,少动骨干结构。
抑制幻觉的设计锚点
生成模型会 幻觉。实务里常用 BERT 类理解模型从内部文档 检索 准确依据,再让 GPT 依据依据 生成——RAG 兼取两家之长。
如何使用
实务(BERT):先嵌入再接头
BERT 把文本压成 嵌入向量。例如垃圾邮件:整封邮件过 BERT,取 `[CLS]` 代表向量,再过一层逻辑回归或线性 头 得到 0–1 概率——快且准,适合后端大批量实时分类。
实务(GPT):链式生成要“缰绳”
上线 GPT 需要 缰绳 防跑偏。开发者调 温度(创意 vs 稳妥)、Top-k / Top-p(只在高概率词里选)。代码补全倾向 低温;营销文案可 升温 换创意。
成本与 GPU 算力差异
BERT 级模型常只有几百 MB~数 GB,一块便宜 GPU 甚至 CPU 能跑;GPT 级大模型动辄数十~数百 GB,输出字数 越长,算力与延迟 陡增,做预算必算这笔账。
调试策略:先分清哪类故障
分类(BERT)差:数据噪声、标注错、容量不足;聊天(GPT)胡扯:提示不清、幻觉、上下文 给不够。按线排查。
总结
Transformer 分作两支大家:BERT 型编码器 双向读句、学富 表示;GPT 型解码器 只看左侧、不断 生成 下一 token——像填空与接龙。训练上 BERT 常用 MLM 填掩码,GPT 在 因果掩码 下最大化 下一词似然。部署时 BERT 常 一次打分/嵌入 固定输入;GPT 从提示 逐 token 堆长输出,越长越慢。现代产品常二者混用:编码器做 检索,解码器写 草稿,RAG 压 幻觉。
习题说明
小结 — BERT(编码器家族)以 双向理解与表示 为核心,GPT(解码器家族)以 只看左侧的自回归生成 为核心。BERT 用 MLM 等学上下文嵌入;GPT 用 接龙。推理上 BERT 更接近 一次读出向量;GPT 更接近 流式拉长 token。
- 类型BERT 系
- 提示(关键词→思路)仅编码器、双向上下文、表示学习 → 找 “encoder/理解”
- 类型GPT 系
- 提示(关键词→思路)解码器、因果掩码、下一 token 预测 → 找 “generation/自回归”
- 类型MLM
- 提示(关键词→思路)掩码一部分并复原;损失在掩码位置 → 训练目标
- 类型Causal LM
- 提示(关键词→思路) 左条件 → 生成训练
- 类型掩码
- 提示(关键词→思路)屏蔽未来位置(如注意力中 )→ 防偷看
- 类型迁移
- 提示(关键词→思路)BERT:分类头;GPT:提示/指令微调 → 产品形态
| 类型 | 提示(关键词→思路) |
|---|---|
| BERT 系 | 仅编码器、双向上下文、表示学习 → 找 “encoder/理解” |
| GPT 系 | 解码器、因果掩码、下一 token 预测 → 找 “generation/自回归” |
| MLM | 掩码一部分并复原;损失在掩码位置 → 训练目标 |
| Causal LM | 左条件 → 生成训练 |
| 掩码 | 屏蔽未来位置(如注意力中 )→ 防偷看 |
| 迁移 | BERT:分类头;GPT:提示/指令微调 → 产品形态 |
示例(概念)
“最接近典型 BERT 结构?”
① 堆编码器双向
② 仅解码器
③ 仅卷积 → 1
“正弦 PE 偶数维 通常放什么?”
①
②
③ ReLU → 1
“最符合 GPT 训练?”
① 仅注意力混合
② 自回归下一 token LM(只看左侧)
③ 缩短序列 → 2
“, ,自然 ?”
① 256
② 512
③ 64 → 2
“最接近可学习位置嵌入?”
① 每位置加可学习向量
② 只用
③ 不用位置 → 1
“顺序影响标签时,与注意力一起保留的输入?”
① token 嵌入+位置
② 仅像素
③ 仅文件名 → 1
示例(判断) 加性 PE 通常加到 token 嵌入上 → 1
示例(情景) 用药顺序重要→先加强
① 嵌入+PE → 1
示例(投票) [1,1,0,1,0] 中 1 的个数 → 3
示例(聚合) [2,1,2] 之和 → 5
示例(结构) 注意力分数矩阵元素数 → 100
示例(深度) 堆层目的最接近?
① 分层抽象 → 1