结构重参数化剪枝

ResRep: Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting(剪枝)

https://hub.fastgit.org/DingXiaoH/ResRep

https://arxiv.org/abs/2007.03260v3

提出了一种新的无损的通道剪枝方法ResRep(也就是filter pruning),其目的是通过减小卷积层的宽度(输出通道数)来精简卷积神经网络(CNN)。受记忆和遗忘的独立性的神经生物学研究的启发,我们提出将CNN重参数化为记忆部分和遗忘部分,前者学习维持表现,后者学习提高效率。通过在前者上使用常规SGD训练重参数化模型,而在后者上使用我们原创的带惩罚梯度的更新规则,我们实现了结构化稀疏性(structured sparsity),使我们能够等价地将重参数化模型转换为具有较窄层的原始结构。这种方法不同于传统的基于学习的剪枝范式,传统的剪枝范式对参数量施加惩罚以产生结构化稀疏性,这可能会抑制记忆所必需的参数。我们的方法将ImageNet上精度为76.15%的标准ResNet-50精简为只有45%的FLOPs和无精度下降的更窄ResNet-50,据我们所知,这是第一个以如此高的压缩比实现无损修剪的方法。

1 导言

为了压缩和加速卷积神经网络(CNN)进行高效的推理,人们提出了许多方法,包括稀疏化[10,12,14]、通道剪枝[20,21,29]、量化[4,5,39,62]、知识蒸馏[22,26,35,55],等等,通道剪枝[21](又称滤波器修剪[28]或网络slimming[36])减少卷积层的宽度(即输出通道的数量),以有效减少所需的浮点运算量(FLOPs)和内存占用,这是对其他模型压缩和加速方法的补充,因为它只生成原始体系结构的更薄模型,没有定制的结构或额外的操作(customized structures or extra operations)。

然而,由于CNN的表示能力取决于卷积层的宽度,因此在性能下降的情况下很难减小宽度。在ResNet-50[16]等实际CNN体系结构和ImageNet[6]等大规模数据集上,高压缩比的无损剪枝一直被认为具有挑战性。为了在压缩比和性能之间进行合理的折衷,一个典型的范例(图1.A)[2,3,9,30,33,56,57]试图在卷积核上训练幅度相关的惩罚损失的模型(例如,group Lasso[51,54]),以产生结构化稀疏性。也就是说,某些通道的所有参数都变得很小。虽然这样的训练过程可能会降低性能,但剪掉这些通道会造成较少的损坏。值得注意的是,如果被剪掉的通道的参数量足够小,剪枝模型可以提供与之前相同的性能(即,在训练之后但在剪枝之前),我们称之为完美剪枝perfect pruning。

由于训练阶段和剪枝操作都会降低模型的性能,本文从两个方面对基于训练的剪枝方法进行了评价。

1) 抗性Resistance。如果在训练中表现得很好,我们会说它有很强的resistance。这是因为训练过程的目的是在模型中引入一些期望的属性,如结构稀疏性,以便进行剪枝。由于优化目标的改变和参数的偏离,这些特性的出现可能会降低模型的性能(称为训练损伤)。2) 可剪性Prunability。我们在训练后将模型剪枝成一个较小的模型,在训练阶段得到的属性将减少剪枝造成的损伤。如果训练后的模型具有较高的剪枝率和较低的性能下降,则称其具有较高的可剪性。例如,如果我们在训练阶段使更多的通道非常接近于零,我们将能够在不破坏模型的情况下剪掉更多的通道。

显然,我们需要一种既具有高抗性又具有高可剪性的修剪方法。然而,传统的基于惩罚的范式自然会遇到一个抗性和可剪性的权衡。以group Lasso为例,如果采用强惩罚来达到高结构稀疏性,训练造成的伤害将是很大的(图4)。相反,使用弱惩罚来保持性能,我们将获得低稀疏性,因此低可剪枝性和大剪枝造成的损害。详细分析将在第3.3节中介绍。

本文提出了一种新的方法ResRep,该方法由卷积重参数化和梯度重设两个关键部分组成。ResRep在很大程度上超过了最近的竞争对手,并且是第一个在ImageNet上的ResNet-50上实现真正的无损剪枝(剪枝前后的top-1准确率为76.15%),剪枝率高达54.5%(即得到的模型只有原始FLOPs的45.5%)。

