返回介绍

数学基础

统计学习

深度学习

工具

Scala

十、RoBERTa [2019]

发布于 2023-07-17 23:38:25 字数 32954 浏览 0 评论 0 收藏 0

  1. ELMoGPTBERTXLMXLNet 等自训练 self-training 方法带来了显著的性能提升,但要确定这些方法的哪些方面贡献最大,可能是一个挑战。训练的计算成本很高,限制了可以进行 tuning 的数量,而且通常是用不同规模的 private training data 进行的,这限制了我们衡量模型先进性的能力。

    论文 《RoBERTa: A Robustly Optimized BERT Pretraining Approach》提出了一项关于 BERT 预训练的复制研究 replication study,其中包括对超参数调优和训练集规模的影响的仔细评估。论文发现 BERT 的训练明显不足。然后论文提出了一个改进的配方 recipe 用于训练 BERT 模型,作者称之为 RoBERTaRoBERTa 可以匹配或超过所有的 post-BERT 方法的性能。作者的修改很简单,包括:

    • 在更多的数据上用更大的 batch 来训练模型。
    • 移除 next sentence prediction 目标。
    • 在更长的序列上进行训练。
    • 动态地改变应用于训练数据的 masking pattern

    论文还收集了一个新的大型数据集(CC-NEWS ),其规模与其他 privately used datasets 相当,以更好地控制训练集的规模效应。

    当控制训练数据时,RoBERTa 改进的训练程序改善了 GLUESQuAD 上公布的 BERT 结果。当对额外的数据进行更长时间的训练时,RoBERTa 在公共 GLUE 排行榜上取得了 88.5 分,与 XLNet 报告的 88.4 分相匹配。RoBERTaGLUE 任务中的 4/9 个任务上实现了 SOTA ,包括:MNLIQNLIRTESTS-B 四个任务。RoBERTa 还在 SQuADRACE 上取得了 SOTA 的结果。总的来说,论文重新确立了 BERTmasked language model 训练目标相比最近提出的其他训练目标(如 XLNet 的排列自回归语言模型)具有竞争力。

    综上所述,本文的贡献在于:

    • 论文提出了一套重要的 BERT 设计选择和训练策略,并介绍了导致更好的下游任务性能的替代品 alternatives
    • 论文使用了一个新的数据集 CCNEWS ,并确认使用更多的数据进行预训练能够进一步提高了下游任务的性能。
    • 论文的训练改进 improvement 表明,在正确的设计选择下, masked language model 预训练相比所有其他最近发表的方法具有竞争力。

    论文发布了用 PyTorch 实现的模型、预训练和微调代码。

  2. 相关工作:人们为预训练方法设计了不同的训练目标,包括语言建模 language modeling 、机器翻译 machine translation 和掩码语言模型masked language modeling 。最近的许多论文都采用了为每个下游任务微调模型的基本配方 basic recipe ,并以某种变体的掩码语言模型目标进行预训练。然而,较新的方法通过多任务微调(UNILM)、融合实体嵌入(ERNIE )、跨度预测 span predictionSpanBERT)和自回归预训练(XLNet )的多种变体来改善性能。通过在更多的数据上训练更大的模型,通常也能提高性能。

    我们的目标是复制、简化和更好地微调 BERT 的训练,作为一个参考,以更好地了解所有这些方法的相对性能。

10.1 分析

