一、论文基本信息论文题目Runtime Neural Pruning简称RNP作者Ji Lin、Yongming Rao、Jiwen Lu、Jie Zhou发表信息NeurIPS 2017 / NIPS 2017论文链接NeurIPS Proceedings官方代码未检索到作者明确公开的官方代码仓库。目前能找到的是第三方复现仓库例如rusdes/runtime-neural-pruning-reproduction该仓库说明它是对 NeurIPS 2017 论文 Runtime Neural Pruning 的复现实验代码。(GitHub)这篇论文提出Runtime Neural PruningRNP。它的核心思想是不再训练一个固定剪枝后的静态小模型而是在推理时根据输入图像和当前 feature maps 动态决定每一层保留多少卷积通道。论文摘要明确说明RNP 会在 runtime 动态剪枝并且不同于传统剪枝生成固定模型RNP 会保留原始网络的完整能力再根据不同输入自适应剪枝。二、论文要解决的问题传统剪枝方法通常得到一个固定的小模型。比如 L1、ThiNet、Channel Pruning、FPGM、HRank、CHIP、DepGraph 等方法剪枝后模型结构固定所有输入图像都使用同一个剪枝模型。这种静态剪枝有一个问题所有样本被分配相同计算量。但是现实中不同样本难度不同。简单图像可能只需要少量通道就能正确分类困难图像则可能需要更多通道。论文也指出某些输入样本更容易识别可以由简单快速模型完成另一些样本更困难需要更多计算资源。静态剪枝没有利用这种样本难度差异。所以 RNP 要解决的问题是能不能在推理过程中根据当前输入图像动态决定每一层使用多少通道这和传统静态剪枝不同。传统剪枝问的是哪些通道应该被永久删除RNP 问的是对于当前这张图像当前这一层需要计算多少通道这就是 RNP 的核心定位动态通道剪枝 / runtime channel pruning。三、核心思想RNP 的核心思想可以概括为一句话用一个决策网络根据当前 feature maps 判断下一层卷积核的重要性并在推理时动态选择需要计算的通道。RNP 由两个部分组成第一部分是 backbone CNN。它是原始分类网络例如 CIFAR 上的小 CNN 或 ImageNet 上的 VGG-16。第二部分是 decision network。它根据当前已经计算出的 feature maps决定下一层卷积应该计算哪些通道、剪掉哪些通道。论文 Figure 1 中明确说明RNP 包含 backbone CNN 和 decision networkdecision network 会根据上一层 feature maps 输出 Q-value再决定如何动态剪枝卷积核。因此RNP 不是把网络永久剪小而是原始网络能力仍然保留但每个样本只激活其中一部分计算。这点非常重要。静态剪枝会永久丢掉某些通道而 RNP 在困难样本上仍然可以使用更多通道因此理论上能保留完整网络的上限能力。四、方法细节4.1 Bottom-up Runtime PruningRNP 采用bottom-up、layer-by-layer的动态剪枝方式。假设一个 CNN 有 (m) 个卷积层对应卷积核为对应 feature maps 为RNP 的目标是给定当前 feature map决定下一层卷积核中哪些通道需要被计算。论文将这个目标写成一个带有分类损失和计算惩罚的优化问题。直观上它既希望分类准确又希望计算更少。论文也强调剪枝后的推理仍然使用标准卷积因此可以利用 cuDNN 等 GPU 加速库。这点和非结构化稀疏不同。非结构化剪枝虽然减少了权重数量但普通硬件不一定能加速RNP 是channel-wise pruning可以直接减少实际卷积计算。4.2 为什么要建模为 MDP如果一个网络有很多层每一层又有很多可能的通道组合那么直接搜索所有剪枝策略几乎不可能。论文指出如果要为每层收集最优监督信号复杂度会达到所有层通道数的乘积属于不可接受的组合搜索问题。因此RNP 将整个动态剪枝过程建模为Markov Decision ProcessMDP。每一层的剪枝决策就是一个 action。当前 feature map 经过编码后形成 state。分类损失和计算惩罚共同构成 reward。然后使用Q-learning / 深度强化学习训练 decision network。这里的重点是RNP 把逐层动态通道选择问题转化为强化学习中的序列决策问题。4.3 Decision NetworkEncoder-RNN-DecoderRNP 的 decision network 由三部分组成Encoder。它把当前层的 feature maps 通过 global pooling 得到通道描述再投影成固定长度 embedding。RNN。它聚合前面层的状态信息使当前层决策能够考虑之前层已经使用了多少计算。Decoder。它输出每个 action 的 Q-value用于决定当前层保留多少通道。论文明确写到decision network 包含 encoder、RNN 和 decoder。Encoder 将 feature map 嵌入固定长度编码RNN 聚合之前阶段的信息decoder 输出每个 action 的 Q-value。这说明 RNP 的决策不是孤立的。它不是每层单独看 feature map而是通过 RNN 记住前面层的剪枝历史。这点很重要RNP 的动态剪枝是一个逐层相关的决策过程。4.4 Action增量式通道组选择如果每个通道都单独决定保留或删除那么 action space 会非常大。为了简化RNP 把输出通道分成 (k) 个组然后使用incremental action design。也就是说action表示计算前 (i) 个通道组其中第一个通道组总是计算称为base feature map group。较低索引的通道组更常被计算较高索引的通道组只有在样本足够困难时才会被计算。论文在 action 定义中明确说明动作会计算前 i个 feature map groups并且第一个 group 总是被计算。这个设计非常关键。它把原来复杂的通道子集选择问题简化成当前层计算多少组通道所以 RNP 的动作不是任意选择通道集合而是选择一个通道组前缀。这样做的好处是动作空间小训练更稳定推理也更容易实现。但它的缺点也很明显通道选择灵活性受限因为它只能选择前缀通道组而不能任意组合通道。4.5 Reward精度与计算量折中RNP 的 reward 同时考虑分类损失和计算惩罚。对于中间层reward 主要是计算惩罚。对于最后一步reward 会加入分类损失。论文定义中动作计算更多 feature maps 会带来更高计算惩罚最终 reward 还会包含用来衡量分类任务完成得好不好。直观理解如下如果计算更多通道分类可能更准确但 reward 会因为计算量变大而下降。如果计算更少通道速度更快但如果分类损失变大最终 reward 也会下降。所以 RNP 学到的是一个折中策略简单样本少算困难样本多算。4.6 Q-learning 训练RNP 使用 Q-learning 近似最优动作价值函数。对于状态和动作Q-value 表示从当前状态执行该动作后未来总 reward 的期望。策略为训练时使用 Bellman equation将目标写成然后最小化它的平方误差。论文明确使用 Q-learning并用 decision network 近似最优 Q-value训练时采用-greedy推理时使用 greedy policy。所以RNP 的训练不是普通端到端监督学习而是backbone CNN 和 decision network 交替训练。五、完整训练流程RNP 的训练流程可以概括为以下几步。第一先训练或加载一个 backbone CNN。第二初始化动态剪枝机制。第三固定 backbone CNN把它作为环境训练 decision network。第四decision network 根据当前 feature map 输出动作决定下一层保留多少通道。第五根据分类损失和计算惩罚计算 reward。第六用 Q-learning 更新 decision network。第七固定 decision networkfine-tune backbone CNN使其适应动态剪枝路径。第八重复训练 decision network 和 fine-tune backbone CNN。论文 Algorithm 1 中也明确写到训练过程分为两个交替阶段先训练 decision network再 fine-tune backbone CNN。这里最重要的是RNP 不是一次性训练一个 gate而是将动态剪枝策略学习和 backbone 适配交替进行。六、部署时的一个重要特点RNP 有一个非常实用的特点同一个训练好的模型可以通过调整 penalty 在不同计算预算下工作。论文指出训练 agent 时会设定固定 penalty但部署时可以通过补偿输出 Q-value 的相对 penalty 来切换 accuracy-computation balance point。由于 penalty 与输入无关所以一个模型可以部署到不同资源设备上。这点和很多静态剪枝方法不同。静态剪枝通常是一个预算训练一个模型。换一个预算需要重新剪枝或重新训练。RNP 则更像一个动态模型多种预算可调。这对嵌入式设备、移动端和数据中心统一部署都很有意义。七、实验设置论文在三个数据集上验证 RNPCIFAR-10。CIFAR-100。ILSVRC2012 / ImageNet。CIFAR-10 使用一个四层卷积网络CIFAR-100 和 ILSVRC2012 使用 VGG-16。论文说明在 CIFAR 结果中RNP 主要和 naive channel reduction baseline 对比在 ILSVRC2012 上则与当时的 state-of-the-art pruning 方法对比。需要注意RNP 的主实验网络是 VGG-16而不是 ResNet。这和 SkipNet、BlockDrop 不一样。SkipNet 和 BlockDrop 主要依赖 ResNet 的 residual block 跳过机制RNP 主要做的是卷积通道级 runtime pruning。八、实验结果解读8.1 CIFARRNP 明显优于 naive channel reduction在 CIFAR-10 和 CIFAR-100 上论文将 RNP 与简单的通道减少 baseline 对比。实验结果显示在相同乘法次数下RNP 的 accuracy 明显更高。论文 Figure 3 说明RNP 在 CIFAR-10 和 CIFAR-100 上都持续优于 naive channel reduction尤其当计算节省较大时naive baseline 精度会急剧下降而 RNP 仍能保持有竞争力的表现。这说明动态剪枝比统一缩小通道数更灵活。因为 naive reduction 对所有样本使用同一个小模型而 RNP 可以根据样本难度动态增加或减少通道。8.2 简单样本少算困难样本多算论文做了一个直观实验把样本分成 male、female 和 background 三类。结果显示RNP 会对 face images 保留更多卷积通道而对 background images 剪得更多。论文明确指出conv3 中 face images 的计算量几乎是 background images 的 5 倍说明 RNP 能识别不同任务难度并据此分配计算资源。这部分实验非常重要因为它证明了 RNP 不是随机剪枝而是确实学到了不同输入样本需要不同计算量。8.3 ImageNet / VGG-16大压缩率下优势明显在 ILSVRC2012 / ImageNet 上论文使用 VGG-16并以 baseline Top-5 error 10.1% 为参考。RNP 在不同理论 speed-up 下的 Top-5 error 增加如下3× speed-up增加 2.32%。4× speed-up增加 3.23%。5× speed-up增加 3.58%。10× speed-up增加 4.89%。相比之下Filter Pruning 在 5× speed-up 下 Top-5 error 增加 14.6%Jaderberg 等方法在 5× speed-up 下增加 29.7%。论文指出RNP 在较小 speed-up 下与其他方法相近而在大压缩率下明显优于其他方法。这说明动态保留完整网络能力在高压缩率下比静态剪枝更有优势。因为静态剪枝一旦剪掉通道困难样本也无法再使用这些通道RNP 则可以在困难样本上动态调用更多通道。8.4 实际 GPU 推理时间论文不仅报告理论 speed-up还测量了实际 GPU inference time。在 VGG-16 / ImageNet 上原模型平均推理时间为 3.26ms。RNP 3× 理论加速时实际时间为 1.38ms约 2.3×。RNP 4× 理论加速时实际时间为 1.07ms约 3.0×。RNP 5× 理论加速时实际时间为 0.880ms约 3.7×。RNP 10× 理论加速时实际时间为 0.554ms约 5.9×。这说明RNP 的动态通道剪枝不仅降低理论计算量也能带来实际 GPU 加速。不过也要注意实际加速低于理论 speed-up这说明动态剪枝在真实硬件上仍会受到 kernel 调度、batch 并行和实现效率影响。8.5 通道组功能分析由于 RNP 采用增量式 action低索引通道组更常被计算高索引通道组只在困难样本上被计算。论文对 feature maps 做了可视化发现 base convolutional groups 通常有更高激活可以描述物体整体外观高索引 groups 激活更稀疏更像对 base groups 的补偿。论文解释说RNP 的底层逻辑是判断什么时候需要用高阶 feature maps 补偿 base feature maps简单任务剪掉高阶特征以提速困难任务保留更多高阶特征以追求精度。这点是 RNP 方法很有意思的地方低通道组像基础表征高通道组像困难样本的补偿计算。九、方法优点9.1 输入自适应RNP 最大优点是input-adaptive channel pruning。它不是给所有样本使用同一个剪枝结构而是根据输入图像和中间 feature maps 动态选择通道。这比静态剪枝更灵活。9.2 保留完整网络能力静态剪枝会永久删除部分通道。RNP 保留原始网络的完整能力只是在 runtime 动态选择其中一部分计算。所以在困难样本上RNP 仍然可以调用更多通道。这就是它在大压缩率下比静态剪枝更有优势的重要原因。9.3 一个模型支持多种预算RNP 可以通过调整 penalty 改变计算量和精度之间的平衡。因此同一个训练好的 RNP 模型可以适配不同资源设备。这对实际部署很有意义。9.4 通道级动态剪枝比跳 block 更细粒度SkipNet 和 BlockDrop 主要跳过 residual blocks。RNP 主要动态选择卷积通道组。所以RNP 的粒度更细它不是决定某个 block 执行不执行而是决定某一层计算多少通道。9.5 能获得真实推理加速论文在 Titan X Pascal GPU 上测量了 VGG-16 推理时间显示 RNP 的实际加速最高达到 5.9×。这说明 RNP 不只是理论 FLOPs 下降。十、方法局限10.1 强化学习训练复杂RNP 需要 MDP 建模、Q-learning、-greedy 探索、decision network 和 backbone CNN 交替训练。相比 L1、FPGM、HRank、CHIP 这类排序式剪枝方法训练流程明显更复杂。10.2 通道选择受增量式 action 限制RNP 将通道分组并采用前缀式选择。也就是说action只能选择前 i个通道组。这降低了动作空间但也限制了通道选择灵活性。如果真正重要的是第 1、3、5 组而第 2、4 组不重要这种前缀式设计就无法精确表达。10.3 动态控制流对硬件不一定总友好虽然论文报告了 GPU 实际加速但动态通道剪枝仍然可能带来实现复杂度。尤其在现代 GPU / NPU 上如果 batch 内每张图像选择的通道数不同可能会影响并行效率。所以RNP 的部署收益需要结合具体硬件、batch size 和推理框架验证。10.4 主要实验基于 VGG-16RNP 虽然说可以应用到 off-the-shelf CNN 结构但主要大规模实验是 VGG-16。对于 ResNet、MobileNet、DenseNet、ViT 等更复杂结构动态通道选择会涉及更多依赖关系。这也是后续 DepGraph、FBS、Dynamic Channel Pruning 等方法继续发展的原因。10.5 不是静态小模型RNP 不会生成一个固定小网络。它保留完整 backbone 和 decision network只是在推理时动态减少计算。因此如果目标是导出一个简单、固定、易部署的小模型RNP 不如传统结构化剪枝直接。十一、和 SkipNet、BlockDrop 的关系RNP、SkipNet、BlockDrop 都属于动态推理 / 条件计算方向。但三者粒度不同。SkipNet 主要在 ResNet 中逐层决定 residual block 是否执行。BlockDrop 主要一次性输出整张图像的 residual block 执行路径。RNP 主要在卷积层中动态选择通道组属于runtime channel pruning。所以可以这样区分SkipNet逐层动态跳 block。BlockDrop整网动态选择 residual block 路径。RNP逐层动态选择卷积通道组。这也是 RNP 在你的剪枝专栏中的定位从静态通道剪枝走向输入自适应的 runtime 通道剪枝。十二、和前面剪枝论文的关系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。DepGraph 关注任意结构剪枝中的依赖关系。SkipNet 和 BlockDrop 关注动态跳过 residual blocks。RNP 关注运行时动态选择卷积通道组。所以 RNP 的核心意义是它把剪枝从“训练后固定结构”推进到“推理时按样本动态选择通道”。十三、一句话总结《Runtime Neural Pruning》提出一种运行时动态通道剪枝框架 RNP用 decision network 根据输入图像和当前 feature maps 逐层判断卷积通道组的重要性并通过 MDP 和 Q-learning 学习精度与计算量之间的折中策略它的核心贡献不是静态删除 filters而是在保留完整网络能力的前提下为不同输入样本动态分配不同计算量从而实现输入自适应的 channel-wise runtime pruning。