跳到主要内容

BERT 与它的后代

这一章讲三件事: BERT 的完整配方(掩码怎么遮、句子怎么拼、三个嵌入怎么加); 后代们各自补的是哪块短板;以及贯穿全书的批判线——「涨点」的原因到底是 新思想、训练功夫,还是单纯数据多。

1. 这一章讲什么

BERT 在 NLP 的 11 个方向大幅刷新精度,书里称它是「近年来自残差网络后最具有突破性的 一项技术」1。它的配方其实朴素:拿第 10 章的 Transformer 编码器,配两个自监督 练习题(完形填空+连句判断),在海量文本上自学,再对具体任务微调。本章后半的五个 后代,每一个都是对着配方里某一味药下刀。

2. 顶层全景:配方与改方

BERT 原方:Transformer 编码器 + MLM(完形填空)+ NSP(下一句预测)
输入 = 词块嵌入 + 位置嵌入 + 句对区分嵌入
├─ RoBERTa:不改方,改煎药法(动态掩码、去 NSP、大批次、久训练)
├─ ALBERT:减料(参数分解+跨层共享),顺手把 NSP 换成「句子顺序」
├─ XLNet:换 Questions(排列语言模型+双流注意力),去掉可见的掩码
└─ ERNIE 系:加料(实体/短语级掩码、知识图谱、多任务持续学习)

图说:这一章是「一个配方与五个改方」。主走查是原方里那道完形填空题。

3. 核心原理

3.1 主走查:完形填空的 80/10/10

MLM 的思想取自 1953 年的「完形填空」:遮住句中一些词,靠上下文猜2。BERT 的 做法:随机挑 15% 的词作为考题,但对这 15% 再分三档处理3:

原句:my dog is hairy
80% 的考题: my dog is [mask] ← 真遮住
10% 的考题: my dog is apple ← 换成随机词
10% 的考题: my dog is hairy ← 原样不动

为什么这么绕?书里给的理由:若被选中的词 100% 变成 [mask],微调时模型会遇到 从没见过的 [mask] 记号;换成随机词则是逼模型「对每个输入标志都保持分布式表征」, 否则它偷懒记死「[mask] 就等于 hairy」。乱换的负面影响只有 15%×10%=1.5%,可忽略4。 代价也明说:每次只考 15% 的词,「模型收敛得比较慢」5

第二道练习题 NSP:给两句,判断第二句是不是第一句的下文(IsNext/NotNext),真句对与随机拼凑的对 各占一半,答案存在句首的 [CLS] 记号里6。输入侧,每个词的最终表示由三份嵌入 相加:词块嵌入(把词切成小块,playing→play+ing)、位置嵌入(第几)、分割嵌入 (属于前句还是后句)7。规模:BERT-base 1.1 亿参数、BERT-large 3.4 亿; 后者「需要在 64 块 TPU 芯片上训练 4 天」——幸而 Google 开源了模型8

3.2 RoBERTa:不改配方,改煎药法

RoBERTa 的论文结论堪称辛辣:「BERT 的原始论文中的训练超参数其实并不能充分发挥 BERT 的性能」,它自己则是「BERT 的成熟版」9。改动清单:掩码从「预处理时 定死」改成「训练时每轮随机重遮」(动态掩码,增加多样性)10;NSP 经对照 证明不划算,直接移除(连句方式改为整句,「不使用 NSP 损失的任务要略优于使用 NSP 损失的任务」)11;字典从 3 万换到 5 万词块;批次 256→8000;训练步数 50 万; 数据 16GB→160GB;再配上预热(起步用小学习率,切换到大的再衰减)12。 一句话:不改模型,光把训练做足,就能再涨一截。

3.3 ALBERT:大而慢的手术

ALBERT(A Lite BERT)诊断 BERT 两病:内存与通信开销太大(3.4 亿参数,普通团队 改个结构都训不起);以及模型退化——「将隐层节点的个数从 1024 个增加到 2048 个, 模型的准确率反而下降了」(第 03 章的退化问题换了个场合再现)13。三把手术刀: 嵌入参数分解(词表就是全模型认识的全部词块的总册子,记作 V;把「V×H」的大矩阵拆成 V×E 与 E×H 两个小矩阵,H 指词块向量多长);跨层参数共享 (所有 Transformer 层共用同一套参数);NSP 换成句子顺序预测(SOP:两句连读是真、 顺序交换是假,考「逻辑顺序」而非「主题连续」)14

3.4 XLNet:掩码的「训练-微调不一致」怎么治