10.1.1 背景

  1. 这里我们简要介绍了 BERT的预训练方法和一些训练选择,我们将在下一节进行实验研究。

  2. SetupBERT 将两个 segmenttoken 的序列)的拼接作为输入,即 segment A{x1,,xN}$ \{x_1, \cdots , x_N\} $ 和 segment B{y1,,yM}$ \{y_1,\cdots, y_M\} $ 。 segment 通常由一个以上的自然句子组成。这两个 segment 拼接之后作为单个输入序列馈入 BERT ,并以特殊的 token 来分隔它们:{[CLS],x1,,xN,[SEP],y1,,yM,[EOS]}$ \{\text{[CLS]}, x_1, \cdots , x_N, \text{[SEP]}, y_1, \cdots , y_M, \text{[EOS]}\} $ 。M$ M $ 和N$ N $ 受到约束使得M+N<T$ M+N \lt T $ ,其中T$ T $ 是一个超参数,控制训练期间的最大序列长度。

    根据 BERT 的原始论文,应该是{[CLS],x1,,xN,[SEP],y1,,yM,[SEP]}$ \{\text{[CLS]}, x_1, \cdots , x_N, \text{[SEP]}, y_1, \cdots , y_M, \text{[SEP]}\} $ 。

    该模型首先在一个大型的无标记文本语料库中进行预训练,随后使用下游任务的标记数据进行微调。

  3. 架构:BERT 使用著名的 Transformer 架构,我们将不详细回顾。我们使用一个具有L$ L $ 层的 Transformer 架构。每个 block 使用A$ A $ 个自注意头和隐层维度H$ H $ 。

    这里的L$ L $ 指的是有L$ L $ 个 block,每个 block 具有多个子层。

  4. 训练目标:在预训练期间,BERT使用两个目标:掩码语言模型和下一个句子预测next sentence prediction

    • Masked Language Model: MLM :在输入序列中随机选择一个 token ,并用特殊的token (即,[MASK] )来代替。MLM 的目标是masked token 预测结果的交叉熵损失。

      BERT 均匀随机地选择 15%input token ,然后在所选的token 中:80% 被替换为[MASK]10% 保持不变、10% 被替换为另一个被随机选择的 vocabulary token

      在最初的实现中,random maskingrandom replacement 在开始时进行一次,并在训练期间save 起来(即固定下来)。尽管在实践中,数据是不断重复的(即,每个 epoch 都会重复遍历一轮所有样本),所以每个训练句子在不同 epoch 之间的 mask 并不总是相同的。

      即,这里的 random maskingrandom replacement 是在所有样本的所有 epoch 上进行的,这必然需要对数据集存储多份,每一份对应于一个 epoch

    • Next Sentence Prediction: NSPNSP 是一种二元分类损失,用于预测两个 segment 是否在原始文本中是相互紧跟着。正样本是通过从文本语料库中抽取前后连续的句子来创建的。负样本是通过将不同文件中的 segment 配对来创建的。正样本和负样本是以相同的概率采样的。

      NSP 目标的设计是为了提高下游任务的性能,例如自然语言推理 Natural Language Inference: NLI ,这需要推理句子对sentence pair 之间的关系。

  5. Optimization

    • BERTAdam 优化,超参数为β1=0.9,β2=0.999$ \beta_1 = 0.9, \beta_2=0.999 $ ,ϵ=106$ \epsilon=10^{-6} $ (添加到分母上防止出现除以零的情况),L2$ L_2 $ 权重衰减为0.01$ 0.01 $ 。学习率在前一万步中被预热到104$ 10^{-4} $ 的峰值,然后线性衰减。
    • BERT 训练时,所有层和注意力权重的 dropout rate0.1$ 0.1 $ ,并采用 GELU 激活函数。
    • 模型被预训练一百万个 step (即,S=106$ S=10^6 $ ), batch sizeB=256$ B=256 $ ,每个样本的最大长度为T=512$ T=512 $ 个 token
  6. 数据:BERT 是在 BOOKCORPUSEnglish WIKIPEDIA 这两个数据集的联合上进行训练的,总共包含 16GB 的未压缩文本。

