← 总目录 / 板块三 · 语言模型的发展
板块三 · 语言模型的发展

第22篇 · BERT

用一道完形填空题,把双向上下文真正塞进每一层 Transformer——预训练+微调范式的巅峰之作
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding · Devlin, Chang, Lee, Toutanova(Google AI Language)· 2018(arXiv:1810.04805,NAACL 2019)· 原文

本页所有数字均复述自论文原文并注明小节出处;标注【解读者补充】的内容不来自论文。本站不做任何外部验证。

一、全局大图

摘要拆解对照表

摘要短语(意译)对应论文章节本页解读章节
与 ELMo、OpenAI GPT 不同,预训练深度双向表示,联合调节左右上下文§1 引言、§4.1 架构第2章
掩码语言模型(MLM),受完形填空启发§3.1、§3.3第3章
下一句预测(NSP)联合预训练文本对表示§3.2第4章
只需加一个输出层微调即可适配广泛任务§3.5 微调、§4 任务列表第6章
GLUE 80.5%(+7.7)、MultiNLI 86.7%(+4.6)、SQuAD v1.1 F1 93.2(+1.5)、SQuAD v2.0 F1 83.1(+5.1)摘要、§5.1–5.3第7章·批判性阅读
消融研究证明深度双向性是关键§5.5 消融第7章·批判性阅读

主要贡献与证据强度预评

推荐阅读路线

必读主线:引言 → §3.3 MLM → §3.4 NSP → §4 框架 → §5.1/5.2 主结果 → §5.5 消融。可跳读支线:§2 相关工作(若已熟悉 ELMo/GPT 可略);附录 A 各数据集细节。跳过消融研究的代价最大——你会误以为提升来自"更大的模型",而论文自己的证据说主要来自"双向预训练目标"。

二、逐章精读

第1章 问题设定:单向语言模型的"天生残疾"

来源:论文 §1 引言(第1页)。失效模式与类比部分为解读者补充。

学习目标:学完本章你应能——说出 feature-based 与 fine-tuning 两类方法的区别及各自代表;解释为什么"从左到右的语言模型"对句子级和词元级任务都次优;复述 BERT 的两步框架(预训练/微调)。

失效模式先行【解读者补充】:假设你要做抽取式问答。问题问"谁发明了电话",文章里写"贝尔于1876年发明了电话"。一个从左到右的模型在读到"贝尔"时,还完全看不到后面的"发明了电话"——它必须靠猜。GPT 式的单向注意力把这个约束硬编码进了每一层:第 k 层的"贝尔"永远只能看到它左边的词。ELMo 的拼接方案(左LSTM+右LSTM)看似双向,实则两个方向从未在同一层交互过。【实验支持】论文 §5.5 的消融显示:把 BERT 换成纯 LTR 版本,SQuAD F1 直接从 88.5 跌到 77.8——这正是这个"残疾"的量化代价。

直觉类比:单向语言模型像隔着一条单行道看风景——你只能记住走过的路,不能提前看到前方。类比在哪里失效:人至少还能"预期"前方内容,而 LTR 模型在第 t 步对未来 token 的信息量严格为零(被注意力掩码彻底切断);ELMo 则像两条单行道上各走各的两个人最后碰头交换笔记——信息融合发生在最末端而非逐层进行。

主张 vs 事实:【论文声称】两种既有方法(feature-based / fine-tuning)的局限都在于"预训练目标是单向的";【实验支持】§5.5 消融给出量化对比;【解读者推断】论文把"双向性"立为问题框架,使 MLM 成为框架内的自然答案——这是典型的写作动作,读者应意识到"NSP 是否必要""MLM 是否唯一的双向化方案"都是框架外的开放问题(XLNet 等后续工作即在此发力)。

一句话蒸馏:一句话记住本节——BERT 的全部动机可以压缩为一句反问:为什么预训练时要禁止模型看右边?

闭卷自检:不看材料,你能说出 ELMo、GPT、BERT 三者在"双向程度×使用方式"二维表中的位置吗?(ELMo=浅层拼接+feature-based;GPT=单向+fine-tuning;BERT=深层双向+fine-tuning。)

