模型剪枝经典论文精读:SkipNet: Learning Dynamic Routing in Convolutional Networks

📅 2026/7/16 4:05:04
模型剪枝经典论文精读:SkipNet: Learning Dynamic Routing in Convolutional Networks
一、论文基本信息论文题目SkipNet: Learning Dynamic Routing in Convolutional Networks作者Xin Wang、Fisher Yu、Zi-Yi Dou、Trevor Darrell、Joseph E. Gonzalez发表信息ECCV 2018论文链接CVF Open Access / arXiv官方代码ucbdrive/skipnet这篇论文发表于ECCV 2018。CVF 页面显示论文收录于 ECCV 2018页码为 409–424。论文的核心思想是不是把网络静态剪小而是让网络根据每张输入图片动态决定哪些 residual blocks 执行、哪些 residual blocks 跳过。论文官方 GitHub 仓库为 ucbdrive/skipnetREADME 中说明 SkipNet 会对每张图像学习一条动态路径困难图像走更多层简单图像走更少层。这篇论文和传统剪枝论文最大的不同是SkipNet 不是静态结构化剪枝而是动态推理 / 条件计算方法。传统剪枝得到的是一个固定小模型SkipNet 得到的是一个带 gate 的动态网络不同输入会走不同深度。二、论文要解决的问题深层 CNN 往往精度更高但推理成本也更高。论文指出很多输入样本并不需要完整深层网络才能正确分类简单图像可能只需要较浅路径困难图像才需要更多层。因此如果每张图像都完整执行所有层就会浪费计算。传统压缩方法通常会做静态压缩例如 filter pruning、quantization、distillation、low-rank decomposition 等。这些方法的特点是压缩后每张输入都走同一个固定模型。SkipNet 的问题设定不同。它问的是能不能让网络在推理时根据输入内容动态选择计算路径也就是说对于简单图片跳过更多残差块对于困难图片执行更多残差块。所以 SkipNet 要解决的不是哪些 filters 永久删除而是对当前这张图片哪些 residual blocks 可以临时跳过三、核心思想SkipNet 的核心思想可以概括为一句话在 ResNet 的 residual blocks 之间加入 gating network让 gate 根据前一层 activation 判断下一个 block 是执行还是跳过。对于第 i个 residual block设输入为block 变换为gate 为。SkipNet 的输出写成其中当时执行该 residual block。当时跳过该 residual block直接把输入传到下一层。这个公式是 SkipNet 的核心。论文明确把 gating module 放在 residual blocks 之间让 gate 根据前一层 activation 做二值决策。这里最需要强调的是SkipNet 依赖 ResNet 的残差结构因为 residual block 的输入和输出维度通常一致所以才能安全地直接跳过 block。如果是普通顺序 CNN直接跳过某一层可能会导致维度或语义不匹配但 ResNet 本来就有 identity shortcut所以天然适合动态跳层。四、方法细节4.1 动态路由不是 early-exitSkipNet 很容易和 early-exit 方法混淆但二者不一样。Early-exit 的思想是如果浅层分类头已经足够自信就提前退出不再执行后续网络。SkipNet 的思想是不提前退出而是在网络内部选择性跳过某些 residual blocks后面的层仍然可以继续执行。这点非常重要。Early-exit 的路径通常是从前往后执行到某个点停止。SkipNet 的路径则更灵活它可以跳过中间某些 blocks但继续执行后面的 blocks。因此SkipNet 的搜索空间比简单 early-exit 更大表达能力也更灵活。论文也明确指出SkipNet 不是 early termination而是 conditionally bypass individual layers。4.2 Gate 的作用每个 gate 的输入是前面层或 block 的 activation输出是一个二值动作执行跳过这个 gate 本质上是一个轻量分类器用来判断当前样本是否需要经过下一个 residual block。直观理解如下。如果图像很简单例如目标大、背景干净、类别明显那么 gate 可能倾向于跳过更多 blocks。如果图像很困难例如目标小、遮挡多、背景复杂那么 gate 可能倾向于执行更多 blocks。论文也做了定性分析认为 learned gating policy 和图像尺度、显著性之间存在关系困难图像通常会执行更多层简单图像会跳过更多层。4.3 两种 gate 设计论文主要研究了两类 gate。第一类是Feed-forward Gate前馈门控。它为每个 residual block 分配一个独立 gating module。论文设计了 FFGate-I 和 FFGate-II。FFGate-I 包含两个卷积、global average pooling 和全连接层计算量约为 residual block 的 19%FFGate-II 更轻量只包含一个stride 2 卷积、global average pooling 和全连接层计算量约为 residual block 的 12.5%。第二类是Recurrent Gate循环门控。RNNGate 使用 LSTM 在不同 blocks 之间共享参数并利用前面 gate 的状态信息来帮助当前 gate 决策。论文中 RNNGate 的成本非常低约为 residual block 计算量的 0.04%。论文实验也发现RNNGate 通常比 feed-forward gate 同时具有更低计算成本和更好精度。所以 SkipNet 最重要的 gate 设计结论是动态路由不仅要会判断是否跳过还必须足够轻量否则 gate 自身的计算开销会抵消跳层带来的收益。五、训练难点SkipNet 的最大难点是gate 的跳过 / 执行动作是离散二值决策不可直接反向传播。如果 gate 输出是连续值例如 0.3、0.7那么训练可以用普通梯度下降但推理时无法真正节省计算因为只要不是硬跳过block 仍然要执行。如果 gate 输出是硬二值 0 或 1那么推理可以真正跳过 block但训练时这个离散决策不可导。论文指出简单使用 soft gate 训练再在推理时 hard threshold会导致精度较差因为训练和推理不一致。因此SkipNet 采用了两阶段训练第一阶段supervised pre-training。第二阶段hybrid reinforcement learning。这也是论文方法的关键。六、Supervised Pre-training在 supervised pre-training 阶段SkipNet 使用一种近似技巧前向传播时使用 hard gate。反向传播时使用 soft gate。论文把它写成其中是 gate 的 soft 输出是指示函数。这个设计的作用是前向时让网络看到真实 hard skipping 路径反向时仍然能让 gate 获得梯度。论文认为如果直接从随机初始化开始用强化学习训练容易陷入差的局部最优supervised pre-training 可以给 base network 和 gating network 一个更稳定的初始化。这一步很重要因为它解决了动态网络训练中的一个核心问题先让 gate 学会基本可用的路由策略再用强化学习进一步优化跳层策略。七、Hybrid Reinforcement Learning完成 supervised pre-training 后论文使用 REINFORCE 进一步优化 gate policy。SkipNet 把每个 gate 的决策看作 sequential decision making。对于第 (i) 个 gate定义 skipping policy%29%2Cy%29%20%3D%20%5Cfrac%7B%5Calpha%7D%7BN%7D%5Csum_%7Bi%3D1%7D%5E%7BN%7DR_i%20%5Cright%5D /如果说明跳过第 i 个 block就获得计算节省 reward。如果说明执行该 block不获得跳过奖励。是控制精度和计算量 trade-off 的超参数。论文指出通过调节可以得到不同计算预算下的 SkipNet。这里的重点是SkipNet 的训练目标不是单纯提高精度而是在精度和计算成本之间做动态权衡。八、完整算法流程SkipNet 的完整训练流程如下。第一基于 ResNet 构建带 gate 的 SkipNet。第二在 residual blocks 之间插入 gate。第三用 supervised pre-training 训练网络。前向使用 hard gate反向使用 soft gate。第四以 supervised pre-training 的结果作为初始化。第五用 hybrid reinforcement learning 继续优化 gate policy。第六在推理阶段对每张输入图片执行 hard routing。第七简单图片跳过更多 blocks困难图片执行更多 blocks。最终得到的是一个输入自适应的动态深度网络。它不是一个固定剪枝后的小模型而是一个per-input adaptive inference model。九、实验设置论文在四个分类数据集上验证 SkipNetCIFAR-10CIFAR-100SVHNImageNet其中 CIFAR-10 和 CIFAR-100 均为 50k 训练图像、10k 测试图像SVHN 使用训练集和 extra 数据ImageNet 使用 1.28M 训练图像和 50k 验证图像模型方面论文以 ResNet 为基础。在 CIFAR 和 SVHN 上使用不同深度的 ResNet例如 ResNet-38、ResNet-74、ResNet-110、ResNet-152在 ImageNet 上使用 ResNet-34、ResNet-50、ResNet-101。训练方面SkipNet 使用两阶段训练。第一阶段与原 ResNet 训练设置类似第二阶段使用较小学习率进行 policy refinement。论文说明整体训练时间比普通模型增加约 30%–40%。十、实验结果解读10.1 CIFAR-10、CIFAR-100、SVHN大幅减少 FLOPs论文在保持原模型精度基本不变的前提下报告了明显的计算量下降。对于最深模型使用 RNNGate 和 HRLSP 后SkipNet 在 CIFAR-10 上减少约 50% 计算在 CIFAR-100 上减少约 37% 计算在 SVHN 上减少约 86% 计算。论文还指出相比只使用 supervised pre-training加入 hybrid reinforcement learning 通常还能进一步带来 10% 或更多计算量下降。这说明动态跳层在简单数据集上尤其有效。SVHN 是街景数字识别很多样本相对简单所以 SkipNet 可以跳过大量 residual blocks同时保持精度。10.2 ImageNetResNet-101 减少约 30% 计算在 ImageNet 上SkipNet 的计算节省幅度没有 SVHN 那么夸张但仍然有效。论文报告使用 RNNGate 的 SkipNet-101HRLSP 在保持完整网络精度的情况下可以减少约 30% 计算。这说明ImageNet 任务更复杂模型需要执行更多层因此可跳过空间更小。但即使如此30% 的动态计算节省仍然有意义。10.3控制精度和计算量折中SkipNet 的目标函数中有一个超参数用于控制跳层奖励。当较大时模型更倾向于跳过 layers计算量更低但精度可能下降。当较小时模型更保守执行更多 layers精度更高但计算量更大。论文在 ImageNet 上展示了不同下的 accuracy-computation trade-off并指出通过调节SkipNet 可以满足不同计算预算或精度要求。这点非常重要SkipNet 不是只能产生一个模型而是可以通过调节 cost reward 得到不同预算下的动态推理策略。10.4 RNNGate 优于 Feed-forward Gate论文实验表明RNNGate 通常比 FFGate 更好。原因主要有两个。第一RNNGate 成本极低约为 residual block 计算量的 0.04%。第二RNNGate 能利用跨层状态信息更好地建模前面 layers 的路由历史。论文也推测recurrent gate 能更好捕捉 cross-layer dependencies。所以SkipNet 的 gate 设计给后续动态网络一个重要启发路由决策不是彼此独立的前面层的选择会影响后面层是否需要执行。十一、方法优点11.1 输入自适应SkipNet 最大优点是per-input dynamic inference。传统剪枝方法得到的是一个固定小模型每张图像都使用同一计算路径。SkipNet 则让不同图像使用不同计算路径。这更符合直觉简单样本少算困难样本多算。11.2 真正减少计算SkipNet 使用 hard gate。如果某个 block 被跳过该 block 的卷积计算就不会执行。因此它不是软注意力也不是单纯调权重而是可以真正减少 FLOPs。11.3 利用 ResNet 结构天然跳层ResNet 的 identity shortcut 让跳过 residual block 非常自然。这使 SkipNet 不需要重新设计复杂网络拓扑只需要在 residual blocks 之间加入 gate。11.4 兼顾精度与计算预算通过调节 (\alpha)SkipNet 可以在不同 accuracy-computation trade-off 上工作。这对实际部署很有价值因为不同设备、不同场景可能有不同延迟或能耗要求。11.5 对后续动态网络有启发SkipNet 是较早系统研究 dynamic routing / conditional computation 的代表方法之一。它对后续动态深度网络、动态 token pruning、early exiting、conditional computation、Mixture-of-Experts routing 等方向都有启发意义。十二、方法局限12.1 不是传统意义上的静态剪枝SkipNet 不会得到一个固定变窄的模型。它保留原网络结构和 gate只是在推理时动态跳过部分 blocks。所以如果部署平台不擅长动态控制流SkipNet 的实际加速可能不如 FLOPs 下降那么理想。这是它和 filter pruning、channel pruning、DepGraph 等方法的重要区别。12.2 训练复杂度更高SkipNet 需要两阶段训练先 supervised pre-training。再 hybrid reinforcement learning。论文也报告整体训练时间比普通模型增加约 30%–40%。相比 L1 pruning、FPGM、HRank 这类方法SkipNet 的训练流程更复杂。12.3 强化学习训练可能不稳定论文自己也指出直接用 RL 学 hard decision gates 容易陷入差的局部最优所以需要 supervised pre-training 初始化。这说明 SkipNet 的效果比较依赖训练策略。12.4 Gate 也有计算开销如果 gate 太复杂节省的 block 计算可能被 gate 计算抵消。因此 SkipNet 特别强调轻量 gate尤其是 RNNGate。这也是动态网络部署中普遍存在的问题路由器本身必须足够便宜。12.5 动态路径对硬件不一定友好GPU、NPU 等硬件通常更喜欢规则、批量一致的计算。SkipNet 每张图像路径不同如果 batch 内样本路径不一致可能导致控制流开销、并行效率下降。所以在真实部署中SkipNet 的延迟收益需要结合具体框架和硬件验证。十三、和前面剪枝论文的关系SkipNet 应该作为动态推理 / 条件计算方向的代表论文而不是普通结构化剪枝论文。它和前面方法的关系可以这样理解Pruning Filters for Efficient ConvNets 关注静态删除 filters。ThiNet / Channel Pruning 关注重构误差驱动的静态通道剪枝。Network Slimming 关注BN gamma 稀疏化后静态剪枝。SFP / FPGM / HRank / CHIP 关注不同通道重要性或冗余指标。Importance Estimation / Gate Decorator 关注loss sensitivity / gate-based importance。DepGraph 关注任意结构剪枝中的依赖关系和同步裁剪。SkipNet 关注每个输入动态选择执行哪些 blocks。所以 SkipNet 的定位应该是从“把模型永久剪小”转向“让模型按输入动态少算”。这也是它和传统剪枝方法最大的区别。十四、一句话总结《SkipNet: Learning Dynamic Routing in Convolutional Networks》提出在 ResNet 的 residual blocks 之间加入轻量 gating network让模型根据每张输入图像动态决定执行或跳过哪些 blocks并通过 supervised pre-training 与 hybrid reinforcement learning 解决 hard gate 不可导问题它的核心贡献不是静态删除通道而是实现输入自适应的动态推理在保持精度的同时减少 30%–90% 计算量。