《Deep Compression》论文笔记

1. 概述

神经网络的模型是计算密集且内存密集的,这就制约了其在嵌入式设备上的使用。文章中的方法分为三个阶段:剪枝、量化训练、霍夫曼编码。量化阶段只会保留重要的filter;量化权重来强制权重共享;使用霍夫曼编码进一步减少模型占用。在前面的两步里面会进行finetune,剪枝会剪除9倍到13倍的连接(全连接?),量化把bit位规定到5。文章的方法将AlexNet从240MB压缩到了6.9Mb,VGG从552MB压缩到了11.3MB。
论文中提出的模型压缩方法可以使用下面这幅图来进行概括,分别表示pruning、quantization、Huffman Encoding三个阶段:
在这里插入图片描述

2. Pruning

总的来说是根据阈值来的,详细步骤如下:
(1)使用常规的网络训练方法学习网络的连接
(2)剪裁小权重的连接:将连接的权重小于某一个 阈值 的连接移除掉。
(3)使用剪裁之后的权重重新学习网络,使得网络连接稀疏
这里对pruning之后的稀疏结构使用压缩稀疏行(compressed sparse row,CSR)或压缩稀疏列(compressed sparse column,CSC)进行保存,这种格式需要 2 a + n + 1 2a + n + 1 2a+n+1个数字,其中 a a a是非零元素的数量, n n n是行或列的数量。为了更近一步压缩,这里存储的是位置偏移而不是绝对空间位置,对卷积层使用8 bits编码,全连接层使用5 bits编码。当需要一个比边界大的索引差时,使用零填充作为解决方案,见下图。以防偏移超过8,最大的3位使用无符号数,加一个补零。
在这里插入图片描述

3. 量化与权值共享

网络的量化与权值共享通过压缩每个权重的bit数更进一步压缩网络的大小。通过权值共享限制有用权值的个数,之后再次基础上进行finetune。
在这里插入图片描述
权值共享的示意图如图3所示。对于原始的权重大小为 4 ∗ 4 4*4 44的,对应的梯度矩阵也是 4 ∗ 4 4*4 44的,那么通过量化之后分别将其量化为 4 4 4个,是原来的 1 4 \frac{1}{4} 41,从而减少参数的数量。
在论文中给出了压缩比的计算公式,如下所示:
r = n b n ⋅ l o g 2 ( k ) + k b r=\frac{nb}{n\cdot log_2^{(k)}+kb} r=nlog2(k)+kbnb
使用上图中的权值共享作为例子,对于原始给定的 4 ∗ 4 = 16 4*4=16 44=16个权重用 4 4 4个权重去代表,也就是使用4个32位的数字与16个2bit来存储原来16个32位的数据,那么压缩比为: 16 ∗ 32 4 ∗ 32 + 2 ∗ 16 = 3.2 \frac{16*32}{4*32+2*16}=3.2 432+2161632=3.2

3.1 权值共享

这里在每个层中使用k-means方法进行聚类,每个类中的数据使用其中心数值代表。若原始存在 n n n个权重 W = { w 1 , w 2 , … , w n } W=\{w_1,w_2,\dots,w_n\} W={w1,w2,,wn}聚类到 k k k个中心 C = { c 1 , c 2 , … , c k } C=\{c_1,c_2,\dots,c_k\} C={c1,c2,,ck},其中 k k k远小于 n n n,那么这个问题可以转化为下面的最优化问题:
在这里插入图片描述

3.2 共享权值的初始化

上一小节中讲到了使用聚类算法去实现权值聚类,从而实现参数共享。那么聚类中心的初始化就很重要了,论文中讨论了三种初始化方式:Forgy、Density-based、Linear。论文中使用AlexNet中的conv3层进行实验,得到下图中的结果:
在这里插入图片描述

3.3 前向与反向传播

通过前面的聚类压缩等,前向与反向按照对应的映射表来实现的。对于每个聚类之后的共享权值其梯度计算表示为:
在这里插入图片描述

4. 霍夫曼编码

对于AlexNet中的全连接层,其权值分布如下图所示,在得到其分布的情况下使用霍夫曼编码进一步编码,压缩空间:
在这里插入图片描述

5. 实验结论

论文中分别使用MINIST与ImageNet数据集进行实验,将AlexNet从240MB压缩到了6.9MB,详见下表。
在这里插入图片描述
作者在实现pruning的时候是在blob上使用mask来控制连接的;在量化与权值共享的时候,量化和权重共享是通过维护一个存储共享权重的码本结构,以及在计算每个层的梯度后按索引分组来实现的。每个共享的权重都被更新为该bucket中的所有梯度;对于霍夫曼编码是finetune完成之后离线完成的。

6. 讨论

6.1 网络量化与剪裁

这里论文对网络量化与剪裁它们的关系与组合的效果,下面这幅图是单独量化、剪裁、量化剪裁组合与矩阵分解对网络精度的影响:
在这里插入图片描述
在论文中指出在未剪裁网络上进行量化与剪裁之后网络再量化,对于网络精度的影响曲线,见下图
在这里插入图片描述
可以在图中看到在三个场景下实线部分都是较虚线部分略好的,论文中给出的解释是:剪裁和为剪裁的网络在参数量上肯定是不一样的,那么在相同的聚类中心数目下,剪裁之后的网络再进行量化得到的误差相对来说更小一些。

6.2 聚类初始化方法

在上面的内容中说到了三种聚类的初始化方法,论文这里对其进行了细致比较,见下图
在这里插入图片描述
从上图可以看出,uniform init初始化(Linear)好于其它的初始化方法,文中给出的解释是:这样的选择方式很好照顾到了权值中比较大的成分,从而有利于网络性能,给出的直观解释就是权值越大,越重要。

7. 个人感悟

这篇文章是一篇较为工程性质的文章,给出了如何实现model压缩的思路以及流程。剪枝、量化、编码都涉及到了,需要网络压缩比较厉害的可以仔细研究一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值