论文地址:https://arxiv.org/pdf/1702.03044.pdf
主要内容
作者提出了一种新的神经网络量化方法——INQ,可以将训练好的全精度的CNN模型转换为权重为2的幂次方或0的低精度模型。INQ引入了三个操作:权重划分、分组量化和再训练。大致步骤为通过某种策略(随机划分或剪枝启发)将权重分为不相交的两组,先将第一组量化作为低精度模型的基,而第二组用于补偿量化带来的精度损失,所以要通过再训练,一直重复上述步骤直至全部量化。最后通过几组实验验证了该算法的有效性。
三个操作
CNN的量化存在两个关键问题:一是量化会带来一定的精度损失,二是为保证收敛需要增加迭代次数。
基于这两个问题,作者采用了包含权重划分,分组量化和再训练的INQ方法。
1. 权重划分
权重划分一般有随机划分和剪枝启发(pruning-inspired)两种策略,作者基于实验结果,选择了准确率更高的剪枝启发。
随机划分即随机将权重分为不相交的两组;而剪枝启发则是通过将权重的绝对值与分层阈值比较划分为两组(分层阈值则是由给定的分割比确定),该策略认为绝对值大的权重更重要,即将绝对值大的一组作为低精度模型的基。
2. 分组量化
全精度的CNN模型最终需要量化为权重为2的幂次方或0的低精度的模型,即量化后的权重
W
^
l
\widehat W_l
W
l中的每个数都对应于
P
l
P_l
Pl:
其中,
n
2
≤
n
1
n_2 \leq n_1
n2≤n1,且均为整数。
n
1
n_1
n1的取值如下:
由于位宽
b
b
b是给定的,所以由
n
1
n_1
n1和
b
b
b就能确定
n
2
n_2
n2:
n
2
=
n
1
+
1
−
2
b
−
1
2
n_2=n_1+1-\frac{2^{b-1}}{2}
n2=n1+1−22b−1。
最终的权重由下式确定:
其中,
α
\alpha
α和
β
\beta
β是
P
l
P_l
Pl中的相邻元素。
3. 再训练
两组权重其中一组先量化作为低精度模型的基,另一组则需要通过训练再分组量化,直至权重全部量化完成。需要注意的是,已量化的组在训练过程保持不变。
如上图所示,(1)先进行权重划分为量化组和训练组,黑色部分为量化组;(2)然后分组量化,将量化组量化;(3)接着训练组进行再训练;(4)重复权重划分、量化;(5)继续迭代;(6)量化完成。
INQ算法
将优化问题表示如下:
其中,
T
l
(
i
,
j
)
=
0
T_l(i,j)=0
Tl(i,j)=0表示权重属于量化组,
T
l
(
i
,
j
)
=
1
T_l(i,j)=1
Tl(i,j)=1表示权重属于训练组。
参数更新公式:
具体算法如下:
实验
- 在ImageNet上的实验结果如下:
显然,对于常用的AlexNet等网络,INQ量化损失的精度可以忽略不记,甚至比未量化的准确率略高。 - 量化为不同位宽:
量化的位宽越低,准确率会小幅降低。 - 基于ResNet与其他二元、三元模型比较:
由实验结果可知INQ算法准确率更高。
总结
INQ量化方法最大贡献在于能够在很大程度上减少量化带来的精度损失,对于其他量化方法有一定的优势。不过具体效果还是要亲自实验才能知道,在此不加赘述。