Incremental-Network-Quantization增量网络量化论文详解

Incremental-Network-Quantization增量网络量化论文详解

笔者将从以下几个方面分析该论文的原理及其实现,由于笔者能力有限,如有错误望诸公指正。
论文作者代码:https://github.com/AojunZhou/Incremental-Network-Quantization

1. 基本概念

2. 权重分组

3. 权重量化

4. 再训练

5. Imagenet上错误率比较

6. INQ的其他比较

7.总结

1.基本概念

该论文总体上要实现的功能主要是:将训练好的全精度卷积神经网络参数模型通过量化权值为2或0的幂次,将其转换为低精度模型。用以解决网络权重量化精度损失严重的问题和网络模型在硬件上实现的复杂度过大的问题。

大致步骤如下所述:首先对网络进行训练得到初始化的权值参数模型,按照预先设定的分割率和权值的绝对值大小确定一个阈值,以此阈值将权值分为两组。一组进行量化,另一组保持权值不变。其中量化的一组需要在选取量化位宽后,再通过比较原始权值与量化权值的差值将其量化为2的幂次方或0;另一组进行再训练,更新原始的权值参数。将为量化的一组再次根据分割率和阈值进行分组,重复上述步骤,直到所有权值均被量化。

下面将对每一步骤进行细化分析。

2.权重分组

首先是将训练好的网络模型参数进行分组,一组进行量化,另一组准备继续进行再训练。论文给出了两种分组方法,分别是:
1.随机分区:随机的把权值分为两个不重叠的部分。
2.基于Pruning-inspired的策略:对于绝对值大的权重先进行量化,即把绝对值大的权重先挑一半处理。
Incremental-Network-Quantization增量网络量化论文详解
通过比较看出第二种分组方法的准确率要高于第一种,因此选择第二种方法进行训练。

3.权重量化

权重量化即将原始的权值模型量化成为逾期差值最小的2的幂次方或0,笔者简单画了示意图表示如下:
Incremental-Network-Quantization增量网络量化论文详解
蓝色标记为原始权值,红色标记为将要量化成的2的幂次方或0。
对于权重量化范围的n1、n2的选择依据如下:
Incremental-Network-Quantization增量网络量化论文详解
其中s为权值的绝对值的最大值,由此来确定量化的位宽上限n1,b为自行设定的需要量化的位宽,根据b和n1得位宽下限n2,从而量化后的权值取值范围为Pl集合。

4.再训练

将之前一组量化过的权值固定不变(在之后的训练过程中也不再改变),将整个参数模型放回原网络模型中再次进行训练,更新另一组未量化的权值参数。
Incremental-Network-Quantization增量网络量化论文详解
如图中所示黑色部分为根据第二组分组方法分组出的需量化的权值绝对值较大的部分,量化之后为绿色方框所示,灰色的则是经过再训练的权值参数,周而复始,不断地分组、量化、再训练,知道所有的权值均被量化。

5.Imagenet上错误率的比较

Incremental-Network-Quantization增量网络量化论文详解
可以看到对于Alexnet、VGG-16等常用的网络模型上,该量化方法将32位全精度模型量化为5bit后准确率损失并不算大,甚至说是可以接受的。

6.INQ不同量化位宽的比较

Incremental-Network-Quantization增量网络量化论文详解
以ResNet-18网络为例,可以看到随着量化位宽越小,准确会出现小幅下降。

7.总结

该论文最大的贡献在于一定程度上解决了量化过后网络模型精度下降过大的问题,以及其将权重量化为2的幂次方后使得网络模型在硬件上的实习更加便利。
笔者顺着论文的思路在caffe上使用ImageNet2012数据集对Alexnet和VGG-16等网络模型进行了训练并量化,基本实现了论文所述的内容,但是在Alexnet上的量化后的准确率和该论文所述的准确率仍相差2%~3%左右,至今仍在寻找原因,希望能与各位读者交流讨论,一同解决问题。