机器学习与智能网络优化_无

更新时间: 试题数量: 购买人数: 提供作者:

有效期: 个月

章节介绍: 共有个章节

收藏
搜索
题库预览
神经网络剪枝算法是一种有约束的优化问题,但是求解较为困难。根据求解方式的不同,剪枝算法可以分为基于权重大小的通道裁剪方法、基于BN缩放因子的稀疏正则化的剪枝方法、非结构化剪枝基本方法等。 (1)基于权重大小的通道裁剪方法 基于权重大小的通道裁剪是一种结构化剪枝方法,基于权重大小的通道裁剪方法如图7-17所示,主要应用于卷积神经网络。这种剪枝方法通过评估每个卷积层中各个通道的重要性,并根据权重大小来决定哪些通道可以被裁剪掉。以下是对基于权重大小的通道裁剪的详细叙述:通常是寻找一种有效的评判手段,来判断参数的重要性,对不重要的连接参数或者滤波器进行裁剪来减少模型的冗余。对于一个滤波器,对其中所有权重的绝对值求和,作为该滤波器的评价指标。将一层中值低的滤波器裁掉,可以有效地降低模型的复杂度且不会给模型的性能带来很大的损失。剪枝一个过滤器会导致其对应的特征图和下一层的相关内核被移除。 基于权重的范数剪掉卷积核,计算卷积核的绝对值和并进行排序,剪掉绝对值和最小的卷积核和对应的特征图。$$X_i$$、$$X_{i+1}$$和$$X_{i+2}$$都是特征图。核矩阵共有$$n_i×n_{i+1}$$个元素,每个元素是一个卷积核,$$X$$通道数是$$n_i$$,$$X_{i+1}$$通道数是$$n_{i+1}$$。 之前的工作是逐层剪枝,然后重复训练来恢复精度。然而,理解如何能一次性对多层进行剪枝是非常有必要的。对于深度网络,逐层剪枝再训练太耗时;整体剪枝的方法为网络稳健性提供全面视野,从而产生一个更小的网络;对于复杂的网络,一种整体方法很有必要,例如对于ResNet,对恒等映射特征图或者每个残差模块的第二个剪枝会导致额外外层的修剪。为了对多层同时剪枝,我们考虑了两个策略:每一层独立剪枝,即在计算(求权重绝对值之和)时不考虑上一层的修剪情况,所以计算时图7-18中的黑色方块仍然参与计算;贪心策略,计算时不计算已经修剪过的,即黑色方块不参与计算。 同时裁剪多个卷积核与通道如图7-18所示。 对于ResNet等网络,重叠部分分别考虑即可。对于CNN,例如VGGNet和AlexNet,我们可以简单地对任意卷积层剪枝,但是对于ResNet这样的复杂网络是不可行的。ResNet的结构对剪枝提出了限制条件,残差块中的第一个卷积层可以随意修剪,因为它不会改变残差块输出特征图的数目,然而第二个卷积层和特征映射的剪枝很困难。因此,为了对残差模块的第二个卷积层进行剪枝,相关的投影特征图必须也要剪掉,由于恒等特征映射比添加的残差特征映射重要,对第二个层的剪枝应该由shortcut层的剪枝结果决定。为了决定哪些恒等特征映射图被剪掉,我们对shortcut层(1×1卷积核)采用相同的选择标准,即残差模块中第二层修剪的滤波器索引与shortcut层所选择的滤波器索引相同。裁剪残差模块的通道对应裁剪相同序号的恒等映射模块通道,裁剪残差模块的通道如图7-19所示。 在裁剪时要考虑每一层对裁剪的敏感度,通过单独裁剪每一层来看裁剪后的准确率。对于裁剪较敏感的层,使用更小的裁剪力度,或者跳过这些层不进行裁剪。目前这种方法是实现起来较为简单且有效的,它的思路非常简单,即参数越小则越不重要。 针对CIFAR-10数据集上的VGG-16模型,图7-20展示了基于权重大小的通道剪枝实验结果。在图7-20(a)中,权重较大的过滤器分布在低索引,权重较小的过滤器分布在高索引。不同卷积层的权重分布差异明显,部分层(例如conv1)存在较多权重较大的过滤器。在图7-20(b)中,随着剪枝比例上升,准确率逐渐降低。有的层(例如conv1、conv2)对剪枝敏感,准确率降低较快。有的层(例如conv13)在较高剪枝比例下仍能保持相对稳定的准确率。与图7-20(b)相比,图7-20(c)中的模型在剪枝后进行20轮重复训练,准确率显著提升。即使剪枝比例达到80%或更高,多数卷积层仍能维持较高的准确率(接近原始水平),表明重新训练有助于缓解剪枝带来的性能损失。 (2)基于BN缩放因子的稀疏正则化的剪枝方法 对基于BN缩放因子的稀疏性进行通道裁剪是一种有效的结构化剪枝方法。这种方法利用BN层的缩放因子来评估每个通道的重要性,并根据缩放因子的稀疏性来决定哪些通道可以被裁剪掉。以下是基于BN缩放因子的稀疏性的详细叙述。在训练期间,通过对网络BN层的缩放因子系数施加L1正则约束,使模型朝着结构性稀疏的方向调整参数。此时BN层的缩放因子系数所起的作用类似于信息流通道的开关系数,控制着信息流通道的开关闭合。完成稀疏训练或者正则化之后,便可以按照既定的压缩比(或剪枝率)裁剪模型,生成低存储占用的精简模型,并提升一定的加速比。该方法与其他模型压缩方法(量化、低秩分解)结合使用,可以进一步提高压缩比;该方法与其他优化加速方法(TensorRT等)结合使用,可以提升推理速度;若推理精度损失过大,也可以与蒸馏结合使用,有效恢复损失的精度。 剪枝过程如图7-21所示。剪枝过程涉及初始网络到紧凑网络,属于典型的迭代式过程(包含稀疏训练、微调)。在通道层实施的规整剪枝操作,能够沿输出通道维度裁剪当前层的3D滤波器,并沿输入通道维度裁剪下一层的2D卷积核。最终所生成的精简模型能够直接运行在成熟框架(PyTorch、MXNet或TensorFlow等)或硬件平台上(GPU、FPGA等),不需要特殊算法库的支持。另外,在正则化期间,BN层缩放因子系数的分布经自动调整、稀疏化之后,有助于网络结构的优化探索,即网络剪枝属于自动剪枝策略。 我们将卷积层的每个通道都关联一个缩放因子(来自批归一化层)。在训练过程中对这些缩放施加稀疏性约束,以自动识别不重要的通道(图7-21左半部分),具有较小缩放因子值的通道(如$$C_2$$和$$C_{n}$$)将被剪。剪枝后,我们得到了紧凑的模型(图7-21右半部分),这些模型经过微调后可以达到与正常训练的完整网络相当甚至更高的精度。 还可以将所提出的方法从单遍学习方案(稀疏正则化、剪枝缩放因子较小的通道和微调剪枝后的网络)扩展到多遍学习方案。具体地说,剪枝过程会产生一个狭窄的网络,在这个网络上,可以再次应用整个训练过程来学习一个更紧凑的模型。网络瘦身过程如图7-22所示。实验结果表明,这种多通道方案在压缩率方面可以获得更好的结果。 网络剪枝的总损失优化目标设计如下: $$L=\sum_{(x,y)} l(f(x,W),y)+\lambda \sum_{\gamma \in \Gamma} g(\gamma) \tag{7.11}$$ 式中:$$(x,y)$$表示训练输入和目标,$$W$$表示可训练权重,$$\sum_{(x,y)} l(f(x,W),y)$$对应CNN的正常训练损失,$$g(\gamma)$$是对比例因子的稀疏诱导惩罚,$$\lambda$$平衡这两项。惩罚项选择L1范数即$$g(s)=|s|$$来实现稀疏性,采用次梯度下降法作为非光滑L1罚项的优化方法。另一种选择是将L1惩罚替换为平滑L1惩罚,以避免在非平滑点使用次梯度。 在总损失中,除了基本的损失之外,引入了BN层缩放因子系数的L1正则约束项,目的是诱导BN层的稀疏化。其中L1约束函数$$g(·)$$仅施加于BN层的缩放因子系数,因此在反向传播更新梯度时,缩放因子系数的导数需要加上缩放因子系数符号与惩罚系数的乘积项。 批量归一化已被大多数CNN作为标准方法采用,以实现快速收敛和更好的泛化性能。BN使用激活正常化的方式激励我们设计一种简单有效的方法来合并通道级比例因子。BN层使用小批量统计数据,让$$z_{in}$$和$$z_{out}$$作为BN层的输入和输出。$$\beta$$表示当前的小批量,BN层执行以下转换: $$z=\frac{z_{\text {in }}-\mu_{\mathrm{B}}}{\sqrt{\sigma_{\mathrm{B}}^{2}+\varepsilon}} ; z_{\text {out }}=\gamma z+\beta \tag{7.12}$$ 式中:$$\mu_{\mathrm{B}}$$和$$\sigma_{\mathrm{B}}$$是BN层上输入激活的平均值和标准偏差值,$$\gamma$$和$$\beta$$是可训练的仿射变换参数(比例和移位),它提供了将归一化激活线性变换回任何比例的可能性。 通常的做法是在卷积层之后插入一个BN层,并使用通道缩放移位参数。因此,我们可以直接利用BN层中的$$\gamma$$参数作为网络剪枝所需的比例因子,它最大的优点是不会给网络带来开销。事实上,这可能也是我们学习通道修剪的有意义的缩放因子的最有效方法。①如果在没有BN层的CNN中添加缩放层,则缩放因子的值对于评估通道的重要性没有意义,因为卷积层和缩放层都是线性变换。通过减小比例因子值,同时放大卷积层中的权重,可以获得相同的结果。②如果在BN层之前插入缩放层,则BN中的归一化过程将完全取消缩放层的缩放效果。③如果在BN层之后插入缩放层,则每个通道都有两个连续的缩放因子。 基于BN缩放因子的稀疏正则化的剪枝方法是在CIFAR-10和CIFAR-100数据集上进行的,3种经典神经网络模型(VGGNet、DenseNet和ResNet)剪枝前后的参数对比如图7-23所示。整体来看,加速和压缩的效果比较明显。【缺少答案,请补充】(含图)(含图)(含图)(含图)(含图)(含图)
1 2