韩松老师模型压缩--三步剪枝法学习笔记

韩松老师模型压缩–三步剪枝法学习笔记

Learning both Weights and Connections for Efficient Neural Networks

Abstract

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

1 Introduction

神经网络在从计算机视觉[1]到语音识别[2]和自然语言处理[3]的应用中无处不在。我们考虑用于计算机视觉任务的卷积神经网络,这些任务随着时间的推移而增长。1998年,Lecun等人设计了一个参数小于1M的CNN模型LeNet-5来对手写数字进行分类[4],而2012年,Krizhevsky等人[1]以60M的参数赢得了ImageNet竞赛。Deepface使用120M参数对人脸进行分类[5],Coates等人[6]将网络扩展到10B参数。

虽然这些大型神经网络功能强大,但它们的大小消耗了大量的存储、内存带宽和计算资源。对于嵌入式移动应用程序,这些资源需求变得令人望而却步。图1显示了45nm CMOS工艺中基本算术和内存操作的能量成本。从这些数据中,我们可以看到每个连接的能量主要由内存访问控制,范围从片内SRAM中32位系数的5pJ到片外DRAM中32位系数的640pJ[7]。大型网络不适合片上存储,因此需要更昂贵的DRAM访问。例如,在20Hz下运行10亿个连接的神经网络需要 ( 20 H z ) ( 1 G ) ( 640 p J ) = 12.8 W (20Hz)(1G)(640pJ)=12.8W 20Hz1G640pJ=12.8W,仅用于DRAM访问-远远超过典型移动设备的功率包络线。我们修剪网络的目标是减少运行此类大型网络所需的能量,以便它们可以在移动设备上实时运行**。修剪后的模型尺寸减小也促进了包含DNN的移动应用程序的存储和传输。**

image-20220707093438263

为了实现这一目标,我们提出了一种以保持原始准确性的方式修剪网络连接的方法。在初始训练阶段之后,我们移除所有权重低于阈值的连接。这种修剪将密集、完全连接的层转换为稀疏层。第一阶段学习网络的拓扑结构-学习哪些连接是重要的,并删除不重要的连接。然后,我们重新训练稀疏网络,以便剩余的连接可以补偿已删除的连接。修剪和重新训练的阶段可以迭代地重复,以进一步降低网络复杂性。实际上,这种训练过程除了学习权重外,还学习网络连通性——就像在哺乳动物的大脑[8][9]中一样,在儿童发育的前几个月,会在那里创建突触,然后逐渐剪除很少使用的连接,降至典型的成人值。

2 Related Work

神经网络通常过度参数化,深度学习模型存在显著冗余[10]。这导致了计算和内存的浪费。有各种建议可以消除冗余:V anhoucke等人[11]探索了一种具有8位整数(与32位浮点)激活的定点实现。Denton等人[12]通过寻找适当的低秩近似参数并将精度保持在原始模型的1%以内,利用了神经网络的线性结构。龚等人[13]使用矢量量化压缩深度变换网络,其精度损失类似。这些近似和量化技术与网络修剪正交,可以一起使用以获得进一步的增益[14]。

还有其他尝试通过用全局平均池替换完全连接层来减少神经网络的参数数量。网络架构中的网络[15]和GoogLenet[16]通过采用这种思想,在多个基准上实现了最先进的结果。然而,转移学习,即重用在ImageNet数据集上学习的特征,并仅通过微调完全连接的层将其应用于新任务,使用这种方法更为困难。Szegedy等人[16]注意到了这个问题,并促使他们在网络顶部添加一个线性层,以实现迁移学习。

网络剪枝被用于降低网络复杂性和减少过拟合。早期的修剪方法是偏向权重衰减[17]。最优脑损伤[18]和最优脑外科医生[19]修剪网络以减少基于损失函数的Hessian的连接数,并表明这种修剪比基于幅值的修剪(如权重衰减)更准确。然而,二阶导数需要额外的计算。

HashedNets[20]是一种最近的技术,通过使用哈希函数将连接权重随机分组到哈希桶中来减少模型大小,从而使同一哈希桶中的所有连接共享一个参数值。这种技术可能从修剪中受益。正如Shi等人[21]和Weinberger等人[22]所指出的,稀疏性将最小化哈希冲突,使特征哈希更有效。HashedNets可以与剪枝一起使用,以提供更好的参数节省。

3 Learning Connections in Addition to Weights

我们的剪枝方法采用了三步过程,如图2所示,首先通过正常的网络训练学习连通性。然而,与传统训练不同,我们不是在学习权重的最终值,而是在学习哪些连接是重要的

image-20220707093602382

第二步是修剪低权重连接。权重低于阈值的所有连接都将从网络中删除-将密集网络转换为稀疏网络,如图3所示。最后一步重新训练网络,以学习剩余稀疏连接的最终权重。这一步至关重要。如果在不进行再训练的情况下使用修剪后的网络,则准确性会受到显著影响。

image-20220707093554862

3.1 Regularization

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

3.2 Dropout Ratio Adjustment

