一、论文基本信息
论文题目: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/skipnet,README 中说明 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-exit
SkipNet 很容易和 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。
九、实验设置
论文在四个分类数据集上验证 SkipNet:
CIFAR-10
CIFAR-100
SVHN
ImageNet
其中 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 和 HRL+SP 后,SkipNet 在 CIFAR-10 上减少约 50% 计算,在 CIFAR-100 上减少约 37% 计算,在 SVHN 上减少约 86% 计算。论文还指出,相比只使用 supervised pre-training,加入 hybrid reinforcement learning 通常还能进一步带来 10% 或更多计算量下降。
这说明:
动态跳层在简单数据集上尤其有效。
SVHN 是街景数字识别,很多样本相对简单,所以 SkipNet 可以跳过大量 residual blocks,同时保持精度。
10.2 ImageNet:ResNet-101 减少约 30% 计算
在 ImageNet 上,SkipNet 的计算节省幅度没有 SVHN 那么夸张,但仍然有效。
论文报告,使用 RNNGate 的 SkipNet-101+HRL+SP 在保持完整网络精度的情况下,可以减少约 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% 计算量。