ResRep: Lossless CNN Pruning via Decoupling Remembering and Forgetting

一、论文基本信息

论文题目:ResRep: Lossless CNN Pruning via Decoupling Remembering and Forgetting

作者:Xiaohan Ding、Tianxiang Hao、Jianchao Tan、Ji Liu、Jungong Han、Yuchen Guo、Guiguang Ding

发表信息:ICCV 2021

论文链接:ICCV Open Access / arXiv

官方代码:DingXiaoH/ResRep

这篇论文发表于 ICCV 2021 ,ICCV Open Access 页面显示论文收录于 Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV), 2021, pp. 4510--4520 。论文提出 ResRep ,目标是实现 lossless channel pruning ,也就是在大幅降低 CNN FLOPs 的同时尽量不损失精度。论文摘要中明确指出,ResRep 将 CNN 重新参数化为 remembering partsforgetting parts:前者负责保持性能,后者负责学习剪枝。

官方代码仓库为 DingXiaoH/ResRep,README 中说明该仓库对应 ICCV 2021 论文,并提供 ResNet-50 / ImageNet 的剪枝流程;仓库介绍中也强调,ResRep 通过在训练中对 remembering parts 使用普通 SGD、对 forgetting parts 使用带 penalty gradients 的特殊更新规则,从而产生结构化稀疏,并最终转换回更窄的原始架构。


二、论文要解决的问题

传统 learning-based channel pruning 常用的做法是:对卷积核、BN scale 或 gate 加稀疏正则,让一部分通道逐渐变小,然后删除这些小通道。

典型形式是:

复制代码
任务损失 + 稀疏惩罚

例如:

复制代码
CrossEntropy + λ × Group Lasso
CrossEntropy + λ × L1
CrossEntropy + λ × BN gamma sparsity

这种范式的问题是:同一组参数既要负责"记住任务信息",又要负责"被稀疏正则推向 0"。

论文把这个矛盾称为 resistance-prunability trade-off

复制代码
强稀疏惩罚:
    通道更容易变成 0,prunability 高;
    但重要参数也会被压小,性能受损。

弱稀疏惩罚:
    对性能破坏小,resistance 高;
    但通道很难真正接近 0,剪枝不彻底。

论文明确指出,传统 penalty-based 方法中,performance-related loss 和 penalty loss 会相互竞争:如果惩罚过强,剩余通道也会被压得过小,表示能力受损;如果惩罚过弱,大多数通道只是"变小一点",但达不到可以完美剪掉的程度。

所以 ResRep 要解决的问题是:

复制代码
能不能让一部分参数专门负责保持性能,
另一部分参数专门负责产生可剪枝结构,
从而把 remembering 和 forgetting 解耦?

这就是标题里 Decoupling Remembering and Forgetting 的含义。


三、思想

ResRep 的核心思想可以概括为一句话:

在待剪卷积层后插入一个可被结构化稀疏化的 1×1 compactor,让原卷积继续"记住"任务信息,让 compactor 负责"忘记"冗余通道;训练结束后,再把原卷积、BN 和 compactor 等价合并成一个更窄的普通卷积网络。

它包含两个核心组件:

复制代码
Rep:
    Convolutional Re-parameterization
    用 1×1 compactor 把原始网络重参数化。

Res:
    Gradient Resetting
    只对 compactor 使用特殊梯度更新,让部分通道稳定趋近 0。

论文自己也明确写到,ResRep 包含两个关键组件:Convolutional Re-parameterizationGradient Resetting ;具体做法是在要剪枝的原卷积层后插入一个 1×1 conv compactor

直观理解如下:

复制代码
原始卷积:
    负责 remembering,即保持模型原有能力。

1×1 compactor:
    负责 forgetting,即学习哪些通道应该被压到 0。

训练结束:
    把 Conv-BN-Compactor 等价融合成更窄的普通 Conv。

这点和 RepVGG 一类结构重参数化方法很像:训练时有额外结构,部署时把额外结构合并掉,最终模型没有额外推理开销。


四、方法细节

4.1 普通通道剪枝形式

设某个卷积层输入通道数为 (C),输出通道数为 (D),卷积核为:

输入为:

输出为:

普通卷积可以写成:

其中 B(b)表示将 bias broadcast 到输出 feature map。论文第 3.1 节给出了这个卷积和通道剪枝的基本形式。

如果要剪掉第 (i) 层的一些输出通道,保留通道集合记为:

那么不仅要删除当前层输出通道,还要删除下一层对应输入通道:

论文也明确说明,剪枝会保留当前层的 surviving output channels,并保留下一个卷积层对应的 input channels;对应的 bias 或 BN 参数也要删除。


