DEEP COMPRESSION:

DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN CODING
github 源码地址

Introduce

本篇论文是ICLR2016年的best paper,主要讲述关于深度学习网络参数的压缩工作。论文主要从下三点出发:

  1. pruning
  2. train quantization
  3. huffman coding

本文首先对网络进行剪枝,只保留重要的连接;第二步通过参数共享量化权重矩阵;第三步对量化值进行huffman编码,进一步压缩。整个网络在不影响性能的情况下,能够将参数量降低到原来的1/49~1/35。
在ImageNet数据集上,压缩后的网络的实验结果如下所示:
1. AlexNet在不影响精度的前提下,参数从240M减少到6.9M,35×\times
2. VGG-16在不影响精度的前提下,参数量从552M减少到11.3M,49×\times
3. 模型能够在DRAM运行。
4. 运行速度提高3-4倍。
5.消耗能量减少到原来的1/7~1/3。



从图1可以看出网络的基本流程,首先移除冗余的连接,只保留权值比较大的连接,得到剪枝后的网络;第二步,权重进行量化,然后多个连接共享一个参数,只保存码本和索引;第三步,使用huffman编码,压缩量化的值。

Network pruning

在深度学习训练的过程中,会学到连接的参数。剪枝的方法也很简单,连接的权值小于一定阈值的直接移除,最终就得到了稀疏的网络连接。剪枝这一步骤能够将VGG-16(AlexNet)参数降低到原来的1/13(1/9)。
稀疏矩阵用compressed sparse row(CSR)和compressed sparse column(CSC)的格式进行压缩,总共需要2a+n+1个存储单元,a是非零元素个数,n是行数或者列数。
网络剪枝的过程如figure 2所示:


一个4*4的矩阵可以用一维16数组表示,剪枝时候,只保留 权值大于指定阈值的数,用相对距离来表示,例如idx=4和idx=1之间的位置差为3,如果位置差大于设定的span,那么就在span位置插入0。例如15和4之间距离为11大于span(8),所以在4+8的位置插入0,idx=15相对idx=12为3。这里span阈值在卷积层设置为8,全连接层为5。

Train Quantization And Weight Shared


图3假定某层有4个输入单元4个输出单元,权重矩阵为4*4,梯度同样为4*4。假设权重被量化为4类,用四种颜色标识。用每类量化的值代表每类的权值,得到量化后的权值矩阵。用4个权值和16个索引就可以计算得到4*4权重矩阵连接的权值。梯度矩阵同样量化为4类,对每类的梯度进行求和得到每类的偏置,和量化中心一起更新得到新的权值。
压缩率计算方法如下公式所示:

r=nbnlog2k+kb(1)

r=\frac{nb}{n\log_2{k} + kb} \quad (1)
公式(1)n代表连接数,b代表每一个连接需要b bits表示,k表示量化k个类,k类只需要用 log2(k)log_2(k)个bit表示,n个连接需要 nlog2(k)nlog_2(k)索引,还需要用 kbkb表示量化中心的数值。
拿图3为例,有16个连接,每一个连接需要用32位的数值进行比较,量化为4类,每类只需要两个bit表示,每类的量化中心值32位。

r=16∗3216∗log2(4)+4∗32=3.2

r=\frac{16*32}{16*log_2(4)+4*32} =3.2
在量化为k个类时,作者采用了K-means聚类方法,把原始的n个权重 W={w1,w2,......,wn}W=\{w_1,w_2,......,w_n\}使用聚类算法变为k个聚类中心 C={c1,c2,......,ck}C=\{c_1,c_2,......,c_k\}。聚类算法最小化类内误差,目标函数如下所示:

argminC∑i=1k∑w∈ci|w−ci|2(2)

arg\min_C\sum_{i=1}^k\sum_{w\in c_i}|w-c_i|^2\quad (2)
聚类中心的初始化也会影响网络的精度,作者提出了三种初始化方法,分别为:

  1. Forgy: 从原始的数据集中随机选取k个值作为聚类中心,从figure4可以看出,原始的数据符合双峰曲线,所以初始化的值集中在两个峰顶附近。
  2. Density-based:在Y轴平分CDF曲线,然后找到对应的X轴位置,作为初始化聚类中心。这种方法初始化距离中心也是在双峰附近,但是比Forgy相对稀疏。
  3. Linear:找到权值的最大值和最小值,在[min,max]区间内平均划分k份,作为原始的聚类中心。

但是在深度学习中,大的权值说明对该因素的影响大,但是实际上,大的权值在参数中很少,如果采用1,2方法进行初始化,可能会把大的权值量化为小的值,影响实际效果。所以线性的初始化效果最好。


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

∂L∂Ck=∑i,j∂L∂Wi,j∂Wi,j∂Ck=∑i,j∂L∂Wi,j1(Ii,j=k)(3)

\frac{\partial L}{\partial C_k}=\sum_{i,j}\frac{\partial L}{\partial W_{i,j}}\frac{\partial W_{i,j}}{\partial C_k} = \sum_{i,j}\frac{\partial L}{\partial W_{i,j}}1(I_{i,j}=k)\quad(3)
1(.)1(.)是指示函数。

Huffman Coding

聚类中心,需要用log2(k)log_2(k)的bit作为索引,这里可以使用变长的huffman编码进一步压缩。figure 5显示了压缩前和压缩后的长度分布。


Experiment

作者把上述方法分别在Lenet,AlexNet和VGG上,在MNIST和ImageNet的数据集测试实验结果:



论文还有一些关于discuss部分以及实验结果就不再仔细阐述了,相关内容请阅读论文。

Conclusion

深度学习最近几年很火热,但是终究由于需要资源过多的原因,并没有在移动设备上大量应用,这也是深度学习的缺陷之一,这也是很多科研人员努力的解决的问题。本文就是基于网络参数压缩作的工作,还有相关研究从硬件出发设计符合深度学习的芯片,我们研究所的寒武纪公司就是代表。希望未来不远,移动芯片都能良好的使用深度学习。
最后推荐一下ICLR这个会议,最近几年的举办的会议,FeiFei Li,Lecun Yan, Bengio等大牛都在上面发表文章。

Reference

DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN CODING ICLR2016 song han, Huizi Mao,William J.Dally

DEEP COMPRESSION(深度学习网络参数压缩)相关推荐

  1. 直观的获得MATLAB训练得到的深度学习网络参数与结构

    在MATLAB当中可以通过在"命令行窗口"输出help trainNetwork获得简单的深度学习网络的搭建的代码. 为了获得经过训练得到的深度学习模型的结构与学习参数个数,而不用 ...

  2. 面向弹载图像的深度学习网络压缩方法研究

    这里写自定义目录标题 源自:航空兵器 作者:高一博 杨传栋 陈栋 凌冲 摘 要 针对基于深度学习目标识别算法具有网络结构复杂.参数量大.计算延迟高等特点,难以直接应用于弹载任务的问题,对网络轻量化方法 ...

  3. 图像超分中的深度学习网络

    图像超分中的深度学习网络 质量评估 操作通道 有监督算法 预上采样 后采样超分 逐步上采样 迭代上下采样 上采样的学习方式 残差块 递归学习 多路径学习 密集连接 通道注意力机制 其他卷积 像素递归网 ...

  4. 何恺明团队新作!深度学习网络架构新视角:通过相关图表达理解神经网络

    标题&作者团队 导语:恺明大神出品,必属精品.Facebook的研究员从一个新奇的角度对神经网络的表示与设计进行探索,提出了一种新颖的相关图表示方式.它有助于对现有网络架构进行更深层次的分析与 ...

  5. 如何利用扬声器构建深度学习网络?

    简 介: 来自于康纳尔大学的这篇研究论文给出了 一个利用物理系统实现深层网络学习和推理的框架.本文对于文章举例的三个系统不属于线性时不变系统进行分析.除了其中SHG系统比较复杂之外,其它两个系统(三极 ...

  6. MIT探索深度学习网络的基础理论

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

  7. SSRNet:用于大规模点云表面重建的深度学习网络(CVPR2020)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 整理人:袁赣张秦,付前程,张琛,廖新耀 论文: [1] Zhengxin Mi#, Yiming Lu ...

  8. 深度学习网络调参技巧

    深度学习网络调参技巧 本文转载自[炼丹实验室],讲了一些深度学习训练的技巧,其中包含了部分调参心得:深度学习训练心得.不过由于一般深度学习实验,相比普通机器学习任务,时间较长,因此调参技巧就显得尤为重 ...

  9. matlab 创建简单的深度学习网络用于分类

    matlab 2018以上版本.如果不是2018以上版本,需要单独安装工具箱Deep learning toolbox 此示例说明如何创建和训练简单的卷积神经网络来进行深度学习分类.卷积神经网络是深度 ...

最新文章

  1. python扫雷 广度优先_Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper)...
  2. Delphi连接AutoCAD_计算任意线条的长度宏的嵌套
  3. .NET Core系列 :4 测试
  4. win10打字突然变成繁体
  5. android 退出多个activity,Android 中 退出多个activity的经典方法
  6. 浏览器弹窗怎么设置显示url_谷歌浏览器Chrome76版本地址栏不显示HTTPS和WWW怎么办?...
  7. tensorflow打印模型结构_五行代码用图提升模型表现,TensorFlow开源NSL神经结构学习框架...
  8. Oracle客户端安装以及PL/SQL Developer安装方法
  9. oracle数据库无法查询,关于oracle中无法查询中文条件的解决办法
  10. Linux—磁盘和文件系统管理(二)
  11. Markdown编辑器初步使用
  12. 罗技g502鼠标使用感受,以及与g402的对比体验
  13. 免费的中文语音数据集汇总列表
  14. 头条App项目测试实战(三)文章写评论功能用例设计
  15. win7如何设置wifi热点_博世壁挂炉“盖世7200i”WiFi功能如何设置
  16. 主图指标,原创极强黄点,将军柱和黄金柱都是3日的
  17. 电脑读卡器,读卡器是什么
  18. 随机位置生成小方块案例
  19. ssh突然无法登录Connection closed by xxx port 22
  20. 等保三级认证备案证明是哪个机构颁发?一般要多久?

热门文章

  1. 这种python反爬虫手段有点意思,看我怎么P解
  2. Android屏幕适配 px,dp,dpi及density的关系与深入理解(转载)
  3. 关于EDP触摸屏使用笔记
  4. android闹钟倒计时_如何在Android上使用闹钟,计时器和秒表
  5. w3af 基于Python的Web应用扫描器
  6. 第六章(1.4)自然语言处理实战——时间语义抽取
  7. 桌面时钟(JS版本)-electron
  8. 下载链接后的MD5是什么意思?
  9. java毕业设计项目材料管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
  10. Fegin远程调用示例实战