10.1.2 实验配置

  1. 实现:我们在 FAIRSEQ 中重新实现了 BERT

    • 我们主要遵循前面给出的原始 BERT 超参数,除了峰值学习率和预热 step 的数量(这两个超参数是针对每个 setting 单独调优的)。
    • 我们另外发现训练对 Adamϵ$ \epsilon $ 项非常敏感,在某些情况下,我们在调优它之后获得了更好的性能或改善了稳定性。同样地,我们发现设置β2=0.98$ \beta_2=0.98 $ 可以在大的 batch size 训练时提高稳定性。
    • 我们用最长为T=512$ T=512 $ 个token 的序列进行预训练。
    • 与原始 BERT 不同,我们不随机注入短序列,也不在前 90% 的更新中使用缩短的序列长度进行训练。我们只用 full-length 的序列进行训练。
    • 我们在 DGX-1 机器上用混合精度浮点运算进行训练,每台机器有 832GB Nvidia V100 GPU ,通过 Infiniband 互连。
  2. 数据:BERT 风格的预训练依赖于大量的文本。《Cloze-driven pretraining of self-attention networks》证明,增加数据规模可以提高最终任务的性能。有几项工作在比原始 BERT 更大、更多样化的数据集上进行了训练。不幸的是,并非所有的额外数据集都可以公开发布。对于我们的研究,我们专注于收集尽可能多的数据进行实验,使我们能够根据每个比较对象来匹配数据的整体质量和数量。

    我们考虑了五个不同规模和领域的英语语料库,总计超过 160GB的未压缩文本。我们使用了以下的文本语料库:

    • BOOKCORPUS plus English WIKIPEDIA:这是用于训练 BERT 的原始数据(16GB)。
    • CC-NEWS:我们从 CommonCrawl News dataset 的英文部分收集得到。该数据包含 20169 月至 20192 月间爬取的6300 万篇英文新闻文章(过滤后为 76GB )。
    • OPENWEBTEXT:是 GPT-2 中描述的 WebText 语料库的开源复现。该文本是从 Reddit 上分享的 URL 中提取的 web 内容,至少有 3 个以上的点赞 (38GB )。
    • STORIES《A simple method for commonsense reasoning》介绍的数据集,包含 CommonCrawl 数据的一个子集,经过过滤以符合 Winograd 模式的故事式风格(31GB)。、
  3. 评估:遵从前面的工作,我们评估了预训练模型在以下三个 benchmark 的下游任务的性能。

    • GLUEGeneral Language Understanding Evaluation: GLUE benchmark 是一个包含 9 个数据集的集合,用于评估自然语言理解系统。GLUE 组织者提供了训练集和验证集的拆分,以及 submission server 和排行榜从而允许参与者在 private held-out 的测试集上评估和比较参与者的系统。

      对于 replication study ,我们报告了在相应的单任务训练数据上对预训练模型进行微调后的验证集结果(即,没有multi-task trainingensembling )。我们的微调程序遵循原始的 BERT 论文。

      我们额外报告了从公共排行榜上获得的测试集结果。这些结果取决于一些 task-specific 的修改,我们在后文中描述了这些修改。

    • SQuADStanford Question Answering Dataset: SQuAD 提供了一段上下文和一个问题。任务是通过从上下文中提取相关的span 来回答问题。我们对两个版本的 SQuAD 进行评估:V1.1V2.0

      • V1.1 中,上下文总是包含一个答案。此时 ,我们采用与BERT 相同的 span prediction 方法。
      • 而在 V2.0 中,一些问题在给定的上下文中没有答案,使任务更具挑战性。此时,我们增加了一个额外的二分类器来预测问题是否可以回答。我们通过将分类损失和跨度损失 span loss 相加来联合训练。在评估过程中,我们只预测那些被分类为可回答的 (context, question)span index
    • RACEReAding Comprehension from Examinations: RACE 任务是一个大规模的阅读理解数据集reading comprehension dataset ,包括 28,000 多个段落和近 100K 个问题。该数据集收集自中国的英语考试,这些考试是为初中和高中学生设计的。在 RACE 中,每个段落都与多个问题有关。对于每个问题,任务是从四个选项中选择一个正确的答案。与其他流行的阅读理解数据集相比,RACE 的上下文明显较长,需要进行推理的 question 的占比很高。

