简述:
一般而言,神经网络检索分为三个部分,搜索空间,搜索算法,以及精度估计[1],搜索策略从搜索空间中采样,产生网络,然后进度精度估计算法当中,进行精度估计,得到的结果返回,更新搜索策略,然后依次循环。
所谓的 one-shot NAS,基于搜索空间构建了一个超级网络,并使用 one-shot 训练来生成性能良好的子模型。
NAS上现在的几种优化方式:
-
强化学习
-
进化学习
-
MCTS
-
SMBO
-
Bayesian Optimization
-
基于梯度
参考文章有https://cloud.tencent.com/developer/article/1470080
NAS的空间搜索有很多,如以下的几种方式。
- ENAS
- DARTS
- P-DARTS
- CDARTS
- SPOS
- ProxylessNAS
- Network Morphism
ENAS
谷歌提出的Efficient Neural Architecture Search(ENAS),是对NAS的改进版。ENAS包括一个基于RNN的控制端网络结构和一个由控制端的组合方式生成的真实网络结构。通过真实网络结构得到RNN控制端的反馈。训练中固定RNN控制端,多次迭代真实子网络,待收敛后,再固定子网络,迭代RNN控制端。
论文中交代了3种DAG图的训练方式。
(1)整个网络训练,网络结构类似VGG性质的直型的斜体样式网络
RNN包含N个节点,4个激活函数(tanh, ReLU,identity, sigmoid),最终一共可以生成4N × N! 种网络结构。每一个节点有4种激活方式,N个节点相互独立,生成4N种激活方式,第一个节点只能和输入进行连接,第二个节点可以和输入和第一个节点2个里面选一个连接,第三个节点可以和输入和第1,2共3个节点里面选一个连接,依次类推,最终产生N!种连接方式。所以最终生成4N × N!种有向图DAG。
在实验中节点数N=12。
(2)整个网络训练,网络结构类似resnet类型的带shortcut连接的网络
该结构只有1个输入,一共包含6种操作(3 × 3 卷积,5 × 5卷积,3 × 3 depthwise-separable卷积,5 × 5depthwise-separable卷积,max pooling,3 × 3 average pooling)。
假设一共L个层,也就是L个节点,最终将产生6L × 2 L(L-1)/2种网络结构。
每个节点相互对立,每一个节点都有6种操作可能,L个节点就会有6L种操作可能。
有L个节点的有向图一共有L(L-1)/2条连接线,每个连接线有连接,不连接,2种可能,整个图就会产生2 L(L-1)/2种连接结构。最终就会产生6L × 2 L(L-1)/2种网络结构。
在实验中节点数L=12。
(3)只有BLOCK模块的训练,网络结构包括2个输入端,带shortcut连接
处理流程如下,h1,h2是两个输入,
假设有B个节点,有2个节点是输入节点,剩下B-2个节点。对于任意一个节点i (3 ≤ i ≤ B),将会产生(5 × (B - 2)!)2种网络结构。
其中,5表示5中操作(identity,3 × 3 depthwise-separable卷积,5 × 5depthwise-separable卷积,3 × 3 max pooling,average pooling)。类似前面的思路,2个输入节点确定,B-2个节点有(B - 2)!种连接方式,这样就会产生5 × (B - 2)!种网络,而该BLOCK的每个节点都包含2个输入,每个输入相互独立,就会产生(5 × (B - 2)!)2种网络结构。也就是说,普通卷积就会产生(5 × (B - 2)!)2种网络结构,而该模块BLOCK还使用了stride=2的卷积,该卷积也会产生(5 × (B - 2)!)2种网络结构。最终就会产生(5 × (B - 2)!)4种网络结构。
实验中节点数B=7。
训练完该BLOCK模块就会基于此生成最终网络结构,
如上图所示,包含了3个BLOCK模块,每个模块包含N个正常卷积和1个stride=2的卷积。
最终产生基于PTB生成的网络:
基于CIFAR-10生成的网络:
总结:
论文通过参数共享,基于BLOCK的训练,大大的加快了搜索模型结构的速度。
DARTS
Liu, Hanxiao, Karen Simonyan, and Yiming Yang. “Darts: Differentiable architecture search.” arXiv preprint arXiv:1806.09055 (2018)
https://arxiv.org/pdf/1806.09055.pdf
- 摘要
很多现存的NAS的搜索空间是离散的,因此本文将搜索空间弱化为一个连续的空间结构,以此可以使用梯度夏下降进行性能优化,DARTS能够在丰富的搜索空间中搜索到一种具有复杂图形拓扑结构的高性能框架即直接把整个搜索空间看成supernet,学习如何sample出一个最优的subnet。这里存在的问题是子操作选择的过程是离散不可导,故DARTS 将单一操作子选择 松弛软化为 softmax 的所有操作子权值叠加。
由上图得:
(1) 定义的一个cell单元,可看成有向无环图,里面4个node,node之间的edge代表可能的操作(如:3x3 sep 卷积),初始化时unknown
(2) 把搜索空间连续松弛化,每个edge看成是所有子操作的混合(softmax权值叠加)
(3) 联合优化,更新子操作混合概率上的edge超参(即架构搜索任务)和 架构无关的网络参数
(4) 优化完毕后,inference 直接取概率最大的子操作即可
故文章的重点就放在了 (2) 和 (3) 部分,分别可以由下面的一条公式和算法描述表示:
Reference
- https://blog.csdn.net/qq_14845119/article/details/84070640
- https://cloud.tencent.com/developer/article/1470080