DEEP COMPRESSION小记
2016ICLR最佳论文 Deep Compression: Compression Deep Neural Networks With Pruning, Trained Quantization And Huffman Codin
主要针对神经网络模型巨大,在嵌入式机器中比较难运行的问题。
abstruct
压缩网络包括三个阶段:pruning, trained quantization and Huffman coding,能将模型减小1/35~1/49,并且不影响精度。首先
只通过学习重要连接来剪枝网络,接着量化权重,使得权重共享;最后使用Huffman编码进一步压缩。经历了前两个阶段后,重新训练网络
来fine tune剩下的连接和quantized centroids。剪枝使得连接减小1/9~1/13,量化使得bits从32减小至5。如下图所示。
Network Pruning
网强剪枝经常被用在减小模型复杂度避免过拟合上。剪枝如上图所示:正常训练网络;根据阈值剪掉一些小的连接;对得到的稀疏
网络再训练。
在存储稀疏网络时,采用的是稀疏行(compressed sparse row,CSR) 或稀疏列(compressed sparse column,CSC),
需要2a+n+1个参数。其中a指的是非零元素的个数(非零元素所在列),n是指行数或列数。怎么得来的呢?
假设存在如下一个稀疏矩阵
CSR将原始矩阵分为三部分,AA,JA,IC
其中AA指的是所有非零元素,长度为a;JA指的是每一行第一个非零元素在AA中的位置,最后一个元素为非零元素数加1,长度为
行数加1,即n+1;IC指的是AA中每个元素所对应的列号,长度为a。同理,由这三个指标可得到稀疏矩阵A。所以确定CSR的大小。
为了进一步压缩模型,存储非零元素的绝对索引(index difference)而不是绝对路径,即后面的元素存储的是与前一个非零元素的
索引差值。在论文中,采用bits来编码索引差值。以下图为例,如果采用3bit,则最大的span为8,如果某非零元素距离前一个非零
元素超过8,则将span为8的元素置为0即可。在conv layer和fc layer中,分别采用8bits和5bits对其进行编码。
Trained quantization and Weight sharing
网络量化和权值共享可以通过减少权重表达所需的位数,来进一步压缩剪权网络。通过共享权重来限制有效权重的数量,然后对
共享权重进行fine-tune。
在Fig3中,左上为权值矩阵,左下为gradient矩阵。作者将矩阵进行聚类成4种cluster,得到量化后的
权值矩阵,属于同一类的weight则共享权值。在图中,原来的每个weights需要32位,现在只需2位,压缩了16倍。
Weight Sharing
使用k-means对每一层的weight聚类,同属一个cluster共享权值,跨层的weight不进行权值共享。对于
k-means来说,初始点的中心选择很重要,作者采用了三种方式:Forgy(random), density-based, and
linear initialization,并以AlexNet中的conv3的权重分布为例,比较了三种方式:
由上图可以看出,Forgy 和 density-based 方法产生的centroids很少落入到大权值的范围中,
造成的结果就是忽略了大权值的作用;而Linear initialization产生的centroids非常平均,没有这个问题存在。
后续的实验结果也表明,Linear initialization 的效果最佳。
量化之后,目标函数的求导就变为了量化后聚类中心的值的求导:
Huffman Coding
Huffman Coding 是一种非常常用的无损编码技术。它按照符号出现的概率来进行变长编码。figure 5为AlexNet的最后一个全连接层
权重以及权值索引分布。其分布是非均匀的、双峰形状,因此我们可以利用Huffman编码来对其进行处理,该图显示了压缩前和压缩后的长度分布。
参考:http://blog.csdn.net/zijin0802034/article/details/53982812
http://blog.csdn.net/cyh_24/article/details/51708469
http://blog.csdn.net/boon_228/article/details/51718521
http://blog.csdn.net/shuzfan/article/details/51383809
http://blog.csdn.net/may0324/article/details/52935869
http://blog.csdn.net/wangqingbaidu/article/details/52649775
http://blog.csdn.net/cv_family_z/article/details/51917143
http://blog.csdn.net/stdcoutzyx/article/details/50926174