Neural Architecture Search: A Survey论文阅读

大城市里の小女人 提交于 2020-02-15 02:48:24

这篇是NAS领域2018年的一篇综述,NAS当时在CV领域中图像分类、目标检测、语义分割三大基础方向已经大放异彩。当时DARTS刚出来一定程度上改变了NAS的发展方向,这篇文章可以说当入门看了解NAS还是不错的。论文主要从三个方面来介绍NAS的发展现状:search space、search strategy、performance estimation strategy。如下图:
在这里插入图片描述

  • 搜索空间:即人为事先制定的网络框架,预先设定好适合当前任务的结构能够有效减小搜索空间、简化搜索。但既然是人为设置也就限制了创新,参考ICLR 2020NAS evaluation is frustratingly hard也可以发现,搜索空间的设置可能已经极大程度上决定最终的网络性能。
  • 搜索策略:定义了如何在搜索空间中寻找最优网络结构,一方面快速搜寻最好的结构另一方面也要避免收敛到局部最优的位置。
  • 性能评估:既要评估在特定数据集上的性能,也要考虑到搜索的代价,自从DARTS出来后很多NAS系统都极大减少搜索耗时、测试时间。

搜索空间

链式结构

最简单的积木式结构,需要定义的有:层数、每个层的运算操作、运算的超参(卷积核大小数量、步长等)。
在这里插入图片描述

重复单元结构

现在一些跨层手段如ResNet和DenseNet这些极大丰富了NAS的搜索空间设置。所以现在用的多的还是cell/block结构下的空间,也就是每一个cell/block的下一个还是一样的设置,这样就可以只去修改一个cell/block的内容以及如何跨层连就可以了。
在这里插入图片描述
DARTS之后基本上cell/block只有normal和reduction这两种模式,前者保留原始维度后者降维。
这样的做法有两个好处:1、减小搜索空间;2、更容易迁移到其他数据集,DARTS就是把CIFAR10迁移到ImageNet上的。
但是这样也有了一些问题比如这些cell要有多少,怎么连接它们,怎么让整个搜索空间和单个cell共同优化而不是优化完一个cell再去考虑怎么设置整个框架,这也很大程度上决定了搜索策略的设置,此外就算是cell优化还有离散、高维(很多时候趋向于把模型定的较复杂)的问题。

搜索策略

搜索策略有:随机搜索、贝叶斯优化、进化算法,强化学习、基于梯度的方法。基于梯度是现在主流的方法。
强化学习第一反应就是Google在2017年发在ICLR上的NEURAL ARCHITECTURE SEARCH WITH REINFORCEMENT LEARNING,用一个RNN来做controller,每个RNN模块存储的是网络定义的embedding信息,用policy gradient来最大化controller采样网络的期望,在val集上的性能作为reward。后来也有很多不同的RL用法,不过大致基本都是这种使用思路,这样有个问题就是整个流程是个顺序的决策过程,到最后的action才有reward出来反馈,缺失了中间部分的交互。
进化算法最早在反向传播就有用过,在这里就是采样一组父模型作为一个种群,分别训练后挑选表现好模型改变它的一些参数得到子模型,让这些改变后表现更好的模型重新加入这个种群,然后不断进化下去。
上面这两种方案最大的问题在于它们把结构搜索当成离散空间来做导致低效以及有时候难以得到一个令人满意的结果,而基于梯度的方案就将它变成连续的,本质上就是在一个有向无环图中采样子图,每个运算操作都是一个节点,它们之间的连接作为边,求每个运算对历史运算的加权和,权重就是每条边的权重,在计算验证集loss之后就可以backward计算权重的梯度,这样搜索的过程也就是优化权重的过程,直接通过梯度下降来优化权重,最后保留权重最大的运算操作就是最后搜到的网络结构。
在这里插入图片描述

性能评估

