第十二章:拆解与演化——预训练改进的黄金年(2019-2020)

[!info]
第十一章结束于一个双重悬念:BERT 和 GPT,一个"填空",一个"续写",两种截然不同的哲学都取得了惊人效果。BERT 在 11 项 NLP 任务上同时刷新了记录,GPT 证明了单向语言模型也能做下游任务。但没有人真正知道,这究竟是为什么——哪些设计决策是真正关键的,哪些只是意外的"搭便车"。2019 年,整个 NLP 社区开始系统地拆解这两个模型,他们的发现,有时令人振奋,有时令人尴尬,有时则出人意料地指向了一个截然不同的方向。

[!question]
BERT 的每一个设计决策——Masking 的比例、Next Sentence Prediction 任务、512 词的上下文限制——究竟哪些真正重要?GPT 那条路,又隐藏着什么被低估的潜力?如果不知道原因,怎么知道该往哪个方向改进?

12.1 一篇令人尴尬的论文

2019 年 7 月的某个早晨,NLP 社区的研究者们打开 arXiv,看到了一篇让很多人陷入沉默的论文。

论文标题叫做《RoBERTa:一个鲁棒优化的 BERT 预训练方案》(RoBERTa: A Robustly Optimized BERT Pretraining Approach)。作者是 Facebook AI Research 的刘胤焓(Yinhan Liu,Facebook AI Research 研究员,RoBERTa 第一作者)和他的同事们。

沉默的原因,不是这篇论文有什么革命性的新架构,也不是它提出了什么颠覆性的理论。恰恰相反——这篇论文的核心贡献,是证明了他们什么架构都没改

刘胤焓团队做的事情极为简单:拿来原版 BERT,改训练超参数,然后看效果。他们把 batch size 从 256 提升到 8000(增加了 31 倍),把训练步数从 100 万步缩短到 50 万步,把训练数据从 16GB 增加到 160GB,去掉了 BERT 里的 Next Sentence Prediction(NSP)任务,并改用"动态 Masking"(每次训练都随机重新决定哪些词被遮住,而不是训练前固定一套)。步数少了,但每步处理的数据多了 31 倍——模型总共处理的 token 数,从 BERT 的约 1280 亿,暴增到约 2 万亿。

就这些。

然后他们在当时最权威的 NLP 评测榜单 GLUE 上测试了这个"改版 BERT"——他们把它命名为 RoBERTa(Robustly Optimized BERT Approach,鲁棒优化版 BERT)。

结果让很多人目瞪口呆:RoBERTa 不只是超越了原版 BERT,它以明显差距超越了 2019 年上半年几乎所有声称"超越 BERT"的论文,包括那些引入了全新架构创新的工作。

这意味着什么?

这意味着:2019 年上半年那一批声称"超越 BERT"的论文,很可能并不是靠架构创新取胜的。它们是在和一个严重欠训练的 BERT 比赛

用当时一位研究者的私下评价:这相当于所有人都在比赛谁比原版 BERT 跑得快,结果 RoBERTa 出来说——“原版 BERT 根本就没练完热身操”。

这种尴尬的场面,让 2019 年的 NLP 社区开始认真反省一个被忽视的问题:当我们不理解某个方法为什么有效,我们的"改进"很可能只是在纠正一个未被承认的错误

12.2 BERT 发布之后的"黄金热潮"

要理解 RoBERTa 为什么重要,需要理解 2019 年 NLP 研究界的氛围。

BERT 在 2018 年 10 月发布时,对整个领域产生了一种近乎震惊的效果。不只是因为它的性能,而是因为它的通用性太出乎意料了。同一个预训练模型,通过简单的微调,可以在问答、情感分类、命名实体识别、自然语言推理等完全不同的任务上都达到最优水平。研究者们花了多年时间专门为每个任务设计的特征工程和模型架构,被一夜之间扫进了"历史"。

BERT 发布后,有两件事几乎同时发生。

第一件事是复现困难。谷歌在开源 BERT 代码的同时,也公开了预训练好的模型权重——这意味着大多数用户不需要自己训练,直接下载微调就好。但如果你想自己从头训练 BERT,你需要 4 块 TPU v3 跑 4 天,或者等效的大量 GPU 算力。大多数学术机构没有这种条件。这导致很多"复现 BERT"的工作其实是在调微调阶段,而不是预训练阶段——预训练的具体细节,除了谷歌内部,没有人真正验证过。

第二件事是 "超越 BERT"军备竞赛。2019 年初到中期,arXiv 上每隔一两周就有新的论文宣称"在 GLUE 或 SQuAD 上超越 BERT"。这些论文有的提出了新的预训练任务,有的改变了 Masking 策略,有的引入了新的注意力机制变体。每篇论文都有漂亮的表格,显示比 BERT 提升了几个百分点。

但这些论文之间有一个系统性的问题:他们不是在一个公平的基准线上做比较。有的用了 BERT-base,有的用了 BERT-large,有的用了不同版本的 BERT(谷歌在最初发布后做过一些小更新),更重要的是,几乎没有人认真考虑过,原版 BERT 的训练是否充分。

这种情形类似于一场跑步比赛:起跑时,BERT 只热身了 10 分钟就开跑。所有人都在比较谁比 BERT 跑得快,却没有人问一句:如果 BERT 充分热身了,结果会怎样?

刘胤焓团队问的就是这个问题。他们的论文并不是架构创新,而是一项受控实验:保持架构不变,只改训练过程,一次只动一个变量,看每一步改动对最终效果的贡献。

他们的核心发现,可以用三条清晰的结论来概括——注意,这三条结论之间的关系同等重要:

更多、更多样的训练数据,是最主要的驱动力。 原版 BERT 用约 16GB 文本预训练(BooksCorpus + 英语维基百科)。刘胤焓团队加入了 CC-News、OpenWebText、Stories 等来源,将数据量扩大到约 160GB(10 倍)。他们专门在相同架构和相同训练计算量下对比了不同数据量的效果,结论清晰:数据扩大 10 倍,带来了显著且稳定的性能提升。这里需要强调的是:数据量增加的价值,并不等同于"把同样数据重复训练更多遍"——新颖、多样的文本带给模型的语言覆盖面是重复数据无法替代的。RoBERTa 选择扩展数据来源而非重复原有数据,正是基于这个判断。

NSP(Next Sentence Prediction)任务被证伪,去掉它反而效果更好。这可能是整篇论文中最令人意外的结论之一。NSP 是 Devlin 团队在设计 BERT 时精心引入的目标:通过让模型判断两段文本是否在原文中相邻,来训练“句间理解”能力。这一设计在直觉上非常合理,也曾在 BERT 论文中有过充分论证。然而,RoBERTa 团队通过严格的受控实验发现,移除 NSP 任务后,模型在绝大多数下游任务上的表现并未受损,反而在不少任务上显著提升。进一步的归因分析表明,NSP 任务本身“太容易了”:由于负例是跨文档随机拼凑的句子对,与正例(真实相邻的句子)在主题、风格等方面差异极大,模型只需学会判断“主题是否相关”就能轻松过关,而无需真正理解句间逻辑或连贯关系。换句话说,NSP 并没有训练到它原本想要强化的那种深层语义能力,因此在实际效果上反而不如直接去掉。

动态 Masking 比静态 Masking 略好,但提升有限。 原版 BERT 在数据预处理阶段就固定了每个样本的 Mask 位置——也就是说,同一条训练数据在整个训练过程中始终在同一位置打码。RoBERTa 改为每次训练时重新随机决定 Mask 位置,让模型每次看到这条数据时面对的是不同的"填空题"。这一改动的效果是真实但有限的(SQuAD F1 从 78.3 提升至 78.7),实现成本几乎为零,属于"值得做但不是关键"的改进。

关于 batch size 和步数,RoBERTa 把 batch size 从 256 提升到了 8000,同时把步数从 100 万减少到 50 万。论文中专门对比了在相同总 token 预算下不同 batch size 的效果,发现更大的 batch size 在计算效率上有优势(相同 token 数下可以达到更好的 MLM 困惑度),但这是训练工程层面的优化选择,而不是独立于数据量的性能驱动因素。换句话说,batch size 的调整是"如何更高效地消化训练数据"的问题,真正决定模型上限的,仍然是数据的质量和多样性。

把这几个因素放在一起来看,最重要的认知是:在相同架构下,BERT 的瓶颈首先是数据,其次是训练策略,而不是模型设计。RoBERTa 的 GLUE 评分达到 88.5,而原版 BERT-large 是 80.5,整整 8 分的差距,没有动一行架构代码。

