ELECTRA: 超越BERT, 19年最佳NLP预训练模型

BERT推出这一年来,除了XLNet,其余的改进都没带来太多惊喜,无非是越堆越大的模型和数据,以及动辄1024块TPU,让工程师们不知道如何落地。今天要介绍的ELECTRA是我在ICLR盲审中淘到的宝贝(9月25日已截稿),也是BERT推出以来我见过最赞的改进,经过相似GAN的结构和新的预训练任务,在更少的参数量和数据下,不只吊打BERT,并且仅用1/4的算力就达到了当时SOTA模型RoBERTa的效果。

1. 简介

ELECTRA的全称是Efficiently Learning an Encoder that Classifies Token Replacements Accurately,先来直观感觉一下ELECTRA的效果:架构

右边的图是左边的放大版,纵轴是GLUE分数,横轴是FLOPs (floating point operations),Tensorflow中提供的浮点数计算量统计。从上图能够看到,同等量级的ELECTRA是一直碾压BERT的,并且在训练更长的步数以后,达到了当时的SOTA模型——RoBERTa的效果。从左图曲线上也能够看到,ELECTRA效果还有继续上升的空间。框架

2. 模型结构

NLP式的Generator-Discriminatoride

ELECTRA最主要的贡献是提出了新的预训练任务和框架,把生成式的Masked language model(MLM)预训练任务改为了判别式的Replaced token detection(RTD)任务,判断当前token是否被语言模型替换过。那么问题来了,我随机替换一些输入中的字词,再让BERT去预测是否替换过能够吗?能够的,由于我就这么作过,但效果并很差,由于随机替换太简单了svg

那怎样使任务复杂化呢?。。。咦,我们不是有预训练一个MLM模型吗?函数

因而做者就干脆使用一个MLM的G-BERT来对输入句子进行更改,而后丢给D-BERT去判断哪一个字被改过,以下:学习

因而,咱们NLPer终于成功地把CV的GAN拿过来了!优化

Replaced Token Detection编码

但上述结构有个问题,输入句子通过生成器,输出改写过的句子,由于句子的字词是离散的,因此梯度在这里就断了,判别器的梯度没法传给生成器,因而生成器的训练目标仍是MLM(做者在后文也验证了这种方法更好),判别器的目标是序列标注(判断每一个token是真是假),二者同时训练,但判别器的梯度不会传给生成器,目标函数以下:idea

[公式]
由于判别器的任务相对来讲容易些,RTD loss相对MLM loss会很小,所以加上一个系数,做者训练时使用了50。.net

另外要注意的一点是,在优化判别器时计算了全部token上的loss,而以往计算BERT的MLM loss时会忽略没被mask的token。做者在后来的实验中也验证了在全部token上进行loss计算会提高效率和效果。

事实上,ELECTRA使用的Generator-Discriminator架构与GAN仍是有很多差异,做者列出了以下几点:

3. 实验及结论

创新老是不易的,有了上述思想以后,能够看到做者进行了大量的实验,来验证模型结构、参数、训练方式的效果。

Weight Sharing

生成器和判别器的权重共享是否能够提高效果呢?做者设置了相同大小的生成器和判别器,在不共享权重下的效果是83.6,只共享token embedding层的效果是84.3,共享全部权重的效果是84.4。做者认为生成器对embedding有更好的学习能力,由于在计算MLM时,softmax是创建在全部vocab上的,以后反向传播时会更新全部embedding,而判别器只会更新输入的token embedding。最后做者只使用了embedding sharing。

Smaller Generators

从权重共享的实验中看到,生成器和判别器只须要共享embedding的权重就足矣了,那这样的话是否能够缩小生成器的尺寸进行训练效率提高呢?做者在保持原有hidden size的设置下减小了层数,获得了下图所示的关系图:

能够看到,生成器的大小在判别器的1/4到1/2之间效果是最好的。做者认为缘由是过强的生成器会增大判别器的难度(判别器:小一点吧,我太难了)。

Training Algorithms

实际上除了MLM loss,做者也尝试了另外两种训练策略:

  1. Adversarial Contrastive Estimation:ELECTRA由于上述一些问题没法使用GAN,但也能够以一种对抗学习的思想来训练。做者将生成器的目标函数由最小化MLM loss换成了最大化判别器在被替换token上的RTD loss。但还有一个问题,就是新的生成器loss没法用梯度降低更新生成器,因而做者用强化学习Policy Gradient的思想,将被替换token的交叉熵做为生成器的reward,而后进行梯度降低。强化方法优化下来生成器在MLM任务上能够达到54%的准确率,而以前MLE优化下能够达到65%。
  2. Two-stage training:即先训练生成器,而后freeze掉,用生成器的权重初始化判别器,再接着训练相同步数的判别器。

