摘要
随着卷积神经网络(CNN)模型大小的增加,模型压缩和加速技术对于在边缘设备上部署这些模型变得至关重要。在本文中,我们对修剪进行了全面的调查,这是一种主要的压缩策略,可以从CNN模型中删除非关键或冗余的神经元。调查涵盖了修剪的总体动机、不同的策略和标准、它们的优点和缺点,以及主要修剪技术的汇编。我们在结束调查时讨论了修剪的替代方案以及模型压缩社区当前面临的挑战。
1.介绍
深度学习已经成为许多机器学习(ML)问题的事实方法,例如计算机视觉、自然语言处理和机器人。在许多这样的挑战中,CNN的架构和模型已经超过了人类的表现。这些进步是各种研究方向创新的结果,包括网络架构、优化方法和软件框架。然而,这些突破是以不断增加的模型大小和计算负荷为代价的。因此,当CNN模型在实际应用中时,尤其是在边缘应用中,模型压缩成为一个重要的课题。
在ML部署场景中,轻量级压缩模型具有许多优点。在服务器端,较小的模型减少了数据中心内的带宽使用和功耗,从而节省了运营成本。此外,在客户端(嵌入式或边缘设备)部署这些CNN模型具有隐私、低延迟和更好的定制等伴随优势[22]。然而,在这种情况下,它们面临着更为有限的资源需求,需要仔细调整以获得最佳性能。因此,近年来随着剪枝、量化和低秩分解等技术的进步,模型压缩引起了更多的研究兴趣。
由于神经网络通常过度参数化,因此修剪非关键或冗余神经元是在运行时减少模型大小和浮点运算(FLOP)的合理选择[2]。直接搜索要修剪的神经元的最佳组合是一个NP难题,对于具有数百万参数的CNN来说通常不可行[8]。此外,具有高稀疏性的修剪网络可能不会带来实际好处。因此,一个成功的剪枝算法需要在减少模型大小、提高推理速度和保持准确性的同时保持高效。
在本文中,我们对CNN模型修剪的算法方面进行了全面的调查,重点是边缘部署。我们确定了发展趋势,并指出了当前的重点领域。更重要的是,我们确定了这些方法的缺点和挑战,并让用户更好地了解权衡和进一步研究的途径。
2.剪枝的方法论
剪枝问题的公式如下:给定一个带有N个样本的标记数据集,(xi,yi),i∈1 ... N、 找到最佳的轻量级CNN模型,该模型采用输入并预测其标签,其中w表示模型参数。对于卷积层,权重是4D内核,用于通过i,j方向上的空间卷积将c个输入通道转换为c0个输出通道。预测性能被定义为精度,并且未修剪的模型最小化损失函数(对于精度),用作基线模型。
边缘的硬件限制在于处理器架构和速度、内存、功耗/能耗和推断延迟。在实践中,通常使用用于理论和计算效率的分析代理,例如FLOP或参数数量。在本文中,我们在必要时区分实际代理结果和分析代理结果。
目前的修剪研究分为两个部分:确定最有希望被修剪的神经元;以及训练和微调修剪模型以恢复基础模型的预测性能。成功的修剪算法是这些组件的迭代过程,如算法1[26]所示,现有技术的改进来自于这些方面中的一个或两个方面的进步。因此,为了清楚起见,我们将现有算法分为这两类。我们在表2中报告了它们的压缩性能。
2.1修剪标准
开发了不同的启发式标准,以识别在不损害预测性能的情况下要修剪的有前景的结构。我们将这些标准分为两类:数据不可知和数据驱动,其中数据不可知技术计算显著性标准而不直接使用训练数据。早期的工作[10,26]依赖于二阶Hessian矩阵,,以确定要移除的权重,而不损害模型的可预测性。然而,这些方法还需要对权重的二阶导数进行密集计算(以及矩阵求逆[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]等少数示例外,通常缺少用于修剪的通用平台。我们的工作还通过描述修剪过程中的独立组件和过程,为开发通用压缩管道提供了指导。
最后,我们对其局限性、优势和新的研究方向进行了深入讨论,并对主要修剪技术在标准数据集和模型上的性能进行了比较。