• 模型加速 剪枝


    深度学习网络模型从卷积层到全连接层存在着大量冗余的参数,大量神经元激活值趋近于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不惑境】模型剪枝技术原理及其发展现状和展望

  • 相关阅读:
    poj3167
    poj2752 bzoj3670
    poj2886
    poj3294
    [luoguP2564][SCOI2009]生日礼物(队列)
    [luoguP1866]滑动窗口(单调队列)
    [luoguP1198][JSOI2008] 最大数(线段树 || 单调栈)
    [HDU4348]To the moon(主席树)
    [luoguP1168]中位数(主席树+离散化)
    [HDU4417]Super Mario(主席树+离散化)
  • 原文地址:https://www.cnblogs.com/yanshw/p/16519134.html
Copyright © 2020-2023  润新知