Advertisement

网络模型剪枝-论文阅读《Pruning Filters For Efficient Convnets》

阅读量:

之前的文章分别探讨了权重剪枝(Weight Pruning)以及神经元剪枝(Neuron Pruning)的相关技术与应用。本文则专注于针对卷积神经网络(CNN)中的卷积核进行剪枝优化的研究与实现。该方法不仅能够有效降低模型复杂度的同时还能显著提升计算效率,在实验结果中表现出了较强的针对性与有效性。如需进一步了解,请参考原文链接

Introduction

论文首先揭示了现有剪枝网络的两个主要缺陷:其一是大部分剪itive操作集中在计算量较小的全连接层(FC层),导致即使进行了pruning处理,在实际运行中也无法显著减少计算时间;其二是部分能够对CNN进行pruning的方法,在实施pruning后仍需依赖额外的稀疏矩阵运算库(如BLAS)或特定硬件支持才能正常运行。

本文着重探讨卷积核剪枝方法。相较于权重剪枝这一替代方案,在处理修剪操作时,卷积核剪枝展现出更为自然的特点。它不产生稀疏连接关系,并因此无需依赖特定的算法框架或硬件配置。

剪枝卷积核和特征图

在叙述剪枝卷积核操作之前,需要回顾一下CNN中卷积是如何操作的。