10.1.3 训练过程分析

  1. 本节讨论并量化了哪些选择对成功预训练 BERT 模型是重要的。具体而言,我们首先用与 BERT_BASE 相同的配置来训练 BERT 模型(L=12H=768A=12$ L=12,H=768,A=12 $ ,共 110M 参数)。

  2. 静态掩码和动态掩码:正如前面所讨论的,BERT 依赖于随机掩码 token 并预测这个被掩码的 token 。原始的 BERT 实现在数据预处理过程中进行了一次掩码,导致了单一的静态掩码 static mask 。为了避免对每个训练样本在不同的 epoch 中使用相同的掩码,训练数据被重复了10 次,因此在 40epoch 的训练中,每个样本以10 种不同的方式被掩码。因此,在训练期间,每个训练样本都被以相同的掩码而看过四次。

    我们将这一策略与动态掩码 dynamic masking 进行比较。在动态掩蔽中,我们每次向模型馈入序列时都会生成 masking pattern 。在以更多的 step 或更大的数据集进行预训练时,这一点变得至关重要。

    如果是静态掩码,那么需要数据集拷贝多份,假如大型数据集是 1TB,拷贝 100 份那么就是 100TB

    下表比较了 BERT 原始论文公布的 BERT_BASE 结果和我们用静态掩码或动态掩码的重新实现。我们发现,我们对静态掩码的重新实现与原始BERT 模型的表现相似,而动态掩码与静态掩码相当或略好。

  3. 模型输入格式和 NSP:在最初的 BERT 预训练程序中,除了 MLM 目标之外模型还有一个 Next Sentence Prediction: NSP 目标。NSP 目标被认为是训练原始 BERT 模型的一个重要因素。BERT 原始论文观察到:移除 NSP 目标会损害性能,在 QNLIMNLISQuAD 1.1 上的性能明显下降。然而,最近的一些工作质疑了 NSP 目标的必要性。

    为了更好地理解这种不一致,我们比较了几种替代的训练格式:

    • SEGMENT-PAIR+NSP:这遵循了 BERT 中使用的原始输入格式,以及 NSP 损失。每个输入有一对 segment ,每个 segment 可以包含多个自然句子,但总的拼接长度必须小于 512token

    • SENTENCE-PAIR+NSP:每个输入包含一对自然句子,可以从一个文档的连续部分采样,也可以从不同的文档分别采样。由于这些输入长度明显小于 512token ,我们增加了 batch size ,使 token 的总数保持与 SEGMENT-PAIR+NSP 相似。我们保留了NSP 损失。

      区别在于 segment pair 还是 sentence pair

    • FULL-SENTENCES:每个输入都是由从一个或多个文档中连续采样的完整句子打包而成,其中总长度最多为 512token 。输入可能会跨文档的边界。当我们到达一个文档的末尾时,我们开始从下一个文档中采样句子,并在文档之间增加一个额外的分隔符。我们移除了 NSP 损失。

    • DOC-SENTENCES:输入的构造与 FULL-SENTENCES 类似,只是它们不能跨越文档的边界。在文档结尾处采样的输入可能短于 512token ,所以我们在这些情况下动态地增加 batch size ,以达到与 FULL-SENTENCES 相似的总 token 数量。我们移除了 NSP 损失。

    下表展示了四个不同 setting 的结果。

    • 我们首先比较了 BERT 的原始 SEGMENT-PAIR 输入格式和 SENTENCE-PAIR 格式。这两种格式都保留了 NSP 损失,但后者使用了单个句子。我们发现:使用单个句子(而不是 segment )会损害下游任务的性能,我们假设这是因为模型无法学习长距离的依赖关系。
    • 我们接下来比较了单个文档的文本块(DOC-SENTENCES)且没有 NSP 损失的训练。我们发现,这种 setting 优于最初公布的 BERT_BASE 结果(下表的倒数第三行),并且相比于该结果,这里移除 NSP 损失后下游任务性能相匹配或略有改善。有可能最初的 BERT 实现中针对移除 NSP 进行评估时,可能只是移除了损失项,而仍然保留了 SEGMENT-PAIR 的输入格式。
    • 最后我们发现,限制序列来自单个文件(DOC-SENTENCES )的表现要比打包来自多个文件(FULL-SENTENCES )的序列略好。然而,由于 DOC-SENTENCES 格式导致 batch size 大小不一,我们在剩下的实验中使用 FULL-SENTENCES 以便于与相关工作进行比较。

  4. 更大的 batch size 来训练:过去在神经机器翻译方面的工作表明,在适当提高学习率的情况下,用非常大的 mini-batch 训练既可以提高训练速度、也可以提高 end-task 性能(《Scaling neural machine translation》)。最近的工作表明,BERT 也适用于大 batch 的训练 《Reducing bert pre-training time from 3 days to 76 minutes》

    BERT 原始论文最初对 BERT_BASE 进行了一百万步的训练, batch size = 256 。通过梯度积累 gradient accumulation ,这在计算成本上相当于以 batch size = 2K训练 125K 步,或以batch size = 8K 训练 31K 步。

    在下表中,我们比较了当增加 batch size时(控制了每个训练样本被访问的次数,即相应地减少迭代步数), BERT_BASE 的困惑性 perplexity 和下游任务性能。我们观察到:用大 batch size 的训练改善了 MLM 目标的困惑度、以及下游任务的准确率。大 batch size 的训练也更容易通过分布式数据并行训练来实现(因为 DDP 数据并行等价于扩大 batch size ),在后面的实验中,我们用 batch size = 8K 来训练。

    注意,在增加 batch size 的时候也需要相应地增加学习率。

    值得注意的是,《Reducing bert pre-training time from 3 days to 76 minutes》 用更大的 batch size 来训练 BERT ,最高可达 batch size = 32K 。我们把对大 batch 训练的极限的进一步探索留给未来的工作。

  5. 文本编码:Byte-Pair Encoding: BPE《Neural machine translation of rare words with subword units》)是 character-level representationword-level representation的混合体,可以处理自然语言语料库中常见的 large vocabularyBPE 依赖于子词单元subwords unit ,而不是全词full word,子词单元是通过对训练语料库进行统计分析而抽取的。

    BPE vocabulary size 通常在 10K-100K 个子词单元之间。然而,在对大型和多样化的语料库进行建模时(例如在本文所考虑的语料库),unicode character 可以占到这个 vocabulary 的相当大的一部分。GPT-2 介绍了 BPE的一个巧妙实现,使用字节 byte 而不是unicode character 作为基本的子词单元。使用字节使得学习一个规模不大的 subword vocabulary50K 个单元)成为可能,该 vocabulary 仍然可以对任何输入文本进行编码,而不会引入任何 "unknown "的标记。

    unicode character2 个字节,编码空间大小是 65536 。相比之下,byte1 个字节,编码空间大小是 256

    原始的 BERT 实现使用大小为 30Kcharacter-level BPE vocabulary ,这是在用启发式 tokenization 规则对输入进行预处理后学习的。按照 GPT-2 的做法,我们转而考虑用一个更大的 byte-level BPE vocabulary 来训练 BERT,其中包含 50K 个子词单元,不需要对输入进行任何额外的预处理或 tokenization 。这为 BERT_BASEBERT_LARGE 分别增加了约 15M20M 的额外参数。

    早期的实验显示,这些编码之间只有轻微的差异,GPT-2BPE在一些任务上取得了略差的 end-task 性能。尽管如此,我们认为通用编码方案的优势超过了性能的轻微下降,并在我们其余的实验中使用这种编码。对这些编码的更详细的比较将留给未来的工作。

