模型剪枝经典论文精读: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 2018,CVF 页面显示其收录于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 使用的是DDPG,Deep 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 或参数量一个小激励。论文指出,通过这样的 reward,agent 可以自动探索“在不伤害精度的前提下还能压缩到什么极限”。
这类协议适合:
精度优先应用: 例如相册、云端视觉服务、质量敏感任务。 希望压缩模型: 但不希望明显掉点。4.7 为什么搜索阶段可以不 fine-tuning?
AMC 的搜索效率依赖一个经验观察:
剪枝后未 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-10:AMC 优于人工剪枝策略
在 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 / ImageNet:4× 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-5;0.75× MobileNet 为 325M MAC、68.4% Top-1;AMC 的 50% FLOPs 模型为 285M MAC、70.5% Top-1、89.3% Top-5。也就是说,AMC 在更低计算量下反而明显优于 0.75× uniform MobileNet。
这点和 MetaPruning 的结论类似:对 MobileNet 这类紧凑模型,统一缩放不是最优;自动搜索每层通道配置更有效。
7.4 真实移动端延迟:不是只看 FLOPs
AMC 很重要的一点是:它不仅优化 FLOPs,也可以直接优化真实硬件延迟。
在 Google Pixel 1 CPU 上,原始 MobileNet 延迟为 123.3ms,8.1 fps;AMC 50% latency 模型延迟为 63.3ms,16.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-V2,AMC 仍然可以在相同计算量下提升约 1.0% accuracy。
这说明 AMC 不只是对冗余大的 VGG 有用,也能用于更难压缩的 efficient CNN。
7.6 从分类迁移到检测:Faster R-CNN 结果
论文还测试了压缩后的 VGG-16 backbone 在 Faster R-CNN / PASCAL VOC 2007 检测任务上的表现。
结果显示,baseline mAP 为 68.7,mAP[0.5,0.95] 为 36.7;4× 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-tuning
AMC 用未 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 selection,fine-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。