本文为Deep compression的论文笔记,相应的ppt及文字讲解

原论文《 Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman coding》https://arxiv.org/abs/1510.00149

Deep compression论文讲解——PPT加说明文字

大家好,今天给大家带来的是一篇关于模型压缩的论文,Deep compression,这篇文章是ICLR2016年的best paper。作者韩松是专门做模型压缩和机器学习硬件加速的。这篇文章通过剪枝,权值共享和权值量化的方法把一些经典的深度学习模型压缩了非常多倍,取得了很好的效果。

Deep compression论文讲解——PPT加说明文字

Deep compression论文讲解——PPT加说明文字

为什么选这篇文章呢?因为模型压缩一直是机器学习的一个重要方向,并且一个模型不可能只在GPU和服务器上运行才可以。只有通过硬件化实现才能落地。但是神经网络也是非常耗费存储和耗费运算的。本文希望通过一些方法把原本耗费大量存储和运算的神经网络实现在硬件上。

本文采用的方法是剪枝,权值共享和权值量化,还有哈夫曼编码的方法。剪枝就是去掉一些不必要的网络权值,只保留对网络重要的权值参数;权值共享就是多个神经元见的连接采用同一个权值,权值量化就是用更少的比特数来表示一个权值。对权值进行哈夫曼编码能进一步的减少冗余。

作者在经典的机器学习算法,AlexNet和VGG-16上运用上面这些模型压缩的方法,在没有精度损失的情况下,把AlexNet模型参数压缩了35倍,把VGG模型参数压缩了49倍,并且在网络速度和网络能耗方面也取得了很好的提升。

Deep compression论文讲解——PPT加说明文字Deep compression论文讲解——PPT加说明文字

首先,网络通过正常的训练,训练出相应的权重,然后把低于某个阈值的权重删除掉,然后再训练模型,一次次去掉冗余的链接。然后网络把保留的权重进行聚类和权值共享,然后通过训练不断调整聚类的中心点和聚类的数量,然后将最后的权值和权值索引进行哈夫曼编码。达到模型压缩的效果。下面详细讲解这些步骤。

Deep compression论文讲解——PPT加说明文字

首先是剪枝,首先通过正常训练相应的网络,然后设置一个阈值,把小于阈值的连接置为0,然后重新对网络进行训练,重复上面两个步骤来减少相应的权重连接。然后我们得到的是一个稀疏的权值矩阵。

比如我们这个稀疏的矩阵里面,n×n的矩阵,里面大多数的值是零值,然后我们通过相应的存储稀疏矩阵的方式对这个矩阵进行存储。首先把所有的非零值存为AA,假设所有的非零值的元素的个数为a,然后把每一行第一个非零元素对应在AA的位置存为JA,最后一个数是所有非零元素的个数+1,所以JA中的元素就是行数n+1,然后把AA中每一个元素在原始矩阵中的列存为IC。所以我们把一个原始的n×n的稀疏矩阵存为2a+n+1个数字。

在压缩完参数之后,我们存了权值和权值对应的参数。之前的参数存的是绝对的参数,我们现在存相对的参数,就是两个参数的差值,比如我们用三个特存相对的参数,只要两个元素的距离小于8,都能把参数存为3个比特的,如果两个参数的距离大于这个值,我们就在第8个位置设置一个0值。

Deep compression论文讲解——PPT加说明文字

在进行了剪枝之后,我们只保留了重要的权值,然后我们对这些权值进行k-means的聚类。比如我们聚类数量是k,那么表示该类需要用的的比特数是log2(k),然后我们采用聚类中心点的值作为类内共享的权值。比如图中,相同颜色的权值就在同一类之中,他们共享聚类中心点的权值。这样,我们只需要存储每一个权值属于哪一类,需要log2(k)个比特,和每一类的中心点的值。压缩率可以这样得出来,分子n是有n个权值要存储,b就是原始的每个权值的比特数,nb就是原来需要存储这些权值需要的比特数。分母n乘以log2(k)就是这n个权值需要乘以log2(k)个比特来表示每个权值的类,然后kb是所有类的中心点需要耗费的存储。