12.3 GPT-2:拆解年里的另一条路

2019 年 2 月,就在整个 NLP 社区专注于"拆解 BERT"的集体行动中,OpenAI 走了一条截然不同的路。

阿列克·拉德福德(Alec Radford,OpenAI 研究员,GPT 系列主要作者)的团队没有分析 BERT 的设计决策,没有做受控消融实验,也没有提出新的预训练目标。他们只做了一件事:把 GPT-1 的参数量从 1.17 亿扩展到 15 亿,然后在一个覆盖更广的互联网语料(WebText,约 40GB)上训练它。架构没变,目标没变——仍然是单向的自回归语言模型。只是更大了。

结果出乎所有人的预料:GPT-2 无需针对特定任务微调,仅凭自然语言描述就能完成翻译、摘要、问答。这种能力后来被命名为 zero-shot(零样本)——而它与 BERT "预训练+微调"的逻辑完全不同。GPT-2 还因此引发了 AI 历史上第一次真正意义上的模型发布安全争议:OpenAI 以"生成内容太逼真、可能被用于造假新闻"为由,拒绝公开完整权重,开创了"分阶段发布"的先例,并引发了持续数月的激烈辩论。

这些内容——zero-shot 的技术机制、规模与能力的数学关系、那场安全争议的来龙去脉——是下一章的主线。这里只需要记住 2019 年发生了什么:当社区忙着拆解 BERT 的时候,OpenAI 悄悄地在另一条路上走了很远。

两条路在 2019 年看起来是平行的:BERT 路线在分析"哪些设计决策重要",GPT 路线在验证"规模本身是否就是答案"。大多数人当时押注在前者——他们没有想到,后者才是通向未来的那条路。

12.4 固定窗口的诅咒:Transformer-XL 的突围

RoBERTa 告诉了社区"怎样把 BERT 做好",但还有另一条问题线一直未被解决:BERT 只能处理 512 个 token 的文本,而这个限制从 Transformer 诞生之初就存在。

第九章我们讨论过 O(n2)O(n^2)O(n2) 的注意力复杂度——序列长度翻倍,计算量翻四倍。对于句子级任务(问答、情感分类、自然语言推理),512 个 token 通常够用。但对于需要理解长文档的任务——法律合同、科学论文、小说——512 个 token 只是全文的一小片段。语言模型被迫将长文档切成短段,分别处理,彻底失去了跨段落的上下文信息。

2019 年 1 月,戴子航​(Zihang Dai,CMU 博士生,Transformer-XL 第一作者,后任职于谷歌 Brain)和他在 CMU 的同事杨植麟(Zhilin Yang,CMU 博士生,Transformer-XL 共同作者)、以及来自谷歌 Brain 的黎国(Quoc Le,谷歌 Brain 研究科学家)等人,发表了 Transformer-XL(Transformer Extra Long,超长上下文 Transformer),专门解决这个问题。

他们的核心创新叫做片段级循环(Segment-Level Recurrence)

想象你在读一篇长篇文章,把它切成了每段 512 字的片段。正常 Transformer 处理第二段时,完全不记得第一段说了什么。Transformer-XL 的做法是:把第一段处理完后的每一层中间状态(hidden states)缓存下来,处理第二段时,允许第二段中的词"看到"第一段的缓存状态

这就像一个不仅能回忆刚才段落内容、还能通过中间层的"记忆痕迹"感知更早内容的读者——虽然记忆是以摘要形式存在的,不是原始文字,但足以维持跨段落的语义一致性。

但这里有一个技术细节不能绕过:原版 Transformer 的位置编码是绝对位置编码——第 1 个 token 有位置 1,第 2 个有位置 2,依此类推。一旦把两段的 token 混在一起,绝对位置编码就会产生混乱(第二段的第 1 个 token 和第一段的第 1 个 token 会用同样的位置编码,但它们实际上在不同位置)。

Transformer-XL 引入了相对位置编码(Relative Positional Encoding) 来解决这个问题:不再为每个 token 赋予一个绝对位置号,而是在计算注意力时,用两个 token 之间的相对距离来编码位置信息。这样,无论两个 token 来自哪一段,它们之间的"距离感"都是准确的。

结果:Transformer-XL 在语言模型困惑度基准测试上,比之前的 LSTM 方法低了 20% 以上,也比同时期的 Transformer 基线低了约 9%。更重要的是,它成为了第一个在语言建模任务上验证"Transformer 也可以处理超长文本"的工作,为后来的长上下文模型打开了方向。

就在 Transformer-XL 发表的几个月后,同一批作者——戴子航、杨植麟,加上了杨一鸣(Yiming Yang)和萨拉赫丁诺夫(Ruslan Salakhutdinov,1972-,CMU 机器学习系主任,深度学习先驱)——用 Transformer-XL 的架构作为基础,发起了对 BERT 最严肃的一次挑战。

12.5 XLNet:掩码的代价

杨植麟是这场故事里最值得关注的人物之一。他在 CMU 读博士期间,把自己的研究重心放在了"预训练语言模型到底应该怎么训"这个根本性问题上。

在他看来,BERT 的 Masked Language Modeling(MLM)有一个设计上的根本缺陷——这个缺陷不是随便一句话能说清楚的,值得仔细展开。

BERT 的训练方式是这样的:在输入序列里随机遮住 15% 的词(用 [MASK] 替换),然后让模型预测这些被遮住的词。这个"填空题"的方式有一个显而易见的优势:模型必须同时利用被遮词左边和右边的上下文来猜测答案,因此天然地学到了双向理解能力。

但它也有一个不那么显而易见的缺陷:预训练时看到的是带有 [MASK] 的句子,但下游任务微调时看到的是正常句子,没有任何 [MASK]。训练和推理的输入分布是不一样的。

打一个类比:如果你准备考试的方式是"把试卷上 15% 的词用涂改液涂掉,然后猜那些词是什么",你的备考策略必然会受到这种奇特形式的影响。但真正考试时,试卷上没有涂改液——你的备考技能,有多少是可以直接迁移的?

BERT 的作者们知道这个问题,他们在论文里也提到了。他们的解决方案是:15% 中有 80% 真的替换成 [MASK],10% 替换成随机词,10% 保持不变。这种"噪声注入"缓解了一部分训练/推理不一致,但并没有根本解决它。

杨植麟的问题是:有没有一种方式,既能捕捉双向上下文,又不需要引入 [MASK] 这种人工标记?

他的答案叫做排列语言模型(Permutation Language Modeling,PLM)

核心思路有些微妙,但本质上并不复杂:

普通语言模型按照从左到右的顺序预测每个词(GPT 的方式)。排列语言模型则随机打乱预测顺序:在一次训练里,也许先预测第 7 个词,再预测第 3 个词,再预测第 5 个词……顺序是随机的。关键是:模型在预测第 7 个词时,可以看到所有非第 7 个位置的词(不管它们在序列里是第 7 个词的左边还是右边)。

这就在不引入 [MASK] 的情况下,让模型在预测某个词时可以同时利用它前后的所有上下文——实现了"双向感知",却保持了自回归(autoregressive)的训练形式。

实现上,XLNet 使用了一种叫做双流注意力(Two-Stream Attention) 的机制:同时维护两套表示——一套用于"给定当前词的位置,但不看当前词的内容,预测当前词"(Query Stream),另一套用于"已知当前词的内容,更新当前词的表示"(Content Stream)。这两套表示交替更新,让模型能在不作弊的情况下完成排列语言建模。

XLNet 构建在 Transformer-XL 的架构之上,继承了片段级循环和相对位置编码,因此天然支持更长的上下文。

2019 年 6 月,XLNet 发表,宣称在 20 项 NLP 任务上超越了 BERT。这个数字在 NLP 界引发了广泛关注,也引发了相当大的争议。怀疑者的观点很简单:XLNet 使用了更多的训练数据(包括 ClueWeb 等更大的语料库),也训练了更长时间——到底是排列语言模型的设计更好,还是只是数据更多?

这场争论的答案,部分由 RoBERTa(两个月后发表)给出了:更多数据确实很重要,但在同等数据和计算条件下,两者的性能差距实际上很小。XLNet 的架构优势是真实的,但被训练差异放大了。

杨植麟后来从 CMU 回到中国,创立了循环智能,又创立了Moonshot AI(月之暗面),带领团队开发了 Kimi 系列长文本大模型。那个在博士阶段就对"上下文长度"和"预训练目标"痴迷的年轻研究者,在整整五年后,用同样的执念,做出了当时中文互联网上最能处理长文档的大模型——长文本,在他的研究轨迹里,是一条贯穿始终的线索。

