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

posted @ 2017-04-10 16:31  牧马人夏峥  阅读(1898)  评论(1编辑  收藏  举报