剪枝论文阅读《Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration》

论文标题

论文地址:https://openaccess.thecvf.com/content_CVPR_2019/papers/He_Filter_Pruning_via_Geometric_Median_for_Deep_Convolutional_Neural_Networks_CVPR_2019_paper.pdf
项目地址:https://github.com/he-y/filter-pruning-geometric-median

原创文章,转载请标明出处。

一、简介

这是2019年的CV顶会CVPR的一篇剪枝文章。

之前的研究工作都是基于"较小范数不重要"的准则上裁剪神经网络中具有较小范数的卷积核.在这篇论文中,我们分析了基于范数准则并指出该准则的有效性依赖于两个要求,但这两个要求很少同时得到满足.
第一,卷积核的范数值分布偏差必须大,即方差大,才能有足够的搜索空间来选择合适的阈值T,进而很容易将具有较小范数的卷积核裁剪掉;
第二,卷积核中的最小范数必须足够小.即接近于0.而不是相对于其他卷积核较小.
(以上来自文献1的概括)
这篇文章提出了一个新的角度,如果一个filter可以被同一层的其他filters表征,那么说明这层是冗余的,即是可以被删除的。本文不是删除最小范数filters,而是删除最可以被替代的冗余层。删除冗余层对整个层的影响是最小的,可以通过其他filters很快的恢复冗余层的信息。

那么什么样的filter是冗余层呢?什么层可以被同层的其他filters表征呢?
该层的几何中心或者说接近几何中心的filters。在2008年的顶会CVPR的论文《Robust statistics on riemannian manifolds via the geometric median》提到了几何中心可以被几何中心附近的其他filters表征,这个理论奠定了这篇论文的理论基础(还没有看这篇论文,之后有时间再看吧,额,大概率不会看了)

二、业界相关工作

  1. 剪枝对于现在日益加深的网络很有必要,因为很深的网络对边缘端部署很不友好,而且耗时耗资源
  2. 现有的剪枝技术可以大致分为两类,一类是权重剪枝,这类剪枝会得到非结构化的网络结构,无法适用于现有的BLAS加速库;一类是过滤器filter剪枝,这类依旧保留了其他过滤器结构,还可以使用BLAS加速,因此适用性比较广泛。
  3. 按照是否使用了训练数据,也可以分为数据依赖剪枝和不依赖数据的剪枝。不依赖数据的剪枝效率更高,毕竟使用训练数据的剪枝需要消耗更多的算力。
  4. 本文的主要比较对象是2018年的ICLR会议的《Rethinking the
    smaller-norm-less-informative assumption in channel pruning of convolution layers》论文,也没有使用"较小范数不重要"作为剪枝的标准。但是这篇论文依赖于BN层的scaling 参数,对于BN层较少的网络不友好。其次,这篇论文在剪枝之后需要进行finetune,而FPGM将剪枝过程融合在了训练中,所以不需要finetune,模型训练完就是剪枝之后的模型。

三、方法论

1. 为什么不使用"较小范数不重要"这个理论?

在下面的图1(a)中,上面的剪枝策略是采用"较小范数不重要"策略进行剪枝的,可以看到所有的范数较小的过滤器都被剪枝了,留下了范数较大的过滤器。而FPGM中的策略可能会删除范数小的,也可能会删除范数大的。
图1(b)解释了"较小范数不重要"的理论基础。
在这个理论中,根据指定的阈值删除范数较小的过滤器,那么过滤器之间的范数范围必须分布广泛,如果集中在一个很小的数值区域,那么很难判定我们删除的过滤器是无用的。
其次,删除的阈值必须集中在0附近,如果某些层的最小值都离0很远,那么也无法说明这些过滤器是无用的。

Figure1

而实际的情况下,往往无法实现这两个要求。
图2展示了真实情况,在图2(a)中,绿色曲线是真实的分布情况,蓝色是理想状态。真实情况的范数方差远小于理想状态,图2(b)展示了范数的分布头部距离0比较远
Figure 2

在我自己的实践中,如果采用全局指定阈值进行删除,那么往往后面的层删除不了,能删除的主要是浅层过滤器(或许是因为后面层靠近损失函数,较快的得到的训练分布,该分布往往不是0均值或者分布接近0的)

为什么使用几何中心的方式,因为上面解释的,几何中心过滤器往往可以通过其他过滤器表征,因此可以认为是冗余的。

2. 几何中心过滤器怎么计算得到?

对于n个向量,几何中心可以通过下面的公式表征(欧式空间)

向量的几何中心

那么,对于 层的过滤器,几何中心过滤器 可以这么表征(欧式空间),其中 表示 层的 个过滤器, 表示 层的输入层数量,也就是 层的输出层数量,也就是 层的过滤器数量:
欧式空间几何中心过滤器

求解几何中心是比较耗时的一个操作。我们最终的目标不是求得几何中心,而是寻找接近几何中心的过滤器,这样的过滤器可以近似的看做几何中心,然后作为冗余过滤器删除。因此这个寻找几何中心的任务就变为了寻找该层过滤器中和其他所有过滤器的空间距离最小的过滤器们
近似公式

FPGM算法的流程可以这样概括:
1)设置剪枝比率,每层都按照这个值进行剪枝
2)对于每轮训练,在每轮训练的结束,执行下面的操作:
2.1)对模型的每层过滤器,寻找个满足上述公式6的过滤器,然后将其参数置0
3)获得最终的剪枝之后的模型

FPGM算法

参数减少量分析:
假设有连续三层,前一层的输出层数量等于后一层的输入层数量;每层的卷积都是的,剪枝的比率统一为.每层剪枝之后的参数数量应该降低到原始参数的。

层数
输入层数量 3 100 200
输出层数量 100 200 300
参数数量
剪枝后输入层数量 3
剪枝后输出层数量
剪枝后的参数数量

四、实验分析

总结一下实验分析中的主要结论:

  1. 主要在单分支网络VGGNet和带有shortcut的经典网络ResNet网络上进行实验;两个网络又分为从头开始训练和直接使用预训练的模型剪枝两种场景。在两个场景的实验中,都略优于PFEC,但是提升不是很大,fintune之后最多提升了0.72%。在有些场景中没有明显提升。


    和PFEC方式的比较
  2. 尝试了单纯使用FPGM方法和FPGM结合最小范数不重要策略混搭的方式。两种效果差不多,一会前者效果好,一会后者效果好。但是和其他的基于最小范数不重要策略的模型对比,还是有提升的。


    和其他方法的比较
  3. 剪枝可以在每轮训练结束之后进行,也可以每隔2轮、3轮...进行,实验证明影响不大。

  4. 不同的剪枝比率得到的模型准确率不同,对于ResNet-110来说,18%和40%剪枝都可以优于原始模型。随着剪枝比率的提升,模型效果是越来越差的。

  5. 实验中使用的是欧式距离,可以使用或者是余弦距离进行计算;使用可以有非常轻微的提升,使用余弦距离则效果会更差。

代码的话,下次实践的时候再对比一下实验结果吧。

参考文献

  1. 神经网络压缩加速之剪枝 Filter Pruning via Geometric Median for Deep Convolutional Neural Network Acceleration

你可能感兴趣的:(剪枝论文阅读《Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration》)