2016ICLR最佳论文 Deep Compression: Compression Deep Neural Networks With Pruning, Trained Quantization And Huffman Codin

主要针对神经网络模型巨大,在嵌入式机器中比较难运行的问题。

abstruct

压缩网络包括三个阶段:pruning, trained quantization and Huffman coding,能将模型减小1/35~1/49,并且不影响精度。首先

只通过学习重要连接来剪枝网络,接着量化权重,使得权重共享;最后使用Huffman编码进一步压缩。经历了前两个阶段后,重新训练网络

来fine tune剩下的连接和quantized centroids。剪枝使得连接减小1/9~1/13,量化使得bits从32减小至5。如下图所示。


Network Pruning

网强剪枝经常被用在减小模型复杂度避免过拟合上。剪枝如上图所示:正常训练网络;根据阈值剪掉一些小的连接;对得到的稀疏

网络再训练。

在存储稀疏网络时,采用的是稀疏行(compressed sparse row,CSR) 或稀疏列(compressed sparse column,CSC),

需要2a+n+1个参数。其中a指的是非零元素的个数(非零元素所在列),n是指行数或列数。怎么得来的呢?

假设存在如下一个稀疏矩阵

CSR将原始矩阵分为三部分,AA,JA,IC

其中AA指的是所有非零元素,长度为a;JA指的是每一行第一个非零元素在AA中的位置,最后一个元素为非零元素数加1,长度为

行数加1,即n+1;IC指的是AA中每个元素所对应的列号,长度为a。同理,由这三个指标可得到稀疏矩阵A。所以确定CSR的大小。

为了进一步压缩模型,存储非零元素的绝对索引(index difference)而不是绝对路径,即后面的元素存储的是与前一个非零元素的

索引差值。在论文中,采用bits来编码索引差值。以下图为例,如果采用3bit,则最大的span为8,如果某非零元素距离前一个非零

元素超过8,则将span为8的元素置为0即可。在conv layer和fc layer中,分别采用8bits和5bits对其进行编码。

Trained quantization and Weight sharing

网络量化和权值共享可以通过减少权重表达所需的位数,来进一步压缩剪权网络。通过共享权重来限制有效权重的数量,然后对

共享权重进行fine-tune。

在Fig3中,左上为权值矩阵,左下为gradient矩阵。作者将矩阵进行聚类成4种cluster,得到量化后的

权值矩阵,属于同一类的weight则共享权值。在图中,原来的每个weights需要32位,现在只需2位,压缩了16倍。

Weight Sharing

使用k-means对每一层的weight聚类,同属一个cluster共享权值,跨层的weight不进行权值共享。对于

k-means来说,初始点的中心选择很重要,作者采用了三种方式:Forgy(random)density-based, and

linear initialization,并以AlexNet中的conv3的权重分布为例,比较了三种方式:

由上图可以看出,Forgy 和 density-based 方法产生的centroids很少落入到大权值的范围中,

造成的结果就是忽略了大权值的作用;而Linear initialization产生的centroids非常平均,没有这个问题存在。

后续的实验结果也表明,Linear initialization 的效果最佳。

量化之后,目标函数的求导就变为了量化后聚类中心的值的求导:

Huffman Coding

Huffman Coding 是一种非常常用的无损编码技术。它按照符号出现的概率来进行变长编码。figure 5为AlexNet的最后一个全连接层

权重以及权值索引分布。其分布是非均匀的、双峰形状,因此我们可以利用Huffman编码来对其进行处理,该图显示了压缩前和压缩后的长度分布。

参考:http://blog.csdn.net/zijin0802034/article/details/53982812

http://blog.csdn.net/cyh_24/article/details/51708469

http://blog.csdn.net/boon_228/article/details/51718521

http://blog.csdn.net/shuzfan/article/details/51383809

http://blog.csdn.net/may0324/article/details/52935869

http://blog.csdn.net/wangqingbaidu/article/details/52649775

http://blog.csdn.net/cv_family_z/article/details/51917143

http://blog.csdn.net/stdcoutzyx/article/details/50926174

