《Learning to Prune Filters in Convolutional Neural Networks》论文笔记

提出一种try-and-learn算法,用于训练剪枝代理,以数据驱动方式移除CNN多余滤波器,保持网络精度的同时大幅减少网络规模。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 概述

这篇文章提出了一种“try-and-learn”的算法去训练pruning agent,并用它使用数据驱动的方式去移除CNN网络中多余的filters。借助新的奖励机制,agent可以大量移除CNN网络中的filters,并且保持网络的精度在期望的水平内。在网络性能和规模上提供了很好的操控性。
这篇文章中的方法具有如下特点:
1)使用数据驱动的方法去剪枝。并且通过实验数据驱动方法剪枝的效果是好于手工设置的剪枝条件(类似L1与L2范数);
2)文章的方法在网络的性能与规模上在剪枝期间提供了很好地操控性。当确定了网络的期望性能之后,本文的方法可以实现完全自动实现网络剪枝。

为了实现这样的目标,论文中将剪枝问题转化为了“try-and-learn”的学习任务。也就是训练一个pruning agent,使用神经网络建模,输入filter的权重输出该filter是否保留的二值标识。该agent是使用新的奖励机制(尽可能高的裁剪比例)来训练,同时保持网络性能保持在特定的水平上。
直观地把论文中的方法看作是一个“try-and-learn”的过程,最开始的时候从全部的filter中随机剪枝一个,每次进行剪枝操作会通过奖励机制评估。这个评估会返回给agent,这迫使agent去产生更高的回馈。但是这样的操作的可执行空间是很大的,对于有64个filter的层,可能性就有2642^{64}264,论文中给出了一种高效的算法来解决。

2. 网络剪裁

2.1 单层网络剪裁

这里对拥有LLL层卷积的CNN网络使用lll表示,用NlN_lNl表示第lthl^{th}lth层中filter的数量,filter的矩阵可以表示为Wl={w1l,w2l,…,wNll}W^l=\{w_1^l,w_2^l,\dots,w_{N_l}^l\}Wl={w1l,w2l,,wNll},其中wil∈Rml∗h∗ww_i^l\in R^{m^l*h*w}wilRmlhw,需要训练的agent用πl\pi^lπl表示,它用WlW^lWl作为输入,产生操作的二值标识,Al={a1l,a2l,…,aNll}A^l=\{a_1^l,a_2^l,\dots,a_{N_l}^l\}Al={a1l,a2l,,aNll},对于agentπl\pi^lπl使用参数θl\theta^lθl参数化,则就可以表示为πl(Al∣Wl,θl)\pi^l(A^l | W^l,\theta^l)πl(AlWl,θl)
对于这个训练任务给定验证集Xval={xval,yval}X_{val}=\{x_{val}, y_{val}\}Xval={xval,yval},优化的目标函数是L=R(Al,Xval)L=R(A^l, X_{val})L=R(Al,Xval),其中RRR是由两部分组成的,一个是accuracy term,另外一个是efficiency term。
R(Al,Xval)=ψ(Al,Xval,b,p∗)∗ϕ(Al)R(A^l, X_{val})=\psi(A^l,X_{val},b,p^*)*\phi(A^l)R(Al,Xval)=ψ(Al,Xval,b,p)ϕ(Al)
对于 accuracy term ,它保证在验证集上性能的下降在度量MMM下下降的边界是bbbbbb这个参数是用来调控剪裁力度与网络性能的。参数p∗p^*p是原始网络fff的性能,p^\hat{p}p^是剪裁之后新网络fAl^\hat{f_{A^l}}fAl^的性能。当然在剪裁之后是需要经过训练集finetune再去测量剪裁之后网络的性能的。度量指标MMM在分类问题中就代表准确率,在分割问题中就代表全部的准确率。那么这部分就可以描述为如下的形式:
ψ(Al,Xval,b,p∗)=b−(p∗−p^)b\psi(A^l,X_{val},b,p^*)=\frac{b-(p^*-\hat{p})}{b}ψ(Al,Xval,b,p)=bb(pp^)
p^=M(f^Al,Xval),p∗=M(f,Xval)\hat{p}=M(\hat{f}_{A^l}, X_{val}), p^*=M(f, X_{val})p^=M(f^Al,Xval),p=M(f,Xval)
对于 efficiency termC(Al)C(A^l)C(Al)代表其中值为1(也就是被保留)的数量,然后其可以使用下面的算式进行度量:
ϕ(Al)=log(NlC(Al))\phi(A^l)=log(\frac{N^l}{C(A^l)})ϕ(Al)=log(C(Al)Nl)
之前提到agent中使用参数θ\thetaθ,那么整个的目标函数就可以使用梯度下降法进行求解,
在这里插入图片描述
那么整个层的裁剪算法就可以被描述为:
在这里插入图片描述

2.2 多层网络裁剪

对于整个网络中的agent使用π={π1,π2,…,πL}\pi=\{ \pi^1,\pi^2,\dots,\pi^L\}π={π1,π2,,πL}进行表示。其剪枝的策略还是逐层进行的,每剪完一层就进行finetune进行回血,之后再剪下一层,这样一层一层,剪裁比例从小到大得到的剪枝结果是好于一次性剪除所有layer中的filter的。
在这里插入图片描述

3. 论文实验

3.1 VGG网络

下图展示分别对各层进行裁剪得到的错误率与剪裁之后filter的前后对比,这里设置的精度边界b=2b=2b=2
在这里插入图片描述
接下来调整裁剪的边界得到下图:
在这里插入图片描述
自然的裁剪的精度损失容忍度越大,裁掉的也就越多了。

3.2 ResNet网络

这篇论文中对ResNet的剪裁还是剪裁残差块中的第一个卷积,对于shortcut相连的部分并没有做处理。下图是使用不同精度损失容忍度对ResNet进行裁剪得到的结果
在这里插入图片描述

4. 个人总结

这篇论文使用参数化裁剪的形式,使用训练的形式来学习参数,使得裁剪在规定的精度误差范围内朝着裁剪比例尽可能大的方向迭代,从而得到最后的裁剪结果。但是,这篇论文中涉及到的方法并没有开源,直接复现难度比较大,存在风险,最好的还是提供代码,我们先去做复现验证,再决定运不运用到实际中去。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值