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. ESXi 20181229 刚学到的知识点

    1. 查看性能 能够获取到服务器的电源消耗 这里很明显的就能看到 2路服务器的情况下 电源在300w 以下,  平均值 270w 左右. 2. 然后在配置里面能够看到 服务器的信息 设置还能看到 序列 ...

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

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

  3. Apache Storm从一端读取实时数据的原始流

    Apache Storm从一端读取实时数据的原始流,并将其传递通过一系列小处理单元,并在另一端输出处理/有用的信息. 下图描述了Apache Storm的核心概念. 640?wx_fmt=png&am ...

  4. 【bzoj2877】 Noi2012—魔幻棋盘

    http://www.lydsy.com/JudgeOnline/problem.php?id=2877 (题目链接) 题意 一个${n*m}$的矩阵,维护两个操作:给任意子矩阵${+val}$:问某 ...

  5. 4.Kali 1.0 / 2.0 安装中文输入法(谷歌pinyin + 其他)

    搜狗输入法安装可以参考这个:http://www.cnblogs.com/dunitian/p/6662374.html 1.kali默认是没有中午输入法的,需要自己安装一下 2.首先我们先获取roo ...

  6. [APIO2018] Duathlon 铁人两项

    不经过重点,考虑点双 点双,考虑圆方树 两个点s,t,中间路径上,所有点双里的点都可以经过,特别地,s,t作为割点的时候,不能往后走,也就是不能经过身后的方点 也就是,(s,t)经过树上路径上的所有圆 ...

  7. JAVA字符串格式化-String.format()的使用 【生成随机数补0操作】

    转: JAVA字符串格式化-String.format()的使用 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的s ...

  8. StratifiedKFold与GridSearchCV版本前后使用方法

    首先在sklearn官网上你可以看到: 所以,旧版本import时: from sklearn.cross_validation import GridSearchCV 新版本import时: fro ...

  9. 78. Subsets(M) & 90. Subsets II(M) & 131. Palindrome Partitioning

    78. Subsets Given a set of distinct integers, nums, return all possible subsets. Note: The solution ...

  10. 【leetcode】 Validate Binary Search Tree

    Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...