DEEP COMPRESSION小记的更多相关文章

  1. [综述]Deep Compression/Acceleration深度压缩/加速/量化

    Survey Recent Advances in Efficient Computation of Deep Convolutional Neural Networks, [arxiv '18] A ...

  2. Deep Compression Compressing Deep Neural Networks With Pruning, Trained QuantizationAnd Huffman Coding

    转载请注明出处: http://www.cnblogs.com/sysuzyq/p/6200613.html by 少侠阿朱

  3. Deep compression code

    https://github.com/songhan/SqueezeNet-Deep-Compression import sys import os import numpy as np impor ...

  4. 论文翻译:2021_Towards model compression for deep learning based speech enhancement

    论文地址:面向基于深度学习的语音增强模型压缩 论文代码:没开源,鼓励大家去向作者要呀,作者是中国人,在语音增强领域 深耕多年 引用格式:Tan K, Wang D L. Towards model c ...

  5. cs231n spring 2017 lecture15 Efficient Methods and Hardware for Deep Learning 听课笔记

    1. 深度学习面临的问题: 1)模型越来越大,很难在移动端部署,也很难网络更新. 2)训练时间越来越长,限制了研究人员的产量. 3)耗能太多,硬件成本昂贵. 解决的方法:联合设计算法和硬件. 计算硬件 ...

  6. 深度学习网络压缩模型方法总结(model compression)

    两派 1. 新的卷机计算方法 这种是直接提出新的卷机计算方式,从而减少参数,达到压缩模型的效果,例如SqueezedNet,mobileNet SqueezeNet: AlexNet-level ac ...

  7. (zhuan) Where can I start with Deep Learning?

    Where can I start with Deep Learning? By Rotek Song, Deep Reinforcement Learning/Robotics/Computer V ...

  8. 网络压缩论文整理(network compression)

    1. Parameter pruning and sharing 1.1 Quantization and Binarization Compressing deep convolutional ne ...

  9. 网络压缩论文集(network compression)

    Convolutional Neural Networks ImageNet Models Architecture Design Activation Functions Visualization ...

随机推荐

  1. delphi执行查询语句时的进度条怎么做

    procedure TForm1.FormCreate(Sender: TObject);  begin     ADOQuery1.ExecuteOptions := [eoAsyncFetch]; ...

  2. 设置close

  3. (转)DATATABLE(DATASET)与实体类之间的互转.

    转自:http://www.cnblogs.com/zzyyll2/archive/2010/07/20/1781649.html dataset和实体类 之间的转换 //dataset转实体类  代 ...

  4. 洛谷P3385 【模板】负环(DFS求环)

    洛谷题目传送门 HNOI爆零前回刷模板题 非常不正经的题目,目前并没有合适的优秀算法,就算是大家公认的dfs(还是不要强行叫dfs-spfa吧,概念应该不一样,这就是暴力dfs松弛答案) 但是对于随机 ...

  5. 解题:CTSC 2006 歌唱王国

    题面 概率生成函数 对于菜鸡博主来说好难啊 其一般形式为$F(x)=\sum\limits_{i=0}^∞[x==i]x_i$,第i项的系数表示离散变量x取值为i的概率 一般的两个性质:$F(1)=1 ...

  6. 洛谷乐多赛 yyy loves Maths VI (mode)

    题目描述 他让redbag找众数 他还特意表示,这个众数出现次数超过了一半 一共n个数,而且保证有 n<=2000000 而且每个数<2^31-1 时间限制 1s 空间限制 3.5M(你没 ...

  7. 如何构建 Redis 高可用架构?

    温国兵 民工哥技术之路 今天 1 .题记 Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的 API. 如今,互 ...

  8. 人生效率手册:如何卓有成效地过好每一天--By张萌姐姐--读书笔记

    读书笔记:<人生效率手册>:如何卓有成效地过好每一天--By张萌姐姐... 整本书看完的感受: 这本书主要讲的是生活中我们需要给自己一个目标,然后通过自己的努力去实现这个目标,书中说的很多 ...

  9. HTTP header location 重定向 URL

    http头信息 头信息的作用很多,最主要的有下面几个:1.跳转当浏览器接受到头信息中的 Location: xxxx 后,就会自动跳转到 xxxx 指向的URL地址,这点有点类似用 js 写跳转.但是 ...

  10. saltstack主机管理项目【day23】:主机管理项目需求分析-设计

    本节内容 一. 主机管理项目需求分析 二 .主机管理项目架构设计 三.主机管理项目初始构建 四. 主机管理项目编主机分发器 一. 主机管理项目需求分析 场景:我现在又一台裸机要实现一下人物 配置管理: ...