跳转到内容

RoBERTa — 把 BERT 重训一遍就能拿 SOTA

待复核

RoBERTa(Robustly Optimized BERT Approach)是 2019 年 7 月 Facebook AI 发的一篇论文。它没改 bert 的架构、没换损失函数,只把 BERT 的训练流程重新调了一遍,就在 GLUE / SQuAD / RACE 三个榜单上把 BERT 重新刷到 SOTA。

日常类比:

一辆车原厂调校跑 200km/h,有人看了发动机参数说”还没用满”,把胎压、油品、风挡角度重新调一遍,同一辆车跑到 250km/h。RoBERTa 干的就是这件事——证明 BERT 论文里自己交付的训练配方根本没把模型训透

读懂这句话就读懂了 RoBERTa 的核心:架构没问题,训练没训够

不理解 RoBERTa,下面这些事都没法解释:

  • 为什么 2019 下半年开始所有论文用的”BERT 基线”实际是 RoBERTa 权重——因为原版 BERT 在公平对比里几乎从来打不过 RoBERTa
  • 为什么 ICLR 2020 拒了这篇论文,但中文 NLP 圈、工业界全在用——评审标准看重新颖性,工程价值看复现可靠性,两者第一次公开拉裂
  • 为什么 Chinchilla 2022 那种”模型欠训练”的发现 3 年前就有人喊过——RoBERTa 用 ablation 形式说过同样的话,只是没有数学定律
  • 为什么 NLP 进入 “LLaMA 时代”后,论文风气从”新架构”转向”训练配方表”——这条路是 RoBERTa 开的

引用数 30k+。这是少数几篇”复现研究”成为开宗立派之作的论文。

RoBERTa 在 bert 基础上动了 5 个地方,每一个都做了消融:

  1. 训练更久 + batch 更大:BERT-base 用 batch 256 × 1M steps;RoBERTa 用 batch 8K × 500K steps,等效见到的 token 量约 16 倍。核心结论:BERT 论文里给的训练配置远没用满模型容量。

  2. 数据扩到约 10 倍:BERT 原版 Books+Wiki 约 13GB;RoBERTa 自训同域约 16GB,再扩到 160GB(多加 CC-News 76GB / OpenWebText 38GB / Stories 31GB)。数据量上去,下游分继续涨。

  3. 砍掉 NSPbert 论文把 NSP(Next Sentence Prediction)写成核心贡献。RoBERTa 做了 4 组消融:保留 NSP / 砍掉 NSP / 单文档输入 / 跨文档输入。在其设定下:砍 NSP + FULL-SENTENCES(跨文档拼到 512 token)最好——这是受控消融结论,不是对一切句对任务的永久定论。

  4. 动态 masking:BERT 预处理时把语料复制 10 份再静态 mask,40 个 epoch 里每份大约复用 4 次。RoBERTa 每次 batch 进模型前重新随机 mask——同一句在不同步看到不同遮挡,等于免费做数据增强。

  5. byte-level BPE 词表:BERT 用 30K char-level BPE,对中文 / emoji / 罕见字符要先做 unicode 归一化。RoBERTa 抄 GPT-2 的 50K byte-level BPE:直接在字节序列上分词,任何 Unicode 字符串都能无损编码,不需要预处理。

案例 1:读论文 Table 4(累积加料)

Section titled “案例 1:读论文 Table 4(累积加料)”

RoBERTa 最重要的不是口号,而是把改动叠上去时分数怎么涨(论文 Table 4,dev):

配置 数据 SQuAD2.0 MNLI-m
BERT-large(原版配方) ~13GB 81.8 86.6
RoBERTa:Books+Wiki + 配方改进 16GB 87.3 89.0
+ 扩到 160GB 160GB 87.7 89.3
+ 训到 300K steps 160GB 88.7 90.0
+ 训到 500K steps(最终) 160GB 89.4 90.2

公开 GLUE 榜上 RoBERTa-large 总评 88.5(与上表 MNLI 单任务分不要混读)。NSP / 动态 mask / 大 batch 的单独贡献在 §4 分表里,这里只看「数据 + 训更久」这条主线。

静态 masking(BERT):
语料复制 10 份 → 预处理写死 mask → 40 epoch 里每份大约复用 4 次
→ "我爱[MASK]鱼" 在很长一段时间里遮挡位置不变
动态 masking(RoBERTa):
每次 batch 进 GPU 前实时 mask
→ 同一句可能这次 "我爱[MASK]鱼",下次 "我[MASK]吃鱼"

直觉:同一句话产生不同训练信号,不增数据也能变相扩充。

