第一阶段_剪枝方向文献+个人理解

前段时间搞了一个FPGA竞赛,创新了(也不知道是不是首创,反正自己没见过别人用就是自己首创)一个很没道理的Ts Pruning(当时就想到了The Shy),设计了一个很拉跨的加速器…有一段时间没看文献了,现在竞赛结束了也复习一下自己之前看得文献。说说个人理解,真的是纯个人见解,欢迎讨论。

结构化剪枝。

  在项目早期看得大部分文章都是结构化剪枝,主要是那时候对剪枝的了解还不是特别深入,现在感觉近几年结构化剪枝的文章意义不是特别大,看多了有点浪费时间。顶会的文章提出一个看起来比较新颖的想法能把sota给提升几个百分点,但说实话,这几个百分点没别的意义。
  在我印象中,最近的结构化剪枝(filter和channel的)大概能上减少百分之六十左右的计算量(不同模型在不同数据集上不一样,但记不清了)。说它意义不大主要是卷积核粒度太大了,用什么方法其实差距都不大,在我个人的理解力,是方法可能对不同的数据集有不同的“反应“,才导致最终的剪枝率有细小的差别,可能某个方法刚好比较”适配“某个数据集,就获得比好一点点的效果。另外一篇文章Rethinking the Value of Pruning也做过相关的实验,然后发现不用这些花里胡哨的方法,从头开始训练网络,同样能获得很好的结果。
  现在回忆看过的结构化剪枝,主要的方法有两种:1. 通过卷积核本身判断。2. 通过特征图判断。

基于卷积核:

  卷积核本身判断比较好理解,举个例子,就是把所有卷积核算一个L2范数,比较小的就删掉。也有一些其他的方法,比如我记得一篇FPGM的论文(这篇文章也在知乎被骂了,数学推导拉跨了,我当时看数学部分也很迷惑…)他不单单是判断卷积核的大小,还判断了一个“卷积核的普遍性”,是一个比较有趣的想法。

基于特征图:

  另外是通过特征图判断是否剪枝,有一篇文章FBS,通过判断该特征图的L2范数来判断对应各个卷积核的channel“有没有用”,另外让我印象比较深的一篇论文是Hrank,这篇文章给了一个比较有趣的实验结果——每一个卷积核生成输出特征图的秩,是“稳定”的。这篇文章认为那些“输出秩”比较小的卷积核是没用的,就删去(我记得这篇文章的结果是比FPGM要好的)我也在这个实验结果上做了一些实验,感觉还是比较有意义的。

  在现在的我看来,结构化剪枝的重点,并不是在“剪枝”,而在于“结构”。它更像是寻找一种优秀网络结构的方法,去让自己网络适配自己的数据集,而非“剪枝”方法。

非结构化剪枝

  之前在知乎上看到有人批评非结构化剪枝,说这个完全是学术上刷论文的东西,没有任何实际意义。但我并不这么认为,我反倒认为非结构化(当然也包含了略带结构化的非结构化,像patDNN…听起来有点别扭)更有意义。一是它可能更触及到神经网络训练的“本质”;二是配合上专用的加速器能直接起飞。(AI+体系结构这个方向真的很酷炫啊。)
  非结构化剪枝的论文方法就很多了,目前我看的非结构化剪枝论文比较少,其中一点原因是有很多论文通过修改优化器的方法剪枝,这类文章往往需要很深的数学基础,这也让我啃起来有点费劲。
  根据我自己看过的文献我将目前看过的非结构化剪枝论文分为两类:彩票家族的和非彩票家族的。

非彩票家族:

  首先说说非彩票家族的,记得两篇印象深刻的是ADMM-NNdirectional pruning,前者是自己老师写的,也是读的比较精的一篇论文,主要是把ADMM方法运用到剪枝上,能够获得较高的剪枝率,我记得论文是直接把当时的各个模型在各个数据集上的剪枝sota基本是翻了一番。而且是剪枝量化两个都可以用,但是问题在于非常考验调参水平,各个层的剪枝率也要自己设定。后者这篇文章(没有完整看过,听室友介绍过)修改了优化器,能够在优化到一个比较平坦的超平面上找到一个比较好的方向进行剪枝。室友也是对这篇文章赞赏有佳,因为它一是全局自动剪,不需要预设剪枝率这些参数,需要调整的参数少(只有两个),一般来说我们是先拿这个方法剪枝后再用ADMM精修。另外修改优化器的方法还有一个polarization pruning,它不会像L2剪枝和L1剪枝把所有权重都给拉小,而是只把比较小的且不重要的权重给训为0。但这篇文章还没来得及好好看,等这周期末考完EDA再看吧:)

彩票家族:

  再来说说彩票家族的剪枝方法,我把它单独列为一个是因为当时看得彩票家族的文章比较多(其实也就四五篇哈哈,但都比较精),而且对神经网络的理解也都是看这些文章得到的。当时是LotteryRethinking连着看的,这两篇真的是让我大受震撼,对“学习率”这个东西有了更深的理解。先说说原版彩票,原版彩票是指一个冗余的网络中存在一个子网络,对这个子网络进行训练,它的收敛性和最后的精度都要优于原网络。但是Lottery这篇文章也只是在一些小网络和小数据集上做了实验(当然后续工作有对这个进行扩展)。后来有一篇文章叫Super Mask,它发现彩票定理的那些中奖网络不用训就有“一点点”效果。(原文说的好像是中奖网络不加训练,在MNIST上训有40%,在CIFAR10上有20%,都要大于10%)基于这个发现,他们发现了SuperMask,超级掩膜,他们的掩膜能够让不训练的子网络获得更好的性能。接着SuperMask后面的文章是Score pruning(自己取的名字,论文名叫What's Hidden in a Randomly Weighted Neural Network),这篇文章改进了寻找SuperMask的方法,而且在大网络大数据集上进行了实验,实验的效果还不错(但我记得剪枝率不高)。接下来一篇是Hydra Pruning,这篇文章是我看得第一篇彩票定理相关的文章,纯粹是因为这个论文名字有趣(Hail Hydra!),然后就倒叙看了彩票定理的其他文章。这篇文章主要是把上面的Score Pruning加到神经网络鲁棒性研究中,发现一个冗余的非鲁棒网络中存在一个鲁棒性较好的网络,而且在剪枝率和鲁棒性两者都获得了比较好的实验结果。
  这几篇关于彩票定理的文章看完后,给我最大的启发是——网络(剪枝)和初始数据是强相关的。也就是说,什么样的初值,就冥冥注定了它会滑向哪个点。所以我也觉得“边训练边剪枝”的方法应该是比较有前途的,因为它在剪枝的过程中关注了“数据的变化”,如果是训完-剪枝-微调的话可能就会丢失一部分数据变化的信息。
  但是我的这个“神经网络和本身数据强相关”这个观点其实也不一定对,因为也有文章提出说(非结构化)剪枝其实只剪结构,无关数据。这些是听室友说的,还没看过这类文章,后面有空一边做实验一边看看这类论文吧。

今天先写这么多,纯粹当个笔记,要是有人看的话就更新一下引文啥的。:)

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值