ResRep的灵感来自记忆和遗忘的神经生物学研究。一方面,记忆需要大脑加强一些突触,但去电位的其他,这类似于CNN的训练过程,使一些参数大一些小。另一方面,通过脊椎收缩或丢失消除突触是经典的遗忘机制之一[50],这是生物神经网络提高能量和空间效率的关键过程,类似于剪枝。神经生物学研究表明,记忆和遗忘分别由Rutabaga腺苷酸环化酶介导的记忆形成机制和Rac调节的脊柱收缩机制独立控制[11,15,53],表明通过两个解耦的模块来控制学习和修剪更为合理。

受这种独立性的启发,我们建议将传统范式中耦合的“记忆”和“遗忘”解耦,因为卷积参数同时包含在“记忆”(目标函数)和“遗忘”(惩罚损失)中,以实现两者的权衡。也就是说,传统的方法强制每个通道都“忘记”,去掉“忘记最多”的通道。相反,我们先将原始模型重新参数化为“记忆部分”和“遗忘部分”,然后对前者应用“记忆学习”(即带有原始目标函数的常规SGD)来保持“记忆”(原始性能),对后者进行“遗忘学习”(一种称为梯度重置的定制更新规则),以“消除突触”(零输出通道)。更具体地说,我们将原始的conv-BN(卷积层接一个批量归一化层的缩写)重参数化为conv-BN-compactor,其中compactor是1×1卷积。

在训练过程中,我们只对compactors添加惩罚梯度,选择一些compactors通道,并将它们的梯度归零。这样的训练过程使得compactors的某些通道非常接近于零,这些通道被移除时不会受到修剪造成的损坏。然后通过一系列的线性变换,将conv-BN-compactor序列等价地转化为一个通道数较少的conv层。最终,生成的模型将具有与原始模型相同的体系结构,但更窄的层。图1.B示出了用于说明的示例。请注意,ResRep还可以用于修剪全连接的层,因为它们相当于1×1卷积[40]。

图1:传统的基于惩罚的修剪 vs. ResRep。我们修剪一个3×3层,带有一个输入通道和四个输出通道,以方便说明。为了便于可视化,我们对核K\in R^{4\times 1\times 3\times 3}展开成一个矩阵W\in R^{4\times 9 }. A)为了对K的某些通道(即W的行)进行剪枝,我们在原始损失的基础上增加了一个惩罚损失,这样梯度会使某些行的magnitude变小,但无法实现完美剪枝。B)ResRep构造了一个compactor,其带有核矩阵核Q\in R^{4\times 4} . 在惩罚梯度的驱动下,compactor选择一些通道并生成一个二值掩码,该掩码将Q的一些原始梯度重置为零。在多次迭代之后,那些具有重置梯度的compactorchannels变得无限接近于零,这使得完美的修剪成为可能。最后,将conv-BN-compactor序列等价地转换成一个具有两个通道的常规卷积层。空白矩形表示零值。

ResRep的特点:1)高抗性。ResRep不改变原始模型(即conv-BN部件)的损失函数、更新规则或任何训练超参数,以便它们像往常一样学习保持性能。2) 高可剪性。通过惩罚梯度驱动compactor学习要修剪的通道,我们可以使许多compactor通道小到可以实现完美的修剪,即使惩罚强度很小。3) 给定所需的FLOPs全局缩减率,ResRep可以在不需要先验知识的情况下自动找到每个层的合适最终宽度,使其成为CNN结构优化的有力工具。4) 端到端训练和简单实施(Alg.1). 我们的贡献总结如下:

•    受神经生物学研究的启发,我们建议将“记忆”和“遗忘”解耦,以促进通道修剪。

•    我们提出了一种新的方法,包括梯度重置和卷积重参数化两部分,以实现高抗性和可剪性。

•    我们在常见基准模型上取得了最新成果,包括在ImageNet上对ResNet50进行真正的无损修剪,修剪率为54.5%。

•    我们开源在https://github.com/DingXiaoH/ResRep 鼓励进一步研究。

2    相关工作

