2020—Prunging filter in filter

2020—Prunging filter in filter
作者单位:腾讯优图
代码链接:https://github.com/fxmeng/Pruning-Filter-in-Filter

摘要

网络修剪已经成为压缩和加速现代神经网络的一种非常强大和有效的技术。现有的剪枝方法可以分为两类:滤波器剪枝(FP)和权重剪枝(WP)。与WP相比,FP赢得了硬件兼容性,但失去了压缩率。为了融合这两种方法的优势,我们建议修剪滤波器中的滤波器。具体来说,我们将滤波器 F ∈ R C × K × K F \in \mathbb{R}^{C \times K \times K} F∈RC×K×K视为 K × K K×K K×K stripes,即 1 × 1 1×1 1×1个 f i l t e r ∈ R C filter∈R^C filter∈RC然后,通过修剪stripes对而不是整个过滤器,可以在硬件友好的情况下获得比传统FP更精细的粒度。我们称我们的方法为stripes修剪(SWP)。SWP是通过引入一种新的可学习矩阵来实现的,称为滤波器骨架,其值反映每个滤波器的形状。最近的一些工作表明,修剪后的体系结构比继承的重要权重更重要,我们认为单个滤波器的体系结构(即形状)也很重要。通过大量的实验,证明了SWP比以往的基于FP的方法更有效,并且在CIFAR-10和ImageNet数据集上达到了最先进的剪枝率,而且准确率没有明显的下降。

介绍

深度神经网络(DNNs)在语音识别[1]、计算机视觉[2,3]、自然语言处理[4]等领域都取得了显著的进展,但由于DNN中的参数较多,模型部署代价很高。为了缓解这一问题,人们提出了许多压缩DNN和减少计算量的方法。这些方法可以分为两大类:权重修剪(WP)和滤波器修剪(FP)。

WP是一种细粒度的剪枝方法,它对网络内部的单个权值进行剪枝,例如其值接近于0[5,6],在不牺牲预测性能的情况下形成稀疏网络。然而,由于非零的位置权重是不规则的,随机的,我们需要一个额外的权重记录位置信息,并且由于网络内部的随机性,WP修剪后的稀疏网络不能像FP那样以结构化的方式表示,使得WP无法在通用处理器上实现加速。相比之下,基于FP的方法[7,8,9]修剪卷积层内的滤波器或通道,可以使修剪后的网络在结构上仍然组织良好,并且可以容易地在通用处理器中实现加速。标准的滤波器修剪流水线如下:1)训练一个较大的模型,直到收敛。2)根据一定的标准对滤波器进行修剪;3)对修剪后的网络进行微调。[10]观察到,用随机初始化训练剪枝模型也能获得较高的性能。因此,重要的是网络架构,而不是训练过的权值。在本文中,我们认为不仅网络的架构,而且滤波器本身的架构也很重要。[11, 12]还提出了类似的论点,即具有更大内核大小的滤波器可能会产生更好的性能。然而,计算成本是昂贵的。因此,对于给定的输入特征映射,[11,12]使用具有不同核大小(例如,1×1、3×3和5×5)的滤波器来执行卷积和级联所有输出特征映射。但是每个滤波器的内核大小都是手动设置的。要设计出高效的网络结构,需要专业的经验和知识。我们想知道是否可以通过修剪来了解每个滤波器的最佳内核大小。例如,与VGG相比,残差网络更容易优化并表现出更好的性能。但是,我们发现网络内部隐藏了另一种结构,我们称之为 ‘the shape of the filters’。从图1可以看出,并不是过滤器中的所有条纹都有相同的贡献[13]。一些条带的 l 1 l_1 l1​范数非常低,这表明可以从网络中删除这些 s t r i p e s stripes stripes。保持滤波器功能同时保留最少 s t r i p e s stripes stripes数的形状被称为最优形状。为了捕获“滤波器形状”以及滤波器权重,我们建议使用“滤波器骨架(FS)”来学习这个“形状”属性,并使用FS来指导有效的修剪(即学习最优形状)(见第3节)。与传统的基于FP的剪枝相比,这种剪枝模式实现了更精细的粒度,因为我们使用的是 s t r i p e s stripes stripes而不是整个滤波器。

