预训练模型总结

RoBERTa

RoBERTa与BERT相比, 在模型结构, 以及整体训练方法上没有多少区别. 只是在训练细节上有以下区别.

更多的训练数据, 更长的训练时间

BERT使用了16G的训练数据, 而RoBERTa使用160G的训练数据. 当然训练数据的增加, 就要配合更长的训练时间. 相比于BERT, 增加了以下训练集:

  • add CC-NEWS(76G)

  • add OPEN WEB TEXT(38G)

  • add STORIES(31G)

更多的训练数据增加了数据的多样性(词汇量, 句法结构, 语法结构等等), 当然能提高模型性能.

更大的mini-batch

训练BERT base使用的batch size为256, 共1M steps. 而RoBERTa使用的batch size是8K, 31K steps.

用更大的batch size配合更大学习率能提升模型优化速率和模型性能.

静态Mask变动态Mask

原本的BERT采用的是static mask的方式, 在生成预训练数据的时候, 提前对数据进行mask. 也就是说从一开始随机选择了这15%的Tokens, 之后的N个epoch里都不再改变了. 为了充分利用数据, BERT定义了dupe_factor参数, 这样可以将训练数据复制dupe_factor份, 同一条数据就可以有dupe_factor中不同的mask方法. 但每条样本mask的结果依然是固定的这dupe_factor种.

而动态Mask, 是在每一次将训练example喂给模型的时候, 才进行随机mask. 动态mask相当于间接的增加了训练数据, 有助于提高模型性能.

RoBERTa一开始把预训练的数据复制10份, 每一份都随机选择15%的Tokens进行Masking, 即同样的一句话有10种不同的mask方式.

移去NSP任务

Bert为了捕捉句子之间的关系, 使用了NSP任务进行预训练. 即输入一对句子A和B, 判断这两个句子是否是连续的. 在BERT组织语料时, 50%的样本是从同一篇文章中选取的连续的两个segment, 剩余50%是从不同的文章中选取的segment, 两句子最大长度之和为512.

RoBERTa去除了NSP, 而是每次输入连续的多个句子, 直到最大长度512, 可以跨文章, 如果跨document了. 就在中间加上一个特殊分隔符. 这种训练方式叫做Full-sentences. 另外实验了Doc-sentences训练方式, 与Full-sentences相比, 只是有不能跨document的区别, 在实验中有更好的效果.

参考资料:

ALBERT

ALBERT即A Lite BERT, 意为轻量化的BERT, 目标是解决BERT等大规模网络带来的内存开销大以及训练耗时长的问题. ALBERT主要从三个方面出发对BERT进行了优化改造.

Factorized embedding parameterization

在原始的BERT中, token embedding(或者成为vocab embedding)的维度EE与hidden layer的维度HH是相等的. BERT中的隐层维度较大, 因此在词典大小较大的情况下, token embedding的矩阵也会很大.

token embedding的目标是学习与上下文无关的表征, 隐藏层的目标是学习上下文相关的表示. ALBERT中提出, BERT的表征能力很大一部分来自于使用上下文为学习过程提供上下文相关的表征信号, 因此HH的维度应当远大于EE, 那么token embedding就不需要这么大的维度了.

ALBERT的做法是因式分解. 将原始的BERT词嵌入矩阵分解成两个小矩阵, 每个token不再被直接映射到HH维的空间中, 而是先映射到维度为EE的空间中, 而EE是小于HH的, 然后再进过一个E×HE \times H大小的矩阵映射到HH维中. 通过这种分解, 空间复杂度就由O(V×H)O(V \times H)降到O(V×E+E×H).O(V \times E + E \times H). 在H远大于远大于E$$时, 参数量减少得非常明显.

BERT-base中H=768H=768, 在ALBERT中, 尝试了E=64,128,256,768E=64,128,256,768等数值, 最终选定E=128E=128.

Cross-layer parameter sharing

ALBERT提出让不同层共享参数, 这样网络层数的增加, 也不会带来参数量的显著增长. 参数的共享有几种方案:

  • 共享每一层的FFN(feed-forward network)参数

  • 共享每一层的Attention参数

  • 共享每一层的所有参数

参数的共享会带来模型性能的下降, 但也带来了好处: 有效地提升了神经网络参数的鲁棒性.

Inter-sentence coherence loss

分析BERT中的NSP任务, 预测是否是下一句的任务实际上是将主题预测连贯性预测结合到单个任务中, 这是由于它构造正负样本的方法决定的. 构造负样本时, 基本是使用不同文档的两个句子搭配在一起进行判断, 但不同文档的topic不同, 很容易就能预测出来不相关. 主题预测比连贯性预测简单得多, 且与MLM学习到的语言模型信息是有重合的.

ALBERT认为, 句间建模在语言理解中是非常重要的, 因此提出了判断语言连贯性的任务和对应的损失函数. 语言连贯与否的情况是复杂的, 因此任务难度较高, 避免了NSP过于简单的情况.

在构造训练样本时, 将同一文档内的两个正向顺序的连续的segments作为正样本, 将这两个segments位置交换作为负样本. 由于两个segments出自同一个文档, 因此消除掉了主题预测的内容. 计算Inter-sentence coherence loss, 其实也是BCE, 只是换了个名字.

在使用了该损失函数后, ALBERT能显著提升下游多句子编码任务的性能.

参考资料

ERNIE (Baidu)

ERNIE的网络结构和BERT类似, 也是采用了Transformer的Encoder单元. 分为ERNIE1.0ERNIE2.0两个版本.

ERNIE 1.0

ERNIE 1.0与BERT对比, 预训练过程的主要变动有以下几点.

实体级别连续MASK

在BERT的字符级别token的mask基础上, 加入了实体短语的整体mask机制, 使用了三种mask机制:

  • basic-level masking: 就是原始token级别的mask, 与原始BERT的mask方式是一样的, 按字进行

  • entity-level masking: 识别出样本中的实体, 如同WWM一样, 对实体全词进行Mask

  • phrase-level masking: 对短语全词进行Mask

与原始的BERT的Mask进行对比:

详情参考: 预训练过程的Mask机制.

增加DLM(Dialogue Language Model)任务

对于多轮对话这部分语料, ERNIE使用DLM任务代替了BERT中的NSP任务. DLM的任务是对于N个句子的组合, 判断这个组合代表的多轮对话是真实的还是伪造的.

ERNIE将3个句子组合成[CLS]S1[SEP]S2[SEP]S3[SEP]来表示多轮对话. 输入除了token embeddingposition embedding, 还使用了dialogue embedding. dialogue embedding的输入只有QR两种, 分别代表提问回答, 因此与segment embedding是一致的.

3个句子组成的多轮对话可以是QRQ, QRR, QQR等形式, 在组织负样本时, 随机替换R.

对于除多轮对话外其他的训练样本, 依然使用NSP+MLM(Masked Language Model)的任务进行训练.

更多中文语料

Chinese Wikepedia的基础上, 增加了中文互联网环境的语料:

  • 百度百科(实体, 强描述性)

  • 百度新闻(专业通顺语料)

  • 百度贴吧(多轮对话)

参考资料

最后更新于