1/200 Learning Efficient Convolutional Networks through Network Slimming

Keywords:network slimming,Sparsifying,Channel Pruning, Fine-tuning

针对问题及解决方案:针对深度神经网络在实际应用中的部署很大程度上受到高计算成本的阻碍的问题,本文提出网络瘦身的方法来解决该问题。

具体来讲,这是一种基于通道稀疏性,将训练过程的开销降到最低,并且生成的模型也不需要特殊的软件或硬件加速器的一种方法。它以宽大的网络作为输入模型,在训练过程中,不重要的通道会自动识别,并在之后进行剪枝,产生具有可比精度的薄而紧凑的模型。

本文提出的模型压缩三要素:

1)减少模型大小

2)减少运行时内存占用

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

在多种图像分类数据集中,我们用多种最先进的CNN模型(包括VGGNet, ResNet和 DenseNet)凭经验证明了我们方法的有效性。对于VGGNet,网络瘦身的多通道版本使模型大小减少了 20 倍,计算操作减少了 5 倍。

  1. Introduction

近年来,卷积神经网络已成为各种计算机视觉任务的主要方法,如图像分类,目标检测,语义分割。大规模数据集,高端现代GPU及新网络架构允许开发前所未有的大型CNN模型。从AlexNet VGGNet 及GoogleNet到ResNets,ImageNet分类挑战赛获胜者模型已从8层发展到100多层。

然而,更大的CNN,尽管有更强的表示能力,但更需要资源。如一个152层的ResNet有超过6000万的参数,当图像分辨率为224*224时需要超过20Gia的浮点运算量。这在移动设备、可穿戴设备或物联网等资源有限的平台上不太可能负担的起。

CNN在实际应用中的部署,很大程度上通过以下方面被限制:

1)模型大小。CNN强大的表示能力来自其数以百计的可训练参数。如在ImageNet数据集上存储一个典型的CNN会占用超过300MB的空间,这对于嵌入式设备是比较大的资源负担。

2)运行内存。在推理期间,CNN的中间激活or响应会比存储模型参数占用更多的内存空间,即使bach size =1。这对于高端的GPU并不是一个问题,但是对于具有低计算能力的应用程序是负担不起的。

3)计算操作次数。卷积操作在高分辨率图像中是计算密集型。大型CNN可能需要几分钟才能在移动设备上处理一张图像,使其被用于实际应用是不现实的。

其他模型压缩的方法:低秩近似、网络量化、二值化及权重剪枝、动态推理等,仅能够解决以上提及的1或2个挑战。此外,一些技术需要专门设计软件或硬件加速器来执行加速。

另外,减少大型CNN资源消耗的方式是稀疏化网络。稀疏化可以应用于不同级别的结构,这会产生相当的模型压缩和推理加速。然而,这种方法通常需要特殊的硬件加速来获得内存或节省时间收益,尽管它比[12]中的非结构化稀疏权重矩阵更容易。

本文提出网络瘦身,一种简单而高效的网络训练方式,它解决了在有限资源下部署大型CNN模型时面临的所有上述挑战。我们的方法对BN层的缩放因子施加L1正则化,因此无需对现有的CNN架构做任何更改即可轻松实现。使用L1正则化将BN层缩放因子的值推向零,能够使我们识别无关紧要的通道或神经元。因为每一个缩放因子都有对应的特殊卷积通道(或在全连接层的神经元)。这有助于在后续步骤中进行通道修剪。额外的正则化项很少影响性能。事实上在某些情况下,它会导致更高的泛化精度。剪枝不重要的通道可能会短暂的降低性能,但这个影响可以通过接下来的剪枝网络微调来补偿

剪枝后,与初始的宽网络相比,由此产生的较窄网络在模型大小、运行内存和计算操作方面更加紧凑。以上过程可以重复多次,产生多通道网络瘦身方案,从而使网络更加紧凑。

在多个基准数据集和不同网络架构的实验表明,CNN模型压缩可达原来模型的20倍,计算量减少了5倍,而精度相同甚至更高。 然而,我们的方法通过传统硬件和深度学习软件包实现了模型压缩和推理速度,因为产生的较窄模型没有任何存储格式或计算操作。

  1. Related Work

