基于语言模型的预训练Transformer在许多NLP任务上有明显提升,但是当前Transformer模型追求大模型及高精度,需要大量的计算、内存资源。因此,需要压缩模型以节约成本再部署在生产环境。
本文的工作展示如何在BERT微调阶段引入量化训练,将BERT压缩4倍且精度损失最小。
量化公式:

其中:

Quantization-Aware training (训练中引入量化)还被称为量化感知训练,即在训练的过程中引入fake quantized(伪量化)来模拟浮点数舍入效果。
注:在训练时伪量化算子会根据观察到的信息进行量化模拟, 即模拟计算过程中数值截断后精度降低的情形,先做一遍数值转换,再将转换后的值还原成原类型。
本文还介绍了另一种常用的量化方法:训练后的量化(Post training quantizated),即将训练后的模型中的权重由float32量化到int8保存,但是在推理时需反量化为float类型进行计算。该方法虽然在抗噪能力很强的大模型效果表现很好,但是在小模型上效果就很差。
对BERT模型的所有全连接层和嵌入层的权值量化为int8,但是对于Softmax, Layer Normalization, GELU 等精度要求较高的仍为float32。
训练阶段:
推理阶段:

对比:原BERT、DQ BERT(使用训练后量化的方法)
结果:DQ(动态量化)的效果明显比QAT(本文方法)更差,相比于baseline BERT模型,使用QAT压缩后的BERT模型有的准确率差别不大。
Dynamic Quantization是一种训练后的量化(post training quantizated),权重向量和激活向量采用和QAT相同的量化方法,唯一不同的就是激活向量的量化因子计算公式与权重向量的量化因子计算公式相同。

根据上表观察到QAT方法对精度损失更小,除RTE以外都不到1%。
本文在BERT模型上使用对称线性量化和QAT量化方法,达到了压缩4倍但精度损失最小的效果。最后把QAT和DQ方法做了对比,但是对于DQ处理简单粗暴,只是将一个训练好的BERT模型的全连接层和嵌入层进行了简单的8位量化。