10.2 RoBERTa

  1. 在前文中,我们提出了对 BERT 预训练程序的修改,以提高下游任务的性能。现在我们汇总这些改进并评估其综合影响。我们称这种配置为 RoBERTa,即 Robustly optimized BERT approach 。具体而言,RoBERTa 采用动态掩码、无NSP 损失的 FULL-SENTENCES、大型的 mini-batch 、较大的 byte-level BPE 进行训练。

    此外,我们还调研了在以前的工作中没有得到重视的其他两个重要因素:用于预训练的数据、以及训练 epoch 数。例如,最近提出的 XLNet 架构使用比原始 BERT 多了近 10 倍的数据进行预训练。此外,XLNet 也是以 8倍的 batch size 、一半的训练 step 来进行训练,因此 XLNetBERT 相比在训练期间看到了 4 倍的样本 。

    为了帮助将这些因素的重要性与其他建模选择(如,预训练目标)分开,我们首先按照 BERT_LARGE 架构(L=24,H=1024,A=16$ L=24,H=1024,A=16 $ ,一共355M$ 355M $ 个参数)来训练 RoBERTa 。我们在可比的 BOOKCORPUSWIKIPEDIA 数据集上进行了100K 步的预训练,正如 BERT 原始论文所使用的那样。我们使用 1024V100 GPU 对我们的模型进行了大约一天的预训练。

    BERT 预训练进行了一百万步,而这里才预训练十万步?这是因为 RoBERTa 使用了更大的 batch sizebatch size = 8K),而原始 BERT 仅使用 batch size = 256

  2. 实验结果如下表所示。

    • 当控制训练数据时(第一行结果),我们观察到 RoBERTa 比最初报告的 BERT_LARGE 结果有了很大的改进,再次证实了我们在前文中探讨的设计选择的重要性。

      RoBERTa 训练期间处理的总数据量为 8K * 100K ,要远大于 BERT0.256K * 1000 K ),为后者的 3.125 倍。所以效果好可能是因为训练的总数据量更大?

    • 接下来,我们将这些数据与前文描述的另外三个数据集(CC-NEWSOPENWEBTEXTSTORIES )结合起来(数据规模扩大十倍,160GB vs 16GB )。我们在合并的数据集上训练 RoBERTa,训练的步数与之前相同(100K)。总体而言,我们对160GB 的文本进行了预训练。我们观察到所有下游任务的性能都有进一步的改善,验证了预训练中数据大小和多样性的重要性。

    • 最后,我们对 RoBERTa 的预训练时间明显延长,将预训练的步数从 100K 增加到300K 甚至 500K 。我们再次观察到下游任务性能的显著提高,300K500K 训练步数的模型在大多数任务中的表现都超过了 XLNet_LARGE 。我们注意到,即使是我们训练时间最长的模型,似乎也没有过拟合我们的预训练数据,很可能会从 additional training 中受益。

      这里面引出一个话题:要想评估两个模型架构的相对好坏,需要在相同的数据集上训练相同的 epoch

  3. 接下来我们在三个不同的 benchmark (即,GLUESQuaDRACE)上评估我们最好的 RoBERTa 模型。具体而言,我们考虑在所有五个数据集(即BOOKCORPUSEnglish WIKIPEDIACC-NEWSOPENWEBTEXTSTORIES )上训练 500K 步的 RoBERTa

