参考代码:rethinking-network-pruning
1. 概述
导读:在模型进行部署的时候一般会希望模型的尽可能小,减少infer时候资源的消耗,其中比较常用的方式就是模型剪枝,其中一般常用的方式是结构化剪枝,这样会硬件也比较友好,非结构化剪枝也是可以的。其采取的步骤是首先训练一个较大的模型,之后使用剪枝算法检出那些不重要的参数,之后再在重要参数的基础上进行finetune,以期望恢复网络性能。这篇文章对剪枝的后半段进行思考, 是否真的需要在重要权重的基础上进行finetune?剪枝之后的网络使用随机初始化对于结构化与非结构化都有效?剪枝之后初始化方式与学习率的影响? 文章中一个重要的发现是直接从剪枝之后的结构使用随机初始化(而非在重要权重上finetune)能得到持平甚至更好的网络性能。这样的结论是基于文章的如下观察得到的:
1)剪裁之后得到的重要权重对于剪裁之后的网络结构来说并不是那么重要,从其随机初始化上重新训练得到的结果在性能上持平甚至更好(finetune的模型可能会陷入局部最小值从而影响性能);
2)网络的剪枝其意义并不在于去寻找原有网络中的重要权重,而是去寻找最为适合的网络结构本身;
3)网络的剪枝可以看作是今后设计网络时候的指导思想,从而设计更加高效的网络;
传统上对于网络的剪枝压缩主要分为3个过程,见下图1所示: