Neuron-level Structured Pruning using Polarization Regularizer
基于极化正则化的神经元级结构化剪枝
总结
该篇文章是2017年network slimming的改进工作。在network slimming的工作中,利用L1正则化技术让BN层的scale系数趋近于0,然后裁剪“不重要”的channel。然而,这篇文章认为这种做法存在一定问题。L1正则化技术会让所有的scale系数都趋近于0,更理想的做法应该是只减小“不重要”channel的scale系数,保持其他系数的仍处于较大状态。为了实现这一想法,该篇文章提出了polarization正则化技术,使scale系数两极化。
如图所示,可以看出L1正则化的scale系数分布和polarization正则化的scale系数分布。Polarization正则化技术能够更准确的确定裁剪阈值。该篇文章通过实验证明该剪枝方法在CIFAR和ImageNet数据集上达到SOTA水平。
原文链接:https://blog.csdn.net/fourteen_zhang/article/details/111413240
摘要
神经元级结构化剪枝是一种在不影响预测精度的情况下减少神经网络计算量的非常有效的技术。在以往的工作中,结构化剪枝通常是通过对神经元的尺度因子施加L1正则化,并对尺度因子低于一定阈值的神经元进行剪枝来实现的。理由是尺度因子越小的神经元对网络输出的影响越弱。接近0的比例因子实际上会抑制一个神经元。然而,L1正则化缺乏神经元之间的区分,因为它将所有缩放因子推向0。更合理的剪枝方法是只抑制不重要的神经元(比例因子为0),同时保持重要神经元完整(比例因子较大)。为了实现这一目标,我们提出了一种新的尺度因子正则化方法,即极化正则化方法。理论上,我们证明了极化正则化将一些比例因子推到0,而其他比例因子推到a > 0。实验表明,使用极化正则化器的结构化剪枝比使用L1正则化器获得更好的结果。在CIFAR和ImageNet数据集上的实验表明,极化剪枝取得了最好的效果。
一:介绍
网络剪枝被证明可以有效降低推理的计算成本,而不会显著影响准确性[刘等,2019a]。网络修剪有两个主要分支。一种是非结构化修剪,在个体权重水平上进行修剪[乐村等,1989,韩等,2015,周等,2019,丁等,2019,Frankle and Carbin,2019]。另一个分支是结构化修剪,在神经元(或通道)层面进行修剪[文等,2016,刘等,2017,Y . e .等,2018]。虽然非结构化剪枝通常比结构化剪枝减少更多的权重[Liu等人,2019a],但其缺点是得到的权重矩阵是稀疏的,如果没有专用的硬件或库,这不能导致加速[Han等人,2016]。本文主要研究神经元级结构化剪枝,它不需要额外的硬件或库来减少普通GPU/CPU设备上的计算量。
对于结构化剪枝,一种有前途的方法是将每个神经元与一个比例因子相关联,并在训练中正则化这些比例因子。然后对尺度因子低于一定阈值的神经元进行剪枝[黄,王,2018]。尺度因子的正则化因子通常选择为[刘等,2017]。然而,L1正则化器试图将所有比例因子推至0。往往很难找到合理的修剪阈值。例如,图1 (a)显示了在CIFAR-10数据集上训练的VGG-16网络在L1正则化下的缩放因子分布,其中缩放因子密集地分布在阈值周围。阈值处的切割不是很合理,因为阈值周围没有余量来将修剪的神经元与保留的神经元分开。用这个阈值修剪将导致严重的准确性下降。更合理的正则化应该更明显地分离被修剪的和保留的神经元,它们之间有更大的余量。为了实现这一目标,我们提出了一种新的正则化方法——极化。与将所有比例因子推至0的L1正则化不同,极化同时将比例因子推至0(从而修剪这些神经元),并将其余比例因子推至大于0的值(从而保留这些神经元)。直观地说,极化不是在修剪中抑制所有神经元,而是试图仅抑制一部分神经元,同时保持其他神经元完好无损。极化正则化自然区分修剪和保留的神经元。所得的比例因子更容易分离。如图1 (b)所示,极化导致修剪的神经元(橙色部分)和保留的神经元(蓝色部分)的缩放因子之间有明显的界限。使用极化进行修剪更合理,因为被修剪的神经元对网络输出的影响比保留的神经元小得多。我们的代码可在https://github.com/polarizationpruning/PolarizationPruning.获得
图1:在CIFAR-10数据集上训练的VGG-16中的比例因子分布,分别具有L1正则化和极化正则化。在两个正则化器相同的修剪比例下,橙色部分被修剪。
我们总结我们的贡献如下:
-
我们提出了一个新的正则化,即极化,用于神经网络的结构化剪枝。我们从理论上分析了极化正则化器的性质,并证明了它同时将一部分比例因子推至0,将其他比例因子推至大于0的值。
-
我们在广泛使用的CIFAR和ImageNet数据集上验证了极化修剪的有效性,并获得了最先进的修剪结果。
二:相关工作
神经元级的结构化剪枝在研究卷积神经网络(CNN)结构的工作中也称为通道/滤波器剪枝。它相当于非结构化剪枝,约束条件是连接到一个神经元的所有权重必须一起被剪枝或保留。结构化剪枝通常有三个阶段[Liu等,2019a]: 1)训练一个过参数化模型,2)根据一些准则剪枝训练好的模型,3)微调剪枝后的模型以提高性能。结构化剪枝方法的特点是如何处理这3个阶段,尤其是训练阶段。一些方法[Li等人,2017,he等人,2018a,2019]在训练阶段没有在网络的权重上增加额外的稀疏性正则化,而其他的一些工作[Wen等人,2016,Zhou等人,2016,Alvarez和Salzmann,2016,Lebedev和Lempitsky,2016,He等人,2017]在训练期间对网络权重施加了组稀疏性正则化。杨等[2020]提出使用Hoyer正则化子进行剪枝。Peng等人[2019]利用通道间依赖性来确定预训练模型中保留通道的最佳组合。罗和吴[2020]在训练期间在卷积层之后插入二进制掩码层,并移除对应于零掩码值的过滤器。庄等[2018]在训练阶段对预训练模型进行微调,以区分感知损失来选择各层的信道。一组稀疏性正则化剪枝方法为每个神经元引入一个比例因子,并在训练中对比例因子进行稀疏正则化。然后,基于其比例因子的值修剪神经元。刘等[2017]和Y e等[2018]使用批归一化(BN)中的比例因子作为每个神经元的比例因子,而黄和王[2018]为每个神经元增加了一个新的比例因子,因此不再依赖BN。在训练过程中,对神经元的尺度因子施加正则化以诱导稀疏性[刘等,2017,Y . e .等,2018]。训练后,具有最小比例因子的神经元被修剪。我们的方法属于这一类。与我们最相关的工作是[刘等,2017]。我们还使用BN中的比例因子作为神经元的比例因子。但与以往的工作不同,我们提出了一种新的极化正则化方法,使剪枝和保留的神经元更加可分。
另一个远程相关的领域是神经架构搜索(NAS),它被用来寻找计算高效的架构[何等,2018b,刘等,2019b]。有些作品[蔡等,2020]在训练和搜索过程中需要更多的计算。我们的方法是稀疏正则化剪枝方法。因此,在本文中,我们不关注与这些NAS方法的比较。
三:通过极化进行结构化修剪
3.1准备工作
给定一个训练集
{
(
x
i
,
y
i
)
}
i
=
1
N
\{(x_i,y_i)\}_{i=1}^N
{(xi,yi)}i=1N,其中
x
i
x_i
xi,
y
i
y_i
yi分别输入样本i的特征和标签,我们需要训练一个神经网络
f
(
x
;
θ
)
f(x;θ)
f(x;θ),其中θ表示网络参数。我们为每个神经元引入一个比例因子,并将比例因子表示为向量
γ
∈
R
n
γ ∈ R^n
γ∈Rn,其中n是网络中神经元的数量。正如在[刘等,2017]中,我们使用BN中的比例因子作为每个神经元的比例因子,因为BN在现代神经网络中被广泛采用。比例因子正则化网络训练的目标函数是:
m
i
n
θ
1
N
∑
i
=
1
N
L
(
f
(
x
i
,
θ
)
,
y
i
)
+
R
(
θ
)
+
λ
R
s
(
γ
)
(
1
)
\underset {\theta}{min}{1 \over N}\sum{_{i=1}^N}L(f(x_i,\theta),y_i)+R(\theta)+\lambda R_s(\gamma) \quad\quad\quad\quad(1)
θminN1∑i=1NL(f(xi,θ),yi)+R(θ)+λRs(γ)(1)
其中L(·)是损失函数,R(·)通常是网络权值上的L2正则化,
R
s
(
⋅
)
R_s(·)
Rs(⋅)是神经元尺度因子上的稀疏正则化。在修剪中,选择阈值,并且修剪比例因子低于阈值的神经元。在[刘等,2017]中,稀疏正则化选择为,即
R
s
(
γ
)
=
∣
∣
γ
∣
∣
1
R_s(γ) = ||γ||_1
Rs(γ)=∣∣γ∣∣1。L1正则化的效果是将所有缩放参数推至0。因此,L1正则化缺乏对修剪和保留神经元的区分。更合理的剪枝方法是只抑制不重要的神经元(比例因子为0),同时保持重要神经元完整(比例因子较大)。为了实现这一目标,我们提出了一种新的尺度因子正则化方法,即极化正则化方法。
3.2极化正则化器
实现细节在训练阶段,我们使用随机梯度下降(SGD)优化等式(1)。由于 R s ( ⋅ ) R_s(·) Rs(⋅)中的L1范数,方程(1)中存在不可微点。我们在这些不可微点上使用次梯度。为了实现 γ i ∈ [ 0 , a ] \gamma_i∈[0,a] γi∈[0,a]的约束,我们简单地在 γ i \gamma _i γi大于a时将其值 固定住,在训练过程中,当 γ i \gamma_i γi小于0时将其 固定住为0。在图像分类任务中,所有缩放因子都被初始化为0.5,如[Liu等人,2017]中所述。我们发现,在我们的神经网络中,输入到BN的标准差大多小于1。因此,本文将比例因子a的上界设为1。根据经验,我们发现修剪结果对a的精确值不敏感。
3.3修剪策略
经过极化正则化器的训练,我们得到了标度因子的值和分布。我们仍然需要一个阈值来修剪掉小比例因子的神经元。在[刘等,2017]中,阈值由要修剪的神经元的百分位决定。尽管这种方法精确地控制了要修剪的神经元的百分比,但它通常会导致不合理的阈值,如图1 (a)所示。我们利用极化效应,提出了一种更合理的自动设置阈值的策略。由于极化效应,分布图总是至少有两个局部最大值(峰值):一个位于0附近的中心,其他的位于较大值的中心,如图2所示。我们的策略是只修剪属于最接近0的峰值的神经元。因此,阈值位于最接近0的峰值尾部,如图2中的示例所示。更具体地说,当我们绘制分布直方图时,我们将面元宽度设置为0.01。然后我们从左到右扫描直方图中的面元,找到第一个局部最小面元。那么这个箱的水平坐标就是修剪的阈值。使用这种策略,我们自动修剪缩放因子最接近0的神经元。经验上,我们发现这种策略非常稳健地产生了良好的修剪结果。
在我们的方法中,我们通过调整两个超参数来控制简化浮点运算的数量:等式(1)中的λ和等式(2)中的t。给定目标数量的减少的触发器,我们的目标是选择λ和t的值,以便极化修剪将实际上减少目标数量的触发器。请注意,减少的FLOPs数量与修剪的神经元数量正相关。定理3.2给出了在极化正则化条件下,0比例因子(等于1-ρ)的比值如何由超参数t决定的方程。然而,当最小化等式(1)中的训练目标时,其中极化正则化器只是目标的一部分,没有理论来定量描述ρ和t之间的关系。很明显,等式(1)中的超参数λ也影响减少的FLOPs的数量。我们将在第4.4节介绍超参数λ和t的影响的实验结果。
给定一个目标缩减的FLOPs,我们使用搜索策略来确定超参数λ和t。我们首先根据经验将λ和t设置为一个范围和值,然后逐行搜索,直到我们接近目标FLOPs。搜索算法旨在找到导致FLOPs缩减 F ∈ ( F ∗ − δ , F ∗ + δ ) F\in(F^*-δ,F^*+δ) F∈(F∗−δ,F∗+δ)的超参数,其中 F ∗ F^* F∗是目标缩减,δ是允许范围。我们的算法首先对λ执行粗略搜索,然后对t执行精细搜索,如算法1所述。在本文的图像分类实验中,允许范围δ设定为5%。根据经验,我们的算法需要尝试大约5组超参数才能停止。对于每组超参数,我们只需要在ImageNet数据集上训练30个历元,FLOPs缩减就能稳定,而不是完全训练的120个历元。所以我们搜索的计算开销实际上并不太大。请注意,算法1是根据经验为本文中的图像分类任务设计的。严格来说,算法1中的第11-18行有成为无限循环的风险。然而,从经验来看,算法1在我们的实验中运行良好且高效。
修剪后,我们根据训练数据微调修剪后的网络。
四:实验
在这一部分,我们进行了大量的实验来评估我们在图像分类任务上的方法,这是测试剪枝方法最广泛使用的任务。我们呈现了我们的主要的实验结果见第4.3节。在第4.4节中,我们讨论了超参数在我们的方法中的作用。为了比较L1正则化和极化正则化的效果,我们在训练过程中可视化缩放因子的分布。我们还比较了不同正则化子引起的BN中尺度因子的分布与基线模型的分布。最后,我们对更宽范围的FLOPs缩减进行了实验。
4.1数据集和比较方法
正如在[Gale等人,2019]中指出的,相同的修剪方法在小数据集和大数据集上可能表现不同。因此,我们在小数据集(CIFAR 10/100 [Krizhevsky等人,2009])和大数据集(ImageNet [Russakovsky等人,2015])上评估了我们的方法。我们还试验了三种广泛使用的CNN深层结构:网络[Simonyan和Zisserman,2015],ResNet [He等人,2016]和MobileNet[Sandler等人,2018]。这也使得我们很难与以前的工作进行比较,因为许多工作只在一个数据集上,或者在一个网络结构上进行实验。因此,在每个数据集和网络结构上,我们只与那些已经发表了关于这个数据集和网络结构的实验结果的作品进行比较。对于发布代码的方法,我们也在实验环境中运行它。如果我们得到了比最初发布的方法更好的结果,我们将在比较中使用这个方法更好的结果,并附加一个“(我们的-impl。)”后缀。否则,我们将使用该方法最初发布的结果。我们已经复习了第2节中的所有比较方法。一些方法,如[彭等,2019]中的-AC,将附加辅助分类器插入网络。正如[彭等,2019]所指出的,直接将这些方法与其他方法进行比较是不公平的。所以我们在实验中不与这些方法进行比较。
4.2实验设置
基本的模型是按照[刘等,2017]实现的,该模型将BN添加到的全连接层。基础ResNet模型按照[何等,2016]实现。具体来说,我们的代码实现基于PyTorch和Torchvision [Paszke等人,2019]。我们在附录b中列出了训练中的详细参数。我们调整了极化正则化器中的超参数λ和t,以控制第3.3节中描述的减少的FLOPs。对于ResNet和MobileNet,我们修剪具有剩余连接的块[何等人,2019],其中最后一个每个残差块中的卷积层用零填充,以与块的输入对齐,修剪ResNet-50的细节如附录c所示
4.3实验结果
我们比较了不同剪枝方法在准确率和FLOPs减少方面的性能。对于每种方法,我们报告其基线模型精度(基线Acc。),修剪后的微调精度(修剪后的Acc)。),精度下降(Acc。下降)在基线和修剪精度之间。FLOPs被报告为修剪比率,即通过修剪减少的FLOPs与基线模型的FLOPs的比率。
CIFAR数据集是用于图像分类的相对较小的数据集。它是比较神经网络剪枝方法最广泛使用的数据集。在CIFAR数据集上的实验结果如表1所示。请注意,表1中的负精度下降意味着修剪模型比其未修剪的基线模型获得更好的精度。在CIFAR-10、ResNet-56任务上,我们的方法实现了最小的准确率下降(-0.03%)和最好的剪枝准确率,同时剪枝率为47%FLOPs,这比其他方法要好得多。在CIFAR-10、VGG-16任务上,我们的方法也实现了最小的精度下降和最佳的修剪精度,FLOPs减少类似于NS。在CIFAR-100数据集上,很少有先前关于通道修剪的工作已经试验并报告了它们的结果。所以我们只在CIFAR-100上比较NS和COP。我们的方法仍然获得了如表1所示的最佳结果。
与CIFAR相比,ImageNet数据集要大得多。在ImageNet数据集上的实验结果如表2所示。在ImageNet,ResNet-50任务上,我们的方法实现了最小的精度下降和最佳的修剪精度,与其他方法非常接近。MobileNet V2针对移动设备上的计算效率进行了优化,并且包含较少的冗余计算。因此,它比ResNet-50更难修剪。在ImageNet、MobileNet任务上,我们的方法仍然具有最小的精度下降,与其他方法相比具有相似的FLOPs缩减。总之,我们的方法在CIFAR和ImageNet数据集上都获得了最先进的通道修剪结果。
图3:超参数t和λ对极化剪枝的降低的FLOPs和精度下降的影响。当我们画t的图形时,λ的值固定为1e-4。当我们画λ的图形时,t的值固定为1.0。我们进行每个实验3次,并报告精度下降和FLOPs的平均值。
4.4分析
超参数的影响在第3.3节中,我们指出没有理论可以定量描述减少的FLOPs的数量如何依赖于方程(1)中的超参数λ和方程(2)中的t。如图3所示,我们根据经验研究了超参数t和λ对减少的FLOPs数量以及基线和修剪模型之间的精度下降的影响。图3显示,当t变大时,减少的FLOPs也会变大。这是合理的,因为根据定理3.2,当t变大时,极化正则化器会将更多的比例因子推至0,因此会修剪更多的神经元/FLOPs。同时,精度下降的总体趋势是变大,但曲线波动更大。这表明精度下降并不是相对于t单调增加的。更大的t并不总是导致更大的精度下降。当λ变大时,FLOPs降低和精度下降都单调变大。这也是合理的,因为λ是等式(1)中极化正则化器的总权重。随着λ变大,极化正则化对训练的影响更大,导致更多的神经元被修剪,精度下降更大。
修剪中正则化效果的可视化L1和极化正则化的效果可以通过缩放因子的分布/直方图来可视化。虽然图1已经显示了一个例子,但是我们在图4中更详细地可视化了它们。图4显示了训练过程中比例因子分布的演变。在图4中,子图(a,b,c)分别对应于基线ResNet-50、使用L1正则化器修剪ResNet-50和在ImageNet数据集上使用极化正则化器修剪ResNet-50的训练过程。在子图©中,我们可以清楚地看到极化正则化器逐渐将比例因子推向两个簇,一个簇位于0,另一个簇位于更大的值。这两个集群之间有明显的差距。另一方面,子图(b)显示,L1正则化将缩放因子推到位于0.09附近的一个簇。本小节中的可视化验证了我们在第3.2节中的结论,即极化正则化具有将比例因子推到不同极点的效果,从而使修剪和保留的神经元更加可分离。
图4:训练过程中ResNet-50层中神经元的比例因子直方图。直方图的宽度、高度和深度对应于比例因子的值、比例因子的数量和训练时期。
关于更宽范围的浮点运算缩减的实验先前关于通道修剪的工作通常实验浮点运算缩减不超过50%。由于训练损失中强加的巨大正则化,较大的FLOPs缩减可能不利于像我们这样的基于正则化的修剪方法。所以我们增加了关于更大的FLOPs缩减的实验。我们比较了一种不基于正则化的简单通道修剪方法:均匀通道缩放(UCS)方法,它使用宽度乘数以相同的比例均匀地增加或减少所有层的通道计数。我们还比较了两种基于正则化的方法:NS和DeepHoyer。最初的DeepHoyer使用正则化器在修剪之前使用预先训练的模型,这需要在修剪之前额外的预先训练时期。为了公平比较,我们在论文中使用相同的实验设置运行所有方法,这意味着所有方法使用完全相同数量的训练时期。结果在表3中,它显示了我们的方法在各种各样的FLOPs减少下始终表现得更好。
五:结论
本文提出了一种新的极化正则化器,并将其应用于神经元的尺度因子上进行结构化剪枝。与现有的将参数推到一个极点(通常为0)的正则化不同,极化正则化将参数推到两个极点。我们从理论上分析了我们的极化正则化器的性质,并通过检查修剪中缩放因子的分布从经验上验证了我们的分析。在图像分类任务上的大量实验表明,极化正则化器产生了最先进的修剪结果,比常用的L1正则化器好得多。我们的方法易于实现,计算效率高,只需要网络“修剪+微调”一遍。极化正则化器可以方便地加入到神经网络训练中,抑制一些神经元,同时激活其他神经元。未来,我们会发现更多需要极化效应的应用。