在本部分,将从5个方面来讨论相关工作:

1)Low-rank Decomposition:使用奇异值分解(SVD)等技术逼近在神经网络中具有低秩矩阵的权重 向量。由于CNN层的计算操作主要来自于卷积层,所以这种方法在全连接层上效果特别好,会产生大约3倍的模型大小压缩,但没有显著的加速。

2)Weight Quantization: HashNet[3]提出将网络权重量化。在训练之前,网络权值被散列到不同的组中,在每个组中权值被共享。 这种方法只需要存储共享权值和哈希索引,从而节省了大量的存储空间。[12]在深度压缩中使用改进的量化技术,并在AlexNet和VGGNet上实现了35x到49x的压缩率。

然而,这些技术既不能节省运行时内存,也不能节省推理时间,因为在推理过程中,共享权重需要恢复到它们的原始位置。 [28,6]将实值权重量化为二进制/三值权重(权重值限于{-1,1}或{-1,0,1})。 这样可以节省大量的模型大小,并且在给定位操作库的情况下也可以获得显著的加速效果。 然而,这种激进的低位近似方法通常会带来适度的精度损失。

3)Weight Pruning / Sparsifying:[12]提出在训练网络时,用较小的权重裁剪不重要的网络。结果网络的权值大多为零,因此可以通过将模型存储为稀疏格式来减少存储空间。然而,这些方法只能通过专用的稀疏矩阵运算库和/或硬件来实现加速。运行时内存节省也非常有限,因为大多数内存空间是由激活映射(仍然密集)而不是权重消耗的。

在[12]中,训练时没有关于稀疏性的指导。[32]通过对每个权值显著地施加稀疏约束来克服这一限制,并通过修剪带有零门值的连接来实现高压缩率。该方法比[12]获得了更好的压缩率,但也存在同样的缺点。

4)Structured Pruning / Sparsifying:最近,[23]提出在经过训练的CNN中,对传入权重较小的通道进行裁剪,然后对网络进行微调以恢复准确性。[2]在训练前通过在卷积层随机失活输入输出通道连接来引入稀疏性,这也会产生具有中等精度损失的较小网络。与上述工作相比,我们在训练过程中明确地在优化目标中引入了通道稀疏性,使得通道剪枝过程更加平滑,且精度损失较小。

[37]在训练过程中提出神经元稀疏化,一些神经元能够得以裁剪,获得紧凑网络。[35]提出结构稀疏化(SSL)学习的方法,对CNN结构中的不同结构(如过滤器、通道、层)进行稀疏化。这两种方法都在训练过程中利用组稀疏正则化来获得结构稀疏化。我们的方法是在通道尺度因子上使用简单的L1稀疏化,之后优化目标更加简单,而非在卷积权重上用组稀疏化。

由于这些方法修剪或稀疏化部分网络结构(如神经元、通道),而不是单独的权值,它们通常需要较少的专门库(如稀疏计算操作)来实现推理加速和运行时内存节省。我们的网络瘦身也属于这一类,完全不需要特殊的库来获得好处。

5)Neural Architecture Learning:专家[22, 31, 14]设计出先进的CNN网络,但也有一些自动化学习网络架构的探索。[20]为给定资源预算的网络架构搜索引入了子模块和超优模块。[38,1]提出用强化学习来自动学习神经架构。

这些方法的搜索空间非常大,因此需要训练数百个模型来区分好与坏。网络瘦身能够作为一种架构学习方法,尽管受限于每一层的宽度。与上述方法相反,网络瘦身只通过一个训练过程来学习网络架构,这与我们追求的效率目标相一致。

  1. Network slimming

我们的目标是在深层CNN中提供一个简单的方案达到通道稀疏化。在本节,首先讨论通道稀疏化的优势和挑战,之后介绍我们如何利用批量标准化中的缩放层来有效地识别和删除网络中不重要的通道

