网络压缩-量化方法对比

来源:互联网 发布:淘宝外观专利侵权 编辑:程序博客网 时间:2024/05/21 12:49

转自:http://blog.csdn.net/shuzfan/article/details/51678499

本次介绍的是一种压缩神经网络模型大小的方法,来自《2014 arxiv:Compressing Deep Convolutional Networks using Vector Quantization》。该方法和很多之前的神经网络压缩方法一样,基本只对全连接层有效,因此这里权作了解。

由论文名可以看出,主要是对密集权重矩阵进行量化编码来实现压缩。

论文做了很多种量化方法的对比试验,不过都只针对全连接层,至于为什么不处理卷积层,大家可以考虑一下。下面就简单介绍一下这些方法。

SVD分解

全连接层的权重矩阵记作 WRm×n ,首先对 W 进行 SVD 分解,如下:

W=USVT

为了能够用两个较小的矩阵来表示 W ,我们可以取奇异值的前 K 个分量。于是,W可以通过下式重建:

W^=U^S^V^T,U^Rm×kV^Rn×k

我们唯一需要保存的就是3个比较小的矩阵 U,S,V ,我们可以简单算一下压缩比为 mn/k(m+n+1)

二值化

这种量化方法的想法来自于Dropconnect,量化如下:

二值化

假设原来的 W 是 float 型数据,则压缩比为 32

K-Mmeans 标量量化

首先把 WRm×n 整成标量 wR1×mn,然后进行K均值,于是每一个 Wij 都可以用距离其最近的聚类中心表示,于是我们需要存储的只有 m×n个索引,以及 K 个聚类中心。

乘积量化

乘积量化就是把原始数据划分成若干个子空间,在每个子空间中分别进行K-Means。

比如原来的 W 是 m×n 维的,我们可以把列(or 行)分成S份,即 W=[W1WS] ,然后对每一个 Ws 进行K-Means。

残差量化

残差量化可以看做是一种分层量化、迭代量化。

首先对原始的 W 使用K-Means的,然后用聚类中心对其进行表示 Wc1 ,然后计算残差 W=WWc1。对 W 继续K-means,重复上述过程。于是, Wi 可以表示为多级聚类中心之和:

Wi=c1j+c2j++ctj

对比试验

接下来就是大量的对比试验,这里只列举一部分:(试验都在AlexNet的全连接层进行操作)

下图的横坐标是PQ的子空间分割数,K代表子空间中聚类的个数。

PQ参数

下图是不同方法的对比,结果发现PQ较好。此外为了综合考量准确率与压缩比,这里PQ中K=8。

对比

总结

论文是Facebook投到2015ICLR的,估计是被拒了,因为通篇只有对比试验而没有自己原创内容。此外,我们唯一可以收获的是了解了一些简单的量化方法,而这些方法是可以作为其它高级方法的基础的。

0 0
原创粉丝点击