2.1 搜索空间的定义与重要性 本节摘要:搜索空间是 NAS 的"架构池",定义为所有可被算法探索和评估的神经网络架构的集合。本节先形式化定义搜索空间,再从表达力、搜索效率、先验知识三个设计原则出发,分析为什么搜索空间决定 NAS 的性能上限与成本下限,并给出全网络结构、细胞结构、预定义模块三种类型的对比。 本节要回答的问题 阅读完本节,你应当能够: 用集合语言定义搜索空间,并解释"空间中的一个点 = 一个架构"的含义 说出搜索空间设计的三条原则及各自要解决的矛盾 对比全网络结构、细胞结构、预定义模块三种搜索空间类型的优缺点 解释为什么搜索空间决定性能上限——"搜不到空间里没有的解" 一、问题与直觉:空间是"天花板"也是"地板" 假设你要在一片森林里找一棵最高的树,NAS 就是你的搜索算法。
本节摘要:搜索空间是 NAS 的"架构池",定义为所有可被算法探索和评估的神经网络架构的集合。本节先形式化定义搜索空间,再从表达力、搜索效率、先验知识三个设计原则出发,分析为什么搜索空间决定 NAS 的性能上限与成本下限,并给出全网络结构、细胞结构、预定义模块三种类型的对比。
阅读完本节,你应当能够:
假设你要在一片森林里找一棵最高的树,NAS 就是你的搜索算法。森林边界在哪里,直接决定两件事:你能找到多高的树(性能上限),以及你要走多少路才能确定找到了(成本下限)。如果你把森林划在自家后院,最高那棵树可能还没邻居阳台上的盆栽高;如果你把森林划到整个国家,找到"最高树"的成本又高得离谱。搜索空间就是 NAS 的"森林"。
这个类比解释了为什么 SOURCE 把搜索空间称为 NAS 的"基石"和"起点"。搜索空间定义了算法可以探索的架构类型和范围,直接决定了搜索结果的质量。一个设计合理的空间能引导 NAS 找到更好的架构;一个糟糕的空间——比如操作集合里漏掉了关键操作——会从根上限制搜索,甚至导致失败。空间设计是"事后无法补救"的一步:搜索策略再聪明,评估策略再准,也救不了空间里压根不存在的好解。
形式化定义。搜索空间可以看作一个离散的高维结构空间,每个点对应一个独特的架构。NAS 的目标是在这个空间里找一个或多个最优的点,使架构在特定任务上达到最佳性能。SOURCE 给了一个简洁的集合写法:设架构集合为 A,NAS 的目标是在 A 中找到最优架构 a*,使该架构在目标任务上性能最佳。数学表达不复杂,但它点明了一个关键事实——NAS 是受限的优化问题,优化范围被空间锁死。
三条设计原则。第一条是表达能力:空间要够大,能装下潜在的最优架构。空间太小,最优解可能在空间之外,搜得再好也是矮子里拔将军。第二条是搜索效率:空间不能太大,否则搜索过程耗时到不可接受。表达力与效率是一对矛盾——空间越大,装下好解的概率越高,但搜完的成本也越高。第三条是先验知识:用领域经验指导空间设计。图像识别任务优先放卷积相关的操作和结构,这能大幅缩小空间、提高效率。三条原则不是并列关系,工程上是在"表达力"和"效率"之间找平衡,而"先验知识"是同时优化两者的杠杆。
三种类型。全网络结构搜索空间直接搜整个网络的宏观结构(层数、每层类型、连接方式),NASNet 和 AmoebaNet 早期用它。优点是灵活、理论上能发现全新架构模式;缺点是空间巨大、搜索效率低、计算成本高。细胞结构搜索空间先搜一个高性能"细胞",再堆叠成整个网络,DARTS、ENAS 走这条路。优点是把空间大幅缩小、成本降低、细胞可迁移;缺点是灵活性受限,可能错过非细胞结构的好架构。预定义模块搜索空间基于已有模块(ResNet 残差块、Inception 模块)做组合选择,效率最高、实现最容易,但创新性最受限。
| 空间类型 | 搜索对象 | 优点 | 代价 |
|---|---|---|---|
| 全网络结构 | 整个网络宏观结构 | 灵活,可发现全新模式 | 空间巨大,成本高 |
| 细胞结构 | 一个可重复的细胞 | 空间小,可迁移 | 灵活性受限 |
| 预定义模块 | 已有模块的组合 | 效率高,易实现 | 创新性受限 |
先定基线,再定空间。设计空间之前,先确定一个已知强基线(比如 ImageNet 上的 ResNet-50)。好的搜索空间应该能让搜索找到"至少不比基线差"的架构。一个简单检验:把基线架构放进空间,看它是不是空间里合法的一个点。如果不是,说明空间设计漏了关键结构。
用先验知识缩小空间。SOURCE 强调,搜索空间的设计可以利用领域知识。图像识别优先考虑卷积相关操作;移动端部署优先放深度可分离卷积。先验不是限制,而是把算力花在更可能出好解的区域。
警惕"空间过于庞大"的幻觉。Cell 空间之所以成为主流,是因为它把"搜整个网络"变成"搜一个细胞",再把细胞堆 N 次。这个 N 的选择本身也是先验——N 太大,训练成本爆炸;N 太小,容量不够。经验上,先从 N 较小、操作集合较保守的空间起步,验证评估流程通畅后再逐步放大空间。
设计要点自查表:
| 检查项 | 问自己 |
|---|---|
| 表达能力 | 已知最好的架构在不在空间里? |
| 搜索效率 | 一个候选从采样到评估要多久? |
| 可迁移性 | 搜出的细胞换数据集还能用吗? |
| 先验嵌入 | 操作集合是否贴合任务数据特性? |
⚠️ 常见坑:操作集合里放了一堆重复或冗余的操作(比如 3x3 卷积和 5x5 卷积拆成十几个变体),空间虚胖,搜索效率被拖垮,而表达力并没有实质提升。
💡 关键直觉:搜索空间是 NAS 里唯一"一次设计、全程使用"的组件,它的错误会在搜索、评估、部署每个环节放大。设计空间的时间投入,永远值得。
纸上谈兵不如动手走一遍。假设我们要给 CIFAR-10 图像分类设计一个 Cell 空间,按 SOURCe 的原则一步步来。
第一步:定粒度。 选微观空间(Cell),不选全网络结构。理由很工程:CIFAR-10 上搜整网,空间巨大且每个候选训练都贵;搜 Cell 则空间缩小几个数量级,且搜出的 Cell 以后能搬到别的数据集——这正是"设计一次、复用多次"的思想(SOURCe 对细胞空间的定位)。
第二步:定操作集合。 从 SOURCe 列的常见操作里挑:3x3 卷积、5x5 卷积、3x3 深度可分离卷积、3x3 最大池化、3x3 平均池化、Identity(跳跃连接)、Zero(无连接)。七个操作是起点,先别贪多——操作太多会拖慢搜索,太少又限制表达力。这套操作集合与 DARTS 论文的默认集合几乎一致,说明它经受过检验。
第三步:定 Cell 结构。 参考 NASNet 的 Block 模式:每个 Cell 内若干节点,每个节点从前序节点接收输入、选一个操作、输出给后继。Normal Cell 保持特征图分辨率,Reduction Cell 负责降采样——两者分别对应 SOURCe 讲的"保持尺寸"和"减小尺寸"两种功能。
第四步:定堆叠方案(控制流)。 先固定一个简单的线性堆叠:N 个 Normal Cell 一组,每隔若干组插入一个 Reduction Cell,最后接全局池化与分类层。堆叠方案初期固定,只搜 Cell 内部——等流程跑通了再考虑把堆叠方式也放开搜索。
第五步:定编码。 把 Cell 表示成 DAG,用邻接矩阵 + 每条边的操作编号描述(第 2.4 节的图编码)。这种表示既能被进化算法的交叉变异操作,也能被 DARTS 类方法的连续松弛处理——留了后续切换策略的余地。
第六步:基线检验。 把 CIFAR-10 上的已知好架构(比如一个浅层 ResNet 对应的 Cell 形态)放进去,确认它在空间里是合法点——验证空间"装得下好解"。这个检验是第 2.1 节反复强调的纪律:空间连已知强基线都装不下,搜索就毫无意义。
搜索空间设计管的是"结构可能性",数据预处理(归一化、增强、划分)是训练流程的事,两者不要混在一起设计。但有一个例外值得注意:数据增强策略本身也可以成为搜索对象(AutoAugment 就是搜增强策略),这时它才属于"搜索空间"的范畴——那是第 5.3 节的进阶内容。初学阶段,把结构搜索与训练流程分开,逐个验证,别一上来就什么都想搜。
分情况。Cell 空间可复用性最强——NASNet 在 CIFAR-10 搜出的 Cell 直接搬到 ImageNet 上堆网络,这就是 SOURCe 强调的"可迁移性"。整网级空间(全网络结构搜索空间)复用性最差,因为它高度耦合具体任务。复用的前提是"结构先验相通":同类数据、同类任务之间迁移概率高,跨类型(图像到文本)基本要重设计。
因为 NAS 只能从空间里选,不能凭空创造。如果最优架构不在空间里,任何策略都找不到它——这是逻辑上的上限。工程上要验证这个上限够不够高,最直接的办法就是第 2.1 节讲过的基线检验:把已知最好的架构放进空间,看它在不在。
传统 NAS 是静态空间,但现在也有"自动构建搜索空间"的研究方向——根据搜索过程反馈动态扩展空间(SOURCe 在 2.5 节提过结合知识图谱、神经架构生成网络自动扩展空间的想法)。这属于前沿方向,工程上先用好静态空间,再关注这个演进。
近似正比。候选架构数量随空间维度指数增长,而每个候选的评估成本固定,所以"空间大 N 倍,成本大致也大 N 倍"。这解释了为什么 SOURCe 把"搜索效率"列为空间设计原则——空间设计不只是学术问题,它直接决定你付不付得起搜索账单。
不是"好",是"更划算"。微观空间牺牲了全局结构灵活性,换来了搜索可行性和迁移性。如果你的任务结构特殊(比如需要非 Cell 形态),微观空间反而可能误事。选宏观还是微观,取决于"你的好解长什么形状"——这需要先验,也是空间设计是"艺术"而非"算法"的原因。
下一节进入空间设计的第一个粒度——宏观搜索空间,看网络整体结构怎么定义。
