论文作者来自阿卜杜拉国王科技大学的在读博士生李国豪,本次分享的是kaust与intel isl在 cvpr 2020 的工作:sgas,一种基于贪心思想的cnn/gcn网络结构搜索算法。
本工作通过贪心(greedy)的搜索方式减轻了nas中模型排名在搜索和最后评估不一致的问题。是一种更优更快的网络结构搜索算法,并同时支持cnn和gcn的搜索。代码已开源,想在图像,点云,生物图数据上做网络结构搜索的同学都可以试一试。
相关工作
网络结构搜索(neuralarchitecture search, 简称nas) 是一种神经网络结构自动化设计的技术。nas基于相应算法在特定的样本集内自动设计出高性能的网络结构。这些自动搜索出的网络结构在某些任务上已经媲美或超过了人类专家手工设计的网络结构。
早期nas的算法是基于强化学习(zoph et al.[1])或进化算法(real et al.[2])。这些算法计算成本高昂,阻碍了其广泛应用。近来,liu et al.[3]提出了一种高效的可微分的网络结构搜索算法:可微分网络结构搜索(differentiable architecture search, 简称darts)。darts的提出使得网络结构搜索在单卡一天内完成搜索。后续许多工作都基于darts基础上进行改进,比如snas/fbnet/proxylessnas/p-darts/gdas/mdenas/pc-darts/fairdarts等等。
背景知识:darts
darts采用基于单元(cell)的搜索方法进行网络结构搜索。cell是一个网络子模块,可以自由堆叠多次形成卷积网络。darts通过学习cell的结构,完成对网络的结构搜索。cell是由n个节点的有序序列组成的有向无环图(如图1)。cell中每个节点x^(i)是卷积网络中的特征图,每个有向边(i,j)代表一种对x的运算o(i, j) (如3x3的卷积)。一个cell具有两个输入节点,一个输出节点和多个中间结点。cell的输入节点被定义为前两层的输出。cell的输出是对所有中间节点进行归约运算(例如concatenation)后的结果。每个中间节点由它之前结点经过算子op变换后相加得到:
darts为了实现可微搜索,提出了搜索空间的continuousrelaxation机制,利用softmax函数来学习所有可能候选运算op的权重:
其中,$mathcal(o)$ 表示搜索空间中的候选运算(例如卷积,最大池化,零)等,零表示没有运算(边)。其中一对节点(i,j)之间的运算由向量lpha_{i, j}参数化。运算的结果是每种可能运算结果的加权求和。向量lpha_{i, j}的维度为搜索空间长度|o|。因而,darts将网络结构搜索的任务简化为了学习一组连续变量lpha= {lpha(i, j)},如图1所示。darts在搜索结束阶段,通过argmax得到权重最大的候选运算op当作该边的搜索结果:
图1 darts的单元结构以及网络结构搜索示意图[3]