第2章 模型架构与输入表示:几乎没有新东西

来源:论文 §4.1、§4.2(第3–4页)。手算验证为解读者补充计算。

学习目标:学完本章你应能手算给定 (L,H,A) 的 Transformer 编码器参数量级;画出 BERT 输入嵌入的三部分组成;说出 [CLS]、[SEP] 标记的作用。

架构就是标准的 Transformer 编码器堆叠,记号:L=层数,H=隐藏维,A=注意力头数,前馈维=4H。两个规格(§4.1 表1):BERT_BASE:L=12, H=768, A=12, 参数 110M;BERT_LARGE:L=24, H=1024, A=16, 参数 340M。输入表示 = WordPiece 词元嵌入 + 位置嵌入 + 分段嵌入(标明属于句子 A 还是 B),词表 30,000(WordPiece,§4.2)。序列首 token 固定为 [CLS],其最终隐状态 C 用作分类任务的聚合表示;句对用 [SEP] 拼接成单序列。

公式手术 · 参数量估算

N ≈ L × ( 12·H² + 偏置项等 ) ≈ 12·L·H² (忽略嵌入层时的经典近似)
符号它是什么直觉
12·H²每层四个矩阵(Q/K/V/O 各 H×H)加上前馈层 2×H×4H=8H²,合计 4H²+8H²=12H²注意力占三分之一,前馈占三分之二——Transformer 的参数大头其实在 FFN 里
L层数参数随层数线性增长,但计算随层数线性、随序列长度平方增长

手算验证

BERT_BASE:12·L·H² = 12×12×768² ≈ 85.0M(非嵌入参数)。加上嵌入:词元嵌入 30000×768≈23.0M + 位置嵌入 512×768≈0.39M + 分段嵌入 2×768≈0.002M ≈ 23.4M。合计约 108.4M,与论文声称的 110M 在舍入误差内吻合【解读者补充计算,原文只给了总数 110M】。BERT_LARGE:12×24×1024² ≈ 302M + 嵌入(词表同为 30000×1024≈30.7M)≈ 333M,与声称的 340M 吻合。

数字对账

论文附录 A.1 指出 BERT 与 GPT 的关键差异之一:"GPT 训练 batch 为 32,000 词,BERT 为 128,000 词"。对账:BERT 的 batch 是 256 个序列 × 512 tokens = 131,072 tokens ≈ 128K 词 ✓ 自洽。另一个对账点:BERT_BASE 参数 110M vs Vaswani et al. 最大编码器 100M、当时文献中最大 Transformer 213M(§5.2 引述)——BERT_LARGE 340M 已超过此前公开报道的所有 Transformer,这解释了为何"模型大小消融"在当时具有冲击力。

常见误读1:"BERT 双向所以用了什么新注意力机制"。没有——用的就是标准自注意力,双向性来自去掉因果掩码+换掉训练目标,不是新结构。
常见误读2:"[CLS] 是通过特殊池化操作得到句子向量"。不是——C 只是第一个位置的最终隐状态,靠预训练中 NSP 任务的监督信号把它"逼成"了聚合表示。若不用 NSP 预训练,[CLS] 对分类未必友好。
常见误读3:"分段嵌入只有 0/1 两个取值所以没用"。它恰恰是句对任务(QA、NLI)统一处理的关键:自注意力同时编码拼接句对,等效包含了两个方向的交叉注意力(§4.6 论证)。

工程账单【解读者补充】:双向注意力缓解的是"表达能力"压力,新增的是显存与计算压力——无掩码注意力无法像 decoder 那样用 KV cache 做高效增量解码,BERT 天生不适合生成式任务。这笔债直到 T5/BART 用 encoder-decoder 才还清。

一句话蒸馏:一句话记住本节——架构零创新,创新全在"怎么训"

闭卷自检:不看材料,你能算出 H=768 时一层 FFN 的宽度吗?能说出输入嵌入的三部分吗?

第3章 预训练任务一:掩码语言模型(MLM)

来源:论文 §3.1、§3.3(第4–5页)。

