深度学习的模型剪枝主要是将训练好的模型权重矩阵中相对不重要的权值进行剔除。
       目前模型剪枝方向主要分为两类,分别为滤波器器剪枝、权重剪枝。其中权重剪枝属于非结构化剪枝,通常在实现较高稀疏性(kernel中有很多值为0的元素)的同时还能保证模型的性能,但其稀疏结构对硬件的支持度要求较高,需要特定的硬件来进行实现,因而不太实用。
       现在一般说的剪枝都指滤波器剪枝(通道剪枝),其属于结构化剪枝,能有效的缩减模型大小,提升模型inference速度,通用性较高,

       模型剪枝的步骤一般非为三步:

训练好的大模型减枝代码实例pytorch 模型剪枝_权重


步骤1-Training:以最佳网络性能为目标训练一个较大的模型,作为一个基准模型进行裁剪;

步骤2-Pruning:根据特定裁剪方法裁剪大模型,即重新调整网络结构中的通道或层数等,来得到一个精简的网络结构;

步骤3-Finetuning:微调裁剪后的模型以重新获得丢失的性能,在训练集上重新finetune微调直至最优。

       以下介绍几种用到的剪枝方法。

1. 基于几何中值的模型剪枝方法

       本方法源自论文《Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration》,由悉尼科技大学Yang He提出。

       作者分析到以往的“依据范数越小越不重要”(范数越小,相应特征图接近于0,对网络贡献越小)的理论对滤波器进行剪枝通常需要满足两个条件,1)滤波器权重的范数方差足够大;2)滤波器权重的范数最小的值足够小,但在实际应用中,这两个条件不一定满足。

       作者针对上述问题提出基于几何中值的滤波器裁剪方法,核心思想是如果某个滤波器接近所有滤波器计算出来的几何中值,则认为这个滤波器的信息跟其他滤波器重合(冗余),因而可以直接进行替代。

       几何中值的计算如下:

训练好的大模型减枝代码实例pytorch 模型剪枝_结构化_02