对比三种训练策略,获得下图:

可见“隔离式”的训练策略效果仍是最好的,而两段式的训练虽然弱一些,做者猜想是生成器太强了致使判别任务难度增大,但最终效果也比BERT自己要强,进一步证实了判别式预训练的效果。

Small model? Big model?

这两节真是吊打以前的模型,做者重申了他的主要目的是提高预训练效率,因而作了GPU单卡就能够愉快训练的ELECTRA-Small和BERT-Small,接着和尺寸不变的ELMo、GPT等进行对比,结果以下:

数据简直优秀,仅用14M参数量,之前13%的体积,在提高了训练速度的同时还提高了效果,这里我疯狂点赞。

小ELECTRA的本事咱们见过了,那大ELECTRA行吗?直接上图:

上面是各个模型在GLUE dev/text上的表现,能够看到ELECTRA仅用了1/4的计算量就达到了RoBERTa的效果。并且做者使用的是XLNet的语料,大约是126G,但RoBERTa用了160G。因为时间和精力问题,做者们没有把ELECTRA训练更久(应该会有提高),也没有使用各类榜单Trick,因此真正的GLUE test上表现通常(如今的T5是89.7,RoBERTa是88.5,没看到ELECTRA)。

Efficiency Analysis

前文中提到了,BERT的loss只计算被替换的15%个token,而ELECTRA是所有都计算的,因此做者又作了几个实验,探究哪一种方式更好一些:

  1. ELECTRA 15%:让判别器只计算15% token上的损失
  2. Replace MLM:训练BERT MLM,输入不用[MASK]进行替换,而是其余生成器。这样能够消除这种pretrain-finetune直接的diff。
  3. All-Tokens MLM:接着用Replace MLM,只不过BERT的目标函数变为预测全部的token,比较接近ELECTRA。

三种实验结果以下:

能够看到:

  1. 对比ELECTRA和ELECTRA 15%:在全部token上计算loss确实能提高效果
  2. 对比Replace MLM和BERT:[MASK]标志确实会对BERT产生影响,并且BERT目前还有一个trick,就是被替换的10%状况下使用原token或其余token,若是没有这个trick估计效果会差一些。
  3. 对比All-Tokens MLM和BERT:若是BERT预测全部token 的话,效果会接近ELECTRA

另外,做者还发现,ELECTRA体积越小,相比于BERT就提高的越明显,说明fully trained的ELECTRA效果会更好。另外做者推断,因为ELECTRA是判别式任务,不用对整个数据分布建模,因此更parameter-efficient

4. 总结

无心中发现了这篇还在ICLR盲审的ELECTRA,读完摘要就以为发现了新大陆,主要是本身也试过Replaced Token Detection这个任务,由于平时任务效果的分析和不久前看的一篇文章,让我深入感觉到了BERT虽然对上下文有很强的编码能力,却缺少细粒度语义的表示,我用一张图表示你们就明白了:

这是把token编码降维后的效果,能够看到sky和sea明明是天与海的区别,却由于上下文同样而获得了极为类似的编码。细粒度表示能力的缺失会对真实任务形成很大影响,若是被针对性攻击的话更是无力,因此当时就想办法加上更细粒度的任务让BERT去区分每一个token,不过同句内随机替换的效果并很差,弱鸡的我也没有再往前想一步,否则就也ICLR了。相信这个任务不少人都想到过,不过都没有探索这么深刻,这也告诫咱们,idea遍地都是,往下挖才能有SOTA。

ELECTRA是BERT推出这一年来我见过最赞的idea,它不只提出了能战胜MLM的预训练任务,更推出了一种十分适用于NLP的类GAN框架。毕竟GAN太牛逼了,看到deepfake的时候我就想,何时咱们也能deepcheat,但据说GAN在NLP上的效果一直不太好(只懂皮毛,要学起来了,轻拍),此次ELECTRA虽然只用了判别器,但我的认为也在必定程度上打开了潘多拉魔盒。

另外,整篇文章都干货满满,再也不像以前的BERT+模型同样能够用“more data+params+steps+GPU+MONEY”简单归纳。推荐你们去通读正文+附录,里面还有一些失败尝试我没有讲。

若是ELECTRA去直播,我必定给它刷一辆游艇。

参考资料

ELECTRA: PRE-TRAINING TEXT ENCODERS AS DISCRIMINATORS RATHER THAN GENERATORS


hi all!最近终于有了本身的公众号,叫NLPCAB,原本想叫LAB,但以为和一我的能撑起实验室我就上天了,因此取了谐音CAB,有些可爱而且意味深长?以后会努力和小伙伴们发干货,也但愿各位同窗投稿学习笔记~

相关文章
相关标签/搜索