第二章:NAS 的核心要素:搜索空间 (Search Space)


文档摘要

第二章:NAS 的核心要素:搜索空间 (Search Space) 第二章:NAS 的核心要素:搜索空间 (Search Space) 神经网络架构搜索(Neural Architecture Search, NAS)作为自动化机器学习(AutoML)领域的重要分支,近年来受到了学术界和工业界的广泛关注。其核心目标是自动设计高性能的神经网络架构,以取代传统上依赖专家经验和手动试错的繁琐过程。在 NAS 的三大核心要素——搜索空间 (Search Space)、搜索策略 (Search Strategy) 和 性能评估 (Performance Estimation Strategy) 中,搜索空间无疑是基石和起点。它定义了 NAS 算法可以探索的架构范围,直接决定了搜索的上限和效率。

第二章:NAS 的核心要素:搜索空间 (Search Space)

第二章:NAS 的核心要素:搜索空间 (Search Space)

神经网络架构搜索(Neural Architecture Search, NAS)作为自动化机器学习(AutoML)领域的重要分支,近年来受到了学术界和工业界的广泛关注。其核心目标是自动设计高性能的神经网络架构,以取代传统上依赖专家经验和手动试错的繁琐过程。在 NAS 的三大核心要素——搜索空间 (Search Space)搜索策略 (Search Strategy)性能评估 (Performance Estimation Strategy) 中,搜索空间无疑是基石和起点。它定义了 NAS 算法可以探索的架构范围,直接决定了搜索的上限效率。一个精心设计的搜索空间,能够引导 NAS 算法找到更优异的架构,并显著提升搜索效率;反之,一个 poorly-designed 的搜索空间,则可能限制搜索的潜力,甚至导致搜索失败。

本章节将深入探讨 NAS 的核心要素——搜索空间。我们将从搜索空间的定义和重要性出发,详细剖析宏观搜索空间和微观搜索空间的设计理念与方法,并深入探讨搜索空间的编码方式。希望通过本章的阐述,读者能够全面理解搜索空间在 NAS 中的关键作用,并掌握设计有效搜索空间的基本原则和方法。

2.1 搜索空间的定义与重要性

2.1.1 搜索空间的定义

在 NAS 的语境下,搜索空间 (Search Space) 可以被正式定义为:所有可以被 NAS 算法探索和评估的神经网络架构的集合。更通俗地说,搜索空间就像一个巨大的“架构池”,其中包含了所有潜在的、可以被 NAS 算法发现的神经网络结构。这个“架构池”的大小、结构和性质,直接决定了 NAS 算法能够找到什么样的神经网络架构。

从数学的角度来看,搜索空间通常可以被视为一个离散的、高维的结构空间。空间中的每一个点都代表一个独特的神经网络架构。NAS 的目标就是在这一空间中,找到一个或一组最优的点(即最优的神经网络架构),使其在特定任务上(例如图像分类、目标检测、自然语言处理等)能够达到最佳的性能指标(例如准确率、效率等)。

为了更清晰地理解搜索空间的概念,我们可以将其与传统的神经网络设计方法进行对比。在手动设计神经网络时,架构师通常会基于经验和直觉,在有限的范围内尝试不同的网络结构。而 NAS 的搜索空间则试图形式化扩展这一过程,将架构设计的可能性进行系统化地表达,并允许算法在更广阔的空间内进行探索。

2.1.2 搜索空间的重要性

搜索空间在 NAS 中占据着至关重要的地位,其重要性可以体现在以下几个方面:

  1. 决定搜索的上限 (Upper Bound of Search): 搜索空间定义了 NAS 算法可以探索的架构范围。如果最优的架构根本不在搜索空间内,那么无论采用多么先进的搜索策略和评估方法,NAS 算法都无法找到最优解。因此,搜索空间的表达能力 (Expressiveness) 至关重要。一个表达能力强的搜索空间,能够包含更多种类的神经网络架构,从而提高找到最优架构的可能性。
  2. 影响搜索的效率 (Efficiency of Search): 搜索空间的大小和结构,直接影响 NAS 算法的搜索效率。如果搜索空间过于庞大和复杂,NAS 算法可能需要花费巨大的计算资源和时间才能完成搜索过程。反之,一个设计合理的搜索空间,可以有效地引导搜索方向,减少无效的探索,从而提高搜索效率。此外,搜索空间的可搜索性 (Searchability) 也非常重要。一个易于搜索的搜索空间,能够让 NAS 算法更快速地找到优秀的架构。
  3. 引入先验知识 (Incorporation of Prior Knowledge): 搜索空间的设计过程,实际上也是将人类专家关于神经网络架构设计的先验知识融入到 NAS 算法中的过程。例如,通过预定义网络的基本模块(如卷积层、池化层、激活函数等)和连接方式,可以有效地约束搜索空间,使其更符合神经网络设计的通用原则,从而提高搜索的有效性和可靠性。这种先验知识的融入,有助于 NAS 算法在合理的范围内进行探索,避免盲目地搜索无效的架构。
  4. 影响泛化能力 (Generalization Ability): 搜索空间的结构和多样性,也会影响 NAS 算法找到的架构的泛化能力。一个设计良好的搜索空间,应该能够覆盖足够多样的架构,从而使 NAS 算法能够找到在不同任务和数据集上都具有良好泛化性能的架构。反之,如果搜索空间过于狭窄或单一,NAS 算法可能只能找到在特定任务上表现良好,但在其他任务上表现不佳的过拟合架构。

