【论文翻译】边缘应用中加速卷积神经网络的剪枝算法综述

news2024/11/23 1:09:29

摘要

随着卷积神经网络(CNN)模型大小的增加,模型压缩和加速技术对于在边缘设备上部署这些模型变得至关重要。在本文中,我们对修剪进行了全面的调查,这是一种主要的压缩策略,可以从CNN模型中删除非关键或冗余的神经元。调查涵盖了修剪的总体动机、不同的策略和标准、它们的优点和缺点,以及主要修剪技术的汇编。我们在结束调查时讨论了修剪的替代方案以及模型压缩社区当前面临的挑战。

1.介绍

深度学习已经成为许多机器学习(ML)问题的事实方法,例如计算机视觉、自然语言处理和机器人。在许多这样的挑战中,CNN的架构和模型已经超过了人类的表现。这些进步是各种研究方向创新的结果,包括网络架构、优化方法和软件框架。然而,这些突破是以不断增加的模型大小和计算负荷为代价的。因此,当CNN模型在实际应用中时,尤其是在边缘应用中,模型压缩成为一个重要的课题。

        在ML部署场景中,轻量级压缩模型具有许多优点。在服务器端,较小的模型减少了数据中心内的带宽使用和功耗,从而节省了运营成本。此外,在客户端(嵌入式或边缘设备)部署这些CNN模型具有隐私、低延迟和更好的定制等伴随优势[22]。然而,在这种情况下,它们面临着更为有限的资源需求,需要仔细调整以获得最佳性能。因此,近年来随着剪枝、量化和低秩分解等技术的进步,模型压缩引起了更多的研究兴趣。

        由于神经网络通常过度参数化,因此修剪非关键或冗余神经元是在运行时减少模型大小和浮点运算(FLOP)的合理选择[2]。直接搜索要修剪的神经元的最佳组合是一个NP难题,对于具有数百万参数的CNN来说通常不可行[8]。此外,具有高稀疏性的修剪网络可能不会带来实际好处。因此,一个成功的剪枝算法需要在减少模型大小、提高推理速度和保持准确性的同时保持高效。

        在本文中,我们对CNN模型修剪的算法方面进行了全面的调查,重点是边缘部署。我们确定了发展趋势,并指出了当前的重点领域。更重要的是,我们确定了这些方法的缺点和挑战,并让用户更好地了解权衡和进一步研究的途径。

2.剪枝的方法论

剪枝问题的公式如下:给定一个带有N个样本的标记数据集,(xi,yi),i∈1 ... N、 找到最佳的轻量级CNN模型,该模型采用输入x_i并预测其标签t_i=f(w,x_i),其中w表示模型参数。对于卷积层,权重W_{c',c,i,j}是4D内核,用于通过i,j方向上的空间卷积将c个输入通道转换为c0个输出通道。预测性能被定义为精度\sum _{i=1}^{N} \mathbb{I}_{y_i=t_i},并且未修剪的模型最小化损失函数(对于精度)\sum _{i=1}^{N} L({y_i=t_i}),用作基线模型。

        边缘的硬件限制在于处理器架构和速度、内存、功耗/能耗和推断延迟。在实践中,通常使用用于理论和计算效率的分析代理,例如FLOP或参数数量。在本文中,我们在必要时区分实际代理结果和分析代理结果。

        目前的修剪研究分为两个部分:确定最有希望被修剪的神经元;以及训练和微调修剪模型以恢复基础模型的预测性能。成功的修剪算法是这些组件的迭代过程,如算法1[26]所示,现有技术的改进来自于这些方面中的一个或两个方面的进步。因此,为了清楚起见,我们将现有算法分为这两类。我们在表2中报告了它们的压缩性能。

 2.1修剪标准

开发了不同的启发式标准,以识别在不损害预测性能的情况下要修剪的有前景的结构。我们将这些标准分为两类:数据不可知和数据驱动,其中数据不可知技术计算显著性标准而不直接使用训练数据。早期的工作[10,26]依赖于二阶Hessian矩阵,H_{ij}=\frac{\partial^2 L }{\partial w_i \partial w_j},以确定要移除的权重,而不损害模型的可预测性。然而,这些方法还需要对权重的二阶导数进行密集计算(以及矩阵求逆[10])。

        为了减轻训练负担,[40]建议通过其值相似性合并权重。他们在完全连接的层上展示了他们的成功,这可能会主导模型的大小。

        与一次修剪不重要的权重[26]相反,[9]使用简单的权重值作为显著性来迭代修剪它们。在每个修剪迭代中,L2范数低于给定阈值的权重在随后的训练和推理阶段被定位和掩蔽。尽管迭代过程简单,但它有助于修剪模型恢复和保持其准确性,并已广泛用于修剪方法。

        上述修剪方法可以显著减少模型大小和计算量,但减少FLOP与推理加速没有直接联系,特别是对于深度CNN,因为权重被稀疏矩阵取代[25]。为了缓解这些问题,需要修剪结构组件。[25]建议在应用L1范数惩罚之前对输出通道上的权重进行分组。这种结构化修剪导致了更小和更精确的模型。[44]将上述基于通道的方法扩展到其他结构级别,即滤波器数量、滤波器形状和层宽度,以规范模型大小。[27]没有对权重的L2范数进行分组,而是直接将滤波器的L1范数作为修剪卷积层的标准。[53]使用批次归一化层的缩放因子作为显著性度量。[13] 提出了修剪接近几何中值的滤波器,这可以由其他滤波器表示。

        除了仅使用模型权重之外,另一类方法是将训练数据直接用于显著性度量,我们称之为数据感知修剪。[17] 分析了神经元的平均零百分比(APoZ)作为权重重要性的标准。[15] 提出了通过在通道修剪策略中最小化输入数据的重建误差来在通道级修剪模型。[34]提出使用激活熵来识别要移除的通道。[51]提出了一种神经元重要性分数修剪(NISP),以最小化“最终响应层”中的重建误差。

        还调查了其他更复杂的措施。[37]重新访问了损失函数的导数,该导数使用一阶导数和基于特征图中的分组激活(表1中的zi)修剪的网络结构来近似丢弃特征的成本。[7] 建议在训练期间使用梯度的大小来修剪模型。

        我们在表1中总结了这些标准。受计算能力的限制,早期的工作通常侧重于使用数据不可知的方法来对预定义的显著性进行修剪权重。然而,这些方法需要预定义的阈值来修剪神经元,这使得很难控制最终的压缩比。最近的工作已经转向使用推理过程中的模式(例如APoZ)来压缩模型,同时保持模型的准确性。此外,导致稀疏权重矩阵的非结构化修剪方法已逐渐被提供更现实性能增益的结构化修剪方法所过时(稍后在第3.4节中讨论)。

2.2 剪枝流程

 图1:(a)动态网络剪裁[8]和(b)标准修剪程序算法1的pipeline。来自:[8]。

        利用上述显著性度量,早期研究采用了模型权重的直接阈值,并在随后的迭代中掩盖了它们。然而,这种修剪方法通常会降低模型预测性能,并需要在进一步修剪之前进行重新训练以恢复模型预测精度(如图1(b)所示)。迭代过程(训练、修剪和再训练)对于成功的修剪策略很重要[27]。下面,我们将讨论改进此修剪过程的研究。

        选择预定义的阈值具有三个主要缺点:1)阈值不直接与稀疏性相关;2) 不同的层具有不同的灵敏度;3) 一次性阈值可能切断太多信息以恢复原始精度。[55]分析了逐渐增加的阈值调度,以自动将网络权重修剪到最终目标稀疏度。另一种解决为每个层选择最佳阈值的挑战的方法[42]采用贝叶斯优化,以高斯过程自动调整值。[3] 提出了通过向L2范数引入负因子的自动平衡滤波器修剪。通过使用正因子和负因子来正则化滤波器权重,它可以自动选择重要的滤波器,同时抑制不太有用的滤波器。

        [8]提出了一种拼接(splicing)函数来掩盖权重,而不是用步进(step)函数进行修剪。在权重值没有极端变化的情况下,修剪过程可以与再训练过程融合,并在训练压缩模型时显著加快速度,如图1(a)所示。此外,如果修剪结构对模型架构至关重要,则软掩模有助于恢复修剪结构。反向传播重写为:

        超参数a和b控制阈值的强度,如果a=b,则对应于典型的二进制掩码。T的一个简单选择是直接使用w。与通过显著性进行修剪不同,这种方法可以被视为使用辅助掩蔽变量。[12] 将这一想法扩展到删减过滤器,并在广泛的实验中证明了更实际的成功。[30]在频域中应用了类似的方法来压缩CNN模型。

        确定要丢弃的权重可以被视为优化权重上具有L0范数的目标函数。从这个角度出发,[33]通过将T表示为遵循伯努利分布的概率门,导出了一个等价表达式。[28]提出了迭代训练模型并学习二进制门来修剪滤波器,这导致了精度略有下降的压缩模型。[31]扩展了要与滤波器的模型变量一起学习的辅助掩蔽变量,其中辅助变量缩放滤波器并由L1范数正则化。[50]提出了一种类似的方法,但采用了一种新颖的库存更新计划。[46]将掩蔽变量视为信道重要性的缩放,并根据其对损失的影响修剪不重要的滤波器。这些方法依赖于辅助层来学习掩蔽以有效地减小模型大小。

        前面提到的许多基于L1/2范数的惩罚是L0范数问题的近似,但它们可能导致不稳定和次优解。一些研究致力于新的优化方法来解决这个问题。[54]将此问题转化为另一个问题,并通过使用前向后向分裂算法来优化L2,1-型来解决。与其他惩罚形式相比,该方法提供了对原始优化问题的更好近似。[20] 采用加速近端梯度(APG)方法来解决与[8]相似的缩放因子问题,但在不同的结构水平上。[28]通过基于交替方向乘子法(ADMM)的优化学习了门控掩码。

        随着强化学习(RL)研究的进展,有许多研究将RL应用于模型修剪。[19] 为CNN模型的每一层构建了一个单独的梯度策略学习器,以修剪过滤器,获得结合准确性和效率项的总体回报。[14] 采用深度确定性策略梯度来持续控制压缩比,以实现准确度和资源消耗的平衡目标。[5] 采用神经架构搜索(NAS)通过探索网络的宽度和深度来平衡模型性能。

        总之,修剪程序的创新可分为以下三个改进方向:1)高效迭代程序;2) 代表性掩蔽法;3) 在训练的同时进行健壮的学习以修剪网络。

