跳到主要内容

把约束搜进去 — MnasNet 到 RegNet

这一章讲三件事: 奖励函数里怎么写进「真实手机上的响应快慢」;深度、宽度、分辨率 三个旋钮为什么必须一起拧;以及 RegNet 如何把「搜一个模型」升级成「搜一片模型」。 读完你会带走 AutoML 的下半场逻辑:目标函数里写什么,就搜出什么。

1. 这一章讲什么

第 07 章的 NAS 只会一件事:最大化准确率。搜出的模型「分支复杂、并行性很差而且 速度很慢」,上不了手机1。这一章五节,讲的是同一台搜索机器换装四种目标函数的过程: 时延(MnasNet)、全局搜索加人工收尾(MobileNet v3)、三个缩放旋钮合一(EfficientNet v1)、 训练速度也入账(EfficientNet v2),最后连「搜什么」本身都被升级(RegNet)。

2. 顶层全景:尺子的进化

NAS(上一章): 最大化 验证集准确率
MnasNet: 最大化 准确率 × (真实时延的函数) ← 在 Pixel 手机上实测
EfficientNet: 复合缩放(深度、宽度、分辨率一起拧)
EfficientNet v2:+ 训练速度入奖励;大图配强正则
RegNet: 不搜模型,搜「设计空间」的质量分布
(尺子从「点冠军」换成「整体分布」)

图说:每一行都是对上一行的「尺子不满意」。

3. 核心原理

3.1 MnasNet:把秒表写进奖励函数

本章的主走查是 §3.1 那笔 113ms 对 183ms 的实测账:同一把 FLOPS 尺子量不出 的差距,看奖励函数换尺前后各搜出什么、各付什么代价;§3.5 再用一笔 100/1000 采样 的对照账,把「尺子」的怀疑推到设计空间一层。

书里先给了一记耳光式的数据:MobileNet 和 NASNet 的 FLOPS 几乎一样 (5.75×10⁸ 对 5.64×10⁸),真实速度却是 113ms 对 183ms——差了六成2。 原因:FLOPS 数得出乘加次数,数不出内存读写和硬件脾气。

MnasNet 的改法分两半。目标函数:在真实手机(Pixel)上实测每个候选要跑多久, 与准确率一起写进奖励——延迟:从发出请求到拿到结果要等多久3。奖励怎么平衡?书里给了一条经验兑换率—— 模型响应慢一些,准确率大约提升 5%,由此解出软约束系数 β≈−0.07:约束之内 不逼速度,超出约束则速度与准确率一起优化;硬约束(只卡一条延迟线)搜出的模型 更快但更差4搜索空间:既然要逐层搜,就用 MobileNet v2 拆出的现成积木 (MBConv、3×3/5×5 核、SE 开关),把空间压小;逐层独立搜的底气正来自于此5

结果意味深长:搜出的结构与 MobileNet v2 非常相似——「人工设计的模型其实是非常 优秀的」;还真搜出了 5×5 卷积,且速度精度平衡得好6。书里的冷思考同样要记: 只用一种型号的手机做实测,「是否其网络的设计过于拟合了这个型号的手机的性能?」7

3.2 MobileNet v3:搜索打底,人工收尾

MobileNet v3 是「全局搜索+局部收尾+人工修剪」的三段式。全局一段沿用 MnasNet (块级别搜索),局部一段用 NetAdapt 对单层做微调(微调:在第 11 章会正式定义,这里指拿已训好的网络继续小步调参):反复尝试「缩小某层的扩展层或 瓶颈层」,留下「准确率变化/延迟变化」比值最高的那一步8

人工收尾的三刀都有清晰的账:输出模块把全局平均池化提前——原本在 7×7 特征图上 做的一堆升维卷积,改到 1×1 的小图上做,速度大幅提升而准确率不掉9;首层通道 32 降到 16,因为学出来的卷积核里「含有大量的彼此的镜像」,重复了10;激活函数 换成 h-swish——sigmoid 系一路优化下来的 swish(即 SiLU)精度好但算得慢,h-swish 用 分段函数仿出它的形状,「运算速度要明显快于 swish 和 sigmoid」,于是前半段大图用 ReLU、后半段小图用 h-swish,按图下菜11。书里对这篇论文的评语同样值钱: 「一篇创新点很多但内容有些零散的论文」——分阶段搜索加人工设计的组合拳,本身就是范式的 过渡形态12

3.3 EfficientNet:三个旋钮,一根绳

调过模型的人都知道三个旋钮:深度、宽度(通道数)、输入分辨率。EfficientNet v1 指出单拧任何一个都会撞墙——加宽有卷积核冗余,加深有退化(第 03 章),放大分辨率 而核不够多时,「这些纹理信息也是无法捕获的」13。三者还互相牵连:图放大了, 深层需要更大感受野,得加深;纹理变多了,需要更多通道,得加宽14

