美文网首页
BERT泛读系列(五)—— ALBERT

BERT泛读系列(五)—— ALBERT

作者: DataArk | 来源:发表于2019-11-16 19:47 被阅读0次

一、简介

随着Transfomer结构的普及,一时间大语料、大参数量的预训练模型成为主流。当在实际部署BERT等模型时,往往需要使用蒸馏、压缩或其他优化技术对模型进行处理。ALBERT模型也是基于这一点考虑,通过各种手段减少参数量,得到一个占用较小的模型,对实际落地有较大的意义,不过由于其主要还是减少参数量,所以在推断时间上并没有优化,所有对量大的需求还是很有问题的。总体来说,ALBERT有意义的创新主要有:

  1. 修正了句子预测这一一直被诟病的预训练任务,改为了预测句子之间的连贯性;

  2. 对Embedding进行因式分解;

  3. 跨层的参数共享。

二、ALBERT的改进

1. SOP任务

BERT在提出的时候提供了两种预训练任务,一个是遮蔽语言模型,即以一定比例随机遮蔽一定比例的输入标记,然后预测那些被遮蔽的标记的预训练任务(PS:ALBERT也不是直接做这个任务,而是换成N-gram的预测任务),另一个则是预测第二个句子是不是第一个句子的下一句。但在随后的实践中,第二个任务被证明并没有给模型带来受益,主要由于这个任务过于简单。于是,在ALBERT中这个任务被换成了预测句子间的顺序,增加模型学会这种任务的能力:

从实验上看,有所提升,但个人感觉这个预训练任务还是有待改进。

2. Embedding因式分解

这一步操作其实就是没啥特别好说的,无外乎就是觉得词嵌入时的向量维度应该小一点,然后通过个网络扩充一下提升维度,这样一通操作就可以把参数量从O(V×H))降到了O(V×E+E×H)(有点像深度可分离卷积的做法):

init forward 论文实验结果

从实验上看,使用这种方法降低了词向量维度,但没有损失太多的精度(相对来说吧),使用权值共享的策略时增加词向量不升反降(感觉有点神奇)。

3. 跨层的参数共享

共享权值不是什么新鲜的事情,之前一般采用只共享全连接层或只共享attention层,ALBERT则更直接全部共享,不过从实验结果看,全部共享的代价是可以接受的,同时共享权值带来了一定的训练难度,使得模型更鲁棒:

4. dropout的移除

在ALBERT的实验中作者提到对掩码任务和下游任务取消dropout都带来了提升,这一点无疑非常值得去思考:

掩码任务 下游任务

同时,作者也提到100w步之后,ALBERT依旧没有过拟合的迹象。

三、ALBERT的实验结果

GLUE benchmark SQuAD and RACE benchmarks

简单一句话来说,就是小但强。仅从ALBERT本身来说其实是蛮让人失望的,因为并没有带来很多有营养的创新,同时由于其的小更多是共享权值带来的,这也就导致它并没有减少推断时的时间。但另一方面来说,ALBERT减少了占用,本身就给大规模部署带来优势,如果再结合上蒸馏等技术,占用小、速度快、精度高的Bert仿佛就在眼前。

参考

  1. 「NLP」ALBERT:更轻更快的NLP预训练模型
  2. 一文揭开ALBERT的神秘面纱
  3. albert_pytorch
  4. ALBERT 论文:ALBERT: A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS

相关文章

网友评论

      本文标题:BERT泛读系列(五)—— ALBERT

      本文链接:https://www.haomeiwen.com/subject/neyeictx.html