4、剪枝基础概念:权重剪枝、神经元剪枝、通道剪枝、结构化与非结构化剪枝的定义与区别
在Edge AI(边缘人工智能)的工程落地中,模型压缩是连接“算法精度”与“硬件算力”之间的关键桥梁。剪枝(Pruning)作为最经典的模型压缩技术之一,其核心思想是移除神经网络中对最终预测贡献较小的参数或结构,从而换取更小的存储占用、更低的推理延迟和更少的能耗。然而,剪枝并非简单的“删减”,不同的剪枝粒度(权重、神经元、通道)和不同的剪枝约束(结构化与非结构化)直接决定了压缩后的模型能否在特定的边缘硬件(如NPU、DSP、MCU)上获得真实的加速收益。本章将系统梳理这些基础概念,厘清它们之间的本质区别与适用场景。
上图从“剪枝粒度”和“结构化约束”两个维度对剪枝家族进行了整体划分。可以看到,权重剪枝通常以非结构化形式存在,而通道剪枝天然是结构化的。理解这张图的内在逻辑,是后续学习剪枝算法、硬件适配和工程调优的基础。下面我们逐一展开。
4.1 核心原理:从参数冗余到结构稀疏
神经网络在训练完成后,其参数矩阵中往往存在大量冗余。这种冗余表现为多种形式:某些权重值接近于零,对输入的响应极其微弱;某些神经元(即某一层的输出特征)与其他神经元高度相关,存在信息重叠;某些卷积核(滤波器)提取的特征与相邻卷积核重复。剪枝的本质就是识别并移除这些冗余,同时通过微调(Fine-tuning)让剩余参数重新收敛,以恢复因剪枝造成的精度损失。
从数学角度看,剪枝可以视为一种稀疏化约束。设原始模型参数为 W,剪枝目标是找到一个掩码矩阵 M(由0和1组成),使得 W' = W ⊙ M,其中 W' 是剪枝后的参数。非结构化剪枝对 M 没有任何形状约束,而结构化剪枝要求 M 在特定维度上保持连续为1或0。例如,通道剪枝要求 M 在某个通道对应的所有位置同时为0,即整个通道被移除。
4.2 三类剪枝粒度的定义与操作流程
4.2.1 权重剪枝(Weight Pruning)
权重剪枝是最细粒度的剪枝方式,直接对单个权重参数进行操作。它将绝对值低于阈值的权重置为零,从而产生稀疏权重矩阵。这种剪枝方式灵活度最高,理论上可以在保持较高精度的同时达到极高的压缩率(如90%以上的稀疏度)。
操作流程:
- 训练基线模型:在完整数据集上训练得到高精度模型。
- 计算重要性:通常使用权重绝对值
|w|作为重要性指标,也可结合梯度信息。 - 设定稀疏度目标:例如设定目标稀疏度为85%,即保留15%的权重。
- 生成掩码:将重要性最低的85%权重置零。
- 微调:在训练集上继续训练若干轮,仅更新未被掩码的权重(或允许被掩码的权重重新激活)。
然而,权重剪枝产生的稀疏矩阵是不规则的,存储时需要使用压缩稀疏行(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(浮点运算次数)和参数量会同时减少,且不需要特殊的稀疏存储格式,可以直接在标准卷积核上运行。
通道剪枝的典型流程:
- 训练或加载预训练模型。
- 评估通道重要性:常用方法包括基于BN层缩放因子γ(如Network Slimming方法)、基于一阶梯度敏感度、基于泰勒展开等。
- 设定剪枝比例:例如剪掉30%的通道,需要根据硬件算力预算(如目标MACs)反推。
- 执行剪枝:生成新的卷积核张量,形状从
[C_out, C_in, K, K]变为[C_out', C_in', K, K]。 - 微调恢复精度。
通道剪枝的难点在于,某一层的通道被剪掉后,下一层的输入通道数也随之改变,因此需要跨层联动调整。此外,通道剪枝的精度损失通常比权重剪枝更大,因为它的粒度更粗,牺牲了灵活性。
| 对比维度 | 权重剪枝 | 神经元剪枝 | 通道剪枝 |
|---|---|---|---|
| 剪枝粒度 | 单个权重 | 行/列(全连接)或通道(卷积) | 整个通道/滤波器 |
| 结构化程度 | 非结构化 | 半结构化(向量级) | 完全结构化 |
| 精度保留能力 | 高(灵活性强) | 中 | 较低(粒度粗) |
| 硬件加速适配 | 差(需稀疏库) | 中等(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%。
实际操作步骤:
- 在ImageNet子集上微调原始模型,确保BN层γ系数收敛。
- 统计每层γ系数的分布,设定全局阈值,剪除γ值低于阈值的通道。
- 对剪枝后的模型进行逐层通道数调整,确保下一层输入维度匹配。
- 在目标数据集上微调20个epoch,学习率设为初始值的1/10。
- 使用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正则化,否则γ值分布不够稀疏,难以区分重要与不重要通道。
- 误区四:将通道剪枝与知识蒸馏对立。两者可以结合使用,先剪枝再蒸馏,或者用蒸馏辅助微调,往往能获得更好的精度恢复效果。
最后需要强调的是,剪枝只是模型压缩的一种手段,它与量化、知识蒸馏、低秩分解等方法并不互斥。在实际的Edge AI项目中,通常采用“通道剪枝(减少MACs)+ int8量化(减少带宽和存储)+ 知识蒸馏(恢复精度)”的组合拳,才能达到最佳的部署效果。理解本章的基础概念,是掌握这些组合策略的第一步。