对于一个具有维度[n_i \times h_i \times w_i]的输入特征xi(其中ni、hi、wi分别代表第i层卷积层中的输入通道数、高度和宽度),单个卷积操作是通过使用尺寸为n_i×k_i×k_i的3D卷积核Fi,j对输入特征xi进行操作以获得一个维度为(1×h_{(}^{(} i+i))×(w_{(}^{(} i+i)) ) 的新通道特征图。正常情况下,在深度学习模型中会采用由n_{(}^{(+)}_{} i + 1)个相同大小n_{}^{(} i)×k_{}^{(} i)×k_{}^{(} i) 的3D 卷积核组成的4D 结构对输入特征求值运算以生成新的输出特征图 x_{}^{(} i+i) ,其空间维度则分别为h_{}^{(+)}_{} i + 1 和 w_{}^{(+)}_{} i + 1

如图所示,

在这里插入图片描述

当其中一个卷积核Fi,j经过剪枝操作后,在卷积操作过程中会伴随着相应特征通道Xi+1,j也被移除。这不仅减少了单个卷积核对应的计算量(即ni k² hi wi),而且因为特征通道Xi+1,j的移除带来的影响会波及到后续处理环节。具体而言,在其后的下一层卷积操作所需计算量也随之下降(即ni+2 k² hi+2 wi+2)。因此,在进行剪枝操作时若从第i层中移除了m个卷积核,则不仅减少了本层以及上一层(即第i-1层)的相关计算开销(即总共降低了m/(n_i)的数量),还提升了整体运算效率。

决定单个卷积层中哪些卷积核被剪枝

本文提出了一种剪枝方法,在对已训练好的模型进行剪枝操作时,在应用范围较小的卷积层(即未影响到性能的关键层)之间实现了权衡,在保证模型性能不受显著损失的前提下实现了较高的剪枝效率。该方法通过分析当前卷积层中每个滤波器单元对其所在位置的重要性,并结合其平均权重大小来确定滤波器单元的重要性排序。具体而言,在F1-norm值较低(即权重较小)的情况下,这些滤波器单元会对特征图产生较弱的影响。

这里之所以用F1-norm而不是F2-norm,是因为这是经过实验测试后的,如下图:

在这里插入图片描述

尽管从图表中可以看出:F_1-norm与F_2-norm之间的差异并不显著;然而,在两者表现接近的情况下但F_1-norm略优于后者;因此,在本文的研究中我们采用了该方法。

对第i层卷积层剪枝m个卷积核的步骤如下:

对于每一个卷积核Fi,j而言,请考虑其F1-norm这一指标来用于度量各子区域间的相似性程度。随后将得到的各个sj值按照大小顺序排列。具体而言,请先对前m个最小s值对应的卷积核及其相关输出特征图执行修剪操作,并同步移除下一层卷积层中对应的滤波器通道。接着构建当前层与前一层之间的新型加权关系矩阵,并将原有权重参数复制至新网络结构中。

与权重剪枝的区别

卷积核剪裁基于F_1-norm的标准来进行操作。这种方法与之前论文中提出的权重剪裁方法具有相似之处但也存在差异。首先,在于权重剪裁方法是基于设置特定权重阈值来进行操作(即低于该阈值的所有权重会被截断),这样一来就需要非常谨慎地选择这些阈值并且难以精确预测最终会截断多少神经元。其次,在于通过应用专门设计的稀疏运算框架才能实现对稀疏化后的模型的有效优化而本研究中的卷积核剪裁技术则避免了这一过程

确定单层卷积层对剪枝的敏感度

为了系统性地评估各层的重要性程度,论文采用了分层剪枝策略,并在验证集上进行了相应的性能测试。实验结果如图b所示。

在这里插入图片描述

图1

为了更好地理解图b的数据意义,在解释图a的基础上展开说明:图a展示了基于VGG网络在cifar-10数据集上对各层卷积操作单元进行sj值排序后的结果分析。具体而言,在该分析中将各层卷积操作单元的数量进行了标准化处理(即归一化至100%),并将对应的sj值按照比例进行展示。通过这种标准化处理能够清晰地观察到各层卷积操作单元在不同sj值范围内的分布特征:那些曲线起始部分较为陡峭的卷积层(如conv1、conv11)表明其具有较小sj值的卷积操作单元数量较多(例如conv1中约60%的操作单元具有sj值低于0.2),而那些曲线起始部分较为平缓的卷积层(如conv2、conv5)则表明其具有较小sj值的操作单元数量相对较少(例如conv5中超过90%的操作单元 sj 值均高于0.6)。

从图b可以看出,在经过剪枝处理后那些在原始状态下性能表现较为突出、即sj值较低且滤波器数量较多的那个区域能够较好地保持原有性能水平;而相比之下,在图b中那些在剪枝时表现得更为敏感的是那些对应于较低频率特性的滤波器群

基于上述分析,在剪枝操作中,必须依据各层对剪枝敏感度的不同来设定具体的修剪比例.然而,在逐层测试时不仅会耗费大量时间而且会导致各层超参数配置的问题.研究发现,在VGG和ResNet网络中具有相同stage特征的不同模型显示出相似程度.因此,在文中共享同一阶段的所有卷积层采用了统一修剪比例的方法

多层卷积层的剪枝

对于连续多层的卷积层剪枝,文中提出了两种策略:

  1. _独立剪枝_技术下,在每一层次进行的减枝操作均与其它层次相互独立。具体而言,在执行F1-norm(绿色)计算时,并未跳过前一层次减去后的移除特征图(蓝色),因此卷积核中黄色区域对应的权重仍然得以保留;
    2._贪心剪枝_算法假设在上一层次已经完成了相应特征图的删除操作。
在这里插入图片描述

尽管贪心剪枝并非完全优化的方案,在大量卷积核被剪枝的情况下,其精度保持在较高水平。

随后文章将介绍关于残差层剪枝的具体方法,在介绍这些剪枝方法之前,请注意以下几点:这些方法主要应用于以下三种ResNet架构:ResNet-34、ResNet-56以及ResNet-110;每个残差块由两个连续的3×3卷积操作组成的基础模块构成;如图所示

在这里插入图片描述

图2

由于残差块中有横向连接(shortcut),所以剪枝比较复杂,如下图:

在剪除第一层卷积A后不会影响残差块输出特征图的情况下,则可以在实际操作中自由地执行剪除操作。然而,在处理第二层卷积B时需要更加谨慎地考虑其输出与横向连接分支P(Xi)之间的关系。具体而言,在对B进行剪除时不仅需要考虑其自身的输出通道还需要综合考虑与其相加的操作伙伴P(Xi+2)以及与之相关的横向连接分支P(Xi)之间的关系才能实现有效的剪除操作。事实上由于横向连接分支通常能够提供更为稳定的信息来源因此在决定哪一层卷积核被截断时往往会优先考虑这一部分信息流的具体情况即先对C中的绿色卷积核执行截断操作随后移除与其相关的P(Xi)分支中的相应通道接着再对Xi+2对应位置上的通道进行同样处理最后根据这些移除后的通道位置来指导对B中的绿色卷积核进行最终截断操作以确保整个网络结构能够维持较高的性能水平

重训练剪枝后的网络

有两种重训练的策略:

  1. 首先对网络的多层卷积层执行一次修剪操作;接着对该网络重新进行一次全连接训练直至恢复原有的性能水平;
  2. 采用迭代修剪策略;即从第一层开始逐步修剪每一层;在每一步修剪完成后立即对该网络进行全面的参数优化以适应当前修剪后的状态;只有当所有各层都被成功修剪完成并恢复性能水平时才停止。

论文实验证明,在处理不敏感的卷积层时,第一种方法能够成功移除大量卷积核,并且在较少轮次的重训练后即可恢复与未剪枝时相当的精度水平;然而,在敏感层的大比例卷积核被移除的情况下,则难以恢复到原有精度水平。尽管如此,在某些情况下第二种方法可能会带来更好的性能表现,并且需要进行更多的轮次重训练才能达到预期效果。

实验

这里实验只展示一些重要的结果。

整体结果如下表:

在这里插入图片描述

就基于cifar ¹⁰数据集上的VGG−¹⁶、ResNet−⁵⁶与ResNet−¹¹₀模型而言,在对这些模型进行参数量分别为约64.₀%、约₁₃.₇%及约₂.₃%的裁剪时(如图所示),能够保持较高的分类精度水平;这是因为冗余的卷积核被成功地进行了裁剪。

当对ResNet进行剪枝操作时

在对ResNet-34模型进行剪枝处理时(针对ImageNet数据集),该策略能够实现7.6%的修剪率同时仅降低了0.67%的准确度。

以上就是本文的全部内容了。

全部评论 (0)

还没有任何评论哟~