Learning Efficient Convolutional Networks through Network Slimming【译】

本文提出了一种名为网络瘦身的方法,通过在CNN训练过程中增强通道级稀疏性,实现模型大小、运行时内存和计算操作的减少,同时保持或提高准确性。方法通过对BN层的缩放因子施加L1正则化,识别并修剪不重要的通道,适用于多种现代CNN架构,无需特殊硬件/软件加速器。实验显示,该方法能有效压缩模型大小和计算操作,尤其适用于资源有限的平台。
摘要由CSDN通过智能技术生成

Learning Efficient Convolutional Networks through Network Slimming【CVPR2017】

摘要

在本文中,我们提出了一种新的cnn学习方案(learning scheme),来同时 1)减少模型大小;2)减少运行时内存占用;3)减少计算操作的次数并且不降低准确性。这是通过以一种简单而有效的方式在网络中增强通道级的稀疏性来实现的。与现有的许多方法不同,该方法直接适用于现代CNN架构,它为训练过程引入了最小的开销,并且生成的模型不需要特殊的软件/硬件加速器。我们把我们的方法称为网络瘦身(network slimming),它以宽的和大的网络作为输入模型,但在训练过程中,不重要的信道随后会被自动识别和修剪,从而产生轻量和紧凑的模型,并且精度相当。我们在不同的图像分类数据集上,用几种最先进的CNN模型,包括VGGNet、ResNet和DenseNet,通过实验证明了我们的方法的有效性。对于VGGNet,多通道版本的网络瘦身(a multi-pass version of network slimming)使模型大小减少了20×,计算操作减少了5×。

1.引言

大型的CNN虽然具有更强的表示能力,但需要更多计算资源。例如,一个152层的ResNet[14]有超过6000万个参数,在推断分辨率为224×224的图像时需要超过20G FLOPs的运算量。这在移动设备、可穿戴设备或Internet of Things(IoT)(物联网)设备等资源有限的平台上不太可能负担得起。
CNN在现实中的部署主要受到这些限制:1)模型大小:CNNs具有强大的表示能力,来自于其数百万个可训练的参数。这些参数,连同网络结构信息,需要存储在磁盘上并在推理时加载到内存上。例如,存储一个用ImageNet训练的典型CNN会消耗超过300MB的空间,这对嵌入式设备来说是一个巨大的资源负担。2)运行时内存:在推理期间,CNN的中间激活/响应(intermediate activations/responses)甚至可能比存储模型参数占用更多的内存空间,即使批量大小为1。这对于高端GPU不是什么问题,但对于许多计算能力较低的终端都负担不起。3)计算操作数:在高分辨率图像上的卷积操作是密集的计算操作。一个大型CNN可能需要几分钟来处理移动设备上的一张图像,这在实际应用中是不现实的。
我们的方法对批归一化(BN)层的缩放因子施加L1正则化,因此对现有的CNN架构都很容易实现。通过L1正则化,将BN缩放因子的值推向零,我们可以识别不重要的通道(或神经元),因为每个缩放因子对应于一个特定的卷积通道(或完全连接层中的神经元)。这有助于在接下来的步骤中进行通道级的修剪。额外的正则化操作对性能没有大的影响。事实上,在某些情况下,它会导致更高的泛化精度。修剪不重要的信道有时可能会暂时降低性能,但这种影响可以通过随后对修剪后的网络进行微调来补偿。经过剪枝后,所得到的较窄的网络在模型大小、运行时内存和计算操作方面都比最初的较宽的网络要紧凑得多。上述过程可以重现多次实现,产生多通道网络瘦身方案(yielding a multi-pass network slimming scheme),生成更紧凑的网络。
在几个基准数据集和不同网络架构上的实验表明,在原来的精度或者甚至更高的精度下,我们可以获得高达20倍模型大小压缩(mode-size compression)和5倍的计算操作减少。此外,我们的方法通过传统的硬件和深度学习软件包实现了模型压缩和推理的加速,因为所得到的轻量的模型没有任何稀疏存储格式或计算操作。

2. 相关工作

Low-rank Decomposition(低秩分解)

利用奇异值分解(SVD)[7]等技术来近似神经网络中的权重矩阵。这种方法在全连接层上特别有效,产生∼3x模型大小的压缩,但没有显著的速度加速,因为CNN的计算操作主要来自convol 卷积层。

Weight Quantization(权重量化)

HashNet[3]提出量化网络权值。在训练之前,网络权值被散列到不同的组中,在每个组中的权值被共享。这样就只需要存储共享的权值和哈希索引,这样就可以节省大量的存储空间。[12]在一个深度压缩方法(a deep compression pipeline)中使用了一种改进的量化技术,并在AlexNet和VGGNet上实现了35倍到49倍的压缩率。但是,这些技术既不能节省运行时内存也不能加速推理,因为在推理过程中,共享的权值需要恢复到其原始位置。
[28,6]将实值权重(real-valued weights)量化为二进制/三元(binary/ternary)权值(权重值限制在{−1,1}或{−1,0,1}内)。这就大大减小了模型,并且在给出位向操作库(bitwise operation libraries)后可以获得显著的加速。然而,这种激进的低秩近似方法通常会有适当的精度损失。

Weight Pruning/Sparsifying(权重剪枝/稀疏化)