修剪可以指从网络中删除任何参数或结构。经典的非结构化剪枝方法[10,12,13,14]可以减少非零参数的数目,但在一般的计算框架上不能实现加速。结构化剪枝从模型中删除了一些整体结构(例如,全连接层的神经元、2D内核和通道),这对硬件更友好[34,57]。通道剪枝是一种非常实用的方法,它不仅减少了模型的大小、实际计算量,而且还减少了中间层特征图和模型权重所占用的内存。ResRep是一种静态剪枝方法,用于生成具有固定结构的模型,该模型可以通过量化等其他方法进一步压缩[4,5,39,62]。动态剪枝在某些情况下是有利的,例如,slimmable networks[60]可以在不同的宽度上执行。针对特定应用场景的修剪也引起了很多关注,比如有限数据场景[44]。

大多数静态信道剪枝方法可以分为两大类。修剪-然后-微调方法通过一些度量[1、24、28、41、45、46、47、61]从训练好的模型中识别和修剪不重要的通道,这可能导致显著的精度下降,然后微调以恢复性能。一些方法测量重要性并逐步修剪[8,31],这可以看作是重复迭代的修剪-然后-微调。然而,一个主要的缺点是修剪后的模型很难微调,并且最终的精度无法保证。正如前面的工作[38]所强调的那样,修剪后的模型很容易陷入糟糕的局部极小值,有时甚至不能达到与相同结构的网络从头训练的类似的精度水平。这样的发现促使我们追求完美的修剪,从而消除了微调的需要。由于ResRep中的剪枝操作是训练参数的数学等价变换,因此不会导致性能下降,因此不需要微调。基于学习的剪枝方法利用一个定制的学习过程来减少剪枝造成的伤害。除了上述基于惩罚的范式,将一些通道归零[2,3,9,30,33,56,57],其他一些方法通过元学习[37],对抗学习[32]等进行修剪。与这些复杂的方法相比,ResRep可以很容易地实现和端到端训练。

3     无损的通道修剪的ResRep算法

3.1. 方法和背景

我们首先介绍卷积和通道剪枝的公式。对于具有D个输出通道、C个输入通道、核大小为K\times K的卷积层,我们用 \mathrm{K}\in R^{D\times C\times K\times K}表示核参数张量, \mathrm{b}\in R^{D} 表示可选择使用的偏置项,输入为 \mathrm{I}\in R^{N\times C\times H\times W}, 输出为 \mathrm{O}\in R^{N\times D\times H’\times W’}\otimes表示卷积op,B表示broadcast函数,其将\mathrm{b}广播为{N\times D\times H’\times W’},我们有:

 \mathrm{O}= \mathrm{I}\otimes  \mathrm{K}+B( \mathrm{b})    (1)

对于无偏置项但后接一个BN层[25]的卷积层,BN层有均值\mu 、标准差\sigma 、缩放因子\gamma 和偏置项\beta \in R^D,我们有:

i为卷积层的index,为了剪枝卷积层i,我们根据一些规则获得被剪掉通道(pruned channels)的index setP^{(i)}\subset \left\{ 1,2...D \right\} ,以及它的补集,也就是幸存下来的通道的index setS^{(i)}= \left\{ 1,2...D \right\}/{P^{(i)}}。剪枝操作保留卷积层iS^{(i)}输出通道和后续层i+1的相应输入通道,并丢弃其他通道。如果有偏置项或后面的BN中的相应偏置项,也应丢弃。得到的核是

3.2  卷积重参数化

