【剪枝】——CNN网络剪枝综述Structured Pruning for Deep Convolutional Neural Networks: A survey

论文:Structured Pruning for Deep ConvolutionalNeural Networks: A survey

摘要

深度卷积神经网络(CNN)的卓越性能通常归因于它们更深、更宽的架构,这可能会带来巨大的计算成本。因此,修剪神经网络已经引起了人们的兴趣,因为它有效地降低了存储和计算成本。与导致非结构化模型的权重修剪不同,结构化修剪通过产生对硬件实现友好的模型,提供了实现加速的好处。结构化修剪的特殊要求导致了许多新挑战的发现和创新解决方案的开发。本文调查了深度CNN结构化修剪的最新进展。我们总结并比较了最先进的结构化修剪技术,包括滤波器排名方法、正则化方法、动态执行、神经架构搜索、彩票假说以及修剪应用。

1. 简介

尽管transformer中的自我关注[20]在计算序列表示方面是有效的,但transformer由于缺乏归纳偏差,仍然需要大量的训练数据。相比之下,CNN的结构强制对权重施加两个关键归纳偏差:局部性和权重共享,以提高学习算法的泛化能力并独立于数据。

2. 方法

在这里插入图片描述

2.1 权重

权重依赖标准根据滤波器的权重来评估滤波器的重要性。与基于激活的方法相比,权重依赖方法不涉及输入数据。因此,权重依赖方法被认为是简单明了的,并且需要较低的计算成本。权重依赖标准有两个子类别:滤波器范数和滤波器相关性

2.1.1 滤波器范数
结构化修剪计算滤波器范数值作为度量。滤波器的`p-范数可以写为:
在这里插入图片描述
2.1.2 滤波器相关性
通过几何中值的滤波器修剪(FPGM)[51]揭示了“小范数-不太重要”的假设并不总是正确的,这基于神经网络的实际分布。它不是修剪掉不重要的滤波器,而是通过利用同一层中滤波器之间的关系来查找冗余滤波器

结构冗余减少(SRR)[55]通过寻找最冗余层来利用结构冗余,而不是所有层中最低排名的过滤器。

2.2 激活值

激活图是输入数据和滤波器(公式1)的卷积结果。除了使用滤波器的权重,激活图也可以用于滤波器修剪。激活通道修剪是滤波器修剪的另一个名称,因为删除激活图的通道相当于删除滤波器。除了当前层的影响外,滤波器修剪还通过特征图影响下一层的滤波器。
1)当前层 - 通道重要性可以通过使用重建误差[58]、激活图分解[59]、通道独立性利用[61]和后激活[62],[63]来评估;
2)相邻层 - 冗余通道可以通过利用当前层和下一层之间的依赖关系有效地识别[66],[67]。此外,前一层的激活图也可以用来指导修剪决策[123],[124];
3)所有层 - 删除过滤器的整体效果可以通过最小化最终响应层[69]的构造误差并考虑所有层[70]的判别能力来评估。

2.2.3 所有层
尽管现有方法取得了成功,但神经元重要性评分传播(NISP)[69]的支持者认为,大多数方法并未考虑重建误差的传播。NISP提出使用最终响应层(FRL)来确定神经元的重要性,因为来自所有先前层的重建误差最终都会传播到FRL。最初,FRL的重要性得分可以由任何特征排名技术确定,例如Inf-FS [226]。然后,神经元的重要性被向后传播。最后,层中重要性得分低的神经元被修剪。被修剪的神经元将不再向前一层反向传播得分。

歧视感知通道修剪(DCP)[70]旨在保留在缺失时会显著改变最终损失的歧视性通道。然而,修剪浅层通常会由于传播路径较长而触发较小的最终损失减少。为了解决这个问题,Zhuang等人在每个中间层的最后一层引入了歧视感知损失。然后使用贪心算法根据歧视感知损失和基线网络与修剪网络之间的重建损失来选择通道。

2.3 正则化

正则化可以通过添加不同的稀疏正则化器Rs(·)来学习结构化稀疏网络。如果网络包含批量归一化层,则稀疏正则化器可以应用于BN参数。为了实现结构化稀疏性,BN参数用于指示诸如通道或滤波器之类的结构的修剪决策。

引入了作为可学习门的额外参数来指导修剪。有了这些额外的参数,网络不再需要批量归一化层。稀疏正则化器也可以直接应用于滤波器。群套索正则化通常用于以结构化方式稀疏化滤波器。

2.3.1 bn正则化
Network Slimming(NS)[73]直接使用BN中的缩放参数γ来控制输出通道。然后引入通道级稀疏诱导的1正则化,以与γ一起联合训练权重。训练后,接近零的γ对应的通道被修剪。为了优化非光滑的1惩罚项,使用了次梯度下降[228]。

与NS [73]的情况类似,门控批量归一化(GBN)[74]使用γ作为通道级门,并使用γ的`1范数作为正则化项。提出了一个Tick-Tock修剪框架,通过迭代修剪来提高准确性。Tick阶段使用少量数据训练网络,在训练一个时期期间,只允许更新门和最终线性层。同时,通过一阶泰勒展开计算全局滤波器排名的通道重要性。然后,Tock阶段使用稀疏性约束对稀疏网络进行微调。

EagleEye [78]提出了一个三阶段的流程。首先,通过简单的随机抽样生成修剪策略(即,逐层修剪比率)。其次,根据修剪策略和滤波器的`1范数生成子网络。第三,使用基于自适应BN的候选评估模块来评估子网络的性能。李等人认为,过时的BN统计数据对子网络评估不公平,每个候选人的BN统计数据都应在训练数据集的一小部分上重新计算[78]。在使用自适应BN统计数据评估子网络后,选择性能最佳的一个作为最终修剪模型。

2.3.2 额外的参数

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码修剪卷积神经网络用于资源高效推理,是一种优化模型的方法,旨在减小模型的尺寸和计算量,从而实现在资源受限的设备上进行高效推理。 修剪是指通过删除模型中的一些参数或神经元来减小模型的复杂性。在卷积神经网络中,修剪通常包括删除一些卷积核或通道,以及减少连接权重的数量。这可以通过一些算法和技术来实现,例如剪枝算法、稀疏矩阵和低秩近似等。 修剪卷积神经网络可以带来多个好处。首先,它可以大大减小模型的尺寸,从而降低了存储模型所需的内存空间。其次,修剪可以减少模型的计算量,使得模型可以更快地进行推理。这对移动设备和嵌入式系统等资源受限的设备非常重要。此外,修剪还可以提高模型的泛化能力,减少过拟合的风险。 对于修剪卷积神经网络的代码实现,一般分为两个步骤。首先,需要训练一个初始的卷积神经网络模型。然后,通过一些修剪算法选择要修剪的参数或神经元,并将其从模型中移除。修剪的目标可以是按照权重大小或梯度大小进行选择。 在实际编程中,代码可以使用一些深度学习框架(如PyTorch或TensorFlow)来实现。这些框架通常提供了一些修剪工具和函数,以便进行参数和神经元的修剪。开发者需要根据具体的应用场景和需求来选择合适的修剪策略,并根据框架的API来实现修剪过程。 总之,代码修剪卷积神经网络是一种资源高效推理的方法,通过减小模型的尺寸和计算量,提高模型的效率和性能。这对于在资源受限的设备上进行深度学习推理任务非常有意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值