[12]提出,在训练过的神经网络中,修剪掉权重小的不重要的连接。所得到的网络的权值大多为零,因此可以稀疏存储来缩减存储空间。然而,这些方法只能通过专用的稀疏矩阵操作库和/或硬件才能实现加速。运行时内存的节省也非常有限,因为大部分内存空间都被激活层占用(仍然很密集)而不是权重。
在[12]中,训练中没有稀疏性的指导(no guidance for sparsity)。[32]通过对每个权重(权重有额外的门值变量)施加稀疏约束(explicitly imposing sparse constraint over each weight with additional gate variables),克服了这一限制,并通过修剪掉那些门值为零的连接实现了很高的压缩率。这种方法相比[12]达到了更高的压缩率,但有同样的缺点。(应该是指需要特殊软硬件并且对运行内存的节省有限)

Structured Pruning / Sparsifying (结构化剪枝/稀疏化)

最近,[23]提出在训练后的CNN中对具有小输入权值的通道进行修剪,然后微调网络以恢复精度。[2]通过在训练前在卷积层中随机停用输入-输出通道级的连接(deactivating input-output channel-wise connections)来引入稀疏性,这也可以在适当的精度损失下生成较小的网络。与这些工作相比,我们在训练过程中明确地在优化目标中施加了信道方面的稀疏性(impose channel-wise sparsity in the optimization objective during training),从而使信道剪枝过程更平滑,精度损失更小。
[37]在训练过程中施加了神经元水平的稀疏性(neuron-level sparsity),因此一些神经元可以被修剪以获得紧凑的网络。[35]提出了一种结构化稀疏学习(SSL)方法来稀疏CNN中不同的层次的结构(例如滤波器、通道或层)。两种方法都在训练过程中利用==群稀疏化(group sparsity)==来获得结构稀疏性。而不是求助于c上的组稀疏性 卷积权值,我们的方法对信道级缩放因子施加了简单的L1稀疏性,因此优化目标要简单得多。
由于这些方法修剪或稀疏部分网络结构(例如,神经元,通道),而不是单个的权重,它们通常需要较少专门的库(例如稀疏计算)以实现推理的加速和运行时内存的节省。我们的网络瘦身也属于这一类,绝对不需要特殊的库来获得优势。

Neural Architecture Learning(神经结构学习)

先略过

3.Network slimming

我们的目的是提供一个简单的方案来实现深度CNN的信道级稀疏性。在本节中,我们首先讨论信道级稀疏性的优点和挑战,并介绍我们是如何利用BN中的缩放层(scaling layers)有效地识别和修剪网络中不重要的通道。

Advantage of Channel-level Sparsity(优点)

事实上,只有当深度足够大,例如超过50层[35,18]时,去除层才有效。相比之下,信道级的稀疏性在灵活性和易于实现之间提供了一个很好的权衡。它可以应用于任何典型的CNN或全连接的网络(将每个神经元视为一个通道),由此产生的网络本质上是未修剪网络的“精简”版本,可以在传统的CNN平台上有效地推断。

Challenges(挑战)

要实现信道级的稀疏性,就需要修剪与信道相关联的所有传入和传出连接。这使得直接修剪预训练模型上的权值的方法无效,因为通道输入端或输出端的所有权值不太可能恰好接近于零值。 如[23]报道,在预训练过的ResNet上修剪通道只能达到10%的参数量缩减,而不会遭受精度损失。[35]通过对训练目标进行稀疏性正则化来解决这个问题。具体来说,他们采用组套索(group LASSO)将对应同一通道的所有滤波器权重推向零。然而,这种方法需要计算附加正则化项相对于所有滤波器权重的梯度,这是特别的。我们介绍了一个简单的想法来解决上述挑战,细节如下。

Scaling Factors and Sparsity-induced Penalty(尺度因素和稀疏性诱导的处罚。)

我们的想法是为每个信道引入一个缩放因子γ,它乘以该信道的输出。然后,我们联合训练网络权值和这些标度因子,并对后者进行稀疏性正则化训练。最后,我们对因子较小的信道进行修剪,并对修剪后的网络进行微调。具体来说,我们的方法的训练目标是由下面给出:

(x,y)代表训练的输入和标签,W是权重,前一项对应CNN的正常训练损失,g(·)是对尺度因子的稀疏性诱导的惩罚,λ平衡了这两项。在我们的实验中,选择g(s) = |s|,也就是L1范式,常被用来实现稀疏化。采用次梯度下降subgradient descent作为非光滑L1惩罚项的优化方法。另一种选择是用光滑的L1惩罚[30]来代替L1惩罚,以避免在非光滑点上使用次梯度
由于修剪一个通道本质上对应于删除该通道的所有进出连接,我们可以直接获得一个狭窄的网络(见图1),而不求助于任何特殊稀疏计算软件包。缩放因子作为通道选择的代理。由于它们与网络权值共同优化,网络可以自动识别不重要的信道,并在不严重影响泛化性能的情况下删除这些通道。

Leveraging the Scaling Factors in BN Layers(利用BN层中的缩放因子)

BN[19]已被大多数现代CNN作为快速收敛和实现更好的泛化性能的标准方法。BN正则化激活的方式(the way BN normalizes the activations)激励我们设计一种简单而有效的方法来合并信道级的缩放因子。特别是,BN层使用mini-batch 统计量(statistics)来正则化内部激活(BN layer normalizes the internal activations using mini-batch statistics,这里的意思应该是用一个batch的数据进行BN)。
在这里插入图片描述
(这个缩放因子确实不好理解)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值