受关于遗忘和记忆独立性的神经生物学研究的启发[11,15,50,53],我们建议将原始模型显式地重新参数化为“记忆部分”和“遗忘部分”。具体来说,对于每个我们希望剪掉的卷积层及其BN层,我们称之为目标层target layers,我们用一个额外的1×1卷积层(核为 \mathrm{Q}\in R^{D\times D} )来重参数化,其称作为compactor夯实器。给出一个经过良好训练的模型\mathrm{W},我们构造一个重参数化模型\hat{\mathrm{W}} ,其conv-BN层用原始模型初始化, \mathrm{Q}初始化为一个identity matrix,这样重参数化模型的输出就和原始模型完全一样。通过梯度重置进行训练( training with Gradient Resetting,3.3节详细描述)后,我们剪掉夯实器中所有接近为0的通道,并将模型转换为\mathrm{W}’\mathrm{W}’\mathrm{W}有相同的结构,但层更窄。具体地说,对于一个特定的具有核 \mathrm{Q}的夯实器,我们对范数小于阈值\epsilon 的通道进行剪枝。形式上,我们得到要剪掉的集合P=\left\{ j\vert \ {\vert \vert { \mathrm{Q}}_{j,:}  \vert  \vert }_{2} <\epsilon     \right\} ,要留下的集合S=\left\{ j\vert \ {\vert \vert { \mathrm{Q}}_{j,:}  \vert  \vert }_{2} >\epsilon     \right\} 。类似于公式3,我们用 \mathrm{Q}’= \mathrm{Q}_{S,:} ,来修剪 \mathrm{Q}。在我们的实验中,我们使用\epsilon=1\times 10^{-5} ,我们发现其小到足以实现完美修剪。现在夯实器的行数少于列数,即 \mathrm{Q}’\in R^{D’\times D} ,D’=\vert S \vert 。为了将\hat{\mathrm{W}} 转换为\mathrm{W}’,我们寻求将每个conv-BN-compactor序列转换成一个卷积层,该卷积层 \mathrm{K}’\in R^{D’\times C\times K\times K}  \mathrm{b}’\in R^{D’}

首先,我们将conv-BN序列等价地转换成conv层进行推理,得到与原始序列相同的输出。对于一个卷积层接BN层,其参数为 \mathrm{K}\mu\sigma \gamma \beta ,我们按照如下方式重塑一个新的卷积层,其参数为\overline{ \mathrm{K}} \overline{ \mathrm{b}} 。对于1\leq j\leq D

根据公式(1)和公式(2)以及卷积的homogeneity,很容易得出:

然后我们寻找计算 \mathrm{K}’ \mathrm{b}’的方法,使得:

利用卷积的可加性,我们得到

直觉是,B(\overline{ \mathrm{b}} )的每一个通道是一个常数矩阵,这样B(\overline{ \mathrm{b}} )\otimes \mathrm{Q}’也是一个常数矩阵。由于在结果\mathrm{I}\otimes \overline{\mathrm{K}}上用 \mathrm{Q}’的1×1卷积只是进行通道间的重组,通过重新组合 \overline{\mathrm{K}}中的条目(entries)以将 \mathrm{Q}’合并进 \overline{\mathrm{K}}中是可行的。设T是转置函数,例如T( \overline{\mathrm{K}})是一个C\times D\times K\times K的张量,我们给出了构造 \mathrm{K}’ \mathrm{b}’的公式,其是易于验证的:

在实际应用中,我们将训练好的重参数化模型的权值进行转换和保存,构建一个架构相同、层更窄、无BN层的网络,使用保存好的权重进行测试和部署。

3.3    梯度复位

然后,我们描述了如何在保持性能的同时产生结构稀疏性。我们从基于特定核{\mathrm{K}}的传统的惩罚损失范式开始,使一些通道的magnitude变小以获得高可修剪性,即\vert \vert {{\mathrm{K}}}_{P,:,:,:}  \vert  \vert \rightarrow 0。令\Theta 表示整个参数集(universal set of parameters),XY是数据样本及其标签。L_{\mathrm{perf}}(X,Y,\Theta )是与性能相关的目标函数(例如,分类任务的交叉熵)。传统的方法是在原始损失的基础上增加一个惩罚损失项P({\mathrm{K}}),通过一个预定义的强度因子λ

其中P的常见形式包括L1[28]、L2[9]和group Lasso[33,57]。具体地说,group Lasso在产生通道结构稀疏性方面是有效的(与L1/L2产生的零散的零值sporadic zeros形成对比)。在下面的讨论中,我们用F^{(j)}={\mathrm{K}}_{j,:,:,:} 表示\mathrm{K}中一个特定通道。于是Lasso损失定义为:

其中{\vert \vert F^{(j)}  \vert  \vert }_{E} 是欧式范数

G(\mathrm{F})为SGD更新的梯度,我们有