Dropout[23]被广泛用于防止过度适应,这也适用于再培训。然而,在再培训期间,必须调整Dropout率,以考虑模型容量的变化。在退出时,每个参数在训练过程中都有可能被删除,但在推理过程中会返回。在剪枝过程中,参数在剪枝后会永久删除,并且在训练和推理过程中都没有机会返回。随着参数变得稀疏,分类器将选择信息量最大的预测值,因此预测方差小得多,从而减少过拟合。由于剪枝已经降低了模型容量,再培训的Dropout率应该更小

在数量上,设 C i C_i Ci为第i层中的连接数,原始网络的 C i o C_{io} Cio,再训练后网络的 C i r C_{ir} Cir N i N_i Ni为第一层中的神经元数。由于Dropout作用于神经元,且 C i C_i Ci N i N_i Ni呈二次变化,根据等式1,因此修剪参数后的Dropout率应遵循等式2,其中 D o D_o Do表示原始Dropout率, D r D_r Dr代表再培训期间的Dropout率。

image-20220707094452195

3.3 Local Pruning and Parameter Co-adaptation

在重新训练期间,对于经过修剪的连接,最好保留初始训练阶段的权重,而不是重新初始化修剪层。CNN包含脆弱的自适应特征[24]:当网络最初训练时,梯度下降能够找到一个很好的解决方案,但在重新初始化某些层并对其重新训练后,梯度下降无法找到一个很好的解决方案。因此,当我们重新训练修剪后的层时,我们应该保留幸存的参数,而不是重新初始化它们。

重新训练从保留权重开始的修剪层需要更少的计算,因为我们不必反向传播整个网络。此外,随着网络的加深,神经网络容易出现消失梯度问题[25],这使得深度网络的剪枝误差更难恢复。为了防止这种情况,我们固定了CONV层的参数,并且仅在修剪FC层后重新训练FC层,反之亦然。

3.4 Iterative Pruning

学习正确的连接是一个迭代过程。修剪后的再训练是一次迭代,在多次这样的迭代后,可以找到最小数量的连接。与单步攻击性剪枝相比,该方法在不损失精度的情况下,可以将AlexNet上的剪枝率从5×提高到9×左右。每次迭代都是一个贪婪的搜索,我们找到了最好的连接。我们还试验了基于绝对值的概率剪枝参数,但结果更差。

3.5 Pruning Neurons

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

4 Experiments

image-20220707095708781

image-20220707095812136

image-20220707095823587

image-20220707095857758

image-20220707095912072

5 Discussion

精度和参数数量之间的权衡曲线如图5所示。删除的参数越多,准确性越低。我们实验了L1和L2正则化,有无再训练,以及迭代剪枝,以给出五条折衷线。比较实线和虚线,再培训的重要性显而易见:如果不进行再培训,准确性开始下降的速度要快得多——只有原始连接的1/3,而不是原始连接的1/10。有趣的是,我们有“免费午餐”,减少了2倍的连接,即使没有再培训也不会失去准确性;通过再培训,我们能够减少9倍的联系。

image-20220707100101353

L1正则化在剪枝(蓝色和紫色虚线)后比L2直接提供更好的精度,因为它将更多参数推向零。然而,比较黄线和绿线表明,L2在再训练后优于L1,因为进一步将值推向零没有任何益处。一种扩展是使用L1正则化进行剪枝,然后使用L2进行再训练,但这并不是简单地在两个阶段都使用L2。一种模式的参数不能很好地适应另一种模式

最大的收益来自迭代修剪(带实心圆的实心红线)。在这里,我们对经过修剪和重新训练的网络(带圆圈的实线绿线)进行修剪和重新训练。该曲线上最左边的点对应于绿线上80%(5×修剪)处的点,修剪为8×。在9×,没有精度损失。直到10倍,精度才开始急剧下降。

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

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

image-20220707100144989

将修剪后的层存储为稀疏矩阵的存储开销仅为15.6%。存储相对索引而不是绝对索引将FC层索引占用的空间减少到5位。类似地,CONV层索引只能用8位表示。

剪枝后,AlexNet和VGGNet的存储需求足够小,所有权重都可以存储在芯片上,而不是需要大量能量才能访问的片外DRAM(表6)。鉴于通用硬件在稀疏计算上的局限性,我们将针对专用于稀疏DNN的固定函数硬件提出修剪方法。

image-20220707101834402

图7显示了修剪之前(左)和之后(右)的权重分布直方图。权重来自AlexNet的第一个完全连接层。这两个面板具有不同的y轴比例。权重的原始分布集中在零,尾部迅速脱落。几乎所有参数都在[−0.015, 0.015]. 剪枝后,删除较大的中心区域。网络参数在再训练阶段自行调整。结果是,参数形成双峰分布,并在x轴上更广泛地分布,介于[−0.025, 0.025].

image-20220707101843598

6 Conclusion

我们提出了一种方法,通过找到正确的连接,在不影响准确性的情况下提高神经网络的能量效率和存储。我们的方法部分是基于哺乳动物大脑中学习的方式,通过学习哪些连接是重要的,剪除不重要的连接,然后重新训练剩余的稀疏网络来操作。我们重点介绍了我们在ImageNet上的AlexNet和VGGNet上的实验,结果表明,完全连接层和卷积层都可以剪枝,在不损失准确性的情况下将连接数减少9×到13×个。这使得实时图像处理的内存容量和带宽需求更小,更容易部署在移动系统上。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值