学习目标:学完本章你应能——解释为什么标准 LM 无法直接双向化;复述 15%→(80%,10%,10%) 的完整掩码策略及其每个分支的动机;算出随机替换占总词元的比例;说出 MLM 相比标准 LM 的收敛代价。

失效模式先行:如果天真地让语言模型"看到两边再预测当前词",会出现什么?平凡解泄露:在多层双向条件下,目标词本身的身份会通过间接路径泄漏到它的条件上下文里,模型只需"复制"即可达到近乎零损失——学不到任何语言规律(§3.1 原文表述为"每个词可以间接看到自己/trivially")。这就是为什么 GPT 宁愿单向、ELMo 只敢浅层拼接。

方案:别让模型预测它看得见的词——先把要考的词遮住。随机选 15% 的 WordPiece 词元作为"考点",只用这些位置的最终隐向量去预测原始词汇 ID。但 [MASK] 这个符号微调时根本不会出现,造成预训练/微调分布错配。于是 15% 内部再做三岔分流(§3.3):

三岔的动机【解读者补充归纳】:80% 保证主任务仍是"完形填空";10% 随机替换强迫编码器对每一个输入词都维持分布式表征(因为不知道哪个词被动过手脚);10% 保持原词是为了缩小预训练与微调之间的表征差距——真实文本里绝大多数词就是原样出现的。随机替换只占总词元的 15%×10%=1.5%,作者据此论证不会损害语言理解能力。

公式手术

L_MLM = −Σ_{i∈M} log P( x_i | x̃ )  x̃ 为掩码后的序列,M 为被选中的 ~15% 位置集合
符号它是什么直觉
M被选中做预测的位置集每条序列约 15% 的位置;其余 85% 位置不产生损失
x_i位置 i 的原始词汇 ID预测目标是原词,不是 [MASK]
按 80/10/10 规则扰动后的输入编码器看到的序列可能含 [MASK]、假词或真词

代价(论文自己承认)【实验支持】:每批只对 15% 的词元产生预测信号,MLM 比 LTR 收敛更慢(附录 A.4.5:1M 步比 500k 步在 MNLI 上多约 1.0 准确率);但就绝对准确率而言 MLM 模型几乎立即开始超越 LTR。

数字对账

附录 A.4.6 给出六种掩码策略消融(MNLI/NER Dev):80/10/10 得 MNLI 84.2、特征式 NER 94.9;100% Mask 得 MNLI 84.3 但 NER 特征式仅 94.0(明显更差);100% Random 得 MNLI 83.6。对账结论:微调场景下各策略差异极小(≤0.7),但纯 Mask 会伤害特征式用法——这与正文"策略优势"的叙述需要合起来读:80/10/10 不是为了微调,主要是为了特征式用法和不匹配鲁棒性【解读者推断】。

常见误读:"15% 的词都被替换成了 [MASK]"。错——15% 只是"被选中",其中仅 80% 变成 [MASK],另有 1.5% 被换成随机词、1.5% 原样保留。混淆这两层比例会让你在实现复现时出错。

一句话蒸馏:一句话记住本节——MLM 把"语言建模"变成"开卷考试前的划重点":先遮住答案,再逼模型从左右两侧推理补全

闭卷自检:一条 128-token 序列,平均有多少个位置参与 MLM 损失?其中多少个位置实际是 [MASK]?

参考答案(L1)约 128×15% ≈ 19 个位置参与损失;其中 19×80% ≈ 15 个位置是 [MASK],约 2 个随机替换、2 个保持原词。

第4章 预训练任务二:下一句预测(NSP)

来源:论文 §3.2、§3.4(第5–6页)。

学习目标:学完本章你应能——写出构造 NSP 正负例的方法;说出最终模型的 NSP 二分类准确率;指出哪些下游任务被认为受益于 NSP。

许多重要下游任务(QA、NLI)的本质是理解两句之间的关系,这是任何单句语言建模目标都捕捉不到的。NSP 的构造极其廉价:50% 的样本 B 是 A 的真实下一句(标签 IsNext),50% 从语料随机抽一句当 B(标签 NotNext)。最终模型在该二分类上达到 97%–98% 准确率(§3.4)。总损失为 MLM 与 NSP 两个似然之和(§4.5)。

