当前位置: 首页 > news >正文

模型剪枝经典论文精读: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 tokens

AMC 的思想可以迁移为:

把每个模块的压缩率作为连续动作, 用强化学习搜索全局压缩策略。

但原始的 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。

http://www.jsqmd.com/news/1186103/

相关文章:

  • CPM4OSSP-PROXY核心功能解析:软件包依赖管理的终极指南
  • JDspyder京东抢购脚本:5分钟快速部署的终极自动化秒杀工具
  • 2026筑宅安|汕尾卫生间漏水专业维修,解决墙面潮湿发霉、渗水到楼下难题 - 筑宅安
  • 10个Boogu-Image-0.1-Turbo-8bit实用技巧:提升图像生成质量与速度
  • Hugo静态网站搭建个人简介全攻略
  • ColorMatchTabs测试与调试:确保动画组件稳定性的完整流程
  • ncmdump终极指南:三步解密网易云NCM加密音乐,免费享受跨平台播放自由
  • 3分钟上手VibeThinker-3B-4bit:MLX框架下的极速部署指南
  • TLS 1.3 握手过程动画级讲解 + Wireshark 验证
  • 掌握NVIDIA Wan2.2-T2V-A14B-Diffusers-NVFP4的提示词工程:从基础到高级创作技巧
  • Docker镜像加速:从超时到秒下的配置实战与避坑指南
  • 微信小游戏开发实战:从零拆解“汉字找茬”源码架构与实现
  • 【PyTorch】 告别Hook:使用IntermediateLayerGetter与Torch FX高效提取与可视化特征图
  • ColorMatchTabs未来路线图:了解iOS动画标签组件的发展方向和社区支持计划
  • 宝珀中国官方售后服务中心|官方电话和网点地址权威信息通知(2026年7月更新) - 宝珀官方售后服务中心
  • APAddressBook 0.1.x到0.2.x迁移指南:轻松升级你的通讯录功能
  • 【DELL】戴尔笔记本BIOS硬盘模式设置详解:从RAID ON到AHCI的实战切换
  • 多智能体协同推理:分布式优化与工业实践
  • Windows C盘清理全攻略:从系统工具到第三方软件完整方案
  • 7月金价高位出手指南:西安黄金回收合规渠道盘点,无折旧无隐形扣费 - 全国二奢机构参考
  • Kimi-K2.5多模态模型与智能体集群技术解析
  • 忻州黄金回收红黑榜?这6家实力派店铺必须拥有姓名!覆盖14区县,变现超省心 - 清奢黄金上门回收
  • Hy3-preview-MTP-4bit常见问题解答:解决部署与使用中的10个难题
  • FakeLocation安卓虚拟定位终极指南:保护隐私与突破地理限制的完整解决方案
  • 开发者必读:LibcarePlus源码结构与核心API详解
  • AI教材生成技术:低查重与高效内容生产实践
  • 银河麒麟服务器操作系统V10SP2实战:基于vsftpd构建多角色精细化权限FTP服务
  • Namo Turn Detector v1 - Korean:革命性韩语对话AI的终话检测突破
  • 探索VibeThinker-3B-4bit的数学推理能力:从基础运算到复杂问题的解决之道
  • 【长沙黄金回收避坑指南】闲置金饰变现别踩雷!这6家靠谱门店覆盖全城,位置电话都给你整理好了! - 清奢黄金上门回收