Fork me on GitHub

Facebook推出RoBERTa新模型,碾压XLNet 制霸三大排行榜

  来源:arxiv,编辑:小芹,张佳

  【新智元导读】BERT 再次制霸 GLUE 排行榜!今天,Facebook 公开一个“强力优化”版的基于 BERT 预训练模型,名为 RoBERTa,在 GLUE、SQuAD 和 RACE 三个排行榜上全部实现了最先进的结果。距被 XLNet 超越没过多久,BERT 再次回到了最强 NLP 预训练模型的王座。

  BERT 王者归来了!

  前不久,CMU 和谷歌大脑提出的 XLNet 预训练模型在 20 项任务上全面碾压曾有“最强 NLP 预训练模型”之称的 BERT,可谓风光无限,吸足了眼球。

  不过,XLNet 的王座没坐太久。就在今天,Facebook 公布一个基于 BERT 开发的加强版预训练模型RoBERTa——在 GLUE、SQuAD 和 RACE 三个排行榜上全部实现了最先进的结果!


GLUE 最新排行榜


RACE 排行榜

  RoBERTa 的名称来”Robustly optimized BERT approach”,强力优化的 BERT 方法,真是相当简单粗暴呢~

  这项研究由 Facebook AI 和华盛顿大学的研究团队共同完成,而且第一作者是华人研究员 Yinhan Liu,此外还有 Jingfei Du 和 Danqi Chen。


