Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化

摘要

我们提出了一种新的无损通道修剪方法ResRep(又称滤波器修剪),它旨在通过减少卷积层的宽度(输出通道的数量)来精简卷积神经网络(CNN)。受关于记忆和遗忘独立性的神经生物学研究的启发,我们提出将CNN重新参数化为记忆部分和遗忘部分,前者学习保持性能,后者学习效率。通过在前者上使用常规的SGD训练重新参数化的模型,而在后者上使用新的带有惩罚梯度的更新规则,我们实现了结构化稀疏性,使我们能够等效地将重新参数化的模型转换为具有更窄层的原始体系结构。这种方法将ResRep与传统的基于学习的剪枝范式区别开来。传统的剪枝范式通过对参数进行惩罚来产生结构化稀疏性,而结构化稀疏性可能会抑制对记忆至关重要的参数。我们的方法将标准的ResNet-50在ImageNet上的准确率为76.15%,缩小到更窄的一个,只有45%的FLOPs,而且精度没有下降,这是我们所知的第一个在如此高的压缩比下实现无损修剪。

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_02


图1:传统的基于惩罚的修剪 vs. ResRep。为了说明,我们用一个输入通道和四个输出通道修剪了一个3 × 3的卷积层。为了便于可视化,我们解开了内核Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_03Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_04。A)为了修剪K的一些通道(即W的行),我们在原来的损失的基础上在核上增加一个惩罚损失,这样梯度会使一些行的大小变小,但又不会小到可以实现完美修剪。B) ResRep构造了一个核矩阵Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_05的压实器。在惩罚梯度的驱动下,压缩器选择它的一些通道并生成一个二进制掩码,将Q的一些原始梯度重置为零。最后,将 conv-BN-compactor序列等价地转换成具有两个通道的正则卷积层。空白矩形表示零值。

3. ResRep for Lossless Channel Pruning

3.1 ResRep for Lossless Channel Pruning

我们首先介绍卷积和通道修剪的公式。对于输出通道为Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_06,输入通道为Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_07,核的尺寸为Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_08Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_09表示参数张量,Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_10为可选择的偏执项。Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_11Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_12分别为特征图的输入和输出。Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_13为卷积运算符。Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_14是将Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_15复制到Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_16的广播函数,我们有

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_17


对于没有偏置项但后接批归一化(BN)[25]层的卷积层,其中批归一化的均值为Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_18,标准方差为Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_19,此外Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_20表示缩放因子,Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_21为平移参数。

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_22


Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_23表示卷积层的索引。为了剪枝卷积层Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_23,根据一些规则我们得到了我们得到了剪枝通道的指标集Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_25。则补集Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_26。修剪操作保留了卷积层Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_23Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_28个输出通道,也要丢弃下一层输入通道相应的的项。如果有的话,也应该丢弃偏置或后面的BN中的相应条目。所获得的核是

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_29

3.2 卷积重参数化

受神经生物学关于遗忘和记忆独立性的研究[11,15,50,53]的启发,我们提议将原始模型明确地重参数化为“记忆部分”和“遗忘部分”。具体来说,对于每个我们修剪的每个卷积层和接下来的BN层,它们被称为目标图层。我们使用额外的逐点(1×1)卷积和核Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_30重新参数化,称为compactor。给定一个训练良好的模型Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_31,我们通过将conv-BN初始化为Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_31的原始权值,Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_33初始化为单位矩阵来构造一个重新参数化的模型Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_34,使重新参数化的模型产生与原始模型相同的输出。在进行梯度重置训练(将在3.3节详细描述)后,我们对compactor中接近于零的通道进行修剪,并将模型转换为Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_35,它具有与Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_36相同的架构,但具有更窄的层。具体地说,对于具有核Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_33的特定compactor,我们对范数小于阈值Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_38的通道进行剪枝。形式上,我们通过以下方式得到待剪枝集Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_39幸存集Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_40。与公式3类似,我们剪枝Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_33通过Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_42,在我们的实验中,我们使用了Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_43,它被发现足够小,可以实现完美的剪枝。现在,compactor的行数少于列数,即Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_44。为了将Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_34转换为Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_35,我们寻求将每个conv-BN-compactor序列转换成具有Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_47和偏置Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_48的Conv层。

首先,我们将一个conv-BN序列等价地转换成一个卷积层进行推理,得到与原始序列相同的输出。利用卷积层的Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_49及其后面的BN,我们可以用内核Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_50和偏置Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_51构造一个新的卷积层,如下所示。对于Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_52

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_53


根据式1、式2和卷积的齐次性,很容易验证。

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_54


然后我们求出构造Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_55Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_56的公式

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_57


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

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_58


直观地说,Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_59的每个通道都是一个常数矩阵,因此,Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_60的结果的每个通道也是常数矩阵。并且由于在Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_61的结果上与Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_62Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_63卷积仅执行跨通道复合,通过重新组合Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_50中的条目将Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_62合并到Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_50是可行的。设T是转置函数(例如Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_67Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_68张量),我们给出了构造Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_55Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_56的公式,这些公式易于验证。

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_71