综上所述,搜索空间是 NAS 的核心要素,其设计质量直接关系到 NAS 算法的成败。一个优秀的搜索空间应该在表达能力可搜索性先验知识融入泛化能力等方面进行综合考虑和权衡,以确保 NAS 算法能够高效、有效地找到高性能的神经网络架构。

2.2 宏观搜索空间 (Macro Search Space)

宏观搜索空间 (Macro Search Space) 主要关注网络层面的结构,即如何组织和连接不同的网络层或模块,以构建一个完整的神经网络架构。在宏观搜索空间中,NAS 算法需要决定网络的层数每层的类型层与层之间的连接方式等宏观结构信息。宏观搜索空间的设计,通常会受到经典神经网络架构(如 AlexNet, VGG, ResNet, Inception 等)的启发,并试图在这些经典架构的基础上进行扩展和创新。

2.2.1 宏观搜索空间的设计维度

宏观搜索空间的设计通常涉及以下几个关键维度:

  1. 网络深度 (Network Depth): 即网络的层数。网络深度是影响神经网络性能的重要因素之一。在宏观搜索空间中,NAS 算法需要决定网络的总层数,以及不同类型的层在网络中的分布。例如,可以搜索网络的总层数在 10 层到 50 层之间,或者搜索卷积层、池化层和全连接层的数量比例。
  2. 网络宽度 (Network Width): 即每层网络的通道数或神经元数量。网络宽度决定了网络的容量和参数量。在宏观搜索空间中,NAS 算法可以搜索不同层的网络宽度,例如,可以搜索卷积层的输出通道数在 [16, 32, 64, 128, 256] 中选择,或者搜索全连接层的神经元数量在 [128, 256, 512, 1024] 中选择。
  3. 层类型 (Layer Type): 即网络中使用的层类型。常见的层类型包括卷积层 (Convolutional Layer)、池化层 (Pooling Layer)、循环层 (Recurrent Layer)、注意力层 (Attention Layer)、全连接层 (Fully Connected Layer) 等。在宏观搜索空间中,NAS 算法需要决定网络中使用的层类型组合,以及每种层类型的具体参数配置。例如,可以搜索网络中使用哪些类型的卷积层(普通卷积、深度可分离卷积、空洞卷积等),或者搜索是否在网络中使用注意力机制。
  4. 连接方式 (Connectivity Pattern): 即网络层与层之间的连接方式。传统的神经网络通常采用顺序连接 (Sequential Connection) 方式,即每一层的输出作为下一层的输入。而近年来,研究人员提出了更复杂的连接方式,例如跳跃连接 (Skip Connection)密集连接 (Dense Connection)多分支连接 (Multi-branch Connection) 等。在宏观搜索空间中,NAS 算法可以搜索网络层之间的连接方式,例如,可以搜索是否在网络中使用 ResNet 的跳跃连接结构,或者 Inception 的多分支结构。

2.2.2 宏观搜索空间的典型结构