同样,[14,15,16]中引入的分组剪枝也比filter/channel剪枝获得了更细的粒度,在一个特定的层中移除所有过滤器中位于相同位置的权重。然而,分组剪枝打破了关于滤波器的独立假设。例如,每个过滤器中权重的无效位置可能不同。通过使用分组剪枝来规则化网络,网络可能会在较大的剪枝比下失去表示能力(参见第4.2节)。在本文中,我们还对实验中的分组剪枝进行了比较。相反,SWP保持每个滤波器彼此独立,这不会打破滤波器之间的独立假设。在整个实验过程中,SWP实现了比基于滤波器、基于通道和基于组的剪枝方法更高的剪枝比率。我们的主要贡献总结如下:

  • 我们提出了一种新的剪枝范式——SWP。SWP比传统的过滤剪枝方法获得了更细的粒度,而且剪枝后的网络仍然可以有效地进行推断。
  • 我们引入滤波器骨架(FS)来有效地了解每个滤波器的形状,并深入分析其工作机理。使用FS,我们在CIFAR-10和ImageNet数据集上实现了最先进的剪梢率,而精度没有明显下降。

相关工作

Weight pruning (WP)起源于optimal brain damage和optimal brain surgeon[17,18],它们基于损失函数的Hessian对权重进行修剪。[5]基于L1范数准则修剪网络权重,并重新训练网络以恢复性能,该技术可以通过修剪、量化和霍夫曼编码结合到深度压缩流水线中[6]。[19]通过动态的连接剪枝来降低网络的复杂性,将连接剪枝融入到整个过程中,避免了错误的剪枝,使其成为持续的网络维护。
[20]通过求解凸优化规划来移除每个DNN层的连接。该程序在每一层寻找一组稀疏的权重,以保持层的输入和输出与最初训练的模型一致。[21]提出了一种利用CNN空间相关性的频域动态剪枝方案。频域系数在每次迭代中进行动态剪枝,不同频段对精度的重要性不同,对不同频段进行有区别的剪枝。[22]将每个条纹分为多个组,并修剪每个组中的权重。然而,这些非结构化剪枝方法的一个缺点是所得到的权重矩阵是稀疏的,这在没有专用硬件/库的情况下不能实现压缩和加速[23]。

Filter/Channel Pruning: 过滤器/通道修剪(FP)在过滤器、通道或甚至层的级别进行修剪。由于原始卷积结构仍被保留,因此不需要专用硬件/库来实现该优点。类似于权重剪枝。[5][7]也采用了剪枝不重要过滤器的 l 1 l_1 l1​范数准则。文献[8]提出通过基于 L A S S O LASSO LASSO回归的通道选择和最小二乘重构来修剪通道,而不是修剪滤波器。[9]优化BN层中的缩放因子 γ γ γ作为通道选择指标,以决定哪个通道不重要并且可以删除。[24]引入了ThiNet,它正式地将过滤器修剪作为一个优化问题建立起来,并揭示了我们需要基于从下一层计算出的统计信息来修剪过滤器,而不是当前层。类似地,[25]优化最终响应层的重构误差,并为每个通道传播一个importance score。[26]首先提出利用AutoML进行模型压缩,该模型利用强化学习来提供模型压缩策略。[27]提出了一种有效的结构化剪枝方法,以端到端的方式联合剪枝滤波器和其他结构。具体地,通过定义一个新的目标函数和稀疏正则化来使基线和网络的输出与该掩码对齐,从而引入软掩码来缩放这些结构的输出。[28]为深度cnn引入了一种预算正则化剪枝框架,该框架自然适合传统的神经网络训练。该框架由一个可学习的掩蔽层、一个新的预算感知目标函数和知识蒸馏的使用组成。[29]提出了一种全局滤波修剪算法Gate Decorator,该算法通过将香草CNN模型的输出乘以通道缩放因子(即GATE)来对其进行变换,并在CIFAR数据集上取得了最新的结果。[30,10]通过大量的实验结果,深入分析初始化对剪枝的影响。

