4、剪枝基础概念:权重剪枝、神经元剪枝、通道剪枝、结构化与非结构化剪枝的定义与区别

在Edge AI(边缘人工智能)的工程落地中,模型压缩是连接“算法精度”与“硬件算力”之间的关键桥梁。剪枝(Pruning)作为最经典的模型压缩技术之一,其核心思想是移除神经网络中对最终预测贡献较小的参数或结构,从而换取更小的存储占用、更低的推理延迟和更少的能耗。然而,剪枝并非简单的“删减”,不同的剪枝粒度(权重、神经元、通道)和不同的剪枝约束(结构化与非结构化)直接决定了压缩后的模型能否在特定的边缘硬件(如NPU、DSP、MCU)上获得真实的加速收益。本章将系统梳理这些基础概念,厘清它们之间的本质区别与适用场景。

剪枝粒度与结构化约束分类图 神经网络剪枝 权重剪枝(细粒度) 神经元剪枝(中粒度) 通道剪枝(粗粒度) 非结构化(稀疏) 结构化(向量/核) 结构化(通道/滤波器) 需专用稀疏加速库 (CPU/GPU 稀疏卷积) 部分硬件支持 (SIMD/向量指令集) 通用硬件直接加速 (NPU/GPU/FPGA) 核心结论:剪枝粒度越细,精度保留越好,但硬件加速难度越大;结构化程度越高,压缩率可能略低,但部署收益更确定。

上图从“剪枝粒度”和“结构化约束”两个维度对剪枝家族进行了整体划分。可以看到,权重剪枝通常以非结构化形式存在,而通道剪枝天然是结构化的。理解这张图的内在逻辑,是后续学习剪枝算法、硬件适配和工程调优的基础。下面我们逐一展开。

4.1 核心原理:从参数冗余到结构稀疏

神经网络在训练完成后,其参数矩阵中往往存在大量冗余。这种冗余表现为多种形式:某些权重值接近于零,对输入的响应极其微弱;某些神经元(即某一层的输出特征)与其他神经元高度相关,存在信息重叠;某些卷积核(滤波器)提取的特征与相邻卷积核重复。剪枝的本质就是识别并移除这些冗余,同时通过微调(Fine-tuning)让剩余参数重新收敛,以恢复因剪枝造成的精度损失。

从数学角度看,剪枝可以视为一种稀疏化约束。设原始模型参数为 W,剪枝目标是找到一个掩码矩阵 M(由0和1组成),使得 W' = W ⊙ M,其中 W' 是剪枝后的参数。非结构化剪枝对 M 没有任何形状约束,而结构化剪枝要求 M 在特定维度上保持连续为1或0。例如,通道剪枝要求 M 在某个通道对应的所有位置同时为0,即整个通道被移除。

关键理解:剪枝不是“随机删除”,而是基于某种重要性准则(如权重绝对值、梯度敏感度、BN层缩放因子等)进行的有损压缩。剪枝后的模型必须经过微调才能恢复精度,这一过程通常需要保留少量训练数据用于重训练。

4.2 三类剪枝粒度的定义与操作流程

4.2.1 权重剪枝(Weight Pruning)

权重剪枝是最细粒度的剪枝方式,直接对单个权重参数进行操作。它将绝对值低于阈值的权重置为零,从而产生稀疏权重矩阵。这种剪枝方式灵活度最高,理论上可以在保持较高精度的同时达到极高的压缩率(如90%以上的稀疏度)。

操作流程:

  1. 训练基线模型:在完整数据集上训练得到高精度模型。
  2. 计算重要性:通常使用权重绝对值 |w| 作为重要性指标,也可结合梯度信息。
  3. 设定稀疏度目标:例如设定目标稀疏度为85%,即保留15%的权重。
  4. 生成掩码:将重要性最低的85%权重置零。
  5. 微调:在训练集上继续训练若干轮,仅更新未被掩码的权重(或允许被掩码的权重重新激活)。

然而,权重剪枝产生的稀疏矩阵是不规则的,存储时需要使用压缩稀疏行(CSR)或压缩稀疏列(CSC)等格式。在通用处理器上,这种不规则稀疏会导致缓存命中率下降,且难以利用SIMD(单指令多数据)指令进行并行计算。因此,权重剪枝在CPU/GPU上通常需要专门的稀疏卷积库(如OpenBLAS的稀疏模式)才能获得加速,而在大多数边缘NPU上则无法直接利用。

4.2.2 神经元剪枝(Neuron Pruning)

