最近在看神经结构搜索(Neural Architecture Search, NAS)的内容,借此机会纪录一下学习过程。
表1 NAS方案汇总
表2 方案开源情况
下面就DARTS和P-DARTS做详细介绍。
DARTS
GitHub链接:https://github.com/quark0/darts
与传统的在离散的和不可微的搜索空间上采用进化算法和强化学习不同,DARTS基于结构表示的持续松弛(continuous relaxation),采用梯度下降进行有效的结构搜索。
1. 可微的结构搜索(DIFFERENTIABLE ARCHITECTURE SEARCH)
1.1 搜索空间(SEARCH SPACE)
使用compution cell作为结构的building block。一个cell是由N个节点(node)构成的有向无环图(directed acyclic graph)。每一个节点是一个特征表示(如cnn的特征图)。每条有向边代表一个对节点的操作,如卷积、池化等。每两个节点之间可以有多个操作,即多条有向边。规定每个cell有两个输入节点,一个输出节点。如图1所示,绿色的为输入节点;蓝色的为中间节点;黄色的为输出节点。
图1 cell示意图
每个中间节点的计算过程如公式(1):
零操作(zero operation)是两个节点之间的一种特殊情况,它表示两个节点之间没有连接。学习cell的任务可以转化为学习cell中两两节点之间的操作。
1.2 持续的松弛和优化(CONTINUOUS RELAXATION AND OPTIMIZATION)
使表示候选操作的集合(如卷积、最大值池化和零操作等),每个操作表示为作用在节点上的函数。为了是搜索空间连续,将特殊操作的分类选择松弛(relax)到所有可能操作的softmax函数上,即:
在公式(2)中,每一对节点的操作混合权重被一个向量所参数化,。结构搜索任务因此简化为学习一组连续变量。如图2所示,在搜索过程的最后阶段,用两个节点之间权重最大的操作替换混合操作来得到一个离散的结构,即。
图2
经过松弛之后,目标是联合学习结构和权重。使和分别表示训练集和验证集的损失。结构搜索的目标是:寻找使验证集损失最小的,和使训练集损失最小的网络权重,即。这是一个双层优化问题(bilevel optimization problem),是上层变量(upper-level variable),是下层变量(lower-level variable)。
1.3 近似结构梯度(APPROXIMATE ARCHITECTURE GRADIENT)
由于优化过程的计算复杂度高,因此提出了一个近似方案:
公式(5)和(6)中的思想是:使用去近似。在这里近似之前的方案是:给定一个结构,根据公式(4)在训练集上训练直到收敛,再将带入公式(3)在验证集上更新网络结构。近似之后的方案是:给定一个结构,根据公式(6)在训练集上训练一步得到,将其带入公式(3)。这个迭代的过程如算法1所示。
当动量(momentum)被用于权重优化时,将链式法则应用到近似结构梯度(公式6)中可得:
其中,。公式(7)的第二项可以用有限差分逼近(finite difference approximation)。使得为一个小的标量,。然后:
原文中的这句话不太明白:Evaluating the finite difference requires only two forward passes for the weights and two backward
passes for ,计算复杂度从降低为。
当时,公式(7)中的二阶导数消失。因此,我们将看做一阶近似,看成二阶近似。
1.4 导出离散结构(DERIVING DISCRETE ARCHITECTURES)
为了形成离散体系结构中的每个节点,我们保留了从所有先前节点收集的所有非零候选操作中(来自不同节点)最强的前k个操作。操作的强度定义为:。为了和其它工作进行比较,在卷积cell中取;在循环cell中取。将零操作剔除的原因有两个,第一个是为了公平的和其它方法比较,需要每个节点恰好有个非零的引入边。第二个是零操作的强度是不确定的,因为增加零操作的logits只会影响结果节点表示的规模,并不影响最终的分类结果(由于批量归一化的存在)。
2. 实验和结果(EXPERIMENTS AND RESULTS)
# 在这里我们主要关注图片分类(CNN),NLP(RNN)部分可自行参考原论文。
在CIFAR-10上的实验包括两个部分:结构搜索和结构评估。在第一个阶段,使用DARTS搜索cell的结构,根据在验证集的性能决定最好的cell。在第二个阶段,使用cell构建更大的结构(larger architectures),在测试集上从零开始训练这个结构,并报告它的性能。最后,通过在ImageNet上的评估,调查在CIFAR-10上学习到的cell的迁移性能。
2.1 结构搜索(ARCHITECTURE SEARCH)
中包含的操作有:3x3和5x5的分离卷积(separable convolution)、3x3和5x5的扩张卷积(dilated separable convolutions)、3x3的最大值池化、3x3的均值池化和零操作。所有的操作,并对卷积的特征图进行填充,保证其空间分辨率。每个卷积操作的内部顺序是ReLU-Conv-BN,每个分离卷积总是运用两次。
每个cell包含个节点,其中输出节点定义为所有中间节点(不包括输入节点)的深度连接。更大的结构的网络由多个cell堆叠在一起。第个cell的第一个、第二个节点分别来自第和 个cell的输出,如果有必要,将插入1x1的卷积。在网络总深度1/3和2/3处的cell为reduction cell,在这个cell中,所有和输入节点相连的操作的。因此结构可编码为,所有normal cell中的相同,所有reduction cell中的相同。
图3
2.2 结构评估(ARCHITECTURE EVALUATION)
为了得到最终评估的结构,使用不同的随机种子(random seeds)运行4次DARTS,在CIFAR-10上训练100个epoch,根据在验证集上的性能,选择最优的cell。
为了评估得到的结构,随机初始化它的权重(将结构搜索过程中得到的权重抛弃),从零开始训练,报告它在测试集上的性能。这个测试集是在结构搜索阶段没有用过的。