模型剪枝经典论文精读:MorphNet: Fast  Simple Resource-Constrained Structure Learning of Deep Networks
一、论文基本信息论文题目MorphNet: Fast Simple Resource-Constrained Structure Learning of Deep Networks作者Ariel Gordon、Elad Eban、Ofir Nachum、Bo Chen、Hao Wu、Tien-Ju Yang、Edward Choi发表信息CVPR 2018论文链接官方代码这篇论文发表于CVPR 2018CVF 页面显示其收录于Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2018, pp. 1586–1595。论文提出 MorphNet用来在资源约束下自动学习神经网络结构核心流程是反复执行shrink和expand先用资源加权稀疏正则缩小网络再用统一 width multiplier 扩张网络。官方代码仓库是 Google Research 的morph-net。仓库说明 MorphNet 是一种在训练过程中学习深度网络结构的方法其核心是把网络结构学习问题做连续松弛通过对特定资源例如 FLOPs、模型大小或延迟加稀疏正则使某些 filters / output channels 的影响逐渐变小最终可以被移除。二、论文要解决的问题在 MorphNet 之前很多压缩方法关注的是给定一个网络 怎么把它剪小例如L1 Filter Pruning: 根据 filter 范数剪掉小范数 filters。 Network Slimming: 用 BN gamma 稀疏化选择通道。 FPGM: 根据几何冗余剪 filter。 HRank: 根据 feature map rank 剪 filter。 AMC: 用强化学习自动决定每层剪枝率。 NetAdapt: 在目标平台上实测资源逐步改网络。MorphNet 的问题更接近给定一个已有网络 能不能在训练过程中自动学习每一层应该保留多少通道 并且让这个结构满足特定资源约束这里的“资源”不只是参数量也可以是FLOPs 模型大小 延迟 内存MorphNet 认为简单地统一缩放每一层宽度并不理想。比如 MobileNet 的 width multiplier 会把所有层都乘同一个比例但不同层的重要性和资源效率不同。有些层应该多保留通道有些层可以大幅缩小。MorphNet 的目标就是自动学习这种非均匀宽度结构。Google Research 对 MorphNet 的介绍也强调它接收一个已有网络作为输入输出一个更小、更快、且更适合目标任务的新网络。三、核心思想MorphNet 的核心思想可以概括为一句话用资源加权稀疏正则在训练中自动压缩每层通道数然后再用统一宽度乘子把网络扩张回目标资源预算从而实现资源重新分配。它包含两个主要阶段第一阶段Shrink 在训练 loss 中加入资源感知稀疏正则。 让不划算的 channels / filters 逐渐变弱。 最终删除这些低贡献通道。 第二阶段Expand 对 shrink 后的网络统一乘一个 width multiplier。 把网络扩张到目标资源预算附近。 让重要层获得更多通道。这个过程可以反复进行初始网络 ↓ Shrink资源感知稀疏化 ↓ 得到非均匀窄网络 ↓ Expand统一放大 ↓ 得到重新分配资源后的网络 ↓ 可继续 shrink-expandMorphNet 的关键不是单纯剪枝而是资源重新分配。例如某一层原来 100 个通道 shrink 后只剩 10 个通道 expand 1.5 倍后变成 15 个通道。 另一层原来 100 个通道 shrink 后还剩 80 个通道 expand 1.5 倍后变成 120 个通道。这样资源就从低效层转移到了更有用的层。Google Research 的介绍中也用类似例子说明低效层 shrink 后即使扩张也只恢复少量通道而重要层 shrink 得少expand 后反而能获得更多资源。四、方法细节4.1 MorphNet 不是普通剪枝而是结构学习普通剪枝一般是先训练一个大模型 ↓ 判断哪些通道不重要 ↓ 剪掉通道 ↓ fine-tuningMorphNet 更像是训练过程中就加入结构稀疏约束 ↓ 让网络自己学出哪些通道应该存活 ↓ 导出新的网络结构 ↓ 重新训练该结构 ↓ 必要时再 expand官方 README 中明确区分了两个阶段第一轮训练是structure learning第二轮训练是retraining。结构学习阶段加入 MorphNet regularization导出学到的 alive channel counts之后修改模型结构再不带 MorphNet regularizer 重新训练。4.2 Shrink资源感知稀疏正则MorphNet 的 shrink 阶段通过稀疏正则实现。普通 L1 正则可能只是所有通道同等惩罚但 MorphNet 的正则是resource-weighted sparsifying regularizer。也就是说它不会把每个通道看成成本相同而是根据该通道对目标资源的贡献来惩罚。例如如果目标是减少 FLOPs那么某个通道的代价与它导致的计算量有关高分辨率 feature map 中的通道 计算量大代价高。 低分辨率 feature map 中的通道 计算量小代价低。如果目标是模型大小那么通道代价更多与其相关权重数量有关。Google Research 的介绍明确指出MorphNet 不是给每个 neuron 一个统一 cost而是根据目标资源计算每个 neuron 的 cost优化器在训练时会感知这些 resource cost从而学习哪些 neuron 更高效、哪些可以删除。4.3 为什么正则加在 activations 上MorphNet 诱导的是activation sparsity也就是让某些输出通道整体失活。如果某个输出通道失活那么与它相关的整行 / 整个 filter 结构可以被删除从而形成结构化稀疏。这和普通权重稀疏不同普通 weight sparsity: 某些单个权重为 0。 但矩阵或卷积核形状没变。 实际硬件不一定加速。 结构化 channel sparsity: 整个通道被删除。 卷积输入 / 输出维度变小。 更容易获得真实加速。Google Research 的介绍也强调单个权重为 0 不一定减少实际乘法数量但如果一个输出 neuron 对应的整行结构被移除输出数减少计算量才真正降低。4.4 BatchNorm gamma 与 alive channel对于带 BatchNorm 的网络MorphNet 可以利用 BN 的 scale 参数也就是 (\gamma)作为通道是否活跃的连续变量。如果某个通道的 BN gamma 被正则压得很小那么这个通道对后续输出影响很小可以被认为是 dead channel。直观理解gamma 大 该通道仍然活跃。 gamma 接近 0 该通道输出被压小。 可以删除。官方 README 说明如果 seed network 有 BatchNorm可以使用Gamma regularizer并且要求 BatchNorm 的 scale 参数启用也就是scaleTrue。如果模型没有 BN官方仓库中也提供 GroupLasso 等正则形式更新后的实现还推荐使用 LogisticSigmoid gating。4.5 Expand统一宽度乘子扩张Shrink 之后网络通常会比目标预算更小也可能精度下降。MorphNet 因此加入 expand 阶段对所有层使用统一 width multiplier 进行扩张。例如shrink 后网络通道数 [16, 20, 80, 96] 乘以 width multiplier 1.5 [24, 30, 120, 144]注意虽然 expand 是统一比例但由于 shrink 后每层剩余通道数不同最终网络宽度不是均匀的。这正是 MorphNet 的资源重分配逻辑Shrink 阶段 找出哪些层 / 通道低效。 Expand 阶段 按比例恢复容量。 最终结果 重要层变得更宽 不重要层仍然保持较窄。官方 README 也说明可以在结构学习后选择统一扩张网络以调整 accuracy-cost trade-off。4.6 MorphNet 的完整流程MorphNet 的完整流程可以写成输入 一个已有网络也叫 seed network 一个目标资源例如 FLOPs / model size / latency 一个正则强度 lambda 一个 alive threshold Step 1: 在网络中加入 MorphNet regularizer。 Step 2: 训练网络优化 task loss lambda * resource-aware sparsity regularizer Step 3: 根据通道是否 alive 导出结构。 例如每一层保留多少输出通道。 Step 4: 根据导出的结构构建一个 shrink 后的新网络。 Step 5: 从头训练这个新网络。 Step 6: 可选用 width multiplier 扩张网络 使其接近目标资源预算。 Step 7: 可重复 shrink-expand 过程。官方 README 中的使用流程也基本对应这些步骤选择 regularizer、加入 regularization term、训练模型、用 StructureExporter 导出结构、修改模型、重新训练并可选使用 width multiplier 扩张网络。4.7 MorphNet 与 Network Slimming 的区别MorphNet 和 Network Slimming 很容易混淆因为二者都可以使用 BN gamma 稀疏化。但二者的目标不同。Network Slimming: 对 BN gamma 加 L1 正则。 主要目标是让通道稀疏。 通常再按 gamma 大小剪枝。 MorphNet: 对 activation / gate 加资源加权稀疏正则。 正则权重和 FLOPs / model size / latency 等资源相关。 目标是学习满足特定资源约束的结构。也就是说Network Slimming 更像通道重要性稀疏化 MorphNet 更像资源约束结构学习。如果目标是 FLOPsMorphNet 会更倾向于压缩高计算成本通道如果目标是模型大小它学出的结构可能完全不同。Google Research 的介绍中也展示了 targeted regularization 的思想针对 FLOPs 和针对 size 的正则会诱导出不同结构。4.8 MorphNet 与 AMC / NetAdapt 的区别MorphNet、AMC、NetAdapt 都在做自动压缩但方式不同。AMC: 用强化学习 agent 输出每层压缩率。 搜索策略是 RL。 NetAdapt: 每轮生成多个候选网络。 在平台上测资源选择精度最高候选。 搜索策略偏迭代贪心。 MorphNet: 在训练 loss 中加入资源感知稀疏正则。 让网络在训练中自己学出宽度结构。可以简单理解为AMC: 搜索压缩率。 NetAdapt: 平台实测后逐步改结构。 MorphNet: 用正则项把结构学习融入训练。MorphNet 的优点是简单、可扩展缺点是它通常不直接在每轮候选上实测真实设备 latency除非使用相应 latency regularizer 或外部平台建模。五、关键公式5.1 总训练目标MorphNet 的训练目标可以概括为其中分类、检测或其他任务 loss资源感知稀疏正则正则强度。越大网络会被压得越小太小结构几乎不变。官方 README 也说明regularization strength 是控制 price-performance curve 的关键旋钮过大可能让 FLOPs collapse 到 0过小则网络结构不变化。5.2 通道 alive 指示可以用一个通道是否活跃的指示变量表示官方 README 中也提到 alive threshold 用于判断 activation 是否 alive。5.3 FLOPs 感知正则的直观形式对于一层卷积FLOPs 大致与输入通道数、输出通道数、空间分辨率和卷积核大小有关如果考虑通道是否 alive可以理解为这个形式说明输入活跃通道越多 输出活跃通道越多 该层 FLOPs 越大。MorphNet 的资源正则就是围绕类似思想对不同通道施加与目标资源相关的惩罚。5.4 Expand 阶段Shrink 后得到每层通道数Expand 使用统一 width multiplier其中用来把网络扩张到目标资源预算附近。六、实验设置MorphNet 在多种标准网络和数据集上验证。CVF 摘要说明MorphNet 被应用到多种 standard network architectures 和不同 datasets 上能够发现每个领域中特有的新结构并在满足资源约束的同时获得更好性能。官方代码仓库说明 MorphNet 可以针对不同资源目标选择 regularizer例如 FLOPs、model size、latency如果网络有 BatchNorm可以使用 Gamma regularizer如果不能使用 BatchNorm也可以使用 GroupLasso较新的推荐方式是使用 LogisticSigmoid gating。Google Research 后续介绍中还提到MorphNet 已用于 Google-scale problems并开源 TensorFlow 实现供社区使用。七、实验结果解读7.1 MorphNet 能学出非均匀宽度结构MorphNet 最重要的结果不是某一个层被剪了多少而是它能学出不同于人工 width multiplier 的非均匀结构。普通 width multiplier 是所有层统一缩小MorphNet 则是高资源低收益层 缩得更多。 高收益层 保留更多甚至 expand 后更宽。Google Research 的介绍也指出MorphNet shrink expand 的净效果是把计算资源从低效部分重新分配到更有用的部分。7.2 FLOPs regularizer 和 size regularizer 会学出不同结构MorphNet 的一个重要发现是不同资源目标会诱导出不同网络结构。如果目标是 FLOPs正则会更关注计算密集的层。如果目标是 model size正则会更关注参数量大的层。因此同一个 seed network使用不同 regularizer最后得到的结构可能不同。Google Research 的介绍也强调MorphNet 的 targeted regularization 能够针对 FLOPs 或 model size 诱导不同结构。这说明 MorphNet 不是普通“剪小模型”而是针对目标资源学习结构。7.3 Shrink 后可以直接得到更小模型如果应用场景要求更小、更快那么可以在 shrink 后直接停止。此时得到的是一个资源更低的网络。这适合移动端实时推理 边缘设备部署 功耗受限场景 内存受限场景Google Research 的介绍也提到如果用户只想满足更紧的资源预算可以在 shrinking phase 后停止这样能得到针对目标 cost 更高效的网络。7.4 Shrink Expand 可以提升同资源预算下的精度如果目标不是单纯缩小而是在相同资源预算下提高精度则可以执行 shrink expand。过程是先 shrink 找到低效通道并删除。 再 expand 用 width multiplier 把网络扩张回原资源预算附近。 结果 总资源接近原模型 但通道分配更合理。Google Research 的介绍中明确说完整 shrink expand 可以匹配原始目标资源成本同时获得更好的 accuracy。7.5 与 MobileNet width multiplier 的关系MobileNet 的 width multiplier 是手工统一缩放每层通道数 × 0.75 每层通道数 × 0.5 每层通道数 × 0.25MorphNet 则会学习每一层不同的通道数。所以它可以被理解为从人工 width multiplier ↓ 升级到自动非均匀 width allocationGoogle Research 的介绍中也以 Inception V2 / ImageNet 为例说明MorphNet 直接针对 FLOPs 目标学习结构相比统一 width multiplier 能产生更好的 trade-off curve。八、方法优点8.1 简单、可扩展MorphNet 不需要强化学习 agent也不需要复杂的候选网络搜索流程。它只需要在训练 loss 中加入 regularizer ↓ 训练 ↓ 导出结构 ↓ 重训这比 AMC 的 RL 搜索、MetaPruning 的 PruningNet、NetAdapt 的多候选实测流程更简单。8.2 直接针对资源目标MorphNet 的正则项不是普通稀疏正则而是资源感知的。可以针对FLOPs 模型大小 延迟官方 README 中也列出了 Flops、Model Size 和 Latency 作为 regularizer target costs。8.3 能学习非均匀通道分配相比统一 width multiplierMorphNet 可以自动学习每一层应保留多少通道。这非常重要因为不同层的冗余程度、计算代价和任务贡献不同。8.4 可以提高同预算下性能MorphNet 不只是压缩模型。通过 shrink expand它可以在相近资源预算下重新分配通道使网络性能更好。CVF 摘要也指出MorphNet 在多种网络和数据集上可以在满足资源约束的同时获得更高性能。8.5 和已有网络兼容MorphNet 不要求从头搜索一个完整架构而是从一个已有 seed network 出发调整每层输出通道数。官方 README 也强调MorphNet 不改变网络拓扑提出的新模型与 seed network 具有相同层数和连接模式只调整每个卷积层的输出通道数。九、方法局限9.1 不改变拓扑结构MorphNet 主要调整每层通道数不改变网络拓扑。也就是说它不会自动发现新的分支结构 新的 block 排列 新的 shortcut 连接 新的算子类型官方 README 明确说明MorphNet 不改变网络 topology提出的新模型和 seed network 有相同层数与连接模式。所以它更像是width structure learning而不是完整 NAS。9.2 需要重新训练导出的结构MorphNet 训练阶段主要是结构学习。导出结构后还需要根据新结构重新训练模型。官方 README 明确建议修改模型后在没有 MorphNet regularizer 的情况下重新训练。所以它不是完全 one-shot pruning。9.3 正则强度需要调节MorphNet 的效果依赖 regularization strength。如果正则太弱网络几乎不变。如果正则太强过多通道被压掉 甚至 FLOPs collapse 到 0。官方 README 也提醒regularization strength 是控制模型 cost 的关键参数需要在合理范围内搜索。9.4 资源模型仍可能近似如果目标是 FLOPs 或模型大小资源计算相对明确。但如果目标是真实 latency就需要平台相关估计或测量。MorphNet 官方代码支持 latency regularizer但这通常仍依赖特定硬件特征或估计。相比 NetAdapt 直接在平台上实测候选网络MorphNet 的 latency 目标可能需要更谨慎处理。9.5 对 Transformer / LLM 不能直接照搬MorphNet 原始方法主要面向 CNN 通道结构学习。对于 Transformer、ViT、LLM、VLM结构对象变成attention heads MLP hidden neurons tokens layers KV cache vision tokensMorphNet 的思想可以迁移为对模块输出或 gating variable 加资源感知稀疏正则 训练中自动学习结构 再按预算 expand 或重分配资源。但原始的 BN gamma / channel alive / Conv FLOPs 正则不能直接照搬。十、后续影响MorphNet 的影响主要体现在三个方面。第一它提出了resource-constrained structure learning的思想不是先训练再剪而是在训练 loss 中直接加入资源感知正则让网络结构在训练过程中被学习出来。第二它把模型压缩从“统一缩放宽度”推进到“非均匀宽度重分配”。这对 MobileNet 这类 width multiplier 方法是一个重要补充。第三它和 AMC、NetAdapt、MetaPruning、LeGR 一起构成了自动压缩路线AMC: 用 RL 搜索每层压缩率。 NetAdapt: 用平台实测逐步适配网络。 MetaPruning: 训练 PruningNet 生成候选结构权重。 LeGR: 学习全局 filter ranking。 MorphNet: 用资源感知正则在训练中学习网络宽度结构。如果说 AMC 问的是能不能用强化学习自动决定每层剪多少NetAdapt 问的是能不能根据目标平台实测延迟逐步调整网络那么 MorphNet 问的是能不能把资源约束写进训练目标 让网络在训练过程中自己学出每层宽度这就是 MorphNet 在剪枝论文脉络中的核心位置。十一、一句话总结《MorphNet: Fast Simple Resource-Constrained Structure Learning of Deep Networks》提出用资源加权稀疏正则在训练中自动缩小网络通道结构再通过统一 width multiplier 扩张网络实现从低效层到高效层的资源重新分配它不是传统逐层剪枝而是一种面向 FLOPs、模型大小或延迟约束的训练期网络宽度结构学习方法。

相关新闻