最简单的思路就是在训练集上训练网络模型,然后在验证集上评估性能。但是这种方法通常会消耗大量资源,因为每次在训练集上从头开始训练一个模型都是费时费力。为了减少这种计算负担,可以根据充分训练后实际性能的较低保真度(lower fidelity)来估计性能。这种较低的保真度包括更短的训练时间、对数据子集的训练、低分辨率图像或每层使用较少的过滤器。 虽然这些低保真近似值降低了计算成本,但它们也会在估计中引入偏差,因为性能通常会被低估。还有一些其他的方法文章总结在以下这个表格中
在这里插入图片描述

学习曲线外推(Curve Extrapolation)

最早的有终止那些预计性能不好的网络结构的训练,借此来加速结构搜索的过程,还有虑使用网络架构的超参数来预测哪些 部分学习的曲线是最有用的,还有提出了一种预测新型体系结构性能的代理模型,他们不使用学习曲线外推法,但支持基于架构/单元属性的预测性能,并外推比训练中看到的更大的架构/单元。预测神经体系结构性能的主要挑战是,为了加快搜索过程,需要基于相对较少的评估,在相对较大的搜索空间中进行良好的预测。

网络态射(Network Morphism)

这个就是根据以前训练过的其他架构的权重来初始化新架构的权重,这样就可以连续地提高网络的容量,并保持高性能,而无需从头开始进行训练。这些方法的优点是,它们允许搜索空间,而不受体系结构大小的固有上限限制。但是另一方面,严格的网络模式只能使体系结构变得更大,从而可能导致过于复杂的体系结构。这可以通过使用允许收缩体系结构的近似网络结构来减少架构大小

单模型搜索(One-Shot Architecture Search)

One-Shot Architecture Search是加速性能评估的另一种很有效的方法,它将所有的体系结构视为一个Supergraph(One-Shot模型)的不同subgraph,并且在具有该Supergraph的相同边的体系结构之间共享权重。在这里插入图片描述

只有单个one-shot模型的参数才需要训练,并且One-shot的subgraphs可以通过继承One-shot的权重,从而即使没有训练也可以进行评估。这大大加快了架构的性能评估,因为不需要训练(只需要在验证数据上评估性能)。但是这种方法通常会带来很大的偏差,因为它严重低估了体系结构的实际性能。
one-shot NAS 方法的局限在于 supergraph 对子图确定了一个先验约束。此外,在网络结构搜索过程中,supergraph被要求常驻GPU的方法 相应的 就需要使用较小的 supergraph 和 搜索空间, 因此这种方法通常会与基于 cell 的搜索空间结合使用。虽然基于权重共享的方法已经大大减少了NAS所需的计算资源,但是如果结构的采样分布与 one-shot model 一起优化,目前尚不清楚它们会在搜索中引入哪些偏差。比如说在最开始时可能在搜索空间的A区域引入了误差,然后One-shot模型的权重又刚好在这引入的误差的区域表现更好,那么反过来又会加强对这一部分区域的搜索误差,这可能导致NAS的过早收敛。

未来方向

  • 应用领域
    现在很多CV领域都尝试用上了,骨架识别、姿态估计等等,并且也开始往实际硬件部署上使用,最近也有开始用在NLP领域的一些工作。
  • 多任务
    用多个任务一起做NAS,就是多任务学习的方案,能增强模型的对抗性、鲁棒性。
  • 搜索空间
    定义更一般和更灵活的搜索空间这样能更快的迁移到其他领域上去,而且现在的搜索空间人为设计性还是太强。
  • 性能比较基准
    这点在上面提到的 NAS evaluation is frustratingly hard 就有提到,现在的NAS其实没有一个统一且靠谱的比较标准,很多都是特定的比较,并且搜索空间、计算预算、数据增强、培训过程、正则化等设置都不统一,导致仅有的实验很难说明到底是哪部分的设置work,有时候可能搜索策略的贡献程度很微小,更多的是事先定好的搜索空间、调参、优化器等影响。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!