现代深度神经网络,特别是近期的大型语言模型,都具有巨大的模型规模,需要大量的计算和存储资源。为了使现代模型能够在资源受限的环境中部署并加速推断时间,研究人员越来越多地探索剪枝技术作为神经网络压缩的热门研究方向。从2020年到2022年,每年都有超过一千篇关于剪枝的论文被发表。然而,缺乏对剪枝的最新综述。
为了解决这个问题,在这篇综述中,我们对深度神经网络剪枝的现有研究进行了全面审查,按以下几类进行分类:1) 通用/特定加速,2) 何时剪枝,3) 如何剪枝,以及4) 剪枝与其他压缩技术的融合。我们接着对剪枝的七对对比设置(例如,无结构/有结构,一次性/迭代,无数据/数据驱动,初始化/预训练权重等)进行了深入的比较分析,并探索了一些新兴话题,如后训练剪枝、剪枝的不同级别监督等,以揭示现有方法的共同点和差异,并为进一步的方法开发奠定基础。
最后,我们为选择剪枝方法提供了有价值的建议,并展望了神经网络剪枝的一些有前景的研究方向。为了方便未来关于深度神经网络剪枝的研究,我们总结了广泛的剪枝应用(如对抗性鲁棒性、自然语言理解等),并构建了一个包含数据集、网络和不同应用评估的精选集合。我们在https://github.com/hrcheng1066/awesome-pruning上维护了一个资源库,作为神经网络剪枝论文和相应开源代码的综合资源。我们会持续更新这个资源库,以包括该领域的最新进展。
深度神经网络剪枝
过去的几年中,深度神经网络(DNNs)在各种领域和应用中都取得了显著的进展,例如计算机视觉(CV)[1, 2, 3]、自然语言处理(NLP)[4]和音频信号处理(ASP)[5]等。尽管DNNs在各个领域都取得了卓越的成功,但它们的性能在很大程度上依赖于模型参数和计算成本。例如,广泛使用的ResNet-50 [6] 需要超过95MB的存储空间,包含超过2300万的可训练参数,并需要4 GFLOPs(吉浮点运算)的计算[7]。在ImageNet [1]上训练的VGG-16 [2]的大小超过了500 MB [8]。Transformer网络GPT-3模型包含了高达1750亿的参数[9],而GPT-4模型则更多。预计放大神经网络大小的当前趋势将持续。
然而,DNNs的参数越多,通常在处理输入时所需的时间和内存空间也就越多[10]。这些模型的高训练和推断成本给其在受到计算资源(如CPU、GPU和内存)、能量和带宽限制的设备上的部署带来了重大挑战[11, 12, 13]。例如,现实生活中的应用,如自动驾驶、野外救援和防止灌木丛火灾,都需要高准确度和高效的资源使用,包括快速的实时响应和紧凑的内存占用。深度神经网络的计算复杂性和内存占用可能使它们不适合在边缘设备上部署[14]。随着近年来大型语言模型的流行,人们对于为具有灵活硬件需求的计算机压缩神经网络的兴趣也在增长[15]。此外,包含冗余特征的深度神经网络可能会削弱其鲁棒性,增加遭受对抗攻击的风险[16]。例如,这些网络创建的高维特征空间可以为对抗攻击提供更多的入口点,从而削弱网络超出其原始训练数据的泛化能力。
为了缓解这一问题,研究人员提出了各种神经网络压缩技术来设计轻量级模型,包括神经网络剪枝([17])、权重矩阵的低秩分解([18, 19])、量化([11, 20])、知识蒸馏([21])、神经架构搜索([22, 23])以及其他压缩技术([24, 25])。其中,人们对神经网络剪枝持续关注,已经被证明是一种理想且有效的方法,在推断时节省内存空间和计算时间,同时保持与原始DNNs相当甚至更好的性能。如图1所示,从2015年到2022年,关于剪枝的论文数量已经显著增加。它占了神经网络压缩论文的一半以上。
关于剪枝的研究可以追溯到1988年的文献[26]。然而,直到[11]的出现,研究界才意识到剪枝在去除深度神经网络中的大量冗余方面的潜力,剪枝开始受到广泛关注。如表1所示,有一些文献对深度神经网络剪枝的先前工作进行了回顾。尽管这些工作对剪枝的几个方面进行了概述,并为研究人员提供了有益的指导,但其中许多文献([8, 27, 28, 29])关注于多种压缩技术,如剪枝、量化和知识蒸馏,并只简要检查每种技术。例如,Mishra等人[27]总结了包括剪枝、量化、低秩分解和知识蒸馏在内的压缩技术,其中剪枝主要是从通道/滤波器剪枝中引入的,而许多基本的剪枝技术(如彩票假设)并未包括。一些回顾性工作(如[30])重点回顾卷积神经网络的剪枝,并缺乏对其他深度神经网络的剪枝描述,如循环神经网络(RNNs)。[31]中的工作提供了对深度学习中的稀疏性的全面回顾,但对于新兴的剪枝方法的研究很少,例如对比学习中的剪枝[32]和自监督剪枝[33]等。王等人[34]仅为初始化时的剪枝提供了概述,并未包括在训练期间、训练后等的剪枝研究。[35]是关于剪枝的最新综述,但只关注于结构化剪枝。
本综述旨在为各种读者提供关于深度神经网络剪枝的全面概述。我们回顾了代表性的剪枝方法,提出了一个新的分类方法,对不同的剪枝方式在实践中的表现进行了全面分析,并为希望利用剪枝的实践者提供了关于如何选择适合不同要求的剪枝方法的建议。我们的贡献如下:
(1)** 全面回顾。据我们所知,这篇综述是关于现代深度神经网络剪枝技术的最全面的概述**。它从超过300篇相关的学术论文中提炼出思想,并建立了一个新的分类法,如图2所示。此外,我们为每一类剪枝方法的代表性方法提供了详细的描述。
(2) 比较实验和分析。我们对剪枝的七对对照设置以及新兴进展进行了比较分析,包括剪枝的不同监督层次。与现有的剪枝综述不同,本文进行了实验和相关讨论。
(3)** 收集丰富的资源**。我们总结了各种剪枝应用,并为不同应用提供了基准数据集、网络和评估。我们在附录B中收集的资源可以指导研究人员和实践者了解、利用和为不同的需求开发不同的网络剪枝方法。代表性剪枝工作的持续更新可在 https://github.com/hrcheng1066/awesome-pruning 上查看。
(4) 建议和未来方向。这篇综述为选择适合不同应用需求的适当剪枝方法提供了有价值的建议,并突出了有前途的未来研究方向。
本综述的其余部分组织如下。首先,在第2节,我们解释常用的术语并建立一个清晰的剪枝分类法。第3-6节提供了关于加速、何时剪枝、如何剪枝的概述,接着在第7节对不同类型的剪枝方法进行了全面的比较分析。第8节讨论了与其他压缩方法的剪枝整合。第9节提供了选择剪枝方法的一些建议和未来的方向。我们在第10节结束这篇文章。