神经元剪枝的粒度介于权重和通道之间。在全连接层中,一个神经元对应一个输出标量;在卷积层中,一个神经元通常指一个通道的特征图。因此,神经元剪枝在卷积层中往往等同于通道剪枝,但在全连接层中,它意味着删除某一列权重(对应输入神经元)或某一行权重(对应输出神经元)。

神经元剪枝的典型做法是使用ReLU激活后的平均百分比(APoZ,Average Percentage of Zeros)作为指标。如果一个神经元在大量输入样本下输出都为零(即ReLU未激活),说明该神经元是“死亡”的,可以安全移除。这种剪枝方式比权重剪枝更规整,因为它移除的是整个行或列,不会破坏矩阵的连续存储结构。

在实际操作中,神经元剪枝常用于Transformer架构中的注意力头剪枝(Head Pruning)和MLP(多层感知机)层剪枝。例如,BERT模型中有12个注意力头,通过评估每个头的重要性,可以剪掉冗余的头,从而减少计算量。

4.2.3 通道剪枝(Channel Pruning)

通道剪枝是当前Edge AI部署中最受关注的剪枝方式。它直接移除卷积层中整个输入或输出通道(即特征图的某一层),从而改变张量的形状。由于通道是卷积计算的基本维度,通道剪枝后,模型的FLOPs(浮点运算次数)和参数量会同时减少,且不需要特殊的稀疏存储格式,可以直接在标准卷积核上运行。

通道剪枝的典型流程:

  1. 训练或加载预训练模型。
  2. 评估通道重要性:常用方法包括基于BN层缩放因子γ(如Network Slimming方法)、基于一阶梯度敏感度、基于泰勒展开等。
  3. 设定剪枝比例:例如剪掉30%的通道,需要根据硬件算力预算(如目标MACs)反推。
  4. 执行剪枝:生成新的卷积核张量,形状从 [C_out, C_in, K, K] 变为 [C_out', C_in', K, K]。
  5. 微调恢复精度。

通道剪枝的难点在于,某一层的通道被剪掉后,下一层的输入通道数也随之改变,因此需要跨层联动调整。此外,通道剪枝的精度损失通常比权重剪枝更大,因为它的粒度更粗,牺牲了灵活性。

对比维度 权重剪枝 神经元剪枝 通道剪枝
剪枝粒度 单个权重 行/列(全连接)或通道(卷积) 整个通道/滤波器
结构化程度 非结构化 半结构化(向量级) 完全结构化
精度保留能力 高(灵活性强) 中 较低(粒度粗)
硬件加速适配 差(需稀疏库) 中等(SIMD友好) 优(标准卷积加速)
典型压缩率 80%~95%稀疏度 30%~50%神经元移除 30%~60%通道移除
部署难度 高(存储格式复杂) 中 低(直接改shape)

4.3 结构化与非结构化剪枝的本质区别

结构化剪枝(Structured Pruning)与非结构化剪枝(Unstructured Pruning)是剪枝领域最顶层的分类。它们的区别不在于“剪什么”,而在于“剪完后参数的分布形态”。

非结构化剪枝允许掩码矩阵 M 中的0和1任意分布,没有任何位置约束。权重剪枝是典型的非结构化剪枝。其优点是精度损失小,因为可以精细地选择最不重要的参数;缺点是破坏了矩阵的稠密结构,导致内存访问不连续,计算无法充分利用硬件流水线。

结构化剪枝要求被剪除的参数在空间上连续,例如整行、整列、整个通道或整个块。通道剪枝、滤波器剪枝、核剪枝(4D张量中某个 [C_out, C_in, :, :] 切片)都属于结构化剪枝。其优点是剪枝后的模型仍然是稠密的,可以直接部署到任何标准推理框架(如TensorRT、ONNX Runtime、TFLite)中,且能获得与模型尺寸成比例的加速。

常见误区:很多人认为“结构化剪枝=通道剪枝”,这是不准确的。结构化剪枝是一个更宽泛的概念,它还包括滤波器剪枝(移除整个滤波器)、核剪枝(移除 K×K 卷积核)、块剪枝(Block Pruning)等。通道剪枝只是结构化剪枝中最常见的一种形式。

从硬件视角看,非结构化剪枝在GPU上可以通过稀疏张量核(如NVIDIA A100的2:4结构化稀疏)获得加速,但在边缘设备上几乎没有硬件支持。而结构化剪枝,尤其是通道剪枝,可以直接减少卷积层的输入/输出通道数,从而降低MACs(乘加运算次数),在NPU上获得线性加速比。