解法是复合缩放:用固定比例把三个旋钮拴在一起,网格搜索出比例 α=1.2、β=1.1、γ=1.15(深度涨 1.2 倍时,宽度和分辨率分别涨 1.1 与 1.15 倍), 然后一个总开关 φ 从 B0 一路放大到 B715。成绩的量感:B7 对比同性能的 GPipe, 「参数数量减小到 1/8.4,速度增加到 6.1 倍」16。连工程细节书都没放过: 通道数取 8 的倍数,因为显卡按 8 路分配计算17。把同一套比例套到 MobileNet 和 ResNet 上也涨点——说明这套比例摸到的是通用规律,不是自家网络的私货18

3.4 EfficientNet v2:训练本身也要快

v2 把尺子又推了一格:训练速度也算成本。三个发现:大图训练慢(显存固定, 批次只能变小);浅层的深度可分离卷积反而比普通卷积慢——硬件对普通卷积的优化更好 (第 06 章埋的伏笔在这里爆响)19;MBConv 在前几阶段换成把深度卷积换回普通 卷积的 Fused-MBConv,实验显示「全融合或者全不融合都不是最好的选择」,融合前 1~3 阶段 最优20

更深的一刀是渐进学习:大图训练更容易过拟合(细节多,训练与测试的细节分布 对不上),所以大图该配更强的正则;反过来,训练早期用小图加弱正则,随训练推进 同步放大图像尺寸与正则强度21。对照实验给了底气:同一模型,300 尺寸图 配正则 15 时比配 5 高出 0.7 个点,而 128 小图上反过来22。书里的定位很妙: 渐进学习是「过拟合难度从易到难」的渐进式开发23

3.5 RegNet:不搜模型,搜「一窝模型」

前几代 AutoML 的评价单位是「搜索出的最优实例」。RegNet 说这把尺子有偏: 搜索和训练都带随机性,单点冠军说服力不足——书里的实验:同一设计空间抽 100 个和 1000 个模型,比较最优者,90% 的情况下 100 个的那组「输」;可两组的整体错误率分布 (EDF 曲线)基本一致(D=0.079,p 值 0.6,统计上是同一分布)24

于是 RegNet 把对象换成设计空间:模型族的参数化——哪些旋钮、每个旋钮什么取值范围。 优化流程是递进式的五步(采样、画分布、看数据、人工分析、收紧)——一轮一轮收紧,从 AnyNetX 的 约 10¹⁸ 个候选一路收到 RegNetX 的 3.0×10⁸,顺手得出四条设计准则:瓶颈率共享、 分组数共享、通道数递增、每块层数递增25。长训后的细则也很反直觉: 每块 20 层左右最好(「这与我们的『越深的网络效果越好』的认识是相违的」)、瓶颈率 1 最好(不做沙漏形)26

书里对 RegNet 的批评一点没客气:初始空间只训 10 个 epoch,「未完全收敛的模型能否充分 代表设计空间的真正质量值得商榷」;逐步优化「过于依赖人工经验」;最优模型 79.9% 对 EfficientNet-B7 的 84.3%,「结果不具备足够的说服力」27

判断(我们的,不是书里的): 这一章与第 07 章合起来,给出了 AutoML 的完整 评价框架——问三件事:搜的是什么空间?优化的什么目标?用什么尺子验收? 三问任何一问含糊,「自动搜出 SOTA」就是营销话术。 如果错,会错在: 如果某天搜索空间本身小到能把所有情况列完,尺子问题自然消失; 但书里的证据表明 2022 年前没有任何现实场景满足这个条件。

4. 作者的判断与证据

书里给了实验证据的: 113ms 对 183ms 的实测;软约束对硬约束的两组搜索结果; Fused-MBConv 的融合阶段对照表;图像尺寸与正则强度的 RandAug 对照表;RegNet 的 分布一致性(KS 检验)与 100/1000 采样对照。

书里署名的批评/推测: 对 MnasNet 单机型实测的质疑、对 MobileNet v3「零散」的 评语、对 RegNet 的三条不满,全部以作者口吻署名;「人工设计与强化学习互相配合应该 是一个更好的发展方向」是作者的展望。

