Learning both Weights and Connections for Efficient Neural Networks

Learning both Weights and Connections for Efficient Neural Networks

Learning both Weights and Connections for Efficient Neural Networks_第1张图片

摘要

神经网络是计算密集型和内存密集型的,这使得它们很难部署在嵌入式系统上。此外,传统的网络在训练开始前就确定了架构;因此,训练不能改善网络结构。为了解决这些限制,我们提出了一种方法,通过只学习重要的连接参数,来减少存储和计算所需的神经网络数量级,而不影响其准确性。我们的方法使用三步方法删除冗余连接。首先,我们训练网络了解哪些连接是重要的。接下来,我们修剪不重要连接。最后,我们对网络进行重新训练,以微调剩余连接的权重。在ImageNet数据集上,我们的方法将AlexNet的参数数量减少了9倍,从6100万个减少到670万个,而不会造成准确性损失。VGG-16的类似实验发现,总参数可以减少13倍,从1.38亿减少到1030万,同样没有丢失精度。

引言

神经网络在从计算机视觉到语音识别和自然语言处理的应用中无处不在。我们考虑卷积神经网络用于随着时间的推移而增长的计算机视觉任务。1998年Lecun等设计了参数小于1M的CNN模型LeNet-5对手写数字进行分类,2012年Krizhevsky等以60M参数赢得ImageNet竞赛。Deepface用120M的参数对人脸进行分类,Coates等将网络缩放到10B的参数。
虽然这些大型神经网络非常强大,但它们的大小消耗了相当大的存储空间、内存带宽和计算资源。对于嵌入式移动应用程序,这些需要的资源是非常难以满足的。图1显示了45nm CMOS过程中基本算术和内存操作的能量消耗。从这些数据中我们看到,每次连接的能量主要由内存访问决定,范围从片上SRAM中的32位系数的5pJ到片外DRAM中的32位系数的640pJ。大型网络不适合芯片存储,因此需要更昂贵的DRAM访问。例如,运行一个10亿连接的神经网络,在20Hz时,仅DRAM访问就需要(20Hz)(1G)(640pJ) = 12.8W,这远远超出了典型移动设备的功率范围。模型尺寸的削减也有利于存储和传输的移动应用合并了DNNs。
Learning both Weights and Connections for Efficient Neural Networks_第2张图片
为了实现这一目标,我们提出了一种以保持原始精度的方式裁剪网络连接的方法。在初始训练阶段之后,我们删除所有权值低于阈值的连接。这种修剪将稠密的、完全连接的层转换为稀疏层。第一阶段学习网络的拓扑结构,学习哪些连接是重要的,并删除不重要的连接。然后我们对稀疏网络进行重新训练,这样剩余的连接就可以弥补被删除的连接。修剪和再训练阶段可以重复进行,以进一步降低网络的复杂性。实际上,这个训练过程不仅学习了权重,还学习了网络连接——就像哺乳动物的大脑一样,在儿童发育的最初几个月里,突触就在那里形成,然后逐渐删除很少使用的连接,下降到典型的成人价值。

相关工作

神经网络通常都是过参数化的,而且深度学习模型存在显著的冗余。这会导致计算和内存的浪费。有各种各样的建议来消除冗余:Vanhoucke等人探索了8位整数(32位浮点)激活的定点实现。Denton等人利用了神经网络的线性结构,找到了参数的合适低秩近似,并将精度保持在原始模型的1%以内。在类似精度损失的情况下,Gong等人使用矢量量化对深度卷积网络进行了压缩。这些近似和量化技术与网络剪枝是正交的,它们可以共同使用以获得更好的效果。
还有其他一些尝试,通过用全局平均池代替全连接层来减少神经网络的参数数量。网络架构和GoogLenet采用了这一思想,在几个基准测试中都取得了最先进的结果。然而,这种方法更难实现迁移学习,即重用在ImageNet数据集上学习到的特征,并仅通过微调完全连接的层将它们应用到新的任务中。Szegedy等人注意到了这个问题,并促使他们在其网络顶部添加一个线性层,以实现迁移学习。
网络剪枝被用于降低网络复杂度和减少过拟合。早期的修剪方法是重差衰减。最佳脑损伤和最佳脑外科医生根据损失函数的Hessian对网络进行修剪以减少连接的数量,这表明这种修剪比基于数量的修剪(如权重衰减)更准确。但是二阶导数需要额外的计算。
HashedNets是一项最新的技术,通过使用散列函数将连接权重随机分组到散列桶中,从而使同一个散列桶中的所有连接共享一个参数值,从而减少模型大小。这种技术可以从修剪中受益。正如Shi和Weinberger等人等人指出的那样,稀疏性将使哈希冲突最小化,使得特征哈希更加有效。HashedNets可以与修剪一起使用,以提供更好的参数节省。
Learning both Weights and Connections for Efficient Neural Networks_第3张图片