3.讨论

3.1比较

表2提供了模型压缩算法的汇总。我们收集了两个数据集的结果,CIFAR-10和ImageNet[23,38]。前者是一个小数据集,我们预计会比基线有显著改善。我们仅报告了VGG或ResNet模型的结果[11,39]。ImageNet数据集具有挑战性,但更现实,因此,我们包括了其他流行的CNN模型,即AlexNet和MobileNet[16,24]。

我们报告了具有以下三种度量的最佳修剪模型:

•精度降低度量模型退化,作为修剪模型和原始模型之间的精度差异。值越小越好,负值表示修剪模型优于原始模型。

•尺寸减小测量尺寸减小(即参数数量)与原始模型尺寸的比率。

•时间减少衡量时间减少或FLOP比原始模型减少的比率。

总的来说,我们观察到修剪会导致大小和推断时间减少10%到90%。正如通常预期的那样,像ImageNet数据集这样更具挑战性的问题的压缩比CIFAR10数据集更难。出乎意料的是,我们发现大小的减少与推理速度的提高并不线性相关。更深刻的是,我们发现只有很少的研究在物理设备上测试了它们的性能,而FLOP往往无法很好地捕捉到这一点。最后,我们发现,使用数据感知方法进行过滤器修剪的研究有限,这是进一步研究的一个有趣方向。

