3、神经网络剪枝基础:权重剪枝、神经元剪枝、结构化与非结构化剪枝、剪枝粒度与稀疏度概念
在TinyML的工程落地中,模型体积与推理延迟往往比浮点精度更关键。剪枝(Pruning)作为一种模型压缩技术,通过移除神经网络中冗余的权重或神经元,直接降低存储开销与计算量。本章将系统梳理剪枝的核心概念体系,从权重剪枝与神经元剪枝的差异,到结构化与非结构化剪枝的工程取舍,再到剪枝粒度与稀疏度的量化定义,帮助读者建立完整的剪枝知识框架。
3.1 权重剪枝:细粒度移除的底层逻辑
核心原理:权重剪枝(Weight Pruning)是最基础的剪枝形式,直接针对神经网络中的单个连接权重进行操作。其理论依据是:训练完成后,部分权重绝对值趋近于零,对最终输出的贡献微乎其微。将这些权重置零或删除,可以在几乎不影响模型精度的前提下减少存储量。权重剪枝的粒度最细,每个权重独立判断是否保留,因此具有最高的灵活性。
判断方法:常用的权重重要性评估指标包括:
- 绝对值大小:权重绝对值越小,对输出的影响越小,优先剪除。
- 梯度敏感度:计算权重对损失函数的梯度,梯度小的权重对损失影响弱。
- 二阶导数(Hessian):基于泰勒展开评估剪除后损失变化,精度更高但计算量大。
实际工程中,绝对值阈值法最为常用。例如设定阈值 0.01,将所有权重绝对值小于该值的参数置零。剪枝后需进行微调(Fine-tuning)恢复精度。
案例拆解:假设一个3×3卷积层有9个权重,训练后权重矩阵为 [0.12, -0.05, 0.003, 0.87, -0.01, 0.42, 0.001, -0.23, 0.06]。设定阈值0.02,则权重 0.003、-0.01、0.001 被置零,稀疏度为3/9≈33%。微调后模型精度从95.2%降至94.8%,但模型体积减少33%。若继续提高阈值至0.05,则额外剪除 -0.05 和 0.06,稀疏度达55%,精度降至93.5%。
常见误区:权重剪枝后的稀疏矩阵在标准硬件上无法直接获得加速。CPU/GPU的密集矩阵乘法库(如GEMM)无法跳过零值,必须依赖稀疏卷积库(如OpenBLAS稀疏模式、cuSPARSE)或专用硬件。在TinyML场景中,MCU通常不支持稀疏加速,因此权重剪枝的收益主要体现在存储压缩,而非计算加速。
3.2 神经元剪枝:结构化移除的工程优势
核心原理:神经元剪枝(Neuron Pruning)以整个神经元(即输出特征图的整个通道)为剪枝单位。当一个神经元的输出权重普遍较小时,该神经元可以被整体移除。与权重剪枝不同,神经元剪枝直接改变网络结构,减少下一层的输入通道数,因此是结构化的剪枝方式。
判断方法:评估神经元重要性的常用指标包括:
- L1/L2范数:计算神经元输出权重的范数,范数小的神经元贡献低。
- 激活统计:统计训练集上神经元激活值的均值或方差,激活持续很小的神经元可剪除。
- BN层缩放因子:利用BatchNorm层的γ参数作为重要性指标,γ接近0的通道可剪除。
神经元剪枝后,网络宽度变窄,但每一层仍然是完整的密集矩阵,因此可以直接利用标准硬件加速。
| 对比维度 | 权重剪枝 | 神经元剪枝 |
|---|---|---|
| 剪枝单位 | 单个权重 | 整个神经元/通道 |
| 结构化程度 | 非结构化 | 结构化 |
| 硬件加速 | 需特殊稀疏支持 | 直接支持 |
| 压缩率上限 | 高(可达90%+) | 中(通常50%-70%) |
| 精度恢复难度 | 较容易 | 较困难 |
| 适用场景 | 存储受限、有稀疏加速 | TinyML MCU部署 |
实战场景:在Cortex-M4内核的MCU上部署语音唤醒模型,原始模型含3个全连接层,每层128个神经元。采用神经元剪枝后,每层保留80个神经元,模型参数量从49,152降至30,720(减少37.5%),推理时间从12ms降至8ms,精度仅下降0.8%。由于剪枝后仍是密集矩阵,可直接使用CMSIS-DSP库加速。
3.3 结构化与非结构化剪枝:工程实现的取舍
核心原理:结构化剪枝(Structured Pruning)移除规则的参数块(如整个通道、滤波器、行或列),保持网络结构的规则性;非结构化剪枝(Unstructured Pruning)则随机移除单个权重,产生不规则稀疏模式。两者的本质区别在于剪枝后参数分布是否具有规律性。
操作流程:结构化剪枝的典型流程为:
- 训练基线模型至收敛。
- 计算每个通道的重要性得分(如BN的γ值)。
- 按得分排序,剪除得分最低的k个通道。
- 调整后续层的输入维度,重建网络结构。
- 微调剪枝后的模型恢复精度。
非结构化剪枝流程类似,但无需调整网络结构,只需将权重置零并存储稀疏索引。
案例拆解:以MobileNetV2在ImageNet上的剪枝为例。非结构化剪枝达到80%稀疏度时,精度仅下降1.2%,但推理速度无提升(需稀疏库支持);结构化剪枝(通道剪枝)达到50%稀疏度时,精度下降2.5%,但推理速度提升1.8倍。在TinyML场景中,若目标设备不支持稀疏计算,结构化剪枝是唯一能同时减少存储和计算的选择。
常见误区:许多初学者认为稀疏度越高越好。实际上,当稀疏度超过70%后,非结构化剪枝的精度会急剧下降,且微调难以恢复。结构化剪枝虽然精度损失更大,但工程收益更确定。选择剪枝方式前,务必确认目标硬件的计算能力。
3.4 剪枝粒度与稀疏度:量化剪枝效果的关键指标
核心原理:剪枝粒度(Granularity)描述剪枝操作的最小单位,从细到粗依次为:单个权重、行/列、滤波器/通道、层/块。粒度越细,剪枝灵活性越高,但硬件加速越困难;粒度越粗,硬件友好度越高,但精度损失越大。稀疏度(Sparsity)是剪枝效果的量化指标,定义为被剪除参数占总参数的比例。
计算方法:稀疏度公式为:
稀疏度 = (被剪除参数数量) / (总参数数量) × 100%
示例:一个全连接层有 256×128 = 32,768 个权重
剪除 16,384 个权重后,稀疏度 = 16,384 / 32,768 = 50%
实际工程中还需关注有效稀疏度,即考虑索引存储开销后的实际压缩率。非结构化剪枝需要存储每个非零权重的坐标索引,当稀疏度较低时,索引开销可能抵消压缩收益。
| 粒度级别 | 剪枝单位 | 稀疏模式 | 硬件加速 | 典型压缩率 |
|---|---|---|---|---|
| 细粒度 | 单个权重 | 不规则 | 需稀疏加速器 | 80%-95% |
| 行/列级 | 权重矩阵的行或列 | 半结构化 | 部分支持 | 60%-80% |
| 滤波器级 | 卷积核 | 规则 | 直接支持 | 40%-70% |
| 通道级 | 特征图通道 | 规则 | 直接支持 | 30%-60% |
| 层/块级 | 整个层或残差块 | 规则 | 直接支持 | 20%-50% |
经验提醒:在TinyML项目中,建议优先采用通道级或滤波器级剪枝。这类剪枝能直接减少MAC(乘加运算)次数,且无需额外索引存储。对于存储极度受限的场景,可结合权重剪枝进一步压缩,但需评估目标MCU是否支持稀疏存储格式。
总结复盘:剪枝粒度与稀疏度是评估剪枝方案的核心指标。细粒度剪枝追求高压缩率,但牺牲硬件兼容性;粗粒度剪枝虽然压缩率有限,但工程落地更可靠。实际项目中应遵循"先结构化、后非结构化"的策略:先用通道剪枝获得基础加速,再对剩余权重做细粒度剪枝压缩存储。同时,稀疏度并非越高越好,需结合精度-压缩率曲线确定最优工作点。