论文地址:https://arxiv.org/abs/1808.05377v3
论文主要是介绍了Neural Architecture Search(NAS)近几年的发展,在介绍NAS之前我想抛出一个问题:为什么要研究AutoML(NAS可以看做AutoML的一个子领域)?
回到论文,为什么要进行NAS呢?因为专家对网络架构的设计是一个耗时(time-consuming )且易错(error-prone )的过程。
1. NAS method
NAS method 有三个维度:search space, search strategy, and performance estimation strategy。
先看一个抽象的示意图
再来具体看看每个维度:
(1)Search Space:原则上能够表达的所有架构;
(2)Search Strategy:指定一套规则去设计架构,It encompasses the classical exploration-exploitation trade-off。
(3)Performance Estimation Strategy:指定一个性能指标去评判设计的架构的性能。
个人感觉跟强化学习有点类似:
强化学习的目的是学习一个策略(Policy),这个策略使得奖励(Reward)最大化。策略是一个从环境状态到动作选择的映射,即给定一个环境应该采取什么样的动作,比如给一个棋盘局面判断下一步该怎么走。再将动作与环境交互生成轨迹(state,reward),然后利用轨迹改进策略以最大化奖励。
2. Search Space
你可能会问网络架构如何使用一个通式表达呢?
左边是一个网络结构的表达方式(A=Ln∘Ln−1∘...∘L2∘L1 ),这种表达方式称为 chain-structured neural networks。显然,这是简单的单分支结构。右边是一个 multi-branch networks 结构的表达方式,显然这种方式可以表达skip connections等复杂的网络结构,比如ResNet、DenseNet都可以用这种方式表达。(注:其实任意一个复杂的CNN网络结构都可以看成一个DAG,因此基本都是可以表达出来的。)
那么 search space 如何用数学方式表达出来呢?只需要三个参数:
- layer的数量n(即最大层数);
- 每层执行的操作类型,比如池化、卷积等;
- 与2中操作相关的超参数,比如滤波器数量、卷积核大小、卷积步长、卷积步长等。
但是直接搜索一个架构是不是过于复杂了?能不能先确定好每个 block 或者 cell 的结构,然后再堆叠 cell 形成最终的结构。具体论文请参见:Progressive NAS
既然采用 cell 的方式去搜索,那么堆叠多少个并且如何组织成宏观结构呢(macro-architecture)?简言之就是要同时优化 micro-architecture 和 macro-architecture。具体论文请参见:Hierarchical Representations for Efficient Architecture Search