Accelerate CNNs from Three Dimensions: A Comprehensive Pruning Framework详解

Accelerate CNNs from Three Dimensions: A Comprehensive Pruning Framework详解

一、概述(原理讲解)

这篇论文是今年2月份发表在ICML上的,他提出了一种全面的剪枝框架,可以从三个维度对CNN进行加速。

这篇文章很像2019年ICML提出的EfficientNet的思路,只不过EfficientNet实在三个维度上使用复合系数(也就是一组系数)去放大网络,而这里是确定一组系数去pruning网络。话不多说,先上图:在CIFAR10上不同维度剪枝下的精度
在TinyImageNet上不同维度剪枝下的精度

  • 以上是在CIFAR10和TinyImageNet上不同模型的精度。
  • 这篇论文提出一个观点,他对比了先前绝大多数的剪枝方法,发现之前的方法要么就是对layers进行剪枝,要么就是对filters进行剪枝,甚至有的就是减小输入图像的resolution来进行模型压缩。
  • 这些方法的对比结果会在后面实验中贴出。按照这篇论文中的说法,其实他们要么就是着眼于对深度进行剪枝,要么就是着眼于对宽度进行剪枝。
    而对filters进行剪枝就是减小模型的宽度,对layers进行剪枝就是改变模型的深度。
    也就是说只考虑了这些维度中的一两个(即深度、宽度和图像分辨率)来加速。

所以你只着眼于一个方面,自然会导致模型最佳的剪枝结果受限。 因为任何一个维度上,他都只有一个最高的剪枝率,在精度不下降的前提下,你超过它,精度就会损失很多,所以作者提出,能不能对三个维度进行一个全面的考虑。所以这篇就是对三个维度进行全面的prune以获得最佳的结果,而且了提出一个简单有效的剪枝框架。

二、结构(Framework)

pipeline
这是作者今年二月更新的图,可以看到形象地表示了filters pruning和layers pruning是如何对模型宽度和深度产生影响的

  • 1.pruning可以分为两种,对filters做pruning和对layers做pruning,这两种方法都使用额外的正则项训练模型,先引入一个稀疏性。就是考虑一个稀疏的表达式,然后根据对计算结果较低的filter做prune,再对剪枝后的模型做finetuing,finetuning最好的模型就是我们最终的结果。稀疏度很高的filter或layer将被去掉,一般精度会略有损失或者略有提高。
  • 2.但是这个方法并不能用于指导裁剪图像大小,因为图像里面 他是没有我们可训练的参数的,而且没有办法将稀疏性引入图像。
  • 3.所以这个pipeline就考虑了输入图像的分辨率r。这个pipeline的思路就是我们同时用不同的d,w,r去做pruning,产生对应的剪枝模型

然后思路就是这样,我们用很多组这样的d,w,r,去剪枝模型然后分别进行finetuning得到他们的精度。这个d,w,r就是对应在Layers,Filters,和输入图像的Size上的剪枝率。然后我们用每个模型的d,w,r和他们的精度去拟合出在哪一组剪枝率下面可以取得最佳精度。我们把这时候的剪枝率叫做d*,w*,r*,这就是我们要找的最佳剪枝率。只要拿他们pruning原始预训练模型就好了。

  • 但是这时候的问题就很明显了,你拿着这么多个剪枝的模型去做finetuning,需要的计算资源和训练时间都很大。
    那么怎么解决这个问题呢?作者也想到了,所以作者提出了一个迭代的剪枝和微调策略去得到一个数据集合。另外也通过一个合适的F表达式,可以达到用很少的数据样本去做回归,就能得到一个精确的结果。

三、数学推理(线性回归)

  • 给定CNN架构,模型的D,W,R是影响模型精度和计算成本的三个关键因素。模型加速可以表示为以下问题:

在这里插入图片描述

  • 变成了一个约束求最优的问题,需要已知C,F。而很幸运地,在之前的工作中就提到了C和d,w,r之间的关系。
    在这里插入图片描述
    C表示一个模型的计算成本。一旦F和C我们已知了,根据拉格朗日乘法定理就可以解出(3)中的d,w,r.

具体来说第一步,我们将模型加速公式转化为优化问题,它以深度,宽度和图像分辨率为变量,以预测的精度为目标,尽管很难确定目标函数的表达式,但我们可以根据泰勒泰勒展开式,任意一个可导的函数都可以转化为多个幂函数的求和,所以我们可以用多项式对其逼近,这个是可行的。

  • 然后我们最简单的思路呢,就是我们每次可以根据不同的d,w,r,去剪枝得到很多个不同的模型,分别得到他们的精度。因为每个模型它的d,w,r都是不同的嘛,我们只要稍微改变d,或者w,或者r,就可以得到不同的剪枝模型。然后用这些数据拟合到多项式来拟合出一个预测精度。但是我们如果每次都改变这个d,w,r,然后重新训练,就非常耗时非常低效。而且要得到一个准确的拟合结果,回归值,就需要大量的数据。也就是说我们需要大量的这样的 d,w,r和对应的accuracy。

  • 那我们首先要面临的问题就是能不能使用很少的d,w,r就得到精确的回归值。为了解决这个问题,作者提出了一个F的表达式,这个F表示预测的精度,可以在很少的d,w,r精确地回归。

  • 然后还利用了迭代pruning和finetuning,加速了d,w,r,a的获得。∧是一个张量,包含所有的λ_(ijk),有了∧的限制,就可以防止过度拟合。在训练数据缺少的情况下如果没有∧的约束模型很容易过拟合。
    在这里插入图片描述
    在这里插入图片描述

  • 总之为了精确地回归和防止过拟合,需要一个相对简单的拟合函数F,所以作者用低秩的∧来表示高秩的∧。最后将(6)代入(5)得到最终的表达式(7),这个(7)就是最终的预测多项式,H是一个单变量的多项式,通过调整R可以控制。而实际上,R=1时就可以实现准确的回归了,所以最后的表达式就还要少一个Σ。