除了权重之外还要学习连接方式

我们的修剪方法采用了一个三步过程,如图2所示,首先通过常规的网络训练来学习连接性。然而,与传统的训练不同,我们不是在学习权重的最终值,而是在学习哪些联系是重要的。然而,与传统的训练不同,我们不是在学习权重的最终值,而是在学习哪些联系是重要的。第二步是修剪低重量的连接。将权值低于阈值的所有连接从网络中移除,将密集网络转换为稀疏网络,如图3所示。最后一步是对网络进行重新训练,以学习剩余稀疏连接的最终权值。这一步至关重要。如果不进行再训练而使用修剪后的网络,准确率会受到很大影响。

正则化

选择正确的正则化方法会影响剪枝和再训练的性能。L1正则化惩罚非零参数,导致更多的参数接近零。这在修剪之后,重新训练之前,提供了更好的准确性。然而,其余的连接不如L2正规化的好,导致再训练后精度较低。总的来说,L2正则化给出了最好的剪枝结果。这将在实验部分进一步讨论。

Dropout 比例调整

Dropout被广泛用于防止过拟合,这也适用于再训练。然而,在再训练期间,dropout比率必须根据模型容量的变化进行调整。在dropout中,每个参数在训练过程中概率性的切除,但在推理过程中会返回。在剪枝过程中,参数在剪枝后被永久删除,并且在训练和推理过程中都没有机会返回。随着参数的稀疏化,分类器选择信息最丰富的预测器,预测方差更小,减少了过拟合。由于裁减已经降低了模型容量,再训练的dropout率应该更小。
定量, C i C_i Ci i i i层的连接数, C i o C_io Cio原始网络连接数, C i r C_ir Cir再训练后的连接数, N i N_i Ni是第 i i i层的神经元数量。因此当dropout作用与神经元之后, C i C_i Ci N i N_i Ni成二次方变化,根据方程1因此,dropout比例修剪后的参数应该遵循方程2, D o D_o Do代表原始的辍学率, D r D_r Dr代表培训期间的辍学率。
在这里插入图片描述

局部剪枝和参数协同适应

在再训练期间,保留那些在初始训练阶段幸存下来的连接的权值,要比重新初始化修剪后的层要好。cnn包含脆弱的协同适应特征:梯度下降在网络初始训练时能够找到很好的解决方案,但在对一些层进行重新初始化和再训练后则不能。因此,当我们重新训练修剪过的层时,我们应该保留幸存的参数,而不是重新初始化它们。
从保留权重开始重新训练修剪过的层需要较少的计算量,因为我们不需要在整个网络中反向传播。同时,随着网络深度的增加,神经网络容易出现梯度消失问题,这使得深度网络的剪枝错误更难恢复。为了防止这种情况发生,我们固定CONV层的参数,并且只在修剪了FC层之后再训练FC层,反之亦然。

迭代剪枝

学习正确的连接方式是一个反复的过程。修剪后再训练是一次迭代,多次这样的迭代后,可以找到最小连接数。在不损失准确率的情况下,该方法在AlexNet上的剪枝率由5倍提高到9倍。每次迭代都是一次贪婪的搜索,因为我们要找到最好的连接。我们也实验了基于绝对值的概率剪枝参数,但这给出了更糟糕的结果。

