神经架构搜索 NAS
本页介绍神经架构搜索(Neural Architecture Search, NAS):用算法自动设计神经网络结构,而非依赖人工经验试错。它是AutoML中最有挑战、也最浪漫的分支——曾用几千 GPU-天搜索出击败手工设计(如 ResNet)的网络架构,代表作 EfficientNet、MobileNetV3 至今仍是工业界移动端部署的标杆。
NAS 就像用程序自动设计房子,而不是请建筑师一笔笔画图纸:
- 人工设计的极限:从 LeNet 到 ResNet,每代经典架构都靠 PhD 们反复试错、耗费数月人力。人类探索过的架构只是所有可能架构的沧海一粟——更好的结构很可能藏在人类没试过的角落。
- NAS 的三个要素:
- 搜索空间:规定了”可建的房子长什么样”——允许的层数、每层算子类型(卷积、池化、注意力)、连接方式。空间定义了搜索的边界。搜索空间越大,可能的架构越多,搜索越难;空间太约束,则可能错过创新结构。
- 搜索策略:决定”怎么逛这个巨大的房子样本库”——强化学习、进化算法、梯度下降。策略决定搜索效率。
- 性能评估:判断”每栋房子好不好”——完整训练太贵(一次 ImageNet 训练要几天),因此需要快速的近似评估。
- 自动化的回报:NAS 找到的架构往往在精度-计算-参数三维 Pareto 前沿上击败人类设计。Google 的 EfficientNet-B7 在 ImageNet 上达到 84.4% top-1,同时参数量比手工设计的 SENet 少 4 倍。
直觉上理解:NAS 把”架构设计”本身也变成一个可优化的问题。过去是”人定结构,算法定参数(权重)“;NAS 把结构和参数都交给算法——这是自动化的自然延伸。
NAS 三大主流方法对应三种搜索思路:
- 强化学习 NAS:用一个 RNN(循环神经网络)控制器逐层”采样”一个架构——每输出一个 token 就代表一种算子或连接方式的选择,整条输出序列即编码了一个完整的网络结构。训练后把验证精度作为奖励(reward)信号回传训练控制器。代表 NASNet(Google,2017)。效果强但极贵(2000 GPU-天)。
- 进化算法 NAS:维护一个架构种群(population),通过变异(改层、改连接)与选择(保留高分)迭代进化——模拟自然选择”适者生存”的过程。代表 AmoebaNet(Google,2019)。与 RL 方法精度接近但更简单。
- 可微 NAS:把离散的架构选择松弛(relax)为连续变量,用梯度下降同时优化架构参数与权重。代表 DARTS(Differentiable Architecture Search)。把搜索成本从几千 GPU-天压到 1 个 GPU-天,是 NAS 走向实用的里程碑。
DARTS:可微架构搜索
Section titled “DARTS:可微架构搜索”DARTS 是当前最流行的 NAS 方法,核心思想是让”选择算子”变得可微(differentiable,即可以用梯度下降优化)。
考虑一个搜索单元(cell),里面有若干候选操作(3x3 卷积、5x5 卷积、最大池化、平均池化、恒等、零)。对每条边(节点间连接),传统 NAS 要硬选择一种算子——这是离散的、不可微的,无法用反向传播优化。
DARTS 的做法:让所有候选算子的输出做加权 softmax 混合:
mixed_output = sum_o exp(alpha_o) / sum_o' exp(alpha_o') * Operation_o(x)其中 alpha_o 是算子 o 的”架构权重”(连续可学,初始化为 0 表示等概率)。整个 softmax 使得所有权重非负且和为 1——本质上是一个”软选择”(soft selection),每个算子都参与了计算但权重不同。
整个网络同时有架构参数 alpha 和权重参数 w,交替优化(bi-level optimization,双层优化):
- 固定 alpha,用训练集更新权重 w(标准的梯度下降训练):此时架构是固定的”软混合”结构,像训练普通网络一样更新各算子的卷积核权重。
- 固定 w,用验证集更新架构 alpha(让验证损失下降,即”选出在验证集上最好的架构组合”):梯度通过 softmax 权重回传,表现好的算子获得更大的 alpha,表现差的算子 alpha 趋近 0。
具体的双层优化目标(用纯文本表示):
min_alpha L_val(w*(alpha), alpha)s.t. w*(alpha) = argmin_w L_train(w, alpha)其中 L_train 和 L_val 分别是训练集和验证集上的损失。由于精确求解内层循环代价大,实践中常用近似步骤(approximate architecture gradient)——对 w 做一步梯度更新作为近似,而非训练到收敛:
# 架构梯度近似(DARTS 二阶近似)dw = grad_w(L_train(w, alpha)) # 权重的一步梯度alpha_grad = grad_alpha(L_val(w - xi*dw, alpha)) # 用更新后的 w 算架构梯度搜索结束后,每条边只保留 alpha 最大的算子(argmax),得到最终的离散架构——这一步叫做”离散化”(discretization)。
DARTS 的搜索-评估差距:DARTS 搜出的”软混合”架构在全量训练时未必最优。这是因为离散化丢弃了权重较小的算子,而这些算子在软混合中可能贡献了有用的正则化效果。后续工作(如 P-DARTS、PC-DARTS、SDARTS、DrNAS)都在缓解这个问题——例如 PC-DARTS 通过部分通道采样减少显存并提高稳定性,DrNAS 用概率建模架构分布增强鲁棒性。
强化学习 NAS 的控制器机制
Section titled “强化学习 NAS 的控制器机制”以 NASNet 为例,理解 RL NAS 的完整流程:
- 控制器是一个 RNN(通常是 LSTM),输出一个 token 序列来编码架构——比如”第 1 层:3x3 卷积,步长 1,输出通道 64;第 2 层:5x5 深度卷积,步长 2,输出通道 128…”。
- 构建并训练:根据 token 序列构建子网络,在代理任务(proxy task,如 CIFAR-10 小数据集)上训练几十个 epoch。
- 计算奖励:验证集准确率作为 reward(奖励信号,强化学习中指导策略优化的标量反馈)。
- 更新控制器:用 policy gradient(策略梯度,如 REINFORCE 算法)更新 RNN 控制器的参数,使其倾向于输出高 reward 的架构。
- 重复:迭代数千轮,最终输出最优架构。
这个过程极其昂贵——NASNet 消耗了 2000 GPU-天(约 2000 张 GPU 连续跑一天),Zoph 等人在 500 块 GPU 上训练了数周。后续的 ENAS(Efficient NAS)通过权重共享将成本降至单 GPU 几小时。
搜索空间设计
Section titled “搜索空间设计”NAS 的成败很大程度上取决于搜索空间设计。主流空间:
- 单元级搜索(Cell-level):只搜一个”普通单元”(normal cell)和一个”下采样单元”(reduction cell)的结构,然后把它们堆叠 N 次组成完整网络(NASNet 空间)。空间小、可迁移性强,但限制了架构多样性。
- 网络级搜索(Network-level):直接搜整个网络的层序列与连接(EfficientNet 空间)。空间大、灵活但贵。
- 块级搜索(Block-level, AnyNet):把网络分成多个 stage,每个 stage 内搜通道数、组数、分辨率等超参数。EfficientNet/MobileNetV3 的空间设计即属此类。
AnyNet 的设计思路很有启发性——作者先手动设计 AnyNetX(一个包含 5 个可调维度的设计空间),然后统计大量采样架构的性能分布,发现高性能架构有共同规律:通道数随深度递增、分辨率递减——这些统计洞察直接指导了 EfficientNet 的 RegNet 设计。
复合缩放公式
Section titled “复合缩放公式”找到好的基础架构后,如何放大它?EfficientNet 提出了复合缩放(Compound Scaling):
depth = alpha ^ phiwidth = beta ^ phiresolution = gamma ^ phi
约束条件: alpha * beta^2 * gamma^2 ≈ 2 (phi 是用户指定的缩放系数,phi > 0)其中 alpha 控制深度(层数)、beta 控制宽度(通道数)、gamma 控制分辨率(输入图像大小)。phi 是”计算量预算系数”——每增加 1 单位 phi,FLOPs 大约增加 2 倍(因为宽度的平方约等于计算量增长)。这个约束来自经验:当分辨率翻倍时,宽度和深度的合理增幅应使三者平衡。
性能评估的加速
Section titled “性能评估的加速”完整训练每个候选架构到收敛代价惊人,加速手段:
- 权重共享(One-Shot / Weight Sharing):训练一个包含所有可能架构的”超网”(supernet),每个子架构继承超网权重直接评估,无需从零训练。代表 One-Shot NAS、OFA(Once-for-All)。核心直觉:如果所有架构共享同一组权重,那么一个子架构的性能可以近似用它在超网中”激活”的部分来评估。
- 早期停止预测(Early Stopping Prediction):只训练几个 epoch 就用学习曲线外推预测最终精度。代表 LC-NAS。
- 代理任务(Proxy Task):在小数据集(如 CIFAR-10)上搜架构,再迁移到大数据集(ImageNet)训练。在代理任务上的排名往往与目标任务一致。
NAS 的三个核心要素
Section titled “NAS 的三个核心要素”DARTS 可微搜索流程
Section titled “DARTS 可微搜索流程”DARTS 风格的可微混合算子(概念实现)
Section titled “DARTS 风格的可微混合算子(概念实现)”以下代码演示 DARTS 的核心——可微混合算子。每条边维护一组架构参数 alpha,通过 softmax 做软选择:
import torchimport torch.nn as nnimport torch.nn.functional as F
class MixedOp(nn.Module): """一条边上所有候选算子的加权混合(DARTS 核心)""" def __init__(self, in_ch, out_ch): super().__init__() self.ops = nn.ModuleDict({ 'conv3': nn.Sequential( nn.ReLU(), nn.Conv2d(in_ch, out_ch, 3, padding=1, bias=False), nn.BatchNorm2d(out_ch), ), 'conv5': nn.Sequential( nn.ReLU(), nn.Conv2d(in_ch, out_ch, 5, padding=2, bias=False), nn.BatchNorm2d(out_ch), ), 'maxpool': nn.MaxPool2d(3, stride=1, padding=1), 'avgpool': nn.AvgPool2d(3, stride=1, padding=1), 'skip': nn.Identity() if in_ch == out_ch else nn.Conv2d(in_ch, out_ch, 1, bias=False), }) self.alpha = nn.Parameter(torch.zeros(len(self.ops))) # 架构参数,初始化为 0
def forward(self, x): # softmax 保证 alpha 非负且和为 1,即"软选择" weights = F.softmax(self.alpha, dim=0) out = 0 for w, op in zip(weights, self.ops.values()): out = out + w * op(x) # 所有算子加权混合 return out
# --- 搜索阶段的交替优化伪代码 ---# optimizer_w = SGD(net.weights(), lr=0.025, momentum=0.9, weight_decay=3e-4)# optimizer_a = Adam(net.alphas(), lr=3e-4, weight_decay=1e-3) # 架构参数用更大学习率## for epoch in range(search_epochs):# for train_batch in train_loader:# # Step 1: 固定 alpha,更新权重 w# optimizer_a.zero_grad(); optimizer_w.zero_grad()# loss = CE(net(train_batch.x, alpha), train_batch.y)# loss.backward()# optimizer_w.step()## for val_batch in val_loader:# # Step 2: 固定 w,更新架构 alpha# optimizer_a.zero_grad(); optimizer_w.zero_grad()# loss = CE(net(val_batch.x, alpha), val_batch.y)# loss.backward()# optimizer_a.step()## # 搜索完毕后离散化# for edge in net.edges():# best_op = argmax(edge.alpha)# edge.fix_to(best_op)训练技巧与实践要点
Section titled “训练技巧与实践要点”- 搜索空间决定上限:再强的搜索策略也救不了设计糟糕的空间。把搜索空间限制在已知有效的模式(如深度可分离卷积、残差连接)内,比让算法”从零搜”有效得多——这也是现代 NAS(MobileNetV3、EfficientNet)空间越来越”约束化”的原因。
- 可微 NAS 是性价比首选:DARTS 及其变体(PC-DARTS、SDARTS、DrNAS)只需 1 张 GPU 训 1 天即可完成搜索,远比 RL/进化方法实用。但 DARTS 存在”搜索-评估差距”(搜出的架构在全量训练时未必最优),需配合鲁棒化技巧。
- DARTS 的稳定性技巧:
- 学习率调度:架构参数 alpha 的学习率通常设为 3e-4(Adam),权重 w 的学习率设为 0.025(SGD with cosine decay)。两者差异大是为了平衡双层优化的尺度。
- 温度退火:搜索后期逐渐降低 softmax 温度,让软选择逐渐变”硬”,缩小离散化差距。
- 搜索-评估一致性:P-DARTS 发现搜索阶段深度浅但评估阶段深度深,会导致通道数不匹配——它通过搜索过程中逐步增加深度来对齐。
- One-Shot 与权重共享是大趋势:训练一个超网后用继承权重快速评估成千上万个候选架构,是目前工业 NAS 的主流。Meta 的 OFA(Once-for-All) 一次训练即可导出适应不同设备的数百个子网络。超网训练的关键技巧是均匀采样(sandwich rule)——每个 batch 同时训练最大子网、最小子网和若干随机子网,确保超网对所有子网都有合理的权重。
- 复合缩放(Compound Scaling):找到好基础架构后,用固定比例同时缩放深度、宽度、分辨率,往往比单独调一项更高效——EfficientNet 的核心贡献即此公式。详见模型压缩与加速。
- 小模型的甜区:NAS 在移动端(参数与延迟受限场景)收益最大——MobileNetV3、EfficientNet-Edge 都是 NAS 为移动端专门搜的,比同参数量的手工设计精度高一截。
- 数据增强很重要:搜索阶段的数据增强策略应与最终训练一致。如果在搜索时用了 Mixup/CutMix,但评估时没有,会导致架构选择偏差。
最新进展(2024-2025)
Section titled “最新进展(2024-2025)”NAS 领域正在经历从”搜架构”到”搜一切”的转变:
- LLM 架构搜索:随着大语言模型的兴起,研究者开始用 NAS 搜索高效 Transformer 变体。2024 年的工作如 AutoFormer 系列和 VITAS 已能自动搜索 Vision Transformer 的深度、宽度、注意力头数。Google 的 Primer 用 NAS 搜索了 Transformer 的改进算子,发现了比标准 Transformer 快 2-4 倍的结构。
- ChatNAS / 语言模型驱动的 NAS:2024-2025 年出现了用 LLM 本身来生成和评估候选架构的思路——把架构设计任务转化为 prompt engineering,让 GPT-4 / Claude 来”设计”网络。虽然目前仍处于实验阶段,但展示了”用 AI 设计 AI”的有趣方向。
- 边缘设备 NAS:随着 AI PC 和端侧部署的需求爆发,硬件感知 NAS 在 2024-2025 年持续火热。华为的 ChipNet、MIT 的 OFA v2 能针对 NPU、DSP 等异构芯片定制架构,在保持精度的同时将延迟降低 3-5 倍。
- Zero-Cost NAS:Zero-Cost Proxies(零代价代理指标)是近年热点——不需要训练就能预测架构性能。通过分析架构初始化时的梯度范数、激活稀疏度等指标,在几秒内筛选出有潜力的候选架构。2024 年的 Zen-NAS 和 NASS 将此方法推向新高度。
- 扩散模型架构搜索:DiffusionNAS 等 2024 年工作开始为扩散模型(Stable Diffusion)的 UNet 搜索高效结构,在保持生成质量的同时减少采样延迟。
- 多目标 NAS:2025 年的趋势是同时优化精度、延迟、能耗、碳足迹等多目标,而非仅看精度。Pareto 前沿的搜索算法(如多目标进化算法 NSGA-Net)越来越受重视。
- EfficientNet(Google):用 NAS 搜出基础架构,再用复合缩放得到 B0-B7 一族模型,横扫 ImageNet 精度-效率前沿。B7 至今是图像分类的强 baseline,也是 卷积神经网络 CNN 自动化的标志性成果。
- MobileNetV3(Google):用 NAS + 量化感知设计搜出移动端最优架构,配合硬件感知搜索(Platform-Aware NAS),在 Pixel 手机上比 MobileNetV2 快 25% 同时精度更高——是手机端实时视觉的工业标杆。
- DetNAS(目标检测 backbone):专门为目标检测任务搜 backbone,比用 ImageNet 分类搜出的 backbone 在 目标检测 精度更高——NAS 正从分类走向任务定制。
- 硬件感知 NAS:把推理延迟、能耗作为搜索目标的一部分(与精度一起优化),为特定芯片(NVIDIA GPU、Apple 神经引擎、地平线 BPU)定制架构。Facebook 的 CNN-GeM、Tesla 的车端感知架构都采用硬件感知搜索。
- Transformer 架构搜索:把 NAS 思路应用到 Transformer 的搜索,代表 AutoFormer、VITAS——为不同规模的视觉与语言任务自动设计 Transformer 变体。详见Transformer 架构。
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| NNI (Neural Network Intelligence) | Python | 微软开源的 AutoML 框架,集成 NAS(DARTS/ENAS/ProxylessNAS)与超参搜索 |
| AutoGL-AutoML | Python | 清华开源的图机器学习 AutoML 库,含 GNN 架构搜索 |
| NATS-Bench | Python | NAS 标准化基准,提供 15000+ 搜过架构的性能查询,免去重复搜索 |
| Auto-PyTorch | Python | 自动化 PyTorch 框架,集成 NAS 与超参优化(基于 BOHB) |
| Once-for-All (OFA) | Python | MIT 开源的超网训练与子网导出工具,一次训练导出多设备架构 |
| 术语 | 英文 | 解释 |
|---|---|---|
| 神经架构搜索 | Neural Architecture Search (NAS) | 用算法自动搜索神经网络最优结构的方法总称 |
| 搜索空间 | Search Space | NAS 中允许探索的所有架构的集合,由算子与连接规则定义 |
| 搜索策略 | Search Strategy | 在搜索空间中探索最优架构的方法(RL/进化/梯度) |
| 可微架构搜索 | Differentiable Architecture Search (DARTS) | 把架构选择松弛为连续变量用梯度下降求解的 NAS 方法 |
| 双层优化 | Bi-level Optimization | DARTS 中交替优化架构参数和权重参数的优化策略 |
| 超网 | Supernet | 包含所有候选架构的母网络,权重共享 NAS 的训练基础 |
| 权重共享 | Weight Sharing | 子架构继承超网权重直接评估,免去从零训练的加速技术 |
| 单元级搜索 | Cell-Level Search | 只搜一个重复单元再堆叠成网络的搜索空间设定 |
| 复合缩放 | Compound Scaling | 同时按固定比例缩放深度、宽度、分辨率的缩放方法 |
| 硬件感知 NAS | Hardware-Aware NAS | 把推理延迟与能耗纳入搜索目标的 NAS 变体 |
| 零代价代理 | Zero-Cost Proxy | 无需训练即可预测架构性能的快速评估指标 |
| AutoML | AutoML | 自动化机器学习全流程的总称,NAS 是其中的架构设计环节 |
- NASNet:Zoph & Le, “Neural Architecture Search with Reinforcement Learning”, ICLR 2017. NAS 开山之作,用 RNN 控制器 + RL 在 CIFAR 上搜出超越人类设计的架构,奠定整个领域。
- DARTS:Liu et al., “DARTS: Differentiable Architecture Search”, ICLR 2019. 把 NAS 从几千 GPU-天压到单卡 1 天的里程碑,至今最流行的 NAS 方法。
- EfficientNet:Tan & Le, “EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks”, ICML 2019. NAS + 复合缩放,ImageNet 精度-效率前沿的代表作。
- MobileNetV3:Howard et al., “Searching for MobileNetV3”, ICCV 2019. 硬件感知 NAS 搜出的移动端标杆,手机端实时视觉的工业标准。
- Once-for-All:Cai et al., “Once-for-All: Train One Network and Specialize it for Efficient Deployment”, ICLR 2020. 一次训练超网、按需导出多设备子网络的工程化杰作。
- NAS 综述:Elsken et al., “Neural Architecture Search: A Survey”, JMLR 2019. 系统梳理搜索空间/策略/评估三大维度与各方法对比,NAS 入门必读。
- PC-DARTS:Xu et al., “PC-DARTS: Partial Channel Connections for Memory-Efficient Architecture Search”, ICLR 2020. 通过部分通道采样减少 DARTS 显存消耗并提高稳定性。
- Zen-NAS:Lin et al., “Zen-NAS: A Zero-Free NAS for Finding High-Performance Network Architectures”, ICCV 2023. 零代价代理指标的代表性工作,秒级预测架构性能。