书里把语言模型分两族:自回归(从左往右逐词生成,GPT 系)优点是符合真实生成场景, 缺点是看不到后文;自编码(完形填空,BERT 系)能看全文,但有两个病。病一, 「BERT 本质上是一个去噪自编码器」,掩码在训练时有、微调时无——训练与使用的 输入形态不一致;病二,独立性假设:被遮的词被当作互不相关来猜。「New York is a city」 遮成「[mask] [mask] is a city」时,猜第一个 [mask] 拿不到「另一个是 York」的信息15

XLNet 的答案分两步。第一步,排列语言模型:把词序随机打乱再从左往右预测—— 预测 x3 时,排在它前面的可能恰好有原文在它后面的词,于是「既能看见上下文」又不引入 掩码记号;实际实现靠注意力掩码:输入保持原序,网络内部按抽中的排列决定谁对谁可见16。 第二步,双流自注意力:预测某词自身时只能用它的位置(知道内容再预测就没了意义), 预测后续词时又要带上它的内容——一个「流」装不下两种要求,于是内容流与查询流并行: 查询流只带位置、专门负责预测,内容流带全部信息、负责给查询流当键值17

书里的收尾值得全体读者抄录:XLNet 与 BERT 本质相似,「连要预测的单词的比例都控制在 了 15%」;只预测一个词时两者基本等价;「全面的提升不能减少使用比 BERT 更多的训练 数据带来的影响,因此我们也不能过分地神化 XLNet」18

3.5 ERNIE 系:往掩码里加知识

清华 ERNIE-T 的动机示例:判断 Bob Dylan 的实体类别(词曲作者还是作家),需要知道 《Blowin' in the Wind》是首歌、《Chronicles》是本书——纯文本上下文不够,得有 知识图谱(把实体和它们的关系整理成的网络)帮忙19。结构是两层:底层 T-编码器 就是标准 BERT,上层 K-编码器把实体向量与词向量融合;实体向量用 TransE 学 (头实体+关系≈尾实体);预训练再加一路去噪实体自编码器——5% 的实体换成随机实体、 15% 换成掩码、其余不动20。书里的批评同样在案:模型「严重依赖于构建的知识图谱」, 图谱有偏差就限制泛化;且「融合方式有些粗暴」21

百度 ERNIE-B 治另一病:BERT 按单字遮,遮「Harry Potter」的一半猜另一半太容易; 「如果我们用掩码替换的是整个实体……我们可以根据图书名字预测它的作者,这时候模型才 真正学到了知识」——于是有短语级与实体级两档掩码,再加百度贴吧对话数据上的对话语言 模型22

ERNIE 2.0 再进一步:把练习题扩成单词感知、结构感知、语义感知三大类共 8 小种,用持续 多任务学习轮着练、新任务与老任务同场训练来对抗灾难性遗忘(学会新的就忘掉旧的)23。 书里的小结依旧锋利:百度 ERNIE「并没有太大的创新点, 其提升准确率的主要原因在于百度本身拥有的强大的中文语料和工具」;并排比出两个极端 ——「百度的 ERNIE 系列和 OpenAI 的 GPT 系列把词向量训练任务推向了两个极端,一个是 挖掘丰富的任务,另一个是堆积超大的模型和大量的数据,无论哪个极端都是需要巨大的财力 支持的」24

判断(我们的,不是书里的): 本章五条路线其实回答同一个问题——「BERT 的成功, 哪些是思想,哪些是工程?」RoBERTa 证明相当一部分是工程;ALBERT 证明参数可以被 压缩;XLNet 证明掩码不是必需的;ERNIE 证明外部知识可以加料。四条合起来的读法是: 范式(自监督预训练+迁移)是真的,具体配方是可替换的。 如果错,会错在: 如果掩码式预训练有某种不可替代的隐式优势(比如逼出双向表征 的独特方式),XLNet 的等价性论证就只在受限条件下成立;书里「只预测一个词时基本 等价」的边界说明作者自己也这么怀疑。

4. 作者的判断与证据

书里给了实验证据的: RoBERTa 关于 NSP、批次、步数、数据的全部对照(转述); BERT 的 80/10/10 及 1.5% 影响账(转述);ERNIE 2.0 的持续学习对比图(转述); XLNet 的 20 任务超越与排序相关实验(转述)。

书里署名的批评: 对 ALBERT 退化的引用、对 XLNet 的「别神化」、对 ERNIE-T 「融合粗暴」、对百度 ERNIE「没有太大创新点」、对 GPT-3/ERNIE「两个极端都要钱」 ——全部以作者口吻署名,是我们区分三个声音的锚点。

