深度压缩
DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN CODING:用剪枝、训练量化和霍夫曼编码压缩深度神经网络
这篇论文是Stanford的Song Han的 ICLR2016 的 best paper
1 Abstract
-
论文想解决的问题?
神经网络的计算密集性以及内存密集性使得其在嵌入式设备上难以部署
-
论文如何解决该问题?
-
通过剪枝减少连接数量
-
通过量化权重增加共享权重
-
应用哈夫曼编码
-
-
应用结果
-
减少AlexNet、VGG-16在ImageNet上的训练所需内存,不掉精度
-
允许将模型装入片上静态存储器,而不是片外动态存储器
-
有效应用于受带宽限制的移动应用
-
在cpu、gpu、移动gpu上更快的分层速度和能源效率
-
2 Introduction
-
研究背景
3 Network Pruning 网络剪枝
-
剪枝过程 先正常训练学习连接性,然后将权重低于阈值的连接删除(剪枝),最后重新训练网络学习剩余稀疏连接的最终权重。
根据作者之前的论文,阈值(threshold)的计算方式为:
s是参数,称为灵敏度,std为层权重参数的标准差
-
存储方式
补充知识:在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵对于稀疏矩阵来说,采用二维数组的存储方法既浪费大量的存储单元用来存放零元素,又要在运算中花费大量的时间来进行零元素的无效计算。所以必须考虑对稀疏矩阵进行压缩存储。
通过压缩稀疏行(CSR) 或者压缩稀疏列(CSC)格式,来存储剪枝后的稀疏结构。CSR实现细节:Compressed Sparse Row(CSR)——稀疏矩阵的存储格式 - 知乎 (zhihu.com)
-
为了进一步压缩
4 训练量化和权重共享
TRAINED QUANTIZATION AND WEIGHT SHARING
-
通过减少表示权重的比特位数量,网络量化和共享权重将更大程度的压缩被修剪后的网络。通过让多个连接共享相同的权重来限制需要存储的有效权重的数量,然后对这些共享权重进行微调。
-
权重被量化为四个箱(颜色),同一个箱的所有权重共享一个权值,因此对于每个权重,只需要将一个小索引存储到共享权重表中。在更新期间,所有梯度都按颜色分组并相加在一起,乘以学习率并被上次迭代的共享质心减去从而得到新的共享质心。
-
压缩率计算
n为连接数,k为簇数,b为每个连接所占位数
比如上图,原本有4x4=16个连接每个占32位,16个权重值,将其分为4簇,则n=16,b=32,k=4则 r = 16 x 32 ÷ (16 x log4 + 4 x 32) = 3.2
-
权重初始化 质心初始化影响聚类质量,从而影响网络的预测精度。作者采用以下三种方法:
(1)Forgy 随机初始化
(2)基于密度初始化
(3)线性初始化:初始化在原始权重的[min,max]之间线性间隔质心。与前两种方法相比,该初始化方法对权重的分布是不变的,并且是最分散的。
实验表明线性初始化效果最佳。
-
前馈和反向传播
一维k均值聚类的中心是共享权值。在查找权值表的前向阶段和后向传播阶段存在一个间接层。为每个连接存储共享权重表的索引。在反向传播过程中,计算每个共享权的梯度,并用于更新共享权。
质心梯度计算公式:
L表示损失,Wij表示权重,I表示Wij的质心索引,Ck表示层的第k个质心,指示符函数
-
哈夫曼编码
Huffman Coding 是一种非常常用的无损编码技术。它按照符号出现的概率来进行变长编码。上图的权重以及权值索引分布来自于AlexNet的最后一个全连接层。由图可以看出,其分布是非均匀的、双峰形状,因此我们可以利用Huffman编码来对其进行处理,最终可以进一步使的网络的存储减少20%~30%。
5 实验
略
6 代码
我将模型剪枝进行了简单的复现,采用的是百分比取阈值的方式
项目连接:
参考:
【深度神经网络压缩】Deep Compression (ICLR2016 Best Paper) - 知乎 (zhihu.com)
标签:剪枝,DL,精读,权重,初始化,压缩,存储,共享 From: https://www.cnblogs.com/overlord/p/16881368.html