这一篇在干嘛?
论文出处:Luo 等,ACM TECS 2024,第 3 章 Automated Network Design。本篇覆盖 NAS 的三要素:模块化搜索空间(cell-based / block-based)、搜索策略(强化学习 / 进化算法 / 可微分梯度)、加速技术与扩展(超网、延迟预测、精度预测、零成本代理、Benchmark)。 最值得记住的三个数字:40000 → 10 GPU 小时。MnasNet 在 ImageNet 上搜一次要 40000 V100 GPU 小时,而 LightNAS 只要 10 RTX 3090 GPU 小时——中间隔着参数共享、one-shot 超网、可微分松弛、延迟查表、自动学习 λ 这一整条技术链。第二个数字:12800 个独立候选架构,这是最早的强化学习 NAS 为了让 RNN 控制器收敛必须训的网络数量。第三个:6.3×10²⁹,这是 DARTS 那个看起来很小的 cell 搜索空间里包含的候选架构总数。 一句话概括本篇主线:NAS 的全部工程努力,都在跟”评估一个架构好不好”这件事的昂贵代价作斗争。
一、NAS 到底在解决什么问题
1.1 从”人设计”到”机器设计”
第 ① 篇讲的手工设计有一个根本缺陷:它高度依赖人类专家的经验,通过反复试错来探索新结构。每验证一个想法,就得完整训练一次网络、跑一次评测。这不仅需要大量工程投入,还需要惊人的算力。更要命的是,人能想到的结构受限于人的想象力。
神经架构搜索(Neural Architecture Search, NAS),也常被归入 AutoML(自动化机器学习),就是要让机器自动去探索网络结构。近十年 NAS 在准确率和效率两个维度上都超过了传统手工设计。
1.2 NAS 的标准三要素
任何一篇 NAS 论文,基本都可以拆成三个可替换的模块:
| 要素 | 含义 | 本文对应 |
|---|---|---|
| 搜索空间 | 允许搜索的所有网络结构的集合 | 第 2 节 |
| 搜索策略 | 在 里怎么找 | 第 3~5 节 |
| 性能评估 | 怎么快速知道一个候选架构好不好 | 第 6 节 |
理解 NAS 的钥匙,是意识到搜索空间决定了算法的性能上限。如果最优结构不在 里,搜索策略再聪明也搜不出来。
1.3 为什么必须”模块化”搜索
搜索空间为什么难设计?因为自由度实在太多了:
- 算子候选(operator candidates):1×1、3×3、5×5、7×7 卷积,池化,跳连……
- 网络配置(network configurations):这些算子怎么组合、每一层通道数怎么排。
如果按”逐层”的细粒度去搜,一个 20 层的网络意味着每层的算子、通道数都是独立变量,搜索空间是天文数字,根本搜不动。
所以主流做法是模块化搜索空间(modular search space)——先搜出一个小的”模块(cell 或 block)“,再把这个模块重复堆叠成完整网络。这是粗粒度搜索,把复杂度从”层数的指数”降到”模块内结构的指数”。
图 7:NASNet 与 DARTS 的 cell-based 搜索空间示意。两者的区别在于算子候选的挂靠位置——NASNet 把算子放在节点(node)上,DARTS 把算子放在边(edge)上。这一字之差,是可微分搜索得以成立的关键。
二、搜索空间:cell-based 与 block-based 之争
2.1 Cell-Based 搜索空间:NAS 早期的绝对主流
由 NASNet 和 DARTS 开创。它的结构是:
- 定义两种 cell:normal cell(保持空间尺寸)和 reduction cell(以 stride=2 的卷积开头,负责降采样)。
- 每种 cell 都被编码成一个有向无环图(DAG, Directed Acyclic Graph)。
- 搜索结束后,把搜到的 cell 结构重复堆叠成最终网络。
DARTS 版本的 cell:每个 cell 有两个输入节点、一个输出节点,中间是若干有序节点,每个节点 是一个隐表示(就是一张特征图)。从节点 到 的有向边上挂着一组候选算子 。于是中间节点由它的所有前驱节点决定:
这个搜索空间有多大? DARTS 的 cell 搜索空间包含 个候选架构。作为对比,可观测宇宙里的恒星数量估计在 量级。
为什么"搜完就重复堆叠"是个问题
cell-based 的做法是:搜出一个最优 cell,然后把同一个 cell 结构在整个网络里重复堆叠。MnasNet 明确指出这会导致算子多样性(operator diversity)缺失,从而精度和效率都变差。真实的好网络在不同深度需要不同的结构——浅层要大感受野下采样,深层要更多通道。
2.2 Block-Based 搜索空间:为硬件而生
block-based 的思路更朴素:每个候选架构由多个串联的算子候选组成,每个 block 可以不一样。
关键区别在于它从成熟的手工网络里取材。比如:
- ProxylessNAS 的 block 空间基于 MobileNetV2 的倒残差块;
- HSCoNAS 的 block 空间基于 ShuffleNetV2;
- HURRICANE 发现不同硬件平台偏好不同搜索空间,于是做了一个混合 block 空间,同时包含 MobileNetV2 和 ShuffleNetV2 的块。
图 8:基于 MobileNetV2 的 block-based 搜索空间示意(MnasNet)。每个 block 独立选择自己的算子与配置,允许算子多样性。
为什么 block-based 对硬件友好? 论文给了两个理由:
- 内存访问开销。cell-based 的候选架构包含多条并行分支(看图 7 就能直观感受到)。根据 roofline 分析,多分支结构会带来额外的内存访问开销,直接恶化目标硬件上的推理效率。block-based 是串联的单路结构,没有这个问题。
- 算子多样性。block-based 允许不同 block 用不同算子,更容易搜到精度—效率权衡更优的解。
因此 MnasNet、ProxylessNAS、OFA、HSCoNAS、SurgeNAS、LightNAS 这些硬件感知 NAS 的主力选手,全部采用 block-based。
| 对比维度 | Cell-Based | Block-Based |
|---|---|---|
| 结构 | 多分支 DAG,算子挂在边/节点上 | 单路串联 block |
| 堆叠方式 | 搜一个 cell,重复堆叠 | 各 block 独立选择 |
| 算子多样性 | 差 | 好 |
| 内存访问 | 多分支,开销大 | 单路,开销小 |
| 硬件友好度 | 低 | 高 |
| 代表工作 | NASNet、DARTS、ENAS | MnasNet、ProxylessNAS、FBNet、OFA |
| 搜索空间大小 | DARTS:6.3×10²⁹ | MnasNet:约 10³⁹ |
为什么 block-based 比 cell-based 更适合硬件感知 NAS?
两个原因:① 内存访问——cell-based 的候选架构包含多条并行分支(看图 7 就很直观),按 roofline 分析会带来额外内存访问开销,恶化端侧推理效率;block-based 是单路串联结构,没有这个开销。② 算子多样性——cell-based 搜出一个 cell 后重复堆叠整个网络,导致各层结构雷同;block-based 允许每个 block 独立选算子,更容易搜到精度—效率权衡更优的解。附带后果:延迟查找表(LUT)只对 block-based 可靠,cell-based 必须上学习型预测器。
三、搜索策略一:强化学习(Reinforcement Learning)
3.1 开山之作:用 RNN 当”架构生成器”
NAS 领域的第一篇工作(论文 [137])用强化学习(RL) 作为搜索引擎,方案出奇地直接:
- 用一个 RNN(循环神经网络)作为 RL 控制器,从搜索空间里”生成”一个候选架构描述;
- 把这个候选架构从零开始训练,在目标任务上测出准确率;
- 把准确率作为奖励(reward)反馈给 RNN 控制器,更新控制器参数;
- 控制器下一轮就能生成更好的架构。
图 9:强化学习 NAS 中,RNN 控制器如何从搜索空间采样候选卷积架构。控制器输出一串”架构描述 token”,采样出的架构被训练后把准确率回传给控制器。
成绩:RNN 生成的网络在 CIFAR-10 上达到 96.35% Top-1,与 ResNet 等手工网络相当甚至更好。这标志着 NAS 时代的开启。
代价呢? 为了让控制器收敛,它训练了 12800 个独立的候选架构。用论文的数据,一次搜索实验在 450 张 NVIDIA GTX 1080 Ti GPU 上跑 3~4 天。
3.2 NASNet:换上 cell 搜索空间
NASNet 把搜索空间换成前面说的 cell-based,精度进一步提升:CIFAR-10 上 97.6%,比前作高 1.25%,参数反而更少(37.4 M → 27.6 M)。
3.3 ENAS:参数共享,把成本打下来三个数量级
ENAS(Efficient NAS) 提出了一个改变整个领域的范式——参数共享(parameter sharing):
强制所有候选架构共享同一套网络权重,从而避免每个候选架构都从零训练。
效果极其显著:同样在 CIFAR-10 上,ENAS 找到 97.11% 精度的网络,只用了 不到 16 小时、单张 NVIDIA GTX 1080 Ti GPU。对比前作的”450 卡 × 3~4 天”,这是三个数量级的压缩。
这个范式太成功了,以至于后续 DARTS、OFA 等几乎所有主流 NAS 都建立在它之上。
参数共享为什么能行?又为什么有隐患?
为什么能行:把搜索空间里的所有候选架构塞进一个”超网(supernet)“,所有子结构共用同一份权重。训练超网一次,之后所有候选架构都可以直接继承权重来评估,不必单独训练。 隐患:不同子结构的权重被强行耦合在一起,会互相干扰(weight interference)。这导致”超网里的排名”和”单独训练的真实排名”不一定一致——这个问题后面会以”排序相关性(ranking correlation)“的名义反复出现。
3.4 MnasNet:把硬件延迟写进奖励函数
早期的 RL-NAS 有个共同问题:只优化精度,完全无视延迟、能耗这些嵌入式系统最关心的指标。
MnasNet 第一个把它形式化为一个多目标优化问题,同时优化精度和延迟,并把延迟直接在目标硬件上实测。它的目标是找到帕累托最优(Pareto-optimal)的架构 :
其中 是目标任务精度, 是目标硬件延迟, 是指定的延迟约束(latency constraint)。
权重指数 控制精度与延迟的权衡力度,是一个分段函数:
和 是与应用相关的超参数。MnasNet 依据”延迟翻倍通常带来约 5% 的相对精度提升”这一经验观察,取 。
图 10:MnasNet 总览。它引入灵活的 block-based 搜索空间,并设计了多目标 RL 奖励函数来优化 RNN 控制器,同时把真实硬件上测得的延迟纳入目标。
显式搜索成本 vs 隐式搜索成本
这是本篇非常重要的一个观念。MnasNet 的问题不只是”搜一次要多久”(显式成本),更麻烦的是:为了得到恰好满足延迟约束 的架构,你必须反复调 和 。这两个超参数敏感且难调,换一个新硬件或新搜索空间就得重调一遍。论文指出,通常需要重复 7 次搜索实验来试错调参——总搜索成本直接乘以 7(隐式成本)。 而且延迟是在真实设备上实测的,面对 MnasNet 那约 的搜索空间,这种实测的工程量非常恐怖。
3.5 TuNAS 与 MONAS:更省心的奖励函数
TuNAS 重新设计了奖励函数,消掉了那个难调的指数:
其中 取绝对值, 是一个有限的负数值,控制”把延迟拉向 “的力度。直觉很简单:延迟偏离目标值 越远,惩罚越大;而且惩罚是双侧对称的——延迟太低也罚(因为那意味着精度白白牺牲了),这比 MnasNet 的分段函数更合理。
MONAS 则把目标换成”精度 + 能耗”:
其中 控制精度与能耗的权衡。这个形式很容易推广到其他约束(比如延迟、内存)。
四、搜索策略二:进化算法 + One-Shot 超网
4.1 进化算法的四步循环
进化算法(Evolutionary Algorithm) 凭借灵活性、概念简单、性能有竞争力成为 NAS 的另一大分支。标准流程是四步循环:
- 采样:从搜索空间采样一批候选架构,构成子代种群(child population);
- 评估:评估子代中每个候选架构的性能(精度、效率等);
- 选择:保留子代中最好的 top-k 个,构成父代种群(parent population),淘汰差的;
- 变异/交叉:对父代进行操作,生成下一代子代。
重复直到收敛。生成子代的方式有两种经典操作:
- 交叉(crossover):随机选两个父代架构,“杂交”出一个新的子代架构;
- 变异(mutation):随机选一个父代架构,以固定概率改变它的某些算子。
早期进化 NAS 的死穴
早期进化 NAS 同样必须从零训练大量独立候选架构来评估精度,算力开销巨大。这个死穴和早期 RL-NAS 一模一样——所以它们都被同一个解药救了:one-shot 超网。
4.2 One-Shot NAS:把整个搜索空间装进一个超网
One-Shot NAS 是当前最主流的 NAS 范式。核心思路:
设计一个包含搜索空间中所有候选架构的超网(supernet)。只需训练这一个超网,之后所有候选架构都可以继承超网权重来快速评估。
图 11:One-shot 超网示意。实线表示该算子候选被启用,虚线表示该算子属于搜索空间但当前被禁用。整个超网包含了搜索空间中的所有候选架构。
训练超网本身非常简单——用带动量的标准 SGD 就行。超网训好之后,就可以用**权重共享(weight sharing)**范式快速、可靠地近似不同候选架构的性能:
图 12:One-shot NAS 中的候选架构评估。从预训练好的超网里”抽出”一条子路径,直接继承它的权重来评估性能,无需从头训练。
超网训好后,用标准进化算法在它上面搜索高精度架构就变得非常直接。
一个容易漏掉的细节
one-shot 搜出来的架构仍然需要在目标任务上重新训练或微调,才能恢复精度并部署到目标硬件。超网权重只是用来”排序”的,不能直接当最终模型用。
4.3 超网训练的三代改进
SPOS(Single Path One-Shot) 指出 one-shot 的两个关键问题:
- 超网中的网络权重在训练过程中深度耦合;
- 联合优化进一步加剧了候选架构与超网权重之间的耦合。
解法:单路径 one-shot——每次从超网中均匀采样一条单路径子网络来训练,而不是训练整个超网。好处有二:① 显存消耗降到单路径级别;② 最终搜出的架构性能更好。
FairNAS 进一步指出:均匀采样只保证了**“软公平”(soft fairness)。要做到”严格公平”(strict fairness),FairNAS 在每次训练迭代中采样多条单路径子网络,强制超网中所有算子候选都被均等优化**。
OFA(Once-For-All) 是另一个代表作。它训练一个超网,之后可以从中”拆出”带继承权重的单路径子网络直接部署。不过拆出来的子网络仍需**微调若干轮(例如 25 个 epoch)**才能获得有竞争力的精度。
BigNAS 则致力于干掉微调这一步:通过一系列改进训练单阶段超网,使得拆出的子网络继承权重后无需重训或微调就能达到优秀精度,可直接部署。这在需要面向多种不同硬件平台部署的场景下,节省的算力极其可观。
4.4 进化算法的多目标形式
进化 NAS 很容易扩展到硬件感知场景——最大化精度的同时满足多种现实约束:
其中 是一组现实性能指标(延迟、能耗、内存……), 是对应的上限。
三种搜索策略的本质区别
- 强化学习:学一个”生成器”(控制器),让它越来越会生成好架构。优化信号来自奖励。
- 进化算法:维护一个”种群”,靠选择 + 变异迭代。不需要梯度,极其灵活,任何不可微目标(延迟、能耗)都能直接塞进去。
- 可微分搜索(下一节):把离散选择”松弛”成连续权重,直接用梯度下降优化。
五、搜索策略三:可微分搜索(DARTS 与它的子孙)
5.1 DARTS 的核心洞察:把离散选择”融化”成连续的
DARTS(Differentiable ARchiTecture Search) 是可微分 NAS 的开山之作,也是目前影响力最大的 NAS 工作之一。它的效率有多高?单张 GTX 1080 Ti、约 1 天就能出一个优秀架构。
之前的 NAS 都依赖离散搜索空间(选 3×3 还是 5×5,是二选一,不可导)。DARTS 的天才之处在于:引入一组架构参数 ,把离散的搜索空间松弛(relax)成连续的。
具体来说:在边 上,不再”选一个”算子,而是让所有算子同时存在,用 softmax 加权求和:
其中 是算子空间, 是边 上算子 的架构参数。当某个 远大于其他时,softmax 权重趋近 1,就等价于”选了它”。
关键在于:现在 对 是连续可导的!于是网络权重 和架构参数 可以交替用梯度下降优化:
这是一个双层优化(bilevel optimization):内层在训练集上优化 ,外层在验证集上优化 。
为什么外层要用验证集损失 ,而不是训练集损失?
如果 也在训练集上优化,架构参数会”作弊”——它倾向于选择那些能更好记忆训练集的算子(通常是参数量更大、容量更高的算子),导致严重过拟合,搜出来的架构在真实测试上表现很差。用验证集损失优化架构参数、用训练集损失优化网络权重,是一种元学习(meta-learning)式的分工:让权重去拟合数据,让架构去拟合”泛化能力”。
搜索结束后,DARTS 通过算子强度(就是式 (7) 里的那个 softmax 权重)来做离散化:在每条边上只保留最强的那个算子,删掉其他算子。最后,搜出的架构仍需在目标任务上重新训练以恢复精度。
图 13:DARTS 总览,共四个阶段:(1) 在超网中初始化 和 ;(2) 通过交替梯度下降优化 和 ;(3) 从超网中离散化出最优架构;(4) 重训最优架构以恢复精度。
5.2 DARTS 的后裔:都在治什么病
DARTS 火了之后涌现了大量改进工作,每个都在治一个具体的病:
| 工作 | 治的病 | 药方 |
|---|---|---|
| PC-DARTS | 显存开销过大(所有算子同时优化) | 部分通道连接(partial channel connections) |
| DARTS+ | 性能崩塌(performance collapse) | 早停策略:满足预设条件就终止搜索 |
| DARTS− | 性能崩塌 | 辅助跳连,缓解并稳定搜索 |
| Single-DARTS / Gold-NAS | 双层优化可能收敛到次优 | 退回单层优化 |
| GDAS / SNAS | 优化复杂度高 | Gumbel-Softmax 重参数化,把复杂度降到单路径级别 |
| PT-DARTS | 不总能指示最优架构 | 基于**扰动(perturbation)**的架构选择 |
什么是"性能崩塌"?
DARTS+ 和 DARTS− 都观察到:搜索过程中,架构参数 会过度偏爱 skip-connect(跳连)。跳连不干活、梯度通畅,训练损失降得快,所以被疯狂选中。结果是搜出来的网络几乎全是跳连、没有真正的特征提取层,验证精度反而崩掉。这是可微分搜索最著名的陷阱之一。
5.3 硬件感知可微分 NAS:把延迟项塞进损失函数
上面这些都是精度至上(accuracy-only)的搜索,没法满足端侧的资源约束。硬件感知可微分 NAS 的做法是:把延迟约束作为惩罚项加进总损失:
是权衡系数。论文明确指出规律: 越大,得到低精度低延迟的架构; 越小,得到高精度高延迟的架构。
这个形式很容易推广到多个硬件指标联合优化:
5.4 从 cell 转向 block:FBNet、ProxylessNAS、SP-NAS、TF-NAS
早期的硬件感知可微分 NAS 仍依赖 cell-based 空间,继承了两个老毛病:① 重复堆叠导致算子多样性缺失;② 多分支结构内存访问开销大、难以享受硬件并行度。
于是 FBNet、ProxylessNAS、SP-NAS、TF-NAS 这一批工作集体转向 block-based 空间:
- FBNet:用 Gumbel-Softmax 重参数化松弛离散空间;收集一张**延迟查找表(latency lookup table, LUT)**快速估算延迟,并把它集成进搜索过程。
- ProxylessNAS:治 FBNet 的病——FBNet 和 DARTS 一样需要同时优化所有算子候选,无法扩展到大搜索空间,还有内存瓶颈。ProxylessNAS 提出路径级二值化(path-level binarization),把显存消耗降到单路径级别,在不损失搜索质量的前提下大幅提升效率。
- SP-NAS:洞察到超网里不同的算子候选可以看作是一个过参数化超级卷积核(superkernel)的子集,于是把所有算子候选编码进这个 superkernel,同样把显存降到单路径级别。
- TF-NAS:系统梳理了硬件感知可微分 NAS 的三个搜索自由度,并集成延迟查找表 + 双采样(bi-sampling)搜索算法来加速。
图 14:TF-NAS 总览。它梳理了常规硬件感知可微分 NAS 中的三个搜索自由度:(1) 算子级(operator-level)、(2) 深度级(depth-level)、(3) 宽度级(width-level),从而实现细粒度架构搜索。
5.5 关键一击:LightNAS 让 λ 变成可学习的
到这里,还差最后一个痛点没解决—— 太难调了。
现实场景(比如自动驾驶)对延迟有硬约束(例如 24 ms),超了就可能出事故。但要找到延迟恰好为 24 ms 的架构,前面这些工作必须反复跑大量搜索实验来试错调 ,总成本高得离谱。
HardCoRe-NAS 用 Block Coordinate Stochastic Frank-Wolfe(BCSFW)算法把搜索方向限制在指定延迟附近。
LightNAS 的解法更优雅——既然 λ 难调,那就让它变成搜索过程中自动学习的变量:
对比式 (9),这里 不再是常数,而是可学习的超参数。记目标函数为 。更新规则是: 和 用梯度下降,而 用梯度上升:
为什么这样就能保证 ? 这是一个非常漂亮的负反馈:
- 已知: 越大 → 延迟越低; 越小 → 延迟越高。
- 若当前 (超了):则 ,梯度上升增大 → 延迟正则力度加强 → 下一轮延迟下降向 靠拢。
- 若当前 (还不到):则 ,梯度上升减小 → 正则力度减弱 → 下一轮延迟上升向 靠拢。
于是搜索引擎最终收敛到严格满足延迟约束的架构——只搜一次(you only search once),彻底消灭了手工调 的隐式成本。
从 40000 到 10:搜索成本的压缩史
方法 搜索代价 GPU 早期 RL-NAS 450 卡 × 3~4 天(12800 个候选架构) GTX 1080 Ti ENAS < 16 小时(参数共享) 单张 GTX 1080 Ti DARTS ~1 天(可微分松弛) 单张 GTX 1080 Ti MnasNet 40,000 GPU 小时 V100 ProxylessNAS 200 GPU 小时 V100 OFA 1,200 GPU 小时 V100 SP-NAS 30 GPU 小时 TPU TF-NAS 43 GPU 小时 Titan RTX LightNAS 10 GPU 小时 RTX 3090 TE-NAS < 4 小时(ImageNet,零成本代理) 单张 GTX 1080 Ti 每一步压缩都对应一个具体的技术创新:参数共享 → one-shot 超网 → 可微分松弛 → 单路径二值化 → 延迟查表 → 自动学习 λ → 零成本代理。
5.6 硬件感知 NAS 全景对比表
说明:原论文此表用于粗略比较不同硬件感知 NAS 工作,N/A 表示原论文未报告该数据;准确率可能使用了不同的训练配方。LUT = 延迟查找表,Predictor = 学习型预测器。
| 方法 | 搜索空间 | 搜索策略 | 数据集 | GPU 小时 | GPU 型号 | 目标硬件 | 硬件建模 | FLOPs (M) | Top-1 (%) |
|---|---|---|---|---|---|---|---|---|---|
| MnasNet | Block | Reinforce | ImageNet | 40,000 | V100 | 手机 | N/A | 312 | 75.2 |
| ProxylessNAS | Block | Gradient | ImageNet | 200 | V100 | GPU/CPU/手机 | LUT | N/A | 75.1 |
| MobileNetV3 | Block | Evolution | ImageNet | N/A | N/A | 手机 | N/A | 219 | 75.2 |
| FBNet | Block | Gradient | ImageNet | 216 | N/A | 手机 | LUT | 375 | 74.9 |
| TuNAS | Block | Reinforce | ImageNet | N/A | N/A | 手机 | LUT | — | 75.4 |
| OFA | Block | Evolution | ImageNet | 1,200 | V100 | GPU/CPU/边缘 GPU/手机 | LUT | 230 | 76.0 |
| SP-NAS | Block | Gradient | ImageNet | 30 | TPU | 手机 | LUT | N/A | 75.0 |
| LA-DARTS | Cell | Gradient | CIFAR-10 | 17 | P100 | GPU/CPU | Predictor | 575 | 74.8 |
| MDARTS | Cell | Gradient | CIFAR-10 | ~6.5 | Titan XP | Eyeriss | Predictor | N/A | N/A |
| EH-DNAS | Cell | Gradient | CIFAR-10 | 24 | 1080 Ti | 定制加速器 | Predictor | 840 | 69.6 |
| E-DNAS | Block | Gradient | ImageNet | N/A | V100 | CPU/DSP | Predictor | 365 | 76.9 |
| SNAS | Block | Gradient | ImageNet | 30 | N/A | TPU | Predictor | 1,290 | 79.4 |
| HSCoNAS | Block | Evolution | ImageNet | N/A | N/A | GPU/CPU/边缘 GPU | LUT | N/A | 74.9 |
| DenseNAS | Block | Gradient | ImageNet | 64 | Titan XP | GPU | LUT | 361 | 75.3 |
| TF-NAS | Block | Gradient | ImageNet | 43 | Titan RTX | GPU | LUT | 284 | 75.2 |
| HardCoRe-NAS | Block | Gradient | ImageNet | 400 | P100 | GPU/CPU | LUT | N/A | 75.7 |
| LightNAS | Block | Gradient | ImageNet | 10 | RTX 3090 | 边缘 GPU | Predictor | N/A | 75.2 |
| SurgeNAS | Block | Gradient | ImageNet | 30 | V100 | GPU/CPU/边缘 GPU | Predictor | N/A | 75.5 |
| SPOS | Block | Evolution | ImageNet | 288 | 1080 Ti | GPU | LUT | 328 | 74.7 |
| HURRICANE | Block | Evolution | ImageNet | N/A | N/A | CPU/DSP/VPU | LUT | 409 | 75.1 |
| ProxyNAS | Block | Evolution | ImageNet | N/A | N/A | GPU/CPU/TPU/FPGA | Predictor | N/A | N/A |
怎么读这张表
别急着比最后一列的精度——训练配方不同,精度不可直接横比。真正值得看的是三件事:① Block 已全面压倒 Cell(20 个方法里 16 个用 Block);② Gradient(可微分)已成主流;③ GPU 小时从 40000 一路降到 10,而精度几乎没掉(75.2% vs 75.2%)。这就是整个 NAS 领域十年的核心成就。
六、加速技术大军:如何让”评估”变得便宜
回顾一下:NAS 慢的根源是”评估一个候选架构好不好”太贵(要训练)。第 6 节的所有技术,都是在攻击这个瓶颈。
6.1 Beyond One-Shot:从”一个超网”到”几个超网”
One-shot NAS 快是快,但有个著名问题:排序相关性差。论文 [205] 指出,one-shot 的搜索结果不一定和独立训练(stand-alone training)的结果相关。
Few-shot NAS 的对策:不再只用一个超网,而是用若干个超网去覆盖搜索空间的不同区域。搜索成本比 one-shot 略高,但结果可靠得多。论文 [206] 表明,最多只用 7 个超网就能在 ImageNet 上刷新当时的最优搜索结果。
- [209] 证明零成本代理可以集成进 few-shot NAS,进一步增强搜索。
- [208] 把 few-shot NAS 推广到蒸馏大语言模型——从一个大教师模型中自动蒸馏出多个满足不同算力预算的学生模型。
- CLOSE 走了另一条路:不用多超网,而是提出 CLOSENet,用一个类课程学习(curriculum learning)的调度来动态控制超网内的参数共享程度,配合高效的图编码方案。
6.2 高效延迟预测:别再拿真机一个一个测了
MnasNet 那种直接在目标硬件上实测延迟的做法当然准,但耗时且无法扩展到大规模搜索空间。于是延迟预测器登场:
| 方案 | 代表工作 | 思路 | 局限 |
|---|---|---|---|
| 延迟查找表 LUT | ProxylessNAS、FBNet、OFA | 预先测好每个算子的延迟,累加即得总延迟 | 只适用于 block-based 空间;忽略算子间数据搬运 |
| LUT + 数据搬运修正 | HSCoNAS | 量化中间数据移动与通信带来的额外延迟,补进 LUT | 仍然绑定 block-based |
| MLP 预测器 | EdgeNAS、LA-DARTS、LC-NAS | 训练一个多层感知机预测候选架构延迟 | 需要大量训练样本(EdgeNAS 用了 10 万个样本) |
| GNN 预测器 | BRP-NAS、SurgeNAS | 用图神经网络建模架构拓扑,预测更可靠 | 换硬件/换空间要重建 |
| 少样本/元学习预测器 | HELP、MAPLE-Edge | 只用极少量样本(HELP 最少 10 个测量值)即可泛化到新硬件 | 精度与样本量权衡 |
| 自演化预测器 | EvoLP | 自演化方案,能以适应未知硬件 | 较新方向 |
一个值得记住的对比
EdgeNAS 的 MLP 延迟预测器需要 100,000 个训练样本;HELP 用元学习只要 10 个延迟测量值就能泛化到新硬件平台。四个数量级的差距,这就是”元学习”在 NAS 里的价值。
6.3 高效精度预测:不训练就能猜出精度
与延迟预测并行,精度预测也成为一个热门方向:
- [218]:用图卷积网络(GCN) 做精度预测器——因为架构天然是图结构,GCN 很合适。
- BRP-NAS:同样用 GCN,并引入迁移学习,从预训练好的延迟预测器迁移过来提升精度预测。
- [219]:用非神经网络的 GBDT(梯度提升决策树) 做预测器,在某些场景下表示学习能力比神经网络预测器更强。
- NASLib:在三个主流 Benchmark(NAS-Bench-101/201/NLP)上系统比较了四类预测器(学习曲线外推、权重共享、监督学习、零成本代理),发现组合多个预测器显著优于任何单一预测器。
- DONNA:用分块知识蒸馏构建候选架构池,每个候选只需微调几个 epoch 就能得到精度,而不用从零训练。
- GATES / TA-GATES:不采用图编码,而是把算子建模为信息传播的变换,更贴近真实数据处理过程;该编码方案可以集成进其他预测器以提升表现。
6.4 低成本代理:学习曲线外推
低成本代理(low-cost proxies),又称学习曲线外推(learning curve extrapolation):只用训练最初几个 epoch 的统计信息(如前几轮的训练损失)来推断这个架构最终能到多少精度。
- [236]:把”网络配置”和”前几轮验证精度”一起作为输入特征训练回归模型,可泛化到未见过的架构。
- TSE(Training Speed Estimation):简单累积早期训练统计量,实现可靠且极廉价的排序。
- BTE / TBE(Batchwise / Trained Batchwise Estimation):考虑更细粒度的逐 batch训练统计量,用极小算力获得更可靠的预测。
- LCGA(Loss Curve Gradient Approximation):用最少训练量对候选架构排序。
- NAS-Bench-x11:通过预测训练轨迹来释放学习曲线外推的潜力,可轻松集成进上述方法。
6.5 零成本代理:一次前向反向就够了
零成本代理(zero-cost proxies) 更进一步:完全不需要训练。它们只用一个 mini-batch 的数据、一次前向 + 反向传播就能给出性能估计,计算成本接近于零。
代表性零成本代理:EPE、Fisher、GradNorm、Grasp、Jacov、Snip、Synflow、ZenScore、LRC、NTK。
一个关键发现:组合多个零成本代理,排序可靠性优于任何单一代理。
图 15(a):零成本代理 LRC 在 CIFAR-100 上的排序效果(精度取自 NAS-Bench-201)。散点越接近一条单调曲线,说明预测分数与真实精度的相关性越好。
图 15(b):零成本代理 NTK 在 CIFAR-100 上的排序效果。与 (a) 相比,散点更分散,相关性弱一些。
图 15(c):把 LRC 与 NTK 组合后的排序效果。可以直观看到散点明显收拢、相关性提升——这正是论文强调的”组合优于单一”。
TE-NAS 就是联合使用 LRC 和 NTK 来估计候选架构的排序,结果:单张 GTX 1080 Ti、不到 4 小时就在 ImageNet 上搜出最优架构。
6.6 高效 Transformer 搜索
NAS 不仅能搜 CNN,也能搜 Transformer。流水线在技术上与搜 CNN 完全相同:
- HAT(NLP 方向):先构建一个包含所有 Transformer 候选的过参数化 superformer,用标准权重共享训练它作为精度预测器;再建一个高效延迟预测器避免真机实测;最后用标准进化算法搜出既准又快的 Transformer。这套流程和 OFA 搜 CNN 如出一辙。
- AutoFormer(视觉方向):第一个视觉 Transformer 的进化 NAS 框架。同样构建 superformer,但训练时用的是 weight entanglement(权重纠缠) 方案。
图 16:权重共享(weight sharing) 与 权重纠缠(weight entanglement) 的对比。权重纠缠在技术上类似于 SP-NAS 中的 superkernel——不同候选共享同一个过参数化核的不同子集。
6.7 高效领域专用搜索
NAS 不止能做图像分类,还能迁移到各种真实场景:
- MobileDets(目标检测):一族硬件高效检测网络,在移动端 CPU、边缘 TPU、边缘 GPU 上都表现优秀。做法是构建放大的检测搜索空间,再用类 MnasNet 的强化学习搜索,奖励函数与 TuNAS 一致(权衡检测精度与效率)。
- LC-NAS(点云处理):硬件感知可微分 NAS 框架,与 EdgeNAS、LA-DARTS 一样使用 cell-based 空间并把延迟约束集成进优化目标。
这说明一件重要的事:只要把领域知识(比如领域专用搜索空间)嵌进主流 NAS 技术,就能搜出领域专用的网络方案。
6.8 NAS Benchmark:为什么需要”考场”
公平比较为什么这么难?
不同 NAS 工作的训练配方(training recipe)差异巨大,导致无法判断性能提升到底来自搜索算法还是来自更好的训练技巧。 具体例子:DARTS+ 在 CIFAR-10 上训练搜出的架构 2000 个 epoch,DARTS 只训 600 个;DARTS+ 在 ImageNet 上训 800 个 epoch、batch size 2048、还用了 AutoAugment,而 DARTS 默认只有 250 个 epoch、batch size 128。对同一个架构,更长的训练和更强的数据增强通常精度更高。 更扎心的是:RandomNAS 证明随机搜索能打得过早期的 SOTA NAS 工作;RandWire 证明随机连线的网络在 ImageNet 上也很强。那么 NAS 的提升到底来自哪?这是个真问题。
为此学界提出了一大批 NAS Benchmark。它们有两部分:预定义的搜索空间 + 所有候选架构可直接查询的性能指标。
- 表格式(tabular)Benchmark:枚举并从零训练所有候选架构,把指标存成表。准确但昂贵。
- 代理式(surrogate)Benchmark:用学习方法预测指标,不逐个训练,因此能覆盖远大于表格式的搜索空间(NAS-Bench-301 的 10¹⁸ vs NAS-Bench-201 的 15,625)。
| Benchmark | 搜索空间大小 | 类型 | 表格 | 代理 | 任务 | 数据集 |
|---|---|---|---|---|---|---|
| NAS-Bench-101 | 423k | Cell | ✓ | ✘ | 图像分类 | CIFAR-10 |
| NAS-Bench-201 | 15.6k | Cell | ✓ | ✘ | 图像分类 | CIFAR-10/100、ImageNet-16-120 |
| NATS-Bench | 39.3k | Cell | ✓ | ✘ | 图像分类 | CIFAR-10/100、ImageNet-16-120 |
| NAS-Bench-301 | 10¹⁸ | Cell | ✘ | ✓ | 图像分类 | CIFAR-10 |
| NAS-Bench-360 | N/A | Cell+Block | ✓ | ✘ | 10 个多样化任务 | 10 个多样化数据集 |
| NAS-Bench-1Shot1 | 399k | Cell | ✓ | ✘ | 图像分类 | CIFAR-10 |
| NAS-Bench-ASR | 8.2k | Cell | ✓ | ✘ | 自动语音识别 | TIMIT |
| NAS-Bench-Graph | 26.2k | Cell | ✓ | ✘ | 9 个图任务 | 9 个图数据集 |
| NAS-Bench-NLP | 14k | Cell | ✓ | ✘ | 语言理解 | PTB、WikiText-2 |
| NAS-Bench-111 | 423k | Cell | ✘ | ✓ | 图像分类 | CIFAR-10 |
| NAS-Bench-311 | 10¹⁸ | Cell | ✘ | ✓ | 图像分类 | CIFAR-10 |
| NAS-Bench-NLP11 | 10⁵³ | Cell | ✘ | ✓ | 语言理解 | PTB |
| NAS-Bench-Suite | N/A | Cell | ✓ | ✓ | 11 个表格/代理 Benchmark 的集合 | — |
| HW-NAS-Bench | 15.6k | Cell | ✓ | ✘ | 图像分类 | CIFAR-10/100、ImageNet-16-120 |
| HW-NAS-Bench | 10²¹ | Block | ✘ | ✓ | 图像分类 | CIFAR-100、ImageNet |
注:ImageNet-16-120 是 ImageNet 的一个子集,含 120 个类别,输入分辨率固定为 16×16。
七、作者给出的七个未来方向
- 通用搜索空间(General Search Spaces)。现有搜索空间都是人用手撕出来的,通常基于 MobileNet、ShuffleNet 这类现成网络,虽然提升了搜索效率,但也把更优的结构挡在门外。已有的”更通用搜索空间”尝试仍然带着人类偏见。探索更通用的搜索空间是释放 NAS 潜力的关键。
- 全自动化架构搜索(Fully Automated Architecture Search)。早期 NAS 的搜索目标彼此孤立:有的搜架构、有的搜数据增强、有的搜激活函数、有的搜训练配方。但 FBNetV3 和 AutoHAS 已经证明:不同架构偏好不同的训练配方。因此未来方向是一次搜索同时确定架构 + 数据增强 + 激活函数 + 训练配方。
- 多任务架构搜索(Multi-task Architecture Search)。现有工作都是”一个任务搜一次”,任务数量一多成本就爆炸。FBNetV5 迈出第一步,搜索能同时胜任 ImageNet 分类、COCO 检测、ADE20K 分割的架构。目标是”once for all”式的跨任务架构。
- 动态架构搜索(Dynamic Architecture Search)。现有 NAS 搜的是静态网络,只能跑在固定算力预算上。但真实环境中,同一台设备的可用算力也会随时间变化(手机的低电量/省电模式)。部署多个静态网络是个办法,但存储开销太大。因此需要搜索动态网络(如 slimmable neural networks),能即时、自适应地在精度与效率之间权衡。
- 混合架构搜索(Hybrid Architecture Search)。CNN 端侧效率高,ViT 精度高,混合起来有望双赢。但现有 NAS 基本只搜其中一类。搜索 CNN 与 ViT 优势互补的混合网络仍是一片蓝海。
- 可解释架构搜索(Explainable Architecture Search)。主流 NAS 都依赖权重共享范式,但它的可解释性很差——权重共享可能导致权重互相干扰,从而得到次优架构;更糟的是,one-shot NAS 为什么有效,社区至今没有共识。零成本代理是一条出路,但如图 15 所示,现有代理的估计还不够可靠。
- 元架构搜索(Meta Architecture Search)。元学习(meta-learning,learning-to-learn) 的目标是让模型用最少工程投入快速适应新任务/新环境。HELP 就是一个例子——只用 10 个延迟测量值就能泛化到新硬件。NAS 中广泛使用的权重共享范式,本质上就是一种元学习(把过参数化超网看作元模型),因此用元学习加速搜索是自然的方向。
八、本篇小结
把整条脉络串起来:
- 问题:手工设计依赖专家试错,成本高、上限受限于人。NAS 要自动化这个过程。
- 三要素:搜索空间(决定上限)、搜索策略(决定怎么找)、性能评估(决定成本)。
- 搜索空间:从细粒度逐层搜索退到模块化搜索;从 cell-based(多分支 DAG、重复堆叠、不硬件友好)演进到 block-based(单路串联、算子多样、硬件友好)。
- 搜索策略:强化学习(RNN 控制器 + 奖励)→ 引入硬件感知多目标奖励(MnasNet 式 (2)、TuNAS 式 (4)、MONAS 式 (5));进化算法(种群 + 交叉变异)→ 结合 one-shot 超网(参数共享、单路径采样 SPOS、严格公平 FairNAS、免微调 BigNAS);可微分搜索 DARTS(softmax 松弛式 (7) + 双层优化式 (8))→ 硬件感知惩罚项(式 (9)(10))→ 自动学习 λ 的 LightNAS(式 (11)(12))。
- 加速技术:few-shot 多超网、延迟预测(LUT → MLP → GNN → 元学习 10 样本)、精度预测(GCN/GBDT/NASLib/DONNA/GATES)、低成本代理(学习曲线外推)、零成本代理(一次前向反向,LRC+NTK 组合)、Transformer 搜索、领域专用搜索、NAS Benchmark(解决公平比较)。
- 总账:40000 GPU 小时 → 10 GPU 小时,精度基本不掉。
常见坑(汇总)
- 只看搜出来的精度。训练配方不同会让精度差好几个点,论文间横向比精度基本没意义——要看 Benchmark 上的可比结果。
- 以为超网权重可以直接部署。搜出来的架构几乎总是需要重新训练或微调才能恢复精度(BigNAS 是少数例外)。
- 以为 one-shot 的排名可信。one-shot 与独立训练之间的排序相关性是公认的弱项,这是 few-shot NAS 存在的理由。
- 小看隐式搜索成本。为了调 、 或 而重复 7 次搜索,等于总成本 ×7。选方法时一定要问”要不要手调超参”。
- 忘了搜索空间决定上限。搜索策略再花哨,若最优结构不在空间里也白搭;同时空间越大越难搜,这是一对永恒的矛盾。
- 以为零成本代理已经够准。图 15 清楚显示,即便 LRC+NTK 组合,散点仍很分散。它适合粗筛,不适合精确排序。
- 在 cell-based 空间上做延迟查表。LUT 只对 block-based 可靠,cell-based 需要学习型预测器。
通关标准
- 能说出 NAS 三要素,并解释为什么”搜索空间决定性能上限”。
- 能对比 cell-based 与 block-based,说出至少两条 block-based 更硬件友好的理由(内存访问 / 算子多样性)。
- 能解释 DARTS 的 softmax 松弛(式 (7))为什么让 NAS 变得可导,以及双层优化里外层为什么用验证集。
- 能说清式 (9) 中 的大小如何影响结果,并解释 LightNAS 的梯度上升(式 (12))如何构成负反馈使延迟收敛到 。
- 能按时间线讲出搜索成本从 40000 GPU 小时压到 10 GPU 小时的关键技术节点。
- 能区分延迟预测的三代方案(LUT / 学习型预测器 / 少样本元学习)各自的适用条件。
- 能解释 NAS Benchmark 存在的必要性,以及表格式与代理式的区别。
自测 1:DARTS 是怎么把"不可导的离散选择"变成可求导的?
它在每条边 上不再做”选一个算子”的硬选择,而是让算子空间 里的所有算子同时存在,用 softmax 权重 加权求和(式 (7))。这样输出 对架构参数 连续可导, 和 就可以用交替梯度下降一起优化(式 (8))。搜索结束后再按算子强度取最大的那个算子做离散化。
自测 2:DARTS 的双层优化中,为什么外层要用验证集损失 而不是训练集损失?
若 在训练集上优化,架构参数会偏爱那些更能”记住”训练集的算子(通常是参数量大、容量高的),造成严重过拟合,搜出的架构泛化极差。用验证集优化 、用训练集优化 ,等价于让权重负责拟合数据、让架构负责优化泛化能力。
自测 3:MnasNet 的奖励函数有什么工程上的麻烦?TuNAS 和 LightNAS 分别怎么解决?
MnasNet 用 ,其中 由 分段决定(式 (3))。麻烦在于 敏感且难调,换硬件或换搜索空间就要重调,通常需要重复 7 次搜索实验试错,总成本 ×7。 TuNAS:改成 (式 (4)), 是有限负值,双侧对称惩罚,更直观易设。 LightNAS(可微分路线):干脆让 变成可学习变量,对 做梯度下降、对 做梯度上升(式 (12)),形成负反馈自动把延迟拉到 ,只搜一次。
自测 4:零成本代理和低代价(学习曲线外推)代理的区别是什么?为什么说"组合优于单一"?
低代价代理仍需要训练几个 epoch,用早期训练统计量(训练损失、前几轮验证精度、逐 batch 统计量)外推最终精度,代表有 TSE、BTE、TBE、LCGA。零成本代理完全不训练,只用一个 mini-batch、一次前向+反向传播就给出估计(如 LRC、NTK、Snip、Synflow、GradNorm),成本近乎为零。 图 15 显示:单独用 LRC 或 NTK 时散点分散、相关性一般;把两者组合后散点明显收拢,排序可靠性提升。TE-NAS 正是联合 LRC 与 NTK,在单张 GTX 1080 Ti 上不到 4 小时就在 ImageNet 搜到最优架构。
自测 5:NAS Benchmark 要解决的根本问题是什么?表格式和代理式的差别?
根本问题是公平比较——不同 NAS 工作训练配方差异巨大(DARTS 用 600 epoch、DARTS+ 用 2000 epoch;ImageNet 上 250 vs 800 epoch、batch 128 vs 2048、还差一个 AutoAugment),而且 RandomNAS、RandWire 证明了随机搜索也能打平早期 SOTA,导致无法判断提升来自算法还是训练技巧。Benchmark 提供统一的搜索空间 + 可直接查询的性能指标,作为”标准考场”。 表格式枚举并逐个从零训练所有候选,指标精确但空间做不大(NAS-Bench-201 只有 15,625 个架构)。代理式用学习模型预测指标,能覆盖极大空间(NAS-Bench-301 达 10¹⁸),但指标是估计值。
系列导航
上一篇:① 概述与手工网络设计 下一篇:③ 网络压缩:剪枝、量化、蒸馏