论文翻译系列-Network Slimming

本文来自公众号“AI大道理”。

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

论文原文:

https://arxiv.org/pdf/1708.06519.pdf

(AI大道理:Network Slimming是结构化剪枝的一种,剪枝对象是通道。)

1、摘要

许多实际应用中的卷积神经网络(CNN)的发展和部署在很大程度上受到其高计算成本的阻碍。

文章提出了一种新的CNN学习方案:

1)减小模型尺寸

2)减少运行时内存占用

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

这是通过以一种简单但有效的方式在网络中实施channel级的稀疏来实现的。

与现有的许多方法不同,该方法直接应用于现代CNN体系结构,为训练过程引入最小的开销,并且所得到的模型不需要特殊的软件/硬件加速器。

该方法命名为network slimming,它将广域和大型网络作为输入模型,但在训练期间,不重要的channel会自动识别并在训练后修剪,从而生成具有相当精度的精简模型。

我们用几个最先进的CNN模型(包括VGGNet、ResNet和DenseNet)在不同的图像分类数据集上实证证明了方法的有效性。对于VGGNet,多channel版本的network slimming可以使模型大小减少20倍,计算操作减少5倍。

(AI大道理:模型大小的减少和计算量的减少是显而易见的,但是精确度有没有下降?下降多少?这点值得关注,否则依然是鱼和熊掌不可兼得的状态。)

2、文章简介

近年来,卷积神经网络(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倍,同时达到相同或更高的精度。此外,方法使用传统的硬件和深度学习软件包实现了模型压缩和推理加速,因为得到的较窄模型没有任何稀疏存储格式或计算操作。

(AI大道理:一些通道的剔除不仅降低了模型大小,同时达到相同或更高的精度,这就不容易了。那么究竟是如何做到鱼和熊掌兼得的呢?)

3、相关工作(类似研究)

(1)低秩分解

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

(AI大道理:权重矩阵的近似代替,本质上矩阵大小不变,计算量不变)

(2)权重量化

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

(3)权重修剪/稀疏

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

(AI大道理:非结构化剪枝,直接对权重下手)

(4)结构化修剪/稀疏化

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

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

(5)神经架构学习

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

(AI大道理:自动剔除通道,改变了神经网络的结构,可视为自动学习网络结构的一种方法,只不过所学习的网络结构是事先固定下来的,在此基础上再学习网络结构。)

4、Network Slimming

(1)channel级稀疏性的优点

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

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

(2)挑战

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

(AI大道理:不同于权重剪枝,使权重直接归0没有对其他照成影响。而通道剪枝,是牵一发而动全身,被减掉的前面一层和后面一层都需要和当前层严格对接。这就导致,减掉某一通道,前后都需要一起减掉。)

(3)标度因子与稀疏诱导惩罚

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

其中(x,y)代表训练输入和目标,W表示可训练权重,

代表CNN正常训练的损失,g()是对比列因子的稀疏诱导惩罚,λ平衡这两项。

文章的实验选择L1范数,即

来实现稀疏性,采用次梯度下降法作为非光滑L1罚项的优化方法。另一种选择是将L1惩罚替换为平滑L1惩罚,以避免在非平滑点使用次梯度。

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

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

(AI大道理:要剪枝通道,且是自动剪枝,首先必然有个东西可以控制通道,达到某个阈值就不要这个通道,这个参数就是每个channel的比例因子γ,这个因子在训练中被不断调整,利用L1正则化的特性,使得这些比例因子γ很多被置为0,或者说学习成0,这恰好就是想要的结果。被置为0的通道正就是要被剪枝的通道。)

(4)利用BN层中的比例因子

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

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

通常的做法是在卷积层之后插入一个BN层,并使用通道缩放/移位参数。因此,我们可以直接利用BN层中的γ参数作为network slimming所需的比例因子。它的最大优点是不会给网络带来开销。事实上,这可能也是我们学习通道修剪的有意义的缩放因子的最有效方法。

1)如果在没有BN层的CNN中添加缩放层,缩放因子的值对于评估通道的重要性没有意义,因为卷积层和缩放层都是线性变换。通过减小比例因子值,同时放大卷积层中的权重,可以获得相同的结果。

