模型剪枝学习笔记 --- Channel Pruning via Optimal Thresholding

Channel Pruning via Optimal Thresholding

代码链接:https://github.com/yeyun11/netslim
论文链接:https://arxiv.org/abs/2003.04566
该方法于上个月开源。

摘要

结构化剪枝,特别是通道剪枝(channel pruning ),被广泛用于降低计算成本和与现成的硬件设备的兼容性。在现有作品中,通常使用预定义的全局阈值或从预定义的指标计算出的阈值来去除权重。基于预定义全局阈值的设计会忽略不同层和权重分布之间的差异,因此,它们经常可能由于过度剪枝或欠剪枝而导致性能欠佳。在本文中,我们提出了一种简单而有效的方法,称为最佳阈值(OT),用于剪枝具有与层相关的阈值的通道,这些阈值将重要通道与可忽略的通道最佳地分开。通过使用OT,可以剪枝大多数微不足道或无关紧要的通道,以实现高稀疏度,同时最大程度地降低性能下降。由于保留了最重要的权重,因此可以对模型进行进一步的微调,并通过很少的迭代即可快速收敛。我们的方法展示了卓越的性能,特别是与高度稀疏的最新设计相比。在CIFAR-100上,使用OT修剪和微调的DenseNet-121仅需1.46e8 FLOP和0.71M参数即可达到75.99%的精度。

方法:

A. Training with Sparsity(稀疏训练)

模型剪枝学习笔记 --- Channel Pruning via Optimal Thresholding_第1张图片
Fig.2是一个典型的剪枝pipeline。在pipeline中,作者首先解决稀疏约束问题。
在这里插入图片描述
其中L、R、Θ分别是损失函数、用于稀疏的回归项、训练参数。回归项的目的是在约束条件下降低模型大小、计算量和内内存消耗。
在这个工作中,作者遵循的是通道剪枝的思想,因为通道数与模型的复杂度具有强相关性,并且在实际用例中该思想很容易实现。具体来说,我们使用L1正则化对BN层的缩放因子施加稀疏性,这是一个很常见的实施稀疏的方法。因此,式(1)可以等价为:
在这里插入图片描述
其中Γ是目标模型中scaling factor的集合,Γ可以是模型中所有缩放因子的集合,也可以是指定BN层的缩放因子的集合。λ控制稀疏的程度,|r|即为L1正则化,r是BN层参数scaling factor。

B. Distribution of Scaling Factors(缩放因子分布)

网络层的不同分布是影响预定义阈值的一个问题。比如,作者绘制了VGG的第7和第10层的缩放因子分布直方图,如图所示,重要权重的分组是不一致的。通过使用一个全局阈值,对于缩放因子较小的层,将是有问题的。
模型剪枝学习笔记 --- Channel Pruning via Optimal Thresholding_第2张图片
举个例子,如果我们想根据NS[14]的方法裁减掉73%的通道,计算出的阈值对第7BN层来说是好的,但对于第10层来说太大,会导致该层的修剪过多(过剪枝)。这限制了较高的修剪比,因为删除掉整个第10 BN层会导致网络中断,网络是由顺序堆叠的卷积层组成的。
为了要确定具体L1正则项的最优阈值,作者也探索了在不同程度下的L1惩罚下的scale factors分布。

作者观察到,在从非常弱的L1正则化到强烈的L1正则化的范围内,重要的scale factors始终比可忽略的scale factors大几个数量级。以图4为例,展示了在λ=3e-5 和λ=1e-3下 VGG-14的第8 BN层的scaling factors分布。
模型剪枝学习笔记 --- Channel Pruning via Optimal Thresholding_第3张图片

C. Optimal Thresholding for Pruning(剪枝的最优阈值)

为了要处理不同的BN层和不同的稀疏强度,需要一个有原则的方法来实现效率和性能之间的最佳平衡。正如之前观察到的,scaling factors可忽略不计的组通常是几个数量级
大小小于重要的scaling factors。这些权重的平方和也应该小于最重要的scaling factors。基于此,作者将平方和的累积和作为识别重要scaling factors的标准。对于给定的scaling factors集合,定义:
在这里插入图片描述

在这里插入图片描述
然后发现最佳阈值OT是:
模型剪枝学习笔记 --- Channel Pruning via Optimal Thresholding_第4张图片
δ是一个可忽略的很小的数。例如,使用δ=1e-3对于所有的实验。rth可以通过以下方法轻松地计算出1)按升序对比例因子进行排序,然后2)通过累加的平方和大于或等于δ发现第一个scaling factor。

在实践中,我们观察到该算法可以可靠地,找到阈值,就像我们在各种情况下所期望的那样。例如,通过公式5找到的最佳阈值为如图1上部分图中的绿色虚线所示。以及图3和图4中的箭头。

使用rth进行剪枝,如图2所示,当scaling factor 小于rth,相应通道将被剪掉;
在顺序堆叠的卷积网络中,BN层通常位于两个卷积层之间,因此前一层的输出通道和后一层的输入通道层应相应修剪。与NS方法相比,OT不会在剪枝过程中,使网络断掉;修剪后,如果有足够的计算资源可用,则可以对模型进行进一步的微调或重新训练。 可以反复重复该过程,如图2所示。

Dealing with skip connections(跳跃连接的处理).

除了具有顺序堆叠的卷积层的通用架构外,OT还可以应用于具有跳过连接的现代架构,比如Resnet和Densenet。与顺序堆叠的卷积层不同,具有跳跃连接的网络就像许多相对较浅的网络的集合。与顺序堆叠的卷积网络相比,主要区别在于整个BN层的移除不会破坏网络。
作者通过整个网络的BN上使用公式5计算了一个全局最优阈值rg。如果最后的BN层的scaling factors小于rg,就将整个分支移除。
在一些网络结构中,BN层与平行分支共享输入通道,不能简单的移除,对于这种结构,作者使用NS[14]的方法进行通道挑选移除不重要的通道。

结论

我们提出了通道修剪设计方法,通过逐层计算最佳阈值来避免欠剪枝和过度剪枝。为了找到最佳阈值,我们提出了一种算法,该算法保留了来自BN层的缩放因子的平方和的累积。我们的方法非常简单却有效,并且在广泛的实验中已被证明可以胜过最先进的设计。这项工作首次仔细研究了修剪中scale factors的分布与欠剪枝和过剪枝的关系,我们希望未来基于我们工作的研究可以为寻找更有效的网络提供灵感。。

参考:
https://editor.csdn.net/md?articleId=104921610
https://zhuanlan.zhihu.com/p/74553341

你可能感兴趣的:(深度学习,模型压缩与加速)