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