四、算法流程(d*、w*、r*如何求解)

  • 解决了收集数据的问题,接下来自然就是如何减少收集数据的训练时间,作者对此提出了一个Iterative Pruning and Fine-tuning的策略。它可以缩小训练的时间。
  • 首先看一下它的伪代码:

在这里插入图片描述

  • 其实作者这里的代码是点含糊不清的,作者的意思其实是对所有的维度上都做独立的迭代,每次是对一个维度做迭代,而不是像伪代码中所说的(dn,Wn,rn; an)是每次以一组做剪枝。所以比如这里rds取4,就能得到43=12个模型(也就是对原始预训练模型剪枝12次)。*
  • Iterative Pruning and Fine-tuning的策略有两个优势:
    1.剪枝比训练快,剪枝后Finetune也比从头训练快
    2.设定迭代次数,中间模型均可用

五、剪枝流程(用optimal的d*、w*、r*对预训练模型做剪枝)

在这里插入图片描述

  • 作者提出,得到optimal的d、w*、r*后,无论是先对layers做pruning还是先对filters做Pruning都是一样的。这里就以先对layers pruning为例:
  1. Pruning Layers:每一层的分类头精度代表对应层输出的discrimination,每一层和前一层discrimination的增加作为该层的importance.由此yielding Mp1.
  2. Pruning Filters:用BN层的缩放因子作为重要性度量,pruning掉最不重要的(1-w/wo)x100%的filters,yielding Mp2*
  3. Fine-tuning with Smaller Images:双线性向下采样,对Mp2使用大小为r的图像进行Fine-tuning,得到Mp*

六、结果分析

链接: link.
在这里插入图片描述在这里插入图片描述

  • 可以看到,对于ResNet-32和ResNet-56,只对W-only比D-only精度掉的更大,但是Resnet101则相反,这说明几个维度的重要性并不是固定的,会随着architecture变化,不能随着简单的先验得到,所以需要这样一个算法去得到最佳的d,w,r。与作者结果最接近的是DHP,DHP是到今年为止先进的算法之一,是去年ECCV2020的进展。他在精度这一栏上,在resnet56上是最接近作者的三维度方法的。但是由表格可见,作者这种方法的精度和和相对于banseline的精度下降都是最优的

在这里插入图片描述
在Imagenet上作者对resnet50和densenet121进行了实验,这两个的结果都比DHP算法高0.45个百分点。这里提一下,densenet121的精度提高与只对W-only是微小的,因为Densenet121网络结构的特殊性,导致它的宽度很宽,而他的深度和分辨率相对太小,剪枝他们的变化太小,主要就是体现在对filters pruning
然后作者还对NAS(网络结构搜索)的结果做了比较,实验数据如下:
在这里插入图片描述
这里带+的是原论文给出的结果,没带+的是作者复现的结果。可以看出,作者只用了20+的时间,就可以达到比TinyNet-C更好的精度。(GPU-days是只使用一个GPU时花费的天数,用来评估NAS算法的搜索成本)。

七、消融实验

消融实验,它的消融实验主要证明K的取值不会太影响最后的d.w.r***, 对于F,R取1就够了,就可以有效地避免过拟合。同时因为还有另外两种避免过拟合的方法,分别是减小多项式次数和用正则化回归,但消融实验证明了L2正则化在这里解决过拟合问题上效果不明显,降低多项式的次数也不明智,只有在作者使用的限制∧的秩为1在训练集和测试集上都表现出了良好的精度。
在这里插入图片描述
图4是预测的最优值和对应的不同K的剪枝结果,当K=1时,多项式回归变成了线性回归,这时候F太简单,有的网络下最佳剪枝率高有的低。而K>3时,最佳剪枝率很鲁棒。所以K一般取3就行了。在这里插入图片描述

八、Visualization(可视化特征图)

作者提供了一个不同模型最后一层特征图的可视化,baseline是一个预训练的Resnet56.四种不同的剪枝策略下,显然作者的特征图和baseline最像,虽然不太知道这有什么作用,不过还是看得出作者很想表达自己的思路是真的有效果的/哭笑。

九、总结

本文针对以往剪枝考虑维度的不足,提出了一个全面修剪三维空间的剪枝框架。它首先通过根据(d、w、r 、a)来得到最佳的精度F和prune model来确定最优的(d*、w*、r*)

该算法的三维剪枝性能优于计算成本相似的SOTA剪枝算法

还与NAS的方法做了比较,作者生成的prune medel略优于它们,但search cost要少得多。

处女作,真不错!

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐三.

谢谢您的认可

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值