Okii's blog

仅作为记录自己的学习过程

0%

RoBERTa

本章是RoBERTa模型概述

一、前言

RoBERTa在论文中提出,训练是一个非常重要的过程,但BERT在发布时并没有得到很好的训练,导致其性能看起来比现在的自回归语言模型性能要略差(例如XLNet)。但实际上, 对BERT应用一些训练技巧对提升BERT性能影响是非常大的。因此,作者重新对BERT施加了一些训练技巧,使得BERT的性能得到了进一步提升,并且具有更强的鲁棒性。

RoBERTa 相较于 BERT 最大的改进有三点:

1、动态 Masking

2、取消 NSP (Next Sentence predict) 任务

3、扩大 Batch Size

**ps: **RoBERTa相较于 BERT并没有模型结构上的改动,只是应用了更好的训练技巧。

二、动态Masking

静态 Masking vs 动态 Masking

  • 静态 Maksing:在数据预处理期间 Mask 矩阵就已生成好,每个样本只会进行一次随机 Mask,每个 Epoch 都是相同的

  • 改进版的静态 Maksing:比如说,在预处理的时候将数据拷贝 10 份,每一份拷贝都采用不同的 Mask,也就说,同样的一句话有 10 种不同的 mask 方式。这样数据量大了,但为了保证Epoch数不变,因此每份数据都训练 N/10 个 Epoch

  • 动态 Masking:每次向模型输入一个序列时,都会生成一种新的 Maks 方式。即不在预处理的时候进行 Mask,而是在向模型提供输入时动态生成 Mask

从Mask的方法上来看, 动态Mask并没有引入太多的计算花费, 但是却大大提升了训练时句子的多样性. 为了证明其有效性, 作者将上述三种Mask方式的性能将BERT(Base)在SQuAD上的F1 Score, MNLI - m和SST - 2上的ACC做了比较:

image-20240319210652118

其中reference来自XLNet中给出的BERT(Base)数据. 每种方式都采用了5轮的随机初始化

从中能看出, 改进后的静态Mask与原版Mask性能相仿, 动态Mask要比改进后的静态Mask稍好一点. 但动态Mask又不会引入太高的时间开销, 这样的增益还是很划算的

三、取消NSP任务

在BERT中, 训练时候采用了预测Mask和NSP两种训练任务. NSP(Next Sentence Prediction)任务是它随机的将两段连续或毫不相关的文档拼在一起, 然后用[CLS]位置的输出预测是否是下一个句子(连续)或者作为分类的依据。

RoBERTa 实验了 4 种方法来质疑NSP任务:

  • Segment - Pair + NSP:输入包含两部分,每个部分是来自同一文档或者不同文档的 segment (segment 是连续的多个句子),这两个 segment 的 token 总数少于 512 。预训练包含 MLM 任务和 NSP 任务。这是原始 BERT 的做法

  • Sentence - Pair + NSP:输入也是包含两部分,每个部分是来自同一个文档或者不同文档的单个句子,这两个句子的 token 总数少于 512 。由于这些输入明显少于 512 个 tokens,因此增加 batch size 的大小,以使 tokens 总数保持与 SEGMENT-PAIR + NSP 相似。预训练包含 MLM 任务和 NSP 任务

  • Full - Sentences:输入只有一部分(而不是两部分),来自同一个文档或者不同文档的连续多个句子,token 总数不超过 512 。输入可能跨越文档边界,如果跨文档,则在上一个文档末尾添加标志文档边界的 token 。预训练不包含 NSP 任务

  • Doc - Sentences:输入只有一部分(而不是两部分),输入的构造类似于 FULL-SENTENCES,只是不需要跨越文档边界,其输入来自同一个文档的连续句子,token 总数不超过 512 。在文档末尾附近采样的输入可以短于 512 个 tokens, 因此在这些情况下动态增加 batch size 大小以达到与 FULL-SENTENCES 相同的 tokens 总数。预训练不包含 NSP 任务

    image-20240319212633659

作者得出了以下结论:

1、观察方式1和方式2,使用单个句子明显的损失了下游任务的性能。可能模型并不能从句子中学习到长范围的依赖

2、观察方式1和方式4,即BERT的原始训练方式与不适用NSP的训练方式,移除NSP能稍微增强下游任务的性能

四、大大大

1、预训练的数据量扩大

image-20240319213422986

当时BERT训练只用了十几个G的数据,RoBERTa用了160G的数据

  • 从逐步添加训练技巧的流程来看, RoBERTa在和BERT使用十几G数据的情况下提升非常大

2、Batch Size扩大

RoBERTa 论文作者做过相关实验,采用大的 Batch Size 有助于提高性能

image-20240319213311002

其中,bsz 是 Batch Size;steps 是训练步数(为了保证 bsz*steps 近似相同,所以大 bsz 必定对应小 steps);lr 是学习率;ppl 是困惑度,越小越好;最后两项是不同任务的准确率

总结:严格意义上来说,RoBERTa才是BERT的完全体,它提供给大家一个非常好的预训练基准,而且在其他论文中也鼓励用RoBERTa而不是BERT进行比较,因为BERT的训练是不够充分的