结构化与非结构化剪枝技术对比
神经网络剪枝通过删除冗余参数压缩模型。请解释结构化剪枝(通道/层剪枝)和非结构化剪枝(权重剪枝)的原理、优缺点和实际部署考虑。
回答
屠龙少年
剪枝(Pruning)是最早的模型压缩技术之一,通过移除不重要的参数减少计算量和存储需求。
非结构化剪枝(Unstructured Pruning):
- 原理:将单个权重置零(如果其绝对值小于阈值)。
- 粒度:单个权重级。
- 实现:
- 训练完整模型。
- 根据权重绝对值大小(或其他重要性指标如梯度×权重)排序。
- 将最低的p%(如90%)权重置零。
- 微调(Fine-tune)恢复精度。
- 迭代重复:训练→剪枝→微调(Lottery Ticket Hypothesis的迭代幅度)。
- 优点:压缩率极高(可达到90-95%),精度保持好。
- 缺点:剪枝后的权重矩阵是稀疏的,需要特殊硬件/库支持才能加速(如NVIDIA的2:4结构化稀疏)。
- 部署:在不支持稀疏计算的硬件上,无法获得推理加速(因为0值仍需参与计算)。
结构化剪枝(Structured Pruning):
- 原理:移除整个结构单元——通道(Channel)、滤波器(Filter)、层(Layer)或注意力头。
- 粒度:通道/滤波器/层。
- 实现:
- 基于范数的剪枝:计算每个滤波器的L1/L2范数,删除范数小的滤波器。
- 基于BN系数的剪枝(Network Slimming):利用BN层的γ系数,γ小的通道视为不重要。
- 基于梯度的剪枝:使用重要性分数= |权重·梯度|(SNIP/GraSP)。
- 移除后调整网络宽度(如从[64,128,256]变为[48,96,200])。
- 优点:直接减小模型宽度/深度,无需特殊硬件支持即可获得推理加速。
- 缺点:压缩率有限(通常30-50%),精度损失大于非结构化剪枝。
对比总结:
| 特性 | 非结构化剪枝 | 结构化剪枝 |
|---|---|---|
| 剪枝粒度 | 单个权重 | 通道/滤波器/层 |
| 压缩率上限 | 90-95% | 30-50% |
| 精度保持 | 更好 | 稍差 |
| 硬件加速 | 需特殊支持 | 通用支持 |
| 模型大小压缩 | 是 | 是 |
| 推理速度提升 | 有限(无稀疏硬件) | 直接 |
| 实现复杂度 | 低 | 中 |
三倍速剪枝流程(主流实践):
- 预训练一个大模型。
- 剪枝(去除不重要参数)。
- 微调恢复精度。
- 可选:量化→蒸馏→剪枝联合进行。
Lottery Ticket Hypothesis:
- 随机初始化网络中存在一个'中奖彩票'子网络。
- 若从头训练这个子网络,可以达到甚至超过原网络的性能。
- 这一假设挑战了'大网络冗余所以剪枝'的认知。
实际部署建议:
- 如果使用NVIDIA Ampere及以上架构(支持2:4结构化稀疏):使用NVIDIA的ASP(Automatic SParsity)+非结构化剪枝。
- CPU/边缘设备部署:结构化剪枝(通道剪枝)+量化。
- 移动端(TFLite):结构化剪枝+INT8量化组合。