直觉类比:MLM 教模型"认字造句",NSP 教模型"读懂上下文衔接"——类似读完上一段猜下一段讲什么。类比在哪里失效:随机负例太容易识破——随便抽的一句往往话题完全无关,模型可能只学会"话题一致性"这种浅层判据,而不是真正的篇章推理。这正是后来 RoBERTa 实验质疑 NSP 价值的伏笔(见第7章)。

主张 vs 事实:【论文声称】NSP 对 QA/NLI 类任务至关重要;【实验支持】§5.5 表:去掉 NSP 后 QNLI 88.4→84.9(−3.5)、MNLI 84.4→83.9、SQuAD 88.5→87.9;【解读者观点】注意 MRPC 和 SST-2 几乎不受影响(86.7→86.5、92.7→92.6),说明 NSP 的收益高度集中在句对关系型任务,且幅度不算大——论文标题级的成功不能全记在 NSP 头上。

一句话蒸馏:一句话记住本节——NSP 用零标注成本给 [CLS] 位置装上了"句子级语义汇聚器"

闭卷自检:NSP 正负样本怎么造?去掉 NSP 受伤最重的任务是哪一个?

第5章 预训练配方与微调:一笔工程账

来源:论文 §4.5、§4.6(第6–7页);成本数字来自 §4.5 与 §4.6。

学习目标:学完本章你应能用原文数字复算语料总量与训练吞吐;列出微调超参搜索空间;说出"90% 时间用短序列训练"的理由。

手算验证(解读者补充)

总处理 token 量 = 128,000 × 1,000,000 = 1.28×10¹¹ = 1280 亿 token;语料 33 亿词 × 40 epoch = 1320 亿 token——两者吻合 ✓(差异来自 WordPiece 切分后的计数口径)。粗估总算力:每 token 约 2×110M=2.2×10⁸ FLOPs(前向+反向≈3倍即 6.6×10⁸),1280 亿 token × 6.6×10⁸ ≈ 8.5×10¹⁹ FLOPs ≈ 985 petaflop/s-days 量级——与"64 个 TPU 芯片跑 4 天"(TPU v1/v2 单芯片数十 TFLOPS 量级)的叙述数量级相容【费米估算,仅供量级感】。

常见误读:"预训练 4 天很便宜"。4 天的前提是 64 个 TPU 芯片并行——按当时的云价格这是一笔不小的开销;而且这只是 BASE/LARGE 各一次的训练时间,不含超参搜索。论文强调的其实是下游复现便宜(单卡小时级),这才是"预训练一次、处处微调"商业逻辑的核心。

一句话蒸馏:一句话记住本节——贵的训练只做一次,便宜的一次微调服务所有任务

闭卷自检:为什么先用 128 再用 512 训练?微调的学习率大概是什么数量级、比预训练大还是小?

