老城区有家“一格厨房”,主厨阿明想研发一道全新招牌菜。可光是调味料就有 20 种、辅料 30 种、火候 18 档,粗算配方组合超过一亿种。按老办法,每种配方都要从头备料、下锅、试吃、记录,一道菜耗三小时,试完这些组合得花几百年。 阿明换个思路,把“研发新菜”当成工程题来解:先钉菜单框架,把可重复的组合打包成积木;所有配方共用一锅老高汤打底,省去重新熬汤;请熟悉口味的老饕闻香预判,不必每道都完整出锅;尝第一口寡淡就立刻倒掉换配方。几个月后新招牌菜登场,研发成本只剩原来的千分之一。 这正是神经架构搜索(NAS)面对的问题:在动辄 10 的 20 次方量级的架构空间里找最优网络,完整训练每个候选的代价高得离谱。本文要讲的加速策略——搜索空间瘦身、参数共享、代理模型、早停、渐进式搜索、代价权衡与工程落地——就是阿明那套“聪明研发法”在 AI 世界的翻版。读完你会发现,把数百天的搜索压缩到数小时,靠的不是蛮力,而是聪明的取舍。

岗位关联

掌握 NAS 加速的四大策略与一套工程落地组合拳,把架构搜索从“数月”压缩到“数小时”,是 AutoML 从论文走向生产线的关键技能。

目录
  1. 可视化演示
  2. 搜索空间瘦身
  3. 参数共享加速
  4. 代理模型预测
  5. 早停策略
  6. 渐进式搜索
  7. 评估代价权衡
  8. 工程落地实践
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示权重共享超网络加速评估、代理模型预测架构性能与多阶段搜索流水线,切换模式查看NAS加速核心技术。

本节配有交互动效(进入视口后自动加载,约 3KB)。

权重共享超网络 构建超网络一次性训练所有候选架构子图,共享权重大幅减少评估代价 SuperNet → sample → inherit weights ENAS和One-Shot NAS的核心理念

搜索空间瘦身

阿明面对的调味料、辅料与火候组合超过一亿种,但他没有立刻开火试菜,而是先“钉菜单框架”:把重复出现的食材搭配打包成固定积木块,只在这些积木的边界内做变化。框架一钉,候选配方瞬间从“亿”级掉到“千”级,研发一下子有了抓手。

在 NAS 里,这个“框架”就是搜索空间——所有候选网络结构的集合。搜索空间的大小直接决定总预算:空间越大,需要评估的候选越多。而评估一个候选(完整训练一个网络)恰恰是 NAS 最烧钱的部分。所以聪明的第一步不是改进搜索算法,而是让搜索空间本身更小:能设计为重复单元的,就不要让每一层都独立搜索。

经典做法是把宏观(macro)搜索和单元(cell)搜索分开。宏观搜索让每一层都从操作集里自由选,层数一多空间就爆炸;单元搜索只设计一个含 B 个块的小单元,再把单元堆叠重复组成完整网络,空间从指数级压缩到可枚举。再加上结构约束(如限制分支数不超过 4)和操作集简化(剔除极少被选中的操作),规模进一步收缩。

∣Smacro∣=OL,∣Scell∣=OB,∣Smacro∣∣Scell∣=52055=515≈3.05×1010\displaystyle |\mathcal{S}_{\text{macro}}| = O^{L}, \qquad |\mathcal{S}_{\text{cell}}| = O^{B}, \qquad \frac{|\mathcal{S}_{\text{macro}}|}{|\mathcal{S}_{\text{cell}}|} = \frac{5^{20}}{5^{5}} = 5^{15} \approx 3.05 \times 10^{10}

1. 宏观搜索规模:每层从 O 种操作中任选一种,L 层串联时组合数相乘,构成指数级空间。

∣Smacro∣=OL|\mathcal{S}_{\text{macro}}| = O^{L}

2. 单元搜索规模:只设计一个含 B 个块的小单元,每块仍是 O 选一,层数不再进入指数。

∣Scell∣=OB|\mathcal{S}_{\text{cell}}| = O^{B}

3. 压缩倍率:取 O=5、L=20、B=5 代入,两个空间的比值约三千亿倍,说明“重复结构打包”的威力。