12.6 ALBERT:用参数共享做到以小搏大

Transformer-XL 和 XLNet 在上下文长度和训练目标上做了探索,RoBERTa 证明了"把训练做对"的重要性。但到 2019 年中期,一个新的问题开始显现:BERT 太大了

BERT-base 有 1.1 亿个参数,BERT-large 有 3.4 亿个。对于学术研究来说,这意味着:如果你想从头预训练或大幅度微调,你需要相当可观的 GPU/TPU 资源。而 RoBERTa 把数据量扩大到 160GB 并把训练时间翻了几倍——资源需求进一步拉高了门槛。

一个自然的问题是:BERT 的参数有多少是真正"有用的",多少是冗余的?

蓝振忠(Zhenzhong Lan,Google Research 研究员,ALBERT 第一作者)和他的同事在 2019 年提出了 ALBERT(A Lite BERT,轻量版 BERT),用两种参数压缩技术回答了这个问题。

第一种:因子化嵌入参数(Factorized Embedding Parameterization)

在 BERT 里,词嵌入(Embedding)的维度和模型隐藏层的维度是相同的——都是 768(BERT-base)或 1024(BERT-large)。这意味着每个词汇表里的词,都需要一个 768 维的向量来表示。词汇表大约 3 万词,所以光是嵌入矩阵就有 3 万 × 768 ≈ 2300 万个参数。

ALBERT 的观察是:词嵌入需要捕捉的是词汇语义(某个词大致是什么意思),而隐藏层需要捕捉的是上下文语义(在这个具体句子里,这个词意味着什么)。这两种信息需要的表示维度可以不同。

ALBERT 把词嵌入维度降到 128,隐藏层维度保持高位(ALBERT-xxlarge 是 4096),中间用一个投影矩阵连接。这一改动把嵌入参数从 2300 万降到了约 390 万。

第二种:跨层参数共享(Cross-layer Parameter Sharing)

BERT 的 12 层(BERT-base)或 24 层(BERT-large)的 Transformer,每一层都有独立的参数——注意力权重、FFN 权重,互不共享。

ALBERT 提出:让所有层共享同一套参数。第 1 层和第 12 层用完全相同的权重矩阵。信息依然逐层传递(输入经过 12 层的"相同处理"后,表示会不断演化),但参数量减少到了约 1/12。

这听起来像是一个激进的压缩,但实验结果出乎意料:ALBERT 的性能并没有因此崩溃。ALBERT-base(12M 参数)在 GLUE 上的分数接近 BERT-base(110M 参数);ALBERT-xxlarge(235M 参数)在多个基准上超过了 BERT-large(334M 参数)。

ALBERT 还把 NSP 任务替换成了句子顺序预测(Sentence Order Prediction,SOP):给模型两个连续的句子,让它判断顺序是否正确(正例是原始顺序,负例是两句互换)。这比 NSP 更难(NSP 的负例是完全无关的句子对,太容易区分),迫使模型真正理解句间关系。

ALBERT 的成果提示了一个深刻但反直觉的认知:Transformer 在大量层之间的"重复"中,并不需要每一层都学习完全不同的表示。深度网络的威力,有相当一部分来自"多次处理"而非"多种不同处理"。这个认知,在后来很多参数效率研究(包括知识蒸馏、层共享的 MoE 等)中都留下了影响。

12.7 DistilBERT:把 BERT 装进口袋

ALBERT 减少了参数量,但实际推理速度并没有显著提升——因为层数不变,每一步推理仍然要经过所有层的计算。研究者们面临的另一个工程现实是:哪怕只有 1.1 亿参数的 BERT-base,在手机和嵌入式设备上跑起来也太慢了。

想象一个场景:你在 2019 年开发一款客服机器人,需要实时回复用户的消息,延迟必须控制在 100 毫秒以内。BERT-base 在单块 GPU 上的推理时间是每条文本约 40-60 毫秒;但如果你要部署在 CPU 上(大多数公司无法为每个请求分配 GPU),这个数字会飙升到几百毫秒。BERT-large 就更不用说了。

2019 年 10 月,Hugging Face维克托·萨纳(Victor Sanh,Hugging Face 研究员,DistilBERT 第一作者)和同事们发表了 DistilBERT(Distilled BERT),提出了一个完全不同的压缩思路:知识蒸馏(Knowledge Distillation)

知识蒸馏的核心想法,是让一个"学生模型"去模仿"教师模型"的行为,而不是从头预训练。

在传统预训练中,模型的训练目标是"正确预测被遮住的词"——直接对比模型输出和真实答案。知识蒸馏的训练目标则是:让学生模型的输出分布尽可能接近教师模型的输出分布,包括中间层的注意力分布和隐藏层表示,而不只是最终答案。

这个区别比看起来要深刻得多。教师模型(BERT)在推理时,不只是输出"被遮的词是 X",它的输出是一个所有词的概率分布——也许"X"的概率是 0.7,但"Y"有 0.15,“Z"有 0.08。这个"软标签”(soft label)包含了教师模型对语言的理解:它知道这个位置出现 X 最可能,但 Y 也不是不可能。如果只让学生模仿"X"这个答案,学生会丢失这些细微的语义信息;如果让学生模仿整个概率分布,它能学到更丰富的知识。

这就像你把一位大学教授的课程录像下来,让一个中学生反复观看,直到这个中学生不只能给出正确答案,还能给出和教授几乎一样的推理过程和对备选答案的权衡——学生不需要有教授一样的背景经历,只需要通过模仿将教授的"思维模式"内化。这比单纯告诉他"答案是 X"要深刻得多。

DistilBERT 的结果让工程师们眼睛一亮:

  • 参数量:6600 万(BERT-base 的 60%)
  • 推理速度:快 60%(同样的 CPU/GPU 硬件上)
  • GLUE 性能:保留了 BERT-base 97% 的性能

这是一个非常漂亮的权衡:用 40% 的参数量减少,换来 60% 的速度提升,同时只损失 3% 的性能。

DistilBERT 的历史意义,远超过它的技术贡献本身。这个工作是 Hugging Face 从"工具库"走向"行业标准"的关键产品。2019 年,Hugging Face 的 Transformers 库已经是 NLP 领域使用最广泛的开源库,但 DistilBERT 让他们有了自己的"研究身份"——他们不只是构建工具的公司,也是推动技术进步的研究者。

更重要的是,DistilBERT 开创了一个在工业界被大规模采用的新思路:不一定要让模型从零预训练,可以把大模型的知识"蒸馏"给小模型。这个思路在后来的 Phi 系列(第二十四章中会详述)中得到了更大规模的演化,但核心逻辑——“让小模型学习大模型的行为,而不是从数据中重新学习一切”——在 2019 年就被确立了。

12.8 SpanBERT:更大颗粒度的理解

RoBERTa 解决了"把 BERT 训练到位"的问题,DistilBERT 解决了"把 BERT 部署到设备上"的问题。但一些研究者开始追问一个更根本的问题:BERT 的预训练目标是否真的对所有任务都是最优的?

具体来说,BERT 的 MLM 随机遮住单个词——“昨天我[MASK]了一顿火锅”。这适合训练模型理解词汇语义,但很多 NLP 任务关注的是"片段"而非单词:

  • 命名实体识别:识别"New York City"应该作为一个整体,而不是三个分开的词
  • 关系抽取:理解"乔布斯"和"苹果公司"之间的关系
  • 指代消解:在"约翰走进办公室,他打开电脑"中,"他"指代的是哪个实体?
  • 问答:答案通常是一个连续的文本片段,如"1969 年 7 月 20 日"

这些任务的共同点是:关键信息以片段(span) 的形式存在,而不是孤立的词。用单词级别的 MLM 训练模型,是否在结构上就与这些任务不对齐?

2019 年 7 月,Facebook AI Research普林斯顿大学曼达尔·乔希(Mandar Joshi,华盛顿大学博士生,SpanBERT 第一作者)等人提出了 SpanBERT,试图回答这个问题。

他们的核心创新叫做片段遮蔽(Span Masking)——不再随机选择单个词遮蔽,而是随机选择连续的多个词组成片段,把整个片段遮住。比如,不是遮住"New"或"York",而是直接遮住"New York City"这整个实体名。

但片段遮蔽只解决了"遮蔽粒度"的问题,还没有完全解决"片段边界理解"的问题。SpanBERT 还引入了第二个创新:片段边界目标(Span Boundary Objective,SBO)

