模型剪枝(pruning)是神经网络加速与压缩的常见方法,起源于[1]。模型剪枝可以分为三个步骤:
- 首先根据总体目标确定模型的剪枝方案,也就是其中每一层的剪枝率(有时候也称作压缩率,稀疏率等等)。
- 之后将对应的层按照给定的剪枝率进行剪枝。
- 最后再对网络进行微调(finetune)。
步骤1中确定每一层的剪枝率的方法大致可以分为两类:一种方法是手工指定(例如通过经验或者敏感度分析来判断剪枝率),另一种方法是通过搜索的方式得到(类似于章节2.3中的NAS),我们将在章节4.1中详细介绍这些方法。步骤2中的剪枝也可以分为两类:非结构化剪枝与结构化剪枝,我们将在章节4.2进行详细介绍。步骤3中的微调主要涉及到神经网络训练过程中的技巧,包括使用知识蒸馏等等,这个我们已经在章节3中进行了详细的介绍,我们还会在章节4.3中就剪枝的场景再进行一些讨论。注意上述的三个步骤中步骤2和步骤3可能会进行多次循环迭代,即通过一种渐进压缩的方法达到总体目标。上面的三个步骤主要用于带有预训练模型的剪枝,在没有预训练模型的情况下也可以一边训练一边剪枝,我们将在章节4.4中介绍这类方法。