作者丨郭聪 邱宇贤 冷静文 高孝天
张宸 刘云新 杨凡 朱禺皓 过敏意
神经网络模型量化是提高神经网络计算效率的一个有效方法,它通过将模型参数转换成内存开销更小的低精度数据格式来减少计算与内存开销。经典的神经网络量化方法通常需要经过一个精调的训练过程,以保证量化后的模型精度。然而,出于数据和隐私安全的考虑,许多应用场景无法获得精调所需训练数据,因此无数据(data-free)场景下的量化算法成为当下研究热点之一。现有的无数据量化方案通常需要生成伪数据,然后利用伪数据进行训练后量化(Post-train Quantization, PTQ)和量化感知训练(Quantization-aware training, QAT)。这两种方法本质上都依赖了生成数据,需要大量的训练时间和成本去生成数据、训练网络。
近日,来自上海交通大学以及微软亚洲研究院的研究者提出了一种无需数据的即时神经网络模型量化框架SQuant。该框架无需额外的训练数据,也不需要生成数据。不需要训练,甚至不需要了解模型架构,能够在毫秒级快速量化网络的同时,保证神经网络的高识别精度。对比现有的无数据量化方法,实现了更高的精度并使量化过程加速数万倍,甚至可以在推理设备上部署。该工作已被ICLR 2022会议接收,代码已经开源。
论文地址:https://openreview.net/forum?id=JXhROKNZzOc
代码地址:https://github.com/clevercool/SQuant
1 量化方案
模型量化需要保持模型的识别精度,最小化原始模型与量化模型之间的精度损失。本文利用模型梯度的海森矩阵来表示每一层的的精度损失。这样的方法能够分层地刻画量化模型的精度损失。如果将量化参数矩阵与原始参数矩阵的差值表示为
,则通过泰勒展开,精度损失可以表示为:
其中,
为网络误差函数
对
的梯度,对的完整网络海森矩阵。因为训练良好的模型已经近乎收敛,因而可忽略。因为的计算具有很高的内存和计算开销,因此对进行近似计算。如果假设神经网络的网络层之间、单层网络的输出通道之间都是独立的, 神经网络层上输出通道为
的海森矩阵
可以进一步被优化为
其中,
与
分别为神经网络层上输入与输出向量,
可以近似为对角矩阵。因而,基于海森矩阵的模型优化方案将会通过优化以下目标来计算神经网络第层上输出通道为的量化参数与原始参数差值:
基于该优化式进一步对进行近似,是一个对称方阵,是卷积神经网络权重参数对应的输入激活的展开外积形式。假设卷积权重具有M个输出通道,N和输入通道,K个卷积核心元素,则向量
的长度是
,每个即为一个输入通道的激活,需要对M个权重参数的输出通道同时优化。则
是一个对称方阵大小为
,求多个输入激活样本的期望即为,称之为激活方阵。
如图1,本文将激活方阵拆分成三个子矩阵H-E, H-K, H-C和的形式。在此基础上,本文使用三种与之对应的优化过程,它们分别为元素层次优化EQ (element-wise quantization)、卷积核层次优化KQ (kernel-wise quantization)与输出通道层次优化CQ (channel-wise quantization)。这三个优化过程覆盖了参数激活方阵的对角元素的精确的优化过程与非对角元素近似的优化过程。
图1 EQ, KQ, CQ所优化的H-E, H-K, H-C矩阵示例
如图1所示,
,其中,
,
。
与
表示大小为
与
的全一方阵。
均为常系数。
因此,量化后模型的精度损失可以近似为:
可以继续近似将常系数省略,即可得到无数据量化目标,模型量化过程最小化下述优化目标:
至此,我们可以将每一层权重的优化方案分解为,三个部分的优化分别通过元素层次优化EQ、卷积核层次优化KQ与输出通道层次优化CQ完成。
2 算法实现
基于上述思想,下文详细介绍本文的实施细节。
一、三阶段的渐进式优化方法。
第一项EQ的优化目标为,
就是对每一个权重元素进行量化,使得绝对量化误差小于0.5。该优化目标就是原始的四舍五入的优化方法。
第二项KQ的优化目标为,
其中,
被特称为误差和(SE, sum of error),
为绝对误差和(ASE, absolute sum of error)。其中每一项
都是有符号数,这意味在每一个卷积核内,需要最小化所有的元素误差和的绝对值。例如,一个卷积核有9个元素,需要将这9各元素的误差(有符号)累加,使用优化方法,减少该累加和的绝对值(ASE)。
类似地,第三项CQ的优化目标为,
很显然,当满足EQ时,元素的绝对误差小于0.5,即
时,EQ将有唯一解,且不能进行后续KQ和CQ的优化。因此,需要将EQ的约束放松,使得
,类似的,为满足CQ的优化需要,需要将KQ的约束放松为
。
这三个层次的优化是一种按顺序的递进关系,从图1中可以看出,先从最小的元素粒度求出一个局部最优解,继而通过更大范围的激活方阵获得更多的信息不断地调整最优解的空间,最终对于每一个输出通道层次可以取得最优的优化方案,是最终的优化方案。
二、量化后整型数值翻转算法
在模型量化的过程中,神经网络模型中的参数使用了更低精度的整型数值表示。首先通过缩放因子将原始浮点型数值等效放缩到整型的数据表示范围,然后将模型参数的数值使用四舍五入的方法量化,将神经网络中的参数
四舍五入到最接近的整型数值,量化后的参数使用
表示。如图2所示,基于四舍五入的模型量化方法的示例。首先,通过放缩使用低精度的整数型数值表示浮点数数值,图1中表示了一个量化区间[0,1]。若一个模型元素
,四舍五入将会使得
,其中量化误差
。若
,类似的,该方法将会使用
来表示该模型参数,其量化误差为量化误差
。这种方法就是原始的元素量化方法EQ。
图2 基于舍入的模型量化方法
为了满足对KQ和CQ的优化目标,需要减小KQ的绝对误差和,本文设计了一种基于量化整型数值翻转的方法进行优化。
在最小化绝对误差和的过程中,本文采用了基于约束放松的量化整型数值翻转算法,每次优化过程中,翻转算法将会特定的数值进行修改,将该量化参数的数值进行在区间内调整。翻转的定义为,对于尾数小于0.5(量化误差为负)的数值向上取整,对尾数大于等于0.5(量化误差为正)的数值向下取整。所以,翻转方法即为四舍五入方法的反方向舍入。例如图2中,0.4翻转为整数1的误差由-0.4变为0.6;0.7翻转为整数0的误差由0.3变为-0.7。这种方法可以改变量化后元素的取值,进而可以对KQ和CQ进行优化。更多的算法细节,请参考原论文。
3 实验结果
一、精度对比
SQuant方法,在多种模型上超过了现有的无数据量化方法,包括PTQ方法:DFQ,ZeroQ,DSQ方法,以及QAT方法:GDFQ。可以看出,在SQuant在所有精度下都超越了原有的方法,特别是在4-bit的情况下,在所有模型下大幅超过同类型的PTQ方法(ZeroQ,DSQ)30%的精度。而对于GDFQ在ResNet50 4-bit量化上,也有15%的精度提升。显示出了SQuant的优越性。
二、速度对比
速度是SQuant的最大的优势,如表3所示,在同样环境配置的情况下,SQuant的4-bit的量化速度是ZeroQ (PTQ)方法的数百倍,并且有30%精度的提升。而对于GDFQ (QAT)量化的加速比更是达到了数万倍。
SQuant在取得更好的精度的情况下平均量化每一层的时间仅为3毫秒!值得注意的是,SQuant每一层优化是独立的,所以可以利用并行计算进一步加速SQuant的量化过程。更重要的是,由于算法不涉及复杂的重训练过程,SQuant算法甚至可以直接部署在仅推理的硬件中,开辟了更多的应用和优化空间。
,