5. 边界与局限

  • 所有实测延迟都绑定具体硬件(Pixel、TPU、V100),换硬件结论要重新量;

  • EfficientNet 的复合缩放比例(1.2/1.1/1.15)是从 B0 网格搜索来的,换个基线网络 未必照搬;

  • 书止于 2022 年:后来「先大规模预训练、再缩水部署」的路线部分绕开了逐任务搜索, 本章的方法论(目标函数设计)却不过时;

  • 原书 3.7.5 的 Lite R-ASPP(MobileNet v3 之上的一个约一页篇幅的轻量分割头:空洞卷积 提密集特征+低层级特征补细节)属于应用层组装,未纳入本章主线,机制要点见原书该节。

6. 可带走的

  1. FLOPS 不等于快:同一 FLOPS 的模型真实耗时可以差六成——尺子必须是实测延迟;
  2. 目标函数里写什么就搜出什么:加一项延迟(MnasNet)、加一项训练速度(EfficientNet v2), 搜出的模型性格立刻不同;
  3. 软约束优于硬约束:留一条「用精度换速度」的通道,搜索才不会一头撞死在约束线上;
  4. 深度、宽度、分辨率三者联动:复合缩放的比例可以搜,「单拧一个旋钮」的调参法可以退休;
  5. 大图配强正则、训练由小到大渐进——这条也适用于任何分阶段训练的场景;
  6. 评「最优模型」先看分布:点冠军可能只是随机性的幸运儿;
  7. 人工设计没有输给搜索:搜出的结构与 MobileNet v2 高度相似——先有好积木,搜索才有意义。

7. 原文地图

主题原书节原文位置
MnasNet 动机与数据3.6 MnasNettext/07-p121-140.txt:548(搜「分支复杂」) · text/07-p121-140.txt:578(搜「113ms」)
奖励与软硬约束3.6.1 优化目标text/07-p121-140.txt:558(搜「优化目标」) · text/07-p121-140.txt:598(搜「大约提升 5%」) · text/07-p121-140.txt:603(搜「软约束」)
分层搜索空间与结果3.6.2 搜索空间text/08-p141-160.txt:8(搜「分解层次搜索空间」) · text/08-p141-160.txt:32(搜「人工设计的模型其实是非常优秀」) · text/08-p141-160.txt:38(搜「搜索到了 5 × 5 卷积」)
单机型质疑3.6.4 小结text/08-p141-160.txt:57(搜「过于拟合了这个型号」)
MobileNet v3 三段式3.7 MobileNet v3text/08-p141-160.txt:75(搜「NetAdapt」) · text/08-p141-160.txt:132(搜「改变扩展层的大小」)
人工修剪三刀3.7.3 / 3.7.4text/08-p141-160.txt:173(搜「池化操作提前」) · text/08-p141-160.txt:181(搜「彼此的镜像」) · text/08-p141-160.txt:187(搜「明显快于 swish」)
小结「零散」3.7.6 小结text/08-p141-160.txt:291(搜「零散」)
单维缩放撞墙3.8.1 背景知识text/08-p141-160.txt:328(搜「无法捕获的」) · text/08-p141-160.txt:336(搜「互相关联」)
复合缩放与成绩3.8.2 EfficientNet v1 详解text/08-p141-160.txt:365(搜「复合缩放方法」) · text/08-p141-160.txt:389(搜「1.2、β」) · text/08-p141-160.txt:401(搜「6.1 倍」) · text/08-p141-160.txt:403(搜「8 的整数倍」)
套用到其他网络3.8.2 EfficientNet v1 详解text/08-p141-160.txt:406(搜「复合缩放应用到」)
v2 背景与三因素3.9 EfficientNet v2text/08-p141-160.txt:425(搜「87.3%」) · text/08-p141-160.txt:447(搜「优化有所欠缺」) · text/08-p141-160.txt:453(搜「全融合或者全不融合」)
大图过拟合与渐进学习3.9.1 / 3.9.2text/08-p141-160.txt:478(搜「更容易过拟合」) · text/08-p141-160.txt:545(搜「渐进学习」) · text/08-p141-160.txt:488(搜「83.2」)
RegNet 设计空间3.10 RegNettext/08-p141-160.txt:585(搜「便于量化的搜索空间」) · text/08-p141-160.txt:625(搜「有偏的」) · text/08-p141-160.txt:645(搜「90% 的情况下」) · text/08-p141-160.txt:660(搜「0.079」)
递进设计与四准则3.10.2 RegNet 详解text/09-p161-180.txt:67(搜「递进式的设计方法」) · text/09-p161-180.txt:143(搜「通道数逐渐增加」) · text/09-p161-180.txt:178(搜「20 个层是比较好的」)
批评3.10.3 小结text/09-p161-180.txt:222(搜「值得商榷」) · text/09-p161-180.txt:223(搜「过于依赖人工经验」) · text/09-p161-180.txt:225(搜「不具备足够的说服力」)