3.2 其他方法

        模型压缩技术在相互比较时有不同的优点和缺点。低秩分解[2]使用线性代数通过秩分解来减少模型的权重矩阵。这种方法允许在数学上合理地减小模型大小和提高计算速度。然而,训练每个模型都需要一个定制的复杂的实现过程,这是一个挑战。量化[41]是另一种流行的压缩技术,涉及用较低精度表示替换CNN权重矩阵中的高精度浮点。它有一个独特的优势,即在不同的模型中通用,并提供一致的性能改进(取决于实现)。然而,要实现这些增益,需要先天的硬件支持。此外,精度灵敏度可能导致性能恶化。最后,手工制作的较小架构(如MobileNet[16])在边缘场景下的部署也取得了成功,但为不同的边缘设置设计定制架构会导致成本和工作量过大,而且无法扩展。

        另一个有趣的方向是在运行时动态修剪网络。[4] [18]使用了额外的结构来过滤不重要的特征,并减少了推理的运行时间。通过小的辅助连接,[6]增强了重要特征并抑制了不相关的特征,以减少计算并提高推理速度

3.3 结合方法

我们还观察到关于组合不同压缩方法的研究很少。[52]将低秩分解与阈值修剪相结合,成功地将AlexNet和VGG16模型的模型大小压缩了10倍以上,而不损失ImageNet数据集的准确性。

[43]使用最小描述长度原理,通过贝叶斯变分推理相干地实现量化和修剪。然而,关于关节入路有效性的消融研究仍然缺失,系统研究将极有助于指导该领域的从业者。

3.4优点和限制

随着CNN研究的迅速发展,CNN修剪也受到了关注。它提供了以下好处:

模型大小减小:利用CNN模型中携带的冗余信息,修剪的自然结果是输入模型的大小减小,这是在边缘部署模型的重要步骤。

减少推断时间:大多数针对CNN模型的修剪方法提供结构修剪,而不是在单个权重水平上进行修剪。这些算法可以减少部署的实际推理时间。

通用压缩方法:剪枝方法通常与模型无关,只需稍加修改即可应用于任何给定的模型架构。同时,与量化方法相比,删减模型可以部署到当前的硬件环境中,而无需进行大量的工程实现。

        在边缘部署的行业设置中,仍有一些限制因素阻碍了修剪变得实用。

•训练时间长:网络修剪的典型工作流程,即算法1,需要对每个修剪的网络进行迭代模型训练,这会显著增加构建这些模型所需的时间。[8]等方法通过更好的更新模式加快了训练和修剪,但仍然没有一次性解决方案来以最小的成本修剪网络;

•广泛的超参数微调:所有修剪策略都需要一组超参数来精确平衡压缩比和模型精度。早期的方法需要对每一层的权重进行详细分析,而最近的技术用更通用的全局参数代替了这些要求,并依赖于超参数优化技术(例如[29])来加快调整过程;

•小但不快:正如许多后来的研究所认识到的,简单的修剪策略可能会导致更少的权重和FLOP,但它不能保证更快的模型和更少的能耗。建立一个真实的模型来捕获正确的物理资源消耗是在运行时实现实际模型压缩的关键步骤[1,36]。

•基准:近年来,CNN架构经历了快速发展。因此,基于过度参数化的CNN模型(如AlexNet和VGG-16[24,39])的早期修剪结果可能对当前有效的模型无效。最近的研究逐渐集中于轻量级网络,如ResNet和MobileNet[11,16]。然而,为了公平比较,仍然缺少一个普遍接受的基线。

        最后但并非最不重要的是,上述分析中未包括能源效率的提高。理论上,大多数修剪研究减少了计算量。然而,其他因素(如在芯片上和芯片外传输数据)所消耗的能量与用于计算的能量相当,使得这些研究在低功耗设备上部署时的适用性受到限制。为了解决这一差异,[49]在其迭代修剪过程中包括了能耗分析。[48]表明,基于SqueezNet[21]的数量级修剪可以导致更高的能耗。因此,他们建议对每层的能耗进行建模,并根据能耗对层进行修剪,以解决这一问题。[47]进一步通过双线性回归对能耗进行建模,并使用ADMM框架以原始损耗优化能耗。

        共识程序是,采用预先训练的模型,然后迭代地重新训练模型以调整到减少的表示,与从头训练修剪模型相比,可以得到更好的模型[9,15,27]。然而,[32]发现了矛盾的结果,即在给定预算下,迭代训练和修剪的模型不能提供比从头训练的修剪模型更好的性能。这一差异是另一个需要进一步调查的领域。

4.总结