5. 边界与局限

  • 本章全部模型止于 2020 年前后;后来的「用指令教模型」、人类反馈对齐(把「人喜欢什么」变成训练信号)都不在书里——书里 5.3 的 GPT-3 章只字未提这条路;
  • MT-DNN(多任务微调)与 XLM(跨语言)书里有完整小节,本章因与主线关系较弱 只留一句:前者在下游共享编码器+任务头,后者用平行语料的翻译语言模型学跨语言对齐;
  • ERNIE 的知识来自 Wikipedia/中文互联网,知识图谱本身的时效与偏差问题书里点到为止。

6. 可带走的

  1. BERT 配方:编码器+完形填空+连句判断+三份嵌入相加;[CLS] 存句级语义;
  2. 80/10/10 掩码是防「作弊」设计:一部分考题故意不遮、故意错,保持表示的分布式;
  3. 「训练-微调不一致」是掩码法的原罪,排列语言模型+双流注意力是 XLNet 的药方;
  4. 独立性假设的漏洞要拿「多词实体」来测(New York 式例子);
  5. RoBERTa 教训:复现论文前先确认它的训练量是否打满——很多「模型差距」是训练差距;
  6. 模型退化在 NLP 也会发作:参数翻倍、精度反降(ALBERT 的出发点);
  7. 数据规模、任务丰富度、算力开销是三本独立账,评估任何「新模型」前先对账。

7. 原文地图

主题原书节原文位置
BERT 定位与三特点5.4 BERTtext/11-p201-220.txt:562(搜「自残差网络后」) · text/11-p201-220.txt:566(搜「多任务训练目标」)
主走查:80/10/10 掩码5.4.1 BERT 详解text/11-p201-220.txt:626(搜「词级别标志会被随机替换」) · text/11-p201-220.txt:630(搜「my dog is hairy」) · text/11-p201-220.txt:634(搜「没有见过的单词」) · text/11-p201-220.txt:636(搜「1.5%」)
NSP 与三嵌入、[CLS]5.4.1 BERT 详解text/11-p201-220.txt:639(搜「IsNext」) · text/11-p201-220.txt:610(搜「segment embedding」) · text/11-p201-220.txt:616(搜「[CLS]」)
规模与训练成本5.4.1 / 5.4.2text/11-p201-220.txt:591(搜「1.1 × 10」) · text/12-p221-240.txt:52(搜「64 块 TPU」)
RoBERTa 改方5.5.1 成熟版 BERTtext/12-p221-240.txt:62(搜「成熟版」) · text/12-p221-240.txt:72(搜「动态掩码」) · text/12-p221-240.txt:83(搜「略优于使用 NSP」) · text/12-p221-240.txt:108(搜「预热」)
ALBERT 三刀5.5.2 更快的 BERTtext/12-p221-240.txt:118(搜「反而下降了」) · text/12-p221-240.txt:123(搜「V × E 和 E × H」) · text/12-p221-240.txt:131(搜「sentence order prediction」)
XLNet 出发点与两病5.6.1 背景知识text/12-p221-240.txt:317(搜「去噪自编码器」) · text/12-p221-240.txt:325(搜「New York is a city」) · text/12-p221-240.txt:278(搜「训练阶段和微调阶段不一致」)
排列语言模型与双流5.6.2 XLNet 详解text/12-p221-240.txt:338(搜「x2 → x4 → x3 → x1」) · text/12-p221-240.txt:373(搜「注意力掩码」) · text/12-p221-240.txt:397(搜「掩码操作类似的功能」)
部分预测与 15% 巧合5.6.2 XLNet 详解text/12-p221-240.txt:434(搜「6 和 7 之间」) · text/12-p221-240.txt:436(搜「恰好也在这个范围之内」)
别神化 XLNet5.6.3 小结text/12-p221-240.txt:455(搜「基本是等价的」) · text/12-p221-240.txt:458(搜「过分地神化 XLNet」)
ERNIE-T 知识图谱5.7 ERNIE(清华大学)text/12-p221-240.txt:488(搜「Bob Dylan」) · text/12-p221-240.txt:563(搜「h + l」) · text/12-p221-240.txt:571(搜「5 040 986」) · text/12-p221-240.txt:585(搜「5% 的标志对齐的实体」) · text/12-p221-240.txt:624(搜「融合方式有些粗暴」)
ERNIE-B 与 ERNIE 2.05.8 ERNIE(百度)和 ERNIE 2.0text/12-p221-240.txt:647(搜「Harry Potter is a series」) · text/12-p221-240.txt:668(搜「百度贴吧」) · text/12-p221-240.txt:688(搜「灾难性遗忘」) · text/13-p241-260.txt:3(搜「单词感知预训练任务」) · text/13-p241-260.txt:69(搜「强大的中文数据资源」) · text/13-p241-260.txt:72(搜「两个极端」)