第6章 分级自测题(覆盖全文)

  1. L1 一条 512-token 序列按论文策略处理,期望有多少个 token 被 [MASK] 替换?
    显示答案512×15%×80% = 61.44 ≈ 61 个。注意链条:15% 被选中,其中 80% 变 [MASK]。
  2. L2 若把掩码率从 15% 提高到 50%,预训练信号量和预训练/微调错配各会发生什么变化?请分方向讨论。
    显示答案信号量:参与损失的 token 从 15% 升到 50%,每批监督信号约增 3.3 倍,理论上收敛更快;错配:[MASK] 类标记占比升至 40%(50%×80%),微调时模型几乎见不到这种"满目疮痍"的输入,分布偏移急剧加大;同时相邻被遮 token 无法互相看到彼此的原文,任务退化为"多空格完形填空",难度失真。(评分要点:三个方向各占一分。)变式追问:反过来降到 5% 会怎样?——信号稀疏,收敛显著变慢。
  3. L3 有同学说:"ELMo 也是双向的,所以 ELMo 和 BERT 的区别只是用 LSTM 还是 Transformer。"找出这段话里的错误并纠正。
    显示答案两处错误。① ELMo 是左向 LSTM 与右向 LSTM 分别独立训练后拼接,两个方向从未在同一层内交互,属于"浅层双向";BERT 在每一层用同一个自注意力联合条件于左右上下文。② 使用方式不同:ELMo 是 feature-based(冻结特征喂给任务特定架构),BERT 是 fine-tuning(端到端微调全部参数)。评分要点:指出"独立训练+末端拼接≠深层双向"得主要分,指出使用方式差异得分。
  4. L4 仅凭摘要里的四个数字(GLUE 80.5/+7.7、MNLI 86.7/+4.6、SQuAD 93.2/+1.5、SWAG 未提但超人类),推演这篇论文必须在方法部分回答哪三个问题,并说明每个数字如何"逼出"其中一个。
    显示答案① GLUE 全线大涨且横跨 8 个异质子任务 ⇒ 必须回答"单一架构如何统一句对/单句/分类任务"→ 输入打包([CLS]/[SEP]/分段嵌入)+ 统一输出头设计(§4.2、§4.6)。② SQuAD 提升相对最小(+1.5 且对手是 ensemble)而 MNLI +4.6 ⇒ 必须回答"提升到底来自哪里"→ 消融研究隔离 MLM/NSP/模型大小三因素(§5.5)。③ SWAG 超越人类专家 ⇒ 必须回答"是否只是数据/规模效应而非方法创新"→ 模型大小消融 + 与同规模 GPT 的对照(同数据 BooksCorpus 下 BERT 仍胜)。(评分要点:每个对应关系 1 分,逻辑完整性 1 分。)

三、批判性阅读:如何不被数字带节奏

7.1 每个 benchmark 到底测什么

7.2 比较公平吗

【论文承认的不对称】BERT 训练语料比 GPT 多(BooksCorpus+Wikipedia 33亿词 vs GPT 仅 BooksCorpus 8亿词)、batch 大 4 倍(128k 词 vs 32k 词)、且为每个任务单独在 dev 上选学习率而 GPT 统一用 5e-5(附录 A.1 明确列出这四点差异)。因此"BERT vs OpenAI GPT"的主表比较不是控制变量比较:数据、批量、超参搜索力度都不同。真正干净的比较是 §5.5 消融内部的 "LTR & No NSP" 行——同数据同配置下,MLM 版在 SQuAD 上高出 10.7 F1。【解读者观点】媒体传播中常引用的"+7.7 GLUE"混合了方法与资源两类增益,引用时应注明。

7.3 证据等级区分

证据等级说明
GLUE 测试集分数较强由官方评估服务器评分,非自评
SQuAD/SWAG 测试分数较强提交排行榜;但 SWAG 的人类基线来自数据集作者自己组织的标注
消融实验Dev 集结果、5 次随机重启平均,控制良好但未上测试服务器
"MLM 收敛慢但很快反超 LTR"较弱主要依据附录图示曲线与单点数字(500k vs 1M 步差 1.0),缺乏表格化完整证据
"NSP 使模型获得句间关系能力"中偏弱仅一组消融;机制性解释([CLS] 学到什么)论文未验证

7.4 第二坐标轴:成本与效率

论文给出的成本坐标:预训练 64 TPU 芯片 × 4 天(LARGE);下游微调单 TPU ≤1 小时。缺失的坐标轴:推理延迟(双向注意力无法 KV-cache 化,线上部署成本高于同规模 GPT);能量消耗(2018 年论文未报告,这在今天是不可接受的 omission);超参搜索本身消耗的计算(LARGE 在小数据集上需要多次随机重启)。

7.5 论文没有告诉你什么

四、综合考核(毕业关)

任务一 · 重建因果链

只给你三个事实:(a) 目标是深层双向;(b) 双向化会让词"看见自己";(c) [MASK] 不出现在下游文本。请推演出 80/10/10 三岔策略是这三者的必然产物,并指出如果删掉其中任一分支会破坏哪一环。