4.2 Convolutional Re-parameterization:

ResRep 在每个目标卷积层后插入一个 1×1 compactor

如果原卷积输出为 (D) 个通道,那么 compactor 也是 的 1×1 卷积。

初始化时:

也就是单位矩阵。

这样插入 compactor 后,模型输出和原模型完全相同:

复制代码
原始模型:
    Conv-BN

重参数化模型:
    Conv-BN-Compactor

如果 Compactor 初始化为单位矩阵:
    两者输出完全一致

论文明确说明,给定训练好的模型 (W),ResRep 构造重参数化模型 (\hat{W}),用原模型参数初始化 conv-BN,用 identity matrix 初始化 (Q),因此重参数化模型产生与原始模型相同的输出。

这一步非常关键,因为它保证:

复制代码
插入 compactor 不会破坏原模型性能;
后续训练可以从原模型等价点开始。

4.3 compactor 为什么能剪枝?

compactor 是一个 1×1 卷积,本质上做通道线性组合。

如果 (Q) 的某一行接近 0,那么该 compactor 输出的某个通道就接近 0。这个输出通道可以被删除。

所以 ResRep 的剪枝目标变成:

复制代码
不是直接让原卷积 K 的某些 filters 变成 0;
而是让 compactor Q 的某些输出通道变成 0。

这样做的好处是:

复制代码
原始卷积 K:
    继续负责保持性能。

Compactor Q:
    负责产生可剪结构。

这就是 remembering / forgetting 的解耦。


4.4 Conv-BN-Compactor 如何等价合并?

训练结束后,ResRep 不能把 compactor 留在模型里,否则会多一个 1×1 卷积,增加推理开销。

因此论文需要把:

复制代码
Conv + BN + 1×1 Compactor

等价转换成:

复制代码
一个更窄的 Conv