去掉 NSP 后 RoBERTa 试了 4 种打包方式:SEGMENT-PAIR+NSP、SENTENCE-PAIR+NSP、FULL-SENTENCES(跨文档拼满 512)、DOC-SENTENCES(同文档拼)。FULL-SENTENCES 最好——跨文档看似破坏连贯,却让 512 token 预算里见到更多样内容。

import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
tok = AutoTokenizer.from_pretrained("roberta-base")
model = AutoModelForSequenceClassification.from_pretrained("roberta-base", num_labels=2)
batch = tok("great movie", return_tensors="pt")
loss = model(**batch, labels=torch.tensor([1])).loss # 编码 → 前向 → 微调
  1. byte-level BPE 让 embedding 矩阵变重:50K 词表 × 1024 维 = 50M 参数仅 embedding 一项,比原 BERT 多 27M。在 base 规模上属于”头重脚轻”,小模型场景慎用。

  2. batch 8K 不是学术资源:8K batch 用 1024 张 V100 训了一天。这等于把 NLP 研究的”准入门槛”再抬一档。从 RoBERTa 之后,没有 GPU 资源的实验室只能用别人发布的权重做下游研究——学术界从此进入”复现都困难”的时代

  3. 去 NSP 不等于去掉所有句对感:FULL-SENTENCES 把不相关文档拼在一起,对纯句对任务(如 STS-B 句子相似度)的影响后续论文又有反复——RoBERTa 给出”砍掉更好”的结论,但对所有下游任务都成立这一点没被严格验证

  4. 能耗代价:RoBERTa-large 单次预训练耗电约相当于一辆汽车跑 1.6 万公里的碳排放。GreenAI 讨论从此热起来——“刷 SOTA 的边际成本”成为公开议题。

  5. 被 ICLR 2020 拒:评审意见集中在”创新性不足、只是 BERT 复现”。但工业界几乎立刻全部切换 checkpoint。这件事后来被反复引用,说明 paper 评审标准和工程价值的脱钩

适用

  • 需要强 encoder 基线做分类 / 抽取 / 句对匹配,直接加载 roberta-base/large 微调
  • 复现或对比 2019–2021 NLP 论文时,用 RoBERTa 而不是原版 BERT 当公平基线
  • 学「怎么写消融」:控制变量、分表报告、再叠加

不适用

  • 要从零预训练大模型却没有千卡级资源——用公开权重,别重训 8K batch
  • 生成式 / 长上下文对话主战场——更常见走 decoder-only(LLaMA 系等)
  • 极小模型 / 端侧:50K 词表 embedding 偏重,可考虑蒸馏或更小词表方案
  • 2018-10bert 发布,预训练 + 微调成为新范式。论文同时给出 BERT-base / BERT-large 的训练配方
  • 2019-02:GPT-2 发布,用 byte-level BPE + 海量网页数据做单向 LM,间接证明”数据量是关键”
  • 2019-06xlnet-2019 用 permutation LM 反超 BERT,架构派的代表作
  • 2019-07RoBERTa 发布,证明同架构 BERT 配方调对了能直接打平 XLNet——工程派的反击
  • 2019-09:ALBERT 发布,参数共享让 BERT 变小,路线又分化
  • 2022:Chinchilla 用 scaling law 形式严格证明”大模型大多欠训练”——RoBERTa 三年前的直觉被数学化
  • 2023+:LLaMA / Mistral 系都沿用 RoBERTa 的”工程配方表式 paper” 风格
  1. 复现研究可以是真贡献——ablation 清晰就能改写领域基线认知
  2. 架构 vs 训练,功劳常不对称——配方影响在某些区间远超新架构;这是 scaling law 思潮的前夜
  3. 评审标准 vs 工程价值会脱钩——ICLR 拒不影响成为工业标准
  4. 要敢承认前人没训够——RoBERTa 最难的是指出 BERT 训练表没训透
  5. 写论文要有产品意识——5 个 ablation、少量表、读完即拿走;LLaMA 系继承了这风格
  6. scale 不是堆资源——同样算力,会调的人能多榨出性能
  • bert — RoBERTa 严格在 BERT 之上做 ablation,没动架构只动训练
  • xlnet-2019 — 同期对手,走”架构创新派”,被 RoBERTa 用工程派打平
  • chinchilla — 把 RoBERTa 的”undertrained”直觉用 scaling law 数学化
  • llama — 沿用 RoBERTa 风格的 byte-level BPE 和大数据预训练配方
  • t5 — 类似的 ablation-heavy 大消融表,但走 encoder-decoder 路线
  • gpt-3 — 把”scale up 训练”思路推到 175B 参数极致
  • electra-2020 —— ELECTRA — 把猜词题改成判真假题,训练效率 4 倍
  • lora —— LoRA — 给冻结大模型贴低秩便签