Footnotes

  1. 出处:「3.6 MnasNet」(text/07-p121-140.txt:548,搜「分支复杂」)。

  2. 出处:「3.6.1 优化目标」(text/07-p121-140.txt:578,搜「113ms」)。MobileNet 5.75×10⁸ FLOPS/113ms 对 NASNet 5.64×10⁸/183ms。

  3. 出处:「3.6.1 优化目标」(text/07-p121-140.txt:575,搜「Pixel」)。原文:延迟是在真实硬件上测出来的真实值,设备是 Google 的 Pixel 手机。

  4. 出处:「3.6.1 优化目标」(text/07-p121-140.txt:603,搜「软约束」)与(text/07-p121-140.txt:613,搜「软约束上搜索出来的模型」)。硬约束 α=0、β=−1;软约束 α=β=−0.07。

  5. 出处:「3.6.2 搜索空间」(text/08-p141-160.txt:21,搜「MobileNet v2 拆分出的操作单元」)。

  6. 出处:「3.6.2 搜索空间」(text/08-p141-160.txt:32,搜「人工设计的模型其实是非常优秀」)与(text/08-p141-160.txt:38,搜「搜索到了 5 × 5 卷积」)。

  7. 出处:「3.6.4 小结」(text/08-p141-160.txt:57,搜「过于拟合了这个型号」)。

  8. 出处:「3.7.2 网络搜索」(text/08-p141-160.txt:129,搜「改变值的比值」)与(text/08-p141-160.txt:132,搜「改变扩展层的大小」)。原文:最大化准确率改变值与延时改变值的比值。

  9. 出处:「3.7.3 人工设计」(text/08-p141-160.txt:173,搜「池化操作提前」)。

  10. 出处:「3.7.3 人工设计」(text/08-p141-160.txt:181,搜「彼此的镜像」)。

  11. 出处:「3.7.2 / 3.7.3」(text/08-p141-160.txt:225,搜「SiLU」)与(text/08-p141-160.txt:187,搜「明显快于 swish」)、(text/08-p141-160.txt:194,搜「速度更快的 ReLU」)。

  12. 出处:「3.7.6 小结」(text/08-p141-160.txt:291,搜「零散」)。

  13. 出处:「3.8.1 背景知识」(text/08-p141-160.txt:328,搜「无法捕获的」)。

  14. 出处:「3.8.1 背景知识」(text/08-p141-160.txt:336,搜「互相关联」)。

  15. 出处:「3.8.2 EfficientNet v1 详解」(text/08-p141-160.txt:388,搜「网格搜索」)与(text/08-p141-160.txt:389,搜「1.2、β」)。

  16. 出处:「3.8.2 EfficientNet v1 详解」(text/08-p141-160.txt:401,搜「6.1 倍」)。

  17. 出处:「3.8.2 EfficientNet v1 详解」(text/08-p141-160.txt:403,搜「8 的整数倍」)。

  18. 出处:「3.8.2 EfficientNet v1 详解」(text/08-p141-160.txt:406,搜「复合缩放应用到」)。

  19. 出处:「3.9.1 算法动机」(text/08-p141-160.txt:447,搜「更好的优化」)。

  20. 出处:「3.9.1 算法动机」(text/08-p141-160.txt:453,搜「全融合或者全不融合」)。表 3.3:融合 1~3 段时 TPU 362 张/秒对不融合 262,准确率 83.1% 对 82.8%。

  21. 出处:「3.9.2 EfficientNet v2 详解」(text/08-p141-160.txt:545,搜「渐进学习」)。

  22. 出处:「3.9.1 算法动机」(text/08-p141-160.txt:486,搜「随机扩充尺度」)。表 3.4:输入 300 时正则 5 对 15 为 82.5 对 83.2;输入 128 时正则 5 反而最优(78.3)。

  23. 出处:「3.9.3 小结」(text/08-p141-160.txt:569,搜「迭代式开发」)。

  24. 出处:「3.10.1 设计空间」(text/08-p141-160.txt:645,搜「90% 的情况下」)与(text/08-p141-160.txt:660,搜「0.079」)。p 值 0.6,两组分布无法区分。

  25. 出处:「3.10.2 RegNet 详解」(text/09-p161-180.txt:139,搜「参数数量减少了约」)与(text/09-p161-180.txt:143,搜「通道数逐渐增加」)。

  26. 出处:「3.10.2 RegNet 详解」(text/09-p161-180.txt:178,搜「20 个层是比较好的」)与(text/09-p161-180.txt:181,搜「沙漏型」)。

  27. 出处:「3.10.3 小结」(text/09-p161-180.txt:222,搜「值得商榷」)与(text/09-p161-180.txt:225,搜「不具备足够的说服力」)。