根据网络连接方式的不同,宏观搜索空间可以分为以下几种典型的结构:

  1. 链式结构 (Chain-like Structure): 这是最常见的宏观搜索空间结构,其网络由一系列顺序连接的层组成,数据从输入层逐层传递到输出层。例如,早期的 NAS 工作,如 NASNetAmoebaNet-Large,就采用了链式结构的宏观搜索空间。在链式结构中,NAS 算法主要搜索每一层的类型和参数,以及网络的总层数。

    示例:一个简单的链式结构网络

  2. 多分支结构 (Multi-branch Structure): 受 Inception 网络的启发,多分支结构允许网络在同一层级上并行执行多个不同的操作,并将结果进行聚合。这种结构可以增加网络的多样性和表达能力。例如,Inception-v4EfficientNet 等网络都采用了多分支结构。在宏观搜索空间中,NAS 算法可以搜索每个分支的结构和操作,以及分支之间的聚合方式。

    示例:一个简单的多分支结构网络

  3. 带跳跃连接的结构 (Structure with Skip Connections): 受 ResNet 和 DenseNet 网络的启发,带跳跃连接的结构允许信息跨层传递,缓解梯度消失问题,并促进特征重用。跳跃连接可以是短跳跃连接(连接相邻层)或长跳跃连接(连接非相邻层)。例如,ResNetDenseNet 等网络都广泛使用了跳跃连接。在宏观搜索空间中,NAS 算法可以搜索跳跃连接的位置和类型,以及是否使用跳跃连接。

    示例:一个简单的带跳跃连接的结构网络

  4. 有向无环图结构 (Directed Acyclic Graph, DAG Structure): DAG 结构是一种更通用的宏观搜索空间结构,它可以表示更复杂的网络连接模式,包括链式结构、多分支结构和跳跃连接结构等。在 DAG 结构中,网络被表示为一个有向无环图,节点表示网络层或模块,边表示数据流方向。例如,DARTSGDAS 等 NAS 方法就采用了 DAG 结构的宏观搜索空间。在 DAG 结构中,NAS 算法需要搜索 DAG 的拓扑结构,以及每个节点(层或模块)的操作。

    示例:一个简单的 DAG 结构网络

2.2.3 宏观搜索空间的优缺点

优点:

  • 灵活性高: 宏观搜索空间可以探索各种不同类型的网络结构,具有较高的灵活性和表达能力。
  • 易于理解: 宏观搜索空间的设计通常基于对神经网络架构的直观理解,易于理解和解释。
  • 可扩展性强: 宏观搜索空间可以通过增加新的层类型、连接方式等方式进行扩展,以适应不同的任务和需求。

缺点:

  • 搜索空间庞大: 宏观搜索空间通常非常庞大,导致搜索效率较低。
  • 搜索难度大: 由于宏观搜索空间的复杂性,NAS 算法难以有效地搜索到最优架构。
  • 需要人工干预: 宏观搜索空间的设计通常需要人工干预,例如,需要预定义网络的基本模块和连接方式。

2.3 微观搜索空间 (Micro Search Space)

微观搜索空间 (Micro Search Space) 关注的是细胞 (Cell) 或模块 (Module) 内部的结构,而不是整个网络的宏观架构。在这种范式下,NAS 算法不再直接搜索整个网络的结构,而是搜索一种高性能的“细胞”或“模块”的结构,然后通过堆叠这些“细胞”或“模块”来构建整个网络。微观搜索空间的设计灵感来源于模块化设计的思想,即将复杂的系统分解为一系列独立的、可重用的模块,通过组合这些模块来构建不同的系统。

2.3.1 微观搜索空间的设计理念

微观搜索空间的设计理念可以概括为以下几点:

  1. 模块化设计: 将神经网络架构分解为一系列独立的、可重用的“细胞”或“模块”。
  2. 结构复用: 通过堆叠相同的“细胞”或“模块”来构建整个网络,减少了搜索空间的复杂度。
  3. 局部优化: NAS 算法只需要搜索单个“细胞”或“模块”的结构,降低了搜索难度。

2.3.2 微观搜索空间的设计维度

微观搜索空间的设计通常涉及以下几个关键维度:

  1. 细胞类型 (Cell Type): 微观搜索空间通常包含两种类型的细胞:普通细胞 (Normal Cell)缩减细胞 (Reduction Cell)。普通细胞用于保持特征图的大小不变,而缩减细胞用于减小特征图的大小(通常通过步长为 2 的卷积或池化操作实现)。在微观搜索空间中,NAS 算法需要决定网络中使用哪些类型的细胞,以及每种细胞在网络中的分布。

  2. 节点数量 (Number of Nodes): 每个细胞内部包含若干个节点,每个节点代表一个中间特征图。在微观搜索空间中,NAS 算法需要决定每个细胞内部的节点数量。

  3. 操作类型 (Operation Type): 每个节点上的操作可以是不同的神经网络操作,例如卷积、池化、激活函数等。在微观搜索空间中,NAS 算法需要决定每个节点上执行的操作类型。常见的操作类型包括:

    • 卷积操作 (Convolutional Operations): 例如 3x3 卷积、5x5 卷积、深度可分离卷积等。
    • 池化操作 (Pooling Operations): 例如最大池化、平均池化等。
    • 激活函数 (Activation Functions): 例如 ReLU、Sigmoid、Tanh 等。
    • 零操作 (Zero Operation): 表示该节点不进行任何操作,直接将输入传递到输出。
    • 恒等映射 (Identity Mapping): 表示该节点的输出等于输入。
  4. 连接方式 (Connectivity Pattern): 细胞内部节点之间的连接方式决定了信息的流动路径。在微观搜索空间中,NAS 算法需要决定节点之间的连接方式。常见的连接方式包括:

    • 顺序连接 (Sequential Connection): 节点之间按照顺序连接。
    • 跳跃连接 (Skip Connection): 节点之间存在跳跃连接,允许信息跨节点传递。
    • 加权连接 (Weighted Connection): 节点之间的连接具有权重,权重的大小决定了信息传递的强度。