剪枝神经元

在修剪连接之后,输入连接为零或输出连接为零的神经元可以被安全地修剪。这种修剪通过删除与修剪后的神经元之间的所有连接来进一步进行。再训练阶段会自动达到这样的结果,即死神经元的输入连接和输出连接都为零。这是由于梯度下降和正则化。一个输入连接为零(或输出连接为零)的神经元对最终的损失没有贡献,导致其输出连接(或输入连接)的梯度分别为零。只有正则化项会将权重推到零。因此,在再训练时,死亡的神经元会被自动移除。

实验

我们在Caffe中实现了网络剪枝。对Caffe进行了修改,增加了一个掩码,该掩码在对每个权值张量进行网络操作时忽略了剪枝参数。选择剪枝阈值作为质量参数乘以一层权重的标准差。我们在Nvidia TitanX和GTX980 gpu上进行了实验。
我们修剪了四个代表性的网络:MNIST数据集上的Lenet-300-100和Lenet-5。ImageNet数据集上的AlexNet和VGG-16。网络参数和精度修剪前后见表1。
Learning both Weights and Connections for Efficient Neural Networks_第4张图片

MNIST数据集上案例

我们首先用LeNet-300-100和LeNet-5网络对MNIST数据集进行了实验。LeNet -300-100是两个隐含层的全连接网络,每个隐含层有300和100个神经元,在MNIST上错误率为1.6%。LeNet-5是一个卷积网络,有两个卷积层和两个全连接层,在MNIST上误差率为0.8%。修剪后,网络以原网络初始学习率的1/10重新训练。表2表明剪枝可以减少这些网络中12倍的参数。每一层的网络表显示(左到右)原始数量权重、所有层的激活函数浮点运算数量,非零激活函数的百分比,修剪后非零权重的百分比,实际上需要浮点运算的百分比。
一个有趣的副产品是,网络剪枝检测视觉注意力区域。图4显示了透镜LeNet-300-100的第一完全连接层的稀疏模式,矩阵大小为784∗300。它有28个频带,每个频带的宽度为28,对应于输入像素的28×28。图形的彩色区域,表示非零参数,对应于图像的中心。因为数字写在图像的中心,这些是重要的参数。图的左右是稀疏的,对应于t的顶部和底部的不那么重要的区域。剪枝后,神经网络发现图像中心更重要,与不重要区域连接神经元被剪枝更多。
Learning both Weights and Connections for Efficient Neural Networks_第5张图片

AlexNet在ImageNet数据集上实验

我们进一步检查了ImageNet ILSVRC-2012数据集上剪接的性能,该数据集有1.2M训练集和50k验证集。我们使用AlexNet Caffe模型作为参考模型,该模型在5个卷积层和3个完全连接层上拥有6100万个参数。AlexNet Caffe模型的 top-1准确率为57.2%, top-5的准确率为80.3%。最初的AlexNet在NVIDIA Titan X GPU上花了75个小时进行训练。修剪后,整个网络以原网络初始学习率的1/100重新训练。它花了173个小时再次训练剪枝的 AlexNet。在迭代地构建模型原型时不使用剪枝,而是在模型准备部署时用于模型精简。因此,再训练时间就不那么重要了。从表1可以看出,AlexNet可以在不影响精度的情况下被修剪到原来大小的1/9,计算量可以减少3倍。

VGG-16在ImageNet数据集上实验

在AlexNet上有了很好的结果,我们也在同一个ILSVRC-2012数据集上研究了一个更大的,更新的网络,VGG-16。VGG -16有更多的卷积层,但仍然只有三个完全连接的层。采用类似的方法,我们积极地修剪卷积层和全连接层,以实现权值的显著减少,见表5所示。我们对再训练进行了五次修剪。VGG-16的结果和AlexNet一样,非常有希望。整个网络的大小已经减少到原来的7.5%(比原来小13倍)。特别要注意的是,两个最大的完全连接层都可以被修剪到原来大小的4%以下。这种减少对于实时图像处理至关重要,因为在实时图像处理中,几乎没有跨图像的完全连接层的重用(不像训练期间的批处理)。
Learning both Weights and Connections for Efficient Neural Networks_第6张图片

