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. 一本通1640C Looooops

    1640:C Looooops 时间限制: 1000 ms         内存限制: 524288 KB [题目描述] 原题来自:CTU Open 2004 对于 C 语言的 for (variab ...

  2. poj2135 Farm Tour(费用流)

    Description When FJ's friends visit him on the farm, he likes to show them around. His farm comprise ...

  3. 5Java异常处理

    五.异常 异常概念总结:   练习一:异常的体系    问题:    1. 请描述异常的继承体系    2. 请描述你对错误(Error)的理解    3. 请描述你对异常(Expection的理解) ...

  4. mysql 分组取每个组的前几名的问题

    select *from hotel_addition_orders awhere (select count(*) from hotel_addition_orders where hotel_or ...

  5. 企业级 SpringBoot 教程 (一)构建第一个SpringBoot工程

    简介 spring boot 它的设计目的就是为例简化开发,开启了各种自动装配,你不想写各种配置文件,引入相关的依赖就能迅速搭建起一个web工程.它采用的是建立生产就绪的应用程序观点,优先于配置的惯例 ...

  6. 洛谷 P1309 瑞士轮 解题报告

    P1309 瑞士轮 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较低 ...

  7. 七、spring boot 1.5.4 集成shiro+cas,实现单点登录和权限控制

    1.安装cas-server-3.5.2 官网:https://github.com/apereo/cas/releases/tag/v3.5.2 下载地址:cas-server-3.5.2-rele ...

  8. python---补充django中文报错(1),Django2.7使用sys.setdefaultencoding('utf-8'),以及使用reload(sys)原因

    SyntaxError at /blog/ news/story Non-ASCII character , but no encoding declared; see http://python.o ...

  9. Spark记录-Scala函数

    Scala函数 Scala有函数和方法. Scala方法是一个具有名称和签名的类的一部分. Scala中的函数是一个可以分配给变量的完整对象. 函数定义可以出现在源文件中的任何位置. 不带参数的函数 ...

  10. Spark记录-Scala异常与处理

    Scala try-catch语句 Scala提供try和catch块来处理异常.try块用于包含可疑代码.catch块用于处理try块中发生的异常.可以根据需要在程序中有任意数量的try...cat ...