∣Smacro∣∣Scell∣=52055=515\frac{|\mathcal{S}_{\text{macro}}|}{|\mathcal{S}_{\text{cell}}|} = \frac{5^{20}}{5^{5}} = 5^{15}

从此阿明只设计一张“单元菜卡”——一荤一素一汤的固定三角组合,重复叠出整桌套餐。搜索从“在整本食谱里翻”变成“在设计一张卡片时斟酌”,研发效率自然不可同日而语。

参数共享加速

如果每道新菜都要从熬高汤开始,厨师迟早累垮。阿明的秘诀是:所有配方共用同一锅老汤底,试菜时只换辅料与火候。这锅老汤越熬越有滋味,而每道菜省掉了从零备汤的几小时——这正是参数共享的精髓。

NAS 最昂贵的部分,是每个候选网络都要“从零训练”。ENAS(高效神经架构搜索)提出超网络(supernet)概念:把搜索空间里所有子网络看成同一张大图的不同子图,所有子网络共享一套权重。评估一个子网络,等价于在大图上摘一条路径做前向与反向传播,而不是独立训练一个完整模型。相当于从“每道菜单独起灶”变成“都在同一锅高汤里涮”。

训练方式采用路径采样:每步随机采一个子网络(一条路径),用它更新共享参数;控制器(一个 RNN 策略网络)根据反馈调整采样概率,让更优结构获得更多采样机会。搜索结束后,再把最优子网络从超网络中“继承”出来做独立重训。注意:共享权重给出的分数是相对排名参考,不是最终成绩单——这点在后面的误区里还会强调。

θ∗=arg⁡min⁡θ Ea∼π(a;α)[ Ltrain(a(θ)) ]\displaystyle \theta^{*} = \arg\min_{\theta}\ \mathbb{E}_{a \sim \pi(a; \alpha)} \left[\, \mathcal{L}_{\text{train}}\big( a(\theta) \big) \,\right]

1. 共享参数目标:θ\* 表示超网络最终收敛的那套共享权重,所有子结构都从它身上“借参数”。

θ∗=arg⁡min⁡θ\theta^{*} = \arg\min_{\theta}

2. 期望损失:优化目标是对控制器采样出的所有子结构损失取期望,而非每个子结构各自最小化。

Ea∼π(a;α)\mathbb{E}_{a \sim \pi(a; \alpha)}

3. 共享结构前向:a(θ) 表示从超网络大图中摘出的子结构,它只激活路径上的参数参与计算。

Ltrain(a(θ))\mathcal{L}_{\text{train}}\big(a(\theta)\big)

高汤在每道试菜间传承、积累风味;超网络权重在每次路径采样间共享、逐步泛化。代价是单菜精度不如“专锅专炖”,但换来的是把几千口灶台压缩成一口老汤锅。

代理模型预测

阿明认识一群老饕,闻香、看色、听“滋滋”声,就能把一道菜预测个八九不离十。于是他不等每道菜完整出锅,先请老饕打分,只对高分候选进入实操。这个“只动嘴不动锅”的环节,就是代理模型。

代理模型(surrogate model)是“架构描述 → 验证精度”的近似函数:先用少量真实评估数据拟合它,再用它对大量未评估架构快速打分排序。预测器可以选高斯过程、图神经网络或随机森林。另一个常用技巧是学习曲线外推:只训练少量轮数,把“轮数-精度”曲线按幂律规律外推,估算完整训练的饱和精度——相当于只让小份试味冒个泡,就预判大份成品的成色。

代理模型通常配合主动采样形成闭环:每次用采集函数挑出“最值得验证”的候选做真实评估,把新样本喂回代理模型更新预测,再进入下一轮。预测器越来越准,需要完整训练的候选越来越少。

Acc(t)  ≈  a  −  b⋅t−c\displaystyle \mathrm{Acc}(t) \;\approx\; a \;-\; b \cdot t^{-c}

1. 曲线模型:用幂律函数近似“轮数-精度”曲线,这是学习曲线外推的基本假设。

Acc(t)≈a−b⋅t−c\mathrm{Acc}(t) \approx a - b \cdot t^{-c}

