通过Network Slimming学习高效卷积网络

1.文章信息

本文是2017年发表在计算机视觉领域顶会ICCV的一篇文章,被引量已经达到了1214次,是引用比较广泛的一种模型剪枝方法,作者来自清华大学、英特尔中国实验室、复旦大学和科内尔大学。

2.摘要

许多实际应用中的卷积神经网络(CNN)的发展和部署在很大程度上受到其高计算成本的阻碍。文章提出了一种新的CNN学习方案:

1)减小模型尺寸

2)减少运行时内存占用

3)在不影响准确性的情况下,减少计算操作的数量

这是通过以一种简单但有效的方式在网络中实施channel级的稀疏来实现的。与现有的许多方法不同,该方法直接应用于现代CNN体系结构,为训练过程引入最小的开销,并且所得到的模型不需要特殊的软件/硬件加速器。方法命名为network slimming,它将广域和大型网络作为输入模型,但在训练期间,不重要的channel会自动识别并在训练后修剪,从而生成具有相当精度的精简模型。我们用几个最先进的CNN模型(包括VGGNet、ResNet和DenseNet)在不同的图像分类数据集上实证证明了方法的有效性。对于VGGNet,多channel版本的network slimming可以使模型大小减少20倍,计算操作减少5倍。

3.文章简介

近年来,卷积神经网络(CNN)已成为各种计算机视觉任务的主要方法。大规模数据集、高端现代GPU和新的网络架构允许开发前所未有的大型CNN模型。例如,从AlexNet、VGGNet和GoogleNet到Resnet,ImageNet分类挑战赢家模型已经从8层发展到100多层。

然而,较大的CNN虽然具有更强的代表权,但更需要资源。例如,一个152层的ResNet有超过6000万个参数,并且在推断分辨率为224×224的图像时需要超过20千兆浮点运算(FLOPs)。在资源有限的平台上,如移动设备、可穿戴设备或物联网(IoT)设备,是不可能负担得起的。

CNN在实际应用中的部署主要受1)模型大小的限制:CNN强大的表示能力来自其数百万可训练参数。这些参数以及网络结构信息需要存储在磁盘上,并在推理期间加载到内存中。例如,在ImageNet上存储一个典型的CNN会消耗超过300MB的空间,这对嵌入式设备来说是一个巨大的资源负担。2) 运行时内存:在推理期间,CNN的中间激活/响应甚至可能比存储模型参数占用更多内存空间,即使批量大小为1。这对于高端GPU来说不是问题,但对于许多计算能力较低的应用程序来说,这是负担不起的。3) 计算操作数:卷积操作在高分辨率图像上计算量很大。大型CNN在移动设备上处理一张图像可能需要几分钟的时间,这使得在实际应用中采用它是不现实的。

减少大型CNN资源消耗的一个方向是稀疏网络。稀疏性可以施加在不同层次的结构上,这会产生相当大的模型大小压缩和推理加速。然而,这些方法通常需要特殊的软件/硬件加速器来获得内存增益或节省时间。

本文提出了一种简单而有效的网络训练方案——Network Slimming,它解决了在有限资源下部署大型CNN时所面临的挑战。方法在批处理规范化(BN)层中对缩放因子施加L1正则化,因此在不引入任何现有CNN架构更改的情况下易于实现。通过L1正则化将BN标度因子的值推向零,使我们能够识别不重要的channel(或神经元),因为每个标度因子对应于特定的卷积channel(或完全连接层中的神经元)。这有助于在接下来的步骤中进行channel级修剪。额外的正则化项很少影响性能。事实上,在某些情况下,它会带来更高的泛化精度。修剪不重要的channel有时可能会暂时降低性能,但这种影响可以通过随后对修剪后的网络进行微调来补偿。修剪后,与最初的宽网络相比,生成的窄网络在模型大小、运行时内存和计算操作方面更加紧凑。上述过程可以重复多次,产生一个多channel网络瘦身方案,从而使网络更加紧凑。

在几个Benchmark数据集和不同网络结构上的实验表明,可以获得CNN模型,其模式大小压缩高达20倍,计算操作减少了5倍,同时达到相同或更高的精度。此外,方法使用传统的硬件和深度学习软件包实现了模型压缩和推理加速,因为得到的较窄模型没有任何稀疏存储格式或计算操作。

4.相关工作

A. 低秩分解

低秩分解使用奇异值分解(SVD)等技术用低秩矩阵逼近神经网络中的权重矩阵。这种方法在完全连接的层上尤其有效,产生了3倍于模型大小的压缩,但是没有显著的速度加速,因为CNN中的计算操作主要来自卷积层。

