剪枝算法:有效神经网络的权值和连接学习

本文出自论文 Learning both Weights and Connections for Efficient Neural Networks ,主要介绍了剪枝算法的使用以及其压缩效果的性能影响。


神经网络是计算密集型和内存密集型的,使得它们在嵌入式系统上部署很困难。另外,卷积网络在训练开始前其体系架构被固定,导致其训练过程不能改进它的体系架构。为了解决这些限制,本文采用了一种方法来减少神经网络所要求的内存和计算资源,这种方法是只学习重要连接而不影响精度。该方法使用三个步骤来减去冗余连接,一是训练网络来学习重要的连接,二是减去不重要的连接,三是重新训练该网络来微调剩余连接的权值。在ImageNet数据集上,我们的方法可以减少AlexNet网络的参数为1/9,从61,000,000到6,700,000.
剪枝三步骤



一、简介

  1. 当这些大的神经网络变得很强大后,它们的规模大小消耗了相当大的存储、内存带宽和计算资源。剪枝网络的目的是减少运行大型网络所要求的能量,从而使它们能够在移动设备上实时运行。利用剪枝使模型大小减少,也有利于包含DNNs的移动应用程序存储和传输。
  2. 为了实现该目标,本文提出了一种方法以某种方式来修剪网络连接,同时保证原来的精度不变。在一个初始训练阶段结束后,我们移除了所有的权值低于设定阈值的连接。这种剪枝将一个稠密的全连接层转换成一个稀疏层。第一个阶段为:学习网络的拓扑结构,学习重要的连接并移除不重要的连接。第二个阶段为:重新训练稀疏网络,从而使剩余的连接仍可以补偿已经被移除的连接。剪枝和重训练阶段可以被迭代式重复进行,来进一步减少网络的复杂性。
  3. 这种训练阶段除了权值之外还学习到了网络的连接性,本文将这种行为类比为哺乳动物的大脑。在一个婴儿发展期的前几个月内,突触被建立起来,然后逐渐剪去很少使用的连接,使之成为典型的成人形式。
    剪枝前后的神经元以及突触

二、相关工作

  1. 通过使用全局平均池化来代替全连接层可以减少神经网络的参数。GoogleNet使用这种方法获得最先进的结果,而迁移学习重用ImageNet数据集上学习到的特征,并仅通过对全连接层微调来将它们应用于新任务上,使用这种方法更困难,因此在网络上添加了一个线性层来支持迁移学习。
  2. 网络剪枝已经被用来减少网络复杂性和过拟合。一个较早的剪枝方法是基于权重衰减的。基于损失函数的Hessian矩阵修剪网络来减少连接数量,这种剪枝方法要比例如权重衰减的剪枝算法更加精确,但是二阶求导需要额外的计算量。
  3. HashedNets通过使用一个hash函数随机将连接权值分散到hash桶中来减少模型大小,从而使相同hash桶中的所有连接可以共享一个简单的参数值。这种技术可从剪枝中获益,稀疏性将最小化hash冲突,使得特征哈希更有效。HashNets和剪枝算法一起使用可能给出更好的参数节省。

