APP下载

基于BERT预训练模型压缩技术分析

2020-09-16李进

科学与信息化 2020年14期

李进

摘要:基于语言模型的预训练已经在很多自然语言处理任务中取得了显著的性能,然而由于起巨大的模型容量和复杂的计算,往往需要消耗大量的存储资源,在资源受限的设备上难以发挥其性能优势,本文对当前被广泛应用的BERT压缩技术从效率,性能以及压缩强度等多个角度进行了分析。

关键词:预训练;模型压缩;BERT

1预训练模型BERT

预训练模型BERT采用Transformer模型中提出的编码层结构,应用了多层堆叠编码层,每个编码层由自注意力子层及前馈神经网络子层组成,并在每个子层后应用了残差连接和层正则化操作,以多任务学习作为训练目标。任务一是掩码预言模型,即随机掩盖语句子中15%的词,并通过模型对掩盖掉的词进行预测,值得注意的是,在BERT中并不是将所选择15%的词全部使用MASK标签进行掩盖,而是将其划分为三份,其中80%用MASK标签掩盖,10%不做任何操作,10%随机替换为其他词。任务二是预测两个句子之间的关系,即句子B是否为句子A的下文,以此来捕捉句子之间的关系,BERT模型因为其强大的性能和泛化能力在多项NLP任务中取得了最佳性能,但是由于其庞大的模型容量以及对存储的巨大消耗,也衍生了很多针对BERT的压缩技术。

2基于知识精炼技术的BERT压缩

知识精炼技术是一种常用的模型压缩手段,其主要的方式主要使子模型去学习教师模型的预测结果,从教师模型预测得到的更软的分布中去学习教师模型中的知识,从而使子模型能够达到模拟教师模型行为的目的。在BERT模型中同样也可以应用类似的技术进行模型的压缩。在DistilBERT压缩中,其压缩对象是减少模型的神经网络层数,构建层数更少的子模型,通过使用知识精炼手段,使子模型学习教师模型的输出层的预测。同时设计了余弦相似度损失,来对其子模型和教师模型的隐藏层状态,即如果将12层的教师模型压缩为3层,则另子模型的第1,2,3层分别的输出分别使用余弦相似度来计算,其与教师模型第4,8,12层之间的差异。最终子模型的损失函数包括三项,分别是,BERT模型训练目标的损失,知识精炼的损失,以及余弦相似度计算得到的损失项。同时在构建子模型初始化时,放弃了随即初始化的手段,通过从教师模型中抽取子模型规模大小的神经网络层数来构建子模型,成功地将模型容量压缩了40%,并维持了97%的性能,同时实现了60%的加速。

3Tiny-BERT压缩技术”

Tiny-BERT压缩技术同样是基于知识精炼技术对BERT模型进行压缩,相比于普通的知識精炼技术只在模型的输出层进行约束,Tiny-BERT压缩针对构成BERT模型的每一层的不同输出位置都进行了约束。如果以学习类比,DistilBERT便是直接学习了正确答案和部分的中间过程,而Tiny-BERT则是对中间过程进行了更详细的拆分,进行更细致的学习。在预训练阶段,Tiny-BERT讲教师模型中的层分为不同的神经网络层组,将对应组的知识精炼于子模型的一层之上,完成多层对一层的映射。例如,将12NBERT模型压缩为4层,则将教师模型划分为3组,令子模型中对应的层学习教师模型每组中最后一层的行为。同时针对每层网络中不同位置的输出设计了不同的知识迁移方式,例如对于层输出和自注意力机制得到的注意力分布,设计了均方误差损失,来衡量子网络和教师网络之间的差异。对于子模型和教师模型的输入层,同样应用了均方误差损失,对输出层,采用了与DistilBERT同样的方式,将各个位置上的损失累加于损失函数之上作为正则化项,使子模型充分学习到教师模型的表现行为。与DistilBERT中复用了教师模型中的参数不同,Tiny-BERT压缩中子模型的参数采用随机初始化的方式,因此可以选择更小的隐藏层维度,同时在层的维度和隐藏层的维度对教师模型进行压缩,压缩比率更大。此外对于下游任务的微调过程,Tiny-BERT压缩采用了两阶段学习框架,即在对特定的任务进行微调时,同样使用与预训练阶段同样的知识精炼方式,以便于子模型能够充分捕捉到教师模型中的普遍的域内知识和特定任务相关的知识。最终实现了只使用133%的参数量,便达到了教师模型97%的性能表现。

4对比分析

目前阶段,针对BERT模型的压缩主要分为两个方面,即对模型层数的压缩和模型的隐藏维度的压缩。常用的压缩手段则包括模型的量化,剪枝和知识精炼。其中知识精炼因为其性能优异,操作简单成为了主要的研究方向。相比于传统知识精炼对输出层的约束,对于BERT模型这种复杂网络结构,只对模型的输出层进行约束并不能使子模型充分学习到教师模型的性能。因此往往需要设计额外的损失函数来进行约束。但是额外的损失计算也带来了额外的计算量,往往需要计算计算更多的中间信息的约束状态。因此在实际应用过程中,可以根据计算成本合理的选择额外的损失数量,不同的衡量向量之间差异的指标。此外,如果不考虑维度的压缩,可以考虑复用教师模型的参数来构建子模型。如果需要缩减隐藏层的维度,则需要重新初始化指定维度的模型,或利用一些特殊的手段从教师模型中得到对应维度的参数。