特定通道F的训练动态非常简单:从一个经过良好训练的模型开始,F位于局部最优值附近,因此等式13的第一项接近0,但第二项不接近,因此F将被推近0。如果F对性能很重要,则目标函数将保持其大小,即第一个梯度项将与第二个梯度项竞争,因此F最终将比以前小,具体取决于λ. 否则,以极端情况为例,如果F完全不影响Lperf,则第一项将为0,因此F将在第二项继续向0增长。即,绩效相关损失和惩罚损失相互竞争,因此F的结果值将反映其重要性,为方便起见,我们称之为基于能力的重要性评估。然而,我们面临一个两难境地。问题A:惩罚使每个通道的参数偏离目标函数的最优值。值得注意的是,轻微偏差可能不会带来负面影响,例如,L2正则化也可以被视为轻微偏差。然而,对于一个强大的惩罚,尽管一些通道被调零以进行修剪,但是剩余的通道也变得太小而无法保持表示能力,这是一个不希望的副作用。问题B:对于高阻力的轻微惩罚,我们无法实现高可修剪性,因为大多数通道只是变得比以前更接近0,但不够接近完美修剪。

我们建议通过重新设置目标函数的梯度来实现高可剪枝性,并且代价较轻。我们引入一个二元掩码m∈ {0,1},表示是否要将F归零。为了便于实现,我们不向目标函数中添加任何项(即Ltotal=Lperf),只需计算梯度,然后手动应用掩码,添加惩罚梯度并

在实践中,为了决定将哪些通道归零(即,为多个通道设置掩码值),我们可以简单地遵循较小的范数不太重要的规则[28]或其他启发式方法[24,46]。这样,我们就解决了上述两个问题。A) 虽然我们在每个通道的目标相关梯度上加上套索梯度,相当于在原始损失上加上套索损失来偏离最优值,但这种偏离是轻微的(λ = 10−4)因此对性能无害。B) 当m=0时,第一项不再与第二项竞争,因此即使是轻微的λ 能使F稳定地向0移动。使用生成的梯度进行SGD更新。也就是说,

3.4. 记得的部分总是记得,忘记的部分逐渐忘记

与传统的(图4)相比,通过梯度重置简单地用较小的范数将原始信道归零显示出了优越性,但是我们注意到一个问题:归零的目标相关梯度编码了维持性能所需的信息,应该保留这些信息以提高电阻。直观地说,参数被迫“忘记”一些有用的信息(梯度)。幸运的是,解决方案是完全卷积重参数化,这需要我们修剪压缩只,而不是原来的conv层。在这种情况下,我们只强制压缩程序“忘记”,而所有其他层仍然专注于“记住”,因此我们不会丢失任何编码在原始核的梯度中的信息。

首先,我们需要决定Q的哪些通道需要调零。在训练重参数化模型时,我们只在紧致器中加入套索梯度。经过几个训练阶段后,| | Qj,:| |将反映通道j的重要性,因此我们开始根据Q值进行通道选择。设n为压实机的个数,m(i)

(D(i)-维二元向量)作为第i个紧子的掩码,我们定义了t(i)∈ rd(i)作为度量向量,

