【论文阅读】Learning Efficient Convolutional Networks through Network Slimming

1,论文和代码

https://arxiv.org/abs/1708.06519
https://github.com/Eric-mingjie/network-slimming

1,摘要
    深度卷积神经网络(CNNs)在许多现实应用中的部署很大程度上受到其高计算成本的阻碍。在这篇论文中,我们提出了一种新的训练方法,可以:
  1)缩小模型尺寸;
  2)减少运行时的内存占用;
  3)在不影响精度的前提下,降低计算操作的数量。
这是通过一种简单而有效的方式在网络中增强信道级稀疏性来实现的。与现有的许多方法不同,本文提出的方法直接应用于常用的CNN架构,将训练过程的开销最小化,生成的模型不需要特殊的软件/硬件加速器。我们称我们的方法为网络瘦身,它以大而宽的网络作为输入模型,但在训练过程中,不显著的通道会被自动识别和修剪,从而产生具有同等精度的瘦而紧凑的模型。我们用几个最先进的CNN模型,包括VGGNet, ResNet和DenseNet, onvariousimageclassificationdatasets,实证地证明了我们的方法的有效性。对于VGGNet,一个多通道的网络瘦身版本在模型尺寸上减少了20倍,在计算操作上减少了5倍。

1,引言
    近年来,卷积神经网络(CNNs)已经成为各种计算机视觉任务的主导手段,如图像分类[22]、目标检测[8]、语义分割[26]。大规模的数据集,高端的现代gpu和新的网络架构允许开发前所未有的大型CNN模型。例如,从AlexNet[22]、VGGNet[31]、GoogleNet[34]到ResNets [14], ImageNet分类挑战书的获奖模型已经从8层发展到超过100层。
    然而,更大的cnn虽然具有更强的代表性,但更需要资源。例如,一个152层的ResNet[14]有超过6000万个参数,在推断分辨率为224×的图像时需要超过20千兆浮点运算(FLOPs)224这在资源受限的平台(如移动设备、可穿戴设备或物联网(IoT)设备上不太可能负担得起。

    CNN在实际应用中的部署主要受以下限制:
1) 模型尺寸:CNNs强大的表现力来自其数百万个可训练参数。这些参数以及网络结构信息需要存储在磁盘上,并在推理期间加载到内存中。例如,存储一个典型的在ImageNet上训练的CNN会占用超过300MB的空间,这对于嵌入式设备来说是一个很大的资源负担。
2) 运行时内存:在推理期间,CNN的中间激活/响应甚至比存储模型参数占用更多的内存空间,即使批量大小为1。这对高端gpu来说不是问题,但对于许多低计算能力的应用来说,这是无法承受的。
3) 计算操作的数量:卷积运算在高分辨率图像上是计算密集型的。一个大型的CNN在移动设备上处理一个单一的图像可能需要几分钟的时间,这使得将其用于实际应用是不现实的。
    许多工作已经被提出压缩大型CNN或直接学习更有效的CNN模型以进行快速推理。这些方法包括低秩近似[7]、网络量化[3,12]和二值化[28,6]、权重剪枝[12]、动态推理[16]等。然而,大多数这些方法只能解决上述一个或两个挑战。此外,有些技术需要专门设计的软件/硬件加速器来加速执行[28,6,12]。
    降低大型cnn资源消耗的另一个方向是网络稀疏化。稀疏性可以应用于不同层次的结构[2,37,35,29,25],这会产生相当大的模型尺寸压缩和推理速度。然而,这些方法通常需要特殊的软件/硬件加速器来获得内存增益或节省时间,尽管它比[12]中的非结构化稀疏权重矩阵更容易。
    在本文中,我们提出了一种简单而有效的网络训练方案,它解决了在有限资源下部署大型cnn时所面临的所有挑战。我们的方法在批处理规范化(BN)层中对比例因子进行L1正则化,因此在不改变现有CNN结构的情况下易于实现。通过L1正则化将BN标度因子的值推向零,可以识别不重要的通道(或神经元),因为每个比例因子对应于一个特定的卷积通道(或完全连接层中的神经元)。这有助于在接下来的步骤中进行通道级别的修剪。附加的正则化项很少影响性能。实际上,在某些情况下,它会导致更高的泛化精度。修剪不重要的通道有时可能会暂时降低性能,但是这种影响可以通过对修剪后的网络进行后续的微调来补偿。经过修剪后,与初始的宽网络相比,在模型大小、运行时内存和计算操作方面,窄网络要紧凑得多。上述过程可以重复多次,得到一个多通道网络精简方案,从而使网络更加紧凑。
    实验结果表明,在获得与原模型相同甚至更高精度的条件下,可以获得比原模型高20倍的模式尺寸压缩和5倍的运算量缩减的CNN模型。此外,我们的方法使用传统的硬件和深度学习软件包实现了模型压缩和推理的加速,因为得到的更窄的模型不需要任何稀疏的存储格式或计算操作。
