深度学习领域的一种剪枝技术是“网络瘦身(Network Slimming)”,这是一种旨在深度卷积神经网络(CNN)中实现通道级稀疏性的简单方案。该技术利用批量归一化中的放缩层来有效识别并修剪网络中不重要的通道。本文将详细介绍通道级稀疏性的优势、面对的挑战以及在应对这些挑战时采用的技术策略。
通道级稀疏性的优势
通道级稀疏性指的是在网络通道上实现稀疏化,与权重级、核级或层级等不同级别的稀疏化相比,通道级稀疏具有自身的优点。这种方法可以间接减少网络的参数和运行时内存占用,并减少计算操作。网络瘦身后的结构类似于未修剪前的网络更瘦的版本,这更便于在传统的CNN平台上进行高效推理。
面临的挑战
在现实实施中,通道级稀疏化需要修剪与某一通道相关的所有输入和输出连接。这使得在预训练模型上直接修剪权重的方法变得无效,它需要在训练目标中加入稀疏化正则化来间接实现。然而,这种方法需要针对所有滤波器权重计算额外正则化项的梯度,这是一项艰巨的任务。
解决策略:放缩因子和稀疏性引导的惩罚
我们的策略是为每个通道引入一个放缩因子(γ),它会乘在通道的输出上。然后联合训练网络权重和这些放缩因子,并在后者上施加稀疏正则化。最终,我们剪掉那些放缩因子较小的通道,并微调修剪后的网络以恢复精度。
批量归一化中的放缩因子
大部分现代的CNN都使用批量归一化(BN)来达成快速收敛和更好的通用性。BN层通常会在每个卷积层之后进行插入,具有按通道放缩/移位的参数。因此,我们可以直接利用BN层中的γ参数作为我们进行网络瘦身所需的放缩因子,这个方法的优势是不会对网络造成额外的负担。
通道剪枝和微调
在通道级稀疏性引导的规则化训练后,我们得到一个许多放缩因子接近零的模型。然后,我们可以通过移除这些接近零的放缩因子对应的所有输入和输出连接及其权重来剪枝通道。通过定义全局阈值剪枝方法,我们可以得到一个更加紧凑的网络,拥有更少的参数和运行时内存以及更少的计算操作。剪枝可能会导致一定的精度损失,但这通常可以通过随后的修剪网络微调过程得到弥补。
多次迭代的训练和微调
修剪并微调后的网络可以达到比原始未修剪网络更高的准确度。我们可以再次应用完整的训练过程来学习一个更加紧凑的模型,实验结果表明,这种多次迭代的方法可以实现更好的压缩率。
处理跨层连接和预激活结构
以上介绍的网络瘦身过程可以直接应用于大多数的平面CNN架构,例如AlexNet和VGGNet。对于具有跨层连接和预激活设计的现代网络,如ResNet和DenseNet,需要进行一些适配。在这些网络中,一层的输出可能会作为多个后续层的输入,在这种情况下,BN层位于卷积层之前。因此,我们需要将稀疏性引入到层的输入端,并且在测试时通过放置一个通道选择层来屏蔽掉不重要的通道,从而达到节省参数和计算资源的目的。
总的来说,“Network Slimming”是一个强大且高效的策略,用于优化深度卷积神经网络结构,实现硬件资源有限的环境下的资源高效使用和推理加速,并且能够在网络模型的运行时性能与大小之间找到一个合理的平衡点。