深度学习——Bert全家桶区别

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、Bert
      • 1.Pretrain
  • 二、SpanBert
      • 1.Pretrain改进
  • 三、RoBERTa
      • 1.Pretrain改进
  • 四、ALBERT
      • 1.Pretrain改进


前言

便于学习了解Bert家族中各个版本的区别以及改进。


一、Bert

 论文信息:2018年10月,谷歌,NAACL
 论文地址: https://arxiv.org/pdf/1810.04805.pdf
 代码地址: https://github.com/google-research/bert

1.Pretrain

  1.MLM:学习token间信息,类似于完形填空,对15%的经过word piece后的token,进行处理。其中80%设置为[MASK],10%随机替换为其他token,10%不变。利用双向上下文信息,来预测这些位置的词语。
  2.NSP:学习语句间信息。一个二分类问题,给定两句话,判断seqB是否为seqA的下一句。构造的正负样本为 1:1。

二、SpanBert

 论文信息:2019年7月,Facebook & 华盛顿大学
 论文地址: https://arxiv.org/abs/1907.10529
 代码地址 :https://github.com/facebookresearch/SpanBERT

1.Pretrain改进

  1.Span Masking:SpanBERT认为对单个token进行random mask过于简单粗暴,丢失了很多词语信息。但不同的是,它不是按照固定的实体和短语,而是随机长度随机span的方式,效果更好。
  2.Span Boundary Objective (SBO):利用span的左右两个边界词和当前词位置,来预测当前词。SpanBERT认为span边界词对理解span很重要,故引入了这一学习目标。
  3.Single-Sequence Training:SpanBERT分析了BERT中NSP的作用,认为NSP反而会降低模型performance。故去掉了NSP,而仅采用单个sequence。

  • 主要原因为:
    1.NSP的负样本来自不同文档,差异过大,任务过于简单,导致模型参数训练不充分。
    2.NSP将两句话构成一个pair,会减小单个语句的长度。而越长的语句,信息量越大,可以提升模型效果。
    3.NSP的负样本来自不同文档,利用不同文档的语句来预测MLM,容易给MLM带来较大的噪声。

三、RoBERTa

 论文信息:2019年7月,Facebook & 华盛顿大学
 论文地址: https://arxiv.org/abs/1907.11692
 代码地址: https://github.com/pytorch/fairseq

1.Pretrain改进

  1.Dynamic Masking:BERT在预处理阶段,对sequence进行了随机mask。训练时,同一个sequence中的mask,在不同的epochs中是不会改变的,也就是static masking静态掩码。这种固定mask的方式,不利于学习到更多不同信息。RoBERTa采用了动态掩码,dynamic Masking的方式,步骤为将原始语料复制10份每一份语料随机选择15%的token进行mask,[mask]、replace、keep的比例仍然为80%、10%、10%。通过这种类似于cross-validation的方式,使得每一份语料产生了不同的mask,从而可以学习到更多不同信息。总共训练40个epochs,10份语料的情况下,每份语料应用到4个epochs中。
  2.Without NSP:直接去掉NSP。

四、ALBERT

 论文信息:2019年9月,谷歌,ICLR 2020
 论文地址: https://arxiv.org/abs/1909.11942
 代码地址: https://github.com/google-research/ALBERT

1.Pretrain改进

  1.Factorized embedding parameterization 矩阵分解:在模型压缩和加速中,我们经常使用矩阵分解的方法。将一个大矩阵,分解为两个小矩阵。我们将BERT的token embedding向量大小记为E,隐层大小记为H,vocab大小为V。原版BERT中,E = H。这其中是否有参数冗余呢?答案是显然的。embedding层向量主要是当前token的特征表达,而且比较低维。而隐层则包含了更多来自上下文的信息。和隐层相比,embedding层不需要那么大的向量。

基于这一点,ALBERT对embedding层进行了矩阵分解。分解为V * E + E * H 的两个矩阵。原版BERT embedding层大小为 V * H。压缩比为 (V * E + E * H) / (V * H),由于V >> H,故压缩比约为 E/H。当E远小于H时,可以实现较大的压缩比。典型值E = 128, H = 2014,矩阵分解后,embedding层参数量只有原先的1/8。

  2.Cross-layer parameter sharing 跨层参数共享:层间参数共享。将Transformer每一层的参数,包括self-attention和fead-forward,都进行共享。

  • 作用有两点:
      1.Transformer encoding的参数量直接缩小为原来的 1/N, N为层数。典型值为12,24
      2.每一层输出向量更加稳定。

  3.sentence-order prediction (SOP) 语句顺序预测:提出了语句顺序预测,一个pair的两个文本,不论正负样本,都来自同一文档。正样本为AB,负样本为BA。模型需要预测语句顺序。这个方法克服了MLM噪声引入问题,也使得模型从基于NSP的主题预测变为了基于SOP的语句关系预测,大大增加了任务难度,从而使模型参数训练更充分。

你可能感兴趣的:(深度学习,深度学习,bert,人工智能)