在这里插入图片描述
图1:我们将比例因子(从批处理规范化层重用)与卷积层中的每个通道相关联。稀疏性在训练过程中对这些缩放因子进行正则化,以自动识别不重要的通道。小通道缩放因子值(橙色)将被修剪(左侧)。剪枝后,我们得到了紧凑模型(右侧),然后微调以达到与正常训练的全网络相当(甚至更高)的精度。

2,相关工作
在本节中,我们讨论了五个方面的相关工作。
    低秩分解利用奇异值分解(SVD)等技术,用低秩矩阵逼近神经网络中的权值矩阵[7]。这种方法特别适用于完全连接的层,产生∼3倍的模型尺寸压缩,但是没有显著的速度加速,因为CNN中的计算操作主要来自卷积层。
    权重量化。HashNet[3]提出量化网络权值。在训练之前,网络权值被散列到不同的组中,每个组的权值被共享。这样只需要存储共享权重和哈希索引,就可以节省大量的存储空间。[12] 在深度压缩管道中使用改进的量化技术,在AlexNet和VGGNet上实现35到49倍的压缩率。然而,这些技术既不能节省运行时内存,也不能节省推理时间,因为在推理过程中,需要将共享权重恢复到其原始位置。
    [28,6]将实值权重量化为二元/三元权重(权重值限制为{−1,1}或{1,0,1})。这样可以节省大量的模型尺寸,并且在给定按位运算库的情况下,也可以获得显著的加速。然而,这种激进的低位近似方法通常会带来中等精度的损失。
    重量修剪/稀疏化。[12] 提出在训练后的神经网络中用小权值剪除不重要的连接。由此得到的网络权值大多为零,因此可以通过稀疏格式存储模型来减少存储空间。然而,这些方法只能通过专用稀疏矩阵运算库和/或硬件来实现加速。运行时内存节省也非常有限,因为大部分内存空间被激活映射(仍然密集)而不是权重消耗。
    在[12]中,训练过程中没有对稀疏性的指导。[32]通过使用额外的门变量显式地对每个权重施加稀疏约束来克服这一限制,并通过使用零门值修剪连接来实现高压缩率。这种方法比[12]有更好的压缩率,但也有同样的缺点。
    结构化修剪/稀疏化。最近,[23]提出在经过训练的cnn中对输入权值较小的信道进行剪枝,然后对网络进行微调以恢复精度。[2] 通过在训练前随机地去激活卷积层中的输入输出信道连接来引入稀疏性,这也会产生较小的网络和中等的精度损失。与这些工作相比,我们在训练过程中明确地在优化目标中加入信道稀疏性,使得信道修剪过程更加平滑,精度损失很小。
    [37]在训练过程中使神经元水平稀疏,因此可以对一些神经元进行修剪以获得紧凑的网络。[35]提出了一种结构化稀疏学习(SSL)方法来稀疏化CNNs中不同层次的结构(如滤波器、信道或层)。两种方法都是在训练过程中利用群体稀疏性调节来获得结构化稀疏度。我们的方法不依赖于卷积权值的群稀疏性,而是对信道尺度因子施加简单的L1稀疏性,因此优化目标要简单得多。
    由于这些方法对网络结构(例如,神经元、通道)的一部分进行修剪或稀疏化,而不是单个权重,因此它们通常需要较少的专用库(例如用于稀疏计算操作)来实现推理加速和运行时内存节省。我们的网络瘦身也属于这一类,完全不需要专门的图书馆来获得好处。
    神经结构学习。虽然最先进的cnn通常是由专家设计的[22,31,14],但是对于网络体系结构的自动学习也有一些探索。[20] 在给定资源预算的情况下,引入子模块/超模优化网络结构搜索。最近的一些工作[38,1]提出用强化学习来自动学习神经结构。这些方法的搜索空间非常大,需要训练成百上千的模型来区分好坏。网络瘦身也可以被视为一种架构学习的方法,尽管选择是有限的每一层的宽度。然而,与上述方法不同的是,网络瘦身只通过单一的训练过程来学习网络结构,这符合我们的效率目标。