2. 饱和上限:当训练轮数趋于无穷时,t 的负 c 次幂趋向零,精度收敛到 a,即该架构潜力上限。

lim⁡t→∞Acc(t)=a\lim_{t \to \infty} \mathrm{Acc}(t) = a

3. 外推截断:只训练少量轮数拟合参数,再外推出大 t 下的期望精度,省下完整训练的时间。

b⋅t−c→0,t≫1b \cdot t^{-c} \to 0, \quad t \gg 1

老饕的预判不完美,但能快速把几百道菜筛到三五道“值得下锅”。真正的味道永远以完整试吃为准——就像代理预测后仍需真实评估兜底。

早停策略

阿明给试菜立了条规矩:第一口寡淡无层次,立刻倒掉换配方,绝不为了“万一后面变好”硬撑到出锅。省下的灶台时间,用来试更多可能的配方。

NAS 里大量候选架构注定是低分选手,完整训练它们纯属烧钱。早停策略的思想就是:用训练早期的表现预判终局成色,没有希望的候选提前终止,把预算留给更有潜力的候选。著名的实现包括 ASHA(异步连续减半算法)与 Hyperband 的中位数停止法则。做法是设定若干检查点(如第 1、2、4、8 轮),每到检查点就把同一预算档位的候选放在一起比“期中成绩”。

中位数停止法则的具体判定是:候选的当前精度若低于同预算群体精度中位数,直接淘汰;若达标,则晋级并翻倍训练预算。这就像全班统一考试划一条及格线,不过线的不给补考机会,过线的进入下一轮加时赛。多阶段筛选层层收窄,最终只留个位数的候选进入完整训练。

