改一个随机种子,你的BERT就能更好!
-
背景
目前,预训练模型已经在自然语言处理领域被广泛地应用,已经在多个领域取得了极好的效果,并且刷新了多个自然语言处理任务的榜单。但是,由于预训练模型非常依赖于参数的随机初始化的过程,可能通过改变某个随机种子就可以提升任务的效果。因此,Google search团队再次对BERT进行重新训练(money is all you need!),共开源了25个采用不同的随机种子的BERT的checkpoint。
实验证明,仅改变一个随机种子,就可以在多个任务上提升,同时,为了衡量不同随机种子/不同参数设定的预训练模型的效果,该团队提出了Multi-Bootstrap评测指标,对多种不同的参数设定/不同的随机种子进行预训练的模型进行了评估。
论文题目:
《The MultiBERTs: BERT Reproductions for Robustness Analysis》
论文与代码链接
https://arxiv.org/abs/2106.16163
https://github.com/google-research/language/tree/master/language/multiberts
实验环境与应用任务
接下来,我们就来看看Google的研究人员是如何对这些不同随机种子的BERT进行训练与分析,我们需要先清楚整体的训练环境以及在评测的任务是什么。
训练环境以及参数
所有的模型的训练的模型结构与超参数均与原始的BERT相一致,采用BERT-base模型结构:12层,768维的词向量维度。共有两个预训练的目标:Masked language Modeling(预测被掩码的字,简称MLM)与NSP(预测下一句话是否是正确的,简称NSP),模型采用TPU进行训练,一共花费1728小时进行预训练,8小时进行微调。
评测任务
研究员大大们在GLUE(General Language Understanding Evaluation)评测集和SQuAD数据集上分别进行了实验。其中,分别在SQuAD v1.1和v2.0分别进行了实验,并且进行了分析。
结果与分析
接下来我们可以分析不同的随机种子在GLUE评测集与SQuAD数据集上的实验结果。上图为MultiBERTs(25个不同checkpoint的BERT)在GLUE评测集与SQuAD数据集上的结果。其中,虚线代表原始的BERT模型,其他的代表25个不同的checkpoint的BERT模型。在GLUE上,原始的BERT介于MultiBERTs的最大值与最小值之间,只有在QQP任务上,原始的BERT超越了所有的MultiBERTs模型。但是,在SQuAD数据集上,MultiBERTs全部超越了原始的BERT模型,这是一个十分有趣的点,或许在之后,大家可以选择不同的checkpoint进行微调,以此提高实验结果(感谢Google开源了所有的checkpoint)。
目前,以上的结果均为预训练与微调阶段均采用相同的随机种子的结果,为了进一步研究随机种子对于模型的影响,本文对预训练与微调阶段均采用相同随机种子与不同随机种子进行了实验。
其中,Same表示预训练与微调阶段采用相同的随机种子,Diff表示预训练与微调阶段采用不同的随机种子。从上图可得,仅仅只有MNLI任务中,微调阶段的不同随机种子产生的影响较大,其中MNLI(Multi-Genre Natural Language Inference)是由纽约大学发布的一个文本蕴含的任务数据集,在给定前提(Premise)下,需要判断假设(Hypothesis)是否成立。而HANS则是在2019年研究学者提出的另一个属于同任务的数据集,相比于原文的数据集,该数据集则是一个新领域的数据集,该数据集在原有的预训练模型上进行微调,则发现波动(Same-Diff)很大。
如何衡量不同参数设定下的预训练模型的实验结果差异
先前,我们已经得到了关于不同随种子的预训练模型对于结果的影响,但是,该如何衡量不同的随机种子带来的影响呢?研究员们提出了Multi-Bootstrap评测指标。该指标其实是基于Bootstrap算法设计的。
Bootstrap算法
该算法就是利用有限的样本经由多次重复抽样,建立起足以代表母体样本分布之新样本,在机器学习中解决了样本不足的问题。
这么说可能有点抽象是不是看不懂?其实就是因为随机种子太多了,那么研究人员不可能对所有的随机种子都进行实验,因此通过采样的方式得到一系列随机种子对应的实验结果,之后通过对这一系列的结果进行平均与所有的随机种子的实验结果进行比较。
看到这里就有疑问了!那所有的随机种子的结果该从哪里来呢?肯定是拿不到的,因此研究人员提出了一个新的想法:假设所有的随机种子只有100个,随即从这100个里面采样20个作为调研对象,那么是不是就可以得到随机种子与实验结果之间的关联了呢!
明白了这一点之后,让我们来看这篇文章的公式,就会非常的清晰明了!我们将上述的例子一直贯穿下来:
训练步数对实验结果的影响
上述已经对随机种子与实验结果的影响阐述完成,但是,对于预训练模型来说,存在许多超参数对预训练模型存在影响,研究员们选取了训练步数对实验结果的影响进行研究,对相同随机种子的模型分别训练100万步与200万步进行实验,结果如下:
从上图可以发现:只有在MNLI任务上,在相同的随机种子的情况下,200万步的BERT模型基本上都比100万步的BERT模型效果更好,
总结
这篇论文最大的亮点就是在于研究员们开源了25个不同随机种子checkpoint,并且进行了实验分析,或许我
们接下来的实验可以尝试更换一个checkpoint,就能带来结果的提升。同时,提出的Multi-Bootstrap算法也给不同参数设定的预训练模型的效果提供了一个评价指标,在预训练模型大行其道的时代,这种评测指标才能让我们看到究竟是超参数带来的效果提升,还是改进模型结构带来的效果提升,更为重要!
除此之外,近期也有其他的相关工作,如:《The curse of performance instability in analysis datasets: Consequences, source, and suggestions》与《Fine-tuning pretrained language models:Weight initializations, data orders, and early stopping.》均是相关的研究。 -
Alice_恒源云
-