3,网络瘦身
我们的目的是提供一个简单的方案来实现深CNN的信道级稀疏性。在本节中,我们首先讨论信道级稀疏性的优点和挑战,并介绍如何利用批量规范化中的缩放层来有效地识别和修剪网络中不重要的信道。
    信道级稀疏性的优点。正如先前的工作[35,23,11]中所讨论的,稀疏性可以在不同的层次上实现,例如,权重级、内核级、信道级或层级。细粒度级别(例如,权重级别)稀疏性提供了最高的灵活性,通用性导致更高的灵活性压缩率,但通常需要特殊的软件或硬件加速器来对稀疏模型进行快速推断[11]。相反,最粗层的稀疏性不需要特殊的包来获得推理加速,但由于某些整层需要修剪,它的灵活性较差。事实上,只有当深度足够大时,移除层才有效,例如超过50层[35,18]。相比之下,信道级稀疏性在灵活性和易实现性之间提供了一个很好的折衷方案。它可以应用于任何典型的CNN或完全连接的网络(将每个神经元视为一个通道),所得到的网络本质上是未运行网络的“精简”版本,可以在传统的CNN平台上有效地推断出来。
    挑战。实现信道级稀疏性需要修剪与信道相关联的所有入站和出站连接。这使得在预先训练的模型上直接剪枝权值的方法无效,因为在一个通道恰好有接近零的值。如文献[23]所述,在预先训练的resnet上修剪信道只会导致参数数量减少∼10%,而不会造成精度损失。[35]通过在训练目标中实施稀疏正则化来解决这个问题。具体地说,在训练过程中,采用群套索将同一通道对应的所有滤波器权值同时推向零。然而,这种方法需要计算附加正则化项相对于所有滤波器权重的梯度,这是非常重要的。我们引入一个简单的想法来解决上述问题挑战,详情如下。
    标度因子和稀疏诱导惩罚。我们的想法是为每个通道引入一个比例因子γ,乘以该通道的输出。然后我们联合训练网络权值和这些尺度因子,并对后者施加稀疏正则化。最后用小因子对这些信道进行剪枝,并对修剪后的网络进行微调。具体来说,我们方法的训练目标是
在这里插入图片描述
其中(x,y)表示训练输入和目标,W表示可训练权重,第一个和项对应于CNN的正常训练损失,g(·)是稀疏性引起的比例因子惩罚,λ平衡这两个项。在我们的实验中,我们选择g(s)=| s |,它被称为L1范数,被广泛用于实现稀疏性。对于non-smooth L1惩罚项,采用次梯度下降作为优化方法。另一种选择是替换L1惩罚与smooth-L1惩罚[30]以避免在非平滑点使用次梯度。
    由于修剪一个信道本质上相当于删除该信道的所有入站和出站连接,所以我们可以直接获得一个狭窄的网络(见图1),而无需借助任何特殊的稀疏计算包。比例因子作为信道选择的代理。当它们与网络权值联合优化时,网络可以自动识别出不重要的信道,这些信道可以安全地被移除而不需要很大的代价影响泛化性能。