Group-wise Pruning:[14,15]引入了Group修剪,它使用 L A S S O LASSO LASSO正则化学习神经网络中的结构稀疏性。分组修剪仍然可以使用作为过滤修剪和通道修剪的‘im2ol’实现来有效地处理。[31]进一步探索了修剪粒度的完整范围,并评估它如何影响预测精度。[16]通过提出一种动态正则化方法改进了分组剪枝。然而,分组剪枝去掉了某一层中所有过滤器中位于同一位置的权重。由于每个过滤器的无效位置可能不同,分组剪枝可能会导致网络丢失有效信息。相反,我们的方法保持每个滤波器彼此独立,从而可以产生一个更有效的网络结构。图2说明了不同类型的修剪。

Mask in Pruning:使用(软)掩码来表示网络中构件的重要性已经在修剪工作中得到了深入的研究[32,33,34,35,27,36,37,9,8]。然而,大多数工作都是从滤波器或通道的角度来设计掩模,很少有工作关注 s t r i p e s stripes stripes。此外,滤波器骨架(FS)不仅仅是一个 m a s k mask mask,我们认为每个滤波器都有两个属性:权重和形状。FS是学习“形状”属性。从本文3.1节可以看出,仅通过学习滤波器的“形状”,保持滤波器权值随机初始化,网络仍然有良好的性能。
2020—Prunging filter in filter

3 The proposed Method

3.1 Filter Skeleton (FS)

引入FS是为了学习滤波器除了权重之外的另一个重要特性:形状,这是一个与滤波器 s t r i p e s stripes stripes相关的矩阵。设第 l l l个卷积层的权值 W l W^l Wl的大小为 R N × C × K × K R^{N×C×K×K} RN×C×K×K, N N N是滤波器数量。C是通道个数,K是核尺寸大小。则该层中FS的大小为 R N × K × K R^{N×K×K} RN×K×K。即,FS中的每个值对应于滤波器中的一个 s t r i p e s stripes stripes。每层的FS首先用全一矩阵进行初始化。在训练过程中,我们将过滤器的权重与FS相乘。从数学上讲,损失表示为:
2020—Prunging filter in filter
其中 I I I代表 F S FS FS,表示 ⊙ ⊙ ⊙点积。有了 I I I,前向传播过程是:
2020—Prunging filter in filter
W W W和 I I I的梯度为:
2020—Prunging filter in filter
其中 M H M_H MH​、 M w M_w Mw​分别表示feature map的高度和宽度。当 p < 1 p<1 p<1或 p > M H p>M_H p>MH​或 q < 1 q<1 q<1或 q > M W q>M_W q>MW​时 X c , p , q l = 0 X_{c, p, q}^{l}=0 Xc,p,ql​=0(这对应于padding和shifting [38,39]过程)。
2020—Prunging filter in filter
根据(1),在训练期间联合优化滤波器权重和FS。在训练之后,我们将 I I I合并到过滤器权重 W ( W( W(I.e. , W ← W ⊙ I ) , W \leftarrow W \odot I) ,W←W⊙I),计算时只使用 W W W。因此,在应用推理时不会给网络带来额外的成本。整个过程如图3所示。为了进一步说明“形状”属性的重要性,我们进行了一个实验,其中过滤器的权重是固定的,在训练过程中只能对FS进行优化。结果如表1所示。可以看出,在不更新滤波器权重的情况下,网络仍然获得了不错的结果。图4显示了基线网络和由滤波器骨架(FS)训练的网络的权重分布。可以看出,FS训练的权值稀疏且平滑,对输入图像的方差较小,输出稳定。因此,该网络对输入数据或特征的变化是稳健的。
2020—Prunging filter in filter

3.2 Stripe-wise pruning with FS