三、剪枝算法

  1. Regularization(正则化):选择正确的正则化会影响剪枝和重训练的性能。L1正则化对非零参数进行惩罚,使更多非零参数接近于零。这在剪枝之后和重训练前给出了更好的准确率。然而,剩余的连接并没有使用L2正则化那么好,导致了重训练之后的较低准确率。总体而言,L2正则化给出了最好的剪枝结果。
  2. Dropout Ratio Adjustment(Dropout比例调整):Dropout被广泛用于防止过拟合,也应用于重训练。在重训练时,dropout比例必须被调整以适应模型容量的变化。在dropout阶段,每个参数都有可能在训练阶段被丢弃,但在推理阶段会回来。在剪枝阶段,参数在剪枝后会被永远丢弃,在训练和推理阶段都不会再回来。当参数变稀疏时,分类器将选择最有信息价值的预测器,有着更少的预测变化,从而会减少过拟合。当剪枝减少模型容量时,重训练的dropout比例应当要更小。我们将 C i o C_{io} 表示为原始的网络连接数量, C i r C_{ir} 表示为重训练后的网络连接数量, D o D_o 表示为原始dropout比例, D r D_r 表示重训练时的dropout比例,则我们可定义: D r = D o C i r C i o D_r=D_o\sqrt{\frac{C_{ir}}{C_{io}}}
  3. Local Pruning and Parameter Co-adaptation(局部剪枝和参数自适应):在重训练阶段,保留经过剪枝后的连接的初始训练阶段的权值要比重新初始化剪枝层后的要好。CNNs包含着一些自适应性特征:当网络初始化训练时,梯度下降法能够找到一个好的解决方案,但在重新初始化一些层并对它们重训练后就不需要了。因此当我们重训练剪枝层后,我们应当保留着现存的参数而不是重新初始化它们。随着网络变深容易出现梯度消失问题,针对这种问题我们会固定卷积层的参数,只重新训练修建全连接层后的全连接层。
  4. Iterative Pruning(迭代剪枝):学得正确的连接是一个迭代的过程。每次迭代都是一个贪心搜索,我们从中找到最好的连接。
  5. Pruning Neurons(修剪神经元):在剪去连接后,那些零输入或零输出连接的神经元可能被安全地修剪掉。一个有着零输入或零输出连接的神经元将对最终的损失函数没有任何贡献,导致了它的输出连接或输入连接梯度为0。只有正则化方法将权值变为0,因此,在重训练过程中死亡的神经元会被自动清除。

四、实验

  1. LeNet on MNIST:对于Lenet-300-100,剪枝算法减少了权值数量为12x,和计算为12x;对于Lenet-5,剪枝算法减少了权值数量为12x,和计算为6x。在剪枝后,神经网络发现图像的中心区域更重要,外围区域的连接性则被严重修剪掉。
  2. AlexNet on ImageNet:当迭代地对模型进行原型化时,并没有使用剪枝,而是在模型准备部署时使用剪枝。AlexNet可以被修剪到原始规模的1/9,并没有影响精度,计算量也被减少到3x。
  3. VGG-16 on ImageNet:采用类似的方法,我们积极地修剪卷积层和全连接层,来实现权值数量的显著减少。两个最大的全连接层被修剪到它们原始大小的4%,这种减少对于实时图像处理来说是很关键的,几乎没有跨图像全连接层的重使用。

实验对比

五、讨论

  1. 在剪枝后L1正则化要比L2正则化给出更好的精度,因为它推动更多的参数接近于零。然而在重训练后,L2要比L1的性能更好,这是因为进一步将值推向零并没有好处。因此,一个扩展是使用L1正则化来剪枝,使用L2正则化来重训练,但是这并没有比仅使用L2正则化要更好,从一个模式中的参数并没有更好地适应于另外一个模式。最大的受益来自于迭代式剪枝,这里我们采取了剪枝和重训练网络,修剪和再训练它。
    参数减少和精度的权衡
  2. 实验中我们发现L2正则化重训练网络会得到比原始模型更高的精度,这种精度的提高是由于剪枝找到了合适的网络容量,从而减少了过拟合。
  3. 卷积层和全连接层都被修剪过,但是却有着不同的敏感度。实验中我们发现卷积层比全连接层对修剪更敏感。我们利用这种敏感结果来找到每层的阈值,例如,最小的阈值来被应用于最敏感的层,通常是第一个卷积层。卷积层和全连接层对剪枝的敏感度

六、结论

我们的方法被哺乳动物的大脑学习机制所激励,通过学习哪些连接是重要的,减去不重要的连接,然后重新训练剩余的稀疏网络,来进行操作。我们使用ImageNet在AlexNet和VGGNet上进行实验,展示了全连接层和卷积层都可以被修剪,在无精度损失的情况下可以减少连接数量为9x到13x。这导致了对实时图像处理更少的内存容量和带宽要求,使得在移动系统上进行部署更加容易。

发布了31 篇原创文章 · 获赞 40 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/librahfacebook/article/details/97285482
今日推荐