论文记录-Deep Compression:Compressing DeepNeural Networks With Pruning, Trained Quantization And Huffman
来源:互联网 发布:iphone软件下载 编辑:程序博客网 时间:2024/06/01 08:23
- 本文个人博客访问地址:点击查看
1、概述
- 压缩主要分为三个阶段:剪枝(
pruning
)、训练分层(trained quantization
)以及 哈夫曼编码(Huffman coding
) - 可以压缩
35
到49
倍,并且不影响精度 - [模型压缩的主要用于还是能够用于小型的设备上,例如手机端等,比如Google的
Mobile Net
, 但是准确度肯定要比正常的电脑端训练的大网络低一些,在所难免] - [一般的训练好的神经网络模型文件有几百兆的大小,比如Google预训练好的模型,计算量也很大,在手机端运行不太现实]
2、Pipline
- 剪枝可以压缩10倍左右,加上分层可以达到27到31倍,再加上哈夫曼编码可以达到35到49倍
- 剪枝:去除多余的连接,比如权重非常小的连接
- 分层:我感觉像是聚类,多个连接共享一个权重
3、剪枝
- 主要是删去权重值
weight
比较小的,(设置为0),可以设置一个阈值(threshold
) - 所以权重矩阵变的比较稀疏,可以采用压缩行存储(
Compressed Row Storage(CRS)
)或列存储来存储稀疏矩阵- 主要包括
3
个数组,浮点值数组val
,两个整形数组col_index
,row_ptr
val(k) = a(i,j), col_index(k) = j
row_ptr
是每行数据第一个非0元素在val
中的索引,最后加上一位非0元素的个数,即row_ptr(n+1) = a+1
- 比如
- 主要包括
- 所以总共需要的大小为:2a+n+1
- a
为矩阵非零元素的个数
- n
为行数
4、训练分层量化
- 比如所有的权重聚成
4
类,cluster index
表示每个权重对应的类别 - 梯度采用同一类别内进行累加,然后进行微调更新
- 假设有n
个连接,每个连接的用b
bits
来表示,并假设有k
个cluster
, 只需要bits
去表示索引,则压缩率可以为:
-
nb
即为没有聚类前总共需要的bits
-
bits
加上聚类后连接需要的bits
- 比如上面的例子为:
4.1 权值共享
- 使用
k-means
算法进行聚类,确定每一层共享的权重,在一个cluster
中的权重共享,注意这里没有跨层 - 将
W={w1,w2,...,wn} 聚为C={c1,c2,...,ck} 类, 其中n>>k
- 优化函数为:
argminc∑i=1k∑w∈ci|w−ci|2
- 优化函数为:
4.2 共享权重的初始化方法(三种)
Forgy
: 就是随机初始化方法初始化聚类的中心,如下图,因为权重分布有两个峰值,初始化的值都在峰值附近- 基于密度的初始化方法:如下图,先是根据累积分布函数(
CDF
)线性等分y轴,然后根据CDF
找到对应的x
轴的坐标,即为聚类的中心。(也是在峰值附近,和Forgy
方法相比更分散一些) - 线性:就是根据权重的最小值和最大值等分,分散性最大
- 神经网络中一般权重值越大,它的作用也就越大,所以对于前两种初始化方法都是在峰值附近,也就意味着值少的地方很小的概率会被初始化,所以不太好,实验中线性初始化的效果最好(但是大权重值的是很少的)
4.3 前向和反向传播
- 计算时查表就可以了
- 反向传播用于更新聚类中心的权重值
∂L∂Ck=∑ij∂L∂Wij∂Wij∂Ck=∑ij∂L∂WijΓ(Iij=k) - 其中
L
是损失函数,Ck 是第k
个聚类的中心 Iij 为聚类中心的索引,如下图,就是同一类别梯度求和
- 其中
5、哈夫曼编码
- 就是按照聚类中心的出现的概率从大到小排序进行
Huffman
编码 - 根据上面的结果,权重大都分布在两个峰值附近,所以利于
huffman
编码
6、结果及讨论
- 没有准确度损失
pruning
和quantization
结合使用效果最好- 和之前别人的工作的比较
SVD
压缩了模型但是精度损失较大
- 缺点就是在运行时现有的
GPU
不能进行间接的矩阵输入查找,以及相对索引CSC
或CSR
(下篇论文中也有提及) - [我觉得剪枝和权值共享其实是能够防止过拟合的,所以准确度没有损失]
- [权值共享时是当前层的权值共享,不是整个网络的权值共享]
Reference
- https://arxiv.org/abs/1510.00149
- http://blog.csdn.net/bigpiglet_zju/article/details/20791881
阅读全文
0 0
- 论文记录-Deep Compression:Compressing DeepNeural Networks With Pruning, Trained Quantization And Huffman
- 【论文阅读】Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huff
- 【论文阅读笔记】DEEP COMPRESSION:COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION...
- Compression Deep Neural Networks With Pruning, Trained Quantization And Huffman Coding
- 深度学习(六十九)darknet 实现实验 Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffma
- [deep compression] compressing deep neural networks 论文学习
- Channel Pruning for Accelerating Very Deep Neural Networks 论文笔记
- Deep Compression:Pruning (剪枝模型压缩)
- [论文解读] Deep Compression
- 论文笔记:Mastering the game of Go with deep neural networks and tree search
- Compressing Neural Networks with the Hashing Trick
- speech recognition with deep recurrent neural networks-论文笔记
- ImageNet Classification with Deep Convolutional Neural Networks论文笔记
- ImageNet Classification with Deep Convolutional Neural Networks 论文学习
- ImageNet Classification with Deep Convolutional Neural Networks 论文翻译
- 论文笔记《ImageNet Classification with Deep Convolutional Neural Networks》
- 论文笔记ImageNet Classification with Deep Convolutional Neural Networks(AlexNet)
- 论文笔记:ImageNet classification with deep convolution neural networks
- Spring3+Spring-data-mongodb1.5.6示例
- 数据库存储过程
- 【LeetCode算法练习(C语言)】Median of Two Sorted Arrays
- GAN论文整理
- ubuntu设置开机启动程序
- 论文记录-Deep Compression:Compressing DeepNeural Networks With Pruning, Trained Quantization And Huffman
- Slf4j (一) HelloWorld示例
- 抓取数据为json文件,读入csv
- 基于Redis的简单分布式锁的原理
- HTML+CSS+JS面试题(附带答案)
- Java开发者必读的10篇精选优秀技术文章
- 单源最短路问题 Codevs 1557 热浪(含讲解)
- html1、2两天补充
- mysql索引