深度网络模型压缩DEEP COMPRESSION

原创 2017年07月26日 19:29:22

DEEP COMPRESSION


主要流程:

  1. pruning(剪枝)
  2. trained quantization(量化训练)
  3. Huffman coding(霍夫曼编码)

首先通过学习重要的连接来修剪网络;接下来,量化权重以实施权重共享;最后,应用霍夫曼编码。实际效果可以将AlexNet 无准确率损失压缩35倍,240MB到6.9MB,VGG-16压缩49倍,552MB到11.3MB。
fig1

Network Pruning


首先通过正常的网络训练学习连接。接下来,修剪小重量连接:从网络中删除重量低于阈值的所有连接。 最后,我们重新训练网络来学习剩余稀疏连接的最终权重。

使用压缩稀疏列(CSR)或压缩稀疏列(CSC)格式存储从剪枝产生的稀疏结构,这需要(2a + n + 1)个数字,其中a是非零元素的数量,n是 行或列。
关于这种压缩方式,wiki上有很好的解释,这是对稀疏矩阵的一种编码方式。
csr
为了进一步压缩,剪枝时候,只保留权值大于指定阈值的数,用存储索引差(diff)而不是原始的绝对位置(inx)来表示,对于索引差大于设定的span值,还会进行补零处理。例如设置span=8,idx=4和idx=1之间的位置差为3,无需补0。例如15和4之间距离为11大于span=8,所以在4+8=12的位置插入0,idx=15相对idx=12为3。span值在卷积层设置为8,全连接层为5。
fig2

Trained Quantization And Weight Sharing


权重分享是一个比较重要的操作。如图所示,首先通过使多个连接共享相同权重来限制需要存储的有效权重的数量(上面),然后微调这些共享权重(下面)。

fig3

原来的权重值可以用索引值和量化值替代,从而大大减小网络的规模。
压缩率计算方法如下公式所示:

rate
n代表连接数,b代表每一个连接需要b bits表示,k表示量化k个类,k类只需要用log2(k)个bit表示,n个连接需要nlog2(k)索引,还需要用kb表示量化中心的数值。 最初有4×4 = 16个权重,但只有4个共享权重:类似的权重被分组在一起以共享相同的值。 原来我们需要存储16个权重,每个都有32位,现在我们只需要存储4个有效权重(蓝色,绿色,红色和橙色),每个都有32位,连同16个2位索引,压缩率为16 * 32 /(4 * 32 + 2 * 16)= 3.2。

Weight Shearing


作者采用了K-means聚类方法,把权值量化为k个类。原始的n个权重W=w1,w2,......,wn使用聚类算法变为k个聚类中心C=c1,c2,......,ck。聚类算法最小化类内误差,目标函数如下所示:

loss

Initialization of Shared Weights


聚类中心C的初始化影响着量化方式,作者也采用了不同的初始化方法:随机初始化,基于密度初始化,线性初始化。
绝对值较大的权重比较小的重量更重要,但是这些权重的数目较少。 因此,对于随机初始化和基于密度的初始化,很少的质心具有很大的绝对值。 线性初始化不会受到此问题的困扰。 实验部分比较了聚类和微调后不同初始化方法的准确性,表明线性初始化效果最好。

Feed-forward and Back-propagation


一维k均值聚类的质心是共享的权重。 在前馈阶段和反向传播阶段中查找重量表有一个间接级别。 为每个连接存储共享权重表中的索引。 在反向传播期间,计算每个共享权重的梯度并用于更新共享权重。
g

Huffman Coding


霍夫曼编码是常见的无损编码方式,最后使用这种方式进一步压缩模型。

huffman

总结


整个流程较为清晰:稀疏编码,量化共享,概率编码,达到的效果也不错:

result

更值得注意的是速度和功耗上:

speed

但是我也好奇这个东西解码出来有多大= =
Github Demo上解码出来是232.57MB,跟原始的大小没什么区别,那么使用的时候还是需要再解码吧,所以感觉还是和理想的差一点。

版权声明:本文为博主原创文章,转载请标注出处。

相关文章推荐

Deep Learning(深度学习)之(六)【深度神经网络压缩】Deep Compression (ICLR2016 Best Paper)

Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman co...

深度学习方法(七):最新SqueezeNet 模型详解,CNN模型参数降低50倍,压缩461倍!

继续前面关于深度学习CNN经典模型的整理,之前介绍了CNN网络Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning(点击查看)的网络结构。本文讲一下最新...

VALSE 2017 | 神经网络模型压缩优化方法

​近年来,深度神经网络在计算机视觉、语音识别等领域取得了巨大成功。为了完成更加复杂的信息处理任务,深度神经网络变得越来越深,也使得其计算量越来越大。然而,手机、车载等移动端应用对深度神经网络的需求越来...

修改12306的自动查询间隔

现在12306的自动查询是每隔五秒查询一次。 这个时间是写在前端JS里的,所以,只要用的浏览器不是IE6、或者其他浏览器的兼容模式(且系统的IE浏览器是IE6),都是可以修改这个时间的。 以3...

深度卷积神经网络CNNs的多GPU并行框架及其应用

发表于2014-08-20 17:25| 3887次阅读| 来源腾讯大数据| 5 条评论| 作者佚名 大数据神经网络深度学习并行计算人脸识别 摘要:本文是腾讯深度学习系列文章之一,...

【深度神经网络压缩】Deep Compression (ICLR2016 Best Paper)

做过深度学习的应该都知道,NN大法确实效果很赞,在各个领域轻松碾压传统算法,不过真正用到实际项目中却会有很大的问题: 1. 计算量非常巨大;2. 模型特别吃内存;怎么办?使用网络压缩技术咯!《Deep...
  • cyh24
  • cyh24
  • 2016年06月19日 01:51
  • 14307

深度网络模型压缩 - CNN Compression

一. 技术背景       一般情况下,CNN网络的深度和效果成正比,网络参数越多,准确度越高,基于这个假设,ResNet50(152)极大提升了CNN的效果,但inference的计算量也变得很大。...

【文献阅读/翻译...】bayesian compression for deep learning深度学习中的贝叶斯压缩

神经网络的权重参数的scale mixture of norm先验,压缩网络结构。 变分贝叶斯估计。...
  • pearl30
  • pearl30
  • 2017年07月14日 21:29
  • 459

神经网络压缩:Deep Compression

本次介绍的方法为“深度压缩”,文章来源与2016ICLR最佳论文 《Deep Compression: Compression Deep Neural Networks With Pruning, T...
  • shuzfan
  • shuzfan
  • 2016年05月12日 14:22
  • 9806

Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

1. 概述         回想一下BP神经网络。BP网络每一层节点是一个线性的一维排列状态,层与层的网络节点之间是全连接的。这样设想一下,如果BP网络中层与层之间的节点连接不再是全连接,而是局部连...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度网络模型压缩DEEP COMPRESSION
举报原因:
原因补充:

(最多只允许输入30个字)