对于每一次信道选择,我们计算每个压缩器中每个信道的度量值,并将它们组织为映射M={(i,j)→ t(i)j|∀1≤ 我≤ n、 1个≤ j≤ D(i)}。然后我们将M的值按升序排序,开始从最小值中一次选取一个,并将相应的掩码M(i)j设置为0。当减少的触发器(即,原始触发器减去没有当前mask-0通道的触发器)到达目标时,我们停止拾取,或者我们已经拾取了θ (命名为“通道选择限制”(channel selection limit)通道。未拾取通道的遮罩值设置为1。动机很简单:在讨论了基于能力的重要性评估之后,就像传统的使用惩罚损失来与原始损失竞争,选择规范较小的渠道一样,我们使用惩罚梯度来与原始梯度竞争。更好的是,所有的度量值在开始时都是1(因为每个压缩程序内核都被初始化为一个单位矩阵),这样就可以在不同的层之间公平地进行比较。我们初始化θ 作为一个小数字,增加θ 每隔几次迭代并重新选择通道,以避免一次将过多通道归零。如图4(右)所示,在套索梯度的影响下,这些mask-0通道将变得非常接近于0,从而在压缩器中出现结构化稀疏性。

实验

我们进行了ResRep修剪,并将结果与最近其他竞争对手的结果进行了比较,然后通过烧蚀研究分别说明了卷积重参数化和梯度重设的意义。

数据集、模型和设置

我们在ImageNet1K[6]上使用ResNet-50和MobileNet[23]。对于再现性,我们遵循PyTorch示例[48]提供的官方数据扩充,包括随机裁剪和左右翻转。对于ResNet-50基本型号,我们使用官方的torchvision版本(76.15%的top-1精度)[49]与大多数竞争对手进行公平比较。对于MobileNet,我们从零开始训练,初始学习率为0.1,批量大小为512,余弦学习率退火70个历元,达到70.78%的top-1准确率,略高于原文献[23]的报道。然后我们使用ResNet-56/110[16]对

CIFAR-10[27]标准数据扩充[16]:填充到40× 40,随机裁剪和左右翻转。我们训练批大小为64的基本模型,公共学习率调度初始化为0.1,在第120和180个历元处乘以0.1,在第240个历元后终止。我们将失败计数为乘法加法,ResNet-50[49]为4.09G,MobileNet为569M,ResNet-56/110为126M/253M。

ImageNet和CIFAR-10的剪枝结果

我们在ResNet-50和MobileNet上使用相同的超参数应用ResRep:λ = 1× 10−4、通道选择限制θ = 4和θ ← θ + 每200次迭代4次,批量大小=256,初始学习率=0.01,余弦退火180次。第一个通道选择在5个周期后开始。为了便于比较,我们用ResNet-50进行了三次实验,FLOPs减少目标分别为54.5%(比FPGM[20]高出1%)、56.1%(SASL[52])和62.1%(HRank[29]),MobileNet为73.9%,与MetaPruning[37]进行了比较。紧随大多数竞争对手之后,我们删掉了第一个(1× 1) 第二(3)× 3) ResNet-50的每个剩余块中的conv层,以及MobileNet的每个非深度conv。受先前工作[10]的启发,我们利用动量和权重衰减进行CNN稀疏化,将压实机上的SGD动量系数从0.9(大多数情况下的默认设置)提高到0.99。直观地说,mask-0通道在同一方向(即向零方向)上连续增长,并且这种趋势在动量中累积,因此较大的动量系数可以加速归零过程。对于ResNet-56/110,目标层包括残差块的第一层,我们使用与ImageNet相同的超参数,除了64和480个训练周期的批量大小。

桌子。1,2显示了ResRep的优越性。我们报告的结果是在ImageNet上平均运行3次,在CIFAR-10上平均运行5次。在ResNet-50上,ResRep实现了0.00%的top-1精度下降,据我们所知,这是第一个以如此高的剪枝率(54.54%)实现无损剪枝。就排名第一的准确率下降而言,ResRep比SASL高出0.82%,比HRank高出3.32%,比最近的所有竞争对手都高出一个显著的幅度。在MobileNet上,ResRep的性能比metaprunning好1.77%。在ResNet-56/110上,ResRep的性能也优于其他方法,尽管精度下降的比较偏向于其他方法,因为我们的基本模型具有更高的精度。也就是说,在不降低精度的情况下修剪更高精度的模型更具挑战性。

每个目标层的最终宽度(图3)显示ResRep在给定期望的全局剪枝率的情况下,在没有任何先验知识的情况下发现适当的最终结构。值得注意的是,ResRep选择在ResNet-50和MobileNet的更高层保留更多的通道,但是在ResNet-56的最后一个块上进行了积极的修剪,最后只有一个通道作为其第一层。一个可能的解释是,丰富的更高层次的功能对于保持像ImageNet这样的困难任务的装配能力是必不可少的,而ResNet-56在CIFAR-10上存在过度装配的问题。

