Model Pruning Techniques
最近对深度学习模型的剪枝算法感兴趣,于是乎总结一下
1. Classification
The model pruning algorithms has generally two categories:
- Unstructured Pruning 非结构化剪枝
- Structured Pruning 结构化剪枝
早期的一些方法是基于非结构化的,它裁剪的粒度为单个神经元。如果对kernel进行非结构化剪枝,则得到的kernel是稀疏的,即中间有很多元素为0的矩阵。除非下层的硬件和计算库对其有比较好的支持,pruning后版本很难获得实质的性能提升。稀疏矩阵无法利用现有成熟的BLAS库获得额外性能收益。因此,这几年的研究很多是集中在structured pruning上。Structured pruning又可进一步细分:如可以是channel-wise的,也可以是filter-wise的,还可以是在shape-wise的。
Pytorch 已经封装好了剪枝库:
torch.nn.utils.prune
- Random_Unstructured
- L1_Unstructured
- Random_Structured
- Ln_Structured
- Custom_From_Mask
Combined with Lottery Ticket Hypothesis: (非常深刻的思考)
https://zhuanlan.zhihu.com/p/74553341
知乎总结的非常详细的帖子:
https://zhuanlan.zhihu.com/p/130645948?utm_source=wechat_session