ALBERT

前言

谷歌的研究者设计了一个ALBERT(A Lite BERT,ALBERT,精简的BERT),详情见论文《ALBERT: A Lite BERT for Self-supervised Learning of Language Representations》,参数量远远少于传统的 BERT 架构。

  • BERT (Devlin et al., 2019) 的参数很多,模型很大,内存消耗很大,在分布式计算中的通信开销很大。
  • 但是 BERT 的高内存消耗边际收益并不高,如果继续增大 BERT-large 这种大模型的隐含层大小,模型效果不升反降。

作者提出ALBERT的动机是,通常情况下,增加模型规模能提高模型的性能,但受限于资源,我们不能无限制地增加下去。
因此,论文提出一种减少参数的方法(注意哦,减少参数跟增加模型规模是不矛盾的,减少参数的同时我们也可以增加模型规模!例如通过共享参数,但增加网络层深度来减少参数和增加模型规模),启发于 mobilenet,ALBERT 通过两个参数削减技术克服了扩展预训练模型面临的主要障碍:

  • 第一个技术是对嵌入参数化进行因式分解。大的词汇嵌入矩阵分解为两个小的矩阵,将隐藏层的大小与嵌入层的分离开。这种分离使得隐藏层的增加更加容易,同时不显著增加词汇嵌入的参数量。(不再将 one-hot 向量直接映射到大小为 H 的隐藏空间,先映射到一个低维词嵌入空间 E,然后再映射到隐藏空间。通过这种分解,研究者可以将词嵌入参数从 O(V × H) 降低到 O(V × E + E × H),这在 H 远远大于 E 的时候,参数量减少得非常明显。)
  • 第二种技术是跨层参数共享。这一技术可以避免参数量随着网络深度的增加而增加。

两种技术都显著降低了 BERT 的参数量,同时不对其性能造成明显影响,从而提升了参数效率。ALBERT 的配置类似于 BERT-large,但参数量仅为后者的 1/18,训练速度却是后者的 1.7 倍。

训练任务方面

  • 提出了Sentence-order prediction (SOP)来取代NSP。具体来说,其正例与NSP相同,但负例是通过选择一篇文档中的两个连续的句子并将它们的顺序交换构造的。这样两个句子就会有相同的话题,模型学习到的就更多是句子间的连贯性。SOP 主要聚焦于句间连贯,用于解决原版 BERT 中下一句预测(NSP)损失低效的问题

ALBERT

减少参数量

ALBERT 架构的主干和 BERT 类似,都使用了基于 GELU 的非线性激活函数的 Transformer。但是其分别在两个地方减少了参数量。

以下图为例可以看到模型的参数主要集中在两块,

  • 一块是 Token embedding projection block,占有 20% 的参数量.
  • 另一块是 Attention feed-forward block,占有 80% 的参数量。

image

Factorized embedding parameterization

在 BERT 中,Token Embedding 的参数矩阵大小为\(V \times H\),其中V表示词汇的长度,H为隐藏层的大小。即:

image

而 ALBERT 为了减少参数数量,在映射中间加入一个大小为E的隐藏层,这样矩阵的参数大小就从\(O(V \times H)\)降低为\(O(V \times E + E \times H)\),而\(E \ll H\)
image

之所以可以这样做是因为

  • 每次反向传播时都只会更新一个 Token 相关参数,其他参数都不会变。
  • 而且在第一次投影的过程中,词与词之间是不会进行交互的,只有在后面的 Attention 过程中才会做交互,我们称为 Sparsely updated

如果词不做交互的话,完全没有必要用一个很高维度的向量去表示,所以就引入一个小的隐藏层。

思考一个问题:这样的分解会影响模型的性能吗?

作者给出的解释是,

  • WordPiece embedding是跟上下文独立的,
  • hidden-layer embedding(即Transformer结构每一个encoder的输出)是跟上下文有关的,
  • 而BERT的强大主要是Attention机制,即根据上下文给出token的表征,

所以WordPiece embedding size不需要太大,因为WordPiece embedding不是BERT这么强的主要原因。

Cross-layer parameter sharing

ALBERT 的参数共享主要是针对所有子模块内部进行的,这样便可以把 Attention feed-forward 模块参数量从$ O(12 \times L \times H \times H)$ 降低到\(12 \times H \times H\),其中L为层数,H为隐藏层的大小。
参数共享能显著减少参数。共享可以分为全连接层注意力层的参数共享;注意力层的参数对效果的减弱影响小一点
ALBERT 之所以这样做是因为,考虑到每层其实学习到内容非常相似,所以尝试了将其进行参数共享。下图为不同层 Attention 学到的东西
image

其实看下表的实验结果,全共享(attention层和全连接层都共享)是比单纯共享attention层的效果要差的,但是全共享减少的参数实在太多了,所以作者采用的为全共享。
image

Sentence order prediction