Advantages of Channel-level Sparsity:如之前的研究[35,23,11]所述,稀疏性可以在不同的层次上实现,例如权重层、卷积核层、通道层或层级。

细粒度层稀疏化具有最高的灵活性和通用性,会导致高的压缩率,但需要特殊的软件或硬件加速器在稀疏化模型进行快速推断。

粗粒度稀疏化并不需要特殊的包来加速推理,然而它有较少的灵活性,因为有些整个层都需要修剪。

事实上,当深度足够大时,移除层才有效,例如,超过50层[35,18]。相比之下,通道稀疏化在灵活性易于实现之间提供了一个很好的权衡。它能够应用于任何典型的CNN和全连接网络(将每一个神经元看作一个通道),得到的网络是一个未修剪网络的瘦版本,可以在传统的CNN平台上进行有效加速。

Challenges:达到通道稀疏化需要裁剪通道间所有传入与传出间的连接,这使得在预先训练的模型上直接修剪权值的方法无效,因为在一个通道输入与输出端,所有权值都不太可能接近零值。在[23],在预训练的ResNet,通道剪枝在精确度没有损失的情况下参数数量会减少约10%,[35]通过在训练目标中加强稀疏正则化来解决这个问题。具体来说,采用组LASSO在训练时,将同一通道对应的所有滤波权值同时推向零。然而,这种方法需要计算关于所有过滤值的额外正则化梯度,这是非常重要的。我们介绍一个简单的想法来解决上述挑战,具体细节如下所示。

Scaling Factors and Sparsity-induced Penalty:我们的想法是为每一个通道引入一个缩放因子γ,乘以该通道的输出。之后联合训练网络权重和缩放因子,对后者进行稀疏正则化。最后用小因子裁剪这些通道,并将裁剪后的网络进行微调。具体来说,我们方法的训练目标如下:

(x, y)表示训练输入和目标

W表示可训练权重,第一个求和项对应一个CNN的正常训练损失

g(·)是稀疏性对缩放因子的惩罚,γ平衡了这两项。

在我们的实验中,我们选择g(s) = |s|,它被称为L1正则化,通常用于实现稀疏性。采用次梯度下降作为非平滑L1惩罚项的优化方法。另一种选择是平滑L1惩罚项替换L1惩罚项,以避免在非平滑点使用次优梯度。

由于对一个通道剪枝实质上相当于移除该通道的所有进出连接,因此我们在无需使用任何特殊的稀疏计算包情况下,可以直接得到一个狭窄的网络(图1)。比例因子作为通道选择的代理,由于它们与网络权重联合优化,所以网络可以自动识别不重要的通道,在不影响泛化性能的情况下可以安全移除。

Leveraging the Scaling Factors in BN Layers:大部分的CNN已经将采用BN层作为一种标准的方法去达到快速收敛和较好的泛化性能。BN规范激活的方法促使我们设计一种简单有效的方法来整合通道上的缩放因子。特别地,BN层使用小批量统计来规范内部激活。设zin和zout为BN层的输入输出,B为当前的小批量,BN层进行如下变换:

其中,µB和σB是B上输入激活的平均值和标准差,γ和β是可训练的仿射变换参数(尺度和位移),它提供了将标准化激活线性转换回任何尺度的可能性。

通常的做法是在卷积层之后插入BN层,具有通道缩放或移动参数。因此,我们直接在BN层用γ参数作为我们网络瘦身所需的缩放因子,它的最大优点是不会给网络带来任何开销。事实上,这可能也是我们学习有意义的比例因子用于通道修剪的最有效的方法。

1)如果我们在没有BN层的CNN上添加缩放层,则对于评估通道重要性而言,缩放因子的价值是无意义的,因为卷积层和缩放层都是线性变换。另外可通过减少缩放因子的值而扩大卷积层的权重来达到相同的结果。

2)如果我们在BN层前插入缩放因子,这个缩放层的缩放效果将被BN层的归一化过程完全抵消。

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

