模型剪枝经典论文精读:Dynamic Channel Pruning: Feature Boosting and Suppression 一、论文基本信息论文题目Dynamic Channel Pruning: Feature Boosting and Suppression方法简称FBSFeature Boosting and Suppression作者Xitong Gao、Yiren Zhao、Lukasz Dudziak、Robert Mullins、Cheng-zhong Xu发表信息ICLR 2019论文链接arXiv / OpenReview官方代码论文脚注给出的开源实现为deep-fry/mayo。此外GitHub 上也有一些第三方 PyTorch 复现例如siihwanpark/FBS但这个是第三方实现不是论文原始官方实现。论文正文明确写到实现和优化后的网络开源并在脚注中给出deep-fry/mayo。这篇论文的核心思想是通道的重要性不是固定的而是随输入图像动态变化的。因此与其永久删除某些通道不如在推理时根据当前输入动态选择重要通道。二、论文要解决的问题传统 channel pruning 通常是静态剪枝。也就是说训练完成后根据某种重要性准则永久删除一部分通道得到一个固定的小模型。这种方法的问题是一旦通道被永久删除困难样本也无法再使用这些通道。论文指出卷积层中的通道响应具有明显的输入依赖性。某些图像会强烈激活某个通道而另一些图像对同一个通道几乎没有响应。因此通道重要性不是静态属性而是 input-dependent 的动态属性。所以这篇论文要解决的问题是能不能在推理阶段根据当前输入图像动态决定哪些通道需要计算哪些通道可以跳过这和传统剪枝的区别非常关键。传统剪枝问的是哪些通道应该被永久删除FBS 问的是对于当前这张图像哪些通道重要哪些通道可以临时跳过这就是Dynamic Channel Pruning的核心。三、核心思想FBS 的核心思想可以概括为一句话在每个卷积层旁边增加一个轻量级的 channel saliency predictor根据上一层特征预测当前层输出通道的重要性然后对重要通道进行 boosting对不重要通道进行 suppression并跳过其计算。论文把这个过程形象地解释成给每个通道加一个“valve”。重要通道的阀门打开信息正常流动不重要通道的阀门关闭输出被置零其卷积计算可以被跳过。所以 FBS 的名字可以拆开理解Feature Boosting增强重要通道。Feature Suppression抑制不重要通道。它不是简单地把通道置零而是通过一个可学习的预测器为每个输入样本生成动态通道选择策略。四、方法细节4.1 普通卷积层形式对于一个带 BN 和 ReLU 的卷积层论文将其写成其中是上一层输出是卷积核是 BN 的缩放和平移参数表示 ReLU。论文指出一个卷积层的 MACs 主要由决定因此加速卷积计算是降低推理成本的关键。这里要注意FBS 的目标不是减少参数存储本身而是减少运行时实际需要计算的卷积通道。4.2 动态层的一般形式论文先给出一个动态执行层的通用形式其中是原始昂贵计算是一个便宜的动态控制函数。如果的某个位置为 0那么对应的昂贵计算就可以跳过。论文指出这种形式直观上可以通过对加 Lasso 正则来诱导稀疏但普通设计会遇到重参数化和梯度训练问题。所以 FBS 的关键不是简单加一个 gate而是要设计一个能产生稀疏通道选择、能端到端训练、且不会引入强化学习复杂度的动态通道控制函数。4.3 FBS 的动态通道剪枝公式FBS 将原始卷积层替换为其中这里是通道显著性预测器是winners-take-all函数d 是 density表示每层保留多少比例的通道。论文解释说会只保留绝对值最大的个通道其余通道置零。这就是 FBS 最核心的公式。它的含义是先预测每个输出通道的重要性。只计算最重要的个通道。不重要通道输出为 0并且可以跳过其卷积计算。如果则所有通道都保留相当于原始网络。如果 d0.5则每层只保留约一半通道。4.4 为什么 FBS 可以获得“二次加速”FBS 不仅跳过当前层不重要的输出通道还能利用上一层被 suppression 后产生的输入稀疏。论文明确指出卷积可以同时利用input-side sparsity和output-side sparsity因此加速效果相对于通道保留比例近似是二次的。比如如果每层动态剪掉一半通道那么每层输入和输出都约为一半卷积 MACs 约为原来的四分之一。这点非常重要FBS 的加速不只是少算输出通道还来自输入通道和输出通道同时变稀疏。这也是它相比一些只做输出通道选择的方法更有吸引力的地方。4.5 Channel Saliency PredictorFBS 的通道显著性预测器必须足够轻量否则预测器本身会抵消加速收益。论文采用的做法是先对上一层特征做空间降采样把每个通道压缩成一个标量。默认使用-norm对于 ReLU 激活后的特征这等价于 global average pooling。然后接一个全连接层输出当前层每个输出通道的 saliency。公式上预测器可以写成其中是通道级统计是全连接权重是偏置。论文中通常初始化为 1使用 He 初始化。这说明 FBS 的预测器非常简单Global pooling / channel statistics Linear layer ReLU。它不是一个复杂的 RNN也不是强化学习 policy network。4.6 为什么 FBS 不需要强化学习很多动态推理方法例如 RNP、SkipNet、BlockDrop都需要强化学习或近似强化学习来训练离散决策。FBS 的优势是虽然 winners-take-all 会产生稀疏通道选择但它是分段可微的类似 ReLU因此可以直接用常规 SGD 训练。论文明确指出许多动态网络由于使用 on/off 决策而需要 reinforcement learning相比之下FBS 的 (wta) 设计允许端到端训练。这点是 FBS 相比 RNP 的重要优势。RNP 使用 Q-learning。SkipNet 使用 hybrid reinforcement learning。BlockDrop 使用 policy gradient。而 FBS 可以使用普通 SGD。所以 FBS 的训练复杂度明显更低。4.7 稀疏正则FBS 还会对 saliency predictor 的输出加 Lasso 正则论文实验中使用。这个正则项的作用是鼓励 saliency 输出稀疏使通道选择更明确。这里要注意最终真正控制通道数量的是 density d 和 winners-take-all而 Lasso 正则主要帮助 saliency 学得更清晰。五、完整算法流程FBS 的整体流程可以概括为以下几步。第一给原始 CNN 的卷积层加入 FBS 辅助分支。第二用上一层特征预测当前层输出通道 saliency。第三用 winners-take-all 只保留 top-个显著通道。第四被 suppression 的输出通道置零并跳过对应卷积计算。第五下一层卷积继续利用前一层产生的输入通道稀疏。第六用普通 SGD 对原网络和 saliency predictor 一起 fine-tune。第七通过逐步降低 density (d)得到不同计算预算下的模型。论文实验中一开始设置 (d1)也就是不 suppression 任何通道然后逐步降低 density每次减少 10%从而得到不同 MACs 预算下的 accuracy-performance trade-off。这里最重要的是FBS 是动态推理方法但训练方式接近普通 CNN fine-tuning。六、实验设置论文在 CIFAR-10 和 ImageNet ILSVRC2012 上进行了实验。CIFAR-10 使用作者设计的 M-CifarNet这是一个 8 层 CNN约 1.3M 参数174M MACsImageNet 上主要测试 VGG-16 和 ResNet-18。论文说明M-CifarNet 比 CIFAR 上的 VGG-16 更紧凑因此加速更有挑战ImageNet 实验则用于和已有结构化剪枝及动态执行方法比较。这说明 FBS 的实验覆盖了两种场景小型紧凑 CNN。大型 ImageNet CNN。七、实验结果解读7.1 ResNet-18 / ImageNet约 2× MAC saving精度损失较小论文在 ResNet-18 / ImageNet 上与 SFP、Network Slimming、DCP、Low-cost Collaborative Layers、Channel Gating Neural Networks 等方法比较。表 1 显示FBS 在 ResNet-18 上达到1.98× MAC savingaccelerated Top-1 error 为 31.83%Top-5 error 为 11.78%相比多个静态剪枝和动态执行方法它在相近或更高加速下有更好的错误率。这说明FBS 在 ResNet-18 上能以约 2× 计算节省保持较好的 ImageNet 精度。7.2 VGG-16 / ImageNet5× speed-up 下 Top-5 只增加 0.59%论文表 2 报告了 VGG-16 在 3×、4×、5× speed-up 下的 Top-5 error increase。FBS 的结果为3× speed-upTop-5 error 增加 0.04%。4× speed-upTop-5 error 增加 0.52%。5× speed-upTop-5 error 增加 0.59%。相比之下Runtime Neural Pruning 在 5× speed-up 下 Top-5 error 增加 3.58%Network Slimming 增加 5.18%Filter Pruning 增加 14.6%。这是论文最亮眼的实验之一。它说明在高加速率下动态通道选择比静态永久删除通道更能保持精度。原因也很直观FBS 保留完整网络能力困难样本仍有机会使用不同通道而静态剪枝删除的通道永远无法恢复。7.3 内存访问和峰值显存也下降论文不仅报告 MACs还分析了 memory accesses 和 peak memory usage。在 VGG-16 3× 设置下权重访问从 56.2MB 降到 23.9MBactivation 访问从 86.5MB 降到 40.8MBedge 场景下峰值内存从 24.6MB 降到 9.97MBcloud batch 128 场景下从 3.09GB 降到 1.24GB。ResNet-18 2× 设置下也有类似下降。这点很重要FBS 的收益不只是减少 MACs还能减少权重访问、激活访问和峰值内存。这对边缘设备尤其有意义。7.4 FBS 优于普通静态剪枝的原因FBS 的优势主要来自三点。第一通道选择是输入自适应的。每张图像可以使用不同通道集合。第二完整网络结构被保留。不像静态剪枝那样永久删除通道。第三输入稀疏和输出稀疏可以叠加加速。这使得理论 MACs 可以近似按通道密度平方下降。论文结论中也强调FBS 在 ResNet-18 和 VGG-16 上分别实现约 2× 和 5× computation saving并且 Top-5 accuracy loss 都小于 0.6%。八、方法优点8.1 输入自适应FBS 最大优点是input-dependent channel pruning。它不像静态剪枝那样给所有样本使用同一个通道子集而是根据当前输入动态预测通道显著性。这比固定剪枝结构更灵活。8.2 保留完整网络能力FBS 不永久删除通道而是在 runtime 动态 suppression。这意味着某个通道对当前样本不重要时可以跳过但对其他样本仍然可以被使用。这也是 FBS 在高 speed-up 下比静态剪枝更稳的核心原因。8.3 不需要强化学习FBS 可以用普通 SGD 训练不需要 policy gradient、Q-learning 或 REINFORCE。这比 RNP、SkipNet、BlockDrop 这类动态网络训练更简单。8.4 轻量 saliency predictorFBS 的 predictor 只是 channel statistics 加一个全连接层开销较小。这保证了动态通道选择不会引入过大的额外计算。8.5 输入和输出双侧稀疏FBS 的加速来自两端上一层 suppression 后产生 input-side sparsity。当前层 WTA 产生 output-side sparsity。这使得卷积计算量可以近似按密度平方下降而不是线性下降。九、方法局限9.1 不是静态小模型FBS 不会导出一个固定窄网络。它保留完整模型结构和动态 saliency predictor只是在推理时选择部分通道计算。因此如果部署平台只支持固定图静态推理FBS 的工程落地会比普通 channel pruning 更复杂。9.2 动态稀疏需要专门实现才能真正加速虽然 FBS 理论上能跳过不重要输入和输出通道但普通深度学习框架中的 dense convolution 不一定自动利用这种动态通道稀疏。也就是说如果没有专门实现动态稀疏卷积FBS 的理论 MACs 节省不一定完全转化为真实 latency 节省。9.3 每层保留比例 (d) 比较粗FBS 主要通过全局 density (d) 控制每层保留通道比例。这意味着每层大致剪掉相同比例通道。相比 AMC、NetAdapt、LeGR、ABCPruner 这类学习每层预算的方法FBS 在层级预算分配上不够灵活。9.4 WTA 选择限制了表达方式FBS 只保留 saliency 最大的个通道其余置零。这很直接也容易训练但它是一种硬 top-k 策略。如果某些通道的重要性接近WTA 的边界可能造成不稳定。9.5 与现代硬件的适配需要重新验证FBS 论文主要报告 MACs、memory accesses 和 peak memory usage。对于现代 GPU、NPU、TensorRT、ONNX Runtime、移动端推理框架等环境动态通道稀疏能否充分加速需要具体工程实现和实测验证。十、和 RNP、SkipNet、BlockDrop 的关系RNP、SkipNet、BlockDrop 和 FBS 都属于动态推理 / 条件计算方向。它们的区别在于动态粒度不同。RNP 是runtime channel pruning用 Q-learning 根据 feature maps 动态选择通道组。SkipNet 是逐层动态跳 residual block每个 block 前做 gate 决策。BlockDrop 是一次性输出整网 block dropping policy。FBS 是动态通道 boosting/suppression用轻量 predictor 预测每层输出通道 saliency并用 WTA 保留最重要通道。所以可以这样总结SkipNet 和 BlockDrop 主要减少深度方向的 block 计算。RNP 和 FBS 主要减少宽度方向的 channel 计算。而 RNP 和 FBS 的关键区别是RNP 使用强化学习训练动态通道策略。FBS 使用 WTA 和普通 SGD 训练动态通道策略。这就是 FBS 在动态剪枝脉络中的独特价值。十一、和前面剪枝论文的关系Pruning Filters for Efficient ConvNets 关注静态 filter pruning。ThiNet 和 Channel Pruning 关注重构误差驱动的静态通道剪枝。Network Slimming 关注BN gamma 稀疏化后静态剪枝。FPGM、HRank、CHIP 关注通道冗余度量。Importance Estimation 和 Gate Decorator 关注loss sensitivity / gate-based importance。SkipNet 和 BlockDrop 关注动态跳过 residual blocks。Runtime Neural Pruning 关注强化学习式运行时通道剪枝。FBS 关注基于 saliency predictor 和 WTA 的动态通道 boosting / suppression。所以 FBS 的核心意义是它把动态通道剪枝从强化学习式策略学习推进到普通 SGD 可训练的轻量动态通道选择。十二、一句话总结《Dynamic Channel Pruning: Feature Boosting and Suppression》提出 FBS用轻量 channel saliency predictor 根据输入特征动态预测每层输出通道重要性并通过 winners-take-all 保留重要通道、抑制不重要通道从而在推理时跳过无关通道计算它的核心贡献不是静态删除 filters而是用普通 SGD 训练的动态通道 boosting/suppression 机制在保留完整网络能力的同时实现输入自适应的 channel-wise runtime pruning。