RoBERTa 相比 BERT 在训练策略上做了哪些关键改进?

RoBERTa 相比 BERT 在训练策略上做了哪些关键改进?

RoBERTa 相比 BERT 的关键训练策略改进

RoBERTa(RobustlyOptimizedBERTApproach)由 Facebook AI 于 2019 年发布,核心思路是:BERT 的架构没问题,但训练策略不够充分。通过改进训练方法,在不改架构的前提下显著提升了性能。


改进全景对比

训练策略BERTRoBERTa影响
静态掩码✅ 预处理时固定掩码❌ 改为动态掩码每次掩码不同,学得更充分
NSP 任务✅ 保留下一句预测❌ 移除 NSP去掉有害无益的任务
训练数据量16GB (BookCorpus + Wiki)160GB(5倍)更多数据,更强泛化
训练步数100万步50万步batch更大更大batch,更优收敛
Batch Size2568192(32倍)梯度更准,优化更稳
字节级 BPE❌ 字符级 WordPiece✅ 字节级 BPE无 UNK,处理任意字符
数据组合BookCorpus + WikiCC-News + OpenWebText + Stories + Wiki更大更多样

逐项详解

1. 动态掩码(Dynamic Masking)取代静态掩码

BERT 的做法:在数据预处理阶段一次性生成掩码,之后每次训练都用同一份。

原始句子: "今天天气真好" 预处理后固定为: "今天 [MASK] 真好" ← 第10轮训练还是这个 问题: 模型在不同 epoch 反复看到相同的掩码模式,容易过拟合到特定位置

RoBERTa 的做法:每次将训练数据喂给模型时实时随机生成掩码

原始句子: "今天天气真好" Epoch 1: "今天 [MASK] 真好" Epoch 2: "[MASK] 天气 真好" Epoch 3: "今天 天气 [MASK]" → 每次掩码位置不同,模型学到更鲁棒的表示

实现方式:将重复数据复制 10 份,每份用不同随机种子做掩码,等效于 40 个 epoch 中看到 400 种不同掩码。


2. 移除 NSP(Next Sentence Prediction)任务

BERT 的 NSP 任务:给定句子 A 和 B,判断 B 是否是 A 的真实下一句。

正例: A="今天天气真好" B="我们去公园吧" → IsNext 负例: A="今天天气真好" B="股票涨了三个点" → NotNext

RoBERTa 发现 NSP 有害无益,直接移除。实验证据:

实验设置结果
BERT 原版(有 NSP,句对拼接)基准
去掉 NSP,仍用句对拼接性能下降
去掉 NSP,改为连续长文本(非句对)性能最好

原因分析:

  • NSP 任务太简单,模型主要靠主题相似性就能判断,学不到有用的跨句关系
  • 句对拼接导致每条训练样本变短,模型缺少长距离上下文建模能力
  • 改为连续长文本输入后,模型能看到更长的上下文,表示能力更强
BERT 输入格式: [CLS] 句子A [SEP] 句子B [SEP] ← 两个句子,有NSP标签 RoBERTa 输入格式: [CLS] 连续文本片段... [SEP] ← 尽量长的连续文本,无NSP

3. 更大的训练数据(16GB → 160GB)

数据集BERT 使用RoBERTa 使用大小
BookCorpus11GB
Wikipedia16GB
CC-News76GB
OpenWebText38GB
Stories31GB
总计16GB160GB5倍
  • CC-News:Common Crawl 抓取的新闻语料
  • OpenWebText:Reddit 上被引用≥3次的网页(高质量)
  • Stories:Common Crawl 中提取的故事类内容

更多 + 更多样的数据是性能提升的重要来源。


4. 更大的 Batch Size(256 → 8192)

BERT: batch_size = 256, 训练 100万步 RoBERTa: batch_size = 8192, 训练 50万步 总样本量: 8192 × 50万 ≈ 256 × 100万(总训练量相当) 但每次梯度估计更准确 → 优化更稳定 → 最终性能更好

实验发现:大 batch 训练在 MLM 任务上持续带来提升,这与 CV 领域的发现一致。但大 batch 需要更多显存,RoBERTa 使用了 1024 张 V100 GPU 分布式训练。


5. 字节级 BPE(Byte-Level BPE)取代 WordPiece

分词方式BERT (WordPiece)RoBERTa (Byte-Level BPE)
词表大小30,52250,000
基本单元字符字节(256种)
OOV 问题有,未知词变成[UNK],任何字符都能用字节组合表示
编码示例“emoji😀” →[UNK]“emoji😀” →e m o j i [字节序列]

字节级 BPE 的优势:

  • 彻底消除[UNK],所有文本都能编码
  • 对多语言、特殊字符、emoji 更友好
  • 词表更通用,不依赖特定语言的预处理

6. 更长的训练时间

BERT: 100万步 (batch=256) RoBERTa: 50万步 (batch=8192) → 但等效训练量 = 500亿 token vs BERT的25亿 token 实际训练量是 BERT 的约 4 倍

RoBERTa 论文还发现:BERT 训练严重不充分,即使训练到 100 万步,MLM loss 仍在下降。RoBERTa 通过更大 batch + 更多数据 + 更长训练,充分挖掘了 BERT 架构的潜力。


消融实验:哪个改进贡献最大

RoBERTa 论文做了详细的消融实验,各改进的贡献排序:

贡献从大到小: ① 更大数据集 (160GB vs 16GB) ████████████ 最大 ② 移除 NSP + 连续长文本 ████████ ③ 更大 batch size ███████ ④ 动态掩码 █████ ⑤ 字节级 BPE ███ ⑥ 更长训练时间 ███

关键发现:数据规模和训练充分性的贡献最大,架构本身不是瓶颈。


架构对比:RoBERTa 没改架构

架构参数BERT-baseRoBERTa-baseBERT-largeRoBERTa-large
层数12122424
隐藏维度76876810241024
注意力头数12121616
参数量110M125M340M355M
架构完全相同完全相同完全相同完全相同

参数量微增仅来自词表变化(30K → 50K),Transformer 编码器结构完全一致


性能对比

任务BERT-largeRoBERTa-large提升
SQuAD 2.0 (F1)83.188.9+5.8
MNLI (准确率)86.790.2+3.5
SST-2 (准确率)92.794.8+2.1
RACE (准确率)72.083.2+11.2

在不改架构的前提下,仅靠训练策略改进就获得了显著提升。


总结

RoBERTa 的核心洞察: BERT 的架构没问题,是训练方法不够好 4 个关键改进: ① 动态掩码 → 每次掩码不同,学得更鲁棒 ② 移除 NSP → 去掉有害任务,改用连续长文本 ③ 更多数据 + 更大batch + 更长训练 → 充分挖掘模型潜力 ④ 字节级 BPE → 消除 OOV,更通用的分词 一句话: RoBERTa 证明了"同样的架构,更好的训练策略就能大幅提升性能", 核心贡献是训练方法论而非模型创新。