{继续训练,预算翻倍,Acci(tk)  ≥  median{Accj(tk)}早停淘汰,否则\displaystyle \begin{cases} \text{继续训练,预算翻倍}, & \mathrm{Acc}_{i}(t_k) \;\ge\; \mathrm{median}\left\{\mathrm{Acc}_{j}(t_k)\right\} \\[4pt] \text{早停淘汰}, & \text{否则}\end{cases}

1. 检查点定义:训练进行到第 k 个预设轮数时做一次“期中考核”,所有同级候选一起比较。

tk∈{1,2,4,8,… }t_k \in \{ 1, 2, 4, 8, \dots \}

2. 晋级条件:候选 i 的精度不低于同预算候选的中位数,则获得翻倍预算继续训练。

Acci(tk)  ≥  median{Accj(tk)}\mathrm{Acc}_{i}(t_k) \;\ge\; \mathrm{median}\left\{\mathrm{Acc}_{j}(t_k)\right\}

3. 淘汰条件:低于中位数者立即终止,避免在注定平庸的架构上浪费训练资源。

Acci(tk)<median{Accj(tk)}  ⇒  终止\mathrm{Acc}_{i}(t_k) < \mathrm{median}\left\{\mathrm{Acc}_{j}(t_k)\right\} \;\Rightarrow\; \text{终止}

早停不是武断的一刀切,而是把“试吃一口”变成制度化的筛选闸门。被淘汰的鸭汤不会被端上桌,却为真正的好菜省出了灶台时间。

渐进式搜索

阿明研发套餐时从不一次性设计十道完整大菜。他先做一道小份前菜试水,反响好,再把同一个配方逻辑放大成主菜;小菜单里验证过的元素,才允许进入大菜单。

渐进式搜索(如 PNAS、DARTS 的逐步放宽)遵循同样的“由浅入深”信念:先在小规模单元上搜索,确认方向正确后,逐步增加单元块数、网络深度与输入分辨率。每一阶段都继承上一阶段找到的精英结构——这叫作精英保留(elitism)——只扩展新的自由度,绝不推倒重来。搜索从中途到收尾越来越贵,但每一步都站在上一次最优的肩膀上。

具体流程可以描述为:第 k 阶段维护一个精英集合,枚举所有“在精英上加一块”的扩展候选,用代理模型打分过滤,再对少数高分候选做真实训练验证,选出新的精英进入第 k+1 阶段。随着块数增加,搜索空间逐步放大,但候选始终来自精英扩展,而不是全空间重新采样。

Sk+1  =  {  expand(a)  |  a∈Ek,  score(a)≥threshold  }\displaystyle \mathcal{S}_{k+1} \;=\; \left\{\; \mathrm{expand}(a) \;\middle|\; a \in \mathcal{E}_{k},\; \mathrm{score}(a) \geq \mathrm{threshold} \;\right\}

1. 精英集合:E_k 是第 k 阶段表现最好的若干结构,它们是下一轮扩展的种子。

Ek={a1,a2,…,aK}\mathcal{E}_{k} = \left\{ a_{1}, a_{2}, \dots, a_{K} \right\}

2. 扩展操作:在精英结构上追加一个操作块,生成更复杂的候选,这是“由浅入深”的推进方式。

expand(a):B↦B+1\mathrm{expand}(a): B \mapsto B+1

3. 下一阶段搜索空间:新空间只存放精英扩展出的候选,规模远小于全量搜索空间。

Sk+1={expand(a)∣a∈Ek}\mathcal{S}_{k+1} = \left\{ \mathrm{expand}(a) \mid a \in \mathcal{E}_{k} \right\}

渐进式如同“小份试菜成功才放量”。每一阶段的灶台投入都以精英为锚点,搜索预算从“撒胡椒面”变成“集中火力”。

评估代价权衡

阿明算过一笔账:完整试做一道菜要 60 分钟、80 元成本;小份试味只要 10 分钟、15 元。先做小份筛选,再对进入决赛的几道做大份完整验证,总成本骤降。这就是评估代价的平衡术。

NAS 的总开销约等于候选数乘以单次评估代价。加速可以压缩候选数(空间瘦身、早停),也可以压缩单次代价。单次评估的压缩手段包括:低精度训练(半精度/混合精度)、降低输入分辨率(如把 224×224 缩到 128×128)、减少通道数、缩短训练轮数。但代价越低,评估偏差通常越大——低分辨率下表现好的结构,高分辨率下未必领先。

工程上常用“由粗到精”的漏斗式管线:先用极廉价评估做大规模海选,再用中档评估复筛,最后对个位数的胜出者做全精度训练与部署测试。预算分配呈漏斗形,越靠近出口的单次评估越贵,但候选数量越少,整体账单被压到最低。

S  =  CnaiveCaccel  =  N⋅TfullN∗⋅Tfull  +  Nstop⋅Tstop  +  Nproxy⋅Tproxy\displaystyle S \;=\; \frac{C_{\text{naive}}}{C_{\text{accel}}} \;=\; \frac{N \cdot T_{\text{full}}}{N^{*} \cdot T_{\text{full}} \;+\; N_{\text{stop}} \cdot T_{\text{stop}} \;+\; N_{\text{proxy}} \cdot T_{\text{proxy}}}

1. 朴素总代价:没有加速时,N 个候选全部完整训练,总代价是候选数与单次训练时长的乘积。

Cnaive=N⋅TfullC_{\text{naive}} = N \cdot T_{\text{full}}

2. 加速后总代价:只有少数候选完整训练,其余要么被早停中途截断,要么只做廉价代理评估。

Caccel=N∗⋅Tfull+Nstop⋅Tstop+Nproxy⋅TproxyC_{\text{accel}} = N^{*} \cdot T_{\text{full}} + N_{\text{stop}} \cdot T_{\text{stop}} + N_{\text{proxy}} \cdot T_{\text{proxy}}

3. 加速倍率:朴素代价与加速代价之比即为总加速倍数,工程上常期望达到 10 到 1000 倍。

S=CnaiveCaccelS = \frac{C_{\text{naive}}}{C_{\text{accel}}}

账算清楚后,阿明把九成预算留给煎炒烹炸的决赛轮,海选只花闻香看色的轻工夫。评估代价的取舍不是“省不省”的问题,而是“把钱花在哪一刀”的艺术。

工程落地实践

研发成功不等于能端上桌。阿明最后要面对现实:后厨人力有限、上菜时长有红线、客人口味分层。他需要把整套加速策略组装成一条可执行的研发流水线。

工程落地 NAS 时,常见的约束是:单卡或少量 GPU、数小时的搜索窗口、明确的延迟与参数量预算。对应策略组合拳是:限定搜索空间(只保留深度可分离卷积、逐点卷积、池化等常用操作)→ 用超网络/代理模型做海选 → 早停筛掉大部分候选 → 对胜出架构独立重训并做部署校准。在资源受限场景下,这套组合拳能把原来“数百 GPU 天”的任务压缩到“数卡小时”。

快速原型验证是另一类典型场景:新业务上线前,用加速 NAS 在几小时内拿到强基线,替代人工试错调参。落地时还必须守住“结果可信评估”三道关:搜索阶段与重训阶段的数据分布一致、用多个随机种子评估稳定性、胜出架构必须独立重训并与人工基线对比。否则,再快的搜索也只是“快而不准”。

min⁡a∈S  Latency(a)s.t.Accretrain(a)  ≥  Accbaseline+δ\displaystyle \min_{a \in \mathcal{S}}\; \mathrm{Latency}(a) \quad \mathrm{s.t.} \quad \mathrm{Acc}_{\text{retrain}}(a) \;\ge\; \mathrm{Acc}_{\text{baseline}} + \delta

1. 目标函数:在搜索空间 S 中寻找推理延迟最小的架构,满足部署侧的实时性预算。

min⁡a∈S  Latency(a)\min_{a \in \mathcal{S}} \; \mathrm{Latency}(a)

2. 精度约束:约束使用独立重训后的精度,而不是超网络中共享权重给出的粗略打分。

Accretrain(a)  ≥  Accbaseline+δ\mathrm{Acc}_{\text{retrain}}(a) \;\ge\; \mathrm{Acc}_{\text{baseline}} + \delta

3. 可行解集:最终交付的是“延迟最小且达标”的架构,所有加速策略都是为了更快逼近这个解。

a∗=arg⁡min⁡{Latency(a)  |  a∈S, 精度约束成立}a^{*} = \arg\min \left\{ \mathrm{Latency}(a) \;\middle|\; a \in \mathcal{S},\ \text{精度约束成立} \right\}

阿明的流水线最终定型:精选菜单(空间瘦身)、老汤共享(参数共享)、老饕预判(代理模型)、试吃闸门(早停)、小份放量(渐进搜索)、账单管控(代价权衡)。每一环都为着一个目标——在灶台和时间有限的前提下,端出比旧菜单更受欢迎的新招牌菜。

AI 应用场景

手机端模型自动设计

阶段:模型搜索与压缩

解决的问题:手机 NPU 算力只有云端的几十分之一,人工设计轻量网络高度依赖资深经验且周期长。把“延迟预算”作为硬约束塞进加速 NAS 管线,数小时内就能搜出满足毫秒级延迟的轻量网络,替代数周人工调参。

具体案例:某视觉 AI 公司的 App 要升级人像分割模型。工程师限定轻量操作集作为搜索空间,用超网络共享权重加代理模型海选,早停筛掉约九成候选,最终在 4 卡 GPU 上用 6 小时完成搜索;胜出架构独立重训后,精度比旧模型高 2 个百分点,延迟反而降低 20%。

新业务快速原型验证

阶段:模型选型与基线建立

解决的问题:新业务部门只有三天人力,传统手工调参只能覆盖寥寥几个结构,很容易错过强基线。用代理模型加早停的轻量 NAS 管线,数小时内覆盖数百个候选,产出可靠基线,让业务快速验证可行性。

具体案例:工业质检团队接手新的缺陷检测任务,样本约 2 万张。他们用低分辨率加少轮数海选 300 个架构,早停淘汰到前 10,再做完整重训并按精度与延迟排序直接选型上线,整个流程只花了一天。

云上大规模搜索平台

阶段:平台化自动建模

解决的问题:在算力充足但业务算力申请流程冗长的内网环境,用参数共享超网络配合并行路径采样,把“千卡月”级搜索压缩到“数卡天”级,让架构搜索从论文里的奢侈品变成平台上的标准服务。

具体案例:某平台团队把 ENAS 风格超网络训练做成标准化镜像,各业务线提交“数据加延迟预算”,平台数小时返回候选架构排名,再由统一重训服务产出最终模型。半年内服务了 20 多个业务线,平均每个模型交付周期从两周缩短到一天。

Python 演示

python68 行
# -*- coding: utf-8 -*-"""Lightweight NAS demo: proxy screening + early stopping."""import numpy as npfrom sklearn.datasets import make_classificationfrom sklearn.neural_network import MLPClassifier SCREEN_EPOCHS = 2        # proxy-like cheap screeningFULL_EPOCHS = 20         # full evaluation budgetPATIENCE = 4             # early stopping toleranceTOP_K = 3                # survival count after screening def make_data():    X, y = make_classification(n_samples=800, n_features=12,                               n_informative=8, random_state=42)    split = int(0.7 * len(X))    return (X[:split], y[:split]), (X[split:], y[split:]) def train_acc(config, X_train, y_train, X_val, y_val, epochs):    model = MLPClassifier(hidden_layer_sizes=config["hidden"],                          learning_rate_init=config["lr"],                          max_iter=1, warm_start=True)    best_acc = 0.0    no_improve = 0    used = 0    for epoch in range(epochs):        model.partial_fit(X_train, y_train, classes=np.unique(y_train))        acc = model.score(X_val, y_val)        used = epoch + 1        if acc > best_acc:            best_acc = acc            no_improve = 0        else:            no_improve += 1        if no_improve >= PATIENCE:            break    return best_acc, used def main():    (X_train, y_train), (X_val, y_val) = make_data()    configs = [        {"hidden": (16,), "lr": 0.010},        {"hidden": (32, 16), "lr": 0.001},        {"hidden": (64, 32, 16), "lr": 0.003},        {"hidden": (8, 8), "lr": 0.010},        {"hidden": (128,), "lr": 0.0005},        {"hidden": (32,), "lr": 0.005},    ]     print("== proxy screening (2 epochs) ==")    scored = []    for cfg in configs:        acc, _ = train_acc(cfg, X_train, y_train, X_val, y_val, SCREEN_EPOCHS)        print("  %-16s screen=%.4f" % (str(cfg["hidden"]), acc))        scored.append((cfg, acc))    scored.sort(key=lambda pair: pair[1], reverse=True)    kept = [cfg for cfg, _ in scored[:TOP_K]]     print("== full evaluation with early stopping ==")    total_budget = len(kept) * FULL_EPOCHS    used_budget = 0    for cfg in kept:        acc, used = train_acc(cfg, X_train, y_train, X_val, y_val, FULL_EPOCHS)        used_budget += used        print("  %-16s full=%.4f used_epochs=%d" % (str(cfg["hidden"]), acc, used))    print("  saved %.1f%% of full epochs" % (100.0 * (1 - used_budget / total_budget))) if __name__ == "__main__":    main()
目的:用 sklearn 实现一个迷你 NAS——先用 2 轮训练当“代理筛选”,保留前 3 名,再对它们做完整训练并统计早停节省了多少轮次。
  1. model = MLPClassifier(..., max_iter=1, warm_start=True)构建带热启动的模型,每次只训一个 epoch,便于模拟“评估一个候选结构”。
  2. model.partial_fit(X_train, y_train, classes=np.unique(y_train))每调用一次只推进一个 epoch,多个候选共享同一套训练流程。
  3. used = epoch + 1记录真实消耗的轮数,早停越早触发,used 越小。
  4. if no_improve >= PATIENCE: break连续若干轮无提升即早停,这就是“尝一口寡淡就换配方”。
  5. scored.sort(key=lambda pair: pair[1], reverse=True)按代理分数降序排列,模拟老饕先打分。
  6. kept = [cfg for cfg, _ in scored[:TOP_K]]只保留前 3 名进入决赛,对应漏斗式筛选。
  7. used_budget += used累加决赛阶段真实消耗的轮数,用于计算节省的训练量。

常见误区

误区超网络里所有子网络共用一套权重,评估出来的精度既然来自真实训练,那选中的架构直接拿去用就行,不用再重训。

正解共享权重是一种“高熵近似”:它保留了子结构之间的相对排名,但绝对精度整体有偏差。好比共用高汤试菜,能快速分辨“谁更有潜力”,却代表不了每道菜独立出锅的标准味道。因此搜索胜出者必须脱离超网络、独立初始化并完整重训,才能得到可信的最终指标。

为何常见:ENAS 等论文直接用共享权重就选出了高性能结构,读者容易误以为评估与最终训练是同一个过程。

误区很多模型训练到后期才发力,早停会把它们提前淘汰。早停省了时间但准度很差,风险太大,干脆关闭。

正解早停的目标不是判断单点终局,而是用群体统计规律(如中位数)低成本淘汰大概率无望的候选。配合多阶段复筛,并给少数精英完整重训的机会,“误杀”风险完全可控。好比第一口寡淡就换配方,并不妨碍真正惊艳的菜在最后完整出锅。

为何常见:教育场景常强调“坚持到最后才有奇迹”,把这种直觉搬到海量采样场景中,就高估了小概率事件的期望收益。

误区代理模型预测的精度越接近真实值,搜索出来的结果一定越好,所以我应该把预测器和真实评估的均方误差压到最低。

正解NAS 搜索真正依赖的是排名一致性(如 Spearman 相关),而不是数值误差。一个整体偏高但排序稳定的代理,比数值贴合却乱排名的代理更有用,因为控制器和采集函数都按排序做决策。老饕不必精确说出“咸度 0.7 克”,只要“这盘比那盘好吃”说得准,就能帮厨房筛菜。

为何常见:多数人习惯用回归场景的均方误差衡量预测好坏,照搬到架构评估上就找错了优化目标。

误区既然搜索空间太大才慢,那就把操作集、层数、连接方式全都锁死,只留两三个变量,又快又省心。

正解空间瘦身是砍掉“明显无意义”的组合,而不是把可能的最优解也一并排除。过度约束会让搜索在错误的子空间里空转,得到的“最优”天花板很低。好比菜单精简到只剩一道菜,点餐确实快了,但研发的价值也没了。好的瘦身保留结构多样性,只压缩冗余维度。

为何常见:面对“数百天”的吓人成本,人们容易走极端,把加速的焦虑转成对空间规模的过度收缩。

面试题

Q1. 单元级搜索(Cell Search)缩小搜索空间的关键原理是什么?

单选题 · easy

  • A.取消网络所有卷积层的搜索
  • B.将重复单元结构视为可复用的积木← 正确答案
  • C.完全放弃对层连接方式的搜索
  • D.只搜索全连接层的神经元数量

答案:B。单元搜索相当于把“整栋楼的每块砖都单独设计”改成“设计一块标准砖型,全楼复用”。A 错在单元搜索并没有取消卷积层搜索;C 错在连接方式仍然可搜索;D 错在它只搜神经元数量就会丢掉卷积结构的关键维度。

Q2. ENAS 中所有子网络共享的核心资源是什么?

单选题 · easy

  • A.各自独立训练的损失函数
  • B.超网络中的同一套网络权重← 正确答案
  • C.每个子网络私有的优化器
  • D.测试数据集上的最终标签值

答案:B。ENAS 的超网络是一张大图,所有子网络共享同一套权重,路径采样训练更新的正是这套共享参数。A 错在损失函数是各自计算的;C 错在优化器状态并不共享;D 与测试标签毫无关系。

Q3. 学习曲线外推方法依赖的基本规律是什么?

单选题 · mid

  • A.验证精度随训练轮数按幂律上升并趋于饱和← 正确答案
  • B.训练轮数与模型精度始终保持线性关系
  • C.验证精度达到峰值后会立即无限下降
  • D.精度只取决于学习率而不受轮数影响

答案:A。学习曲线外推基于幂律经验规律:精度随轮数先快后慢、趋于饱和,即文中 Acc(t) ≈ a − b·t⁻ᶜ。B 错在曲线是非线性的;C 错在精度不会“立即无限下降”;D 错在轮数对精度影响非常明显。

Q4. 早停策略中“中位数停止法则”的判定方式是?

单选题 · mid

  • A.所有候选一律训练相同固定轮数后停止
  • B.与同预算群体中位数相比,低于者提前终止← 正确答案
  • C.只选择损失下降最快的单个候选继续训练
  • D.在训练开始前就随机终止一半的候选结构

答案:B。这是 ASHA/Hyperband 的核心规则:同一预算档位的候选互相比,“期中成绩”低于群体中位数即淘汰。A 是朴素等时训练,没有筛选;C 只留一个最优过于激进;D 的随机终止完全没有依据中位数。

Q5. 渐进式搜索“由浅入深”的核心思想是什么?

单选题 · mid

  • A.从完全随机初始化的大模型开始直接训练
  • B.从小规模结构起搜,逐级扩展并保留精英← 正确答案
  • C.只对网络深度进行搜索而忽略其他维度
  • D.先用无监督预训练再对所有架构统一评估

答案:B。渐进式搜索先在小规模结构上搜索,把精英结构逐步扩展放大,避免每次全量重搜,正如“小份试菜成功才放量”。A 是朴素暴力法;C 忽略了宽度、操作等其他维度;D 与无监督预训练没有直接关系。

Q6. 下列哪些手段可以降低单次架构评估的代价?

多选题 · mid

  • A.降低输入图像的分辨率← 正确答案
  • B.减少训练的总轮数← 正确答案
  • C.缩减候选操作集的规模← 正确答案
  • D.大幅增加网络的层数

答案:ABC。总代价约等于候选数乘以单次评估代价。A(分辨率)、B(轮数)直接压缩单次训练开销;C 压缩操作集规模,也让空间和单次计算更轻。D 增加层数会让训练变重,方向正好相反。

Q7. 渐进式搜索中“精英保留(Elitism)”的主要作用是什么?

单选题 · hard

  • A.保留当前最优结构进入下一轮微调与扩展← 正确答案
  • B.将搜索过程中全部候选结构重复训练
  • C.仅保留参数量最大的结构继续进行搜索
  • D.用测试集反复挑选表现最稳定的结构

答案:A。精英保留把上一阶段的最优结构带进下一阶段作为扩展种子,保证搜索方向不倒退,预算聚焦于最有希望的分支。B 重复训练全部候选是浪费;C 参数量最大不等于性能最好;D 用测试集挑选会造成数据泄漏。

Q8. 关于代理模型辅助搜索,下列叙述正确的有哪些?

多选题 · hard

  • A.代理模型需要用真实评估数据来拟合← 正确答案
  • B.采集函数需要权衡探索与利用← 正确答案
  • C.代理模型追求排名相关而非绝对精度← 正确答案
  • D.代理模型可以完全替代真实训练评估

答案:ABC。代理模型本质上是“用真实评估数据拟合的预测器”:需要样本拟合、采集函数平衡探索与利用、优化目标偏重排名一致。D 错在代理模型无法完全替代真实评估,最终仍要靠完整重训守住质量底线。

Q9. 将 NAS 从数百天压缩到数小时,主要依赖哪类策略?

单选题 · easy

  • A.单纯堆加更多数量的 GPU
  • B.组合参数共享、代理模型与早停← 正确答案
  • C.固定所有超参数不进行搜索
  • D.扩大搜索空间提升采样的多样性

答案:B。数百天压缩到数小时靠的是结构化的加速组合:参数共享省去重复训练、代理模型替代大量完整评估、早停截断低质量候选。A 堆 GPU 只是线性提速;C 固定超参等于放弃搜索;D 扩大空间只会让问题更严重。

Q10. 关于低分辨率评估的误差特性,正确的认识是什么?

多选题 · extreme

  • A.低分辨率评估会损失部分细节信息← 正确答案
  • B.低分辨率评估往往能保留大致排名趋势← 正确答案
  • C.低分辨率评估与完整评估结果必定完全相同
  • D.低分辨率评估完全无法用于架构筛选

答案:AB。低分辨率评估是常见的廉价评估手段,会损失细节信息,但大量实验表明其排名趋势与高分辨率评估大致一致,因此常被用作第一道海选闸门。C 的“必定完全相同”过于绝对;D 的“完全无法用于筛选”同样绝对化,两者都忽略了工程上的近似权衡。