BERT 在训练的过程中使用了 Masked Language Model (MLM),随机遮挡一些单词,并对这些单词进行预测,BERT 训练的需要大量的计算量。ELECTRA 提出了一种新的预训练方法 Replaced Token Detection (RTD),训练过程类似 GAN,利用生成器将句子中的单词进行替换,然后判别器判断句子中哪些单词被替换过。ELECTRA 比 BERT 和 RoBERTa 效果更好,并且只用了 RoBERTa 1/4 的计算量就达到了类似的效果。
1.ELECTRA
BERT 的预训练任务是 MLM,随机选择输入句子中 15% 的单词,然后其中的 80% 的单词用 [mask] 替换,10% 保持不变,10% 随机替换。然后 BERT 会对这 15% 的单词进行预测,还原回真实的单词。例如输入的句子是 "the artist sold the painting",MLM 将其中的 painting 用 [mask] 替换,变成 "the artist sold the [mask]",然后 BERT 要预测 [mask] 真实的单词是什么。
MLM 预训练任务存在一些缺点:
- 每一次训练只预测了 15% 的单词, 比较浪费计算力。
- [mask] 只在训练的时候出现,在真实预测的时候是没有的,这导致训练和推断过程的不一致。
ELECTRA 针对 BERT 的这些问题,提出了 Replaced Token Detection (RTD) 预训练任务,其训练过程类似 GAN,如下图所示。
ELECTRA 由两个部分组成,第一部分是生成器 (Generator),生成器将句子中的部分单词进行替换,例如图中将 painting 替换成了 car。第二部分是判别器 (Discriminator),判别器用于判断一个句子中每一个单词是否被替换了,训练的过程会预测所有的单词,比 BERT 更高效。
Generator
ELECTRA 中如果使用简单的随机替换,会让判别器 (Discriminator) 很容易判断单词是否被替换过,例如将句子 "the artist sold the painting" 中的 painting 随机替换成 air,则判别器很容易判断出 "the artist sold the air" 中的 air 被替换过 。
因此 ELECTRA 使用了 MLM 对生成器进行训练,也是随机 [mask] 部分单词,然后用生成器预测的结果替换该单词,例如 Generator 将 painting 替换成 [mask],然后预测的时候将该位置预测成 car。这种 Generator 预测错误的单词具有更强的迷惑性。生成器预测的时候使用了 softmax,如下公式,公式中 hG 表示编码后的向量,e(x) 表示单词 x 的 embedding,t 表示位置。
Discriminator
判别器接收到生成器生成的句子,就会分别预测每一个单词是否被替换过。这一个过程会对句子的所有单词都进行预测,因此效率比 BERT 更高。最后训练得到的判别器将用于下游的任务。Discriminator 的预测公式如下:
总体损失函数
ELECTRA 总体的损失函数由生成器的损失函数 LMLM 和判别器的损失函数 LDisc 组成。生成器的训练损失函数仍然是 MLM 损失函数,主要原因是生成器将单词进行替换,而单词是离散的,导致判别器到生成器的梯度中断了。因此 ELECTRA 的损失函数由这两个部分相加组成。
2.实验结果
参数共享
ELECTRA 尝试将生成器和判别器的参数进行共享,使用相同大小的生成器和判别器。实验中不共享任何参数得到的 GLUE 分数为 83.6,共享单词 embedding 层后的 GLUE 分数为 84.3,共享所有参数的 GLUE 分数为 84.4。因此作者使用了共享单词 embedding 的方式,作者认为生成器能够更好地学习单词的 embedding,这主要归功于生成器在训练时会对所有的单词计算 softmax,可以利用所有单词的 embedding。
生成器大小
作者也对比了不同生成器和判别器大小对模型性能的影响,实验结果如下图所示。
图中横坐标为生成器的大小,纵坐标为 GLUE 分数,可以看到在生成器过大会影响模型的性能,比较好的生成器大小是判别器小的1/4~1/2。这主要是因为生成器过于强大,会导致判别器很难学习。
训练方法对比
ELECTRA 训练方式在上一节已经说了,主要优化生成器和判别的损失函数。作者在论文中还对比了另外两种训练方法:
- Two-Stage:交替训练生成器和判别器,例如固定判别器,训练生成器 n 次,然后固定生成器,训练判别器 n 次。这两个步骤交替进行。
- Adversarial:采用 GAN 中对抗训练的思想,最大化判别器的 RTD loss。
可以看到 ELECTRA 的训练方法相对比较好,而 Two-Stage 的方法效果是最差的,但是仍然比 BERT 要好。
和 BERT RoBERTa 计算量对比
上图的横坐标是浮点数计算总量 FLOPs (floating point operations),用于表示计算量,而纵坐标是 GLUE 分数。可以看到 ELECTRA 在计算量只有 RoBERTa 1/4 的时候就可以达到相近的性能。
实验结果
从上图可以看出 ELECTRA 的效果要好于 BERT,同样大小的模型都是超过 BERT 的。
从上图可以看出 ELECTRA 效果和 RoBERTa 差不多,但是计算量只是 RoBERTa 的 1/4。
3.参考文献
ELECTRA: PRE-TRAINING TEXT ENCODERS AS DISCRIMINATORS RATHER THAN GENERATORS