Footnotes

  1. 出处:「5.4 BERT」(text/11-p201-220.txt:562,搜「自残差网络后」)。

  2. 出处:「5.4.1 BERT 详解」(text/11-p201-220.txt:622,搜「Wilson Taylor」)与(text/11-p201-220.txt:624,搜「完形填空」)。

  3. 出处:「5.4.1 BERT 详解」(text/11-p201-220.txt:628,搜「80% 直接替换为」)与(text/11-p201-220.txt:630,搜「my dog is hairy」)。

  4. 出处:「5.4.1 BERT 详解」(text/11-p201-220.txt:634,搜「分布式表征」)与(text/11-p201-220.txt:636,搜「1.5%」)。

  5. 出处:「5.4.1 BERT 详解」(text/11-p201-220.txt:637,搜「收敛得比较慢」)。

  6. 出处:「5.4.1 BERT 详解」(text/11-p201-220.txt:639,搜「IsNext」)与(text/11-p201-220.txt:642,搜「50% 的概率」)。

  7. 出处:「5.4.1 BERT 详解」(text/11-p201-220.txt:602,搜「3 个嵌入特征」)与(text/11-p201-220.txt:609,搜「playing」)。

  8. 出处:「5.4.2 小结」(text/12-p221-240.txt:52,搜「64 块 TPU」)。

  9. 出处:「5.5.1 成熟版 BERT:RoBERTa」(text/12-p221-240.txt:62,搜「成熟版」)。

  10. 出处:「5.5.1 成熟版 BERT:RoBERTa」(text/12-p221-240.txt:72,搜「动态掩码」)。

  11. 出处:「5.5.1 成熟版 BERT:RoBERTa」(text/12-p221-240.txt:83,搜「略优于使用 NSP」)。

  12. 出处:「5.5.1 成熟版 BERT:RoBERTa」(text/12-p221-240.txt:94,搜「8000」)、(text/12-p221-240.txt:105,搜「160GB」)与(text/12-p221-240.txt:108,搜「预热」)。

  13. 出处:「5.5.2 更快的 BERT:ALBERT」(text/12-p221-240.txt:118,搜「反而下降了」)。

  14. 出处:「5.5.2 更快的 BERT:ALBERT」(text/12-p221-240.txt:123,搜「V × E 和 E × H」)与(text/12-p221-240.txt:131,搜「sentence order prediction」)。

  15. 出处:「5.6.1 背景知识」(text/12-p221-240.txt:317,搜「去噪自编码器」)与(text/12-p221-240.txt:327,搜「很难得到正确的预测结果」)。

  16. 出处:「5.6.2 XLNet 详解」(text/12-p221-240.txt:338,搜「x2 → x4 → x3 → x1」)与(text/12-p221-240.txt:373,搜「注意力掩码」)。

  17. 出处:「5.6.2 XLNet 详解」(text/12-p221-240.txt:383,搜「没有意义了」)与(text/12-p221-240.txt:397,搜「掩码操作类似的功能」)。

  18. 出处:「5.6.3 小结」(text/12-p221-240.txt:455,搜「基本是等价的」)与(text/12-p221-240.txt:458,搜「过分地神化 XLNet」)。

  19. 出处:「5.7.1 加入知识图谱的动机」(text/12-p221-240.txt:488,搜「Bob Dylan」)。

  20. 出处:「5.7.2 异构信息融合」(text/12-p221-240.txt:505,搜「K-Encoder」)、(text/12-p221-240.txt:563,搜「h + l」)与(text/12-p221-240.txt:585,搜「5% 的标志对齐的实体」)。

  21. 出处:「5.7.5 小结」(text/12-p221-240.txt:621,搜「严重依赖于构建的知识图谱」)与(text/12-p221-240.txt:624,搜「融合方式有些粗暴」)。

  22. 出处:「5.8.1 ERNIE-B」(text/12-p221-240.txt:644,搜「J.K. Rowling」)与(text/12-p221-240.txt:668,搜「百度贴吧」)。

  23. 出处:「5.8.2 ERNIE 2.0」(text/12-p221-240.txt:637,搜「持续预训练学习」)、(text/12-p221-240.txt:637,搜「灾难性遗忘」)与(text/13-p241-260.txt:40,搜「如何高效」)。

  24. 出处:「5.8.3 小结」(text/13-p241-260.txt:69,搜「强大的中文数据资源」)与(text/13-p241-260.txt:72,搜「两个极端」)。