深度学习网络模型从卷积层到全连接层存在着大量冗余的参数,大量神经元激活值趋近于0,将这些神经元去除后可以表现出同样的模型表达能力,这种情况被称为过参数化,而对应的技术则被称为模型剪枝

 

卷积核的元素可分为 单个像素、行列、通道、卷积核,可分别在 不同元素上实现剪枝,如下图

细粒度剪枝(fine-grained):即对连接或者神经元进行剪枝,它是粒度最小的剪枝。

向量剪枝(vector-level):它相对于细粒度剪枝粒度更大,属于对卷积核内部(intra-kernel)的剪枝。

核剪枝(kernel-level):即去除某个卷积核,它将丢弃对输入通道中对应计算通道的响应。

滤波器剪枝(Filter-level):对整个卷积核组进行剪枝,会造成推理过程中输出特征通道数的改变。

 

细粒度剪枝(fine-grained),向量剪枝(vector-level),核剪枝(kernel-level)方法在参数量与模型性能之间取得了一定的平衡,但是网络的拓扑结构本身发生了变化,需要专门的算法设计来支持这种稀疏的运算,被称之为非结构化剪枝

而滤波器剪枝(Filter-level)只改变了网络中的滤波器组和特征通道数目,所获得的模型不需要专门的算法设计就能够运行,被称为结构化剪枝。除此之外还有对整个网络层的剪枝,它可以被看作是滤波器剪枝(Filter-level)的变种,即所有的滤波器都丢弃。

 

 

根据 剪枝的处理策略 分为

1.对模型进行稀疏约束然后进行 训练后的剪枝

2.模型 训练中的剪枝

3.训练之前的剪枝

 

根据 粒度 分为

细粒度的权重连接剪枝  

      

  基本处理流程:训练-剪枝-finetune-循环

  重点:

  1. 如何评价一个连接的重要性

    常见思路:

       1. 基于连接幅度的方法:如 L1/L2 范数

      详细步骤:

        1. 训练一个基准模型。

        2. 对权重值的幅度进行排序,去掉低于一个预设阈值的连接,得到剪枝后的网络。

        3. 对剪枝后网络进行微调以恢复损失的性能,然后继续进行第二步,依次交替,直到满足终止条件,比如精度下降在一定范围内。

    2. 基于损失函数的方法:根据剪枝对优化目标的影响来对其重要性进行判断

  2. 如何在剪枝后恢复模型性能

 

粗粒度的通道/滤波器剪枝

  常见方法:

  1.基于重要性因子,即评估一个通道的有效性

    1.通过激活的稀疏性来判断,稀疏性高的可以去除

  2.利用重建误差来间接衡量一个通道对模型效果的影响

  3.基于优化目标的变化来衡量通道的敏感性

 

 

 

 

参考资料:

https://zhuanlan.zhihu.com/p/134642289   【AI不惑境】模型剪枝技术原理及其发展现状和展望