神经网络压缩(8)Incremental Network Quantization: Towards Lossless CNNs with Low-precision Weights

Incremental Network Quantization: Towards Lossless CNNs with Low-precision Weights

Intro

英特尔中国研究院:INQ神经网络无损低比特量化技术
给定任意结构的全精度浮点神经网络模型,能将其转换成无损的低比特二进制模型;
文章分析现有的量化压缩方法有两点不足:1.量化过程中的精度损失仍然不可忽视;2.大多数量化压缩方法只适用于处理特定的模型结构和特定类型的层,一定程度限制了泛化能力和量化压缩的性能(这里指的是很多方法对fc层的压缩比较有效,最终得到的比较大的压缩率很大一部分贡献是fc);另外还有重训练时间长等问题;

Method

  • 提出了渐进式神经网络量化的思想,引入了三种操作:参数分组,量化,重训练

简单的说就是在训练得到一个网络模型后,首先将这个全精度浮点网络模型中的每一层参数分为两组,第一组中的参数直接被量化固定,另一组参数通过重训练来补偿量化给模型造成的精度损失。然后这三个操作依次迭代应用到刚才的第二组完成重训练之后的全精度浮点参数部分,直到模型全部量化为止。
可以说参数分组分成的这两个部分是互补的作用,一个建立低精度模型的基础,另一个通过retrain补偿精度损失;这样迭代最终得到渐进式的量化和精度提升。
神经网络压缩(8)Incremental Network Quantization: Towards Lossless CNNs with Low-precision Weights_第1张图片
图中,绿线代表当前已经被量化的网络连接,蓝线代表需要重新训练的网络连接。

Weight partition

  • 分组的方式文中讨论了两种:random strategy 和 pruning-inspired strategy。
    1. random strategy:随机的把权值分成两个不重叠的部分,相当于是按相等的概率对待每一个值,有同等的概率被分到两组中;
    2. pruning-inspired strategy:基于prune的策略是:逐层确定每层自己的thresholds(一般是given splitting ratio),取weights的绝对值和thresholds比较,最后分成两个不重叠的组。
      给出了两种分组方法的一个比较,毫无疑问选取了基于prune的策略。
      神经网络压缩(8)Incremental Network Quantization: Towards Lossless CNNs with Low-precision Weights_第2张图片
      分成的两部分肯定一组值大一点一组值小一点,那么该选取哪部分先做quant呢?文中说取大的部分去做quant,大的这部分被认为是low-precision base:
      the weights with larger absolute values are more important than the smaller ones to form a low-precision base for the original CNN model.

Group-wise quantization

量化的目的是给定一个训练好的全精度的CNN网络模型,将全部的weights从32位浮点数转为2的整数次幂或者0,而不损失精度。
文章中采用的量化的形式是:量化最后Wl的每个值是和Pl中的值对应的,也就是2的整数次幂或0;其中只有n1一个超参数,n1是根据这个公式得到的,s就是简单的对所有weights取绝对值取最大。。。bitwidth=b是由我们设定的,n1知道了,n2可以通过n1和b求得
神经网络压缩(8)Incremental Network Quantization: Towards Lossless CNNs with Low-precision Weights_第3张图片
最终convert every entry of Wl (按上面的公式)into a low-precision one。

Re-training

INQ渐进式网络量化示例:第一行:依次为参数分组、量化、重训练;第二行:迭代过程
(绿色区域表示当前已经被量化的网络参数,浅紫区域表示需要重新训练的网络参数)
神经网络压缩(8)Incremental Network Quantization: Towards Lossless CNNs with Low-precision Weights_第4张图片

Incremental network quantization algorithm

  • 优化的目标函数,以及参数更新策略
    神经网络压缩(8)Incremental Network Quantization: Towards Lossless CNNs with Low-precision Weights_第5张图片

其中,Pl是由前面的分组量化所确定的取值;Tl是一个mask,他代表了每一步weights的分组:T=0表示是已经quant的部分,T=1表示需要retrain的部分;
在retrain时只更新retrain部分(T=1)对应的部分也就是还保持32位的weights。(和韩松只更新没有被remove的连接的思想类似)

  • 全部流程
    神经网络压缩(8)Incremental Network Quantization: Towards Lossless CNNs with Low-precision Weights_第6张图片
    梳理:
    1.输入是training data,pre-trained model,每步迭代有百分之多少weights做quant,就是用于确定2.每层的threshold进而分组的;
    3.根据delta逐层确定weights的分组,更新A1A2也就是分组,Tl也就是分组的mask;
    4.在A1上逐层确定每一层自己的Pl集合;
    5.逐层量化;
    6.计算loss,更新A2部分的参数;

Experiments

神经网络压缩(8)Incremental Network Quantization: Towards Lossless CNNs with Low-precision Weights_第7张图片
图1:INQ应用在主流的深度神经网络上,和全精度浮点模型对比,5bit量化,INQ模型分类精度超越了原始的全精度浮点模型;
图2:不同比特长度,参数二进制化的神经网络模型性能

神经网络压缩(8)Incremental Network Quantization: Towards Lossless CNNs with Low-precision Weights_第8张图片
图1:三值,二值神经网络性能比较
图2:和韩松的文章比,韩松的是把三种不同的方法融合到了一起
另外本文的方法还有一点好处:之前这些方法最后的weights还是浮点数,但是INQ得到的是二进制化的参数,可以用简单的二进制移位运算代替原来的浮点数乘法运算,简化硬件计算
the final weights for vector quantization (Gong et al., 2014), network pruning (Han et al., 2015) and deep compression (Han et al., 2016) are still floating-point values, but the final weights for our INQ are in the form of either powers of two or zero. The direct advantage of our INQ is that the original floating-point multiplication operations can be replaced by cheaper binary bit shift operations on dedicated hardware like FPGA.

Future Work

神经网络压缩(8)Incremental Network Quantization: Towards Lossless CNNs with Low-precision Weights_第9张图片
进一步将INQ技术从只量化模型参数推广到不但量化模型参数,还量化网络每一层的输入和输出
VGG-Net为例,首次实现了无损的、低比特、全量化的神经网络模型
图表:输入输出及参数均二进制化的神经网络模型性能

你可能感兴趣的:(深度学习,模型压缩)