论文信息
题目
RoBERTa: A Robustly Optimized BERT Pretraining Approach
一个强力优化的BERT预训练方法
作者
Yinhan Liu,Myle Ott,Naman Goyal, Jingfei Du等
其他
论文下载地址:https://arxiv.org/abs/1907.11692?context=cs.CL
Abstract
这篇论文更像是一篇丰富的实验报告,作者发现BERT严重训练不足,若加大训练后,BERT性能会有很大的提升。
因此,作者从模型设计选择(design choice)、训练策略、语料等方面入手,重新对BERT进行了预训练,得到RoBERTa。实验结果表明RoBERTa在GLUE、RACE和SQuAD都达到了SOTA。这些结果突出了以前被忽略的设计选择的重要性。
Introduction
ELMo、GPT、BERT、XLM等方法虽取得了很大的性能提升,但是很难说清,这么方法中,哪一部分起到最关键的作用。
作者对BERT的预训练过程进行了复现研究,对超参数和训练集的大小的影响进行了评估。
经过实验,作者发现BERT严重训练不足,并提出了训练BERT模型的诀窍,将优化后的模型称为RoBerta,超越了所有现有BERT改进模型。
相比原BERT模型,该文提出的训练的改进方法:
- 训练更久,增加batch size和数据。
- 移除BERT中的NSP任务
- 训练更长的序列
- 根据训练数据动态调整mask方案
RoBERTa在GLUE任务上,创造了4项新的SOTA记录,并在SQuAD和RACE上也与SOTA水平相匹配。
该文章的贡献总结:
- 提出一系列重要的BERT设计选择和训练策略。
- 使用新的更大的数据集CC-NEWS,证明了更多的训练数据能够进一步提升BERT模型在下流任务中的表现。
- 实验结果表明,masked language model在正确的模型设计配置下,比最近提出的其他模型方法都要好。
Background
作者首先回顾介绍了BERT模型的一些内容,本文在这里省略。
Experimental Setup
该节介绍了实验的一些设置
Implementation
作者使用FAIRSEQ复现BERT,但改变了学习率的峰值以及学习率预热的步数,根据不同的设置调整数值,其他超参数与原BERT相同。
作者发现训练时模型对Adam的ε系数敏感,有时通过调整该系数会取得更好的稳定性。当以较大的batch size训练时,将正则项系数β2=0.98也能提升模型稳定性。
Data
作者实验使用了五种大小和领域不同的英语语料库,总计超过160GB的未压缩文本。
数据集:
Evaluation
使用GLUE、SQuAD、RACE三类任务进行评估。
Training Procedure Analysis
该章节探索和量化什么样的设置对于预训练BERT是重要的。
作者实验的模型初始设置与 B E R T B A S E ( L = 12 , H = 768 , A = 12 , 110 M p a r a m s ) BERT_{BASE} (L =12, H = 768, A = 12, 110M params) BERTBASE(L=12,H=768,A=12,110Mparams)一致。
Static vs. Dynamic Masking
原始BERT采用静态mask的方式,mask处理是在数据预处理过程中完成。为了避免每个epoch遇见的每个训练实例的mask情况都相同,故将训练数据复制10份,并以10种不同的mask方式进行遮罩,但是即使这样,训练40epoch,同一种mask方式的同一句子,在训练时模型也会重复遇见4次。
动态mask:对每个序列进行mask的操作是在喂给模型该序列时执行的。这在预训练更多步骤或更大数据集时,至关重要。
实验结果对比分析:
动态mask略比静态mask好,因此作者后面的实验均采用动态mask方式。
Model Input Format and Next Sentence Prediction
Devlin发现移除NSP任务在QNLI,MNLI等任务上会有大幅度性能下降,然而最近的一些工作质疑NSP的必要性。因此,作者做了一系列的实验来分析NSP任务的必要性。
为了更好的对比试验,作者提出了以下几种供选择的训练方案:
- SEGMENT-PAIR:输入为一个片段,可以包含多个句子,但总长度不超过512tokens,包含NSP loss。
- SENTENCE-PAIR:每个输入为一个句子对,为了保持总长度与SEGMENT-PAIR一致,故增加了batch size。
- FULL-SENTENCES:取一系列连续的句子,总长度不超过512tokens,句子可跨文档,不同文档之间使用额外一个分割标志位来标识,不包含NSP loss。
- DOC-SENTENCES:与FULL-SENTENCES类似,不过不能跨文档。不包含NSP loss。
实验结果分析:
- 作者发现使用单个句子会损害下游任务的性能,作者推测这是因为该模型无法学习远程依赖关系。
- 去掉NSP任务会有略微的提升。
- DOC-SENTENCES比FULL-SENTENCES表现好。
Training with large batches
最近的研究表明,BERT很适合较大规模的batch训练。
实验结果分析:
通过实验发现,增大batch size能够进一步提升模型的性能,且更大的batch size更易于分布式数据的并行训练。
Text Encoding
字节对编码(BPE)是字符级和单词级表示形式的混合体,可以处理自然语言语料库中常见的大词汇。
Radford在GPT2里提出了一种更巧妙的BPE实现版本byte-level text encoding,该方法使用bytes作为基础的子词单元,这样便把词汇表的大小控制到了5w。它可以在不需要引入任何未知字符前提下对任意文本进行编码。
BERT原始版本使用字符级(character-level)的BPE词汇表,大小是3w,是用启发式分词规则对输入进行预处理学习得到的。
之前的一些实验结果表明,这两种文本编码的实验性能区别不大,可能Radford BPE Encoding在某些任务上的终端性能略微差点,但是RoBerta作者坚信通用的编码模式比性能上的轻微损失更重要,所以在实验中采用了byte-level text encoding。
RoBERTa
结合之前章节提出的改进配置,作者将这些配置结合起来,改进后的模型成为RoBERTa。
RoBERTa使用dynamic mask、FULL-SENTENCES without NSP、large mini-batches以及byte-level BPE等设置。
作者训练RoBERTa时与 B E R T L A R G E ( L = 24 , H = 1024 , A = 16 , 355 M p a r a m e t e r s ) BERT_{LARGE}(L = 24, H = 1024, A = 16, 355M parameters) BERTLARGE(L=24,H=1024,A=16,355Mparameters)结构一致。
实验结果:
实验发现,RoBERTa相比于 B E R T l a r g e BERT_{large} BERTlarge,性能有很大的提升。
进一步,使用更多的训练数据训练RoBERTa(160GB的训练文本),结果发现模型性能进一步提升,证明了在预训练过程中,数据集规模和多样性的重要性。
增大预训练步骤,将step从100K增加大300K、500K,模型性能进一步明显提升,且最长训练过后的模型,并未出现过拟合现象。
作者在GLUE,SQuaD和RACE这三个不同的基准上评估了RoBERTa模型。
GLUE Results
在GLUE上的结果:对于单任务单模型,RoBERTa九个任务均达到SOTA。
SQuAD Results
在SQuAD上的结果:RoBERTa的成绩还可以。
RACE Results
在RACE上的对比结果:从实验结果上看,RoBERTa均达到了SOTA。
Conclusion
RoBERTa其实本质上只是一个调参达到最优的BERT,和XLNet不相上下。
RoBERTa再一次证明BERT才是众多预训练模型中的首选和扛鼎之作,也是那个真正引起质变的模型。