SBO 的逻辑是这样的:在预测被遮蔽片段内部的词时,模型不仅可以使用片段外部的上下文,还必须使用片段两端的词(边界词)来预测片段内部每个位置的内容。

这迫使模型学会两件事:一是理解片段外部的上下文,二是从片段的两端向内"推断"片段的内容。这种推断能力,正是指代消解、关系抽取等任务所需要的——你需要知道一个片段的"轮廓",然后基于这个轮廓判断它指代什么、与哪个实体有什么关系。

SpanBERT 的实验结果给出了清晰的答案:

  • SQuAD 2.0(阅读理解/问答)上,SpanBERT 比 BERT-large 提升了约 5 个百分点
  • OntoNotes(指代消解)上,提升了约 2.7 个百分点
  • TACRED(关系抽取)上,超越了 RoBERTa

SpanBERT 揭示了一个重要原则:预训练目标的设计,不是一个"越通用越好"的问题,而是一个需要与目标任务的结构相匹配的问题。单词级的 MLM 对词义理解是足够的,但对于需要理解实体和关系的任务,片段级的预训练目标带来了可测量的优势。

这个认知,是后来一系列"任务感知预训练"(task-aware pretraining)研究的先声。

12.9 ELECTRA:让每个 Token 都参与学习

2020 年初,凯文·克拉克(Kevin Clark,Google 研究员,ELECTRA 第一作者,后获斯坦福 CS 博士)和他的导师曼宁(Christopher Manning,1962-,斯坦福大学教授,自然语言处理领域元老)以及谷歌的 Quoc Le 一起,发表了 ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accurately)。

ELECTRA 针对的是 BERT 的 MLM(遮蔽词预测)一个长期被忽视的效率问题。

在 BERT 的 MLM 里,每个输入序列有 15% 的词被遮住。模型的训练信号只来自这 15% 的被遮词——其他 85% 的词,在损失计算时完全不贡献梯度。换句话说,每一步训练,模型只在 15% 的位置上真正"学习"了东西。另外 85% 的计算量,在向前传播(forward pass)时消耗了,但在向后传播(backward pass)时什么都没传。

这是一种巨大的浪费。

克拉克等人设计了一种完全不同的预训练目标,称为替换词检测(Replaced Token Detection,RTD)

整个方案有两个模型协同工作:

生成器(Generator) 是一个小型 MLM,负责"制造假词":它按照正常的 MLM 方式遮住一部分词,然后用自己的预测结果填充——注意,不是填正确答案,而是用模型预测的词(可能对,可能错,但分布接近真实词)。

判别器(Discriminator) 就是 ELECTRA 本体,一个完整的 Transformer 编码器。它接收生成器填充后的"污染版"句子,对每一个 token 做二分类判断:这个词是原始词,还是被生成器替换过的词?

关键区别在于:判别器对所有 token 做预测,而不是只对 15% 的 Mask 位置做预测。每一个 token,无论是否被替换,都向判别器贡献损失。训练信号的利用效率是 100%,而不是 BERT 的 15%。

让我们用一个直觉类比来感受这个差异:

想象你在练习区分"真钞"和"假钞"。BERT 的方式是:先把大部分钱放进保险箱,只把 15% 的钱摆出来让你猜真假。ELECTRA 的方式是:把一叠混有少量假钞的钱全都摊在桌子上,让你逐张检验——每张钱都是一次有效学习机会,而且假钞被精心制作(由生成器生成),不是随便找了张白纸糊弄你。

结果令人印象深刻:

  • ELECTRA-small(14M 参数,同等 GPU 算力为 BERT-base 的 25%):在 GLUE 上接近 BERT-base(110M 参数)的性能
  • ELECTRA-base(110M 参数,与 BERT-base 同等大小):超越了参数量是其三倍的 BERT-large(334M 参数)
  • ELECTRA-large(335M 参数):在 GLUE 上达到了 89.7 分,超越当时所有模型

ELECTRA 证明了一件深刻的事:预训练任务的效率,不亚于参数量和数据量。一个设计良好的训练目标,可以从同等计算中榨取更多的学习信号。这个洞察后来成为了"合成数据"和"过程奖励模型"研究的前驱思想——我们将在第十八章重新看到它的影响。

图 12.1:ELECTRA 的生成器-判别器架构。左侧生成器是小型 MLM,对被遮蔽的 token 生成替换词;右侧判别器对每一个 token 判断是否被替换(图中标注 “replaced” 和 “original”),100% 的 token 贡献训练信号。来源:Clark et al. 2020,图 2。


12.10 T5:把一切变成"文本到文本"

如果说 RoBERTa 是"把训练做对",ELECTRA 是"把预训练目标做对",那么 T5(Text-to-Text Transfer Transformer)则是一个更宏大的野心:把 NLP 的一切问题,统一成同一种形式

2019 年 10 月,谷歌 Brain 的科林·拉斐尔(Colin Raffel,1987-,谷歌 Brain 研究科学家,T5 第一作者,后任 UNC Chapel Hill 教授)和他的同事夏泽尔(Noam Shazeer,谷歌 Brain 资深研究员,注意力机制先驱)等 9 人联署,发布了一篇长达 67 页的技术报告——这在 NLP 领域相当罕见。

他们提出的问题,是整个预训练时代从未有人系统回答过的:

在 Transformer 的预训练-微调范式里,究竟哪些设计选择是关键的?架构的选择(Encoder-only?Decoder-only?Encoder-Decoder?)、预训练任务的选择(MLM?去噪?顺序预测?)、数据集的选择(Wikipedia?CommonCrawl?多大规模?)、微调方式的选择——这些因素各自贡献了多少,有没有一套系统性的答案?

拉斐尔团队的方法论很明确:做一个大规模的系统性消融实验,一次只改一个变量,用同样的基础设施和评估协议测试所有变体。这听起来平凡,但在当时的 NLP 领域非常罕见——大多数研究者是"发现了一种有效的东西就发表",而不是"系统地研究哪些成分有效"。

为了让所有任务在同一个框架下对比,他们提出了一个统一原则:把所有 NLP 任务转化为"文本→文本"的格式

这个想法听起来激进,但实际上相当优雅:

  • 机器翻译:“translate English to German: The cat is on the mat” → “Die Katze sitzt auf der Matte”
  • 情感分类:“sentiment: This movie was great, I really enjoyed it” → “positive”
  • 摘要生成:“summarize: [一篇长文章]” → “[摘要]”
  • 问答:“question: What is the capital of France? context: France is a country in Europe. Its capital is Paris.” → “Paris”
  • 回归任务(STS-B 句子相似度):“stsb sentence1: … sentence2: …” → “3.8”(一个数字作为文本输出)

所有任务,无论是分类、生成、回归还是翻译,都用同样的输入格式和输出格式。同一个模型,可以被训练去解决所有这些任务,而不需要为每个任务设计专门的"任务头(task head)"。

这个设计的价值不只是工程上的优雅。它还意味着:预训练阶段学到的"文本理解和生成"能力,可以最直接地迁移到所有下游任务,不需要架构层面的适配。

拉斐尔团队还构建了 C4 数据集(Colossal Clean Crawled Corpus,巨型清洁爬取语料库):从 Common Crawl 的公开网页数据出发,做了大量清洗工作(去除非英语内容、去除包含冒犯性词语的页面、去除代码页、去除短文本等),最终得到约 750GB 的高质量英语文本。这是当时最大的公开可用的预训练文本数据集,也成为了后来很多工作的基础语料。

他们的实验发现了一些重要结论:

  • 架构选择:Encoder-Decoder 结构(在需要生成输出的任务上)比纯 Encoder(BERT 风格)或纯 Decoder(GPT 风格)更稳健,尤其对于有明确输入输出格式的任务。
  • 预训练任务:带有"片段遮蔽"(Span Corruption,随机遮住连续的多个词,而不是每次只遮一个词)的去噪任务,比单词级别的 MLM 在生成类任务上表现更好。
  • 规模:在所有变量中,规模(模型大小 × 数据量 × 训练时长)的影响是最显著的,且在测试的范围内没有出现性能上限的迹象。

这最后一个发现,已经隐约透露出了下一章的主题。

T5-11B 是他们发布的最大模型,110 亿参数——在 2019 年底是 NLP 领域最大的预训练模型之一。它在 GLUE(89.7)、SuperGLUE(89.3)等多个权威基准上刷新了记录。

12.11 BART:去噪自编码器的另一条路