10.2.1 GLUE 结果

  1. 对于 GLUE ,我们考虑两种微调 setting

    • 在第一种 setting 中(single-taskdev ),我们为每个 GLUE 任务单独微调 RoBERTa ,只使用相应任务的训练数据。我们考虑对每个任务进行有限的超参数调优,其中batch size{16,32}$ \text{batch size}\in \{16,32\} $ ,learning rate{105,2×105,3×105}$ \text{learning rate}\in \left\{10^{-5},2\times10^{-5},3\times 10^{-5} \right\} $ ,学习率在前 6%step 中进行线性预热然后线性衰减到 0 。我们微调 10epoch ,并根据每个任务的评价指标对验证集进行早停 early stopping 。其余的超参数与预训练时保持一致。

      在这种 setting 下,我们报告了每个任务在五个随机初始化中的验证集指标,没有 model ensembling

    • 在第二种 setting 中(ensemblestest ),我们通过 GLUE 排行榜将 RoBERTa 与其它方法比较测试集上的评估结果。虽然许多提交给 GLUE 排行榜的方法都依赖于多任务微调 multi-task finetuning ,但我们的方法只依赖于单任务微调 single-task finetuning 。对于 RTESTSMRPC,我们发现从 MNLI 单任务模型开始微调是有帮助的,而不是从 baseline 预训练的 RoBERTa 开始。我们探索了一个更大的超参数空间(如下表所述),每个任务采用 5 ~ 7 个模型的集成 ensemble (不同的 checkpoint)。

  2. task-specific 修改:GLUE 的两项任务需要 task-specific 的微调方法,以获得有竞争力的排行榜结果:

    • QNLI: 最近在 GLUE 排行榜上提交的结果对 QNLI 任务采用了 pairwise ranking ,即从训练集中挖掘出候选答案并相互比较,然后将其中一个 (question, candidate) 判定为正类 positive 。这种形式大大简化了任务,但与 BERT 没有直接可比性。遵从最近的工作,我们在 test submission 中采用了 ranking 方法,但为了与 BERT 直接比较,我们报告了基于 pure classification 方法的验证集结果。
    • WNLI:我们发现提供的 NLI 格式的数据具有挑战性。相反,我们使用了来自 SuperGLUE 的重新格式化的 WNLI 数据,该数据指示了 query 代词和参考词 referent 的跨度 span 。我们使用 《A surprisingly robust trick for winograd schema challenge》margin ranking loss 来微调 RoBERTa 。对于一个给定的输入句子,我们使用 spaCy 从句子中提取额外的候选名词短语(作为负样本),并对我们的模型进行微调,使其对 positive referent phrase 的评分高于任何生成的negative candidate phrase 的评分。这种形式的一个不幸的后果是,我们只能利用positive 的训练样本,这就排除了一半以上的训练样本。
  3. 实验结果如下表所示。

    • 在第一个 settingsingle-taskdev)中,RoBERTa 在所有 9GLUE 任务的验证集上都取得了 SOTA 的结果。最重要的是,RoBERTa 使用了与 BERT_LARGE 相同的 MLM 预训练目标和架构,但却一致性地优于 BERT_LARGEXLNet_LARGE 。这就提出了模型架构和预训练目标的相对重要性的问题,相比于我们在这项工作中探讨的数据集大小和训练时间等更普通的细节。
    • 在第二个 settingensemblestest )中,我们将 RoBERTa 提交到 GLUE 排行榜,并在 9个任务中的 4 个任务中取得了SOTA 的结果,并且是迄今为止最高的平均得分。这特别令人振奋,因为 RoBERTa 不依赖于多任务微调,与其他大多数 top submission 不同。我们希望未来的工作可以通过纳入更复杂的多任务微调程序来进一步改善这些结果。

