所有文章 > 正文

CVPR 2023 | DepGraph:任意架构的结构化剪枝,CNN、Transformer、GNN等都适用!

作者: CVer

时间: 2023-03-29 11:22

本工作提出了一种非深度图算法DepGraph,实现了架构通用的结构化剪枝,适用于CNNs, Transformers, RNNs, GNNs等网络。

1. 内容概要

该算法能够自动地分析复杂的结构耦合,从而正确地移除参数实现网络加速。基于DepGraph算法,我们开发了PyTorch结构化剪枝框架 Torch-Pruning。不同于依赖Masking实现的“模拟剪枝”,该框架能够实际地移除参数和通道,降低模型推理成本。在DepGraph的帮助下,研究者和工程师无需再与复杂的网络结构斗智斗勇,可以轻松完成复杂模型的一键剪枝。

论文标题:DepGraph: Towards Any Structural Pruning
论文链接:DepGraph: Towards Any Structural Pruning - AMiner

11-1sIofWGsn9.png

2. 背景介绍

结构化剪枝是一种重要的模型压缩算法,它通过移除神经网络中冗余的结构来减少参数量,从而降低模型推理的时间、空间代价。在过去几年中,结构化剪枝技术已经被广泛应用于各种神经网络的加速,覆盖了ResNet、VGG、Transformer等流行架构。然而,现有的剪枝技术依旧存在着一个棘手的问题,即算法实现和网络结构的强绑定,这导致我们需要为不同模型分别开发专用且复杂的剪枝程序。

那么,这种强绑定从何而来?在一个网络中,每个神经元上通常会存在多个参数连接。如下图1(a)所示,当我们希望通过剪枝某个神经元(加粗高亮)实现加速时,与该神经元相连的多组参数需要被同步移除,这些参数就组成了结构化剪枝的最小单元,通常称为组(Group)。然而,在不同的网络架构中,参数的分组方式通常千差万别。图1(b)-(d)分别可视化了残差结构、拼接结构、以及降维度结构所致的参数分组情况,这些结构甚至可以互相嵌套,从而产生更加复杂的分组模式。因此,参数分组也是结构化剪枝算法落地的一个难题。

12-tQrQvd6Wgs.png

图1: 各种结构中的参数耦合,其中高亮的神经元和参数连接需要被同时剪枝

3. 本文方法

13-oLU6xLITTU.png

14-rMP507iGri.png

15-aY5fm9nFEF.png

16-RIHObCr9GW.png

17-Xvcy3ZERPs.png

18-AujvNdTe6M.png

图2: 残差结构的依赖图建模

3.3 利用依赖图进行剪枝

19-562Vx2xOL7.png

图3: 不同的稀疏性图示。本方法根据依赖关系对耦合参数进行同步稀疏,从而确保剪枝掉的参数是一致“冗余”的

20-IYm9lI7oiG.png

4 实验

4.1 Benchmark

本文实验主要包含两部分,第一部分对喜闻乐见的CIFAR数据集和ImageNet数据集进行测试,我们验证了多种模型的结构化剪枝效果,我们利用DepGraph和一致性稀疏构建了一个非常简单的剪枝器,能够在这两种数据集上取得不错的性能。

21-OWttBm1FsW.png

4.2 分析实验

一致性稀疏:在分析实验中,首先我们首先评估了一致性稀疏和逐层独立稀疏的差异,结论符合3.3中的分析,即逐层算法无法实现依赖参数的一致稀疏。例如下图中绿色的直方图表示传统的逐层稀疏策略,相比于本文提出的一致性稀疏,其整体稀疏性表现欠佳。

22-7GA6RHAHxp.png

分组策略/稀疏度分配:我们同样对分组策略进行了评估,我们考虑了无分组(No Grouping)、卷积分组(Conv-only)和全分组(Full Grouping)三种策略,无分组对参数进行独立稀疏,卷积分组近考虑了卷积层而忽略其他参数化的层,最后的全分组将所有参数化的层进行一致性稀疏。实验表明全稀疏在得到更优的结果同时,剪枝的稳定性更高,不容易出现过度剪枝的情况(性能显著下降)。

另外剪枝的稀疏度如何分配也是一个重要问题,我们测试了算法在逐层相同稀疏度(Uniform Sparsity)和可学习稀疏度(Learned Sparsity)下的表现。可学习稀疏度根据稀疏后的参数L2 Norm进行全局排序,从而决定稀疏度,这一方法能够假设参数冗余并不是平均分布在所有层的,因此可以取得更好的性能。但于此同时,可学习的稀疏度存在过度剪枝风险,即在某一层中移除过多的参数。

23-7FSokuTMEj.png

依赖图可视化:下图中我们可视化了DenseNet-121、ResNet-18、ViT-Base的依赖图和递归推导得到的分组矩阵,可以发现不同网络的参数依赖关系是复杂且各不相同的。

24-1DHEhKebMi.png

非图像模型结构化剪枝:深度模型不仅仅只有CNN和transformer,我们还对其他架构的深度模型进行了初步验证,包括用于文本分类的LSTM,用于3D点云分类的DGCNN以及用于图数据的GAT,我们的方法都取得了令人满意的结果。

25-8g9wN9tjjf.png

5 Talk is Cheap

5.1 A Minimal Example

在本节中我们展示了DepGraph的一个最简例子。这里我们希望对一个标准ResNet-18的第一层进行通道剪枝:

26-4vYwDe0din.png

27-PODJypudot.png

6 总结

本文提出了一种面向任意架构的结构化剪枝技术DepGraph,极大简化了剪枝的流程。目前,我们的框架已经覆盖了Torchvision模型库中85%的模型,涵盖分类、分割、检测等任务。总体而言,本文工作只能作为“任意结架构剪枝”这一问题的初步探索性工作,无论在工程上还是在算法设计上都存在很大的改进空间。此外,当前大多数剪枝算法都是针对单层设计的,我们的工作为将来“组级别剪枝”的研究提供了一些有用的基础资源。

二维码 扫码微信阅读
推荐阅读 更多