我们构建了一系列基线和ResRep的变体以进行比较(表1)。3). 1) 在相同的学习速率下,对基础模型进行了180个周期的微调,精度仅提高了0.04%,说明ResRep的性能不仅仅是训练设置的影响。2) 我们通过构建ResNet-50来构造一个均匀收缩的基线,在ResNet-50中,所有的目标层都减小到原来宽度的1/2,因此FLOPs减少了55.4%。我们使用与基础模型相同的训练设置从头开始训练,最终的准确率为74.39%,比我们的56.1%修剪模型低1.58%。3) 我们将ResRep与经典的pruningthen微调方法进行了比较,该方法通过欧氏范数对基础模型的所有通道进行排序,从最小通道修剪到54.5%的缩减率,并在相同的180个历元设置下对生成的模型进行微调。毫不奇怪,经过微调的模型几乎不比从头开始训练的缩小基线好。从训练损失和验证精度(图2)可以看出,修剪模型恢复得很快,但不能达到54.5%修剪ResRep模型的可比精度。这一观察结果与先前的一项研究一致,即修剪后的模型很容易陷入糟糕的局部极小值[38]。4) 我们尝试了一种简单的重参数化方法来验证卷积重参数化的意义。具体地说,我们把压缩子的形式从1改为1× 1卷积到初始化为1的D维可训练向量(即,按通道缩放层),并且Lasso惩罚自然退化为L1。经过与54.5%剪枝模型相同设置的180个历元的训练,最终的准确率为75.57%,降低了0.58%。直观地说,用1重新参数化× 1 conv将原始内核折叠为较低的dim内核(即,重新组合通道),但向量只是删除一些通道。5) 通过将压路机的动量系数设为0.9,验证了0.99动量的必要性。结果是,更少的通道接近于零(我们使用\epsilon=1)× 10−5为临界值),具有相同的培训过程。虽然动量越大,参数减小的速度越快,但如果可以接受更长的训练时间,就没有必要了。

4.3. 烧蚀研究

然后,我们在ResNet-56上用上述相同的训练配置进行控制实验,分别评估卷积重参数化(Rep)和梯度重置(Res)。作为基线,我们采用传统的范例,在所有目标层上直接添加套索损失(等式11)。与λ ∈ {0.3、0.03、0.003、0.001},得到四个最终精度不同的模型:69.81%、87.09%、92.65%、93.69%。为了实现对每个训练模型的完美剪枝,我们通过一次删除一个通道,直到精度下降到原始模型以下,从而获得最小结构。也就是说,删减最小结构的任何一个通道都会降低精度。记录了最小结构的FLOPs减少率:81.24%,71.94%,57.56%,28.31%。通过对具有不同参数的紧子应用套索损失,我们测试了Rep,但没有Resλ 以达到可比的FLOPs减少作为基线。在Res没有Rep的情况下,我们直接对原始conv核进行梯度重置,目标是与四个基线模型相同的FLOPs减少。然后我们使用全功能ResRep进行实验。如图4左侧所示,为了更好的可读性,忽略了基线数据点(81.24%,69.81%),Res和Rep提供了比基线更好的最终精度,并且在组合时表现更好。

我们通过保存模型的参数来研究训练过程λ = 每5个时期0.03基线。训练完成后,得到模型的最小结构,然后返回对每个保存的模型进行剪枝,并报告剪枝前后的精度。对于ResRep,我们也做同样的操作,但是在压缩程序上,而不是在原始conv层上。图4(中)显示,由于强套索带来的副作用,基线精度急剧下降,这意味着低阻力。相反,ResRep的原始精度保持在较高的水平。剪枝造成的损伤(原始精度减去剪枝精度)在开始时对基线模型和ResRep模型都很好,但随着稀疏性的出现而减小。由于两个损失的能力,基线的剪枝精度提高缓慢且不稳定。

对于每个保存的模型,我们还根据最终的最小结构,收集最后存活的参数的二次和以及最后修剪的参数的二次和。图4(右,注意对数标度)显示基线参数很快变得太小,无法维持性能,这解释了阻力差的原因。对于ResRep,存活参数的大小减小,但由于轻微的惩罚而保持在一个较高的水平,而那些需要修剪的参数(即mask-0)则稳定地下降,很快就接近于零,这就解释了ResRep的高阻力和高可修剪性。

5结论

ResRep在ImageNet上使用ResNet-50实现了54.5%的无损剪枝,将其重新参数化为“记忆”和“遗忘”部分,可以等价地转换回推理。ResRep的优越性表明,将传统的基于学习的剪枝分解为“绩效导向学习”和“剪枝导向学习”可能是一个很有前途的研究方向。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容