• 【论文阅读】Q8BERT: Quantized 8Bit BERT


    1. 研究背景及动机

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

    2. 解决思路(模型或算法)

    2.1 Symmetric linear quantization (对称线性量化)

    量化公式:
    在这里插入图片描述

    其中:

    • S x S^x Sx代表量化比例因子,其在推断过程中动态确定。根据训练期间的统计数据计算,或在训练后根据某些校准数据集的统计数据计算。
    • M M M代表量化为b位时的最大量化值, M = 2 b − 1 – 1 M = 2^{b-1} – 1 M=2b11。比如量化为8位,b=8,则 M=127,将输入数据映射到[-128,127]的范围内。
      在这里插入图片描述

    2.2 Quantization-Aware training (训练中引入量化)

    Quantization-Aware training (训练中引入量化)还被称为量化感知训练,即在训练的过程中引入fake quantized(伪量化)来模拟浮点数舍入效果。

    • 在前向传播时,采用伪量化后的权重和激活向量(float32);
    • 在反向传播时,仍对float类型的权重做梯度更新。

    注:在训练时伪量化算子会根据观察到的信息进行量化模拟, 即模拟计算过程中数值截断后精度降低的情形,先做一遍数值转换,再将转换后的值还原成原类型。

    本文还介绍了另一种常用的量化方法:训练后的量化(Post training quantizated),即将训练后的模型中的权重由float32量化到int8保存,但是在推理时需反量化为float类型进行计算。该方法虽然在抗噪能力很强的大模型效果表现很好,但是在小模型上效果就很差。

    2.3 实现

    对BERT模型的所有全连接层和嵌入层的权值量化为int8,但是对于Softmax, Layer Normalization, GELU 等精度要求较高的仍为float32。
    训练阶段:

    • 首先嵌入层返回一个fake quantized(伪量化)
      embedding向量;
    • 然后量化的全连接层执行fake quantized inputs和fake
      quantized weights的矩阵乘法;
    • 紧接着将结果与偏差值相加,偏差值会在随后被量化成32位int型整数。

    推理阶段:

    • 量化后的嵌入层返回一个int8向量;
    • 然后量化后的全连接层执行int8通用矩阵乘法再加到int32的偏差值上。
      另外,虽然偏差值量化为32位,但是由于偏差值数量比较少,所以对于模型的压缩效果不会影响很大。

    3. 实验过程和结果

    3.1 不同方法量化BERT结果

    在这里插入图片描述

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

    3.2 引入量化后准确率的相对损失

    在这里插入图片描述

    根据上表观察到QAT方法对精度损失更小,除RTE以外都不到1%。

    4. 结论

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

    5. 参考资料

  • 相关阅读:
    线程(Thread)基本用法
    大数据架构演变
    C语言真题卷(1)
    Python全栈开发【基础-10】流程控制之for循环
    极米十年巅峰之作极米Z7X,能带走的百吋大屏
    概率论中的filtration中文叫什么?
    2022年2022年9月5日中软国际Linux-C开发一面
    【java_wxid项目】【第六章】【Spring Cloud Gateway集成】
    【图像识别-指纹识别】指纹特征提取附matlab代码
    OLED屏简介
  • 原文地址:https://blog.csdn.net/qq_43800119/article/details/125186911