Advertisement

网络模型剪枝-论文阅读-《Channel Pruning for Accelerating Very Deep Neural Networks》

阅读量:

与前一篇对卷积核进行剪枝的研究不同,在本文研究中主要聚焦于特征通道的剪枝优化

Introduction

同样地,在上篇文献的基础上展开阐述这一篇论文的核心观点时指出,在执行完神经网络剪枝操作之后,并非需要生成稀疏化的网络架构。这种区别主要体现在研究目标的不同上:上篇文献侧重于通过减少计算复杂度来提升模型效率的研究思路而这一篇则致力于探索如何利用冗余特征通道来进行优化设计。具体而言该论文提出了一种基于LASSO回归的方法来进行冗余特征通道的选择与去除同时结合最小二乘优化技术对剩下的可利用通道进行精细调整以达到整体性能提升的目的

方法

该论文主要从单层卷积层中的剪枝方法进行了详细的阐述,并且接着讨论的是多层次及多分支网络结构中的剪枝问题。

公式
在这里插入图片描述

如图所示为文章提出的基于单层卷积层的通道剪枝算法示意图。该算法的主要目标是在减少特征图B的通道数量的同时尽可能保留输出C的信息。具体而言,在实现这一目标的过程中主要包括两个关键步骤:首先是确定合适的通道组合以确保信息丰富性;其二是通过选择的有效通道对下一层输出进行重建。当从特征图B中移除了某些通道时,在进行A层卷积操作时,被标记为虚线的卷积核也会相应地被移除。同时,在处理B层时也需要删除与这些移除的 channel 相关的所有卷积核权重参数。

文章首先以最简单的卷积示例来说明文章提出的算法:

对于一个大小为[n \times c \times {k}_h \times {k}_w]的卷积核W、[N \times c \times {k}_h \times {k}_w]的输入特征图X和[N \times n]的输出矩阵Y,其中N是batch size、c是输入通道、n是输出通道、kh和kw是卷积核宽高。为了剪枝输入通道c到目标c’(0 \leq c' \leq c)的同时最小化重建误差,目标方程定义为:

在这里插入图片描述

其中||·||_F代表弗罗贝尼乌斯范数(Frobenius norm),X_i表示位于X第i个通道内、具有维度N×k_h×k_w(即n×k_h×k_w)的矩阵(其中i=1,…,c)。对于W来说,在其对应的第j个通道中存在一个大小为n×k_h×k_w的矩阵W_j。向量β用于选择通道并具有长度c;每个元素β_i是一个标量mask(即mask的作用类似于指示器变量),当β_i=0时,则表示该特定位置应被忽略或剪枝处理;此时对应的权重矩阵W_j同样应当被移除以优化模型结构

优化

在(1)式的框架下。求解{l}_0范数最小化的问题属于这一类NP-Hard优化难题。鉴于此,在研究中为了实现这一目标通常会选择将该形式转化为带有{l}_1正则化的版本。

在这里插入图片描述

其中λ被定义为惩罚因子,在引入这一参数后, 当优化上述公式时, β将导致β中更多系数为零(因为L1正则化会使权重向量β变得更为稀疏), 从而实现更高的特征剪枝比率

在这里插入图片描述

以避免平凡解。

优化上述方程是从两方面优化:首先,固定W,优化\beta;然后,固定\beta,优化W。

(i)优化\beta。当W固定的时候,优化问题可以看做为LASSO回归问题:

在这里插入图片描述

其中{Z}_i = {X}_i{W}_i^T(维度为N \times n),当{\beta}_i = 0时会忽略第i个通道。

(ii)调整权重矩阵W。在固定β的情况下,通过选择合适的通道以将重建误差最小化作为目标来优化方程,则该优化过程即为求解最小二乘问题。

在这里插入图片描述

其中,

X' = [\,\mathbf{\beta}_{1} X_{1},\,\mathbf{\beta}_{2} X_{2},\,\ldots,\,\mathbf{\beta}_{i} X_{i},\,\ldots,\,\mathbf{\beta}_{c} X_{c}\,]

其维数为 \left(N\times c{k_hk_w}\right)
而 $$

reshaped后的矩阵 $\mathbf{W'} = [\,

\mathbf{w}_{1},,
\mathbf{w}_{2},,
\ldots,
\mathbf{w}_{i},
\ldots,
\mathbf{w}_{c}\,]
其维数为 \left(n\times c{k_hk_w}\right)
当获得 reshape后的矩阵 \mathbf{W'} 后,
会将它 reshape回原始形状 \mathbf{W}
随后使 \mathbf{\beta}_{i}\mathbf{w}_{i} 按下述方式相应地进行调整:

\mathbf{\beta}_{i} ← \mathbf{\beta}_{i}·\|\|\!\!\!|\!|\!|\!|\!|}{}

交替进行优化步骤(i)和(ii)。初始阶段时将权重参数W初始化为原始训练后的模型参数值,并令λ初始值设为0;此时L1范数约束系数设置为c。随后逐步提高λ的值,在每次调整时依次执行这两个优化步骤直至收敛稳定。当满足条件时即认为达到稳定状态即可得到最终的W值

考虑到两步迭代方式耗时较长,在实际操作中采用该方法后。后通过反复采用(i)的方式逐步使{||\beta||}_0降至c'。随后仅采用(ii)一次即可获得最终结果。

完整的模型剪枝

在完整的模型剪枝过程中,在本文中是按顺序逐层进行的。对于每一层,在其被剪枝后与其对应的未被剪裁过的输出层之间进行重建误差对比分析。

在这里插入图片描述

不同于公式(1),本方法采用的是变量替换的方式进行改进。具体而言,在这一过程中,Y’被用来替代原有的变量Y,其中,Y’代表原始未剪枝模型的输出特征图。因此,其累积误差可在顺序剪枝过程中被有效计算出来

剪枝多分支网络

对于多分支网络如ResNet的剪枝方法如图所示:

在这里插入图片描述

在残差块的第二层单元中可以采用上述方法对其进行裁剪;然而,在第一层单元中该单元共用与shortcut相同的权重参数;而在第三层单元中由于来自shortcut处累加误差这一来源缺乏可调节的参数使得其难以恢复误差因此需要对此处的修剪策略进行相应调整以实现更有效的修剪效果

残差块的最后一层

相较于对输出Y₂进行优化时所采用的方法,在本文中我们采取策略对表达式Y₁ - Y₁' + Y₂进行进一步的改进。其中定义为剪枝后保留的部分Y₁'将与原始表达式中的Y₂相结合以生成新的特征表示。实际上我们对以下两个子表达式均进行了重点优化:具体而言是通过调整Y₁' = f(Y₁)这一过程使得最终能够达到提升整体性能的目的。这表明通过这种方式我们能够显著增强模型在处理复杂特征方面的表现能力。

残差块的第一层

在图中所示的部分中可以看出, 因为第一层神经网络与shortcut连接共享了权重参数, 因此无法对该层神经网络直接执行通道剪枝操作. 本文采用的方法是通过式(1)对输入特征图中的每个位置分别施加通道选择机制以获得精简后的特征图, 然后通过式(2)执行一次全局平均池化并还原空间尺寸的操作; 对于shortcut而言, 则保持其原始输出不变.

实验

VGG结果如下图,可以看出结果较卷积核剪枝好了很多。

在这里插入图片描述

文中还对GPU加速技术进行了对比分析,并显示了相关结果。结果显示,在进行Asym.3D剪枝后虽然其精度略高于通道剪枝方法,然而其加速效果不佳,并可能导致推理速度下降。

在这里插入图片描述

然后证明了该方法在目标检测faster rcnn算法也依然有效:

在这里插入图片描述

研究表明,在2X压缩的情况下,所提出的通道剪枝变种方法具有显著的性能提升。

在这里插入图片描述

以及Xception-50加速:

在这里插入图片描述

本文对这篇论文进行了深入解析,并展示了其剪枝方法的表现良好。研究表明,在ResNet架构中针对Bottleneck层实施剪枝策略具有较高的应用价值。

本文对这篇论文进行了深入解析,并展示了其剪枝方法的表现良好。研究表明,在ResNet架构中针对Bottleneck层实施剪枝策略具有较高的应用价值。

全部评论 (0)

还没有任何评论哟~