10.2.2 SQuAD 结果

  1. 与过去的工作相比,我们对 SQuAD 采取了更简单的方法。具体而言,虽然 BERTXLNet 都用额外的 QA 数据集来增强他们的训练数据,但我们只用所提供的 SQuAD 训练数据来微调 RoBERTaXLNet 原始论文还采用了一个自定义的 layer-wise 学习率调度来微调XLNet ,而我们对所有层使用相同的学习率。

    • 对于 SQuAD v1.1 ,我们遵循与 BERT 相同的微调程序。
    • 对于 SQuAD v2.0 ,我们还对一个给定的问题是否可以回答进行了分类。我们通过对分类损失和 span loss 进行求和,将这个分类器与 span predictor 联合训练。
  2. 结果如下表所示。

    • SQuAD v1.1 验证集上,RoBERTaXLNet 相匹配。在 SQuAD v2.0 验证集上,RoBERTa 创造了新的 SOTA ,比 XLNet 提高了 0.4 个点(EM)和 0.6 个点(F1 )。

    • 我们还将 RoBERTa 提交到公共的 SQuAD 2.0 排行榜,并评估其相对于其他系统的性能。大多数 top 系统都建立在 BERTXLNet 的基础上,这两个系统都依赖于额外的外部训练数据。相比之下,我们的 submission 没有使用任何额外的数据。

      我们的单个 RoBERTa 模型优于所有单一模型的 submission ,并且是那些不依赖数据增强的系统中得分最高的。

10.2.3 RACE 结果

  1. RACE 中,系统被提供了一段文字、一个相关的问题和四个候选答案。系统需要回答这四个候选答案中哪一个是正确的。

    我们为这项任务修改了RoBERTa

    • 首先,将每个候选答案与相应的问题和段落拼接起来,形成单个序列。(因为有四个候选答案,因此得到四个序列)。
    • 然后,我们对这四个序列中的每一个进行编码,并将得到的 [CLS] representation 通过一个全连接层,用来预测正确的答案。

    我们截断超过 128tokenquestion-answer ,如果需要的话也截断段落,使序列的总长度最多为 512token

    下表列出了 RACE 测试集的结果。RoBERTa 在初中 setting 和高中 setting 上都取得了 SOTA 的结果。

10.2.4 结论

  1. 在对 BERT 模型进行预训练时,我们仔细评估了一些设计决策。我们发现以下决策可以大大改善 BERT 在下游任务上的性能:

    • 对模型进行更长时间的训练(即更多的 epoch)。
    • 在更多的数据上进行更大 batch 的训练(需要增大学习率)。
    • 取消 next sentence prediction: NSP 的目标。
    • 在更长的序列上进行训练(即更长的上下文)。
    • 动态改变应用于训练数据的 masking pattern (即 dynamic masking)。

    我们改进后的预训练程序被称作 RoBERTa

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文