Channel Pruning and Fine-tuning:在经过通道稀疏正则化训练之后,我们得到一个许多缩放因子都趋于0的模型。之后我们可以对趋于0的缩放因子的通道进行修剪,去除所有的进出连接和对应的权重。我们在所有层中使用一个全局阈值来修剪通道,该阈值被定义为所有缩放因子值的某个百分比。例如,我们通过选择百分位阈值为70%来删除比例因子较低的70%通道。通过这样做,我们获得了一个更紧凑的网络,更少的参数和运行时内存,以及更少的计算操作。

当剪枝率较高时,剪枝会暂时导致一定精度的损失,但很大程度上会通过随后剪枝过程中的微调得到补偿。在我们的实验中,微调狭窄网络可以达到比原始未剪枝网络更高的精度。

Multi-pass Scheme:我们也可以将所提出的方法从单通道学习方案(训练稀疏正则化,剪枝和微调)扩展到多通道方案。具体来说,网络瘦身过程导致了一个狭窄的网络,在这个网络上,我们可以再次应用整个训练过程来学习一个更紧凑的模型。这将在图2中的虚线部分来表示。实验结果显示,该方法在压缩率方面有更好的效果。

处理跨层连接和预激活结构:以上介绍的网络瘦身过程可以直接应用于大多数普通的CNN架构,如AlexNet[22]和VGGNet [31],当它应用于具有跨层连接和预激活设计的现代网络(如ResNet[15]和DenseNet[17])时,需要一些适应性。对于这些网络,可以将一层的输出作为后续多层的输入,其中在卷积层之前放置一个BN层。在这种情况下,稀疏性是在一层的传入端实现的,即该层有选择地使用它接收到的信道的一个子集。为了在测试时获得参数和计算节省,我们需要放置一个通道选择层来掩盖我们已经确定的无关紧要的通道。

  1. Experiments

我们凭经验证明了网络瘦身在几个基准数据集上的有效性,并根据[10] 的 ResNets公开可用的Torch来实现我们的方法。源码为https://github.com/liuzhuang13/slimming

4.1 Datasets

CIFAR:这两个CIFAR数据集是由分辨率为32*32的自然图像组成,CIFAR-10取自10类,CIFAR-100取自100类。训练集和测试集分别包含50000和10000张图片,在CIFAR-10数据集上,从训练集中分离出5000张图像的验证集,用于在每个模型上搜索λ(在等式1中)。在对所有的训练图像经过训练和微调后,报告最终测试错误。采用标准数据增强方案(移位/镜像),输入数据用通道均值和标准归一化。我们还用我们的方法与 [23]在CIFAR数据集上进行比较。

SVHN: SVHN数据集是由32*32的彩色数字图像组成。遵循惯例,我们使用所有604388张训练图像,从中分割出一个包含6000张图像的验证集,用于训练期间的模型选择。训练期间,选择具有最低验证错误的模型作为要修剪的模型,也报告了微调期间验证错误最低的模型的测试错误。

ImageNet:ImageNet数据集包含1000个类别中的120万张训练图片和50000张验证图片,在[10].采用数据增强方案,报告了最终模型的单一裁剪验证错误。

MNIST:MNIST是一种手写的数字数据集,包含60000张训练图像和10000张测试图像,为测试我们的方法在全连接网络(将每个神经元视为具有 1×1 空间大小的通道)的有效性,将我们的方法与该数据集上的[35]进行了比较。

4.2 Network Models

在CIFAR和SVHN数据集上,我们在三种流行网络架构上评估我们的方法:VGGNet[31],ResNet [14] and DenseNet。

VGGNet最初是为ImageNet分类而设计的,对于实验,CIFAR 数据集的原始 VGGNet 的变体取自 [36]。

对于ResNet,使用了具有瓶颈结构的164层预激活ResNet(ResNet-164)[15]。对于 DenseNet,我们使用 40 层的 DenseNet,增长率为 12 (DenseNet-40)。

在Imagenet数据集上,采用11层的VGG-A网络模型,并从[4]进行批量归一化。删除了dropout层,因为我们使用了大量的数据增强,为修剪全连接层的神经元,我们将其看作是1*1空间大小的卷积通道。