作者之一的 Veselin Stoyanov 在推特上公布了该结果

  Facebook AI 负责人 Yann LeCun 推荐:

  要说 RoBERTa 是如何制霸 3 个 benchmark 排行榜的,简言之,用更多的数据,采取更精妙的训练技巧,训练更久一些。

  作者在论文中写道:“我们对 BERT 预训练(Devlin et al. , 2019) 进行了一项复制研究,仔细衡量了许多关键超参数和训练数据大小对结果的影响。我们发现 BERT 的训练明显不足,并且可以匹配或超过之后发布的每个模型的性能。我们最好的模型在 GLUE,RACE 和 SQuAD 上都实现了最先进的结果。”

  作者表示,超参数的选择对最终结果的影响很大。

  他们发布了模型和代码:https://github.com/pytorch/fairseq

  接下来,新智元带来对这篇论文的详细解读:

  只要训练得好,BERT 可以超过所有后续方法的性能

  自我训练的方法,比如 ELMo, GPT,BERT,XLM 以及 XLNet 等,带来了显著的性能提升,但要想确定这些方法的哪些方面对性能提升贡献最多是相当有挑战性的。由于训练在计算上成本很高,限制了可执行的调优量,而且常常使用不同大小的私有训练数据进行调优,限制了对建模进展效果的测量。

  我们对 BERT 预训练模型(Devlin et al., 2019) 进行了一项复制研究,包括仔细评估了超参数调优效果和训练集大小的影响。我们发现 BERT 明显训练不足,并提出了一个改进的训练 BERT 模型的方法,我们称之为 RoBERTa,它可以达到或超过所有 BERT 后续方法(post-BERT)的性能。

  我们做的修改很简单,包括:

  (1) 对模型进行更长时间、更大批量、更多数据的训练;

  (2) 删除下一句预测的目标;

  (3) 对较长序列进行训练;

  (4) 动态改变应用于训练数据的 masking 模式。

  我们还收集了一个与其他私有数据集大小相当的新数据集(CC-NEWS),以便更好地控制训练集大小效果。

  在对训练数据进行控制时,我们的升级版训练程序进一步提升了 BERT 在 GLUE 和 SQuAD 排行榜上公布的结果。

  经过长时间的训练,我们的模型在公共 GLUE 排行榜上的得分为 88. 5 分,与 Yang 等人(2019) 报告的 88.4 分相当。我们的模型在 GLUE 9 个任务的其中 4 个上达到了 state-of-the-art 的水平,分别是:MNLI, QNLI, RTE 和 STS-B。此外,我们还在 SQuAD 和 RACE 排行榜上达到了最高分。

  总结而言,本文的贡献有:

  (1) 我们提出了一套重要的 BERT 设计选择和训练策略,并引入了能够提高下游任务成绩的备选方案;

  (2) 我们使用一个新的数据集 CCNEWS,并确认使用更多的数据进行预训练可以进一步提高下游任务的性能;

  (3) 我们的训练改进表明,在正确的设计选择下,预训练的 masked language model 与其他所有最近发表的方法相比都更具有竞争力。我们发布了在 PyTorch 中实现的模型、预训练和微调代码。

  模型架构:Transformer

  BERT 使用了现在已经十分流行的 transformer 架构,这里我们不会详细讨论它。我们使用的是L层的 transformer 架构,每个 block 都使用一个 self-attention head 和隐藏维度H。

  在训练前,BERT 使用了两个目标:masked language modeling 和下一句预测。

  Masked Language Mode (MLM)选择输入序列中的随机 token 样本,并用特殊的 token[MASK]替换。MLM 的目标是预测遮挡 token 时的交叉熵损失。BERT 一致选择 15% 的输入 token 作为可能的替换。在所选的 token 中,80% 替换为[MASK], 10% 保持不变,10% 替换为随机选择的词汇表 token。

  在最初的实现中,随机遮挡和替换在开始时执行一次,并保存到训练期间,但是在实际操作中,由于数据是重复的,所以每个训练语句的 mask 并不总是相同的。

  下一句预测(NSP) 是一种二分类损失,用于预测两个片段在原文中是否相互跟随。通过从文本语料库中提取连续的句子来创建积极的例子。反例是通过对来自不同文档的段进行配对来创建的。正、负样本的抽样概率相等。

  NSP 的目标是为了提高下游任务的性能,比如自然语言推理,这需要对句子对之间的关系进行推理。

  实验设计

  在本节中,我们描述了用于 BERT 复制研究的实验设置。

  我们在 FAIRSEQ 中重新实现了 BERT。我们主要遵循第 2 节中给出的原始 BERT 优化超参数,除了峰值学习率和 warmup 步骤的数量,这两个参数分别针对每个设置进行调优。

  此外,我们还发现训练对 Adam epsilon 项非常敏感,在某些情况下,在对其进行调优后,我们获得了更好的性能或更好的稳定性。同样地,我们发现设置β2 = 0.98 时可以提高大的 batch size 训练时的稳定性。

  我们在 DGX-1 机器上进行混合精度浮点运算的训练,每台机器上有 8 个 32GB Nvidia V100 GPU,通过 Infiniband 互连。

  哪些选择对于成功地训练 BERT 模型至关重要

  本节探讨和量化哪些选择对于成功地训练 BERT 模型至关重要。我们保持模型架构不变。具体地说,我们首先以与 BERTBASE 相同的配置(L = 12, H = 768, A = 12, 110M params)开始训练 BERT 模型。

  1、静态 masking vs. 动态 masking

  正如在前文讨论的,BERT 依赖于随机遮挡和预测 token。原始的 BERT 实现在数据预处理期间执行一次遮挡,从而产生一个静态遮挡(static mask)。为了避免在每个 epoch 中对每个训练实例使用相同的 mask,我们将训练数据重复 10 次,以便在 40 个训练 epoch 中以 10 种不同的方式对每个序列进行遮挡。因此,在训练过程中,每个训练序列都使用相同的 mask 四次。

  我们将此策略与动态遮挡(dynamic masking)进行比较,在 dynamic masking)中,每次向模型提供序列时都会生成 masking 模式。当对更多步骤或更大的数据集进行预训练时,这一点变得至关重要。

  表1:SEBERTBASE的静态和动态 masking 的比较。我们报告了 SQuAD 的 F1 分数和 MNLI-m 以及 SST-2 的准确性结果。报告的结果是超过 5 个随机初始化的中值。参考结果来自 Yang et al. (2019).

  结果表 1 比较了 Devlin 等人(2019) 发布的 BERTBASE 结果与我们使用静态或动态 masking 重新实现的结果。我们发现,使用静态 masking 的重新实现的性能与原始的 BERT 模型相似,而动态 masking 可以与静态 masking 的结果相当,甚至略好于静态 masking。

  考虑到这些结果和动态 masking 的额外效率优势,我们在其余的实验中使用动态 masking。

  2、模型输入格式和下一句预测

  在原始的 BERT 预训练过程中,模型观察到两个连接的文档片段,它们要么是从相同的文档连续采样(p = 0.5),要么是从不同的文档采样。除了 masked language modeling 目标外,该模型还通过辅助下一句预测(NSP)损失训练模型来预测观察到的文档片段是来自相同还是不同的文档。

  NSP 损失被认为是训练原始 BERT 模型的一个重要因素。Devlin 等人(2019) 观察到,去除 NSP 会损害性能,QNLI、MNLI 和 SQuAD 的性能都显著下降。然而,最近的一些工作对 NSP 损失的必要性提出了质疑。

  为了更好地理解这种差异,我们比较了几种替代训练格式:


表2:在 BOOKCORPUS 和 WIKIPEDIA 上预训练的基本模型的开发集结果。

  表 2 显示了四种不同设置的结果。我们发现,使用单独的句子会影响下游任务的性能,我们假设这是因为该模型无法学习长期依赖关系。

  接下来,我们将无 NSP 损失的训练与来自单个文档(doc – sentence)的文本块的训练进行比较。我们发现,与 Devlin 等人(2019) 相比,该设置的性能优于最初发布的 BERTBASE 结果,消除 NSP 损失达到或略微提高了下游任务性能。

  最后,我们发现将序列限制为来自单个文档(doc – sentence)的性能略好于打包来自多个文档(全句)的序列。但是,由于 doc – sentence 格式会导致不同的 batch sizes,所以我们在其余的实验中使用完整的句子,以便与相关工作进行比较。

  3、large batches 训练

  以往的神经机器翻译研究表明,当学习率适当提高时,非常大的 mini-batches 的训练既可以提高优化速度,又可以提高最终任务性能。最近的研究表明,BERT 也可以接受 large batch 训练。

  Devlin 等人(2019) 最初训练 BERTBASE 只有 100 万步, batch size 为 256 个序列。

  在表 3 中,我们比较了 BERTBASE 在增大 batch size 时的复杂性和最终任务性能,控制了通过训练数据的次数。我们观察到,large batches 训练提高了 masked language modeling 目标的困惑度,以及最终任务的准确性。通过分布式数据并行训练,large batches 也更容易并行化,在后续实验中,我们使用 8K 序列的 batches 进行并行训练。


表3:不同批大小上训练的基本模型的未完成训练数据(ppl)和开发集准确性的困惑度。

  RoBERTa:制霸三大基准数据集

  在上一节中,我们建议修改 BERT 预训练程序,以改善最终任务的性能。我们现在汇总这些改进并评估它们的综合影响。我们将这种配置称为 RoBERTa,即“Robustly optimized BERT approach”,强力优化的 BERT 方法。

  具体来说,RoBERTa 采用了 dynamic masking、没有 NSP 损失的完整句子、large mini-batches 和更大的字节级 BPE 的训练。

  此外,我们还研究了以前工作中未被强调的另外两个重要因素:(1)用于预训练的数据,以及(2)通过数据的训练次数。例如,最近提出的 XLNet 架构使用的数据比原始 BERT 多近 10 倍。它还以 8 倍大的批量进行训练,以获得一半的优化步骤,因此在预训练中看到的序列数是 BERT 的 4 倍。

  为了将这些因素与其他建模选择(例如,预训练目标)的重要性区分开来,我们首先按照 BertLarge 架构(L=24,H=1024,A=16355m)对 Roberta 进行训练。正如在 Devlin et al. 中使用的一样,我们用 BOOKCORPUS 和 WIKIPEDIA 数据集进行了 100K 步预训练。我们使用 1024V100GPU 对我们的模型进行了大约一天的预训练。

  结果如表 4 所示,当控制训练数据时,我们观察到 RoBERTa 比最初报告的 BERTLARGE结果有了很大的改进,再次证实我们在第 4 节中探讨的设计选择的重要性。

  表4:当我们预先训练了更多数据(16GB→160GB 文本)和预训练更久(100K→300K→500K 步),RoBERTa 的开发集(Development set)结果。每行累积上述行的改进。RoBERTa 匹配 BERTLARGE 的架构和训练目标。BERTLARGE 和 XLNetLARGE 的结果分别来自 Devlin et al. 和 Yang et al. 附录中有所有 GLUE 任务的完整结果。

  接下来,我们将此数据与第 3.2 节中描述的三个附加数据集相结合。我们用与之前相同数量的训练步(100K)对 RoBERTa 进行综合数据训练。我们总共预处理了超过 160GB 的文本。我们观察到所有下游任务的性能进一步提高,验证了数据大小和多样性在预训练中的重要性。

  最后,我们预先训练 RoBERTa 的时间要长得多,将预训练步数从 100K 增加到 300K,再进一步增加到 500K。我们再次观察到下游任务性能的显着提升,300K 和 500K 步模型在大多数任务中的表现优于 XLNetLARGE。我们注意到,即使是我们训练时间最长的模型似乎也不会超出我们的数据范围,而且可能会从额外的训练中受益。

  在本文的其余部分,我们根据三个不同的基准评估我们最好的 RoBERTa 模型:GLUE,SQuaD 和 RACE。具体来说,我们认为 RoBERTa 在第 3.2 节中介绍的所有五个数据集上都进行了 500K 步的训练。

  表5:GLUE 的结果。 所有结果均基于 24 层架构。BERTLARGE和 XLNetLARGE结果分别来自 Devlin et al. 和 Yang et al. 开发集上的 RoBERTa 结果是五次运行的中间数。 测试集上的 RoBERTa 结果是单任务模型的集合。 对于 RTE,STS 和 MRPC,我们从 MNLI 模型而不是基线预训练模型开始微调。平均值从 GLUE leaderboard 获得。

  表6:SQuAD 的结果。+表示依赖于额外外部训练数据的结果。RoBERTa 在开发和测试中仅使用了提供的 SQuAD 数据。BERTLARGE和 XLNetLARGE结果分别来自 Devlin et al. 和 Yang et al.


表7:RACE 测试集的结果。BERTLARGE和 XLNetLARGE的结果来自 Yang et al.

  论文:

  https://arxiv.org/pdf/1907.11692.pdf

  GitHub:

  https://github.com/pytorch/fairseq

来自:
新智元(ID:AI_era)

作者:Johnson
原创文章,版权所有,转载请保留原文链接。