T5 证明了"文本到文本"框架的通用性,但对于具体的生成任务——机器翻译、摘要、对话生成——还有另一条思路值得探讨:能否设计一种预训练方式,让模型天然擅长"从被破坏的文本还原出原始文本"?

这个问题的背后,是一个对生成任务本质的观察:好的生成模型需要做两件事——理解输入(读懂你给它的、可能是残缺的或不清晰的内容)和生成输出(用流畅、准确的语言表达出来)。BERT 只有编码器,擅长理解但不擅长生成;GPT 只有解码器,擅长生成但不擅长压缩和理解复杂输入。

2019 年 10 月,Facebook AI Research迈克·刘易斯(Mike Lewis,Facebook AI Research 研究员,BART 第一作者)等人发表了 BART(Bidirectional and Auto-Regressive Transformer),用一个设计优雅的框架回答了这个问题。

BART 的设计思路叫做去噪自编码器(Denoising Autoencoder)

它的预训练过程分两步:

  1. 破坏:对原始文本做多种形式的"随机破坏"——打乱句子顺序、删除某些词、在随机位置插入空白、把某个片段旋转到句子开头……这些破坏方式,比 BERT 的 Masking 更多样、更"激进"
  2. 还原:让模型尽可能地把被破坏的文本还原为原始文本

听起来和 BERT 相似?关键的架构区别在于:BART 使用了完整的编码器-解码器结构

  • 编码器(Encoder):双向,像 BERT 一样处理"被破坏的输入",理解输入的完整上下文
  • 解码器(Decoder):自回归,像 GPT 一样逐词生成"还原的输出"

这是第一个明确把 BERT 的双向理解和 GPT 的自回归生成,合并在同一个 Seq2Seq 框架里的工作。

这就像是在玩一个文字修复游戏,主持人给你一段被人恶意"剪碎"的文章(顺序打乱、部分删除),你需要把它还原成完整的原文。做好这件事,你需要既能理解每个残片的意思(编码器的工作),又能按照正确的顺序、用准确的语言把它们重新拼接出来(解码器的工作)。BART 就是被这样训练的模型。

BART 在生成类任务上的效果,令研究者们印象深刻:

  • 文本摘要(CNN/DailyMail 基准):ROUGE 分数比当时最好的摘要模型提升了约 6 个百分点
  • 机器翻译:在 WMT 罗马尼亚语-英语翻译上超越了 RoBERTa
  • 对话生成:在 ConvAI2 对话数据集上的质量评分显著领先

BART 的历史地位,是作为 T5 的重要"平行实验"——两者思路相似(都是去噪 + 编码器解码器),但细节不同。BART 更倾向于验证不同"破坏方式"的效果,而 T5 更倾向于系统性地比较所有设计决策。两者的共同成功,验证了"编码器-解码器 + 去噪预训练"这条路线的普遍有效性。

BART 后来成为了 Facebook(Meta)内部多个生产系统的技术基础,包括 Facebook 的自动翻译功能和新闻摘要功能。它也是后来很多"条件生成"预训练工作的前驱。

12.12 ERNIE:知识增强的预训练

2019 年上半年,当整个 NLP 社区都在围绕 BERT 做消融实验时,地球另一侧的我们中国研究者们,从一个不同的角度切入了这个问题——他们的问题不是"BERT 的哪些超参数重要",而是"BERT 根本不知道世界是什么样的,我们怎么把这种知识注入进去"。

12.12.1 百度 ERNIE 1.0:知识就是上下文

2019 年 4 月,百度 NLP 团队孙宇(Yu Sun,百度研究员,ERNIE 第一作者)等人发表了 ERNIE 1.0(Enhanced Representation through Knowledge Integration,通过知识集成的增强表示)。

乍看起来,ERNIE 的出发点极为朴素:BERT 把中文文本当作随机的字符序列处理

具体来说,BERT 的 MLM 在中文文本上随机遮住单个汉字。但汉语的语义单元不是汉字,而是词语和短语——"工业"是一个词,"人工智能"是一个短语,"深度学习"也是一个短语。BERT 在预训练时完全不知道这种区别,因为它遮住的是单个字,并没有把词语作为一个整体来理解。

孙宇团队的洞察是:如果我们把遮蔽的单位从"单个字"升级为"实体"和"语义短语",模型就被迫学习更高层次的语言理解

举一个例子:

  • BERT 的预训练任务可能是:今天[MASK]气不错 → 预测"天"(天气中的"天")
  • ERNIE 的预训练任务则是:今天[MASK][MASK]不错 → 预测整个"天气"(作为一个语义单位),或者:[MASK][MASK]是中国互联网最大的搜索引擎 → 预测整个"百度"(作为一个实体名称)

这种"知识掩码(Knowledge Masking)"迫使模型在预测时,必须依赖更长程的上下文语义,而不是仅凭相邻字符推断。

ERNIE 1.0 的训练数据来源于百度百科、百度贴吧、百度知道等中文语料,总量远超谷歌当时公开的 BERT-Chinese 预训练数据。结合知识掩码策略,ERNIE 1.0 在多个中文 NLP 任务上超越了 BERT-Chinese:

  • LCQMC(口语语义相似度):88.9 vs BERT 的 87.0
  • XNLI(跨语言自然语言推理,中文部分):80.9 vs BERT 的 79.7
  • CMRC 2018(中文机器阅读理解):87.9 vs BERT 的 86.9

数字的绝对差距不算大,但意义在于:这证明了预训练范式在中文上同样有效,且可以针对中文语言特性优化。对于每天处理海量中文文本的百度而言,这是一个工程和研究双重价值的突破。

12.12.2 百度 ERNIE 2.0:持续多任务学习

三个月后,2019 年 7 月,百度团队接着发布了 ERNIE 2.0,把思路进一步推进了一步。

如果说 ERNIE 1.0 的创新是"遮蔽什么",ERNIE 2.0 的创新则是"用多少个预训练任务"。

ERNIE 2.0 的核心想法是持续多任务预训练(Continual Multi-task Pretraining):不是只设计一个预训练目标,而是设计 7 个从不同角度、不同难度来理解语言的任务,让模型在这 7 个任务上"同时学习":

  1. 词汇级任务:大写字母预测(判断某个词是否应该大写)、标点符号预测
  2. 结构级任务:句子重排序、句子距离预测(两个句子在原文中相距几段?)
  3. 语义级任务:篇章关系预测(两段文本之间是什么逻辑关系?因果、转折、并列?)、信息检索相关性预测(这段文本和这个查询词相关吗?)

通过这 7 个任务,ERNIE 2.0 的模型被迫学会在词汇、句子、篇章三个层次上同时理解语言结构。

结果:ERNIE 2.0 在英文任务(GLUE)和中文任务上均超越了 XLNet 和 RoBERTa。这是中国团队在 BERT 改进赛道上最有说服力的一次亮相。

12.12.3 清华 ERNIE:知识图谱进入 Transformer

2019 年 5 月,与百度 ERNIE 完全独立(但名字相同),清华大学张正彦​(Zhengyan Zhang,清华大学博士生,现为清华大学助理教授)、韩旭(Xu Han,清华大学助理教授,现为清华大学副教授。知识增强、知识图谱领域的代表性学者)等人发表了同样名为 ERNIE 的论文(Enhanced Language Representation with Informative Entities)。

这个工作的出发点与百度完全不同:不是改变遮蔽策略,而是直接把知识图谱的结构信息注入到 BERT 里

具体来说,清华 ERNIE 在 BERT 的基础上增加了一个额外的"知识融合层":

  1. 首先用一个命名实体识别(NER)模型,识别出文本中所有的实体(人名、地名、机构名……)
  2. 对识别到的实体,查询知识图谱(Wikidata 等),获取该实体的图谱嵌入向量(通过 TransE 等知识图谱嵌入方法预训练得到)
  3. 在 BERT 的特定层,把实体的图谱嵌入向量与 BERT 的文字表示向量融合在一起——让文字理解和知识图谱理解互相影响

这就像给模型配了一本"百科全书":模型读到"爱因斯坦"时,不只知道这是个名字,还知道他出生于1879年、是物理学家、提出了相对论、获得了诺贝尔奖——所有这些知识,通过知识图谱嵌入,都流进了模型对这个词的理解里。

清华 ERNIE 在关系分类(TACRED 基准)和命名实体识别(FEW-NERD)等知识密集型任务上,取得了明显优于 BERT 的效果。

