网络结构搜索(NAS)综述

在过去的很多年深度学习在视觉、语音等方面都已经取得了巨大的成功,其中一个很大的原因就是出现了很多新颖的网络结构——ResNet、MobileNet、ShuffleNet等。随着网络结构越来越复杂,人工设计网络的试错成本和时间成本会难以承受。所以在这里我们提供了automl的一个综述,文章会从三个部分:搜索空间搜索策略性能评估策略来展开介绍:

  • 搜索空间:搜索空间从原则上定义了可能出现的体系结构,再结合适合这个任务的相关属性可以进一步减小搜索空间,简化搜索。但同时也引入了人工偏见,这使得模型可能学不到超出人类目前认知的新颖结构;
  • 搜索策略:搜索策略从细节上展现了如何探索搜索空间。它包含了经典的 exploration-exploitation 策略,一方面它要根据所学到的知识来快速发现表现好的结构,另一方面又要避免由于快速收敛而得到一个次优结构;
  • 性能评估策略:NAS的典型目标是在一个看不见上的数据集上发现一个好的网络结构。性能评估的最简单的策略就是在一个标准数据集上训练然后在数据上验证网络,但是这种方法通常是计算昂贵型的,也会限制可以探索的网络结构的数量。最近的很多研究聚焦于探索如何减小性能评估成本的方法;

一. 搜索空间

搜索空间定义了通过NAS方法原则上可以发现的网络结构的所有可能性,接下来我们讨论下之前工作中的搜索空间。

最简单的搜索空间是 链式结构神经网络 的空间,如下Figure(2)左图所示,链式结构的神经网络A可以写成一个n层的序列,第 i 层的输入为第 i-1 层的输出,同时它的输出又是第 i+1 层的输入, 那么搜索空间可以被参数化为:

  • (i)层数n的数量(也有可能是无边界的,此时就是规定一个最大深度);
  • (ii)每层可以执行的操作类型,比如池化、卷积、或者一些更高级的操作(深度分离卷积、空洞卷积等);
  • (iii)与操作相关的超参数,比如卷积核的数量、卷积核尺寸、步长等,或者全连接层的单元数;这里需要注意的是(iii)中的参数是以(ii)为条件的,因此搜索空间的参数不是固定长度的,而是一个条件空间;

最近的NAS工作(如【1】中)也考虑到了人工设计的一些结构(如跳层连接等),它允许构造复杂、多分枝的网络结构,如Figure 2右图所示。在这种情况下,第i层的输入可以被公式化描述为一个函数 ,所有的前层都可能为本层的输入。这种方式极大的增加了网络的自由度。这种多分枝结构的特殊情况就是(i)链式结构网络 ,(ii)残差网络 ,(iii)DenseNets,前层的输出被拼接 。

受到手工设计网络结构(由相同的结构块堆叠而成)的启发,Google在【1】中提出了搜索块结构,而不是整个网络结构,它搜索两种不同类型的cells:normal cell(输入和输出维度相同)和reduction cell(输出与输入相比特征图大小减半)。最终的网络结构以一种预定义的方式由这些cells堆叠而成,如Figure 3所示,这个搜索空间相比于上面讨论的那个有两个重要优势:

  • 搜索空间的大小大幅度减小,因为cells相比之下很小了。【2】的速度相比【1】快了7倍,同时实现了更好的性能;
  • 通过调整一个模型中不同cells的数量(两种类型),cells可以更容易地迁移到其他数据集上。实际上,【2】中将在 CIFAR-10上 得到的结构迁移到 ImageNet 上仍然取得了最先进的性能;

之后,这种基于cell的搜索方法成功地应用到了很多工作中,然而,当使用基于cell的搜索空间时,就会有一个新的设计选择出现——最终的网络结构中应该有多少cells?同时怎么将不同的cells块连接来获得最终的实际模型?CMU和Google发表的论文《Hierarchical Representations for Efficient Architecture Search》中定义了一种层次化的网络结构:最底层为像卷积和池化等基本组件;中间层为这些组件所构成的无向图;最高层就是由这些图层叠而成的整体网络。基于cell的搜索空间可以看作层次搜索空间的特殊情况(层级数量为3)。

搜索空间的选择很大程度上决定了优化问题的难度,我们注意到许多搜索空间的结构可以写成固定长度的向量:比如在【2】中可以将其写为40维度的搜索空间。相似地,没有边界的搜索空间可以约束一个最大深度。