B. 权重量化

HashNet建议量化网络权重。在训练之前,将网络权重散列到不同的组中,并在每个组中共享权重值。这样,只需要存储共享的权重和散列索引,从而可以节省大量的存储空间。然而,这个技术既不能节省运行时内存,也不能节省推理时间,因为在推理过程中,共享权重需要恢复到其原始位置。

C. 权重修剪/稀疏

修剪不重要的连接权重为0,因为大部分的内存空间是由激活映射来消耗的,所以这样来节省的内存有限且需要专门的运算库。

D. 结构化修剪/稀疏化

有工作提出在经过训练的CNN中修剪具有较小传入权重的channel,然后微调网络以恢复准确性。在训练之前,通过随机停用卷积层中的输入-输出channel连接引入稀疏性,这也会产生具有中等精度损失的较小网络。与这些工作相比,文章提出的slimming方法在训练过程中明确地在优化目标中加入了channel稀疏性,使得channel剪枝过程更加平滑,精度损失较小。

在训练期间施加神经元水平的稀疏性,因此可以修剪一些神经元以获得紧凑的网络。这种方法利用训练过程中的群体稀疏性调节来获得结构化稀疏性。我们的方法没有在卷积权重上求助于组稀疏性,而是在channel尺度因子上施加简单的L1稀疏性,因此优化目标更简单。由于这种方法删减或稀疏部分网络结构(例如神经元、channel)而不是单个权重,因此通常需要较少的专门库(例如稀疏计算操作)来实现推理加速和运行时内存节省。文章提出的network slimming也属于这一类,绝对不需要专门库。

E. 神经架构学习

虽然最先进的CNN通常由专家设计,但也有一些关于自动学习网络体系结构的探索。最近的一些工作提出了通过强化学习自动学习神经结构。这些方法的搜索空间非常大,因此需要训练数百个模型来区分好坏。Network slimming也可以被视为架构学习的一种方法,尽管选择仅限于每层的宽度。然而,与上述方法相比,networkslimming仅通过一个训练过程来学习网络架构,这符合效率目标。

5. Network Slimming

A. channel级稀疏性的优点

稀疏性可以在不同的层次上实现,例如。权重级别、内核级别、channel级别或层级别。细粒度级别(例如,权重级别)稀疏性提供了最高的灵活性,通用性,导致更高的压缩率,但它通常需要特殊的软件或硬件加速器对稀疏模型进行快速推断。相反,最粗糙的层级稀疏性不需要特殊的包来获取推理加速,但由于需要修剪某些整层,因此它的灵活性较差。

事实上,只有当深度足够大时,移除层才有效。相比之下,channel级稀疏性在灵活性和易实现性之间提供了一个很好的折衷。它可以应用于任何典型的CNN或完全连接的网络(将每个神经元视为一个channel),产生的网络本质上是未运行网络的“精简”版本,可以在传统CNN平台上有效推断。

B. 挑战

实现channel级稀疏性需要修剪与通道(也就是channel)关联的所有传入和传出连接。这使得在预先训练的模型上直接修剪权重的方法无效,因为通道输入端或输出端的所有权重不太可能恰好具有接近零值。在预训练的Resnet上修剪通道只能减少10%的参数数量,而不会造成精度损失。下文将介绍一个简单的想法来解决上述挑战,也就是文章创新之处。

C. 标度因子与稀疏诱导惩罚

文章的想法是为每个channel引入一个比例因子γ,乘以该通道的输出。然后文章联合训练网络权重和这些比例因子,并对后者施加稀疏正则化。最后,用小因子修剪这些通道,并对修剪后的网络进行微调。具体而言,整体目标如下:

通过Network Slimming学习高效卷积网络_第1张图片

其中,cc98744623444d6b5ed9ff86e16ce6e7.png表示训练输入和目标,93418ee6f454dd50dab7ba5a40061bc8.png表示可训练权重,通过Network Slimming学习高效卷积网络_第2张图片对应于CNN的正常训练损失,6379e6012b336c7665b3edea7dd709b1.png是对比例因子的稀疏诱导惩罚,λ平衡这两项。文章的实验选择L1范数,即e44c0782e51f59d00e1c32755ed711cc.png来实现稀疏性,采用次梯度下降法作为非光滑L1罚项的优化方法。另一种选择是将L1惩罚替换为平滑L1惩罚,以避免在非平滑点使用次梯度。

由于修剪通道实质上相当于删除该通道的所有传入和传出连接,因此我们可以直接获得一个狭窄的网络,而无需借助任何特殊的稀疏计算包,网络如下图所示。

通过Network Slimming学习高效卷积网络_第3张图片