在MNIST数据集上,与 [35] 中相同的 3 层全连接网络上评估我们的方法。

4.3 Training, Pruning and Fine-tuning

Normal Training.:我们通常从头开始训练所有网络作为基线。所有网络用SGD来进行训练,在CIFAR 和SVHN数据集上,分别使用大小为64的小批量进行160和20轮训练。初始学习率设为0.1,以总训练轮数的50%和70%除以10。在ImageNet和MNIST数据集上,batch size 为256,训练的epoch分别为60,30、初始学习率为0.1,即在训练轮数的1/3和2/3后除以10。在我们的所有实验中,我们将所有信道缩放因子初始化为0.5,因为这给基线模型带来了比默认设置(所有初始化为1)更高的精度 .

Training with Sparsity: 对于CIFAR 和SVHN数据集,当进行通道稀疏正则化训练时,超参数λ控制经验损失与稀疏化间的权衡,通过在CIFAR-10验证集上进行10−3, 10−4, 10−5 的网格搜索来确定。对于VGGNet 我们选择λ=10−4 ,对于ResNet和DenseNet选择λ=10−5 。在ImageNe的VGG-A,我们设置了λ=10−5 ,所有其他设置都保持与正常训练相同。

Pruning: 当我们用稀疏度对训练的模型进行通道裁剪时,需要确定比例因子的剪枝阈值。与[23]中不同的层被不同的比率修剪不同的是,我们使用全局修剪阈值。修剪阈值由所有缩放因子中的一个百分位来确定,如对40%或60%的通道进行修剪。剪枝过程通过构建一个更窄的模型和从稀疏性训练的权重中复制相应的权值来实现剪枝过程。

Fine-tuning:剪枝之后,我们可以得到一个更加窄和更加紧凑的模型,之后进行微调。在CIFAR,SVHN和 MNIST数据集上,微调使用与训练中相同的优化设置。ImageNet数据集上,由于时间限制,我们仅对5个epoch以10−3的学习速率对修剪后的VGG-A进行了微调。

4.4. Results

CIFAR和SVHN: CIFAR和SVHN的结果在表1中显示,用黑体字标出模型中所有最低的测试误差。

Parameter and FLOP reductions: 网络瘦身的目的是减少需要计算的资源。每个模型的最后一行有≥ 60%的通道修剪,同时也要维持与基线相似的精度。参数量会减少高达10倍。参数量会减少50%左右。为了提升网络瘦身的效率,我们将节省的资源绘制在图3中,可以看到VGGNet有大量冗余的参数可以去修剪,在ResNet-164上,参数量和计算量的节省相对不重要,猜测是因为它的瓶颈结构已经起了选择通道的作用。在CIFAR-100数据集上的减少率通常要低于在CIFAR-10 and SVHN数据集上,可能是因为CIFAR-100包含更多的类别。

Regularization Effect: 从表1可以看到,在ResNet and DenseNet上,通常有40%的通道需要修剪,经过微调的网络可以达到比原始模型更低的测试误差。如,在CIFAR-10上,DenseNet-40用40%通道修剪可以达到5.19%的测试错误,比原始模型要低1%。假设这是由于L1稀疏性对通道的正则化影响,它可以在网络中间层提供特征选择,将在下一节分析这些影响。

ImageNet:ImageNet数据集的结果总结在表2中,当对50%的通道进行剪枝时,参数节约量大于5倍,计算量节约量仅为30.4%。这是因为所有的计算密集型的卷积层中仅378个(在2752个)通道被裁剪,而参数量密集型的全连接层中有5094个神经元被裁剪。值得关注的是,我们的方法在1000分类的ImageNet数据集上实现节约且没有精度的损失,而其他高效的CNN方法,大部分报告有精度损失。

MNIST:在MNIST数据集上,我们将我们的方法与结构化稀疏学习SSL方法在表3中进行了对比。尽管我们的方法主要用于在卷积层中修剪通道,但它在全连接层中也能很好的修剪神经元。在本实验中,我们观察到用全局阈值剪枝有时会完全删除一层,因此我们在两个中间层中分别删除了80%神经元。我们的方法略优于[35],因此在修剪更多参数的同时,测试错误率略低。

