具体顺序不是按照模型出现的顺序,而是按照我在组会上讲的顺序。会在每个模型的一开头列出参考的博客以及论文。
论文:RoBERTa: A Robustly Optimized BERT Pretraining Approach
https://wmathor.com/index.php/archives/1504/
RoBERTa相较于BERT最大的三点改进:
静态masking:在数据预处理期间 Mask 矩阵就已生成好,每个样本只会进行一次随机 Mask,每个 Epoch 都是相同的
修改版静态masking:在预处理的时候将数据拷贝 10 份,每一份拷贝都采用不同的 Mask,也就说,同样的一句话有 10 种不同的 mask 方式,然后每份数据都训练 N/10 个 Epoch。
动态masking:每次向模型输入一个序列时,都会生成一种新的 Maks 方式。即不在预处理的时候进行 Mask,而是在向模型提供输入时动态生成 Mask。
RoBERTa 实验了 4 种方法:
采用大的 Batch Size 有助于提高性能
论文:ALBERT: A Lite BERT for Self-supervised Learning of Language Representations(ICLR,2020)
https://wmathor.com/index.php/archives/1480/
基于Bert做出的提高:
主要的改进:
BERT:E=H,矩阵V*H(30000*768=23,000,000)
ALBERT:V*E+E*H(30000*256+256*768=7,800,000)
之前有工作试过单独将 self-attention 或者全连接层进行共享,都取得了一些效果。ALBERT 作者尝试将所有层的参数进行共享,相当于只学习第一层的参数,并在剩下的所有层中重用该层的参数,而不是每个层都学习不同的参数
效果:提升模型稳定性(模型稳定性是通过L2范数来衡量的,详见论文)
NSP:A与B是否是一个句子(主体预测+连贯性预测)
SOP:着力于连贯性预测
关键思想:
以上 ALBERT 都是使用跟 BERT 相同的训练数据。但是增加训练数据或许可以提升模型的表现,于是 ALBERT 加上 STORIES Dataset 后总共训练了 157G 的数据。另外,训练到 1M 步的时候,模型还没有对训练集 Overfit,所以作者直接把 Dropout 移除,最终在 MLM 验证集上的效果得到了大幅提升
论文:ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generator
ELECTRA的缩写来源:
ELECTRA:Efficiently Learning an Encoder that Classifies Token Replacements Accurately
与BERT相比所做的改变:
ELECTRA的特点:小模型表现优良,节省计算量
模型由两个部分组成,generator、discriminator。
generator负责随机MASK一部分输入,然后将输入中的MASK填上。
discriminator负责检测哪些是generator替换的,哪些是原本的。
动机:MLM只替换15%的token
类似于GAN的结构,但是不同。
generator的embedding和discriminator共享
generator的size只是discriminator的1/4到1/2
如果 BERT 效果太好,直接就输出了和原来一摸一样的单词,这也不是我们期望的。
随机地 mask 掉某个 token 效果是否真的好呢?对于中文来说,词是由多个字组成的,一个字就是一个 token。如果我们随机 mask 掉某个 token,模型可能不需要学到很多语义依赖,就可以很容易地通过前面的字或后面的字来预测这个 token。为此我们需要把难度提升一点,盖住的不是某个 token,而是某个词(span),模型需要学到更多语义去把遮住的 span 预测出来,这便是 BERT-wwm。同理,我们可以把词的 span 再延长一些,拓展成短语级别、实体级别(ERNIE)
论文:Revisiting Pre-trained Models for Chinese Natural Language Processing
相较于BERT做出的改进: