BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding - 中文验证版
英文原文卡片:bert_2018.md
状态:已翻译。
元数据
- Slug:
bert_2018 - 年份: 2018
- 会议: NAACL
- 作者: Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova
- 阅读状态: read complete
- 计算范式: TPU、加速器与 Transformer 时代
- 主要来源: PDF、抽取文本
计算设置
论文明确给出了 TPU 训练硬件,使 BERT 成为 2018 年 Cloud TPU Transformer 范式的一个清晰案例。附录 A.2 指出,BERTBASE 的训练在 Pod 配置中的 4 个 Cloud TPU 上进行,共 16 个 TPU 芯片;BERTLARGE 的训练在 16 个 Cloud TPU 上进行,共 64 个 TPU 芯片;每次预训练耗时 4 天。同一附录给出了训练规模:batch size 256 个序列,最大序列长度 512,即满长度下每 batch 128000 个 token,共 1000000 步。预训练语料为 BooksCorpus(8 亿词)加上英文维基百科(25 亿词)。
模型大小也与计算相关。BERTBASE 为 L=12、H=768、A=12,110M 参数;BERTLARGE 为 L=24、H=1024、A=16,340M 参数。微调比预训练便宜得多:论文称所有结果可以从发布的预训练模型复制,在单个 Cloud TPU 上最多 1 小时,或在 GPU 上几小时,并给出 SQuAD 约在单个 Cloud TPU 上 30 分钟即可达到 Dev F1 91.0。因此,论文将一笔庞大的共享加速器预训练开销与许多较小的下游微调任务分离开来。
瓶颈
核心计算瓶颈是如何在双向语言表示上消耗稠密 Transformer 加速器吞吐量,同时不使预测目标可见。从左到右的语言模型较容易通过因果掩码实现,但无法在每一层使用右侧上下文。完全双向的编码器可以同时使用左右上下文,但直接的去噪设置存在让模型直接复制目标 token 的风险。BERT 的掩码语言模型创建了稀疏的预测目标,附录指出了其代价:与标准语言模型训练相比,掩码 LM 每个 batch 仅预测 15% 的 token,因此可能需要更多的预训练步数。
第二个瓶颈是序列长度。论文明确说明更长序列的代价显著更高,因为 attention 对序列长度是二次方。一个完整的 512 token batch 的序列长度是 128 token 训练的四倍,但每层内的自注意力有十六倍的 token 对矩阵面积。在 2018 年的 TPU pod 上,稠密矩阵乘法是有利的,但内存和 attention 计算仍随长度急剧增长。
方法适配
BERT 通过使双向预训练适配稠密加速器 batch 来将 Transformer 预训练适配到这一设置。它掩码 15% 的 WordPiece 位置,并仅预测这些位置的原始词汇 id。为减少预训练与微调之间的不匹配,被选中的位置并非总是替换为 [MASK];附录比较了 80/10/10 方案与其他替代方案。下一句预测目标增加了一个廉价的句对信号:50% 的情况下句子 B 是句子 A 的后续句,50% 的情况下是随机句。这使得相同的打包输入表示可用于下游蕴含、释义和 QA 任务。
最直接的计算适配是序列长度调度。BERT 在 90% 的训练步中使用序列长度 128 进行预训练,然后在剩余 10% 中使用序列长度 512 来学习位置嵌入。这使大多数更新保持在高吞吐量、短 attention 的范式中,同时将长上下文训练保留到最后。BERT 还将昂贵的编码器摊销到多个任务上:微调几乎不改变架构,仅改变 batch size、学习率和 epoch 数。论文的 GLUE 设置使用 batch size 32 训练 3 个 epoch,SQuAD v1.1 使用 batch size 32,SWAG 使用 batch size 16,与 1M 步的预训练任务相比这些都是较小的下游运行。
证据
标题性证据将性能与这种"预训练一次、微调多次"的计算结构联系起来。摘要报告了在十一项 NLP 任务上的最新最优结果,包括 GLUE 80.5、MultiNLI 86.7%、SQuAD v1.1 Test F1 93.2 和 SQuAD v2.0 Test F1 83.1。表 1 报告 BERTLARGE 的 GLUE 表平均值为 82.1,而正文称官方排行榜得分为 80.5,对比 OpenAI GPT 的 72.8。表 2 报告了 SQuAD v1.1 结果,包括 BERTLARGE 单模型 84.1 EM / 90.9 F1,以及与 TriviaQA 的集成模型在 dev 上 86.2 EM / 92.2 F1,在 test 上 87.4 EM / 93.2 F1。表 3 报告了 SQuAD v2.0 BERTLARGE 单模型 test 上 80.0 EM / 83.1 F1。
规模证据是明确的:BERTBASE 有 110M 参数,BERTLARGE 有 340M 参数,模型大小消融实验表明,在充分预训练的条件下,更大的预训练模型即使在小下游任务上也能改善性能。附录还探讨了 BERT 是否需要每 batch 128000 词乘以 1000000 步;它报告了训练 1M 步相比 500K 步在 MNLI 上额外提高了 1.0% 的准确率。这不仅仅是一个架构主张;它是 BERT 的质量依赖于持续的加速器规模预训练的证据。
历史影响
BERT 在仅解码器 LLM 接管之前,确立了"预训练然后微调"的 Transformer 编码器作为主导 NLP 计算模式。在计算脊柱中,它是一个 TPU 时代的例子:一次性花费若干加速器天数进行训练,发布一个大型可复用表示,并通过廉价的微调将其摊销到许多下游任务上。它还使训练预算变得可读:芯片数、batch token 数、序列长度、步数和预训练天数都在论文中暴露出来,因此模型质量可以被解读为稠密加速器吞吐量的函数,而非孤立的建模技巧。
局限
BERT 的计算选择也定义了其局限。[MASK] 造成了一种不匹配,因为该 token 在微调期间不存在。论文通过 80/10/10 替换规则缓解了这一点,但并未消除该不匹配。掩码 LM 仅预测稀疏的 token 子集,因此可能需要比标准语言建模更多的预训练步数。512 token 的长度上限将长文档建模排除在主要设计之外,而 90% 短序列调度是对二次 attention 代价的务实让步。最后,仅编码器的接口在分类、排序、抽取和表示迁移方面表现出色,但它不是一个通用的自回归生成接口。
链接
- 所属计算范式:compute spine
- 相关卡片:Attention Is All You Need 2017
- 方法索引:transformer
- Ledger 更新:compute bottlenecks