CLIP-Q: Deep Network Compression Learning by In-Parallel Pruning-Quantization把剪枝和量化一起做的一个方法。以往的做法,剪枝和量化一般都是分开做的,这样很难达到联合最优化。论文代码是用caffe实现的。
论文方法
方法比较简单,直接放截图了。
需要注意的是,在训练阶段,量化后的参数和原始参数都需要用到。原始参数用在反向传播更新参数的时候,而前向传播用的是量化后的参数。训练结束后,只有量化后的参数需要被保留。保存的方法是standard sparse encoding scheme——使用index differences来对稀疏矩阵编码。没有被剪枝的参数还需要保存量化比特数。
参数估计
本方法需要确定的参数是θi=(pi,bi)\theta_i=(p_i,b_i)θi=(pi,bi),即剪枝率和量化比特数。使用贝叶斯优化来估计参数。目标函数是:
minθϵ(θ)−λ⋅ci(θ)
min_\theta \quad\epsilon(\theta)-\lambda \cdot c_i(\theta)
minθϵ(θ)−λ⋅ci(θ)
其中,ϵ(θ)\epsilon(\theta)ϵ(θ)是结果的top-1 error. ci(θ)=mi−si(θ)∑imic_i(\theta)=\frac{m_i-s_i(\theta)}{\sum_i m_i}ci(θ)=∑imimi−si(θ)。mim_imi是第iii层原来的总存储比特数,sis_isi是剪枝+量化后第iii层需要的总比特数。
实验
对AlexNet on ImageNet从243.9MB压缩到4.8MB,大概51倍压缩,没有精度损失
对GoogLeNet on ImageNet从28.0MB压缩到2.8MB,大概10倍压缩,没有精度损失
对ResNet on ImageNet从102.5M压缩到6.7MB,大概6.7倍压缩,没有精度损失
和其他压缩算法对比
总结
以前韩松的方法也包含了剪枝和量化,但是是分开做的。这篇把剪枝和量化一起做应该说效果还是很不得错的,也用到了贝叶斯优化的方法。
但是局限性也很明显,就是是属于不规则剪枝,在工程上还需要很高的软件支持才能很好地加速。