LEARNED STEP SIZE QUANTIZATION
二.Abstract&Introduction why?近年来,神经网络作为一种许多革命性技术的组成部分开始崭露头角,比如图像识别、语音识别以及自动驾驶等。但是,要利用好这一技术并大规模应用需要开发者有一个系统性的视角,即要兼顾网络的性能、吞吐率、能效以及紧凑程度。现在很多研究者都致力于在保持网络精度的同时,用低精度的数据去表示权重和激活,这种方法使得模型的大小以及计算量大大降低。因此,如何在降低精度的同时尽可能保持网络的精度成为了一个重要的问题。
how?作者针对此问题提出了Learned Step Size Quantization (LSQ),该方法和之前的量化感知训练不同,之前的量化感知训练,是根据权重或者激活的统计分布来动态的修改Scale,而在LSQ中,Scale被设置为网络中可训练的参数,即直接通过BP算法来学习Scale。此外,作者还提出了一种启发式的方法,使得Scale更新时的相对幅度和权重更新的相对幅度保持在一个量级,从而使得模型的收敛速度和精度有了很大的提升。
result?作者在ImageNet上对不同结构的网络进行了测试,结果表明,LSQ的精度高于之前所有的量化方法,并且在3bit的量化模型上精度首次达到了全精度网络的水准。
三.Methods同google的量化感知训练论文一样,LSQ也包含量化和反量化操作,设待量化的张量为
v
v
v,量化后的张量为
v
‾
\overline v
v,反量化后的张量为
v
^
\hat v
v^,则量化过程为
v
‾
=
[
c
l
i
p
(
v
s
,
−
Q
N
,
Q
P
)
]
\overline v=[clip(\frac{v}{s},-Q_N,Q_P)]
v=[clip(sv,−QN,QP)] 而反量化过程为
v
^
=
v
‾
∗
s
\hat v=\overline v*s
v^=v∗s 下图是模型推理时的计算过程,量化后的
w
‾
和
x
‾
进
行
整
数
运
算
,
得
到
的
输
出
再
乘
以
s
w
和
s
x
。
推
导
如
下
\overline w和\overline x进行整数运算,得到的输出再乘以s_w和s_x。\\推导如下
w和x进行整数运算,得到的输出再乘以sw和sx。推导如下
y
=
w
^
∗
x
^
+
b
^
=
w
‾
∗
s
w
∗
x
‾
∗
s
x
+
b
^
=
s
w
∗
s
x
∗
(
w
‾
∗
x
‾
+
b
‾
)
=
y
‾
∗
s
w
∗
s
x
其
中
b
‾
=
[
b
^
/
(
s
x
∗
s
w
)
]
y=\hat w*\hat x+\hat b=\overline w*s_w*\overline x*s_x+\hat b=\\s_w*s_x*(\overline w*\overline x+\overline b)=\overline y*s_w*s_x\\其中\overline b=[\hat b/(s_x*s_w)]
y=w^∗x^+b^=w∗sw∗x∗sx+b^=sw∗sx∗(w∗x+b)=y∗sw∗sx其中b=[b^/(sx∗sw)]
对round函数使用STE(直通估计),即假设取整函数的导数为1,那么可以得到
v
^
对
s
的
导
数
为
\hat v对s的导数为
v^对s的导数为 在之前的对梯度的估计中,人们都没有考虑
v
和
取
整
函
数
转
折
点
v和取整函数转折点
v和取整函数转折点之间的相对距离对量化梯度的影响,但是可以理解的是,
v
v
v和取整函数转折点的距离越近,那么s的轻微变动都极有可能使得量化后的
v
‾
\overline v
v发生改变,从而导致
v
^
\hat v
v^的巨大跳变,也就是说,网络能模拟的量化所带来的误差就越大,
因
此
,
∂
v
^
∂
s
应
该
随
着
v
与
转
折
点
距
离
的
缩
小
而
增
大
因此,\dfrac{\partial \hat v}{\partial s}应该随着v与转折点距离的缩小而增大
因此,∂s∂v^应该随着v与转折点距离的缩小而增大 确实,我们也在LSQ的方法中观察到了这一关系。 在作者的LSQ中,每一层的权重和激活都有一个各自的step size,它们被初始化为
2
∗
<
∣
v
∣
>
/
Q
P
2*/\sqrt {Q_P}
2∗/QP
,其中
<
∣
v
∣
>
表示该层所有特征或权重的绝对值的平均。
研究显示,每一层参数的更新幅度与参数本身的幅度之比越接近,模型训练时收敛的越快,因此,我们考虑step size的更新幅度与step size本身的幅度之比应该也要尽可能接近权重,如下图所示 R应该接近1。同时,我们还期望模型参数精度上升时,step size变小(因为数据被量化得更精细),被量化的参数数目变大时,step size更新也能变大( 因为在计算其梯度时,会有更多的项被求和)。因此,为了纠正这一点,作者将step size的梯度乘以一个g,对权重来说,这个
g
g
g为
1
/
N
W
Q
P
1/\sqrt{N_WQ_P}
1/NWQP
,而对激活来说
g
g
g为
1
/
N
f
Q
P
1/\sqrt{N_fQ_P}
1/NfQP
,这个g的使用使得模型的精度和收敛速度有了很大的提升。
在其他的一些工作中,
v
^
\hat v
v^对
v
v
v的梯度被直接估计为1,如下式 为了使得在训练时更加简单,作者同以前的量化模型一样,将伪量化后的
v
^
\hat v
v^送入卷积单元或者矩阵乘法单元。作者将除了第一层和最后一层的权重和激活都量化为2,3,4,8bit,而第一层和最后一层则使用8bit精度(这是由于保持第一层和最后一层的量化精度对模型最终的性能有很大的提升), 在量化空间中进行微调之前,所有量化网络都是使用经过训练的具有等效体系结构的全精度模型的权重初始化的,因为这可以提高性能。 作者的网络在训练时使用0.9的动量,使用softmax交叉熵损失函数,并使用了余弦学习率,8bit的网络训练1轮,而其余网络训练90轮, 全精度网络的初始学习率为0.1,2,3,4bit网络的初始学习率为0.01,8bit网络的初始学习率为0.001,并且所有的网络模型都是基于ImageNet数据集的,等等训练的细节不再赘述。
作者预期对模型进行量化时也会降低模型过拟合的可能性,因此weight decay的大小可能不需要原先这么大。为了探究这个问题,作者在ResNet-18上使用了不同的weight decay,并观察结果,如下图所示 可以看到,低精度的网络所需的weight decay值的确更小。
如上表所示,用LSQ方法训练的低精度网络优于之前人们提出的量化模型,并且作者发现,从4bit到8bit,网络的精度并没有上升。 另一个有趣的现象是,将ResNet-18从全精度量化为2bit,top-1准确率下降了2.9%,而 SqueezeNext-23-2x却下降了14.0%之多,一个解释是:SqueezeNext的网络结构是精心设计的,它用更少的参数去达到了更高的精度,因此,网络对于参数精度的降低十分敏感。
对一个存储资源有限的应用来说,如何在符合条件的模型大小下选取更高精度的网络是一个很重要的问题,因此,作者绘制了下图:
为了观察step size梯度伸缩因子g对模型训练的影响,作者在ResNet-18上进行了实验,测量了第一轮训练中500次迭代的平均R值。 作者发现,如果不进行梯度的伸缩,那么step size的R值会比weight高出2-3个数量级,并且这种不平衡随着量化精度的增大而增大。如果考虑每层的特征数目,即将
g
g
g设置为
1
/
N
W
1/\sqrt {N_W}
1/NW
,那么权重和step size之间这种更新的不平衡将会大大减少,但是由于量化精度带来的不平衡仍未消除,若将量化精度也考虑在内,即
g
g
g=
1
/
N
W
Q
P
1/\sqrt{N_WQ_P}
1/NWQP
,那么由于精度带来的不平衡也将大大减少。 作者观察了使用不同step size的梯度伸缩因子g训练2-bit的ResNet-18对最终结果的影响,如下图所示。 可以看到,将
g
g
g设为
1
/
N
Q
P
1/\sqrt{NQ_P}
1/NQP
的效果是最好的。
作者在LSQ中使用了cosine learning rate decay方法,为了凸显其优势,作者还和step-based learning rate decay进行了比较,该方法的初始学习率为0.01,每20个epoch学习率乘以0.1,一共训练90轮,最终达到了67.2%的top-1准确率,比使用cosine learning rate decay方法的准确率低了0.4%,由此可见余弦学习率衰减的优势。
6.QUANTIZATION ERROR所谓量化误差,是指 v v v和 v ^ \hat v v^两个张量在某种度量下的距离,比如L1范数,L2范数等等。作者为了探究使得量化误差最小的s和经过BP算法训练得到的s是否相等,进行了实验,实验结果表明,BP算法得到的s并不是使得量化误差最小的s。
7. IMPROVEMENT WITH KNOWLEDGE-DISTILLATION作者探究了知识蒸馏对低精度模型训练的作用,实验结果表明,知识蒸馏能在一定程度上提升量化训练的精度。
五.Conclusion