一、论文基本信息
论文题目:Pruning Filters for Efficient ConvNets
作者:Hao Li、Asim Kadav、Igor Durdanovic、Hanan Samet、Hans Peter Graf
发表信息:ICLR 2017
论文链接:
-
OpenReview:Verifying your browser | OpenReview
复现代码:code
论文最早发布于 arXiv,时间为 2016 年 8 月,后发表于 ICLR 2017。该论文是 CNN 结构化剪枝方向非常经典的一篇工作,也是后续大量 filter pruning / channel pruning 方法的重要起点之一。
这篇论文的核心观点非常直接:与其剪掉单个权重,不如直接剪掉整个卷积滤波器。这样可以真正减少卷积层的通道数、特征图数量、参数量和 FLOPs,并且剪枝后的网络仍然是规则的稠密网络,可以直接使用常规 BLAS/cuDNN 等高效卷积实现,而不依赖稀疏计算库。
二、论文要解决的问题
在这篇论文之前,很多模型压缩方法关注的是 weight pruning,也就是把网络中绝对值较小的单个权重置零。这类方法确实可以显著减少参数数量,尤其是在全连接层中效果明显。但是,对卷积神经网络来说,仅仅把很多卷积核权重变成零,并不一定能带来真实推理加速。
原因在于,单权重剪枝会产生不规则稀疏矩阵。理论上参数少了,但在实际硬件上,如果没有专门的稀疏卷积库或者稀疏加速器,普通 GPU/CPU 仍然很难高效利用这种不规则稀疏性。因此,weight pruning 减少的是"存储量",但未必稳定减少"实际推理时间"。
这篇论文要解决的就是这个问题:
如何设计一种简单、直接、硬件友好的 CNN 剪枝方法,让剪枝后的模型在不依赖稀疏计算库的情况下,也能真正减少卷积计算量?
作者的答案是:剪掉整个 filter,而不是剪掉零散的 weight。
三、核心思想
CNN 中一个卷积层通常包含多个 filter。每个 filter 对应输出特征图中的一个通道。如果剪掉某个 filter,那么它产生的输出 feature map 也可以被删除;同时,下一层中连接到这个 feature map 的相关卷积核通道也可以一并删除。论文明确指出,删除第 (i) 层的一个 filter 不仅减少第 (i) 层的计算,还会减少第 (i+1) 层中对应输入通道的计算。
因此,filter pruning 的效果不是简单地把部分权重设为 0,而是让网络结构变窄,
这就带来了一个很重要的区别:
非结构化剪枝得到的是"带很多 0 的大网络",而 filter pruning 得到的是"真正变窄的小网络"。
这也是这篇论文的价值所在。它把剪枝从"参数稀疏化"推进到了"结构压缩"。
四、方法细节
4.1 剪枝对象:卷积 filter
设第 i 个卷积层的输入通道数为 ,输出通道数为
,卷积核大小为
。该层的卷积核张量可以表示为:
其中,第 j个 filter 可以写作:
这个 filter 会产生第 i+1 层输入特征中的第 j 个 feature map。论文中强调,剪掉一个 filter,就会删除对应的 feature map,并且下一层中连接到这个 feature map 的卷积核通道也会被删除。
4.2 filter 重要性评分:L1 范数
这篇论文最经典的设计是用 filter 的 L1 范数 衡量其重要性。对于第 (i) 层第 (j) 个 filter,重要性分数定义为:
也可以写成:
其中 表示该 filter 在第 l个输入通道上的二维卷积核。
直观理解是:如果一个 filter 的权重整体绝对值很小,那么它产生的输出响应通常也较弱,对最终分类结果的影响可能较小。因此,论文选择剪掉 L1 范数最小的 filters。作者也在论文中说明,由于同一层内各个 filter 的输入通道数相同,L1 范数可以被视为该 filter 平均权重幅值的度量。
4.3 单层 filter 剪枝流程
对于某一层,如果要剪掉 m个 filters,流程如下:
输入:训练好的 CNN,第 i 个卷积层,需要剪掉的 filter 数 m
1. 对第 i 层中每个 filter 计算 L1 范数:
s_j = ||F_{i,j}||_1
2. 按照 s_j 从小到大排序。
3. 删除 L1 范数最小的 m 个 filters。
4. 删除这些 filters 对应的输出 feature maps。
5. 删除下一层中连接到这些 feature maps 的输入通道。
6. 构建一个更窄的新模型,并把未被剪掉的权重复制过去。
7. 对剪枝后的模型进行 retraining / fine-tuning,恢复精度。
4.4 多层剪枝:Independent pruning 与 Greedy pruning
论文讨论了跨多层剪枝时的两种策略:
第一种是 Independent pruning。也就是每一层独立计算 filter 的 L1 范数,不考虑前面层已经剪掉了哪些 feature maps。
第二种是 Greedy pruning。这种策略会考虑前一层已经删除的 feature maps。也就是说,在计算当前层 filter 的 L1 范数时,不再统计那些已经被上一层剪掉的输入通道对应的卷积核权重。
论文认为,greedy pruning 虽然不是全局最优,但比 independent pruning 更符合跨层剪枝后的真实结构,尤其在剪枝比例较大时,往往能得到更好的剪枝网络。
这部分思想很重要,因为它已经开始触及后续剪枝方法中经常强调的一个问题:
剪枝不是每层孤立发生的,一个通道被删除后,会改变后续层的输入结构。
4.5 ResNet 中的 filter 剪枝
对于 VGG 这类串行 CNN,剪掉某层 filter 比较直接。但 ResNet 有残差连接,剪枝会更复杂。
在 ResNet 中,残差分支的输出需要与 shortcut 分支相加。如果随意剪掉残差分支的输出通道,就可能导致两条路径的通道数不一致,无法相加。因此论文指出,ResNet 中不同位置的卷积层剪枝约束并不相同。
对于 CIFAR-10 上的 ResNet-56/110,论文主要剪残差块中的第一层卷积,因为这不会改变残差块最终输出 feature maps 的数量;而第二层卷积的输出需要与 shortcut 对齐,因此更难自由剪枝。对于带 projection shortcut 的 ResNet-34,论文还讨论了 shortcut 和残差分支第二层卷积之间的对应剪枝关系。
这说明,结构化剪枝不能只看单个 filter 的分数,还必须考虑网络拓扑结构。这个问题在后来的 ResNet、DenseNet、Transformer、ViT 和 LLM 剪枝中变得越来越重要。
五、关键公式
5.1 卷积层计算量
第 i 个卷积层的输入通道数为 ,输出通道数为
,卷积核大小为
,输出特征图大小为
。论文给出的卷积计算量可表示为:
如果剪掉第i层的一个 filter,那么第i层会减少:
的计算量。同时,由于该 filter 对应的输出 feature map 被删除,下一层对应的输入通道也可以删除,因此第 (i+1) 层还会进一步减少:
的计算量。论文明确指出,剪掉第 (i) 层的 (m) 个 filters,会同时减少第 (i) 层和第 (i+1) 层大约 比例的计算成本。
5.2 filter 的 L1 范数评分
论文用 filter 权重绝对值之和作为重要性分数:
展开为:
其中:
-
:第 (i) 层第 (j) 个 filter;
-
:输入通道数;
-
k:卷积核尺寸;
-
:filter 的重要性分数。
剪枝规则就是:
其中 表示第 (i) 层要被剪掉的 filter 集合。
这套公式非常简单,但也正是它的经典之处:不需要额外数据,不需要复杂优化,不需要二阶信息,只依赖预训练模型的卷积核权重。
六、实验设置
论文主要在三类网络上进行实验:
-
VGG-16 on CIFAR-10;
-
ResNet-56 / ResNet-110 on CIFAR-10;
-
ResNet-34 on ImageNet / ILSVRC2012。
作者使用 Torch7 实现剪枝方法。剪枝时会构建一个 filter 数量更少的新模型,并把保留下来的参数复制到新模型中。如果某个卷积层被剪枝,对应 Batch Normalization 层的参数也会同步删除。
在 retraining 设置上,论文对 CIFAR-10 模型微调 40 个 epoch,对 ImageNet 模型微调 20 个 epoch,学习率固定为 0.001。作者特别指出,这个 retraining 时间大约是原始训练时间的四分之一,比一些早期剪枝方法中较长的迭代重训练流程更简单。
此外,论文还比较了三类 filter 选择策略:
1. 剪掉 L1 范数最小的 filters;
2. 随机剪掉 filters;
3. 剪掉 L1 范数最大的 filters。
实验结果显示,剪掉 L1 范数最小的 filters 通常优于随机剪枝,而剪掉 L1 范数最大的 filters 会导致精度快速下降。这从实验上支持了"L1 范数较大的 filter 更重要"这一假设。
论文还将 L1 filter pruning 与 activation-based feature map pruning 进行了比较。后者需要输入样本,通过统计 feature map 的激活均值、标准差、L1/L2 范数等指标判断通道重要性。作者发现,L1 filter pruning 虽然简单,却能超过多种 activation-based 指标;只有 feature map 标准差指标在中低剪枝率下接近或优于 L1,但在较高剪枝率时会明显下降。
七、实验结果解读
7.1 VGG-16 on CIFAR-10
在 CIFAR-10 上,原始 VGG-16 的错误率为 6.75%,FLOPs 为 (3.13 \times 10^8),参数量约为 (1.5 \times 10^7)。剪枝后的 VGG-16-pruned-A 错误率为 6.60%,FLOPs 降至 (2.06 \times 10^8),FLOPs 减少 34.2%,参数量减少 64.0%。
这个结果非常有代表性:剪枝后模型不仅没有明显掉点,错误率甚至略低于原模型。这并不一定说明剪枝方法"提升了模型能力",更合理的解释是,剪枝加 retraining 起到了一定正则化作用,去掉了部分冗余 filter。
论文还发现,VGG-16 后面几层 512-channel 卷积层非常容易剪。部分层即使去掉较大比例 filter,也能通过 retraining 恢复精度。作者认为,这可能与 CIFAR-10 输入尺寸较小有关:到 VGG 后几层时,feature map 只有 (4 \times 4) 或 (2 \times 2),空间信息已经很少,许多 filters 可能存在明显冗余。
7.2 ResNet-56 / ResNet-110 on CIFAR-10
在 ResNet-56 上,原始错误率为 6.96%。ResNet-56-pruned-A 的错误率为 6.90%,FLOPs 减少 10.4%;ResNet-56-pruned-B 的错误率为 6.94%,FLOPs 减少 27.6%。
在 ResNet-110 上,原始错误率为 6.47%。ResNet-110-pruned-A 的错误率为 6.45%,FLOPs 减少 15.9%;ResNet-110-pruned-B 的错误率为 6.70%,FLOPs 减少 38.6%。
这些结果说明两个问题。
第一,ResNet 也存在明显 filter 冗余。即使是残差网络,也可以通过结构化 filter pruning 减少大量计算。
第二,更深的 ResNet-110 反而比 ResNet-56 更容易剪。这一点比较有意思。论文认为,当每个 stage 中 residual blocks 数量更多时,中间的 residual blocks 可能存在更多冗余,因此更容易被剪枝。
7.3 ResNet-34 on ImageNet
在 ImageNet 上,原始 ResNet-34 的错误率为 26.77%,FLOPs 为 (3.64 \times 10^9)。ResNet-34-pruned-B 的错误率为 27.83%,FLOPs 降至 (2.76 \times 10^9),FLOPs 减少 24.2%,参数量减少 10.8%。
与 CIFAR-10 相比,ImageNet 上剪枝后的精度损失更明显。这也符合直觉:ImageNet 任务更复杂,输入分辨率更高,类别更多,网络中的 filter 冗余程度相对更低,过度剪枝更容易损伤表达能力。
论文还观察到,ResNet 中不同位置的层敏感性不同。靠近 stage 边界、通道数变化位置附近的 residual blocks 往往更敏感;中间 residual blocks 相对更容易剪。
7.4 FLOPs 与真实推理时间
论文不仅报告 FLOPs,还在 Titan X Pascal GPU、cuDNN v5.1、batch size 128 设置下测试了 wall-clock inference time。结果显示,剪枝后的推理时间下降趋势整体接近 FLOPs 下降趋势。比如 VGG-16-pruned-A 的 FLOPs 减少 34.2%,推理时间减少 40.7%;ResNet-34-pruned-B 的 FLOPs 减少 24.2%,推理时间减少 28.0%。
这一点非常重要。因为很多剪枝方法只报告 FLOPs,却未必能带来真实加速。而这篇论文的方法通过物理删除 filters,构建更小的稠密网络,因此更容易把理论计算量下降转化为实际推理加速。
八、方法优点
8.1 方法极其简单
这篇论文没有复杂的优化目标,也不需要训练额外的评分网络。它只需要计算每个 filter 的 L1 范数,然后剪掉最小的 filters。
这种简单性让方法非常容易实现,也让后续大量工作可以把它作为 baseline。
8.2 不依赖数据
L1 filter pruning 是 data-free 的。它只依赖训练好的模型权重,不需要额外校准数据,也不需要通过前向传播统计 activation。
这在一些数据不可访问、训练集难以获取或者隐私受限的场景下很有意义。
8.3 剪枝后结构规则
相比非结构化 weight pruning,这篇论文的 filter pruning 会直接生成更窄的网络。剪枝后的卷积仍然是标准稠密卷积,可以直接被 cuDNN、BLAS 等常规计算库加速。
这也是它比很多早期 weight pruning 更适合真实部署的原因。
8.4 对后续 channel pruning 影响很大
这篇论文实际上奠定了后续 channel pruning 的基本范式:
预训练模型
↓
计算通道 / filter 重要性
↓
删除低重要性结构
↓
构建更小网络
↓
fine-tuning 恢复精度
后来的很多方法虽然评分准则更复杂,比如基于 BN scaling factor、feature reconstruction、Taylor expansion、geometric median、rank、activation similarity 等,但整体流程仍然与这篇论文非常接近。
九、方法局限
9.1 L1 范数只是启发式指标
L1 范数小并不一定意味着 filter 不重要。一个 filter 的权重幅值较小,但可能捕获某些关键类别或关键纹理特征。相反,一个权重幅值较大的 filter,也可能与其他 filter 高度冗余。
因此,L1 范数是一种简单有效的启发式标准,但不是严格的理论重要性度量。
9.2 缺少全局最优剪枝策略
论文主要按层分析 sensitivity,然后设置不同层或不同 stage 的剪枝比例。这种方式需要人工经验。例如,哪些层跳过、哪些 stage 剪多少,仍然依赖实验观察。
后续很多工作都试图解决这个问题,例如自动搜索层剪枝率、全局排序、资源约束优化、强化学习剪枝、进化搜索剪枝等。
9.3 对复杂结构支持有限
论文虽然讨论了 ResNet 的剪枝约束,但整体方法仍然主要面向 CNN。对于 DenseNet、Inception、Transformer、ViT、LLM、VLM 等更复杂结构,简单 filter pruning 不能直接套用。
尤其在 Transformer 中,剪枝对象可能是 attention head、MLP hidden dimension、token、layer 或 KV cache;它们之间的依赖关系比 CNN channel 更复杂。
9.4 实验时代较早
这篇论文发表于 2017 年,实验主要集中在 VGG、ResNet 和 CIFAR/ImageNet。现在的模型规模、训练策略、归一化方式、硬件平台和部署场景都已经发生很大变化。因此,今天重新使用这类方法时,不能只看 FLOPs,还应同时评估 latency、memory、throughput、batch size 敏感性和硬件平台差异。
十、后续影响
这篇论文的影响主要体现在三个方面。
第一,它推动了剪枝研究从 非结构化权重剪枝 转向 结构化通道剪枝。后续大量 CNN 剪枝方法都默认以 channel/filter 为剪枝对象,而不是单个 weight。
第二,它提供了一个非常强的 baseline。很多后续论文在提出新剪枝准则时,都会与 L1-norm filter pruning 进行对比。即使今天看,这个 baseline 仍然有价值,因为它实现简单、成本低、可解释性强。
第三,它强化了"剪枝必须考虑真实加速"的意识。论文明确强调,不规则稀疏结构未必能带来硬件加速,而删除整个 filter 可以得到更小的稠密网络,更容易实现实际推理时间下降。
从研究脉络上看,这篇论文可以放在模型剪枝发展的一个关键节点上:
Optimal Brain Damage / Optimal Brain Surgeon
↓
非结构化 weight pruning / Deep Compression
↓
Pruning Filters for Efficient ConvNets
↓
Network Slimming / ThiNet / CP / FPGM / HRank / EagleEye
↓
ViT、Transformer、LLM、VLM 结构化剪枝
它不是最复杂的方法,但它提出了一个非常关键的问题:剪枝最终不是为了让权重矩阵看起来更稀疏,而是为了让模型真正更小、更快、更容易部署。
十一、一句话总结
《Pruning Filters for Efficient ConvNets》用最简单的 L1 范数准则剪掉整组卷积 filter,把 CNN 剪枝从不规则权重稀疏推进到规则结构压缩,是后续 channel pruning 和结构化剪枝方法的重要基础。