2) 如果在BN层之前插入缩放层,则BN中的归一化过程将完全取消缩放层的缩放效果。

3) 如果在BN层之后插入缩放层,则每个通道都有两个连续的缩放因子。

(AI大道理:为了快速计算,我们通常将BN层和卷积层融合以加速,在Network sliming中我们需要把这个融合解开,使BN层独立出来。)

(5)通道修剪和微调

在channel级稀疏诱导正则化下进行训练后,我们得到了一个模型,其中许多标度因子接近于零。

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

(AI大道理:剪枝比例必然是要达到一个中庸的状态的。比例太小,剪枝效果不佳,参数量依然很大。比例太大,严重破坏网络结构,精度将恢复不了。)

(6)多通道方案

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

(AI大道理:这是一个比较有趣的做法。训练、剪枝、微调后再来一遍这个过程,如同剪头发一样,先粗略剪一遍,再细细的剪。至于为什么这样会更好,以及第一遍和几遍的效果差多少,暂不得而知。)

(7)处理跨层连接和预激活结构

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

5、实验

我们在几个基准数据集上证明了网络剪枝的有效性。

(1)数据集

使用了CIFAR数据集,包括,CIFAR-10 ,CIFAR-100 。

其中训练集和测试集分别为50000和10000张。

使用了SVHN数据集,由街景门牌号数据集组成。

其中604388 训练图像,6000幅图像作为验证集,测试集包含26032幅图像。

(2)网络模型

在 CIFAR 和 SVHN 数据集上,我们在三种流行的网络结构上评估了我们的方法,分别是 VGGNet,ResNet-164和 DenseNet-40。

(3)训练、剪枝、微调

3.1 正常训练

我们通常从头开始训练所有的网络作为基线。所有的网络都是用 SGD 训练的。

3.2 稀疏训练

使用信道稀疏正则化进行训练时,控制经验损失和稀疏性之间的折中的超参数 λ 。

3.3 剪枝

当我们修剪用稀疏度训练的模型的通道时,需要确定比例因子的修剪阈值。为了简单起见,我们使用全局修剪阈值。修剪阈值由所有比例因子中的百分比来确定,例如,40%或 60%的通道被修剪。通过建立一个新的更窄的模型并从用稀疏度训练的模型中复制相应的权重来训练。

3.4 微调

修剪后,我们获得了一个更窄、更紧凑的模型,然后对其进行微调。在 CIFAR、SVHN 和 MNIST 数据集上,微调使用与训练中相同的优化设置。对于ImageNet 数据集,由于时间限制,我们仅在 5 个时期内以 103 的学习速率微调修剪的 VGG-A。

表 1:在 CIFAR 和 SVHN 数据集上的结果。“基线”表示没有稀疏正则化的正常训练。在第 1 列中,“60%修剪”表示微调模型,其中 60%的通道从用稀疏度等训练的模型中修剪。参数和触发器的删减比率也在第 4&6 列中示出。修剪适量(40%)的通道可以最大程度地降低测试误差。剔除≥ 60%的通道通常可以保持精度。

图 3:在 CIFAR-10 上测试误差低于原始模型的修剪模型的比较。蓝色和绿色条是修剪模型和原始模型之间的参数和FLOP比率。

(AI大道理:剪枝后参数量和计算量明显大幅下降。)

(4)结果

4.1 参数和FLOP减少

精简网络工作的目的是减少所需的计算资源量。每个型号的最后一排≥60%修剪的通道,参数保存可达10倍,这个FLOP降低通常在50%左右。这突出显示网络精简的效率。可以观察到,VGGNet具有可以修剪的大量冗余参数。

在ResNet-164上,参数和FLOP节省相对而言是微不足道的,我们推测这是由于其“bot-tleneck”结构已经起到了选择通道的作用。此外,在CIFAR-100上,还原率通常为略低于CIFAR-10和SVHN,这可能是由于CIFAR-100包含更多类的事实。

