Learning to Quantize Deep Networks by Optimizing Quantization Intervals with Task Loss

本文提出了一种可学习的量化间隔(Quantization Interval Learning,QIL)方法。

它的思路类似TSQ,都是分两步进行量化,但与TSQ不同,它在每一步里都同时对权重和**值进行处理。

第一步是一个Transformer:其思路与DoReFa-Net类似,将权重变换到[-1,1],将**值变换到[0,1]。

其框架如下:
Learning to Quantize Deep Networks by Optimizing Quantization Intervals with Task Loss
权重和**值的变换公式分别为:
Learning to Quantize Deep Networks by Optimizing Quantization Intervals with Task Loss
Learning to Quantize Deep Networks by Optimizing Quantization Intervals with Task Loss
Learning to Quantize Deep Networks by Optimizing Quantization Intervals with Task Loss
Learning to Quantize Deep Networks by Optimizing Quantization Intervals with Task Loss
这里Cw和Cx分别为转换区间的中心值,Dw和Dx分别为中心到边缘的距离。

在做完转换后,第二步是discretizer,使用截断函数将参数离散化:
Learning to Quantize Deep Networks by Optimizing Quantization Intervals with Task Loss
这里qD是量化级别,假设量化为kbit,那么qD=2的k次-1。

这种方法的优点是:1、缩减了参数的值域,使得在相同的量化粒度下,参数的精度更高;2、使用学习的方法来获得量化的间隔,能够得到较好的结果。3、TSQ是一个逐层的方法,所以它在遇到skip-connection这样跨层的操作时就会不适用。而这个方法并不存在这个问题。

缺点在于:1、学习的方法的一个普遍的问题:开销;2、作者将量化分为两个步骤,第一个步骤是连续的,因此可以求导。但第二个步骤还是离散的,要使用STE来估计梯度。所以只是部分地解决了梯度不匹配问题。

它的另一个特点是:与其它关注量化误差的方法不同,因为它在训练时可以修改量化的间隔,因此它直接以loss来作为量化的评价指标。这种方法我认为更好,因为首先全精度网络的权重并不一定是最优的。而在将其量化后,得到的网络实际上已经是另一个网络了。即使我们使量化误差变得非常小(我们也做不到这一点),得到的点也未必是最优点。所以一个可改变量化范围的方法,效果应该更好些。

算法如下:
Learning to Quantize Deep Networks by Optimizing Quantization Intervals with Task Loss