还记得NSP任务吗?判断句子对是否是连续的句子对,后面的研究者发现,NSP给BERT带来不好的影响,主要原因是跟MLM任务相比,任务难度太小了

具体的,把NSP类型的任务(即句子对任务)分为topic prediction(主题预测)coherence prediction(一致性预测),很明显NSP是比较偏向主题预测的,而 topic prediction 相对 coherence prediction 是比较简单的。

SOP任务将负样本换成了同一篇文章中的两个逆序的句子,在预训练时,让模型去预测句子对是正序还是逆序,从而消除topic prediction,让模型学习更难的coherence prediction。实验证明,SOP任务带来的提升比NSP任务要好

谷歌自己把它换成了 SOP。这个在百度 ERNIE 2.0 里也有,叫 Sentence Reordering Task,而且 SRT 比 SOP 更强,因为需要预测更多种句子片段顺序排列。ERNIE 2.0 中还有一些别的东西可挖,比如大小写预测 Captialization Prediction Task、句子距离 Sentence Distance Task。

  • NSP:下一句预测, 正样本=上下相邻的2个句子,负样本=随机2个句子
  • SOP:句子顺序预测,正样本=正常顺序的2个相邻句子,负样本=调换顺序的2个相邻句子
  • NSP任务过于简单,只要模型发现两个句子的主题不一样就行了,所以SOP预测任务能够让模型学习到更多的信息

SOP任务也很简单,它的正例和NSP任务一致(判断两句话是否有顺序关系),反例则是判断两句话是否为反序关系。

我们举个SOP例子:

  • 正例:1.朱元璋建立的明朝。2.朱元璋处决了蓝玉。
  • 反例:1.朱元璋处决了蓝玉。2.朱元璋建立的明朝。

BERT使用的NSP损失,是预测两个片段在原文本中是否连续出现的二分类损失。目标是为了提高如NLI等下游任务的性能,但是最近的研究都表示 NSP 的作用不可靠,都选择了不使用NSP

作者推测,NSP效果不佳的原因是其难度较小。将主题预测和连贯性预测结合在了一起,但主题预测比连贯性预测简单得多,并且它与LM损失学到的内容是有重合的。

SOP的正例选取方式与BERT一致(来自同一文档的两个连续段),而负例不同于BERT中的sample,同样是来自同一文档的两个连续段,但交换两段的顺序,从而避免了主题预测,只关注建模句子之间的连贯性

  • 使用段落连续性任务。正例,使用从一个文档中连续的两个文本段落;负例,使用从一个文档中连续的两个文本段落,但位置调换了。
  • 避免使用原有的NSP任务,原有的任务包含隐含了预测主题这类过于简单的任务。

No Dropout

RoBERTA 指出 BERT 一系列模型都是” 欠拟合” 的,所以干脆直接关掉 dropout.
那么在 ALBERT 中

  • 也是去掉 Dropout 层,可以显著减少临时变量对内存的占用。
  • 同时论文发现,Dropout 会损害大型 Transformer-based 模型的性能。作者的解释是可能模型太大、模型很难收敛,还没达到需要减少过拟合的时候,作者说这个还有待研究。image

n-gram MASK

BERT的MLM目标是随机MASK15%的词来预测,ALBERT预测的是N-gram片段,包含更完整的语义信息。每个片段的长度取值n(论文里取最大为3)。根据公式
image
取1-gram、2-gram、3-gram的概率分别为6/11,3/11,2/11。越长概率越小。

实验结果

效果就是各种屠榜吧。
image
值得注意的是,大家都说ALBERT的性能比BERT要好,实质上,ALBERT-large版本的性能是比BERT-large版本的性能差的大家所说的性能好的ALBERT版本,是xlarge和xxlarge版本,而这两者模型,虽然都比BERT-large参数量少,但由于模型规模变大了,所以训练时间是变慢了,推断速度也变慢了!所以ALBERT也不是如名字说的,属于轻量级模型,具体的要看你使用的是哪个版本。

优缺点

  • 缺点
    在初闻ALBERT时,以为其减少了总的运算量,但实际上是通过参数共享的方式降低了内存,预测阶段还是需要和BERT一样的时间,如果采用了xxlarge版本的ALBERT,那实际上预测速度会更慢。

  • 优点
    ALBERT解决的是训练时候的速度提升,如果要真的做到总体运算量的减少,的确是一个复杂且艰巨的任务,毕竟鱼与熊掌不可兼得。不过话说回来,ALBERT也更加适合采用feature base或者模型蒸馏等方式来提升最终效果。

参考

https://blog.csdn.net/qq_33998728/article/details/105991491?spm=1001.2014.3001.5502

https://paddlepedia.readthedocs.io/en/latest/tutorials/pretrain_model/ALBERT.html

https://zhuanlan.zhihu.com/p/351504576

posted on 2022-06-22 18:27  朴素贝叶斯  阅读(555)  评论(0编辑  收藏  举报

导航