论文(ICCV 2021):https://openaccess.thecvf.com/content/ICCV2021/papers/Han_Improving_Low-Precision_Network_Quantization_via_Bin_Regularization_ICCV_2021_paper.pdf
暂无源码
BR 概要
- 1 Motivation
- 2 Methodology
- 3 Experiments
- 个人思考
1 Motivation
- 当进行较低比特量化时,PTQ 方法往往会带来显著的性能下降。
- 以前的 QAT 方法试图最小化量化误差,或模拟全精度网络的 Activation 分布。然而,这些方法的最终性能仍然不令人满意。
Motivation 似乎不是那么至关重要,没有对 Motivation 做进一步分析和展开。作者提出了一种新的正则化算法来改进低精度网络量化,假设如果每个Quantization Bin 中的所有浮点值都足够接近目标量化电平值,则量化误差将接近零。当将全精度网络量化为 n n n-bit 网络时,每个卷积层的所有浮点元素将被离散化。Fig 1 (a) 展示了 Bin Regularization 的基本思想。
Bin Regularization 可以被视为一种细粒度约束,以鼓励 Quantization Bin 内的分布尽可能接近 Dirac delta Distribution(单位脉冲函数)。
如 Fig 1 (b) 所示,不同的正则化方法对 LSQ 的性能产生不同的影响。作者提出的方法能达到更高的性能。
2 Methodology
2.1 Quantization Baseline
作者将 LSQ 算法作为自己实验的 Baseline。设要量化的数据为 v v v, LSQ 的量化过程可以定义为:
同时反量化的结果可以由整型值
v
~
\tilde{v}
v~ 和量化步长
s
s
s 乘积得来:
其中
c
l
i
p
(
x
;
n
,
p
)
=
m
i
n
(
m
a
x
(
x
,
n
)
,
p
)
clip(x; n, p)=min(max(x, n), p)
clip(x;n,p)=min(max(x,n),p),将所有超出表征范围的值钳制住。
⌊
⋅
⌉
\lfloor \cdot \rceil
⌊⋅⌉ 是四舍五入函数。设要量化到
b
b
b-bits,如果要量化的数据是 Weight,则为有符号量化,
n
=
−
2
b
−
1
n=-2^{b-1}
n=−2b−1,
p
=
2
b
−
1
−
1
p=2^{b-1}-1
p=2b−1−1;如果要量化的数据是 Activation,则为无符号量化,
n
=
0
n=0
n=0,
p
=
2
b
−
1
p=2^{b}-1
p=2b−1。量化步长
s
s
s 初始化为
2
⟨
∣
v
∣
⟩
p
\frac{2\langle|v|\rangle}{\sqrt{p}}
p2⟨∣v∣⟩,
⟨
v
⟩
\langle v \rangle
⟨v⟩ 计算初始
v
v
v 的均值。
在反向传播阶段,由于
⌊
⋅
⌉
\lfloor \cdot \rceil
⌊⋅⌉ 是不可导函数,这里使用直通估计器来设定梯度:
为了快速收敛,
s
s
s 会与
g
g
g 相乘,
g
=
1
N
⋅
p
g=\frac{1}{\sqrt{N \cdot p}}
g=N⋅p1 ,以放缓
s
s
s 的梯度更新步伐,
N
N
N 为 Weight 的个数或 Activation 的个数。
2.2 Bin Regularization
在量化时,原数据会按照区间划分为 2 b 2^{b} 2b 组 Quantization Bins,每个 Bin 内的数据会被量化为一个对应的离散值。如果每个 Bin 内的全精度的原值刚好就是那个对应得离散值的话,量化误差就可以为0。从数据分布来看,作者假设,一个好的量化器会激励每个 Quantization Bin 内的值分布尽量成为一个高斯分布,而这个高斯分布的 Mean 会逼近对应的离散值、 Variance 会逼近 0——分布会逼近单位脉冲函数。
为了达到上述效果,作者设定了两个约束:
- 激励每个 Bin 内的数据的平均值逼近对应的离散值。
- 激励每个 Bin 内的数据的方差逼近0。
那么 Bin Regularization 就可以表示成:
其中
v
i
v_{i}
vi (个人觉得应该加粗)为落入第
i
i
i-th Bin 的数据。
L
m
s
e
\mathcal{L}_{mse}
Lmse 计算均方误差,
L
v
a
r
\mathcal{L}_{var}
Lvar 计算方差:
其中
V
V_{}
V 为
i
i
i-th Bin 内的数据个数,
v
a
r
(
⋅
)
var(\cdot)
var(⋅) 计算方差。
2.3 Optimization Strategy
直观地说,总的目标可以设为 Cross Entropy Loss 和 Bin Regularization Loss 二者的线性组合,然后再做最小化:
其中
λ
\lambda
λ 为超参数,调节惩罚比例。由于
s
s
s 和 量化后的数据
v
^
\hat{v}
v^ 会同时更新,且 Bin 的划分范围受
s
s
s 的影响,那么当
s
s
s 不稳定时,正则化 Bin 内的分布就容易导致错误的优化方向和性能下降。故作者不同时优化
L
B
R
\mathcal{L}_{BR}
LBR 和
L
C
E
\mathcal{L}_{CE}
LCE ,而是分成两阶段来 Fine-tune 进行。在前几个 Epochs 先更新
L
C
E
\mathcal{L}_{CE}
LCE ,也即先更新
s
s
s;之后再进入 Bin Regularization 项,来联合优化。这种两阶段优化策略有利于量化网络的良好收敛性和性能。
3 Experiments
实验围绕 ImageNet 分类任务展开,关注多个流行的轻量级网络架构上更具挑战性的低精度模型量化问题。作者将 LSQ 作为实验的 Baseline 方法。
3.1 Experimental Setting
- Dataset:ImageNet Classification 数据集。
- Networks:ResNet18(Standard V1 Achitecture)、MobileNetV2、MobileNetV3-Small。
- Implementation Details:对于 ResNet18 和MobileNetV2,作者从头开始训练它们的全精度模型,初始学习率为0.1和重量衰减为1e-4。对于MobileNetV3,作者使用预先训练的全精度网络作为后续 Low-bit 网络训练的初始化。对于所有三种类型的网络,作者直接从相应的全精度模型训练每个低精度模型,不需要 Warmup。初始学习速率设置为0.01并以余弦策略衰减。重量衰减参数设置为1e-4、5e-5、2.5e-5,分别适用于 4-bit、3-bit 和 2-bit 网络。作者对每个 Low-bit 网络进行训练,总Epochs 为90,动量数为0.9。所有的实验都是在 Pytorch 上进行的,用到一个 Nvidia V100 GPU。对于低精度 MobileNetV2 的训练,在 2-bit 、3-bit、4-bit 量化时,LSQ Baseline 分别需要90、90、90小时,作者的方法分别需要97、111、135小时。
3.2 Comparisons to State-of-the-Art Quantization Methods
与 SOTA 方法对比如 Table 1、2、3 所示。
3.3 Comparisons to Different Weight Regularization Methods
如 Table 4、5 所示。
3.4 Ablation Study
Optimization Strategy
作者测试了不同的网络量化优化策略:
- S1:一开始就联合更新量化步长和 Bin Regularization。
- S2:用几个 Epoches 来更新量化步长(在作者的实验中为30个 Epochs),然后引入 Bin Regularization。
- S3:交替单独进行量化步长的更新或单独进行 Bin Regularization。
最后结果如 Table 6 所示。
Parameter Analysis
对于超参数 λ \lambda λ,作者也进行了一定的调优,如 Table 7 所示。最后选择 λ = 0.5 \lambda=0.5 λ=0.5。
3.5 Analysis of Quantization Error
虽然作者的方法没有显式地优化模型整体的量化误差,但在正则化每个 Bin 后量化误差仍然有效下降。Table 8 展示了 作者方法和均方差量化误差(MSE-QE)之间的关系。
3.6 Visualization of Bin Distribution
可视化图如 Fig 2、3、4 所示。
3.7 Training Convergence
如 Fig 5 所示。
3.8 Hardware-Friendly Implementation
现有的大多数量化方法采用了一些松弛条件,以保持量化网络的高准确度(如第一层和最后一层均不采取量化,或均量化到 8-bit)。作者按照业界的一些规范,再以 TQT 作为 Baseline,在其基础上做实验。不仅使用相同的低位宽度对第一层和最后一层进行量化,还对 Element-wise 加法模块的输入和输出进行量化,同时将 Bias 量化为 8-bit,在训练时就将 BN 层合并到前一卷积层中去。实验结果如 Table 9 所示。
个人思考
- 该论文的创新也很纯粹,就是定义了一个正则化项,这个正则化项能让量化电平附近(或者是量化仓位,即 Quantization Bin 内)的值往量化电平上靠,以最小化正则化项。这个创新 emmm 个人觉得本质上应该叫 Trick。没有最小化全局的量化误差,但是最小化 Bin 内的量化误差。
- 个人觉得 Motivation 不是那么充分,没有详细展开讨论。比如其他用于量化的正则化方法为什么不好?
- 作者做的实验还是很充分的,创新虽然简易,但是也有说服力。观察实验还可以发现,越低比特,做 Bin Regularization 的效果越明显。