论文地址:https://arxiv.org/pdf/1810.05723.pdf
主要内容
神经网络的量化造成的精度损失可以通过训练来补偿,但需要完整的数据集信息(大都涉及隐私等),而且训练很耗时,故此一些统称为训练后量化的方法被提出,这些方法只需要量化权重和激活值,不需要重新训练。但是,低于8bit的量化会导致显著的精度下降,因此作者研究了CNN训练后的4bit量化。
作者提出了三种训练后量化的方法:ACIQ、Per-channel bit allocation、Bias-correction。
Analytical Clipping for Integer Quantization (ACIQ)
该方法用于激活值的量化。
假设X是高精度的随机变量,f(x)是其概率密度函数,
E
(
x
)
=
0
E(x)=0
E(x)=0(不失一般性,因为可以随时添加或减去该均值),总位宽为M,要将值量化为
2
M
2^M
2M个离散值。
首先,定义一个剪裁函数
c
l
i
p
(
x
,
α
)
,
x
∈
R
clip(x,\alpha), x \in R
clip(x,α),x∈R:
范围为
[
−
α
,
α
]
[-\alpha,\alpha]
[−α,α]。将其等分为
2
M
2^M
2M个量化区域,相邻的量化步长为:
假设每个量化值都位于量化区域中点,则可得到X与量化后的值Q(X)的均方误差:
其中,第一项和第三项是剪裁函数clip预期的均方误差(对于关于0对称的分布来说二者相等),称为剪裁噪声;第二项则是将
[
−
α
,
α
]
[-\alpha,\alpha]
[−α,α]量化为
2
M
2^M
2M个量化区域的均方误差,称为量化噪声。
作者通过构造分段函数来近似密度函数f(x),并且证明了量化噪声和剪裁噪声满足如下关系式(剪裁噪声是在Laplace(0,b)的条件下):
所以有:
为找到最优的
α
\alpha
α,令其导数为零:
M = 2,3,4时,可求得
α
∗
=
2.83
b
,
3.89
b
,
5.03
b
\alpha^*=2.83b,3.89b,5.03b
α∗=2.83b,3.89b,5.03b;实践中,可以估算b=E(|X-E(X)|)。
Per-channel bit-allocation
该方法可用于量化权重和激活值。主要思想为总体的位宽一定,为每个通道分配适当的位宽,使得总体的量化噪声的均方误差最小。
给定n个通道,假设通道i的取值范围为
[
−
α
,
α
]
[-\alpha,\alpha]
[−α,α],根据公式(5)的量化噪声,引入拉格朗日乘子
λ
\lambda
λ:
令对
M
i
M_i
Mi和
λ
\lambda
λ的导数分别为0:
然后作者证明了下列规则:
两边取对数:
Bias-Correction
该方法用于量化权重。主要思想为通过一种简单的方法补偿权重量化前后的均值和方差的偏差。
作者观察到权重量化后其均值和方差存在固有偏差,即
通道c的校正常数为:
然后就可以用于更新权重:
其他
作者还将三种方法结合并进行实验验证,实验结果如下:
总结
根据作者的说法,对于4bit的量化,该论文的方法精度只下降几个百分点,因此可以不必重新训练。