比例因子充当通道选择的代理。由于它们与网络权值联合优化,网络可以自动识别不重要的channel,这些channel可以安全地移除,而不会对泛化性能造成很大影响。

D. 利用BN层中的比例因子

批量归一化已被大多数现代CNN作为标准方法采用,以实现快速收敛和更好的泛化性能。BN使激活正常化的方式激励我们设计一种简单有效的方法来合并channel级比例因子。特别是,BN层使用小批量统计数据来规范内部activations。让334d902cb7a1b6421a14b23a270e17e7.png02478c1045704fb8f598fe6c3d4fa24b.png作为BN层的输入和输出,6ebb3c01982d2e3bf4e284c4651c12f5.png表示当前的小批量,BN层执行以下转换:

通过Network Slimming学习高效卷积网络_第4张图片

其中,f7969a357db5d9cdc8a0ca5f59502237.pngdac31972ac7beeef89a14e76ef88014a.png656ffc5871448714f8d1fee24daca506.png上输入激活的平均值和标准偏差值,γ和β是可训练的仿射变换参数(比例和移位),它提供了将归一化激活线性变换回任何比例的可能性。

通常的做法是在卷积层之后插入一个BN层,并使用通道缩放/移位参数。因此,我们可以直接利用BN层中的γ参数作为network slimming所需的比例因子。它的最大优点是不会给网络带来开销。事实上,这可能也是我们学习通道修剪的有意义的缩放因子的最有效方法。1)如果在没有BN层的CNN中添加缩放层,缩放因子的值对于评估通道的重要性没有意义,因为卷积层和缩放层都是线性变换。通过减小比例因子值,同时放大卷积层中的权重,可以获得相同的结果。2) 如果在BN层之前插入缩放层,则BN中的归一化过程将完全取消缩放层的缩放效果。3) 如果在BN层之后插入缩放层,则每个通道都有两个连续的缩放因子。

E. 通道修剪和微调

在channel级稀疏诱导正则化下进行训练后,我们得到了一个模型,其中许多标度因子接近于零。然后,可以通过删除通道的所有传入和传出连接以及相应的权重,修剪具有接近零缩放因子的通道。在所有层上使用全局阈值修剪通道,该阈值定义为所有缩放因子值的某个百分位数。例如,通过选择百分位阈值为70%来修剪具有较低比例因子的70%通道。通过这样做,获得了一个更紧凑的网络,具有更少的参数和运行时内存,以及更少的计算操作。当修剪率较高时,修剪可能会暂时导致某些精度损失。但这在很大程度上可以通过随后对修剪后的网络进行微调来补偿。在实验中,许多情况下,微调窄网络甚至可以达到比原始未运行网络更高的精度。

F. 多通道方案

还可以将所提出的方法从单遍学习方案(稀疏正则化、剪枝和微调训练)扩展到多遍学习方案。具体地说,slimming过程会产生一个狭窄的网络,在这个网络上,可以再次应用整个训练过程来学习一个更紧凑的模型。下图的虚线说明了这一点。实验结果表明,这种多通道方案在压缩率方面可以获得更好的结果。

通过Network Slimming学习高效卷积网络_第5张图片

G. 处理跨层连接和预激活结构

上面介绍的network slimming过程可以直接应用于大多数普通的CNN架构,如AlexNet和VGGNet。然而,当它应用于具有跨层连接的现代网络和预激活设计(如ResNet和DenseNet)时,需要进行一些调整。对于这些网络,层的输出可被视为多个后续层的输入,其中BN层被置于卷积层之前。在这种情况下,稀疏性在层的输入端实现,即该层选择性地使用其接收的channel子集。为了在测试时获得参数和计算节省,需要放置一个channel选择层来屏蔽我们识别的不重要通道。

6.结论

文章提出了网络瘦身技术来学习更紧凑的CNN。它直接对批量归一化层中的尺度因子施加稀疏诱导的正则化,从而可以在训练期间自动识别不重要的channel,然后进行修剪。在多个数据集上已经表明,所提出的方法能够显著降低最先进网络的计算成本,而不会造成精度损失。更重要的是,所提出的方法同时减少了模型大小、运行时内存和计算操作,同时为训练过程引入了最小的开销,并且生成的模型不需要特殊的库/硬件来进行有效的推理。

代码开源在:https://github.com/liuzhuang13/slimming

7.Attention

如果你和我一样是轨道交通、道路交通、城市规划相关领域的,可以加微信:Dr_JinleiZhang,备注“进群”,加入交通大数据交流群!希望我们共同进步!

你可能感兴趣的:(网络,大数据,算法,python,计算机视觉)