论文:https://arxiv.org/pdf/1903.10258.pdf
源码:https://github.com/liuzechun/MetaPruning
这篇论文仍然是基于通道裁剪,发表在ICCV 2019 ,这篇文章思路同样是想要使用AutoML的思想去自动裁剪调整出合适的网络,其中一个优点让人眼前一亮,通过这种方式可以直接处理shortcut的结构。
简介
通道裁剪是一种有效对的神经网络压缩/加速的方法。通道裁剪方法可以归纳成3个阶段
1)训练一个很大参数量的完整神经网络
2)裁减掉其中重要性较低的通道或权重
3)微调或者重新训练剪枝后的神经网络
其中第二个步骤十分关键,通常采用逐层裁剪,并通过微调和重新训练来保持精度。
剪枝的策略传统采用人工设定约束,根据权重稀疏性等相关指标来进行设定。近年来随着AutoML的方法兴起,为剪枝提供了新的解决方案 ,裁剪通道后使用模型验证,得到准确率等指标的反馈构成闭环,然后使用强化学习等方法进行自动的训练调优学习最优策略,能够节约人工设计的成本,同时效果也要优于人工。因此文章从AutoML的角度切入设计了一种基于元学习的剪枝方法。
contribution
- 本文提出了一种基于metaLearning的剪枝方式,通过建立一个 PruningNet的meta network来为特定结构的网络产生权重。
- 与传统的卷积神经网络剪枝方法相比,解放了人工调参的工作量,同时能够按照想要优化的指标进行优化
- 与其他AutoML的方法相比,Meta Pruning的方法搜索结构时更容易添加约束,不需要人工调节强化学习的超参数
- meta learning 能够毫不费力的裁剪 残差结构 ,残差结构或多分支结构在裁剪的时候需要注意shortcut连接,常规的裁剪方式会影响到其它层,需要人工额外去指定共享层。
相关工作
该章节分别介绍了Pruning、AutoML、Meta Learing、Neural Architecture Search(NAS)中的经典算法
方法
将通道剪枝问题该公式化 ( c 1 , c 2 , . . . , c l ) ∗ = a r g m i n c 1 , c 2 , . . . , c l ζ ( A ( c 1 , c 2 , . . . , c l ; w ) ) (c_1,c_2,...,c_l)^* = argmin_{c_1,c_2,...,c_l} \zeta(A(c_1,c_2,...,c_l;w)) (c1,c2,...,cl)∗=argminc1,c2,...,clζ(A(c1,c2,...,cl;w)) s . t . C < c o n s t r a i n t s.t. \space C<constraint s.t. C<constraint 其中A是剪枝前的网络, c n c_n cn代表第n层的通道数量,我们尝试找到从第1层到第 l l l层的一组合适的通道数的结构,使训练后权重的损失最小,同时满足约束条件(FLOPs)。本文提出了一种PruningNet的院学习结构,能够在使用验证集快速验证一组结构的优劣,然后可以使用其他合适的算法来搜索最优的网络结构。
训练 Pruning Net
PruningNet是一个元学习网络,将一组剪枝策略
(
c
1
,
c
2
,
.
.
.
,
c
l
)
(c_1,c_2,...,c_l)
(c1,c2,...,cl)作为输入,然后通过PruningNet根据输入的结构产生对应的权重矩阵W,PruningNet如图2所示,其中PruningNet的一个Block由两个FC全连接层组成
W
=
P
r
u
n
i
n
g
N
e
t
(
c
1
,
c
2
,
.
.
.
,
c
l
)
W = PruningNet(c_1,c_2,...,c_l)
W=PruningNet(c1,c2,...,cl)
同时,每次产生的剪枝网络结构,每一层的输出通数量都对应到网络产生权重的尺寸,在反向传播的过程中,直接计算PruningNet里权重的梯度,而不是更新被剪枝网络的权重。
为了训练Pruning Net,文章采用随机结构采样的方式来得到各种剪枝的网络结构,然后由PruningNet学习产生与输入剪枝网络结构的权重。
剪枝网络搜索
PruningNet在经过训练之后已经具备了根据输入剪枝的网络结构产生权重的能力,此时可以根据产生的权重在验证集上进行评估。此时已经可以使用搜索方法来搜索最优剪枝网络结构,由于网络编码通过过于复杂,因此文章采用进化算法来搜索最优的剪枝网络结构。每个剪枝网络结构对应到网络网络编码的形式,因此可以将网络编码看做网络在每层上通道数量的向量表示,此时每层的通道数量可以对应到计划算法中的基因gene。首先随机选择大量的gene,通过PruningNet产生权重在验证集上的精度。然后取出前K个最高准确率的基因,然后使用交叉和变异方法产生新的gene。变异即为随机改变基因中的元素比例,交叉是随机重组两个双亲的基因的来产生新的基因组合,反复迭代这个过程,即可得到最优的剪枝网络编码。
进化算法的伪代码如下
实验结果
实验全部基于Imagenet2012数据集的分类任务。
MobileNet and ResNet
mobileNet V1没有残差结构,因此直接从权重左上方裁剪,MobileNet V2和ResNetcun由于存在shortcut连接,论文提出产生两个网络编码的方式一个用于整体的stage输出和输入的通道数,一个用于每个block内部的通道数。剪枝方式如下图所示
带约束的裁剪
FLOPs约束的裁剪效果
Latency约束的效果
裁剪后通道对比
结论
又唠叨了一遍contribution,本文提出了一种基于metaLearning的剪枝方式,通过建立一个 PruningNet的meta network来为特定结构的网络产生权重。 与传统的卷积神经网络剪枝方法相比,解放了人工调参的工作量,同时能够按照想要优化的指标进行优化。与其他AutoML的方法相比,Meta Pruning的方法搜索结构时更容易添加约束,不需要人工调节强化学习的超参数 。meta learning 能够毫不费力的裁剪残差结构 ,残差结构或多分支结构在裁剪的时候需要注意shortcut连接,常规的裁剪方式会影响到其它层,需要人工额外去指定共享层。
个人观点
这篇论文的创新点我认为主要还是用元学习来产生权重这一招,真的很妙,常规的剪枝算法一般采取直接裁剪通道,然后使用权重重构的方法修正,削弱对后续层的影响,而直接产生权重却可以有效的避免掉。将网络结构已经映射成了向量编码了,那么之后的搜索策略自然就有很多种,启发式算法只是其中的一种。最后一个裁剪short-cut让我有点蒙,分成两个编码输出。然而我在其他方法剪枝shortcut的时候也是采用的这种办法,也不能说不好就总感觉没有想象中那么秀。