在这里插入图片描述
    图2:网络瘦身流程图。点划线用于多程/迭代方案。
    利用BN层中的比例因子。批处理规范化[19]已被大多数现代CNNs作为标准方法来实现快速收敛和更好的泛化性能。BN规范化激活的方法激励我们设计一个简单高效的方法合并信道比例因子。特别是,BN层使用小批量统计来规范内部激活。设z in和z out为BN层的输入和输出,B表示当前的小批量,BN层执行以下转换:
在这里插入图片描述其中,µB和σB是B上输入激活的平均值和标准差值,γ和β是可训练的仿射变换参数(尺度和位移),它提供了将归一化激活线性转换回任何尺度的可能性。
    通常的做法是在卷积层之后插入一个BN层,并带有信道方向的缩放/移位参数。因此,我们可以直接利用BN层中的γ参数作为网络精简所需的缩放因子。它的最大优点是不会给网络带来任何开销。事实上,这也许也是我们学习信道修剪的最有效的方法。1) 如果我们在没有BN层的CNN中添加缩放层,则由于卷积层和缩放层都是线性变换,因此缩放因子的值对于评估信道的重要性没有意义。通过减小比例因子值,同时放大卷积层中的权重,可以获得相同的结果。2) 如果在BN层之前插入一个标度层,则标度层的标度效应将被BN中的归一化过程完全消除。3) ,如果我们在BN层之后插入缩放层,则每个通道有两个连续的缩放因子。
    通道修剪和微调。在信道级稀疏诱导正则化下进行训练后,我们得到一个模型,其中许多比例因子接近于零(见图1)。然后,我们可以通过移除所有传入和传出连接以及相应的权重来修剪具有接近零缩放因子的通道。我们在所有层上使用全局阈值来修剪通道,该阈值被定义为所有缩放因子值的某个百分比。例如,我们通过选择百分位阈值为70%来修剪具有较低缩放因子的70%通道。通过这样做,我们获得了一个更紧凑的网络,具有更少的参数和运行时内存,以及更少的计算操作。
    当剪枝率较高时,剪枝可能会暂时导致某些精度损失。但这在很大程度上可以通过对修剪后的网络进行微调来补偿。在我们的实验中,在许多情况下,微调的窄网络甚至可以达到比原始未运行网络更高的精度。

    多通方案。我们还可以将所提出的方法从单通学习模式(稀疏正则化训练、剪枝和微调)扩展到多程学习模式。具体来说,一个网络瘦身过程会导致一个狭窄的网络,在这个网络上我们可以再次应用整个训练过程来学习一个更紧凑的模型。图2中的虚线说明了这一点。实验结果表明,这种多通路方案可以有效地提高药物的利用率以获得更好的压缩率。
    处理跨层连接和预激活结构。上面介绍的网络精简过程可以直接应用于大多数普通的CNN架构,如AlexNet[22]和VGGNet[31]。当它应用于具有跨层连接的现代网络和预激活设计(如ResNet[15]和DenseNet[17])时,需要进行一些调整。对于这些网络,一个层的输出可以被视为多个后续层的输入,其中BN层被放置在卷积层之前。在这种情况下,稀疏性在层的输入端实现,即,该层选择性地使用它接收到的信道的子集。为了在测试时获得参数和节省的计算量,我们需要放置通道选择层以遮罩不重要的我们已经确定的渠道。

4,实验结果
在这里插入图片描述
    表1:CIFAR和SVHN数据集的结果。“基线”表示没有稀疏正则化的正常训练。在第1列中,“60%修剪”表示从稀疏训练的模型中剪除60%通道的微调模型。参数的修剪比率第4列和第6列也显示了失败。适当地修剪40%的通道可以大大降低测试误差。准确度通常可以保持在≥60%的通道修剪。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值