论文泛读笔记——ALBERT

一、简介

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

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

  2. 对Embedding进行因式分解;

  3. 跨层的参数共享。

二、ALBERT的改进

1. SOP任务

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

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

2. Embedding因式分解

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

init
forward
论文泛读笔记——ALBERT_第1张图片
论文实验结果

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

3. 跨层的参数共享

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

论文泛读笔记——ALBERT_第2张图片

4. dropout的移除

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

论文泛读笔记——ALBERT_第3张图片
掩码任务
下游任务

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


三、ALBERT的实验结果

论文泛读笔记——ALBERT_第4张图片
GLUE benchmark
论文泛读笔记——ALBERT_第5张图片
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

你可能感兴趣的:(论文泛读笔记——ALBERT)