4.4 案例拆解:MobileNetV2在Cortex-M55上的通道剪枝实战

为了更直观地理解上述概念,我们以一个典型的Edge AI场景为例:在ARM Cortex-M55内核的MCU上部署图像分类模型MobileNetV2。该MCU没有专用的NPU,只有CMSIS-NN软件库优化的DSP指令。

背景与约束:设备内存仅512KB Flash和256KB RAM,目标推理延迟小于50ms,精度要求Top-1不低于85%(原始模型为88.2%)。初始模型大小约13.4MB,远超Flash容量。

初始现象:直接使用非结构化权重剪枝(稀疏度90%)后,模型文件大小降至约1.5MB,但部署到Cortex-M55上后,推理延迟反而从原始的120ms增加到180ms。原因在于CMSIS-NN库不支持稀疏矩阵运算,稀疏权重在内存中需要额外索引存储,且DSP流水线无法跳过零值计算。

分析判断过程:团队意识到,在无稀疏加速硬件的平台上,非结构化剪枝的“理论压缩率”没有实际意义。于是转向通道剪枝策略。首先,使用BN层γ系数作为通道重要性指标,对MobileNetV2的每个卷积层进行通道评估。设定全局剪枝目标为MACs减少50%。

实际操作步骤:

  1. 在ImageNet子集上微调原始模型,确保BN层γ系数收敛。
  2. 统计每层γ系数的分布,设定全局阈值,剪除γ值低于阈值的通道。
  3. 对剪枝后的模型进行逐层通道数调整,确保下一层输入维度匹配。
  4. 在目标数据集上微调20个epoch,学习率设为初始值的1/10。
  5. 使用CMSIS-NN的定点量化工具将模型量化为int8。

结果对比:通道剪枝后,模型MACs从300M降至150M,Flash占用降至约2.1MB(含int8量化),推理延迟降至45ms,满足实时性要求。精度为86.1%,仅下降2.1个百分点,在可接受范围内。

风险与代价:通道剪枝的代价是精度损失比权重剪枝更大,且需要针对每层单独调整剪枝比例,调参工作量较大。此外,如果剪枝比例过高,可能导致某些层通道数过少(如少于16个),影响数值稳定性。

复盘经验:在Edge AI项目中,剪枝方案的选择必须与目标硬件绑定。先确认硬件是否支持稀疏计算,再决定采用非结构化还是结构化剪枝。对于MCU和低端DSP,通道剪枝几乎是唯一可行的选择;对于带有稀疏加速单元的AI加速芯片,可以尝试混合方案(结构化+非结构化)。

4.5 常见误区与总结复盘

在剪枝基础概念的学习和实践中,以下误区值得特别注意:

  • 误区一:混淆“压缩率”与“加速比”。非结构化剪枝可以达到很高的压缩率(文件变小),但如果硬件不支持稀疏计算,推理速度不会提升,甚至可能下降。加速比必须基于实际硬件测量。
  • 误区二:认为剪枝是“一次性”操作。实际工程中,剪枝通常需要迭代进行:剪枝→微调→评估→再剪枝。一次性剪掉过多参数会导致精度崩溃。
  • 误区三:忽视BN层在剪枝中的作用。BN层的缩放因子γ天然适合作为通道重要性指标,但前提是训练时需要对γ施加L1正则化,否则γ值分布不够稀疏,难以区分重要与不重要通道。
  • 误区四:将通道剪枝与知识蒸馏对立。两者可以结合使用,先剪枝再蒸馏,或者用蒸馏辅助微调,往往能获得更好的精度恢复效果。
经验总结:选择剪枝粒度时,遵循“硬件优先”原则。先查阅目标芯片的推理库文档(如CMSIS-NN、TensorRT、NPU SDK),确认其支持何种稀疏模式。对于大多数边缘场景,通道剪枝是首选;若精度损失过大,可尝试“通道剪枝+低秩分解”或“通道剪枝+量化”的组合方案。

最后需要强调的是,剪枝只是模型压缩的一种手段,它与量化、知识蒸馏、低秩分解等方法并不互斥。在实际的Edge AI项目中,通常采用“通道剪枝(减少MACs)+ int8量化(减少带宽和存储)+ 知识蒸馏(恢复精度)”的组合拳,才能达到最佳的部署效果。理解本章的基础概念,是掌握这些组合策略的第一步。