一、论文基本信息论文题目Soft Filter Pruning for Accelerating Deep Convolutional Neural Networks简称SFP作者Yang He、Guoliang Kang、Xuanyi Dong、Yanwei Fu、Yi Yang发表信息IJCAI 2018论文页面论文链接https://arxiv.org/abs/1808.06866官方代码https://github.com/he-y/soft-filter-pruningIJCAI 官方页面显示该论文发表于Proceedings of the Twenty-Seventh International Joint Conference on Artificial Intelligence页码为2234–2240DOI 为10.24963/ijcai.2018/309。官方页面和 arXiv 摘要都明确指出SFP 的核心特点是被剪掉的 filters 在后续训练中仍然可以被更新而不是永久固定为 0。官方 GitHub 仓库提供了 PyTorch 实现README 中说明该实现对应 IJCAI 2018 论文并给出了 ImageNet 上 ResNet-18/34/50/101/152 的 pruning training 脚本、CIFAR-10 训练脚本、推理 pruned model 以及导出 small model 的流程。二、论文要解决的问题在 SFP 之前很多 filter pruning 方法采用的是Hard Filter PruningHFP思路。典型流程是训练一个大模型 ↓ 根据某种重要性指标选择不重要 filters ↓ 把这些 filters 删除或固定为 0 ↓ 继续 fine-tuning 剩余网络这种方法的问题在于一旦某个 filter 被剪掉它就失去了继续参与训练的机会。如果剪枝判断有误这个 filter 即使后面可能变得有用也无法恢复。SFP 认为这种硬剪枝存在两个问题。第一模型容量被过早削弱。硬剪枝直接删除 filters训练过程中可优化的参数空间变小模型恢复能力下降。第二过度依赖预训练模型。如果剪枝后被删除的 filters 无法恢复那么剪枝过程就非常依赖初始预训练模型的质量。预训练模型不好剪枝效果可能很差。SFP 要解决的问题就是能不能在训练过程中“暂时剪掉”不重要 filters 但又允许它们继续更新 从而降低剪枝误判带来的不可逆损失论文摘要明确指出SFP 相比之前方法有两个优势一是被剪 filters 仍能更新因此优化空间更大二是对预训练模型依赖更小甚至可以从头训练并同时剪枝。三、核心思想SFP 的核心思想可以概括为一句话每个 epoch 后把低范数 filters 置零但这些 filters 在下一轮训练中仍然参与梯度更新最终训练结束后再真正删除趋近于 0 的 filters。这就是所谓的Soft Filter Pruning。它和传统硬剪枝的区别是Hard Filter Pruning: 选中 filter ↓ 永久删除 / 永久置零 ↓ 后续训练不再更新 Soft Filter Pruning: 选中 filter ↓ 暂时置零 ↓ 后续训练仍然可以更新 ↓ 下一次 pruning 时重新评估因此SFP 中的“剪枝”不是一次性不可逆操作而是一个动态训练过程。一个 filter 即使在某个 epoch 被置零它在下一次反向传播中仍然可以被梯度更新。如果它重新变得重要后续就可能不再被剪掉。这使得 SFP 的剪枝过程更像是反复压制低重要性 filters ↓ 让模型自己重新分配表达能力 ↓ 最终低重要性 filters 稳定趋近于 0而不是简单地一次判断 ↓ 永久删除四、方法细节4.1 Filter 重要性Lp 范数SFP 使用 filter 的范数衡量重要性。对于第 (i) 层第 (j) 个 filter记为它的范数为SFP 的直觉和 L1 Filter Pruning 类似filter 范数越小 说明它的响应能力可能越弱 因此优先被剪。不过SFP 和普通 L1 filter pruning 的关键区别不在于重要性指标而在于剪枝后的处理方式。4.2 每个 epoch 后执行 soft pruningSFP 的训练过程不是先训练完再剪而是在训练过程中周期性剪枝。在每个 epoch 结束后对指定卷积层执行1. 计算该层所有 filters 的 Lp 范数 2. 按范数从小到大排序 3. 选择最小的 m 个 filters 4. 将这些 filters 的权重置为 0 5. 下一轮训练继续更新所有 filters包括刚刚置零的 filters。如果某一层有个 filters剪枝率为那么该层每次选择个低范数 filters 置零。执行 soft pruning 后注意这里的 (M_{i,j}0) 只是把当前 filter 暂时置零并不意味着这个 filter 从计算图中消失。4.3 被置零的 filter 仍然参与训练这是 SFP 最核心、也是最容易和普通剪枝混淆的地方。在 hard pruning 中被剪掉的 filter 通常不再更新pruned filter 0 gradient update disabled而在 SFP 中被剪掉的 filter 下一轮仍然会被优化器更新pruned filter 0 gradient update enabled也就是说即使某个 filter 在 epoch (t) 被置零在 epoch (t1) 中它仍然可以通过梯度下降变成非零。因此SFP 保留了完整模型的优化空间。论文摘要中明确强调更新已剪 filters 会给模型更大的优化空间而不是像固定置零那样缩小模型容量。这也是 SFP 中 “soft” 的含义。4.4 SFP 为什么能从头训练很多传统剪枝方法依赖预训练模型。因为它们需要先有一个训练好的网络然后判断哪些 filters 不重要。SFP 则可以从头开始训练并同时剪枝。原因是即使训练初期的 filter 范数判断不准确被置零的 filter 后续仍然可以被更新和恢复。因此早期错误剪枝不会造成不可逆损失。所以 SFP 的流程可以是随机初始化模型 ↓ 正常训练一个 epoch ↓ soft pruning 低范数 filters ↓ 继续训练所有 filters ↓ 再次 soft pruning ↓ 循环直到训练结束官方 GitHub README 也说明ImageNet pruning training 默认从头训练如果希望使用预训练模型则需要额外指定--use_pretrain。这点非常重要。它说明 SFP 不只是一个 post-training pruning 方法也可以看作一种带动态结构正则的训练方法。4.5 训练结束后再真正构建小模型在训练过程中SFP 只是把部分 filters 置零但模型结构仍然保持原始大小。这意味着训练阶段的模型仍然是大模型训练阶段 filter 被置零 但结构未变 参数张量形状未变真正推理加速需要在训练结束后把最终为 0 或被选中的 filters 物理删除然后构建一个更窄的小模型。官方仓库 README 中也给出了两种推理方式一种是带 zeros 的 pruned model 推理另一种是不带 zeros 的 pruned model 推理并提供了get_small.sh用于导出不含 zero filters 的 small model。因此SFP 的完整流程可以理解为训练阶段 soft pruning只置零不改结构 部署阶段 hard removal真正删 filter构建小模型4.6 SFP 与 HFP 的区别SFP 论文最核心的对比对象就是 HFP。可以用下面这张表理解方法剪枝时机被剪 filter 是否继续更新模型容量对预训练依赖HFP训练后或阶段性剪枝否变小强SFP训练过程中周期性剪枝是训练中保持完整较弱HFP 的逻辑是这个 filter 当前不重要 ↓ 直接删掉SFP 的逻辑是这个 filter 当前不重要 ↓ 先压成 0 ↓ 后续如果有用还可以恢复这让 SFP 在训练过程中拥有更强的容错性。4.7 对 ResNet 的处理SFP 特别适合 ResNet 这类带残差连接的网络。传统 hard pruning 在 ResNet 上比较麻烦因为 residual addition 要求分支输出维度一致。如果直接删除某些 filters很容易造成 shortcut 分支和 residual 分支维度不匹配。SFP 在训练阶段不改变张量形状只把部分 filters 置零因此不会破坏残差连接的维度一致性。这也是它在 ResNet 上实现比较自然的原因训练阶段 所有层通道数保持不变 residual add 不会维度错误 训练结束 再根据最终剪枝结果构建小模型官方仓库的 ImageNet 脚本覆盖 ResNet-18、ResNet-34、ResNet-50、ResNet-101 和 ResNet-152说明其实现重点就是 ResNet 系列。六、算法流程SFP 的整体算法可以写成输入 网络模型 W 每层剪枝率 P_i 训练 epoch 数 T for epoch 1 ... T: 1. 正常训练网络一个 epoch 2. 对每个待剪卷积层 a. 计算所有 filters 的 Lp 范数 b. 选择范数最小的 m_i 个 filters c. 将这些 filters 置零 3. 下一轮继续训练所有 filters 训练结束后 1. 根据最终 zero filters 构建 compact model 2. 删除对应 filters 和 feature maps 3. 用小模型进行推理这就是 SFP 的核心训练中软剪枝部署时硬删除。七、实验设置7.1 数据集SFP 主要在两个数据集上验证CIFAR-10 ILSVRC-2012 / ImageNetarXiv 和 IJCAI 页面都说明该方法用于加速深度 CNN 推理并在 ILSVRC-2012 上取得了较强结果。7.2 网络结构论文和官方代码重点涉及 ResNet 系列。官方仓库提供了 ImageNet 上 ResNet-18、ResNet-34、ResNet-50、ResNet-101、ResNet-152 的 pruning training 命令也提供了 CIFAR-10 上 ResNet 的训练脚本。可以概括为CIFAR-10: ResNet-20 ResNet-32 ResNet-56 ResNet-110 ImageNet: ResNet-18 ResNet-34 ResNet-50 ResNet-101 ResNet-1527.3 实现环境官方 GitHub 仓库 README 中给出的依赖包括Python 3.6 PyTorch 0.3.1 TorchVision 0.2.0仓库说明其代码基于 ResNeXt-DenseNet 实现并提供了 ImageNet、CIFAR-10、推理和导出小模型相关脚本。八、实验结果解读8.1 CIFAR-10ResNet-110 可以约 2× 加速IJCAI PDF 搜索结果显示SFP 在 CIFAR-10 上可以将 ResNet-110 加速约 2 倍并带来约 4% 的相对精度提升。这个结果说明SFP 不只是减少计算量还可能通过训练过程中的 soft pruning 起到正则化作用。原因可以这样理解每个 epoch 都压制低范数 filters ↓ 迫使模型把信息集中到更稳定、更有效的 filters ↓ 最终模型可能泛化更好这和 Network Slimming 中 BN gamma 稀疏正则有点类似剪枝过程本身也起到了结构正则化的作用。8.2 ImageNetResNet-101 上减少 42% 以上 FLOPsIJCAI 官方页面和 arXiv 摘要都指出在 ILSVRC-2012 上SFP 在 ResNet-101 上减少了超过 42% FLOPs并且 top-5 accuracy 还有 0.2% 提升。这个结果非常关键因为 ImageNet ResNet-101 是比 CIFAR-10 更有说服力的大规模实验。它说明 SFP 不只是小数据集上的技巧也可以扩展到深层大模型。8.3 从头训练也能剪枝SFP 的另一个重要实验结论是它可以从随机初始化开始训练并剪枝。这是它区别于传统剪枝方法的重要点。很多早期剪枝方法需要先训练原始大模型 ↓ 再剪枝 ↓ 再 fine-tuning而 SFP 可以随机初始化 ↓ 训练过程中周期性 soft pruning ↓ 训练结束得到可剪模型论文摘要明确说较大的模型容量使得 SFP 可以从头训练并同时剪枝相比之下许多之前的 filter pruning 方法依赖预训练模型来保证性能。这一点和后来的Rethinking the Value of Network Pruning有很强关联。后者质疑“继承大模型权重是否真的必要”而 SFP 已经在方法设计上尝试降低对预训练模型的依赖。8.4 为什么 SFP 比 HFP 稳定HFP 的问题是不可逆。如果某一轮误删了一个 filter那么它后续无法恢复。这在训练早期尤其危险因为模型尚未充分收敛filter 的当前范数不一定可靠。SFP 的稳定性来自低范数 filter 只是暂时置零 ↓ 下一轮仍然可以被梯度更新 ↓ 如果它对任务有用可以重新变大因此SFP 对剪枝误判更鲁棒。这种思想后来也被很多渐进式剪枝方法继承例如 ASFP、GHFP 等都围绕“软剪枝、渐进剪枝、硬剪枝之间的关系”继续发展。九、方法优点9.1 剪枝误判代价更低SFP 最大的优点就是被剪掉的 filter 仍然可以恢复。这让剪枝过程不再是一次性决策而是训练过程中的反复筛选。9.2 保持更大的优化空间因为所有 filters 都继续参与训练所以 SFP 在训练阶段仍然保留原模型的参数空间。论文摘要明确强调这比固定剪掉 filters 的方法有更大的 model capacity 和 optimization space。9.3 对预训练模型依赖更小SFP 可以从头训练并剪枝不一定需要先训练一个高精度大模型。这在训练流程上更简单也减少了“预训练模型质量”对剪枝效果的影响。9.4 适合 ResNet 等残差网络训练阶段不改变通道数因此不会破坏 residual addition 的维度一致性。对 ResNet 这种多分支结构来说这是非常实用的优点。9.5 最终仍能得到规则稠密小模型虽然训练阶段只是置零但部署阶段可以真正删除 filters构建更窄的 dense network。因此它不依赖稀疏计算库可以获得结构化剪枝的真实加速潜力。十、方法局限10.1 训练阶段没有真正减少计算量SFP 在训练过程中只是把部分 filters 置零但网络结构还没有改变。因此训练阶段的前向和反向计算仍然接近原始大模型。真正加速发生在训练结束后导出小模型时。10.2 重要性准则仍然比较简单SFP 使用 filter 的 (L_p) 范数选择要置零的 filters。这个指标简单高效但仍然继承了范数剪枝的局限低范数 filter 不一定不重要 高范数 filter 不一定不可替代。后续 FPGM 就专门指出单纯依赖 “smaller-norm-less-important” 假设并不总是成立。10.3 每层剪枝率需要人工指定SFP 通常需要给定每层 pruning rate。它没有自动决定哪些层应该多剪 哪些层应该少剪 整体 FLOPs 约束下怎么分配剪枝率这和后来的 AutoSlim、AMC、硬件感知剪枝相比仍然不够自动化。10.4 最终小模型构建仍需要结构处理训练阶段置零很简单但部署阶段要真正删除 filters还需要同步删除当前层输出 filters 下一层输入 channels BN 参数 残差结构中的相关通道官方代码中也专门提供了导出 small model 的脚本说明这一步仍然需要额外工程处理。10.5 不直接适用于 Transformer / LLMSFP 主要针对 CNN filter pruning。对于 ViT、LLM、VLM剪枝对象通常是attention heads MLP hidden neurons tokens layers KV cache vision tokens“soft pruning 后仍可更新”的思想可以迁移但原始 SFP 不能直接照搬到这些结构上。十一、后续影响SFP 对后续剪枝研究的影响主要体现在三个方面。第一它把 filter pruning 从“剪掉就不可恢复”的硬决策变成了“训练过程中可恢复”的软决策。这个思想后来影响了渐进剪枝、动态剪枝和可恢复剪枝等方向。第二它降低了剪枝对预训练模型的依赖。SFP 从方法上支持从头训练并剪枝这和后来重新思考剪枝权重价值的研究形成了呼应。第三它推动了 SFP 系列后续工作例如Asymptotic Soft Filter PruningASFP。官方仓库 README 也提到该工作的期刊版本Asymptotic Soft Filter Pruning for Deep Convolutional Neural Networks已发布。从专栏脉络上看SFP 可以放在这里Pruning Filters for Efficient ConvNets ↓ ThiNet ↓ Channel Pruning ↓ Network Slimming ↓ NISP ↓ DCP ↓ SFP ↓ FPGM ↓ Rethinking the Value of Network Pruning如果说早期 filter pruning 主要回答的是哪些 filters 应该被删除那么 SFP 进一步提出即使某个 filter 当前不重要 也不应该立刻永久删除 可以先软置零让训练过程决定它是否还有机会恢复。这就是它最重要的贡献。十二、一句话总结《Soft Filter Pruning for Accelerating Deep Convolutional Neural Networks》提出在训练过程中周期性将低范数 filters 置零、但仍允许这些 filters 继续被梯度更新的软剪枝机制从而降低剪枝误判的不可逆损失减少对预训练模型的依赖并最终导出规则稠密的小模型用于推理加速。
模型剪枝经典论文精读:Soft Filter Pruning for Accelerating Deep Convolutional Neural Networks
一、论文基本信息论文题目Soft Filter Pruning for Accelerating Deep Convolutional Neural Networks简称SFP作者Yang He、Guoliang Kang、Xuanyi Dong、Yanwei Fu、Yi Yang发表信息IJCAI 2018论文页面论文链接https://arxiv.org/abs/1808.06866官方代码https://github.com/he-y/soft-filter-pruningIJCAI 官方页面显示该论文发表于Proceedings of the Twenty-Seventh International Joint Conference on Artificial Intelligence页码为2234–2240DOI 为10.24963/ijcai.2018/309。官方页面和 arXiv 摘要都明确指出SFP 的核心特点是被剪掉的 filters 在后续训练中仍然可以被更新而不是永久固定为 0。官方 GitHub 仓库提供了 PyTorch 实现README 中说明该实现对应 IJCAI 2018 论文并给出了 ImageNet 上 ResNet-18/34/50/101/152 的 pruning training 脚本、CIFAR-10 训练脚本、推理 pruned model 以及导出 small model 的流程。二、论文要解决的问题在 SFP 之前很多 filter pruning 方法采用的是Hard Filter PruningHFP思路。典型流程是训练一个大模型 ↓ 根据某种重要性指标选择不重要 filters ↓ 把这些 filters 删除或固定为 0 ↓ 继续 fine-tuning 剩余网络这种方法的问题在于一旦某个 filter 被剪掉它就失去了继续参与训练的机会。如果剪枝判断有误这个 filter 即使后面可能变得有用也无法恢复。SFP 认为这种硬剪枝存在两个问题。第一模型容量被过早削弱。硬剪枝直接删除 filters训练过程中可优化的参数空间变小模型恢复能力下降。第二过度依赖预训练模型。如果剪枝后被删除的 filters 无法恢复那么剪枝过程就非常依赖初始预训练模型的质量。预训练模型不好剪枝效果可能很差。SFP 要解决的问题就是能不能在训练过程中“暂时剪掉”不重要 filters 但又允许它们继续更新 从而降低剪枝误判带来的不可逆损失论文摘要明确指出SFP 相比之前方法有两个优势一是被剪 filters 仍能更新因此优化空间更大二是对预训练模型依赖更小甚至可以从头训练并同时剪枝。三、核心思想SFP 的核心思想可以概括为一句话每个 epoch 后把低范数 filters 置零但这些 filters 在下一轮训练中仍然参与梯度更新最终训练结束后再真正删除趋近于 0 的 filters。这就是所谓的Soft Filter Pruning。它和传统硬剪枝的区别是Hard Filter Pruning: 选中 filter ↓ 永久删除 / 永久置零 ↓ 后续训练不再更新 Soft Filter Pruning: 选中 filter ↓ 暂时置零 ↓ 后续训练仍然可以更新 ↓ 下一次 pruning 时重新评估因此SFP 中的“剪枝”不是一次性不可逆操作而是一个动态训练过程。一个 filter 即使在某个 epoch 被置零它在下一次反向传播中仍然可以被梯度更新。如果它重新变得重要后续就可能不再被剪掉。这使得 SFP 的剪枝过程更像是反复压制低重要性 filters ↓ 让模型自己重新分配表达能力 ↓ 最终低重要性 filters 稳定趋近于 0而不是简单地一次判断 ↓ 永久删除四、方法细节4.1 Filter 重要性Lp 范数SFP 使用 filter 的范数衡量重要性。对于第 (i) 层第 (j) 个 filter记为它的范数为SFP 的直觉和 L1 Filter Pruning 类似filter 范数越小 说明它的响应能力可能越弱 因此优先被剪。不过SFP 和普通 L1 filter pruning 的关键区别不在于重要性指标而在于剪枝后的处理方式。4.2 每个 epoch 后执行 soft pruningSFP 的训练过程不是先训练完再剪而是在训练过程中周期性剪枝。在每个 epoch 结束后对指定卷积层执行1. 计算该层所有 filters 的 Lp 范数 2. 按范数从小到大排序 3. 选择最小的 m 个 filters 4. 将这些 filters 的权重置为 0 5. 下一轮训练继续更新所有 filters包括刚刚置零的 filters。如果某一层有个 filters剪枝率为那么该层每次选择个低范数 filters 置零。执行 soft pruning 后注意这里的 (M_{i,j}0) 只是把当前 filter 暂时置零并不意味着这个 filter 从计算图中消失。4.3 被置零的 filter 仍然参与训练这是 SFP 最核心、也是最容易和普通剪枝混淆的地方。在 hard pruning 中被剪掉的 filter 通常不再更新pruned filter 0 gradient update disabled而在 SFP 中被剪掉的 filter 下一轮仍然会被优化器更新pruned filter 0 gradient update enabled也就是说即使某个 filter 在 epoch (t) 被置零在 epoch (t1) 中它仍然可以通过梯度下降变成非零。因此SFP 保留了完整模型的优化空间。论文摘要中明确强调更新已剪 filters 会给模型更大的优化空间而不是像固定置零那样缩小模型容量。这也是 SFP 中 “soft” 的含义。4.4 SFP 为什么能从头训练很多传统剪枝方法依赖预训练模型。因为它们需要先有一个训练好的网络然后判断哪些 filters 不重要。SFP 则可以从头开始训练并同时剪枝。原因是即使训练初期的 filter 范数判断不准确被置零的 filter 后续仍然可以被更新和恢复。因此早期错误剪枝不会造成不可逆损失。所以 SFP 的流程可以是随机初始化模型 ↓ 正常训练一个 epoch ↓ soft pruning 低范数 filters ↓ 继续训练所有 filters ↓ 再次 soft pruning ↓ 循环直到训练结束官方 GitHub README 也说明ImageNet pruning training 默认从头训练如果希望使用预训练模型则需要额外指定--use_pretrain。这点非常重要。它说明 SFP 不只是一个 post-training pruning 方法也可以看作一种带动态结构正则的训练方法。4.5 训练结束后再真正构建小模型在训练过程中SFP 只是把部分 filters 置零但模型结构仍然保持原始大小。这意味着训练阶段的模型仍然是大模型训练阶段 filter 被置零 但结构未变 参数张量形状未变真正推理加速需要在训练结束后把最终为 0 或被选中的 filters 物理删除然后构建一个更窄的小模型。官方仓库 README 中也给出了两种推理方式一种是带 zeros 的 pruned model 推理另一种是不带 zeros 的 pruned model 推理并提供了get_small.sh用于导出不含 zero filters 的 small model。因此SFP 的完整流程可以理解为训练阶段 soft pruning只置零不改结构 部署阶段 hard removal真正删 filter构建小模型4.6 SFP 与 HFP 的区别SFP 论文最核心的对比对象就是 HFP。可以用下面这张表理解方法剪枝时机被剪 filter 是否继续更新模型容量对预训练依赖HFP训练后或阶段性剪枝否变小强SFP训练过程中周期性剪枝是训练中保持完整较弱HFP 的逻辑是这个 filter 当前不重要 ↓ 直接删掉SFP 的逻辑是这个 filter 当前不重要 ↓ 先压成 0 ↓ 后续如果有用还可以恢复这让 SFP 在训练过程中拥有更强的容错性。4.7 对 ResNet 的处理SFP 特别适合 ResNet 这类带残差连接的网络。传统 hard pruning 在 ResNet 上比较麻烦因为 residual addition 要求分支输出维度一致。如果直接删除某些 filters很容易造成 shortcut 分支和 residual 分支维度不匹配。SFP 在训练阶段不改变张量形状只把部分 filters 置零因此不会破坏残差连接的维度一致性。这也是它在 ResNet 上实现比较自然的原因训练阶段 所有层通道数保持不变 residual add 不会维度错误 训练结束 再根据最终剪枝结果构建小模型官方仓库的 ImageNet 脚本覆盖 ResNet-18、ResNet-34、ResNet-50、ResNet-101 和 ResNet-152说明其实现重点就是 ResNet 系列。六、算法流程SFP 的整体算法可以写成输入 网络模型 W 每层剪枝率 P_i 训练 epoch 数 T for epoch 1 ... T: 1. 正常训练网络一个 epoch 2. 对每个待剪卷积层 a. 计算所有 filters 的 Lp 范数 b. 选择范数最小的 m_i 个 filters c. 将这些 filters 置零 3. 下一轮继续训练所有 filters 训练结束后 1. 根据最终 zero filters 构建 compact model 2. 删除对应 filters 和 feature maps 3. 用小模型进行推理这就是 SFP 的核心训练中软剪枝部署时硬删除。七、实验设置7.1 数据集SFP 主要在两个数据集上验证CIFAR-10 ILSVRC-2012 / ImageNetarXiv 和 IJCAI 页面都说明该方法用于加速深度 CNN 推理并在 ILSVRC-2012 上取得了较强结果。7.2 网络结构论文和官方代码重点涉及 ResNet 系列。官方仓库提供了 ImageNet 上 ResNet-18、ResNet-34、ResNet-50、ResNet-101、ResNet-152 的 pruning training 命令也提供了 CIFAR-10 上 ResNet 的训练脚本。可以概括为CIFAR-10: ResNet-20 ResNet-32 ResNet-56 ResNet-110 ImageNet: ResNet-18 ResNet-34 ResNet-50 ResNet-101 ResNet-1527.3 实现环境官方 GitHub 仓库 README 中给出的依赖包括Python 3.6 PyTorch 0.3.1 TorchVision 0.2.0仓库说明其代码基于 ResNeXt-DenseNet 实现并提供了 ImageNet、CIFAR-10、推理和导出小模型相关脚本。八、实验结果解读8.1 CIFAR-10ResNet-110 可以约 2× 加速IJCAI PDF 搜索结果显示SFP 在 CIFAR-10 上可以将 ResNet-110 加速约 2 倍并带来约 4% 的相对精度提升。这个结果说明SFP 不只是减少计算量还可能通过训练过程中的 soft pruning 起到正则化作用。原因可以这样理解每个 epoch 都压制低范数 filters ↓ 迫使模型把信息集中到更稳定、更有效的 filters ↓ 最终模型可能泛化更好这和 Network Slimming 中 BN gamma 稀疏正则有点类似剪枝过程本身也起到了结构正则化的作用。8.2 ImageNetResNet-101 上减少 42% 以上 FLOPsIJCAI 官方页面和 arXiv 摘要都指出在 ILSVRC-2012 上SFP 在 ResNet-101 上减少了超过 42% FLOPs并且 top-5 accuracy 还有 0.2% 提升。这个结果非常关键因为 ImageNet ResNet-101 是比 CIFAR-10 更有说服力的大规模实验。它说明 SFP 不只是小数据集上的技巧也可以扩展到深层大模型。8.3 从头训练也能剪枝SFP 的另一个重要实验结论是它可以从随机初始化开始训练并剪枝。这是它区别于传统剪枝方法的重要点。很多早期剪枝方法需要先训练原始大模型 ↓ 再剪枝 ↓ 再 fine-tuning而 SFP 可以随机初始化 ↓ 训练过程中周期性 soft pruning ↓ 训练结束得到可剪模型论文摘要明确说较大的模型容量使得 SFP 可以从头训练并同时剪枝相比之下许多之前的 filter pruning 方法依赖预训练模型来保证性能。这一点和后来的Rethinking the Value of Network Pruning有很强关联。后者质疑“继承大模型权重是否真的必要”而 SFP 已经在方法设计上尝试降低对预训练模型的依赖。8.4 为什么 SFP 比 HFP 稳定HFP 的问题是不可逆。如果某一轮误删了一个 filter那么它后续无法恢复。这在训练早期尤其危险因为模型尚未充分收敛filter 的当前范数不一定可靠。SFP 的稳定性来自低范数 filter 只是暂时置零 ↓ 下一轮仍然可以被梯度更新 ↓ 如果它对任务有用可以重新变大因此SFP 对剪枝误判更鲁棒。这种思想后来也被很多渐进式剪枝方法继承例如 ASFP、GHFP 等都围绕“软剪枝、渐进剪枝、硬剪枝之间的关系”继续发展。九、方法优点9.1 剪枝误判代价更低SFP 最大的优点就是被剪掉的 filter 仍然可以恢复。这让剪枝过程不再是一次性决策而是训练过程中的反复筛选。9.2 保持更大的优化空间因为所有 filters 都继续参与训练所以 SFP 在训练阶段仍然保留原模型的参数空间。论文摘要明确强调这比固定剪掉 filters 的方法有更大的 model capacity 和 optimization space。9.3 对预训练模型依赖更小SFP 可以从头训练并剪枝不一定需要先训练一个高精度大模型。这在训练流程上更简单也减少了“预训练模型质量”对剪枝效果的影响。9.4 适合 ResNet 等残差网络训练阶段不改变通道数因此不会破坏 residual addition 的维度一致性。对 ResNet 这种多分支结构来说这是非常实用的优点。9.5 最终仍能得到规则稠密小模型虽然训练阶段只是置零但部署阶段可以真正删除 filters构建更窄的 dense network。因此它不依赖稀疏计算库可以获得结构化剪枝的真实加速潜力。十、方法局限10.1 训练阶段没有真正减少计算量SFP 在训练过程中只是把部分 filters 置零但网络结构还没有改变。因此训练阶段的前向和反向计算仍然接近原始大模型。真正加速发生在训练结束后导出小模型时。10.2 重要性准则仍然比较简单SFP 使用 filter 的 (L_p) 范数选择要置零的 filters。这个指标简单高效但仍然继承了范数剪枝的局限低范数 filter 不一定不重要 高范数 filter 不一定不可替代。后续 FPGM 就专门指出单纯依赖 “smaller-norm-less-important” 假设并不总是成立。10.3 每层剪枝率需要人工指定SFP 通常需要给定每层 pruning rate。它没有自动决定哪些层应该多剪 哪些层应该少剪 整体 FLOPs 约束下怎么分配剪枝率这和后来的 AutoSlim、AMC、硬件感知剪枝相比仍然不够自动化。10.4 最终小模型构建仍需要结构处理训练阶段置零很简单但部署阶段要真正删除 filters还需要同步删除当前层输出 filters 下一层输入 channels BN 参数 残差结构中的相关通道官方代码中也专门提供了导出 small model 的脚本说明这一步仍然需要额外工程处理。10.5 不直接适用于 Transformer / LLMSFP 主要针对 CNN filter pruning。对于 ViT、LLM、VLM剪枝对象通常是attention heads MLP hidden neurons tokens layers KV cache vision tokens“soft pruning 后仍可更新”的思想可以迁移但原始 SFP 不能直接照搬到这些结构上。十一、后续影响SFP 对后续剪枝研究的影响主要体现在三个方面。第一它把 filter pruning 从“剪掉就不可恢复”的硬决策变成了“训练过程中可恢复”的软决策。这个思想后来影响了渐进剪枝、动态剪枝和可恢复剪枝等方向。第二它降低了剪枝对预训练模型的依赖。SFP 从方法上支持从头训练并剪枝这和后来重新思考剪枝权重价值的研究形成了呼应。第三它推动了 SFP 系列后续工作例如Asymptotic Soft Filter PruningASFP。官方仓库 README 也提到该工作的期刊版本Asymptotic Soft Filter Pruning for Deep Convolutional Neural Networks已发布。从专栏脉络上看SFP 可以放在这里Pruning Filters for Efficient ConvNets ↓ ThiNet ↓ Channel Pruning ↓ Network Slimming ↓ NISP ↓ DCP ↓ SFP ↓ FPGM ↓ Rethinking the Value of Network Pruning如果说早期 filter pruning 主要回答的是哪些 filters 应该被删除那么 SFP 进一步提出即使某个 filter 当前不重要 也不应该立刻永久删除 可以先软置零让训练过程决定它是否还有机会恢复。这就是它最重要的贡献。十二、一句话总结《Soft Filter Pruning for Accelerating Deep Convolutional Neural Networks》提出在训练过程中周期性将低范数 filters 置零、但仍允许这些 filters 继续被梯度更新的软剪枝机制从而降低剪枝误判的不可逆损失减少对预训练模型的依赖并最终导出规则稠密的小模型用于推理加速。