• 【论文阅读】Q-BERT: Hessian Based Ultra Low Precision Quantization of BERT



    1. 论文信息

    作者:Sheng Shen, Zhen Dong, Jiayu Ye, Linjian Ma, Zhewei Yao, Amir Gholami, Michael W. Mahoney, Kurt Keutzer
    发表单位:University of California at Berkeley 加州大学伯克利分校
    会议:AAAI 2020
    发表时间:2019.9.25

    2. 研究背景

    • 基于BERT的模型,需要占用大量的内存,延时很高,难以部署,所以需要对其进行量化;
    • 不同encoder的层关注不同的特征结构,对量化的敏感度不一样,所以对其进行混合精度量化很有必要;

    该论文对基于 BERT 的模型执行超低精度量化,旨在最小化性能下降幅度,同时保持硬件效率。

    3. 方法

    微调后的 BERT_BASE 模型包含三部分:
    嵌入层 91MB、编码器325MB、输出层 0.01MB

    由于输出层的规模极小,该研究并未对这部分执行量化。因此,本文研究用不同方式对嵌入和编码器参数执行量化。


    3.1 基于 Hessian 信息的混合精度量化

    前作:HAWQ: Hessian AWare Quantization of Neural Networks with Mixed-Precision

    混合精度主要针对weight参数,本文activation的bit位宽统一设置为8bit,

    确定每层的bit-width:

    • 首先,计算每层参数hessian矩阵的最大特征值,流程如下:
      在这里插入图片描述

    • 其次,输入一些训练数据,统计输入不同数据训练时的最大特征值的均值。另外,针对NLP任务需要加入方差完善统计信息。

    特征值越大说明对量化越敏感,需要分配越高的bit-width,特征值越小说明对量化越不敏感,扰动对应的loss lanscape越平滑,分配更少的bit-width即可。
    对于NLP任务不同输入数据的最大特征值的方差很大,仅依靠均值并不好,所以加入了方差来进一步完善统计信息,利用了10%的训练数据来进行统计。

    • 最后,计算量化敏感度指标,公式如下,并根据统计信息分配bit-width。
      在这里插入图片描述

    3.2 组量化(gourp-ise quantization)

    假设输入序列中有 n 个词,每个词有一个 d 维嵌入向量(BERT_BASE 中 d = 768)。在 Transformer 编码器中,每一个自注意力头(self-attention)具备 4 个密集矩阵,每个自注意力头按一下公式计算加权和:
    在这里插入图片描述
    直接使用相同的量化策略来量化不同Head中这四个矩阵,精度会下降很多!

    组量化机制:
    将多头自注意力(MHSA)的密集矩阵中每个head矩阵W看作一个组。例如,12个head一共有 12 组。在每个组中,将多个顺序输出weight看作一个子组,每个子组具备自己的量化范围。

    本文采取每 d / ( 2 ∗ N h ) d/(2*N_h) d/(2Nh)个连续一组,其中d是embedding长度, N h N_h Nh是head个数。
    在这里插入图片描述


    4. 实验

    实验一:压缩效果和精度损失

    对比模型:

    • Baseline:未量化的BERT模型
    • Q-BERT(只采用了组量化)
    • Q-BERT_MP(采用了混合精度和组量化)
    • DirectQ:直接量化的BERT模型(不使用本文方法)

    除了baseline模型之外的所有模型都是用8位激活,直接量化的Q-BERT未使用混合精度或组量化。

    在这里插入图片描述
    注释:

    • w-bits:权重量化
    • e-bits:嵌入量化
    • size-w/o-e:以MB为单位非嵌入层的模型大小

    总结:Q-BERT 达到了 13 倍的权重压缩率,模型大小仅位原来的1/8,且准确率损失在 2.3% 以内。

    • Q-BERT比DirectQ方法表现得要好得多。在超低位下,这种差别变得更加明显。
      • 例如,权重量化设置为4 bit 时,SQuAD的直接量化(DirectQ)相比BERTBASE性能下降11.5%。然而,对于同样的Q-BERT性能下降仅为0.5%。
        在这里插入图片描述
      • 此外,在权重量化为3 bit设置下,Q-BERT和DirectQ之间的差距进一步扩大,在各种任务中,Q-BERT和DirectQ之间的差距达到9.68-27.83%。

    实验二:组量化影响

    Q-BERT组量化对三种任务的影响。所有任务的权重量化位设为4,嵌入量化位设为8,激活量化位设为8。
    增加组的数量,查看对模型精度的影响:
    在这里插入图片描述

    结果:

    • 无组量化:准确度下降大约7%到11.5%。
    • 增加组的数量时,性能会显著提高,性能增益在128组左右几乎饱和。
      • 例如,对于12组,所有任务的性能下降小于2%。
      • 将组数从12增加到128,准确度将进一步提高至少0.3%的准确度。
      • 然而,将组数从128进一步增加到768只能在0.1%内提高性能。说明性能增益在128组左右几乎饱和。

    启示:最好不要设置太大的组数

    因为这样会增加每个矩阵乘法所需的查找表(lut)的数量。这可能会对硬件性能产生不利影响,根据我们的结果,精确度方面的回报正在减少。这也是为什么本文其他实验都采用128组量化。

    实验三:分析不同模块量化敏感度

    在这里插入图片描述
    如上图所示:

    • 嵌入层对量化比权重更敏感。 例如,使用4位逐层量化嵌入层,导致SST-2、MNLI、CoNLL-03的性能下降高达10%,SQuAD甚至超过20%。相反,编码层消耗约79%的总参数(4×嵌入参数大小),嵌入层参数占少数,因此表1中将其量化为4位时,性能损失较小。
    • 位置嵌入对量化比单词嵌入更敏感。 例如,量化位置嵌入到4位会比量化单词嵌入导致2%的性能下降。即使位置嵌入只占整个嵌入的不到5%,这表明位置信息在自然语言理解任务中的重要性。考虑到位置嵌入只占模型尺寸的一小部分,因此可以对嵌入层进行混合精度量化,以可容忍的精度下降进一步压缩模型,如下图所示:

    注:4/8表示 4bit单词嵌入和8bit位置嵌入。
    在性能下降约0.5%的情况下,嵌入表大小可以减少到11.6MB。
    在这里插入图片描述
    在这里插入图片描述

    • 自我注意层对量化的鲁棒性比全连接网络更强。 例如,1/2MP自我注意会导致性能下降约5%,而1/2MP全连接会使性能下降11%。

    实验四:定性分析

    使用注意力信息进行定性分析Q-BERT与DirectQ差异:
    计算了量化的BERT和全精度BERT对相同输入的注意力信息的分布之间的Kullback-Leibler (KL)散度。

    KL分布是用来衡量2个数据分布的距离的, KL散度越小,说明两种模型的多头注意力输出越接近。

    在这里插入图片描述
    如上图所示:Q-BERT与Baseline的距离远小于DirectQ与Baseline的距离

    5. 总结

    • 研究者对二阶信息(即 Hessian 信息)进行大量逐层分析,进而对 BERT 执行混合精度量化。研究发现,与计算机视觉领域中的神经网络相比,BERT 的 Hessian 行为存在极大的不同。 因此,该研究提出一种基于 top 特征值均值和方差的敏感度度量指标,以实现更好的混合精度量化。
    • 研究者提出新的量化机制——组量化(group-wise quantization),该方法能够缓解准确率下降问题,同时不会导致硬件复杂度显著上升。具体而言,组量化机制将每个矩阵分割为不同的组,每个组拥有独立的量化范围和查找表。
    • 研究者调查了 BERT 量化中的瓶颈,即不同因素如何影响 NLP 性能和模型压缩率之间的权衡,这些因素包括量化机制,以及嵌入、自注意力和全连接层等模块。

    这个内容可以查看实验三部分,嵌入层与权重及自注意力层与全连接层的量化敏感度。

    6. REFERENCE

    HAWQ团队的工作都可以多看看,好像都有开源出来!

    参考资料:

    • https://zhuanlan.zhihu.com/p/440401538
    • https://developer.aliyun.com/article/819840
  • 相关阅读:
    SpringSecurity - 启动流程分析(六)
    算法通关村第十七关:白银挑战-贪心高频问题
    动态内存&柔性数组
    Container容器
    睿趣科技:抖音店铺怎么取名受欢迎
    OpenCV-Java 开发简介
    golang设计模式——访问者模式
    算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
    金九银十拿下字节,阿里等3家offer,全靠P9架构师整理的这份1658页Java面试核心讲(进阶版)
    springcloud3 分布式事务解决方案seata之TCC模式6
  • 原文地址:https://blog.csdn.net/qq_43800119/article/details/126011477