从图1中可以看出,并非所有 s t r i p e stripe stripe在网络中的贡献都是相等的。为了构建一个紧凑且高度修剪的网络,过滤器骨架(FS)需要是稀疏的。即,当FS中的某些值接近于0时,可以对相应的条带进行修剪。因此,在用FS训练网络时,我们对FS进行正则化,使其稀疏。
2020—Prunging filter in filter
其中 α α α控制正则化的大小, g ( I ) g(I) g(I)表示对 I I I的 l 1 l_1 l1​范数惩罚,这是许多修剪方法中常用的[7,8,9]。其中, g ( I ) g(I) g(I)表示为:

2020—Prunging filter in filter

2020—Prunging filter in filter

从(5)中,FS隐式学习每个滤波器的最优形状。在第4.4节中,我们将滤波器的形状可视化,以进一步说明这一现象。为了实现高效的剪枝,我们设置了阈值 δ δ δ,在训练过程中,FS值小于 δ δ δ的 s t r i p e stripe stripe不会被更新,可以在训练后进行剪枝。值得注意的是,在对修剪后的网络进行推理时,由于滤波器被破坏,不能直接使用滤波器作为一个整体对输入特征图进行卷积。相反,我们需要单独使用每个 s t r i p e stripe stripe来执行卷积,并对每个 s t r i p e stripe stripe生成的特征地图求和,如图5所示。从数学上讲,SWP中的卷积过程写为:
2020—Prunging filter in filter
其中, X n , h , w l + 1 X_{n, h, w}^{l+1} Xn,h,wl+1​是特征图在 l + 1 l+1 l+1层中的一点。从(7)开始,SWP仅修改传统卷积处理中的计算顺序,因此不向网络添加额外的操作(FLOP)。值得注意的是,由于每个 s t r i p e stripe stripe在滤波器中都有自己的位置。SWP需要记录所有 s t r i p e stripe stripe的索引。然而,与整个网络参数相比,它的成本很低。假设第 l l l卷积层的权重 W l W^l Wl的大小为 R N × C × K × K R^{N×C×K×K} RN×C×K×K。对于SWP,我们需要记录 N × K × K N×K×K N×K×K个索引。与记录 N × C × K × K N×C×K×K N×C×K×K个指标的个体权重剪枝相比,我们将权重剪枝的指标减少了 C C C倍。另外,如果将该滤波器中的所有 s t r i p e stripe stripe从网络中去除,我们也不需要记录该滤波器的索引,SWP退化为传统的滤波器式剪枝。为了与传统的基于FP的方法进行公平的比较,我们在计算网络参数时增加了索引的数量。
与传统的基于FP的修剪相比,SWP有两个优势:
-假设核大小为 K × K K×K K×K,则SWP算法比传统的基于FP的剪枝算法具有 K 2 K^2 K2倍的细粒度,从而获得更高的剪枝比。
-对于某些数据集,例如CIFAR-10,SWP修剪的网络即使在没有微调过程的情况下也保持高性能。这将SWP与许多其他需要多个微调过程的基于FP的修剪方法区分开来。原因是FS学习每个过滤器的最佳形状。通过修剪不重要的条纹,过滤器不会丢失太多有用的信息。相反,FP修剪直接删除可能损坏网络获取的信息的过滤器。

4 Experiments

表2:在CIFAR-10数据集上比较SWP和最新的基于FP的方法。ResNet56的基线准确率为93.1%[29],VGG16的基线准确率为93.25%[7]。2020—Prunging filter in filter
表3:在ImageNet数据集上比较SWP和最新的修剪方法。所有方法均以ResNet18为骨干,基线TOP-1和TOP-5准确率分别为69.76%和89.08%
2020—Prunging filter in filter

结论

在本文中,我们提出了一种称为SWP的修剪模式。 SWP不会修剪整个过滤器,而是将每个过滤器视为多个 s t r i p e stripe stripe的组合(即1×1个过滤器),然后对 s t r i p e stripe stripe执行修剪。我们还介绍了“过滤器骨架”(FS),以有效地了解用于修剪的滤波器的最佳形状。通过广泛的实验和分析,我们证明了SWP框架的有效性。可以做进一步的工作来开发更有效的正则化器,以进一步优化DNN。

上一篇:2021-09-15


下一篇:FindWindow