相应的梯度是这样更新的,只需要更新聚类的中心点的位置就好,我们把聚类内对应位置的梯度加起来,作为新的梯度,乘上学习率然后用聚类内中心点减去这个值。

Deep compression论文讲解——PPT加说明文字

权值共享的是聚类中心点的位置,初始的聚类中心点是如何确定的呢?有三种方法可以确定聚类中心点的位置。一是随机的方法,就是在权值中随机的选k个值做为聚类中心点。还有一种是基于密度的初始化,我们可以看这个图,横轴是对应的权值的值,纵轴是权值的数量,类似于直方图一样。红色的线是权值的直方图统计,蓝色的线是权值的累积统计,类似于概率密度函数和概率累积函数。基于密度的初始化就是把权值从小到大等分成k份,然后每一份分界点的权值就是聚类的中心。线性的初始化就是直接把最小值最大值之间直接线性进行划分。

因为网络中大的权值往往是更重要的,前两种方法容易让聚类的中心点往概率密度大的地方累积,而线性分类法权值更容易是大的。所以线性的初始化方法比较好,通过后面的实验,也发现通过线性的分类方法取得了更好的准确率。

Deep compression论文讲解——PPT加说明文字

哈夫曼编码运用字符出现的概率来进行编码,只要不是均匀分布的,哈夫曼编码就能减少一定的冗余,比如在AlexNet中,相应的权值的直方图和权值参数的直方图是上面这两种,用哈夫曼编码可以减少20-30%的信息冗余。

Deep compression论文讲解——PPT加说明文字

Deep compression论文讲解——PPT加说明文字

首先第一个实验,不同压缩方法在不同压缩率下精度的损失。横轴是压缩率,越靠左压缩率越大,纵轴是精度的损失,就是压缩之前和压缩之后的准确率的减少的量。这条曲线越靠左上越好,表明更大压缩率下精度损失更少,我们看到最好的方法就是剪枝和权值共享和权值量化的方法。

然后就是权值共享过程中,聚类的初始化值对实验结果的影响,三条曲线分别是上面讲到的三种不同的聚类方法。横轴是压缩的比特数,越靠左表明压缩的比率越大,纵轴是准确率,表明随着压缩的越来越少的比特数,精度越来越低,所以曲线越靠上越好。效果最好的是红色的这条线,就是我们初始聚类初始化的时候,采用线性初始化的方法能达到最好的效果。

下面这三个图表示不同的压缩率对不同层的影响,第一个是压缩的比特数对全连接层的影响,第二个是压缩的比特数对卷积层的影响,第三个是两个层的压缩比特数对实验结果的影响,我们发现卷积层比全连接层对压缩的比特数更加敏感。

Deep compression论文讲解——PPT加说明文字

然后就是相应的实验,AlexNet压缩了35倍,把VGG压缩了49倍,相比其他的压缩方法,作者的方法没有精度损失并且达到了最大的压缩率。

Deep compression论文讲解——PPT加说明文字Deep compression论文讲解——PPT加说明文字

通过这篇文章,我们受到的启发是,要达到好的效果不一定要通过很复杂的方法,有时候通过简单的方法同样可以达到很好的效果。然后就是一些复杂度模型和复杂的功能通过一些压缩方法是可以达到相应的效果从而硬件实现的。

Deep compression论文讲解——PPT加说明文字















相关文章:

  • 2021-12-12
  • 2021-08-15
  • 2022-12-23
  • 2021-12-06
  • 2021-04-27
  • 2021-11-04
  • 2021-09-30
  • 2021-06-24
猜你喜欢
  • 2021-07-18
  • 2021-10-20
  • 2021-04-18
  • 2021-11-23
  • 2021-07-27
  • 2021-04-17
  • 2022-01-11
相关资源
相似解决方案