二. 搜索策略

  1. 基于强化学习(Reinforcement Learning,RL):为了将NAS建模成强化学习问题,我们将网络结构的产生看作一个智能体的动作,动作空间与状态空间等价,智能体的reward是基于采样得到的训练结构在数据上的表现,不同的RL方法区别仅仅在于怎样表征智能体的策略并优化它;在【1】-《Neural architecture search with reinforcement learning》中,Google使采用RNN网络作为控制器来采样生成描述网络结构的字符串,该结构会用于训练并得到评估的准确率作为RL算法的奖励值,然后使用了RL中的策略梯度迭代算法(早期的RL方法,在他们后面的工作中又使用了比较新的更加sample efficient的PPO算法)学习控制器的参数,使之能产生更高准确率的网络结构。具体的来讲,在RNN中,每五个输出(卷积核数量、卷积核高度、卷积核宽度、步长的高,步长的宽)组成一层神经网络,而上一步的输出是下一步的输入,这样保证了RNN是基于前面N-1层所有的参数信息来预测第N层的参数。
  2. 基于进化算法(neuro-evolutionary):另外一种方法就是基于进化算法来优化网络结构,这种方法最早可以追溯到三十年前,Miller等人使用进化算法来优化网络和权重,但随着SGD算法在权重更新上的优秀表现,目前我们仅使用进化算法得到网络结构,而权重更新还是使用SGD算法。首先,我们对网络结构会进行编码,称为DNA。进化过程中会维护网络模型的集合,这些网络模型的fitness通过它们在验证集上的准确率给出。在进化过程中,会随机选取两个模型 ,差的那个直接被干掉(淘汰),好的那个会成为父节点(这种方式为tournament selection)。子节点经过变异(就是在一些预定的网络结构变更操作中随机选取,如添加或者删除一个层,调整某层的超参数,添加跳层连接等)形成子结点。子结点经过训练和验证过放入集合。该作者在后续论文《Regularized Evolution for Image Classifier Architecture Search》中,提出了tournament selection的变体aging evolution,让进化中的选择倾向于比较『年轻』的模型,它可以帮助更好地进行探索。经搜索出的最优网络结构称为AmoebaNet(源码链接)。另外作者对强化学习,进化算法和随机搜索作了比较,发现强化学习和进化算法从准确率上来说表现很好。与强化学习相比进化算法搜索得更快(尤其是早期),且能得到更小的模型。随机搜索在学习到的网络准确率上会次于前面两者,但差距不是那么大(尤其是小数据集上)。
  3. 基于贝叶斯优化的算法(Bayesian Optimization,BO):是超参数优化最流行的方法之一,但由于典型的BO 工具箱是基于高斯过程并聚焦于低维的连续优化问题的,因此尚未被应用到NAS中,Swersky等人为了使用基于GP的BO方法,为架构搜索空间推导了内核函数,但迄今为止还未取得好的表现。相反,一些基于随机森林、层次化方法、进化算法等相结合的方法倒是取得了不错的进展。
  4. 基于梯度的方法(Gradient-based method):这是比较新的一类方法。前面提到的基于强化学习和进化算法的方法本质上都还是在离散空间中搜索,它们将目标函数看作黑盒。我们知道,如果搜索空间连续,目标函数可微,那基于梯度信息可以更有效地搜索。CMU和Google的学者在《DARTS: Differentiable Architecture Search》一文中提出DARTS方法。一个要搜索最优结构的cell,可以看作是包含N个有序结点的有向无环图。结点代表隐式表征(例如特征图),连接结点的的有向边代表算子操作。DARTS方法中最关键的trick是将候选操作使用softmax函数进行混合。这样就将搜索空间变成了连续空间,目标函数成为了可微函数。这样就可以用基于梯度的优化方法找寻最优结构了。搜索结束后,这些混合的操作会被权重最大的操作替代,形成最终的结果网络。另外,中科大和微软发表的论文《Neural Architecture Optimization》中提出另一种基于梯度的方法。它的做法是先将网络结构做嵌入(embedding)到一个连续的空间,这个空间中的每一个点对应一个网络结构。在这个空间上可以定义准确率的预测函数。以它为目标函数进行基于梯度的优化,找到更优网络结构的嵌入表征。优化完成后,再将这个嵌入表征映射回网络结构。这类方法的优点之一就是搜索效率高,对于CIFAR-10和PTB,结合一些像权重共享这样的加速手段,消耗可以少于1 GPU/天。

三. 性能评估策略