在实际应用中,我们对训练好的重新参数化模型的权值进行了转换和保存,构建了一个没有BN的结构更窄、层次更窄的模型,并将保存的权值用于测试和部署。

3.3 Gradient Resetting

然后,我们描述了如何在保持压缩器性能的同时产生结构化稀疏性。我们从在特定核Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_72上使用传统的基于惩罚损失的范例开始,以使一些通道的量值更小以获得高剪枝能力,即Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_73。假设Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_74是通用参数集,Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_75Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_76是数据示例和对应标签,Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_77是与性能相关的目标函数(例如,分类任务的交叉熵)。传统范式通过预先定义的强度因子Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_78,在原始损失的基础上增加惩罚性损失项Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_79

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_80


其中Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_81的常见形式包括L1[28]、L2[9]和Lasso[33,57]。具体地说,LASSO在产生基于通道的结构化稀疏性方面是有效的(与L1/L2产生的零星零点形成对比)。在下面的讨论中,我们用Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_82来表示Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_72中的特定通道。

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_84


其中Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_85是欧几里得范数,

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_86


Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_87是SGD更新的梯度,我们有

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_88


特定通道Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_89的训练动态是非常直接的:从一个训练良好的模型开始,Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_89位于局部最优值附近,因此式13的第一项接近于0,而第二项不接近,所以F会被推近于0。如果Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_89对性能很重要,那么目标函数将打算维持它的大小,也就是说,第一个梯度项将与第二个梯度项竞争,因此Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_89最终将比以前小,这取决于Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_78。否则,以极端情况为例,如果Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_89完全不影响Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_95,则第一项将为0,因此F将在第二项继续向0增长。也就是说,与绩效相关的损失和惩罚性损失相互竞争,使得Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_89的结果值将反映其重要性,为方便起见,我们将其称为基于能力的重要性评估。然而,我们面临着一个进退两难的境地。问题A:惩罚使每个通道的参数偏离目标函数的最优值。值得注意的是,轻微的偏离可能不会带来负面影响。例如,L2正则化也可以被视为轻微偏差。然而,有了很大的惩罚,虽然一些通道被清零以进行修剪,但剩余的通道也变得太小,无法保持表示能力,这是一个不受欢迎的副作用。问题B:如果对高阻力有轻微的惩罚,我们就不能实现高修剪能力,因为大多数通道只是比过去更接近0,而不是足够近,不足以进行完美的修剪。我们建议通过重置从目标函数派生的梯度来实现高剪枝能力和较轻的惩罚。我们引入一个二进制掩码Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_97,它表明我们是否希望将Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_89置零。为便于实现,我们不向目标函数添加任何项,Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_99 i.e., Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_100,只需计算梯度,然后手动应用掩码,添加惩罚梯度,并将得到的梯度用于SGD更新。那是,

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_101


在实践中,为了决定哪些通道归零(即,为多个通道设置掩码值),我们可以简单地遵循较小范数不太重要的规则[28]或其他试探法[24,46]。这样,我们就解决了上述两个问题。A)虽然我们将套索梯度添加到每个通道的与客观相关的梯度中,这相当于通过将套索损失添加到原始损失来偏离最优值,但这种偏差是温和的(在我们的实验中,Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_102),因此对性能是无害的。B)当Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_103时,第一项不再与第二项竞争,因此即使是一个温和的Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_78也能使Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_89稳定地趋向于0。

3.4 The Remembering Parts Remember Always,the Forgetting Parts Forget Progressively

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

首先,我们需要决定调零Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_106的哪些通道。在训练重新参数化的模型时,我们只向compactors添加Lasso梯度。经过几个训练周期后,Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_107将反映通道Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_108的重要性,因此我们开始基于Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_106的值进行通道选择。设Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_110是压缩器的数目,Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_111(一个Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_112维二进制向量)是第Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_23个压缩器的掩码,我们将Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_114定义为度量向量。

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_115


对于每次通道选择,我们计算每个压缩器中每个通道道的度量值,并将它们组织为映射Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_116Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_参数化_117,然后我们按升序对Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_118的值进行排序,从最小的开始一次挑选一个,并将相应的掩码Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_卷积_119设置为0。当减少的FLOPs(即原始FLOPs减去没有当前掩码0通道的FLOPs)达到我们的目标时,我们停止选择,或者我们已经选择了Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_120(称为通道选择限制)通道。未选择通道的掩码值设置为1。其动机很简单:在讨论了基于能力的重要性评价之后,就像传统上使用惩罚损失来与原有损失竞争,选择规范较小的通道一样,我们使用惩罚梯度来与原有梯度竞争。更好的是,所有的度量值在开始时都是1(因为每个压缩器内核都被初始化为一个单位矩阵),这使得它们在不同的层之间进行比较是公平的。我们将Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_120初始化为一个较小的数字,每隔几次迭代增加Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_神经网络_120,并重新选择通道,以避免一次将太多的通道归零。如图4(右)所示,在Lasso梯度的作用下,那些mask-0通道会变得非常接近于0,从而在压实器中出现结构化稀疏。

4. 实验

Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_123


Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_cnn_124


Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting_深度学习_125