2.3.3 微观搜索空间的典型结构

以下是一些典型的微观搜索空间结构:

  1. NASNet Cell: NASNet 是最早提出微观搜索空间概念的 NAS 方法之一。NASNet Cell 包含两种类型的细胞:普通细胞和缩减细胞。每个细胞内部包含 B 个块(Block),每个块由两个输入节点和一个输出节点组成。NAS 算法需要搜索每个块的两个输入节点的操作类型和连接方式。

    示例:NASNet Cell 的一个 Block

  2. DARTS Cell: DARTS (Differentiable Architecture Search) 是一种基于梯度优化的 NAS 方法。DARTS Cell 也是包含两种类型的细胞:普通细胞和缩减细胞。每个细胞内部包含 N 个节点,每个节点之间都存在连接。NAS 算法需要搜索每条连接上的操作类型,并使用 softmax 函数对不同的操作类型进行加权,从而实现可微分的架构搜索。

    示例:DARTS Cell 的连接结构

  3. PNASNet Cell: PNASNet (Progressive Neural Architecture Search) 是一种基于序列模型的 NAS 方法。PNASNet Cell 也是包含两种类型的细胞:普通细胞和缩减细胞。每个细胞内部包含 N 个节点,NAS 算法通过序列模型逐步搜索每个节点的输入节点和操作类型。

2.3.4 微观搜索空间的优缺点

优点:

  • 搜索空间小: 微观搜索空间通常比宏观搜索空间小得多,从而提高了搜索效率。
  • 易于优化: 由于搜索空间较小,NAS 算法更容易找到最优的细胞结构。
  • 可迁移性强: 搜索到的细胞结构可以被迁移到不同的任务和数据集上。

缺点:

  • 灵活性有限: 微观搜索空间的灵活性不如宏观搜索空间,难以探索全新的网络结构。
  • 需要人工干预: 微观搜索空间的设计通常需要人工干预,例如,需要预定义细胞的类型和节点数量。
  • 对宏观结构的依赖: 微观搜索空间的性能受到宏观结构的影响,需要与合适的宏观结构相结合才能发挥最佳效果。

2.4 搜索空间的编码方式

搜索空间的编码方式是指如何将神经网络架构表示为计算机可以理解和处理的形式。一个好的编码方式应该能够有效地表达搜索空间中的所有架构,并且能够方便 NAS 算法进行搜索和优化。常见的搜索空间编码方式包括:

2.4.1 基于字符串的编码方式 (String-based Encoding)

基于字符串的编码方式将神经网络架构表示为一个字符串,字符串中的每个字符或子串代表网络的一个组件或属性。例如,可以使用字符串来表示网络的层类型、连接方式、参数配置等。

优点:

  • 简单直观: 基于字符串的编码方式易于理解和实现。
  • 灵活性高: 可以通过定义不同的字符串格式来表达各种不同类型的网络结构。

缺点:

  • 难以优化: 基于字符串的编码方式通常是离散的,难以使用基于梯度的优化方法进行优化。
  • 表达能力有限: 某些复杂的网络结构难以用字符串有效地表达。

示例:

可以使用一个简单的字符串来表示一个卷积神经网络的结构:

"Conv-32-ReLU-MaxPool-Conv-64-ReLU-MaxPool-FC-128-ReLU-FC-10"

其中,Conv-32-ReLU-MaxPool 表示一个包含 32 个通道的卷积层、ReLU 激活函数和最大池化层的模块,FC-128-ReLU 表示一个包含 128 个神经元的全连接层和 ReLU 激活函数,FC-10 表示一个包含 10 个神经元的全连接层(用于 10 分类任务)。