随着神经网络模型越来越大,向边缘/物联网设备的推动越来越明显,需要能够创建更小的高效模型的技术和最佳实践。修剪是一种这样的技术,它允许我们从现有的较大且过度参数化的模型中创建较小的模型。在本文中,我们检查了激励模型压缩的约束和度量,并制定了修剪算法的要求。

        我们根据修剪标准和修剪程序组织了该领域的研究。我们进一步将修剪标准分为数据不可知和数据感知方法。我们希望,这一细分将为未来研究人员开发新算法提供指导,并使他们能够有效地比较以前的工作(除了表2中的全面比较之外)。

        深度学习领域的发展因模型构建和培训工具和框架的开发而加快。除了PocketFlow和Distiller[45,56]等少数示例外,通常缺少用于修剪的通用平台。我们的工作还通过描述修剪过程中的独立组件和过程,为开发通用压缩管道提供了指导。

        最后,我们对其局限性、优势和新的研究方向进行了深入讨论,并对主要修剪技术在标准数据集和模型上的性能进行了比较。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iOS_Memory Leak 内存泄露治理

1、内存分类 官方文档介绍 app 的内存分三类: Leaked memory:Memory unreferenced by your application that cannot be used again or freed (also detectable by using the Leaks instrument) Abandoned memory:Memory still referenced b…

设计模式 - 结构型模式_桥接模式

文章目录结构型模式概述CaseBad ImplBetter Impl小结结构型模式 结构型模式主要是解决如何将对象和类组装成较大的结构, 并同时保持结构的灵活和⾼效。 结构型模式包括:适配器、桥接、组合、装饰器、外观、享元、代理,这7类 概述 桥接模式的…

2023牛客寒假算法基础集训营4

A-清楚姐姐学信息论 链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 不同进制对于信息的表示效率不同,清楚姐姐最近学习了信息论中使用不同进制表示信息的方法,她现在想要比较两种不同进制表示信息时,谁的…

从软件角度看PCIe设备的硬件结构

从软件角度看PCIe设备的硬件结构 文章目录从软件角度看PCIe设备的硬件结构参考资料:一、 PCIe接口引脚二、 从软件角度理解硬件接口2.1 PCI/PCIe地址空间转换2.2 PCIe上怎么传输地址、数据三、 PCIe系统的硬件框图致谢参考资料: 《PCI Express Technolo…

ElasticSearch概念与架构原理

文章目录一、概述二、ElasticSearch架构原理三、ElasticSearch搜索入门一、概述 ElasticSearch简介 简介 ES是建立在Lucene基础之上的分布式准实时搜索引擎,它所提供的诸多功能中有一大优点,就是实时性好。比如:在业务需求中,新增…

计算机图形学 第7章 自由曲线曲面

先说好,第八章不学。 目录学习目标曲线与曲面的表示形式插值与逼近Bezier曲线定义一次Bezier曲线二次Bezier曲线⭐⭐⭐三次Bezier曲线⭐⭐⭐三次Bezier曲线的Bernstein基函数:Bernstein基函数的性质Bezier曲线的性质de Casteljau算法几何作图法绘制Bezie…

Struts2之拦截器

Struts2之拦截器1、Struts2体系架构1.1、执行流程1.2、核心接口和类1.3、流程简图2、Struts2拦截器2.1、使用拦截器的目的2.2、拦截器的简介2.3、拦截器的工作原理2.4、拦截器的使用2.4.1、创建自定义拦截器2.4.2、struts.xml中定义和配置拦截器2.4.3、Struts2默认拦截器2.4.4、…

Leetcode.2319 判断矩阵是否是一个 X 矩阵

题目链接 Leetcode.2319 判断矩阵是否是一个 X 矩阵 Rating : 1201 题目描述 如果一个正方形矩阵满足下述 全部 条件,则称之为一个 X矩阵 : 矩阵对角线上的所有元素都 不是 0 矩阵中所有其他元素都是 0 给你一个大小为 n x n的二维整数数组 grid&#…

ElasticSearch - 旅游酒店案例es功能实现

目录 案例 搜索与分页功能 条件过滤功能 附近的酒店功能 广告置顶功能 HotelService(es操作)总览 案例 搜索与分页功能 案例需求:实现旅游的酒店搜索功能,完成关键字搜索和分页实现步骤如下:1.定义实体类,接收前端请求实体…

