2.2 宏观搜索空间 (Macro Search Space)
第二章:NAS 的核心要素:搜索空间
2.2 宏观搜索空间 (Macro Search Space):神经网络架构探索的广阔天地
在神经网络架构搜索 (Neural Architecture Search, NAS) 的宏大征程中,搜索空间无疑是至关重要的基石。它如同浩瀚的宇宙,定义了 NAS 算法能够探索和发现的潜在神经网络架构的范围。正如宇宙的边界决定了我们能观测到的星系,搜索空间的设计则直接影响着 NAS 的效率、有效性和最终找到的架构的性能。
本章节,我们将聚焦于 宏观搜索空间 (Macro Search Space) 这一 NAS 领域的核心概念,深入剖析其定义、重要性、设计方法、常见类型以及面临的挑战。宏观搜索空间着眼于神经网络的整体结构,例如网络的层数、层与层之间的连接方式、以及宏观模块的堆叠模式。它如同建筑设计的蓝图,决定了建筑的整体框架和功能布局。理解和掌握宏观搜索空间,是深入 NAS 领域,并构建高效 NAS 系统的关键一步。
2.2.1 宏观搜索空间的定义与重要性
宏观搜索空间,顾名思义,指的是在 NAS 中,我们关注神经网络架构的 宏观层面 的搜索空间。它定义了网络整体结构的可能性,例如:
- 网络的层数 (Depth): 网络包含多少层,例如卷积层、全连接层等。
- 网络的宽度 (Width): 每一层中神经元的数量或者特征通道的数量。
- 层与层之间的连接方式 (Connectivity): 层之间如何连接,例如顺序连接、跳跃连接、并行连接等。
- 宏观模块的类型与排列 (Module Arrangement): 网络是否由重复的宏观模块 (例如 ResNet 的残差块、Inception 模块) 堆叠而成,以及这些模块的排列方式。
- 网络拓扑结构 (Topology): 网络的整体结构,例如链式结构、树状结构、图结构等。
宏观搜索空间 不直接关注 网络中 细粒度 的操作选择,例如卷积核的大小、激活函数的类型、以及具体的优化器参数等。这些细粒度的操作选择通常被划归到 微观搜索空间 (Micro Search Space) 的范畴,我们将在后续章节中进行探讨。
宏观搜索空间的重要性不言而喻,它体现在以下几个方面:
- 决定搜索的范围和潜力: 宏观搜索空间的设计直接决定了 NAS 算法能够探索到的架构类型。一个设计合理的宏观搜索空间能够覆盖更广泛的架构可能性,从而更有机会找到性能更优异的网络结构。反之,一个狭隘的搜索空间可能会限制 NAS 的探索能力,错失潜在的优秀架构。
- 影响搜索效率: 宏观搜索空间的复杂度直接影响着 NAS 的搜索效率。一个过于庞大和复杂的宏观搜索空间会使得搜索过程变得极其耗时,甚至难以收敛。而一个设计巧妙的宏观搜索空间可以在保证搜索空间足够丰富的前提下,尽可能地降低搜索难度,提高搜索效率。
- 引导架构设计方向: 宏观搜索空间的设计体现了架构设计者的先验知识和设计理念。通过精心设计宏观搜索空间,我们可以引导 NAS 算法朝着特定的架构方向进行探索,例如,我们可能希望搜索出具有特定拓扑结构或者由特定模块组成的网络。
- 提升架构的可解释性和可理解性: 相较于直接搜索网络的全部细节,宏观搜索空间的设计更注重网络的整体结构。这使得搜索到的架构更易于理解和分析,有助于我们从中学习到有效的架构设计原则,并将其应用于未来的网络设计中。
简而言之,宏观搜索空间是 NAS 的 “战略层面”,它为 NAS 算法指明了搜索的大方向,并奠定了搜索的基础。一个成功的 NAS 系统,必然离不开精心设计的宏观搜索空间。
2.2.2 宏观搜索空间的设计方法与关键要素
设计一个有效的宏观搜索空间并非易事,它需要在 表达能力 (Expressiveness) 和 搜索效率 (Search Efficiency) 之间取得平衡。一个理想的宏观搜索空间应该具备以下特点:
- 表达能力强 (Expressive): 能够覆盖足够广泛的架构可能性,包含潜在的优秀架构。
- 搜索效率高 (Search Efficient): 搜索空间不宜过于庞大和复杂,以便 NAS 算法能够高效地进行探索。
- 结构化 (Structured): 搜索空间应该具有一定的结构性,便于 NAS 算法进行有效的搜索和优化。
- 可解释性 (Interpretable): 搜索空间的设计应该能够帮助我们理解搜索到的架构,并从中学习到有用的架构设计知识。
为了实现上述目标,在设计宏观搜索空间时,我们需要考虑以下 关键要素:
1. 网络深度 (Network Depth):
网络深度是宏观搜索空间中最基本的维度之一。深度神经网络已经被证明能够学习到更复杂的特征表示,并在许多任务中取得了显著的性能提升。因此,网络深度是宏观架构设计中需要重点考虑的因素。
在宏观搜索空间中,我们可以将网络深度视为一个可搜索的参数。例如,我们可以定义网络的深度范围为 [L_min, L_max],NAS 算法需要在这个范围内搜索最佳的网络深度。
设计策略:
- 固定深度范围: 设定一个固定的网络深度范围,例如 [5, 20]。
- 深度递增搜索: 从较浅的网络开始搜索,逐步增加网络深度,探索更深的网络结构。
- 深度模块化: 将网络深度分解为多个深度模块,例如重复堆叠相同的网络层组,搜索模块的重复次数。
示例:
- VGG 网络: 通过重复堆叠卷积层和池化层来增加网络深度,VGG16 和 VGG19 的区别主要在于网络深度不同。
- ResNet 网络: 通过残差连接和残差块的堆叠,可以构建非常深的网络,例如 ResNet50、ResNet101、ResNet152 等。
2. 网络宽度 (Network Width):
网络宽度指的是每一层中神经元的数量或者特征通道的数量。网络宽度决定了网络的容量和表达能力。更宽的网络通常具有更强的表达能力,但也更容易过拟合,并且计算成本更高。
在宏观搜索空间中,我们可以将网络宽度视为另一个可搜索的参数。例如,我们可以定义每一层的宽度范围,或者定义网络整体的宽度缩放因子。
设计策略:
- 固定宽度范围: 设定每一层或者网络整体的宽度范围。
- 宽度缩放因子: 使用一个全局的宽度缩放因子来调整所有层的宽度。
- 宽度递增搜索: 从较窄的网络开始搜索,逐步增加网络宽度。
- 宽度模块化: 将网络宽度分解为多个宽度模块,例如,不同类型的层可以具有不同的宽度搜索范围。
示例:
- Wide ResNet: 相比于原始 ResNet,Wide ResNet 通过增加残差块中卷积层的通道数,显著提升了网络性能。
- MobileNet: MobileNet 通过使用深度可分离卷积和宽度乘数 (Width Multiplier) 来降低网络宽度,从而实现轻量化。
3. 连接模式 (Connectivity Patterns):
连接模式定义了网络层与层之间的连接方式。传统的神经网络通常采用顺序连接模式,即每一层的输出作为下一层的输入。然而,近年来,研究人员提出了各种更复杂的连接模式,例如:
- 跳跃连接 (Skip Connections): 将浅层网络的输出直接连接到深层网络,例如 ResNet、DenseNet。
- 并行连接 (Parallel Connections): 将多个分支并行连接,例如 Inception 网络。
- 循环连接 (Recurrent Connections): 在网络中引入循环连接,例如 RNN、LSTM、GRU。
- 任意拓扑结构 (Arbitrary Topology): 允许网络具有更灵活的拓扑结构,例如图神经网络。
在宏观搜索空间中,我们可以搜索不同的连接模式,例如:
- 选择是否使用跳跃连接。
- 选择跳跃连接的类型 (例如,identity skip, convolutional skip)。
- 选择并行分支的数量和类型。
- 搜索网络的整体拓扑结构。
设计策略:
- 预定义连接模式集合: 定义一个连接模式的集合,例如 {顺序连接, 跳跃连接, 并行连接},NAS 算法需要从中选择合适的连接模式。
- 连接模式组合: 允许将不同的连接模式进行组合,例如,在网络中同时使用跳跃连接和并行连接。
- 拓扑结构搜索: 使用图神经网络等方法直接搜索网络的拓扑结构。
示例:
4. 宏观模块 (Macro Modules):
为了降低搜索空间的复杂性并提高搜索效率,宏观搜索空间通常会采用 模块化设计 的思想。即将网络架构分解为多个可重复堆叠的 宏观模块 (Macro Modules)。NAS 算法只需要搜索模块的类型、模块内部的结构以及模块的堆叠方式,而无需从头开始搜索整个网络结构。
常见的宏观模块包括:
- 残差块 (Residual Block): ResNet 中使用的基本模块,包含卷积层、批量归一化层、激活函数以及跳跃连接。
- Inception 模块: Inception 网络中使用的模块,包含多个并行分支,每个分支使用不同大小的卷积核。
- MobileNet 模块: MobileNet 中使用的模块,包含深度可分离卷积和线性瓶颈结构。
- NASNet Cell: NASNet 算法搜索到的基本模块,包含多个卷积操作和连接方式。
在宏观搜索空间中,我们可以搜索:
- 模块的类型: 例如,从预定义的模块库中选择合适的模块类型。
- 模块内部的结构: 例如,搜索模块内部卷积层的数量、卷积核的大小、激活函数的类型等。
- 模块的堆叠方式: 例如,搜索模块的重复次数、模块之间的连接方式等。
设计策略:
- 预定义模块库: 构建一个包含多种模块类型的模块库,例如 {ResNet Block, Inception Block, MobileNet Block}。
- 模块组合: 允许将不同的模块进行组合,例如,在网络中同时使用 ResNet Block 和 Inception Block。
- 模块结构搜索: 使用 NAS 算法搜索模块内部的结构,例如,搜索模块内部卷积层的数量、卷积核的大小、激活函数的类型等。
- 模块连接方式搜索: 搜索模块之间的连接方式,例如,顺序连接、跳跃连接、密集连接等。
示例:
- ResNet: 由重复堆叠的残差块组成,不同深度的 ResNet (例如 ResNet50, ResNet101) 只是残差块的重复次数不同。
- DenseNet: 由重复堆叠的密集块 (Dense Block) 组成,每个密集块中的每一层都与该块中的所有后续层相连接。
- NASNet: 通过搜索 NASNet Cell 的结构,然后将搜索到的 Cell 重复堆叠来构建整个网络。
5. 网络拓扑结构 (Network Topology):
网络拓扑结构指的是网络的整体连接方式,它决定了网络中信息流动的路径。传统的神经网络通常采用链式结构,即每一层的输出作为下一层的输入。然而,近年来,研究人员提出了各种更复杂的拓扑结构,例如:
- 树状结构 (Tree-like Structure): 网络可以被组织成一棵树,信息从根节点流向叶节点。
- 图结构 (Graph Structure): 网络可以被表示成一个图,节点表示网络层,边表示层之间的连接。
在宏观搜索空间中,我们可以搜索不同的网络拓扑结构,例如:
- 选择网络的整体拓扑结构 (例如,链式结构、树状结构、图结构)。
- 搜索网络中节点 (层) 的数量和类型。
- 搜索网络中边的连接方式。
设计策略:
- 预定义拓扑结构集合: 定义一个拓扑结构集合,例如 {链式结构, 树状结构, 图结构},NAS 算法需要从中选择合适的拓扑结构。
- 拓扑结构演化: 使用演化算法 (Evolutionary Algorithm) 等方法逐步演化网络的拓扑结构。
- 基于图神经网络的搜索: 使用图神经网络 (Graph Neural Network, GNN) 来表示和搜索网络的拓扑结构。
示例:
- Google's AmoebaNet: 使用演化算法搜索网络的拓扑结构。
- GraphNAS: 使用图神经网络来表示和搜索网络的拓扑结构.
总结:
在设计宏观搜索空间时,我们需要综合考虑以上关键要素,并根据具体的任务和资源限制进行权衡。一个好的宏观搜索空间应该具有足够的表达能力,能够覆盖潜在的优秀架构,同时也要保证搜索效率,避免搜索空间过于庞大和复杂。此外,搜索空间的设计还应该具有一定的结构性和可解释性,便于 NAS 算法进行有效的搜索和优化,并帮助我们理解搜索到的架构。
2.2.3 常见的宏观搜索空间类型
根据宏观搜索空间的具体设计方式,我们可以将其划分为以下几种常见的类型:
-
链式结构搜索空间 (Chain-structured Search Space):
这是最简单也是最常见的宏观搜索空间类型。在这种搜索空间中,网络由一系列顺序连接的层组成,每一层的输出作为下一层的输入。NAS 算法需要搜索每一层的类型、参数以及网络的深度。
- 优点: 简单易于实现,搜索效率高。
- 缺点: 表达能力有限,无法表达复杂的连接模式。
示例:
- NASNet: 虽然 NASNet 搜索的是 Cell 的结构,但是最终的网络是由重复堆叠的 Cell 组成的链式结构。
- ENAS (Efficient Neural Architecture Search): ENAS 通过共享参数的 RNN 控制器来搜索链式结构的神经网络。
-
多分支结构搜索空间 (Multi-branch Structured Search Space):
这种搜索空间允许网络具有多个并行分支,每个分支可以具有不同的结构和参数。这种结构可以有效地提取不同尺度的特征,并提高网络的表达能力。
- 优点: 表达能力更强,可以表达更复杂的连接模式。
- 缺点: 搜索空间更大,搜索难度更高。
示例:
- Inception Network: Inception 网络是典型的多分支结构,它使用多个并行分支来提取不同尺度的特征。
- Xception: Xception 是 Inception 的一种变体,它使用深度可分离卷积来降低计算成本。
-
基于Cell的搜索空间 (Cell-based Search Space):
这种搜索空间将网络架构分解为多个可重复堆叠的 Cell (或 Block),NAS 算法只需要搜索 Cell 的结构,然后将搜索到的 Cell 重复堆叠来构建整个网络。这种方法可以有效地降低搜索空间的复杂性,并提高搜索效率。
- 优点: 搜索空间小,搜索效率高,可以迁移到不同的数据集和任务。
- 缺点: 表达能力可能受到 Cell 结构的限制。
示例:
- NASNet: NASNet 搜索的是 NASNet Cell 的结构,然后将搜索到的 Cell 重复堆叠来构建整个网络。
- DARTS (Differentiable Architecture Search): DARTS 搜索的是 Cell 内部的操作,然后将搜索到的 Cell 重复堆叠来构建整个网络。
- ProxylessNAS: ProxylessNAS 搜索的是 Cell 内部的连接方式,然后将搜索到的 Cell 重复堆叠来构建整个网络。
-
基于模块的搜索空间 (Module-based Search Space):
类似于 Cell-based Search Space,这种搜索空间也是将网络架构分解为多个可重复堆叠的模块,但是模块的粒度可能比 Cell 更大,例如,一个模块可以包含多个 Cell。
- 优点: 搜索空间适中,可以表达更复杂的架构。
- 缺点: 设计模块需要一定的先验知识。
示例:
- MetaQNN: MetaQNN 使用强化学习来搜索网络架构,它将网络架构分解为多个模块,例如卷积层、池化层、全连接层等。
-
基于图的搜索空间 (Graph-based Search Space):
这种搜索空间将网络架构表示成一个图,节点表示网络层,边表示层之间的连接。NAS 算法需要搜索图的结构,例如,节点 (层) 的数量和类型,以及边的连接方式。
- 优点: 表达能力最强,可以表达任意拓扑结构的神经网络。
- 缺点: 搜索空间最大,搜索难度最高。
示例:
- GraphNAS: GraphNAS 使用图神经网络来表示和搜索网络的拓扑结构.
- AmoebaNet: 虽然使用演化算法,但最终演化出的网络结构可以看作是一种图结构。
2.2.4 宏观搜索空间面临的挑战与未来发展趋势
尽管宏观搜索空间在 NAS 中扮演着至关重要的角色,但它仍然面临着一些挑战:
- 搜索空间过大: 宏观搜索空间通常非常庞大,这使得 NAS 算法难以高效地进行搜索。如何降低搜索空间的复杂性,提高搜索效率,仍然是一个重要的研究方向。
- 表达能力与搜索效率的平衡: 一个好的宏观搜索空间应该具有足够的表达能力,能够覆盖潜在的优秀架构,同时也要保证搜索效率,避免搜索空间过于庞大和复杂。如何在表达能力和搜索效率之间取得平衡,是一个需要仔细考虑的问题。
- 先验知识的利用: 宏观搜索空间的设计通常需要一定的先验知识,例如,关于网络深度、宽度、连接模式等方面的经验。如何有效地利用先验知识来指导搜索空间的设计,是一个值得研究的方向。
- 可解释性与可理解性: NAS 算法搜索到的架构通常比较复杂,难以理解和分析。如何提高搜索到的架构的可解释性和可理解性,帮助我们从中学习到有用的架构设计知识,是一个重要的研究方向。
未来发展趋势:
- 自动化搜索空间设计: 目前,宏观搜索空间的设计通常需要人工参与,如何实现搜索空间的自动化设计,减少人工干预,是一个重要的发展趋势。
- 知识迁移与泛化: 如何将搜索到的架构或者搜索经验迁移到不同的数据集和任务,提高 NAS 算法的泛化能力,是一个重要的研究方向。
- 结合人类知识的 NAS: 将人类的架构设计经验与 NAS 算法相结合,可以有效地提高搜索效率和架构性能。
- 可解释的 NAS: 开发可解释的 NAS 算法,帮助我们理解 NAS 算法是如何搜索到最佳架构的,以及这些架构为什么能够取得好的性能。
总而言之,宏观搜索空间是 NAS 的核心要素之一,它决定了 NAS 算法能够探索和发现的潜在神经网络架构的范围。通过深入理解宏观搜索空间的设计方法、常见类型以及面临的挑战,我们可以更好地利用 NAS 算法来自动设计高性能的神经网络架构,并推动深度学习技术的发展。