更重要的是,清华 ERNIE 提出了一个在当时令人耳目一新的研究方向:预训练语言模型 + 知识图谱。这个方向后来衍生出了大量研究工作,探索如何把结构化知识(知识图谱、知识库、常识库)系统性地融入语言模型,成为 2020-2022 年 NLP 领域的一条重要支线。

12.13 支流与全景:那些同样改变了领域的工作

2019-2020 年的 NLP,不只是这几个主要角色的故事。在主线之外,有几条支线同样深刻地改变了后来的走向。

12.13.1 UniLM:一个模型,三种用法

2019 年,微软研究院董力(Li Dong,微软亚洲研究院研究员)等人提出了 UniLM(Unified Language Model Pre-training)。

UniLM 解决的是一个工程上令人烦恼的问题:对于不同类型的 NLP 任务,研究者总是需要选择不同的架构——理解型任务(分类、抽取)适合 BERT 这样的双向 Encoder,生成型任务(翻译、摘要)适合 GPT 这样的单向 Decoder 或 T5 这样的 Encoder-Decoder。一个团队要做多种任务,就要维护多个不同架构的模型——工程成本很高。

UniLM 的核心洞察优雅得令人叹服:架构的区别,本质上是注意力掩码矩阵的区别

  • BERT 风格(双向):所有 token 之间都可以互相注意(注意力矩阵全 1)
  • GPT 风格(单向):每个 token 只能注意它之前的 token(注意力矩阵下三角)
  • Seq2Seq 风格:Encoder 部分全连接,Decoder 部分只连接之前位置(混合矩阵)

UniLM 将三种掩码策略都用于同一套模型权重的预训练:模型在训练时,随机切换三种掩码矩阵,同时优化三种预训练目标。训练完成后,这一套模型权重可以在不改变任何架构的情况下,执行三种截然不同的任务。

结果:UniLM 在文本摘要(CNN/DailyMail)、问题生成(SQuAD QG)等需要生成能力的任务上,同时超越了 BERT 和 GPT-2。更重要的是,它证明了"一套参数,多种任务形式"的可行性,为后来的 GLM(General Language Model)系列奠定了思路基础。

12.13.2 XLM 与 mBERT:语言的边界正在消失

2018 年 10 月,谷歌在发布 BERT 时,悄悄附带了一个东西:mBERT(Multilingual BERT,多语言 BERT)——一个在 104 种语言的维基百科文章上联合预训练的 BERT 模型,每种语言对应大约 1-2% 的训练数据。

mBERT 最令研究者们感到意外的,不是它能处理多种语言(这是设计预期),而是它展现出了一定的跨语言迁移(cross-lingual transfer) 能力——即使没有任何明确的跨语言监督信号,用英语标注数据训练的分类器,在中文、德语、法语测试集上也有一定效果。

这个现象在当时没有人完全理解,但它暗示了一件深刻的事:语言的表层差异(不同的字符、不同的词序),可能掩盖了更深层的结构共通性——如果模型足够大、数据足够多,它可能自动学会跨越语言表层,在更高层次上对齐概念。

2019 年,Facebook AI Research纪尧姆·兰普尔(Guillaume Lample,Facebook AI Research 研究员)等人发表了 XLM(Cross-Lingual Language Model Pretraining),在 mBERT 的基础上引入了明确的跨语言训练任务:翻译语言建模(Translation Language Modeling,TLM)——用平行语料(同一段文字的两种语言版本)作为输入,让模型在预测被遮词时,同时利用另一种语言的对应上下文。

结果:XLM 在 XNLI(跨语言自然语言推理)基准上,把跨语言迁移的准确率提升了约 5 个百分点。更重要的是,XLM 确立了一个研究范式:多语言预训练不是一个特殊问题,而是一般预训练框架在多语言场景下的自然延伸

这条线索,在后来的 mBERT 2.0(XLM-R)、Multilingual-T5 等工作中继续演进,最终形成了覆盖数百种语言的多语言基础模型生态。

12.13.3 Megatron-LM:算力工程的门槛

2019 年 9 月,NVIDIA 发布了 Megatron-LM,一个拥有 83 亿参数的语言模型——在当时,这是 NLP 领域规模最大的模型。

但 Megatron-LM 的意义,不主要在于参数量,而在于它解决了一个此前没有人系统性解决过的工程问题:如何在多块 GPU 上高效训练一个单独的大模型(而不是数据并行——把同样的模型复制到多块 GPU 上,各自处理不同的数据批次)。

NVIDIA 的研究员们提出了模型并行(Tensor Parallelism):把 Transformer 中的矩阵乘法,沿着特定维度切割,分配到不同 GPU 上同时计算。比如,一个 4096 × 4096 的权重矩阵,可以沿着列方向切成 8 份,分别放在 8 块 GPU 上——每块 GPU 只需要存储和计算 4096 × 512 的矩阵,结果合并后等效于整个矩阵的乘法。

这个技术解决了一个关键瓶颈:单块 GPU 的显存是有限的(当时顶级的 NVIDIA V100 只有 32GB),而更大的模型意味着需要更多显存。这为 AI 研究社区提供了一套高效、可扩展的框架,使得训练千亿参数级的“一张卡装不下”的模型变成了工业界的标准实践。

Megatron-LM 的工程贡献,为后来的超大规模训练——GPT-3、PaLM、LLaMA——提供了基础框架。更深层的意义在于:当算力工程问题被解决,规模扩展就变成了一个只受资本约束的问题,而不再受技术可行性约束。这是一个微妙但极为重要的转变——我们将在下一章看到它的全部含义。

12.13.4 领域特定 BERT:通用 vs 专业

2019 年,一个"从众效应"在 NLP 领域蔓延开来:各行各业的研究者开始用 BERT 作为基础,在自己的领域语料上继续预训练,生产出大量"领域特定 BERT"。

BioBERT(首尔大学,Lee et al., 2019):在 PubMed 和 PMC 的生物医学论文(约 21GB)上继续预训练 BERT,在 7 个生物医学 NLP 任务上全面超越通用 BERT。

SciBERT(艾伦人工智能研究所,Beltagy et al., 2019):在 140 万篇科学论文(生物学 + 计算机科学)上预训练,在科学文本的阅读理解、文献引用分类等任务上大幅领先。

LegalBERT(伦敦大学学院,Chalkidis et al., 2020):在欧洲法律文本语料上预训练,在法规文本分类、合同条款分析等任务上超越通用模型。

FinBERT(瑞士联邦理工,Araci et al., 2019):在财经新闻和 SEC 文件上预训练,在金融情感分析上接近专家级水平。

这一波"BERT 领域化"运动,集体验证了一个重要原则:通用预训练学到的语言能力,可以通过"继续预训练"(continued pretraining)高效定制到特定领域,成本远低于从零开始。在这些领域工作的从业者——医生、律师、金融分析师——第一次拥有了真正理解他们专业语言的 AI 工具。

这个"继续预训练"的模式,后来成为了"领域适配(domain adaptation)"技术的标准范式,在企业 AI 部署中被广泛采用。

12.14 "拆解年"的收获清单

我们已经走完了 2019-2020 年预训练改进的主要路线。让我们再总结一下,看看这一年到底发现了什么。这些工作,从不同角度回答了"预训练语言模型为什么有效,以及如何做得更好"这个问题的不同子问题:

训练方式比架构创新更重要(RoBERTa):不需要任何架构修改,只需要把训练做"对"——更多数据、更大批次、更长时间、去掉无效的 NSP——就能大幅超越那些声称有架构突破的工作。

GPT 路线有独特价值(GPT-2):单纯的规模扩展 + 自回归,可以涌现出 zero-shot 任务完成能力,这是 BERT 路线无法做到的。两条路线不是竞争关系,而是探索了不同的能力维度。

上下文窗口可以打破(Transformer-XL):固定的 512 token 限制不是 Transformer 的本质约束,片段级循环 + 相对位置编码可以让模型感知远超窗口长度的上下文。

Masking 的训练/推理不一致是真实问题,但有解法(XLNet):排列语言模型在理论上更优雅,但在实践中与训练充分的 BERT 差距很小,表明这个问题对最终效果的影响被高估了。

参数可以大幅压缩而不丧失能力(ALBERT):跨层参数共享揭示了 Transformer 各层之间存在大量可复用的计算模式,深度带来的价值在于"多次处理"而非"多种处理"。

知识蒸馏可以高效传递预训练能力(DistilBERT):大模型的知识可以迁移给小模型,而无需从零重新预训练——这为工业部署提供了可行路径。

预训练目标的粒度应当与任务匹配(SpanBERT):单词级 MLM 不是万能的,对于片段和实体级别的任务,片段遮蔽 + 片段边界目标带来了可测量的优势。

