论文记录-Deep Compression:Compressing DeepNeural Networks With Pruning, Trained Quantization And Huffman
Posted 莫失莫忘Lawlite
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论文记录-Deep Compression:Compressing DeepNeural Networks With Pruning, Trained Quantization And Huffman相关的知识,希望对你有一定的参考价值。
- 本文个人博客访问地址:点击查看
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
- 比如
- 主要包括
val | 10 | -2 | 3 | 9 | 3 | 7 | 8 | 7 | 3 … 9 | 13 | 4 | 2 | -1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
col_index | 1 | 5 | 1 | 2 | 6 | 2 | 3 | 4 | 1 … 5 | 6 | 2 | 5 | 6 |
row_ptr | 1 | 3 | 6 | 9 | 13 | 17 | 20 |
---|
- 所以总共需要的大小为:2a+n+1
- a
为矩阵非零元素的个数
- n
为行数
4、训练分层量化
- 比如所有的权重聚成
4
类,cluster index
表示每个权重对应的类别 - 梯度采用同一类别内进行累加,然后进行微调更新
- 假设有n
个连接,每个连接的用b
bits
来表示,并假设有k
个cluster
, 只需要
log2(k)
bits
去表示索引,则压缩率可以为:
-
nb
即为没有聚类前总共需要的
bits
- nlog2(k)+kb 就是聚类索引的
bits
加上聚类后连接需要的
bits
- 比如上面的例子为: 16∗3216∗2+4∗32=3.2
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
以上是关于论文记录-Deep Compression:Compressing DeepNeural Networks With Pruning, Trained Quantization And Huffman的主要内容,如果未能解决你的问题,请参考以下文章
论文记录-Deep Compression:Compressing DeepNeural Networks With Pruning, Trained Quantization And Huffman
论文 PPT Human-level control through deep reinforcement learning(DQN)
#论文阅读&CTG Fetal Hypoxia Detection Based on Deep Convolutional Neural Network with Transfer Learn