模型剪枝经典论文精读:AMC: AutoML for Model Compression and Acceleration on Mobile Devices 一、论文基本信息论文题目AMC: AutoML for Model Compression and Acceleration on Mobile Devices作者Yihui He、Ji Lin、Zhijian Liu、Hanrui Wang、Li-Jia Li、Song Han发表信息ECCV 2018论文链接官方代码这篇论文发表于ECCV 2018CVF 页面显示其收录于Proceedings of the European Conference on Computer Vision (ECCV), 2018, pp. 784–800。官方 GitHub 仓库mit-han-lab/amc说明这是论文AMC: AutoML for Model Compression and Acceleration on Mobile Devices的 PyTorch 实现当前代码主要支持 ImageNet 上 MobileNet 的自动剪枝流程包括策略搜索、导出剪枝权重、剪枝后 fine-tuning 三步。AMC 的核心目标是不要再靠人工经验为每一层设置剪枝率而是用强化学习自动搜索每层压缩策略并且可以直接面向 FLOPs、模型大小、真实移动端延迟等资源约束。论文摘要中报告在 VGG-16 / ImageNet 的 4× FLOPs reduction 下AMC 比人工设计的压缩策略高 2.7% accuracy在 MobileNet 上AMC 在 Android 手机和 Titan XP GPU 上分别实现了实际推理加速同时几乎不损失 ImageNet Top-1 accuracy。二、论文要解决的问题在 AMC 之前很多剪枝方法都需要人工指定每层剪枝率。例如浅层少剪 深层多剪 敏感层少剪 不敏感层多剪 所有层统一剪 30%这些规则看起来合理但问题是不同网络结构、不同层之间并不是独立的人工规则很难找到全局最优压缩策略。论文指出传统模型压缩通常依赖 hand-crafted heuristics 和专家经验在模型大小、速度、精度之间搜索折中点这个过程既耗时也容易次优。AMC 要解决的问题可以写成给定一个预训练网络 如何自动决定每一层压缩多少 使模型在满足资源约束的同时 尽可能保持精度这里的资源约束可以是FLOPs 参数量 模型大小 真实推理延迟 移动端内存占用这和前面的 L1、ThiNet、FPGM、HRank 有明显区别L1 / FPGM / HRank: 主要回答“这一层内哪些 filter 更该剪” AMC: 主要回答“整个网络每一层应该剪多少”所以AMC 的重点不是提出一个新的通道重要性公式而是提出一种自动搜索 layer-wise compression policy的框架。三、核心思想AMC 的核心思想可以概括为一句话把模型压缩过程建模成一个强化学习问题让 DDPG agent 按层读取网络状态并连续输出每层压缩率压缩完整个网络后根据未 fine-tuning 的验证精度和资源约束返回 reward更新 agent最终得到自动压缩策略。整个流程如下输入预训练模型 ↓ 从第 1 层开始 ↓ agent 读取当前层状态 embedding ↓ agent 输出当前层压缩率 action ↓ 环境按该压缩率剪当前层 ↓ 进入下一层 ↓ 所有层处理完后评估剪枝模型 ↓ 返回 reward ↓ 更新 DDPG agent ↓ 重复搜索 ↓ 选择最优策略并 fine-tuning论文 Figure 1 中也把 AMC 表述为一个 layer-by-layer 的强化学习过程DDPG agent 接收当前层 embedding (s_t)输出该层 sparsity ratio (a_t)当前层按 (a_t) 被压缩然后 agent 继续处理下一层当所有层压缩完成后模型验证精度和 FLOPs / latency 等资源指标共同形成 reward 返回给 agent。这使 AMC 和传统剪枝方法的思路非常不同传统剪枝 人工设定每层剪枝率 或用规则逐层决定剪枝率。 AMC 让强化学习 agent 通过试错学习每层剪枝率。四、方法细节4.1 AMC 为什么用强化学习模型压缩的策略空间很大。假设一个网络有 (L) 个可剪层每层都可以选择多个压缩率那么所有组合会呈指数增长。例如每层 10 种压缩率 网络 20 层 总组合数 10^20人工搜索不现实贪心逐层搜索也容易陷入局部最优。AMC 因此使用强化学习来采样和优化这个巨大策略空间。更具体地AMC 使用的是DDPGDeep Deterministic Policy Gradient。DDPG 适合连续动作空间而 AMC 认为模型压缩对每层 sparsity ratio 很敏感离散动作空间过粗无法表达细粒度压缩策略。因此AMC 使用连续动作这个动作表示当前层的压缩率或保留率。论文明确指出已有离散动作空间会带来动作数量爆炸而且会丢失压缩率之间的顺序关系因此 AMC 使用 continuous action space 来实现更细粒度、更准确的压缩控制。4.2 State每一层的状态怎么表示对于第 (t) 层AMC 为 agent 提供一个 11 维状态向量其中t: 当前层编号 n: 当前层输出通道数 c: 当前层输入通道数 h, w: 输入 feature map 的空间尺寸 stride: 当前层 stride k: 卷积核大小 FLOPs[t]: 当前层 FLOPs reduced: 前面层已经减少的 FLOPs rest: 后续层剩余 FLOPs a_{t-1}: 上一层动作这些状态会被归一化到 ([0,1]) 后输入 agent。论文认为这些信息可以帮助 agent 区分不同卷积层并根据层的位置、计算量、前面已经剪了多少、后面还剩多少预算来决定当前层剪多少。这个设计很重要。AMC 不是只看当前层权重而是把当前层放在整个网络预算上下文中决策当前层本身有多大 前面已经剪了多少 后面还有多少层 上一层剪了多少 当前层是否占主要 FLOPs这比“每一层独立做敏感性分析”更接近全局优化。4.3 Action输出每层压缩率AMC 的动作是当前层的压缩比例论文中 agent 输出 (a_t) 后环境会用指定压缩算法对当前层进行压缩。例如fine-grained pruning: 根据权重 magnitude 剪掉一部分连接。 channel pruning: 根据通道选择策略删除一部分输入通道。论文实验中fine-grained pruning 使用最小 magnitude 权重剪枝channel pruning 使用 max response selection并保留 BatchNorm 层而不是合并到卷积层中。需要注意AMC 本身不是一个新的通道重要性准则。它更像一个外层控制器AMC 决定每层剪多少 具体这一层剪哪些连接或通道 由底层 pruning algorithm 决定。所以 AMC 可以和不同剪枝算子结合。4.4 Reward如何评价一个压缩策略AMC 有一个非常关键的设计搜索阶段不对每个候选模型做 fine-tuning而是直接用剪枝后、fine-tuning 前的验证集精度作为 reward 的主要依据。论文解释说剪枝后未 fine-tuning 的验证精度和最终 fine-tuning 后的精度有相关性因此可以作为快速搜索的代理指标。这样就避免了每次强化学习采样一个策略都要完整 fine-tuning 的巨大成本。AMC 设计了两类搜索协议。4.5 Resource-Constrained Compression第一类是资源约束压缩。目标是给定 FLOPs / latency / model size 预算 在不超过预算的前提下 最大化模型精度。这种场景下AMC 使用的 reward 是也就是说资源约束通过限制 action space 来保证在满足预算的前提下reward 只关心误差越低越好。论文明确说明(R_{\text{err}}) 本身不鼓励继续缩小模型所以 AMC 通过限制动作空间来精确到达目标压缩率这个资源可以替换成模型大小、FLOPs 或移动端实际推理时间。这点很好理解预算是硬约束 不能超过目标 FLOPs / latency。 reward 是精度目标 在预算内精度越高越好。4.6 Accuracy-Guaranteed Compression第二类是精度保证压缩。目标是尽可能压缩模型 但不明显损失精度。这时 AMC 需要同时考虑误差和资源因此论文提出这两个 reward 仍然对 Error 很敏感但会给减少 FLOPs 或参数量一个小激励。论文指出通过这样的 rewardagent 可以自动探索“在不伤害精度的前提下还能压缩到什么极限”。这类协议适合精度优先应用 例如相册、云端视觉服务、质量敏感任务。 希望压缩模型 但不希望明显掉点。4.7 为什么搜索阶段可以不 fine-tuningAMC 的搜索效率依赖一个经验观察剪枝后未 fine-tuning 的验证精度与最终 fine-tuning 后精度存在相关性。论文在 CIFAR-10 实验中验证了这一点那些未 fine-tuning 时验证精度较高的策略fine-tuning 后通常也更好。因此AMC 可以用未 fine-tuning 精度作为 reward快速探索策略空间。这点和后来的 EagleEye 很有联系AMC: 直接用剪枝后未 fine-tuning 的精度作为搜索 reward。 EagleEye: 发现直接评估受 BN statistics mismatch 影响 因此提出 Adaptive BN 改进候选子网评估。所以从后续发展看AMC 提出了“快速候选评估”的路线而 EagleEye 进一步指出这个快速评估最好先做 BN calibration。4.8 AMC 的完整算法流程AMC 的整体流程可以概括为输入 预训练模型 目标资源约束 底层剪枝方法 验证集 Step 1: 初始化 DDPG agent。 Step 2: 对网络逐层处理 agent 接收当前层 state agent 输出压缩动作 a_t 环境按 a_t 剪当前层 更新 reduced / rest 等状态 Step 3: 所有层处理完后 得到一个完整压缩模型 不 fine-tuning直接验证 根据 accuracy / FLOPs / latency 计算 reward Step 4: 用 reward 更新 actor-critic。 Step 5: 多轮 episode 后 选择搜索到的最好压缩策略。 Step 6: 对最好策略对应的剪枝模型进行正式 fine-tuning。官方代码仓库中的 MobileNet 剪枝流程也对应这三步strategy search → export pruned weights → fine-tune from pruned weights。五、关键公式5.1 State 表示这个状态描述当前层结构、当前层计算量、已减少预算、剩余预算和上一层动作。5.2 Action 表示其中是第 (t) 层的连续压缩动作。5.3 Resource-constrained reward在资源约束内只优化精度。5.4 Accuracy-guaranteed reward这个 reward 在强调精度的同时轻微鼓励更小的 FLOPs 或参数量。5.5 DDPG critic 更新目标论文中的 DDPG 更新使用其中 (b) 是 reward baseline用于降低梯度估计方差在论文中设为 1以避免过度偏向短期 reward。六、实验设置AMC 的实验覆盖 CIFAR-10、ImageNet以及检测任务迁移。涉及模型包括Plain-20 ResNet-56 ResNet-50 VGG-16 MobileNet MobileNet-V2 Faster R-CNN with VGG16 backbone论文说明AMC 在 VGG、ResNet、MobileNet 等多个网络上验证并进一步测试了从分类压缩到目标检测任务的泛化能力。在实现细节上论文使用 DDPG actor-critic。Actor 网络有两个隐藏层每层 300 units输出层用 sigmoid 将动作限制在 ((0,1))critic 网络也有两个 300 units 隐藏层。agent 先用固定噪声探索 100 episodes再用指数衰减噪声 exploitation 300 episodes。官方代码仓库当前主要支持ImageNet 上 MobileNet 的自动剪枝并提供搜索脚本、导出脚本和 fine-tuning 脚本。仓库 README 中还给出了 AMC 压缩 MobileNet-V1、MobileNet-V2 的模型统计例如 MobileNetV1-50% FLOPs 和 MobileNetV2-70% FLOPs 的 Top-1/Top-5 精度。七、实验结果解读7.1 CIFAR-10AMC 优于人工剪枝策略在 CIFAR-10 上论文比较了几种人工策略uniform: 每层均匀压缩。 shallow: 更激进剪浅层。 deep: 更激进剪深层。 AMC: 强化学习自动搜索每层压缩率。在 Plain-20 的 50% FLOPs 压缩下uniform 策略 fine-tuning 后 accuracy 为 89.7%shallow 为 89.2%deep 为 88.3%而 AMC 达到 90.2%。在 ResNet-56 的 50% FLOPs 压缩下uniform 为 89.8%deep 为 91.5%AMC 达到 91.9%。这些结果说明人工规则不是最优AMC 能学习到更好的层级压缩分配。论文 Figure 2 还显示AMC 找到的 Plain-20 剪枝策略呈现类似 bottleneck 的 sawtooth 形状而不是简单均匀压缩。这个结果很重要因为它说明 agent 不是只学到“所有层差不多剪”而是学到了与网络结构相关的非均匀策略。7.2 VGG-16 / ImageNet4× FLOPs reduction 下优于人工方法在 VGG-16 / ImageNet 上论文比较了 FP、RNP、SPP、CP 等人工或启发式方法。在 20% FLOPs 的设置下AMC 的精度下降为 -1.4%优于 CP 的 -1.7%、SPP 的 -2.3%、RNP 的 -3.58% 和 FP 的 -14.6%。论文指出AMC 在无需人工调参的情况下比人工专家精调的 CP 还高 0.3%。这说明 AMC 的价值不仅是“自动化”而是自动策略本身可以超过人工经验策略。7.3 MobileNet / ImageNet紧凑网络上仍然有效MobileNet 本身已经是高效网络进一步剪枝很难。论文指出用简单 width multiplier 或人工策略压缩 MobileNet 会明显掉精度但 AMC 可以提升 accuracy-MACs trade-off。在 MobileNet 上原始模型为 569M MAC、70.6% Top-1、89.5% Top-50.75× MobileNet 为 325M MAC、68.4% Top-1AMC 的 50% FLOPs 模型为 285M MAC、70.5% Top-1、89.3% Top-5。也就是说AMC 在更低计算量下反而明显优于 0.75× uniform MobileNet。这点和 MetaPruning 的结论类似对 MobileNet 这类紧凑模型统一缩放不是最优自动搜索每层通道配置更有效。7.4 真实移动端延迟不是只看 FLOPsAMC 很重要的一点是它不仅优化 FLOPs也可以直接优化真实硬件延迟。在 Google Pixel 1 CPU 上原始 MobileNet 延迟为 123.3ms8.1 fpsAMC 50% latency 模型延迟为 63.3ms16.0 fps实现 1.95× 实测加速同时 Top-1 accuracy 为 70.2%。在 Titan XP GPU 上AMC 50% latency 模型从 0.46ms 降到 0.30ms实现 1.53× speedup。这个结果非常关键。因为很多剪枝论文只报告 FLOPs reduction但 FLOPs 不一定等价于真实延迟。AMC 直接把 latency 作为资源目标说明它已经具有明显的部署导向思想。7.5 MobileNet-V2现代高效网络仍可提升论文还在 MobileNet-V2 上测试 AMC。MobileNet-V2 的 baseline Top-1 为 71.8%uniform 0.75× 模型在 70% FLOPs 下精度下降 2.0%而 AMC 在相同 FLOPs 附近只下降 1.0%。论文指出即使是当时先进的高效网络 MobileNet-V2AMC 仍然可以在相同计算量下提升约 1.0% accuracy。这说明 AMC 不只是对冗余大的 VGG 有用也能用于更难压缩的 efficient CNN。7.6 从分类迁移到检测Faster R-CNN 结果论文还测试了压缩后的 VGG-16 backbone 在 Faster R-CNN / PASCAL VOC 2007 检测任务上的表现。结果显示baseline mAP 为 68.7mAP[0.5,0.95] 为 36.74× AMC 压缩模型达到 68.8 mAP 和 37.2 mAP[0.5,0.95]超过手工压缩方法也略高于 baseline。论文认为这可能是 RL agent 找到的压缩策略起到了正则化效果。这个实验说明AMC 搜索到的压缩策略并不只在分类验证集上有效也能迁移到下游检测任务。八、方法优点8.1 自动决定每层压缩率AMC 最大的贡献是把每层剪枝率从人工经验中解放出来。传统方法需要人工回答这一层剪 20% 还是 50% 浅层是否敏感 深层是否冗余 MobileNet 的 depthwise conv 应该剪多少AMC 则让 agent 通过 reward 自动学习这些策略。8.2 连续动作空间更适合压缩很多 NAS / AutoML 方法使用离散动作但 AMC 认为剪枝率需要细粒度控制因此使用 DDPG 的连续动作空间。这使 agent 可以输出更精细的压缩率而不是只能在几个固定候选值里选择。8.3 搜索阶段不需要 fine-tuningAMC 用未 fine-tuning 验证精度作为 reward大幅降低策略搜索成本。论文在 CIFAR-10 上说明RL 搜索可以在单张 GeForce GTX TITAN Xp 上约 1 小时完成。这也是后来 EagleEye、LeGR、MetaPruning 等方法继续关注“快速候选评估”的原因。8.4 支持 FLOPs、模型大小和真实延迟约束AMC 不是只会做 FLOPs reduction。论文明确说明资源可以是模型大小、FLOPs 或移动端真实推理时间MobileNet 实验也实际测量了 Google Pixel 1 和 Titan XP 上的延迟。这使 AMC 在部署导向剪枝中很有代表性。8.5 对紧凑模型有效MobileNet 和 MobileNet-V2 本身已经是高效网络但 AMC 仍能进一步提升精度-计算量折中。对移动端部署来说这比只压缩 VGG/ResNet 更有实际意义。九、方法局限9.1 强化学习搜索仍有成本虽然 AMC 不对每个候选做 fine-tuning但 RL 搜索仍然需要很多 episodes。论文中 agent 先探索 100 episodes再 exploitation 300 episodes。对更大模型、更复杂任务或更细粒度动作空间搜索成本仍不可忽略。9.2 未 fine-tuning 精度作为 reward 并不总是可靠AMC 假设剪枝后未 fine-tuning 精度能近似预测 fine-tuning 后精度。这个假设在论文实验中有效但后来的 EagleEye 指出剪枝子网直接评估会受到 BN statistics mismatch 影响因此 vanilla evaluation 不一定可靠。所以AMC 的快速评估思想很重要但它的 reward 估计方式后续仍有改进空间。9.3 底层剪枝准则仍然较简单AMC 主要决定每层剪多少但这一层具体剪哪些通道仍依赖底层 pruning algorithm。例如论文中 channel pruning 用 max response selectionfine-grained pruning 用 magnitude pruning。因此AMC 的性能同时取决于外层 RL policy search 底层通道/权重选择准则如果底层准则较弱最终剪枝效果也会受影响。9.4 对 Transformer / LLM 不能直接照搬AMC 原文面向 CNN 的 layer-wise pruning。对于 ViT、LLM、VLM剪枝对象可能变成attention heads MLP neurons tokens layers KV cache vision tokensAMC 的思想可以迁移为把每个模块的压缩率作为连续动作 用强化学习搜索全局压缩策略。但原始的 CNN state embedding、channel pruning 环境和 BN/卷积结构不能直接用于 Transformer。9.5 RL 可复现性和调参难度强化学习方法通常对 reward 设计、探索噪声、episode 数、状态归一化、action bounds 较敏感。AMC 的框架很有启发性但实际复现时比 L1、FPGM、HRank 这类排序式方法更复杂。十、后续影响AMC 的影响主要体现在三个方面。第一它把模型剪枝从“人工制定每层剪枝率”推进到AutoML 自动搜索压缩策略。这对后来的 MetaPruning、EagleEye、LeGR、NetAdapt、HAQ 等自动压缩方法有明显启发。第二它强调真实设备延迟可以直接进入搜索目标而不是只优化 FLOPs。这一点对移动端部署非常重要。论文在 Google Pixel 1 上报告了 MobileNet 从 8.1 fps 到 16.0 fps 的实际提升体现了硬件感知剪枝的早期思想。第三它提出了“快速候选策略评估”的思路搜索阶段不用完整 fine-tuning而用低成本代理指标评估候选策略。后续 EagleEye 对这个问题进行了更深入改进用 Adaptive BN 提高候选子网评估可靠性。从专栏脉络看AMC 可以放在这里Pruning Filters for Efficient ConvNets ↓ ThiNet ↓ Channel Pruning ↓ Network Slimming ↓ NISP ↓ DCP ↓ SFP ↓ FPGM ↓ HRank ↓ GAL ↓ AMC ↓ MetaPruning ↓ EagleEye ↓ LeGR ↓ Rethinking the Value of Network Pruning如果说 FPGM / HRank 问的是哪些 filters 更不重要那么 AMC 问的是能不能让强化学习 agent 自动决定每一层应该压缩多少 并直接面向移动端真实资源约束优化这就是 AMC 在剪枝论文脉络中的核心位置。十一、一句话总结《AMC: AutoML for Model Compression and Acceleration on Mobile Devices》提出用 DDPG 强化学习自动搜索每层压缩率把模型剪枝从人工经验规则推进到自动化、资源约束、移动端延迟感知的压缩策略搜索其核心价值不是新的 filter 重要性指标而是用 AutoML 自动决定整个网络的 layer-wise compression policy。