显示参考答案与评分标准因果链:(a) 要求每层都能看左右 → 不能再用因果掩码 → (b) 平凡解泄露 → 必须遮住待预测词 → 但遮蔽引入 [MASK],与真实文本分布不符(下游没有 [MASK])→ 需要 10% 随机替换让编码器对任意输入保持分布式表征、10% 保持原词让大部分输入贴近真实分布。删 80% 分支:主任务变成纯替换检测,完形填空信号弱化(消融显示特征式 NER 从 94.9 掉到 94.6~94.7,纯 Rnd 更差);删 10% 保持原词:预训练输入 100% 含噪声标记,微调错配最大化(消融 80/20/0 组 NER 95.2 尚可,但理论错配仍在);删 10% 随机替换:编码器可学会"[MASK] 之外都可信",分布式表征约束消失(消融 100%/Same 组 NER 特征式 94.0 最差印证此点)。评分要点:链路完整性 2 分、每个删除分支的影响 3 分。

任务二 · 数字总对账

核对以下五组跨章节数字是否自洽,写出计算过程:

  1. ① batch 256×512 与"128,000 tokens/batch";② 1M 步 × 128k 与"33 亿词 × 40 epoch";③ 15%、80%、10% 与"随机替换占总词元 1.5%";④ BERT_BASE 12·H² 估算与 110M;⑤ GLUE 平均:BERT_LARGE 82.1 相对 Pre-OpenAI SOTA 74.0 与"+7.0"的声称。
显示答案① 131,072≈128k ✓(论文取整);② 1.31×10¹¹ vs 1.32×10¹¹ ✓(WordPiece 计数口径差异);③ 15%×10%=1.5% ✓;④ 108M vs 110M ✓(±2%,舍入与偏置/LayerNorm 参数);⑤ 82.1−74.0=8.1 ≠ 7.0 ✗——注意论文原文说的是 BERT_LARGE 较先前 SOTA 提升 7.0、BASE 提升 4.5(79.6−74.0=5.6 也不等于 4.5)。此处数字对不上,可能的原因是:论文的平均值计算排除了 WNLI 及个别任务口径不同,或"先前 SOTA"逐任务取的是各自最强系统而非同一系统的均值。这正是精读的价值:引用"+7.0"时应意识到它是作者的汇总口径。【解读者推断】

任务三 · 设计决策答辩(三连问)

  1. [CLS]+NSP 作为句子表示:为什么这样做?不这样做(如用所有位置平均池化)会怎样?论据够吗?
    参考答案为什么:需要一个固定位置的聚合向量供分类头使用,且 NSP 给它专属监督信号使其在预训练阶段就被塑形。不这样做:平均池化没有专属监督,[CLS] 退化;但 Sentence-BERT 系工作表明微调时平均池化同样有效甚至更稳——说明该设计的必要性主要存在于预训练期而非使用期。论据强度:★,论文未做池化方式消融。【解读者补充】
  2. WordPiece 30k 词表:为什么不用字符级或更大词表?
    参考答案30k 是序列长度与 OOv 的折中:词表越大嵌入层越大且序列更短(算力省),但稀有词被过度切碎;字符级则序列过长,512 上限装不下多少内容。论文未给出词表消融——论据不足,属于继承自 BERT 前身(Google NMT)的工程默认值。
  3. 90% 步数用 seq_len=128:省了多少?代价是什么?
    参考答案注意力 O(n²):512²/128²=16 倍差距,若全程 512 算力约为现在的数倍以上。代价:位置嵌入前 90% 训练只见 0–127 位置,需末段 10% 补课;长短文档混合分布被人为扭曲。论文未报告"全程 512"的对照,论据为工程直觉。

任务四 · 证据审计

回看第一章的预评分,给出读后修正:

显示审计结论贡献1(双向重要性):维持 ★★★,LTR 消融是最强证据。贡献2(减少架构工程):维持 ★★★,11 任务统一骨架本身就是证明。贡献3(NSP 有效):降为 ★☆——消融存在但幅度小(多数任务 <1 分),且收益集中于 QNLI 一项,后续学界争议进一步削弱。贡献4(规模有益):维持 ★★★,六档配置单调递增是罕见的干净证据。贡献5(MLM 快速反超):降为 ★★,证据主要是曲线而非表格,且"几乎立即反超"依赖对图的目测。总体判断:本文最不可动摇的资产是"MLM vs LTR"消融;最脆弱的资产是 NSP。