上面讨论的搜索策略旨在发现网络结构A并最大化性能度量——测试集合上的精度。为了指导搜索过程,这些策略需要评估给定网络结构A的性能。最简单的方法就是在训练数据上训练得到的模型在验证集上评估。然而,从头训练每一个采样得到的结构会带来很大的计算需求。

  1. 正如上面所说,NAS中最费时的是候选模型的训练,而训练的目的是为了评估该结构的精度。为了得到某个网络模型的精度又不花费太多时间训练,通常会找一些代理测度作为估计量。比如在少量数据集上、或是低分辨率上训练的模型精度,或是训练少量epoch后的模型精度。尽管这会普遍低估精度,但我们要的其实不是其绝对精度估计,而是不同网络间的相对值。换言之,只要能体现不同网络间的优劣关系,是不是绝对精准没啥关系。从另一个角度思考,有没有可能基于模型结构直接预测其准确率呢。论文《Progressive Neural Architecture Search》中的关键点之一是使用了一个代理模型来指导网络结构的搜索。具体来说,这个代理模型是个LSTM模型,输入为网络结构的变长字符串描述,输出预测的验证精度。也正是有个这个利器,使得它里边提出方法即使用看起来并不复杂的启发式搜索,也能达到很好的效果。还有一个思路就是基于学习曲线来预测,这基于一个直观认识,就是我们在训练时基本训练一段时间看各种指标曲线就能大体判断这个模型是否靠谱。学习曲线预测,一种直观的想法就是外插值,如论文《Speeding up Automatic Hyperparameter Optimization of Deep Neural Networks by Extrapolation of Learning Curves》中所讨论的。之后论文《Learning Curve Prediction with Bayesian Neural Networks》中使用Bayesian neural network对学习曲线进行建模与预测。当然实际的预测中,可以不局限于单一的特征,如在论文《Accelerating Neural Architecture Search using Performance Prediction》中,结合了网络结构信息,超参数信息和时序上的验证精度信息来进行预测,从而提高预测准确性。总得来说,表现预测由于其高效性,在NAS中起到越来越关键的作用。很多的前沿方法也采用这类方法,如前面提到的《Neural Architecture Optimization》中就有预测器来基于网络表示预测其准确率。
  2. 在NAS过程中,最为耗时的其实就是对于候选模型的训练。而初版的NAS因为对每个候选模型都是从头训练的,因此会相当耗时。一个直观的想法是有没有办法让训练好的网络尽可能重用。上海交大和伦敦大学学院的论文《Reinforcement Learning for Architecture Search by Network Transformation》中将Network morphisms(网络态射)与神经网络搜索结合。所谓网络态射就是将网络进行变形,同时保持其功能不变。这样带来的好处是变形后可以重用之前训练好的权重,而不用重头开始训练。论文《Simple And Efficient Architecture Search for Convolutional Neural Networks》也使用了网络态射来达到共享权重的目的,只是它了爬山算法为搜索策略。经典的网络态射一般是从小网络开始,然后做『加法』(也有论文讨论让它支持做『减法的』);另一种思路就是从大网络开始做减法,如One-Shot Architecture Search方法,就是在一个大而全的网络上做减法。Google的论文《Efficient Neural Architecture Search via Parameter Sharing》提出了ENAS,其核心思想也是让搜索中所有的子模型重用权重。它将NAS的过程看作是在一张大图中找子图,图中的边代表算子操作。基本方法和《Neural Architecture Search with Reinforcement Learning》中的类似,使用基于LSTM的控制器产生候选网络结构,只是这里是决定大图中的哪些边激活,以及使用什么样的操作。这个LSTM控制器的参数和模型参数交替优化。由于权重共享,使用Nvidia GTX 1080Ti可以在一天内完成搜索,实现了1000x的提速。Auto-Keras就是基于ENAS的思想加以改造实现的。还有一个比较特别的思路,论文《SMASH: One-Shot Model Architecture Search through HyperNetworks》中对于候选模型,使用HyperNet来给出其权重,从而避免重头训练。最近,中科院的论文《You Only Search Once: Single Shot Neural Architecture Search via Direct Sparse Optimization》中提出了DSO-NAS方法,如其名称其特点是只搜一次。它始于一个完全连接的块,然后在操作间引入缩放因子,同时添加稀疏正则化来去除无用的连接,也就是去除不重要的操作,得到最优结构。文中提出可以在一个优化问题中同时学习网络结构和参数。

特此声明:文章中很多内容直接来源于参考文献中的【3】《神经网络架构搜索杂谈》,因为他写的确实很好,我目前仍然无法达到他的很多理解水平,如有侵权,请告知我,我会删除相关段落。

参考文献:

【1】Zoph B, Le Q V. Neural architecture search with reinforcement learning[J]. arXiv preprint arXiv:1611.01578, 2016.

【2】Zoph B, Vasudevan V, Shlens J, et al. Learning transferable architectures for scalable image recognition[J]. arXiv preprint arXiv:1707.07012, 2017.

【3】神经网络架构搜索(Neural Architecture Search)杂谈

炼丹术的终结——神经网络结构搜索之一

炼丹术的终结——神经网络结构搜索之二

张雨石:炼丹术的终结——神经网络结构搜索之三

炼丹术的终结 —— 进化算法搜索网络结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值