4.2 正则化效应

由表1可知,在ResNet和DenseNet上,通常当40%的通道经过修剪,微调后的网络可以实现比原始模型更低的测试误差。例如,DenseNet-40在修剪了40%通道的情况下,实现了5.19%的测试误差。在CIFAR-10上,比原来的低了近1%。我们假设这是由于信道上L1稀疏性的正则化效应,这自然提供了网络中间层中的特征选择。我们将在下一节中分析这种影响。

6、分析

network slimming中有两个关键的超参数,修剪百分比t和稀疏性正则化项λ。在本节中,我们将更详细地分析它们的影响。

(1)修剪百分比的影响

一旦我们得到一个模型用稀疏性正则化训练,我们需要决定要从模型中修剪的通道的百分比。

如果我们修剪太少的通道,可能节省的资源就非常有限。然而,如果我们修剪了太多的通道,可能会照成通过微调恢复不了精度的情况。

我们训练一个DenseNet-40模型在CIFAR-10上的λ=10−5,以显示修剪不同百分比的通道。结果是如图5所示。从图5可以得出结论,修剪或微调模型的性能下降仅当修剪比率超过阈值时。微调过程通常可以补偿修剪造成的可能精度损失。只有当阈值达到时超过80%,微调模型的测试误差落后基线模型。值得注意的是当用稀疏性训练时,即使没有微调,该模型也比原始模型好。这可能是由于正则化L1稀疏性对信道缩放因子的影响。

图 4:在各种稀疏正则化程度下(由参数控制),训练的 VGGNet 中的比例因子的分布λ).随着 λ 的增加,比例因子变得更稀疏。

(AI大道理: λ等于0就相当于没有正则项,通道的比例因子也就很难到达0,λ越大,参数变0的就越多剪枝力度就越大。)

图 5:修剪不同百分比通道的效果,来自在 CIFAR-10 上训练的 DenseNet-40,λ= 105。

(AI大道理:超过80%,效果将比原来的差。)

(2)通道稀疏性正则化

L1的目的是强制许多比例因子接近零。方程1中的参数λ控制了其与正常训练损失相比的显著性。在图4中我们绘制了不同λ值的缩放因子在整个网络中的分布。对于这个实验,我们使用VGGNet在CIFAR-10数据集上训练。可以观察到,随着λ的增加,参数越来越集中在零附近。什么时候λ=0,即不存在稀疏性正则化,分布相对平坦。当λ=10−4时,几乎所有缩放因子落入接近零的一个小区域。这个过程可以看出作为发生在深度网络,其中只有具有不可忽略的信道选择缩放因子。我们通过热图进一步可视化了这一过程。图6显示了缩放的幅度在训练过程中,VGGNet中的一层参数。每个通道以相等的权重开始;随着训练的进行,一些通道的比例因子变得更大(更亮)而另一些则变小(更暗)。

图 6:在 CIFAR-10 上训练的 VG- GNet 的第 11 个 conv 层,显示了通道比例因子在训练过程中的比例变化。较亮的颜色对应较大的值。亮线表示“选定的”通道,黑线表示可以修剪的通道。

7、结论

我们提出了network slimming技术来学习更紧凑的 CNN。它直接对批量归一化层中的比例因子施加稀疏诱导的正则化,因此不重要的通道可以在训练期间被自动识别,然后被修剪。在多个数据集上,我们已经表明,所提出的方法能够显著降低最先进的网络的计算成本(高达 20 %),而没有精度损失。更重要的是,所提出的方法同时减少了模型大小、运行时存储器、计算操作,同时向训练过程引入最小的开销,并且所得到的模型不需要特殊的库/硬件来进行有效的推理。

 ——————

浅谈则止,细致入微AI大道理

扫描下方“AI大道理”,选择“关注”公众号

—————————————————————

—————————————————————

投稿吧   | 留言吧

猜你喜欢

转载自blog.csdn.net/qq_42734492/article/details/130992120