跳转至

A Survey on Deep Neural Network Pruning: Taxonomy, Comparison, Analysis, and Recommendations

全文摘要

现代深度神经网络(特别是最近的大型语言模型)具有巨大的模型尺寸,需要大量的计算和存储资源。为了使现代模型能够在资源受限的环境下部署,并加快推理时间,研究人员越来越多地探索修剪技术作为神经网络压缩的一个热门研究方向。然而,缺乏最新的关于修剪的综合评论论文。为了解决这一问题,本文从普遍/特定加速何时修剪如何修剪修剪与其他压缩技术的融合等方面对深度神经网络修剪的现有研究进行了综述。然后,我们对八对剪枝的对比设置(例如,非结构化/结构化、一次性/迭代、无数据/数据驱动、初始化/预训练权重等)进行了全面的比较分析,并探讨了几个新兴主题,包括大型语言模型的剪枝、视觉转换、扩散模型和大型多模态模型、训练后剪枝、并对不同层次的修剪进行监管,以揭示现有方法的共性和差异,为进一步的方法开发奠定基础。最后,我们提供了一些有价值的建议选择修剪方法和前景为神经网络剪枝几种有前景的研究方向。为了促进未来对深度神经网络修剪的研究,我们总结了广泛的修剪应用(例如,对抗性鲁棒性,自然语言理解等),并构建了一个针对不同应用的数据集,网络和评估的精选集合。我们在 https://github.com/hrcheng1066/awesome-pruning 上维护一个存储库,作为神经网络修剪论文和相应开源代码的综合资源。我们将不断更新此存储库,以包含该领域的最新进展。

DNN 模型剪枝的分类

  论文的作者从 $4$ 大的纬度出发,对模型剪枝进行了分类。

  • 根据剪枝的通用性,分为:
    • 结构化(Structed)剪枝
    • 非结构化(Unstructed)剪枝
    • 半结构化(Semi-structed)剪枝
    介绍

    非结构化剪枝:给定神经网络权重 $W={w _ 0,w _ 1,\cdots,w _ K}$,数据集 $\mathcal{D}=\lbrace(\mathbf x _ i,\mathbf y _ i)\rbrace _ {i=1}^N$,实际上就是通过调整权重 $W$,最小化 $\mathcal L(W;\mathcal D)$,即损失函数。非结构化剪枝,就是在限定 $W$ 中非零个数不多于 $k$ 的情况下最小化这个目标函数,也就是至少把 $K + 1 - k$ 个权重给置零。

  • 根据剪枝的时机,分为:
    • 训练前剪枝(PBT, Pruning before Training)
    • 训练时剪枝(PDT, Pruning during Training)
    • 训练后剪枝(PAT, Pruning after Training)
    • 运行时剪枝(Run-time Pruning)
  • 如果剪枝是依据一定的准则的,那么根据准则的不同分为:
    • 大小(Magnitude)
    • 范数($l _ p$ Norm)
    • 敏感性/显著性(Sensitivity and/or Saliency)
    • 损失变化(Loss Change)
  • 剪枝可以不根据准测,那么通过学习的方式,进行剪枝:
    • 基于稀疏正则化的剪枝(Sparsity Regularization based Pruning)
    • 基于元学习的剪枝(Meta Learning based Pruning)
    • 基于图神经网络的剪枝(Graph Neural Network based Pruning)
    • 基于强化学习的剪枝(Graph Neural Network based Pruning)