Advertisement

Pruning Filters For Efficient ConvNets阅读笔记

阅读量:

问题的提出

现在,在多个应用领域中(包括但不限于物体分类、目标识别、图像分割以及自然语言处理),神经网络模型均展现出出色的能力。随着深度架构设计逐渐深化(即层数不断增加),模型参数数量显著增加这一现象导致存储模型所需的内存显著增加,并且在推理过程中所消耗的时间与计算资源也随之明显提升。然而,在许多嵌入式设备中(例如移动终端或边缘计算设备),由于其计算资源与存储空间相对有限的同时还需要满足较高的实时响应能力要求(即快速处理任务的需求),因此必须采取措施对已训练好的网络架构进行优化以降低其对系统资源的需求。
具体而言,在不牺牲性能质量的前提下(即允许极小的性能下降范围内),通过减少网络参数的方式来实现资源效率的最大化是一个关键的技术路径。为此开发了一系列算法与技术手段以实现神经网络结构的精简与加速。

在卷积神经网络架构中,默认情况下约90%的计算资源来源于全连接层;然而,在卷积神经网络中,默认情况下约90%的计算负载集中在卷积层。在此之前提出的诸多优化方案大多采取的是对全连接层节点进行系统性剪枝策略,并随后采用权值量化等技术手段降低模型复杂度。这种优化策略能够有效降低模型密度并提升其运行效率;然而单纯的减少模型密度并不能显著提升其运行效率。在此之前提出的诸多优化方案大多采取的是对全连接层节点进行系统性剪枝策略,并随后采用权值量化等技术手段降低模型复杂度。这种优化策略能够有效降低模型密度并提升其运行效率;然而单纯的减少模型密度并不能显著提升其运行效率. 该研究工作的主要贡献在于提出了一种创新性的解决方案——针对卷积神经网络中的卷积层直接实施稀疏化处理而不必经过传统的稠密矩阵转换过程

难点分析

本文主要聚焦于卷积层的剪枝操作,并未触及全连接层。剪枝是一种通过去除冗余神经元或权重来降低模型复杂度的技术,在本研究中主要应用于卷积神经网络(CNN)中的卷积层优化设计中。其基本思路是:通过识别并剔除那些对模型性能影响较小或冗余的卷积核通道,在不影响整体网络表现的前提下减少计算开销和模型参数量。具体而言,在针对第i层进行剪枝操作时(即实施20%的剪枝率),输入特征图的空间维度维持不变(仍为(N,w_i,h_i)),但通道数量将从x_i减少至80%x_i;同时对应的滤波器数量也会相应减少至80%x_{i+1}(其中x_{i+1}为原始滤波器的数量)。这种剪枝操作不仅减少了第i层后的特征图大小(即输出通道数量从x_{i+1}减少至80%x_{i+1}),还会影响后续第(i+1)层滤波器的数量设置关系式:由(x_{i+2},x_{i+1},k,k)变为(x_{i+2},80\%x_{i+1},k,k))。在实际应用中发现:通过合理选择各阶段剪枝比例可以有效平衡模型复杂度与性能之间的关系,并在一定程度上缓解过拟合风险;此外该方法对于不同深度层次上的滤波器数量调节具有一定的普适性与适应性特点

在这里插入图片描述

由表1可知,在对第i层卷积核进行修剪操作时会直接影响本层输出结果的同时也会间接影响到第(i+1)层卷积核的表现而对第(i+2)层及以后各层并不会带来任何影响。通过上界分析后发现这篇论文存在以下三大难点:第一点是如何确定每层卷积核的剪枝率第二点是如何判断第i层卷积核中哪些通道可以去除第三点是各层剪枝操作之间相互关系的影响分析。

解决方案

作者采用整体的训练策略仍是经典的三步骤策略:
1)构建一个神经网络模型,并对其进行完整的训练以获得权重参数;
2)设定一个剪枝率,在预训练模型中去除不重要的卷积核通道;
3)对剪枝后的网络进行二次训练以补偿因修剪而带来的性能损失,并保留预训练所得的权重。

为了确定卷积核各通道的重要性程度,请先计算每个卷积核内各通道权重值的绝对总和(即所谓的l_1范数),然后将这些l_1范数值按照从大到小进行排序。根据作者的观点,在这一排序过程中表现突出且具有较大l_1范数值的那些通道被认为在推理过程中具有更大的影响力作用因而被认定为重要的;而那些具有较小l_1范数值并排位较低的通道则被认为在推理过程中的作用相对较小甚至可以忽略不计因而被归类为不重要的。

在这里插入图片描述

计算s_a为3加6加9加……总计47;
计算s_b为2加3加4加……总计45;
计算s_c则得到31;
按通道重要性排序有c < b < a, 根据这一顺序结合所需修剪比率即可实现对相应通道的剪枝;
同时采用权值平方之和(即l_2"范数)作为衡量标准,在实验中发现这种方法与l_1"范数无明显差异。

如何确定每一层的剪枝率

探讨如何确定各层的修剪比率的研究者们采用了控制变量法

其次,研究者分别实施各卷积 layer的具体修剪方案

在多卷积层中如何进行剪枝

在多层卷积网络中进行修剪有两种策略:
第一种策略是逐层独立修剪,在完成当前层的修剪后会立即执行一次重训练过程;接着进入下一层进行处理直到全部完成这一轮修剪工作。
第二种策略则是将整个网络视为一个整体,在完成全面修剪后才开始执行重训练步骤。
值得注意的是,在移除单个卷积核所连接的通道时会影响后续层的行为特性;因此,在评估各卷积核通道的重要性程度时需要考虑其对后续层的影响因素。
具体而言:第一种独立剪枝方法假设各层之间互不影响;而第二种贪心剪枝方法则认为当前层的操作会对后续层产生影响。

在这里插入图片描述

详细而言,在未进行任何修剪时,i层卷积核尺寸设定为(4×5×3×3),而i+1层卷积核尺寸设定则为(5×3×3×3)。采用l₁范数计算后发现第四通道数值最小(重要性最低),因此选择将其减去(如图中的蓝色部分所示)。由于i层卷积核进行剪枝会对后续处理产生影响,从而导致i+1层输入中的第四个维度因前一层剪枝操作而消失。因此选择将该维度对应的参数进行相应剪枝处理(如图中的红色部分所示)。经过上述调整后,i层卷积核缩减至(4×4×3×3),而i+1层卷积核则缩减至(4×3×3×3)的状态

当前正在对第i加一层进行剪裁操作。当选择独立剪枝方法时,在不考虑前一层剪裁影响的情况下(即未扣除因前一层处理而产生的相关数据),这将导致所有相关通道的计算结果被包含进去。相反,在采用贪心型剪枝算法时,在考虑前一层剪裁效果的前提下(即扣除其处理后的数据),这将排除这些通道的数据参与计算。

论文的优点

本文研究者提出了对卷积核剪枝的一种新方法,在深度学习模型优化方面取得了显著进展。具体而言,在该方法中我们通过l₁范数评估各通道重要性后实施剪枝操作,并确保了网络结构的简化效果的同时也不会影响整体性能表现。实验结果表明,在VGGNet架构上实施该方法后计算负载可降低约30%,而保持了原有的精度水平。

全部评论 (0)

还没有任何评论哟~