我们在补充材料中提供了额外的实验结果,包括

(1)在CIFAR-10数据集上有压缩VGGNet的详细结构;

(2)实践中,运行时间与运行内存的节约;

(3)与先前通道剪枝方法[23]的对比。

4.5. Results for Multi-pass Scheme

我们在CIFAR数据集上用VGGNet部署了多通道方案。由于没有跳过连接,删除整个层将完全破坏这个模型。因此除了将百分位阈值设置为50%之外,我们也设置了一个约束,即在每一层中,最多可以裁剪50%的通道

在每次迭代中,模型的测试误差如表4,随着剪枝过程,我们得到了更多的压缩模型。在CIFAR-10数据集上,训练的模型在5次迭代后达到了最低测试误差。该模型参数量减少20倍,FLOPs减少5倍。在CIFAR-100数据集上,迭代3次之后,测试误差开始增加,可能是因为包含的类别多于CIFAR-10数据集,所以过于激进的剪枝通道不可避免的损害性能。然而,在没有精度损失下,我们仍然删除近90%的参数和近70%的FLOPs。

  1. Analysis

在网络瘦身中有两个重要的超参数,剪枝百分比t和稀疏正则化项λ,在本节中,将详细分析它们的影响。

Effect of Pruned Percentage:一旦我们得到稀疏正则化训练的模型,需要决定从模型中删除通道的百分比。如果我们删减过少的通道,所节省的资源将非常有限。然而,如果删除太多通道,将对模型造成破坏,并且可能无法通过微调恢复精度。为展示不同比列的通道剪枝效果,我们在CIFAR-10数据集上,训练λ=10−5时DenseNet-40模型,结果展示在图5.

从图5中可以看出,当剪枝率超过阈值时,修剪或微调模型的分类性能将会下降。微调过程通常会补偿由剪枝引起的精度损失。只有当阈值超过80%时,微调模型的测试误差会落后于基线模型。显而易见,当使用稀疏性训练时,即使没有微调,该模型的性能比原始模型表现的好。可能是因为L1稀疏性对通道比例因子的正则化效应。

Channel Sparsity Regularization:L1稀疏项的目的是迫使许多比例因子趋于0,在公式1中参数λ控制了其相对于正常训练损失的显著性,图4中,在整个网络中用不同的λ值绘制了比例因子的分配。在这个实验中,我们用VGGNet 在CIFAR-10数据集上训练。

可以观察到,随着λ的增大,比例因子集中在零附近。当λ=0时,即没有稀疏正则化,分布趋于平坦。当λ=10-4 时,几乎所有的比例因子都会落到一个接近零的小区域附近。这个过程可以看作是发生在深层网络中间层的特征选择,仅仅会选择具有不可忽略的比例因子通道。我们通过热图进一步可视化这个过程。图6显示训练过程中,VGGNet中一个层的缩放因子的大小。每个通道开始都有相等的权重,在训练过程中,一些通道的比例因子变得很亮,另外一些变得很暗。

  1. Conclusion

我们提出网络瘦身技巧来学习更紧凑的CNN,它直接对BN层的比例因子进行稀疏诱导正则化,不重要的通道在训练过程中会自动识别,之后进行剪枝。在多个数据集上我们已经证明了所提出的方法可以显著降低最先进网络的计算成本,且没有精度的损失。更重要的是,这个方法在降低训练过程开销的同时,减少了模型大小,运行内存和计算操作,并且生成的模型不需要特殊的库或硬件来进行有效的推理。

个人观点:the network slimming是通过对BN层的缩放因子施加正则化,使用L1正则化将BN层缩放因子值推向0,通过识别剪枝不重要的通道,之后通过网络微调来补偿所降低的性能,剪枝后,不仅使得模型在运行内存、计算操作和模型大小方面得以压缩,还可以达到比原始未剪枝网络更高的精度。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值