2.4.2 基于图的编码方式 (Graph-based Encoding)

基于图的编码方式将神经网络架构表示为一个图,图中的节点代表网络层或模块,边代表数据流方向。图的拓扑结构和节点属性描述了网络的结构和功能。

优点:

  • 表达能力强: 基于图的编码方式可以有效地表达各种复杂的网络结构,包括链式结构、多分支结构和跳跃连接结构等。
  • 易于操作: 可以使用图论算法对网络结构进行分析和操作。

缺点:

  • 实现复杂: 基于图的编码方式的实现相对复杂。
  • 搜索空间庞大: 图的搜索空间通常非常庞大,导致搜索效率较低。

示例:

可以使用一个有向无环图 (DAG) 来表示一个神经网络的结构。图中的每个节点代表一个网络层,边代表数据流方向。每个节点可以具有不同的属性,例如层类型、参数配置等。

示例:基于图的编码方式表示一个简单的卷积神经网络

2.4.3 基于矩阵的编码方式 (Matrix-based Encoding)

基于矩阵的编码方式将神经网络架构表示为一个矩阵,矩阵中的每个元素代表网络层之间的连接关系或操作类型。例如,可以使用邻接矩阵来表示网络层之间的连接关系,使用操作矩阵来表示每个节点上的操作类型。

优点:

  • 数学形式简洁: 基于矩阵的编码方式可以用简洁的数学形式来表示网络结构。
  • 易于优化: 可以使用矩阵运算对网络结构进行优化。

缺点:

  • 表达能力有限: 某些复杂的网络结构难以用矩阵有效地表达。
  • 可解释性差: 基于矩阵的编码方式的可解释性较差。

示例:

可以使用一个邻接矩阵来表示网络层之间的连接关系。矩阵的行和列分别代表网络层,矩阵中的元素表示层之间的连接强度。例如,如果矩阵中的元素 (i, j) 的值为 1,则表示第 i 层和第 j 层之间存在连接;如果值为 0,则表示不存在连接。

2.4.4 基于领域特定语言的编码方式 (Domain-Specific Language - DSL based Encoding)

基于领域特定语言 (DSL) 的编码方式使用专门为神经网络架构搜索设计的编程语言来描述网络结构。DSL 允许用户使用简洁、易懂的语法来定义网络层、连接方式和参数配置。

优点:

  • 表达能力强: DSL 可以有效地表达各种复杂的网络结构。
  • 可读性高: DSL 的语法通常简洁易懂,具有良好的可读性。
  • 易于扩展: DSL 可以通过增加新的语法规则来扩展,以支持新的网络结构和操作。

缺点:

  • 需要学习成本: 需要学习 DSL 的语法和语义。
  • 实现复杂: DSL 的实现相对复杂,需要设计编译器或解释器。

示例:

可以使用一个简单的 DSL 来定义一个卷积神经网络的结构:

network = Sequential([ Conv2D(32, kernel_size=3, activation='relu'), MaxPool2D(pool_size=2), Conv2D(64, kernel_size=3, activation='relu'), MaxPool2D(pool_size=2), Flatten(), Dense(128, activation='relu'), Dense(10, activation='softmax') ])

其中,Sequential 表示一个顺序连接的网络,Conv2D 表示一个卷积层,MaxPool2D 表示一个最大池化层,Flatten 表示一个展平层,Dense 表示一个全连接层。

2.4.5 编码方式的选择

选择合适的搜索空间编码方式需要综合考虑以下几个因素:

  • 搜索空间的表达能力: 编码方式应该能够有效地表达搜索空间中的所有架构。
  • NAS 算法的优化方法: 编码方式应该能够方便 NAS 算法进行搜索和优化。
  • 实现复杂度: 编码方式的实现应该尽可能简单。
  • 可读性和可解释性: 编码方式应该具有良好的可读性和可解释性。

总的来说,没有一种编码方式是完美的,需要根据具体的任务和需求选择合适的编码方式。

总结:

本章深入探讨了 NAS 的核心要素之一——搜索空间。我们首先定义了搜索空间的概念和重要性,然后详细介绍了宏观搜索空间和微观搜索空间的设计理念与方法,最后深入探讨了搜索空间的编码方式。希望通过本章的阐述,读者能够全面理解搜索空间在 NAS 中的关键作用,并掌握设计有效搜索空间的基本原则和方法。 在接下来的章节中,我们将继续探讨 NAS 的另外两个核心要素——搜索策略和性能评估策略。


发布者: 作者: 转发
评论区 (0)
U