论文先把 Conv-BN 融合成一个带 bias 的卷积,然后再把 1×1 compactor 合并进原卷积权重中。论文公式中给出,经过 BN 融合后的卷积权重和 bias 可以再与 (Q') 合并,最终构造出新的 (K') 和 (b')。其中核心公式为:

这里 T 表示转置操作, 表示融合 BN 后的卷积权重和 bias。论文明确说明,1×1 compactor 只做 cross-channel recombination,因此可以被合并进原卷积核;实际部署时,作者保存转换后的权重,并构造一个没有 BN、具有更窄层宽度的原始架构模型用于测试和部署。

所以最终模型没有 compactor,也没有额外 1×1 分支。


4.5 传统 penalty-based pruning 的问题

传统方法通常写成:

如果使用 Group Lasso,则:

其梯度为:

这个式子说明:每个 filter 同时受到两种力量影响:

复制代码
任务梯度:
    想让 filter 保持任务性能。

稀疏惩罚梯度:
    想把 filter 推向 0。

论文指出,重要通道会被任务梯度"拉回来",不重要通道则更容易被惩罚项推向 0;但这会带来前面说的 dilemma:强惩罚伤性能,弱惩罚剪不干净。


4.6 Gradient Resetting:梯度重置

ResRep 的关键创新是 Gradient Resetting

它不把稀疏惩罚直接加进 loss,而是正常前向和反向计算:

然后对 compactor 的梯度做手动修改:

当 (m=0) 时:

也就是说,这个通道不再接收任务损失梯度,只被惩罚梯度持续推向 0。

论文明确说明,ResRep 不向目标函数添加额外项,而是正常求出梯度后,手动应用 mask、添加 penalty gradients,再用修改后的梯度进行 SGD 更新;当 (m=0) 时,performance gradient 不再和 penalty gradient 竞争,因此即使 很小,也能让该通道持续向 0 移动。

直观理解:

复制代码
m = 1:
    这个 compactor 通道还在"记任务"。

m = 0:
    这个 compactor 通道开始"忘记",只往 0 走。

4.7 为什么不能直接对原卷积做 Gradient Resetting?

如果直接对原卷积 (K) 做 Gradient Resetting,被 mask 的通道会失去任务梯度。

这意味着:

复制代码
原始卷积中的某些参数被迫忘记;
它们不再接收监督信息;
可能损害模型性能。

ResRep 用 compactor 解决这个问题:

复制代码
原卷积 K:
    仍然接收正常任务梯度;
    继续 remembering。

compactor Q:
    被选择的通道执行 Gradient Resetting;
    负责 forgetting。

论文明确解释,直接把 Res 用在 conv kernels 上会丢弃一些用于保持性能的监督梯度;而 Rep 正好解决这个问题,因为 ResRep 只强迫 compactors "forget",其他层仍然专注于 remembering。

这就是 ResRep 的核心逻辑。


4.8 如何决定哪些 compactor 通道开始 forgetting?

在训练重参数化模型时,ResRep 会给 compactors 加 Lasso gradients。

经过若干 epoch 后,某些 compactor 通道的范数会变小。论文认为:

复制代码
||Q_j,:|| 越小:
    第 j 个通道越适合被剪。

训练中会逐步选择 (t) 值最低的通道,把它们的 mask 设置为 0,然后这些通道在 Gradient Resetting 下稳定趋近于 0。

在实验设置中,论文对 ResNet-50 / MobileNet 使用相同超参数:(\lambda=10^{-4}),batch size 为 256,初始学习率 0.01,cosine annealing 训练 180 epochs;先 warm-up 5 epochs,然后选取 4 个最低 (t) 值的通道,每 200 个 batches 再多选 4 个,直到达到目标 FLOPs reduction。

这说明 ResRep 不是一次性剪枝,而是:

复制代码
先 warm-up
    ↓
逐步选择低重要性 compactor 通道
    ↓
Gradient Resetting 让它们趋近 0
    ↓
达到目标 FLOPs 后转换为窄模型

五、完整算法流程

ResRep 的整体流程可以写成:

复制代码
输入:
    一个训练好的 CNN
    目标 FLOPs reduction
    目标剪枝层集合

Step 1:
    对每个目标卷积层插入 1×1 compactor。
    compactor 初始化为单位矩阵。

Step 2:
    原卷积和 BN 继承预训练模型参数。
    此时重参数化模型和原模型输出完全一致。

Step 3:
    正常训练模型,使用原任务 loss。
    原卷积、BN、分类头等正常 SGD 更新。

Step 4:
    对 compactors 应用 Gradient Resetting:
        对未选中通道:
            使用任务梯度 + penalty gradient。
        对选中待剪通道:
            重置任务梯度,只保留 penalty gradient。

Step 5:
    根据 compactor 通道范数逐步选择待剪通道。
    被选中的通道 mask 设为 0。

Step 6:
    训练继续进行,待剪 compactor 通道逐渐接近 0。

Step 7:
    达到目标 FLOPs 后,删除 close-to-zero 通道。

Step 8:
    将 Conv-BN-Compactor 等价转换为更窄的普通卷积。

Step 9:
    得到最终部署模型。

论文 Algorithm 1 也描述了类似过程:输入 well-trained model,构造带 compactors 的重参数化模型,compactors 初始化为 identity,前向计算原始 objective,随后只对 compactors 应用 Gradient Resetting,再更新模型,最后转换为更窄模型。


六、关键公式

6.1 原始卷积


6.2 Conv-BN 融合

对于带 BN 的卷积层:


6.3 通道剪枝


6.4 传统 penalty-based pruning


6.5 Group Lasso


6.6 传统 penalty 梯度


6.7 Gradient Resetting


6.8 Conv-BN-Compactor 合并


七、实验设置

论文主要在 ImageNetCIFAR-10 上验证。ImageNet 实验包括 ResNet-50MobileNet ;CIFAR-10 实验包括 ResNet-56ResNet-110。论文使用 torchvision 官方 ResNet-50 作为基线,其 Top-1 为 76.15%;MobileNet 从头训练,Top-1 为 70.78%;CIFAR-10 使用标准数据增强,包括 padding 到 (40\times40)、random crop 和 flip。

FLOPs 统计方面,论文将 ResNet-50 记为 4.09G FLOPs,MobileNet 为 569M,ResNet-56 / ResNet-110 分别为 126M / 253M。

官方代码仓库中提供 ResNet-50 / ImageNet 剪枝命令,说明流程包括下载并转换 torchvision ResNet-50 权重、运行 rr/exp_resrep.py、保存剪枝后的 finish_converted.hdf5,并可显示剪枝模型的权重名称和形状。


八、实验结果解读

8.1 ResNet-50 / ImageNet:54.54% FLOPs reduction,无 Top-1 精度下降

ResRep 最重要的实验结果是 ResNet-50 / ImageNet。

论文报告:

复制代码
原始 ResNet-50:
    Top-1 = 76.15%
    Top-5 = 92.87%

ResRep:
    Pruned Top-1 = 76.15 ± 0.01%
    Pruned Top-5 = 92.89 ± 0.04%
    FLOPs reduction = 54.54%

也就是说,在减少 54.54% FLOPs 的情况下,Top-1 没有下降,Top-5 还略高。论文摘要也强调,它把标准 ResNet-50 从 76.15% ImageNet accuracy 剪到只剩约 45% FLOPs,且没有 accuracy drop。

这就是论文标题中 Lossless CNN Pruning 的主要依据。


8.2 更高压缩率下仍优于 HRank / LFPC 等方法

ResRep 还报告了更高 FLOPs reduction 的结果。

在 ResNet-50 / ImageNet 上:

复制代码
56.11% FLOPs reduction:
    Top-1 = 75.97 ± 0.02%
    Top-5 = 92.75 ± 0.01%

62.10% FLOPs reduction:
    Top-1 = 75.30 ± 0.01%
    Top-5 = 92.47 ± 0.01%

论文表 1 中显示,在 62.10% FLOPs reduction 下,HRank 的 Top-1 为 71.98%,而 ResRep 为 75.30%;在 60.8% FLOPs reduction 下,LFPC 的 Top-1 为 74.46%,ResRep 在相近甚至更高压缩率下仍有更好结果。

这说明 ResRep 的优势不仅在轻度剪枝,在中高压缩率下也很明显。


8.3 MobileNet / ImageNet:轻量网络上仍有效

MobileNet 本身已经是轻量网络,因此剪枝更难。

论文表 1 中,MetaPruning 在 73.81% FLOPs reduction 下 Top-1 为 66.1%;ResRep 在 73.91% FLOPs reduction 下 Top-1 达到 68.02%,比 MetaPruning 高 1.77%。论文正文也明确指出,在 MobileNet 上 ResRep outperform MetaPruning by 1.77%。

这点很重要,因为很多剪枝方法在 VGG / ResNet 上有效,但在 MobileNet 这类高度压缩结构上很难继续剪。


8.4 ResNet-56 / CIFAR-10:52.91% FLOPs reduction,0% 精度下降

在 CIFAR-10 上,ResRep 测试了 ResNet-56 / ResNet-110。

ResNet-56:

复制代码
Base Top-1 = 93.71%
Pruned Top-1 = 93.71 ± 0.02%
FLOPs reduction = 52.91%
Top-1 drop = 0.00%

ResNet-110:

复制代码
Base Top-1 = 94.64%
Pruned Top-1 = 94.62 ± 0.04%
FLOPs reduction = 58.21%
Top-1 drop = 0.02%

论文表 2 中显示,ResRep 在 ResNet-56 / ResNet-110 上也取得了非常小的精度下降,并优于 FPGM、SFP、LFPC、HRank 等多个对比方法。


8.5 自动发现不同数据集上的层宽结构

ResRep 不需要预先指定每层剪枝比例。给定全局 FLOPs 目标,它会通过 compactor 的稀疏化过程自动决定各层最终宽度。

论文 Figure 3 和正文指出,ResRep 在 ResNet-50 / MobileNet 上倾向于保留更多高层通道,而在 ResNet-56 / CIFAR-10 上会更激进地剪最后几个 blocks。作者解释说,ImageNet 任务更难,高层语义特征对拟合能力很重要;而 ResNet-56 在 CIFAR-10 上可能存在过拟合,因此后层可以更激进剪枝。

这说明 ResRep 不是简单均匀缩小网络,而是能根据任务和网络自动形成非均匀宽度结构。


8.6 消融实验:Rep 和 Res 都重要

论文做了多组消融:

复制代码
Only Rep:
    只使用 re-parameterization,但不用 Gradient Resetting。

Only Res:
    直接对原卷积做 Gradient Resetting。

ResRep:
    同时使用 Rep 和 Res。

结果显示,完整 ResRep 最好。论文表 3 中还比较了:

复制代码
Base model fine-tuned
Uniformly shrunk baseline
Pruned-finetuned baseline
Vector re-parameterization
Momentum on compactors = 0.9

其中 uniformly shrunk baseline 在 55.4% FLOPs reduction 下 Top-1 为 74.39%;pruned-finetuned baseline 在 54.5% FLOPs reduction 下 Top-1 为 74.66%;而 ResRep 在相近压缩率下能达到 76.15% 或 75.97%。

这说明 ResRep 的效果不是简单来自训练设置,也不是只来自更长 fine-tuning,而是来自 Compactor re-parameterization + Gradient Resetting 的组合。


九、方法优点

9.1 记忆和遗忘解耦

ResRep 最大贡献是把传统稀疏训练中耦合在同一组参数上的两个目标分开:

复制代码
原卷积:
    remembering,负责保持性能。

compactor:
    forgetting,负责产生剪枝结构。

这直接缓解了传统 penalty-based pruning 的 resistance-prunability trade-off。


9.2 结构重参数化思想清晰

训练时插入 compactor,部署时等价合并回更窄的普通卷积。

最终模型没有额外 1×1 卷积,没有特殊 mask,也没有额外推理分支。论文明确说明,转换后模型具有原始架构形式,但层更窄,可以直接用于测试和部署。


9.3 不需要手动指定每层剪枝率

ResRep 只需要全局 FLOPs reduction target,然后通过 compactor 通道选择自动形成每层最终宽度。论文指出,ResRep 在没有任何 prior knowledge 的情况下发现合适的最终结构。


9.4 对高压缩率 ResNet-50 实现近似无损

在 ResNet-50 / ImageNet 上,54.54% FLOPs reduction 下 Top-1 0.00% drop,这是 ResRep 最有代表性的结果。


9.5 对 MobileNet 等轻量模型也有效

MobileNet 本身冗余更少,但 ResRep 在 73.91% FLOPs reduction 下仍显著优于 MetaPruning。


十、方法局限

10.1 训练流程比简单剪枝复杂

ResRep 需要:

复制代码
插入 compactor
初始化 identity
实现 Gradient Resetting
动态选择待剪通道
维护 mask
训练后做等价转换

相比 L1 / FPGM / HRank 这类排序后剪枝方法,工程实现复杂度更高。


10.2 依赖训练过程,不是后训练剪枝

ResRep 不是直接拿一个预训练模型算重要性并剪掉,而是需要进行较长的 re-parameterized training。例如 ResNet-50 / MobileNet 实验中使用 180 epochs 的训练流程。

因此它不适合"完全无训练成本"的剪枝需求。


10.3 对不同结构需要设计目标层

论文中 ResNet-50 主要剪 residual block 中第一个 (1\times1) 和第二个 (3\times3) 卷积层;MobileNet 剪 non-depthwise conv;ResNet-56/110 剪 residual block 的第一层。

也就是说,不同网络结构仍需要决定哪些层适合插入 compactor 和剪枝。


10.4 "Lossless" 依赖实验设置

ResRep 的 lossless 主要指在 ResNet-50 / ImageNet 的 54.54% FLOPs reduction 下 Top-1 无下降。更高压缩率下仍会出现精度下降,例如 62.10% FLOPs reduction 时 Top-1 drop 为 0.85%。

所以不能泛化理解为"任何模型任何压缩率都无损"。


10.5 对 Transformer / LLM 不能直接照搬

ResRep 原始方法面向 CNN 通道剪枝,依赖卷积层后插入 1×1 compactor,并通过卷积重参数化合并。

对于 ViT、LLM、VLM,剪枝对象可能是:

复制代码
attention heads
MLP hidden neurons
tokens
layers
vision tokens
KV cache channels

但它的思想可以迁移:

复制代码
给结构单元插入可合并的 compactor / adapter
    ↓
原模块负责 remembering
    ↓
compactor 负责 forgetting
    ↓
训练后把 compactor 等价合并或删除

这对后续结构重参数化剪枝、head pruning、MLP neuron pruning 都有启发。


十二、一句话总结

《ResRep: Lossless CNN Pruning via Decoupling Remembering and Forgetting》提出通过结构重参数化在卷积层后插入 1×1 compactor,让原卷积负责保持性能、compactor 负责产生可剪稀疏结构,并通过 Gradient Resetting 让待剪 compactor 通道稳定趋近于 0;训练结束后,Conv-BN-Compactor 被等价合并为更窄的普通卷积网络,从而在 ResNet-50 / ImageNet 上实现 54.54% FLOPs reduction 且 Top-1 无下降。

相关推荐
不要葱花1 小时前
接下来我将复现 10 篇强化学习算法:第 3 篇,一杯喜茶,搞定 Search-R1
算法·面试
geovindu1 小时前
CSharp: Recursion Algorithm
开发语言·后端·算法·c#·递归算法
卡提西亚1 小时前
leetcode-239. 滑动窗口最大值
算法·leetcode·职场和发展
ShallWeL2 小时前
【机器学习】(20)—— 类别不平衡
人工智能·算法·机器学习
明志数科2 小时前
具身智能数据标准化:从碎片化接口到统一工作组的技术路径
人工智能·算法·机器学习
旖-旎2 小时前
LeetCode 494:目标和(动态规划/01背包问题)—— 题解
c++·算法·leetcode·动态规划·01背包
spssau2 小时前
一文学会结构方程模型:从模型搭建、路径图绘制到不达标调整,实操全流程
人工智能·python·算法
OpenApi.cc2 小时前
video-caption-cnn
人工智能·神经网络·cnn
zzz_23682 小时前
【Java实习面试算法冲刺】总复盘
java·算法·面试