摘要

Neural networks are both computationally intensive and memory intensive, making them difficult to deploy on embedded systems with limited hardware resources. To address this limitation, we introduce "deep compression", a three stage pipeline: pruning, trained quantization and Huffman coding, that work together to reduce the storage requirement of neural networks by 35x to 49x without affecting their accuracy. Our method first prunes the network by learning only the important connections. Next, we quantize the weights to enforce weight sharing, finally, we apply Huffman coding. After the first two steps we retrain the network to fine tune the remaining connections and the quantized centroids. Pruning, reduces the number of connections by 9x to 13x; Quantization then reduces the number of bits that represent each connection from 32 to 5. On the ImageNet dataset, our method reduced the storage required by AlexNet by 35x, from 240MB to 6.9MB, without loss of accuracy. Our method reduced the size of VGG-16 by 49x from 552MB to 11.3MB, again with no loss of accuracy. This allows fitting the model into on-chip SRAM cache rather than off-chip DRAM memory. Our compression method also facilitates the use of complex neural networks in mobile applications where application size and download bandwidth are constrained. Benchmarked on CPU, GPU and mobile GPU, compressed network has 3x to 4x layerwise speedup and 3x to 7x better energy efficiency.

必要性

1. 应用商店普遍对于应用大小有约束，过大的深度模型不利于应用的发布；
2. 能耗主要由内存访问决定。论文给出了一个报告：
1. 45nm CMOS技术下，32位浮点加法耗费0.9pJ32SRAM缓存访问耗费5pJ32DRAM内存访问耗费640pJ，其是加法运算耗费能源的3个数量级，所以片外磁盘数据访问占据了最多的能量消耗；
2. 运行一个10亿连接的神经网络，以20fps频率实现，1秒内的DRAM访问就需要(20Hz)(1G)(640pJ)=12.8W

深度压缩

简介

• 第一步：剪枝训练，移除冗余连接；
• 第二步：量化训练，对权重进行量化，对多个连接执行权重共享，通过训练恢复模型精度；
• 第三步：应用霍夫曼编码进一步压缩存储空间。

网络剪枝

• 首先进行正常的网络训练；
• 然后修剪不重要的剪枝；
• 最后重训练稀疏模型以恢复损失精度。

训练量化

1. 通过聚类算法量化每层网络的权重，处于同一簇的参数共享同一个大小；
2. 重训练阶段，求和同一簇参数计算得到的梯度，对质心进行梯度下降训练。

权重共享

• 假定当前层有4个输入神经元和4个输出神经元，所以其矩阵大小为$$4\times 4$$，如左上角所示；
• 将权重量化到4个区间（用4种颜色表示），在同一个区间内的参数共享同一个权重，如中上角所示；
• 在训练阶段
• 不同位置参数计算得到不同大小的梯度，如左下角所示；
• 将处于同一簇的权重梯度进行求和，如中下角所示；
• 仅需对每个区间的质心进行梯度下降运算即可，如右图所示。

质心初始化

• CDF表示权值的累积统计；
• PDF表示权值的直方图统计，在上图呈现双峰分布。
1. 随机初始化。从参数矩阵中随机选择$$k$$个权重作为初始质心，在左图中用黄色表示，其选择质心分布符合PDF；
2. 基于密度初始化。在y轴上线性地分隔CDF，然后找到与CDF的水平交点，最后找到x轴上的垂直交点，该交点成为质心，如上图蓝点所示。这种方法使两个峰周围的质心更密集，但比随机初始化方法更分散；
3. 线性初始化。对原始权重的[最小值，最大值]进行线性等分。这种初始化方法不依赖于权重的统计分布，与前两种方法相比是最分散的。

量化压缩率

$r = \frac{nb}{nlog_{2}(k) + kb}$

$r=16*32/(4*32+2*16)=3.2$

霍夫曼编码

• 量化权重呈现双峰分布；
• 稀疏矩阵下标差大部分在20以内；

实验

AlexNet/VGGNet-16

ImageNet数据集上，AlexNet能够实现35倍的压缩率，VGGNet-16能够实现49倍的压缩率