论文:Weighted-Entropy-based Quantization for Deep Neural Networks
论文链接
这是CVPR2017的一篇文文章,是用基于weight entropy做深度学习模型quantization的模型压缩和加速算法。
深度学习模型压缩和加速是近年来的一个研究热点,也是将深度学习模型部署到移动端的必经之路,一方面要压缩模型的大小,减少存储,另一方面要减少模型测试的时间。其中一个比较有效的方式就是通过降低计算精度来达到模型压缩和加速的目的。我们知道一般深度学习模型的数值精度都是32位浮点型,那么如果变成8位或者4位存储会怎么样?显然能达到压缩和加速目的,不过不可避免地会影响模型的准确率。因此现在的研究方向都是在不大影响准确率的前提下尽可能加速和压缩模型。
quantization是深度学习模型压缩的其中一类方法,也就是通过降低计算精度来达到,那么什么是quantization呢?可以看下面的Figure1。比如说你一个训练好的模型的权重分布像Figure1的左上角那样,大部分值是0或接近0,这些值小的权重虽然数量多,但是对模型的输出影响并不大;小部分权重的值很大,对模型输出结果影响也比较大,但是数量较少,也就是比较稀疏。那么linear quantization就像Figure1右上角的图那样(这里都分成24个level),将所有的权重分成24份,然后将值在每一份内的权重用同一个值表示,这种线性的方法会使得quantization后的权重分布比较均匀,并没有考虑原权重的分布。左下角的log quantization将权重接近0的部分分成太多部分了,作者认为这是不必要的,因为值较小的权重对结果的影响较小,没必要分这么多部分。右下角的weighted quantization则是本文提出的quantization方法,是基于weight entropy来对weights和activations做quantization得到的。为什么要这么做呢?来源于作者观察到的一个现象:the impact of each weight/activation value on the final result should also be considered during the quantization. 而且将quantization的重心放在那些值既不是很大也不是很小的权重上。
上面所说的权重不仅仅包含类似卷积层,全连接层等参数,也包含激活层(activation)的参数,这也是你在文中看到的作者既对weight做quantization,也有