预训练目标的效率可以提升 6-7 倍(ELECTRA):让所有 token 而非 15% 的 token 参与训练信号,是一个被低估许久的低挂果实。

文本到文本的统一框架是可行的(T5):不同任务不需要不同的任务头,一套统一的输入输出格式足以覆盖大多数 NLP 任务,且规模对性能的影响在测试范围内没有出现上限。

编码器+解码器+去噪是强力组合(BART):把双向理解和自回归生成结合起来的 Seq2Seq 去噪框架,在生成类任务上全面领先。

预训练可以注入领域知识(ERNIE 系列):通过知识掩码、持续多任务学习、或知识图谱融合,可以把结构化知识注入预训练模型,提升知识密集型任务的效果。中国团队在非英文语言优化上的贡献,验证了预训练范式的跨语言普适性。

规模工程障碍已被移除(Megatron-LM):模型并行技术让"显存装不下"不再是阻碍,超大规模模型在工程上变得可行——剩下的问题,只是算力和资金。

把这些发现拼在一起,形成了 2020 年初 NLP 社区对预训练范式的一份新的共识:

  1. 数据质量和数量至关重要,甚至超过架构设计
  2. 训练稳定性和充分性是容易被忽视但影响巨大的因素
  3. 预训练任务的效率和粒度值得仔细设计
  4. 规模是目前所有可控变量中影响最稳定的一个,且没有看到上限
  5. 知识注入是弥补语言模型"只知文字、不知世界"这一根本局限的有效方向之一

12.15 边界与局限:拆解的尽头

"拆解年"的成果是真实的,但它也有清晰的边界。

改进的边际效益在递减。 RoBERTa 比 BERT 好 8 个点,但这 8 分里大部分来自"把 BERT 训练到位",而不是架构洞察。ALBERT 用参数共享节省了参数,但绝对性能并没有超过 RoBERTa。ELECTRA 提升了参数效率,但在无限算力的假设下,它和 MLM 的差距会缩小。T5 的系统性研究最有价值,但它的核心发现也是"规模最重要"——这本身就是在说:拆解带来的收益已接近饱和,需要更激进的假设。

计算成本快速攀升,研究门槛也在提高。 BERT-base 的训练需要 4 天 TPU,RoBERTa 需要更长时间和更多数据,T5-11B 需要数千块 TPU 核心跑数周。从 2018 年到 2020 年,领先的 NLP 预训练研究所需的算力门槛上升了一到两个数量级。这意味着:能做"拆解实验"的机构越来越少,学术界正在失去验证工业界声明的能力。这个趋势,在 GPT-3 时代会变得更加明显。

英语中心主义依然存在。 尽管 mBERT、XLM、百度 ERNIE 等工作拓宽了预训练的语言边界,但领先模型仍然以英语为主。非英语语言的数据质量、数量、评测基准,都与英语存在明显差距。世界上有超过 7000 种语言,而大多数预训练研究实际上只覆盖了其中数十种。

知识注入的效果仍然有限。 ERNIE 系列和清华 ERNIE 证明了知识增强的可行性,但在更复杂的多步推理、常识推断任务上,这些知识增强模型与"真正理解世界"仍然相差甚远。模型在训练集上表现出色,但在需要真实世界知识推理的场景(医学诊断、法律分析、科学推理)中,仍然频繁出错。

最根本的问题仍未解决:为什么语言模型是好的世界模型? 这一章回答的是"哪些设计决策重要",但没有回答"为什么预测下一个词能让模型理解世界"。这个更深层的问题,直到今天仍然是争论的焦点。

拆解年最终给社区留下的,是一张精确的"配方清单"——但同时也留下了一个越来越清晰的认识:所有这些配方改进叠加在一起,仍然有一个无法突破的上限。真正的突破,需要一个不同的假设。

2020 年,这个假设来了——它的名字,叫做规模定律(Scaling Laws)

12.16 知识自检

读完本章,你应该能做到:

  • 解释 RoBERTa 论文的核心发现,以及它为什么对 2019 年 NLP 社区是"令人尴尬的"
  • 描述 GPT-2 的 zero-shot 能力是什么,以及它与 BERT 路线的本质区别
  • 说出 OpenAI 因为什么理由拒绝公开 GPT-2 完整权重,以及这场争论对 AI 安全认知产生了什么影响
  • 解释 Transformer-XL 的"片段级循环"是如何突破固定上下文窗口的,以及为什么需要同时引入相对位置编码
  • 描述 BERT 的 Masked Language Modeling 存在什么训练/推理不一致问题,以及 XLNet 的排列语言模型如何在原理上绕开这个问题
  • 说出 ALBERT 的两种参数压缩技术(因子化嵌入 + 跨层共享),以及这两种技术为什么不会严重损害性能
  • 解释知识蒸馏(DistilBERT)与从头预训练的核心区别,以及为什么蒸馏后的小模型能保留大部分性能
  • 解释 ELECTRA 的关键效率洞察:为什么它比 MLM 的训练信号利用效率高 6-7 倍
  • 说出 T5 的"文本到文本"统一框架的核心价值:为什么这种统一格式有利于迁移学习
  • 区分百度 ERNIE 和清华 ERNIE 的技术路线有何根本不同

12.17 常见误解

❌ “RoBERTa 是对 BERT 的架构改进,它设计了更好的模型结构”
✅ 实际上:RoBERTa 没有改变 BERT 的任何架构——相同的 Transformer Encoder、相同的 MLM 预训练任务、相同的微调范式。它只改了训练超参数(更多数据、更多步数、更大 batch、动态 Masking、去掉 NSP)。它的价值在于揭示:BERT 的原始实现是欠训练的,很多"超越 BERT"的声称需要重新审视。

❌ “GPT-2 被 OpenAI 限制发布,是因为它真的被证明危险”
✅ 实际上:OpenAI 当时的限制是一种预防性决策,并没有真实滥用案例作为证据。几个月后,他们在没有发现重大滥用的情况下陆续发布了完整版本。这场争议的意义在于:它是 AI 历史上第一次主流机构以安全为由系统性地限制模型发布,开启了"分阶段发布"这一后来被广泛采用的做法。

❌ “XLNet 比 BERT 好,因为排列语言模型在理论上消除了 Masking 的缺陷”
✅ 实际上:XLNet 最初声称的大幅优势,在很大程度上来自更多的训练数据和更长的训练时间。在训练条件对等的情况下,XLNet 和 RoBERTa 的差距很小。排列语言模型在理论上更优雅,但实践中"Masking 的训练/推理不一致"对最终性能的影响没有想象中那么大。

❌ “ALBERT 比 BERT 小,所以推理速度更快”
✅ 实际上:ALBERT 的"小"是指参数数量少(因为跨层共享,不需要为每一层单独存储参数),但推理时仍然需要经过所有层的计算。ALBERT-large(24层)和 BERT-large(24层)的推理速度基本相同,因为前向传播经过的层数一样多。ALBERT 节省的是存储空间和内存占用,而不是推理时间。真正速度更快的是 DistilBERT,它减少了层数(6层 vs 12层)。

❌ “ELECTRA 的生成器也是最终使用的模型”
✅ 实际上:ELECTRA 训练完成后,**只使用判别器(Discriminator)**作为下游任务的 Backbone,生成器在预训练结束后被丢弃。判别器是一个标准的 Transformer Encoder,和 BERT 结构相同,只是通过 RTD 任务而非 MLM 任务预训练。

❌ “百度 ERNIE 和清华 ERNIE 是同一个工作”
✅ 实际上:这是完全独立的两个研究团队在 2019 年发布的两个同名但技术路线不同的工作。百度 ERNIE 的创新是"知识掩码"——把遮蔽单位从单字升级为实体和短语,是对预训练目标的改进;清华 ERNIE 的创新是"知识图谱融合"——把 Wikidata 等知识图谱的实体嵌入与 BERT 的文字表示融合,是对输入信息的增强。两者都叫 ERNIE 完全是巧合。

❌ “T5 的’文本到文本’就是把所有任务都当成问答”
✅ 实际上:T5 的文本到文本是一种更通用的转换:任意形式的 NLP 输入都被格式化为一段文本(加上任务标签前缀),任意形式的输出也都被格式化为一段文本。这包括分类(输出类别名称的文字)、回归(输出数字的文字表示)、翻译、摘要、问答等,是一个统一接口,而非单指"问答"格式。


本章关键词

