CodeWalk

结构化与非结构化剪枝技术对比

作者:屠龙少年 · 2026-05-30 12:55

神经网络剪枝通过删除冗余参数压缩模型。请解释结构化剪枝(通道/层剪枝)和非结构化剪枝(权重剪枝)的原理、优缺点和实际部署考虑。

回答

屠龙少年

剪枝(Pruning)是最早的模型压缩技术之一,通过移除不重要的参数减少计算量和存储需求。

非结构化剪枝(Unstructured Pruning)

  • 原理:将单个权重置零(如果其绝对值小于阈值)。
  • 粒度:单个权重级。
  • 实现
    1. 训练完整模型。
    2. 根据权重绝对值大小(或其他重要性指标如梯度×权重)排序。
    3. 将最低的p%(如90%)权重置零。
    4. 微调(Fine-tune)恢复精度。
    5. 迭代重复:训练→剪枝→微调(Lottery Ticket Hypothesis的迭代幅度)。
  • 优点:压缩率极高(可达到90-95%),精度保持好。
  • 缺点:剪枝后的权重矩阵是稀疏的,需要特殊硬件/库支持才能加速(如NVIDIA的2:4结构化稀疏)。
  • 部署:在不支持稀疏计算的硬件上,无法获得推理加速(因为0值仍需参与计算)。

结构化剪枝(Structured Pruning)

  • 原理:移除整个结构单元——通道(Channel)、滤波器(Filter)、层(Layer)或注意力头。
  • 粒度:通道/滤波器/层。
  • 实现
    1. 基于范数的剪枝:计算每个滤波器的L1/L2范数,删除范数小的滤波器。
    2. 基于BN系数的剪枝(Network Slimming):利用BN层的γ系数,γ小的通道视为不重要。
    3. 基于梯度的剪枝:使用重要性分数= |权重·梯度|(SNIP/GraSP)。
    4. 移除后调整网络宽度(如从[64,128,256]变为[48,96,200])。
  • 优点:直接减小模型宽度/深度,无需特殊硬件支持即可获得推理加速。
  • 缺点:压缩率有限(通常30-50%),精度损失大于非结构化剪枝。

对比总结

特性非结构化剪枝结构化剪枝
剪枝粒度单个权重通道/滤波器/层
压缩率上限90-95%30-50%
精度保持更好稍差
硬件加速需特殊支持通用支持
模型大小压缩
推理速度提升有限(无稀疏硬件)直接
实现复杂度

三倍速剪枝流程(主流实践)

  1. 预训练一个大模型。
  2. 剪枝(去除不重要参数)。
  3. 微调恢复精度。
  4. 可选:量化→蒸馏→剪枝联合进行。

Lottery Ticket Hypothesis

  • 随机初始化网络中存在一个'中奖彩票'子网络。
  • 若从头训练这个子网络,可以达到甚至超过原网络的性能。
  • 这一假设挑战了'大网络冗余所以剪枝'的认知。

实际部署建议

  • 如果使用NVIDIA Ampere及以上架构(支持2:4结构化稀疏):使用NVIDIA的ASP(Automatic SParsity)+非结构化剪枝。
  • CPU/边缘设备部署:结构化剪枝(通道剪枝)+量化。
  • 移动端(TFLite):结构化剪枝+INT8量化组合。