论文:ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generator
代码:Google Code | 哈工大中文预训练ELECTRA模型 |
ELECTRA-tiny_cn
目前最先进的语言表示学习方法可以被视为学习去噪自动编码器。他们选择未标记输入序列的一个小子集(通常为15%),屏蔽这些标记的身份(例如BERT)或关注这些令牌(例如,XLNet),然后训练网络恢复原始输入。虽然由于学习双向表示,这些掩蔽语言建模(MLM)方法比传统的语言模型预处理训练更有效,但由于每个实例中网络只学习15%的令牌,因此需要花费大量的计算成本。
ELECTRA提出的替换标记检测任务,利用一个小的生成网络替换一些原始标记,再用一个判别网络判断那些标记是被替换过的。这样做的一个关键优势是,该模型从所有输入标记中学习,而不仅仅是小的屏蔽子集,这使得它的计算效率更高。
图2 替换令牌检测概述。生成器可通常使用与判别器联合训练的小型掩码语言模型。在预训练之后,我们扔掉发生器,只对下游任务中的判别器(ELECTRA模型)进行微调。
我们需要训练两个神经网络,一个生成器G和一个判别器D。每个神经网络由Transformer encoder组成,构成由输入序列 x = [ x 1 , . . . . . . , x n ] x=[x_1,......,x_n] x=[x1,......,xn]到文本表示向量序列 h = [ h 1 , . . . . . . , h n ] h=[h_1,......,h_n] h=[h1,......,hn]的映射。对于给定位置 t t t(文中仅是 x t = [ M A K S ] x_t=[MAKS] xt=[MAKS]的位置),生成器输出一个带有softmax的 x t x_t xt的概率分布:
对于给定位置 t t t,判别器 x t x_t xt是否是原始标记,
生成器训练好后用于执行屏蔽语言建模(MLM),对于给定的输入序列 x = [ x 1 , . . . . . . , x n ] x=[x_1,......,x_n] x=[x1,......,xn],MLM首先选择一个随机位置的集合 m = [ m 1 , . . . . . . , m k ] m=[m_1,......,m_k] m=[m1,......,mk],将这些位置进行MAKS标记: x m a s k e d x^{masked} xmasked。然后,生成器会预测这些被MASK标记的原始标记,生成器的预测记为 x c o r r u p t x^{corrupt} xcorrupt,判别器用来判断原始标记 x x x和生成器预测的标记 x c o r r u p t x^{corrupt} xcorrupt是否一致。
两者的损失函数为:
虽然与GAN的训练目标相似,但有几个关键的区别。首先,如果生成器碰巧生成了正确的标记,则判别器会认为这个标记是“正确的”而不是“错误的”。更重要的是,生成器是用最大似然MLE来训练的,而不是被敌对地训练来欺骗鉴别器。对抗性训练生成器是具有挑战性的,因为它不可能通过生成器的采样反向传播。
在预训练接受后会抛弃生成器, 用判别器进行下游任务的fine-tune。
主要在GLUE和SQuAD数据集上进行了评估。有些评估的数据集可能有些小,意味着模型的随机种子可能会对准确性有较大影响,因此选择相同的checkpoint训练10次的中间值作为结果。
提出了几个改进模型的方法。
Weight Sharing:我们提出了共享生成器和判别器的参数来提升预训练的效率。如果生成器和判别器的尺寸相同,那么所有transfomer的参收都能绑定。但实际上我们发现生成器的尺寸小一些效果会更好,所以只共享了它们的embedding参数(包括token和positional embedding)。
在生成器和判别器尺寸相同时,共享所有参数的GLUE得分为84.4,只共享embedding为84.3,不共享为 83.6。 我们认为只共享embedding参数会有提升MLM在学习以下表示时很有效:判别器只更新输入的标记和生成器采样的标记,而生成器会在词表上进行softmax,密集地更新embedding参数。另一方面共享所有参数提升较少,并且要求生成器和判别器有相同的尺寸。因此原文使用共享embedding的方法进行实验。
图3 不同生成器/判别器尺寸在GLUE上的不同得分
如果生成器和判别器尺寸相同,那么训练ELECTRA的成本可能是训练MLM模型的两倍。因此我们使用较小的生成器。除了不同尺寸的MLM生成器,实验还比较了unigram生成器,结果如图3所示。当生成器尺寸过大时,对于判别器来说任务可能有些困难,导致效果降低。
Training Algorithm
图4 不同训练算法的比较。由于我们关注的是效率,x轴显示的是FLOPs而不是训练步骤(例如,ELECTRA训练的步骤比BERT少,因为它包含生成器)。
最后是尝试的其他训练算法,虽然最终并没有改善结果。最初的训练计划是将生成器和判别器进行联合训练,现在尝试采用以下两阶段的训练程序替代:
1、仅训练 n n n步生成器的 L M L M L_{MLM} LMLM。
2、用生成器的参数初始化判别器,训练 n n n步判别器的 L D s i c L_{Dsic} LDsic,保持生成器的参数不变。
注意,此方法需要生成器和判别器有相同的尺寸。
我们还探索了对生成器进行对抗训练,就像在GAN中一样,使用强化学习来适应从生成器中离散采样的操作。
训练结果如图4,二阶段训练中,从生成目标向判别目标转换后,下游任务绩效显著提高,但并没有超过联合训练。尽管仍然优于BERT,我们发现对抗性训练表现不如最大似然训练。
对于对抗训练如此拉跨的原因可能有以下两点。第一,对抗性生成器在MLM方面更差;它在MLM中达到58%的准确率,相比之下mle训练的准确率为65%。我们认为,准确率较差的主要原因是在生成文本的大动作空间中,强化学习的样本效率较差。第二,对抗训练的生成器产生一个低熵的输出分布,其中大部分概率集中在一个单一的token上,这意味着在生成器样本中没有太多的多样性。
使用与Bert-small相同的参数训练一个可以在单个GPU上快速训练的小模型。具体效果参考原文。
使用与Bert-large相同的参数训练一个可以在单个GPU上快速训练的小模型。具体效果参考原文。
我们已经提出,将训练目标放在一小部分token上会使掩蔽语言建模效率低下。然而,事实并非如此。毕竟,模型仍然接收大量的输入token,即使它只预测少量的MAKS token。为了更好地理解ELECTRA的收益从何而来,我们比较了一系列其他的预训练目标,来理解BERT和ELECTRA之间差异。
ELECTRA 15% :这个模型和ELECTRA是一致的,除了判别器的损失只来自我们从输入屏蔽掉的那15%的标记。也就是判别器的损失 L D s i c L_{Dsic} LDsic来自于 i ∈ m i \in m i∈m,而不是从1到 n n n。
Replace MLM :这个目标与屏蔽语言建模相同,只是不是用[MASK]替换屏蔽标记,而是用来自生成器模型的标记替换。这一目标测试了在多大程度上,ELECTRA的收益来自于解决在训练前将模型暴露给[MASK]令牌而不是微调时产生的差异。可以理解为,只用MLM训练的BERT,但是原本作为输入的[MASK]标记现在利用一个生成器生成的词来替代。
All-Tokens MLM:与 Replace MLM类似,被屏蔽的token用生成器的样本替代。此外,模型预测输入的所有标记,而不仅仅是被屏蔽的那几个。
结果如上表所示。首先,我们发现在所有输入令牌(而不仅仅是一个子集)上定义一个损失对ELECTRA非常有利:ELECTRA15%的性能比ELECTRA差。其次,我们发现BERT性能由于预处理和微调由于[MASK]的不匹配而受到轻微损害,因为Replace MLM略优于BERT。我们注意到BERT(包括我们的实现)已经包含了一个技巧来帮助处理预处理/微调差异:在被屏蔽的词中,有10%不是替换成[MASK]标记,而是随机替换成其他标记;有10%的标记不变,但这并不能解决问题。All-Tokens MLM 模型填补了BERT和ELECTRA的差距。总的来说,这些结果表明,ELECTRA的改进很大程度上归因于从所有token中学习,较小程度上归因于减轻预训练和微调的不匹配。
Self-Supervised Pre-training for NLP
自我监督学习已经被用来学习单词表示,以及最近通过语言建模等目标对词语的上下文表示。BERT在掩模语言建模任务中对一个大型Transformer进行预训练。对BERT有许多扩展。例如,MASS和UniLM通过添加自回归生成训练目标,将BERT扩展到生成任务。ERNIE 和SpanBERT
使用连续掩码改进了跨度表示。这个想法可能是对ELECTRA的补充;我们认为,让ELECTRA的生成器自动回归并添加一个“替换跨度检测”任务将是有趣的。XLNet 并没有屏蔽输入令牌,而是屏蔽了注意力权重,使得输入序列以随机顺序自回归生成。但是,这种方法与BERT一样低效,因为XLNet以这种方式只生成15%的输入令牌。像ELECTRA一样,XLNet可能通过不需要[MASK]标记来缓解BERT的训练前微调差异,尽管这并不完全清楚,因为XLNet在训练前使用两个“注意力流”,但只有一个用于微调。最近,TinyBERT 和MobileBERT等模型表明,可以将BERT有效地浓缩为一个更小的模型。相比之下,我们更注重训练前的速度而不是推理速度,所以我们从零开始训练ELECTRA-Small。
Generative Adversarial Networks
GANs在生成高质量的数据方面是有效的。Radford等(2016)提出在下游任务中使用GAN的discriminator,这与我们的方法类似。GANs已应用于文本数据,尽管好的方法仍然落后于极大似然训练。虽然我们不使用对抗性学习,但我们的生成器特别让人想起MaskGAN,后者训练生成器填充从输入中删除的令牌。
Contrastive Learning
总的来说,对比学习方法将观察到的数据点与虚构的负样本区分开来。它们已经被应用于许多形式,包括文本、图像和视频数据。常用方法为学习相关数据点相似的嵌入空间或将真实数据点与负样本排序的模型。ELECTRA与噪声对比估计(NCE)有关,它还训练了一个二值分类器来区分真实和假数据点。
Word2Vec 是最早的自然语言处理预处理方法之一,它使用了对比学习。事实上,ELECTRA可以被看作是带有负采样的连续词语袋(CBOW)的大规模放大版本。CBOW还预测给定上下文的输入token,负抽样将学习任务重新定义为二进制分类任务,以判断输入令牌是否来自数据或计算的分布。然而,CBOW使用bag-of-vectors编码器和一个派生自unigram标记频率的简单的分布,而不是一个transformer和一个可学习的生成器。
我们提出了替代标记检测,一种新的自我监督的语言表示学习任务。关键的想法是训练一个文本编码器来区分输入标记和由一个小的生成网络产生的高质量的负样本。与掩码语言建模相比,我们的训练前目标具有更高的计算效率,并在下游任务上获得更好的性能。即使在使用相对较少的计算量时,它也能很好地工作。