词汇 简明定义
RoBERTa Facebook AI 2019 年发布,通过系统性优化 BERT 训练超参数(更多数据、更大批次、动态 Masking、去除 NSP)而非改变架构,全面超越当时所有"架构改进版 BERT"
动态 Masking(Dynamic Masking) 每次训练时重新随机决定遮蔽位置,而不是在数据预处理时固定;增加训练数据多样性
Next Sentence Prediction(NSP) BERT 原有的预训练任务之一:判断两个句子是否相邻;RoBERTa 证明移除它不损害甚至略微提升性能
GPT-2 OpenAI 2019 年发布,将 GPT-1 参数量从 1.17 亿扩展到 15 亿,首次展示 zero-shot 任务完成能力;因安全争议分阶段发布,开创了"负责任发布"先例
Zero-shot(零样本) 模型无需针对特定任务进行微调,仅凭自然语言描述即可完成该任务;GPT-2 首次在语言模型中展示了实用的 zero-shot 能力
Transformer-XL CMU/Google Brain 2019 年发布,引入片段级循环和相对位置编码,突破 Transformer 的固定上下文窗口限制
片段级循环(Segment-Level Recurrence) Transformer-XL 的核心机制:处理新片段时,缓存并复用上一片段的隐层状态,实现跨片段的信息传递
相对位置编码(Relative Positional Encoding) 用 token 之间的相对距离而非绝对位置编码位置信息,使跨片段的位置感知保持准确
XLNet CMU/Google Brain 2019 年发布,基于 Transformer-XL 架构,采用排列语言模型预训练,在不引入 [MASK] 的情况下实现双向上下文利用
排列语言模型(Permutation Language Modeling,PLM) XLNet 的预训练目标:随机打乱预测顺序,使每个 token 在预测时可利用双向上下文,同时保持自回归形式
ALBERT Google 2019 年发布,通过因子化嵌入参数和跨层参数共享大幅减少参数存储量,同时保持竞争性能
跨层参数共享(Cross-layer Parameter Sharing) ALBERT 的核心技术:所有 Transformer 层共享同一套权重,参数存储量减少至 1/N(N 为层数),但前向传播计算量不变
DistilBERT Hugging Face 2019 年发布,通过知识蒸馏从 BERT-base 训练出 6600 万参数的学生模型,速度快 60%,保留 97% 性能
知识蒸馏(Knowledge Distillation) 让小模型(学生)模仿大模型(教师)的输出分布和中间层表示,而非直接从标注数据训练,实现能力的高效迁移
SpanBERT Facebook/Princeton 2019 年发布,采用片段遮蔽和片段边界目标,增强模型对命名实体和文本片段的理解能力
片段遮蔽(Span Masking) 遮蔽连续多个词组成的片段而非单个词,迫使模型学习更高粒度的语义理解
ELECTRA Google/Stanford 2020 年发布,采用生成器-判别器架构,通过替换词检测任务让 100% 的 token 参与训练
替换词检测(Replaced Token Detection,RTD) ELECTRA 的预训练目标:判断每个 token 是原始词还是被小型生成器替换的词;全 token 参与,训练效率远高于 MLM
T5 Google Brain 2019/2020 年发布,将所有 NLP 任务统一为"文本→文本"格式,并进行了大规模系统性消融实验
C4(Colossal Clean Crawled Corpus) T5 使用的约 750GB 高质量英语预训练数据集,从 Common Crawl 经大量清洗工作得到
BART Facebook AI 2019 年发布,采用编码器-解码器架构,通过去噪自编码器预训练,在生成类任务(摘要、翻译)上效果突出
去噪自编码器(Denoising Autoencoder) BART 的预训练框架:先对文本做多种破坏(打乱、删除、旋转),再让模型还原原始文本,训练兼顾理解与生成
ERNIE(百度) 百度 2019 年发布,通过知识掩码(遮蔽实体和短语而非单字)提升中文 NLP 任务效果,2.0 版本进一步引入多任务持续学习
ERNIE(清华) 清华大学 2019 年发布(与百度 ERNIE 独立),通过融合知识图谱实体嵌入与 BERT 文字表示,增强知识密集型任务性能
UniLM 微软研究院 2019 年发布,通过在同一套参数上用不同注意力掩码矩阵预训练,实现单向/双向/Seq2Seq 三种用途
Megatron-LM NVIDIA 2019 年发布,引入模型并行(张量并行)技术,使超大模型的多卡训练变得工程可行,为后续 GPT-3 等超大规模训练奠定基础
模型并行(Tensor Parallelism) 将单个大模型的矩阵计算沿维度切割分配到多块 GPU 上,使显存超过单卡上限的模型变得可以训练
领域特定 BERT(Domain-Specific BERT) 以通用 BERT 为基础,在特定领域语料(医学/法律/金融等)上继续预训练的定制化模型,在对应领域任务上大幅领先通用模型

延伸阅读

  • 必读:Liu, Y., Ott, M., Goyal, N., et al. (2019). RoBERTa: A Robustly Optimized BERT Pretraining Approach. arXiv:1907.11692.——BERT 改进期最重要的论文,第 4-5 节的消融实验是理解"哪些超参数重要"的最佳参考

  • 必读:Raffel, C., Shazeer, N., Roberts, A., et al. (2020). Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. JMLR.——T5 论文,第 3 节的系统性消融实验是迄今对预训练设计决策最全面的实证研究

  • 推荐:Radford, A., Wu, J., Child, R., et al. (2019). Language Models are Unsupervised Multitask Learners. OpenAI Blog.——GPT-2 技术报告,zero-shot 能力的首次系统性展示,语言简洁,附有大量生成样本便于直观理解

  • 推荐:Dai, Z., Yang, Z., Yang, Y., et al. (2019). Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context. ACL 2019.——Transformer-XL 论文,片段级循环和相对位置编码的原始描述,理解长上下文 Transformer 的必读文献

  • 推荐:Yang, Z., Dai, Z., Yang, Y., et al. (2019). XLNet: Generalized Autoregressive Pretraining for Language Understanding. NeurIPS 2019.——XLNet 论文,第 2 节对 BERT MLM 缺陷的分析值得精读,排列语言模型的动机比技术细节本身更有启发

  • 推荐:Clark, K., Luong, M.-T., Le, Q. V., & Manning, C. D. (2020). ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators. ICLR 2020.——ELECTRA 论文,Figure 1 的架构图和 Table 1 的效率对比是本章相关内容的最佳图示

  • 推荐:Lan, Z., Chen, M., Goodman, S., et al. (2019). ALBERT: A Lite BERT for Self-supervised Learning of Language Representations. ICLR 2020.——ALBERT 论文,参数共享实验的消融分析揭示了 Transformer 冗余度问题

  • 推荐:Sanh, V., Debut, L., Chaumond, J., & Wolf, T. (2019). DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter. arXiv:1910.01108.——DistilBERT 论文,知识蒸馏用于压缩预训练语言模型的奠基之作

  • 推荐:Lewis, M., Liu, Y., Goyal, N., et al. (2020). BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension. ACL 2020.——BART 论文,Seq2Seq 去噪预训练框架的系统性研究

  • 推荐:Joshi, M., Chen, D., Liu, Y., et al. (2020). SpanBERT: Improving Pre-training by Representing and Predicting Spans. TACL.——SpanBERT 论文,片段级预训练目标对关系和指代任务的提升

  • 推荐:Sun, Y., Wang, S., Li, Y., et al. (2019). ERNIE: Enhanced Representation through Knowledge Integration. arXiv:1904.09223.——百度 ERNIE 1.0 论文,知识掩码策略的原始描述

  • 深入:Rogers, A., Kovaleva, O., & Rumshisky, A. (2020). A Primer in BERTology: What We Know About How BERT Works. TACL.——系统综述 2019-2020 年对 BERT 内部机制的研究成果,是理解"BERT 到底学到了什么"的最佳二手资料

  • 深入:Shoeybi, M., Patwary, M., Puri, R., et al. (2019). Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism. arXiv:1909.08053.——Megatron-LM 论文,模型并行技术的系统性阐述,是理解超大规模模型训练工程基础的必读


[!tip]
下一章预告:2019 年的拆解让社区掌握了"配方"——更多数据、更长训练、更好的目标函数。但一份更激进的研究提出了一个新问题:如果模型大小、数据量和计算量之间存在一个精确的幂律关系,那么性能的提升是否没有上限?2020 年,OpenAI 发布了一份改变了整个领域方向的规模定律报告——它不只是一组实验数据,而是一套预言系统,告诉你"把规模推到极限会发生什么"。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