讨论

精度与参数的权衡曲线如图5所示。删除的参数越多,精度越低。我们用L1和L2正则化进行了实验,有再训练的也有无再训练的,再加上迭代修剪,得到了5条权衡曲线。比较实线和虚线,再训练的重要性很明显:不进行再训练,准确性下降得更快——原来连接的1/3,而不是1/10。有趣的是,我们有免费的午餐,减少联系而不损失准确性,甚至无需再培训;而通过再培训,我们可以巧妙地将联系减少9倍。
Learning both Weights and Connections for Efficient Neural Networks_第7张图片
L1正则化比L2在经过剪枝(蓝色点和紫色线)后直接得到更好的精度,因为它将更多的参数推向接近于零的位置。但是,通过比较黄线和绿线可以看出,L2在再训练后的表现要优于L1,因为进一步将值推向零没有任何好处。一种扩展是使用L1正则化进行剪枝,然后使用L2进行再训练,但这并不是简单地在两个阶段使用L2。一种模式的参数与另一种模式的参数不太适应。

最大的收获来自于迭代剪枝(实心圆圈的实心红线)。这里,我们采取剪枝和再训练网络(实心绿线和圆圈),剪枝和再训练它。曲线最左边的点对应于修剪到80%(5倍修剪)时绿线上的点8,9倍没有精度损失。直到10倍精度才开始急剧下降。

两个绿点的精度略优于原始模型。我们认为,这种精度的提高是由于寻找合适的网络容量,从而减少过拟合。

CONV和FC层都可以被剪枝,但灵敏度不同。图6显示了各层对网络剪枝的敏感性。该图显示了随着参数逐层修剪,准确性如何下降。CONV层(左边)比完全连接的层(右边)对修剪更敏感。第一卷积层直接与输入图像交互,对剪枝最敏感。我们怀疑这种灵敏度是由于输入层只有3信道,因此冗余比其他卷积层少。我们利用灵敏度结果找到每一层的阈值:例如,最小的阈值应用于最敏感的层,即第一卷积层。

将修剪后的层存储为稀疏矩阵的存储开销仅为15.6%。存储相对索引而不是绝对索引可以将FC层索引占用的空间减少到5位。同样的,CONV层索引只能用8位表示。
修剪后,存储需求AlexNet和VGGNet足够小,所有的重量都可以存储在芯片上,而不是片外DRAM以数量级的更多的能量来访问(表1)。我们针对修剪方法固定功能硬件专门用于稀疏款,鉴于通用硬件的限制在稀疏的计算。

图7显示了修剪之前(左)和之后(右)权重分布的直方图。权重来自AlexNet的第一个全连接层。这两个面板有不同的y轴刻度。权值的原始分布以零为中心,尾部迅速下降。几乎所有的参数都在[- 0.015,0.015]之间。修剪后去除较大的中心区域。网络参数在再训练阶段进行自我调整。结果是,参数形成了双峰分布,并在x轴[- 0.025,0.025]之间分布得更广。
Learning both Weights and Connections for Efficient Neural Networks_第8张图片

结论

我们提出了一种方法,以提高能源效率和存储的神经网络,而不影响准确性找到正确的连接。在某种程度上,我们的方法是由哺乳动物大脑中学习的运作方式所激发的,通过学习哪些连接是重要的,剔除不重要的连接,然后再训练剩余的稀疏网络。我们在ImageNet上的AlexNet和VGGNet上的实验表明,完全连接层和卷积层都可以被修剪,连接数从9倍减少到13倍而不损失准确性。这使得实时图像处理所需的内存容量和带宽更小,更容易部署在移动系统上。

你可能感兴趣的:(论文翻译,神经网络,机器学习,神经网络)