Paper:Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding
论文链接:https://arxiv.org/abs/1510.00149
ICLR 2016的best paper,通过剪枝、量化、哈夫曼编码三步混合来做模型压缩。
Introduction
整个算法流程主要为上图三部分:
1.剪枝:将部分很小的权值设为0,使权值矩阵转为一个稀疏矩阵。
2.量化:将剪枝后保留的权值进行量化,使剪枝后保留的权值共享使用的值,这样可以减小保存权值使用的空间,进一步压缩所需要的存储空间。
3.哈夫曼编码:霍夫曼编码是一种编码形式,进一步减小数据保存需要的存储空间。
Pruning
CSR将原始矩阵分为三部分,AA,JA,IC
将原始n×n大小的稀疏矩阵用2a+n+1个数值表示。
作者在CSR和CSC的基础上,将index上的值由绝对坐标转为偏移量表示,减少了存储
剪枝的实现过程:
1.设定一个阈值,绝对值大于这个阈值的权值被保留,其他权值被置0。
2.使用存储稀疏矩阵的压缩存储方式存储剪枝过后的权值矩阵(例如CSR、CSC)。
Quantization
流程:
量化的实现:
1.初始化k-means质心:k-means质心的初值对结果的影响很大,有三种方法:均匀量化,随机量化和按密度量化,作者证明使用均匀量化的初始化效果较好。
2.确定量化阈值:确定对于每一个权值使用哪个量化输出来代替。
3.进行微调:对k-means的质心再进行微调。
对k-means的质心进行微调:
由于剪枝的作用,矩阵已经成为稀疏矩阵,权值矩阵中为0表示该连接被移除,因此这些位置的梯度被舍弃。
n是权重的数量,b是原始的每个权值的比特数,k为量化簇的数量
量化:
完成量化后,原来的稀疏矩阵变为一个稀疏矩阵加一个查找表,达到了压缩的目的。
Huffman Coding
该图显示了压缩前和压缩后的长度分布
Experiment
Deep Compression能够在不损失精确度的情况下把参数压缩到35到49倍。