作者:誓不负如来不负卿 | 来源:互联网 | 2023-06-30 12:34
论文地址:https:arxiv.orgabs1808.05377v3论文主要是介绍了NeuralArchitectureSearch(NAS)近几年的发展,在介绍NAS之前我想抛
论文地址: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 = L n ∘ L n − 1 ∘ . . . ∘ L 2 ∘ L 1 A=L_{n} \circ L_{n-1} \circ ... \circ L_{2} \circ L_{1} 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