微信小程序用vant自定义tabbar页面并跳转相应页面

0.前置安装 步骤一 安装 vant 组件库 npm i vant/weapp -S --production下载完后要npm构建才能使用 步骤二 修改 app.json 将 app.json 中的 "style": "v2" 去除,小程序的新版基础组件强行加上了许多样式,难以覆盖,不…

分布式定时任务框架选型

目录 1. 前言 2. 定时任务框架 3. 分布式任务调度系统对比 4. 和quartz框架对比 5. 综合对比 6. 总结和结论 7. 附定时任务的其他方案 1. 前言 我们先思考下面几个业务场景的解决方案: 支付系统每天凌晨1点跑批,进行一天清算,每月1号进行上个月清…

【算法】快速排序算法原理及实现

1.什么是快速排序算法 快速排序是对冒泡排序的一种改良版,通过一趟排序,把要排序的序列分割成两个部分,一部分的所有数据要比另一部分的数据都小,然后再根据这两部分的数据来进行快速排序。以此来达到整一个数据都变成了有序序列…

AI算法创新赛-人车目标检测竞赛总结01

AI0000020摘要:人车目标检测竞赛主要考察目标检测算法与 TPU 部署推理,主要考察算法选型与调 优,面向算能 TPU 迁移部署与推理加速两项能力;主要考核目标是算法效果(mAP)与推 理性能(单张图片推理时间)。针对这些要求,笔者从算法选型&#xf…

【实际开发11】- 统计 / 科学计算 - 1

目录 1. sql 统计返回值为 null 时 , 赋值 为 : 0 ( return UI ) 1. 手动 null 判断 , 进行 “0” 赋值 2. XxxxVO 展示对象 , 初始化时 , 赋值默认值 ( 待优化 ) 2. 统计异常 1. 注意中间表数据的维护 ( 同步删除 / 避免手动删数据 ) 3. 精度损失 1. Java 类型 float、…

.NET(C#、VB)APP开发——Smobiler平台控件介绍:LiveStream和LiveStreamPlayer

本文简述如何在Smobiler中使用LiveStream和LiveStreamPlayer。 LiveStream 直播推送插件 Step 1. 新建一个SmobilerForm窗体,并在窗体中加入LiveStream和Button,布局如下 选中LisvStream,在设计器中设置Url(需要事先准备一个视频…

【面试原型链】前端面试那些事(1)之原型链详解

【写在前面】辞旧迎新的春季佳节,在这里博主先祝各位看官新的一年赚钱多多,知识满满,年后谈到面试, 好多人在面试的时候就倒在原型链知识点上面,主要原因还是基本功不够扎实,针对以前的知识我也计划在2023年…

C语言小题,通过指向结构体变量的指针变量输出结构体变量中成员的信息。(指针结构体变量的指针)

前言: 此篇是针对 指针结构体变量的指针 方面的练习。 解题思路: 在已有的基础上,本题要解决两个问题: (1)怎样对结构体变量成员赋值; (2)怎样通过指向结构体变量的指针…

天云数据:Hubble数据库系统自主研发率99.62%,是真正的信创数据库

软件是新一代信息技术的灵魂,是数字经济发展的基础,是制造强国、网络强国、数字中国建设的关键支撑。2021年,工信部印发的《“十四五”软件和信息技术服务业发展规划》明确指出,要聚力攻坚基础软件,关键基础软件补短板…

Javascript基础复盘5

内置对象 值属性 这些全局属性返回一个简单值,这些值没有自己的属性和方法。 InfinityNaNundefinedglobalThis函数属性 全局函数可以直接调用,不需要在调用时指定所属对象,执行结束后会将结果直接返回给调用者。 eval()uneval()isFinite()isN…

Q-Learning以及.NET环境下的实现

Q-Learning以及.NET环境下的实现写在前面机器学习Q-Learning环境准备试题准备解题过程写在结尾写在前面 看过我的文章的朋友应该都知道,我之前一直在研究视觉相关的知识,也看了一些卷积神经网络(CNN),深度学习相关的文…