Press "Enter" to skip to content

NAS发展史:从放弃到入门

加入极市 专业CV交流群,与 6000+来自腾讯,华为,百度,北大,清华,中科院 等名企名校视觉开发者互动交流!更有机会与 李开复老师 等大牛群内互动!

 

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。 关注  极市平台  公众号  , 回复  加群, 立刻申请入群~

 

作者: 梦里风林

 

https://zhuanlan.zhihu.com/p/71547478

 

本文已获作者授权,未经允许,不得二次转载

 

NAS曾经需要庞大的GPU开销,使得许多人望而却步,但得益于学者们的努力,如今的NAS已经到了普通实验室也能尝试的水平,故曰,从放弃到入门。

 

本文以 Quoc V. Le 的研究为脉络,梳理一波NAS领域的重要论文(持续完善中)。

 

NIPS2016 Learning to learn by gradient descent by gradient descent

 

重要性: ※

 

arxiv.org/pdf/1606.0447

 

简述: 可能是最早提出网络结构自动学习的文章,也是Google的,作者里边没有QVL,但思路和后面的几篇很一致,用RNN做Teacher,搜索空间仅限学习率。

 

ICLR2017 Neural Architecture Search with Reinforcement Learning

 

arxiv.org/abs/1611.0157

 

重要性: ※ ※ ※ ※ ※

 

简述: 第一篇提出NAS概念的论文,将网络的结构表达为一个可变长的字符串,用一个RNN来生成这个字符串,这个字符串对应的子网络训练后可以得到一个accuracy作为reward,求这个reward对RNN参数的梯度,优化RNN,从而使得RNN输出更好的string。 非常之黑箱和暴力。 最巧妙的地方在于这个string的设计。 效果还行。

 

RNN是一个两层LSTM,每层的隐含层大小为35.

 

这个字符串描述的就是每层卷积的参数值,当然,卷积后面都是跟一个BN和Relu的,实操中,为了减小搜索空间,filter height和width限定在[1,3,5,7]搜索,filter限定在[24,36,48,64]s搜索; stride有两种策略,一种是只能为1,一种是在[1,2,3]之间搜; RNN预测的就是每一层的某个参数在这些限定取值上的概率。

为了在layer之间增加skip connection,这篇论文还另外为第N层输出一个N-1的向量,这个向量的值代表是否要将前一层连进来作为input; 连接prev层的概率如下计算:

 

为了避免一些兼容问题,如果某一层预测出来没有input,则用原图做为input,如果某一层的output没有被人作为input,则concat到最后一层的output中,如果某一层的几个input大小不同,则为小的input填0,然后在depth维度concat;

 

资源: 800个GPU同时各train一个网络; 共28天

 

效果还行(CIFAR):

more filters版本是在搜出来的基础上,每层的增加了40个filter。 。 。

 

CVPR2018: Learning Transferable Architectures for Scalable Image Recognition

 

arxiv.org/abs/1707.0701

 

重要性: ※ ※ ※ ※ ※

 

简述: 改进了搜索空间,从搜超参到搜block cell结构,准确性达到SOTA(人称NASNet),而且提出在proxy dataset,一个小数据集(比如CIFAR10)上搜索,然后迁移到大数据集(ImageNet)上,并且在大数据集上也有比较好的表现,所以说这个架构是transferable的。

 

整个网络的框架是人工决定的,不同layer的cell是一样的结构,不同的权重,但这样会有size不变的问题,因此搞了一种normal cell,输出和输入hw相同,还有一种reduction cell,stride为2,达到减size的目的,并且filter会加倍。 框架如图:

cell怎幺搜

 

论文说的非常绕,我来一句话总结一下: 在每个cell里,搜 y = g(f1(x1), f2(x2)) B次;

首先,决定哪些东西作为输入(x1, x2),可选的输入即前几次搜索的输出; (这样就可能造成skip connection)

 

然后决定对每个输入各做什幺操作,f1和f2,可选的操作有:

然后选择怎幺组合两个操作的结果g,可选的组合有add和concat;

 

最后,对于B次搜索的所有没有被作为输入的结果(当然包含了最后一次搜索的输出),concat起来作为cell最后的输出;

 

g的组合还可以包含LN和IN,NASNet-A是不包含的,NASNet-B和NASNet-C是包含的,NASNet-B更骚一点,整个cell最后组合的时候,把所有搜索的输出都concat进来了;

 

为了同时搜Normal Cell和Reduction Cell,一个cell里会搜2B次,前B次作为Normal Cell,后B次作为Reduction Cell;

 

资源: 500个GPU,7天

 

效果: (6@768表示block重复6次,最后一个CNN有768个filter)

甚至开始在COCO上跑

ICML2017 Neural Optimizer Search with Reinforcement Learning

 

arxiv.org/abs/1709.0741

 

重要性: ※ ※

 

简述: 自动改造Optimizer,比传统Optimizer效果好

 

资源: 全部训完需要100GPU*1天

 

搜索空间: Optimizer的各种因素的组合,如moving average, decay rate的变化方式等;

 

训练Trick: 用第1个epoch来选学习率,整个模型只训5个epoch(因为batch size128),所以能在10分钟训完一个模型

 

ICLR2017 workshop Searching for Activation Functions

 

arxiv.org/abs/1710.0594

 

重要性: ※ ※

 

简述: 搜激活函数,又水了一篇,推荐了一个x*sigmoid(x)的激活函数(称为swish),直接换激活函数就能涨点;

 

搜索空间: 各种激活函数的组合

资源: 实验主要是讲swish这个激活函数的效果的,所以没有提到资源占用情况,目测跟搜optimizer差不多;

 

ECCV2018 Progressive Neural Architecture Search(是李飞飞团队另外搞的一篇)

 

arxiv.org/abs/1712.0055

 

重要性: ※ ※ ※

 

简介: 训了一个eval模型,可以直接根据模型结构估计模型的准确率; 在搜索cell的结构时,对于某个block_size结构的多种候选方案,分别扩展成block_size+1的方案,用eval模型选出topK个进行真正的训练,然后再对这K个进行扩展,重复上面的过程,因为只对topK做扩展,所以减少了搜索耗时;

 

搜索空间: cell的结构

 

资源占用: 在选择top1的条件下,搜索模型的速度是NASNet的五倍; 也就是可以100个GPU,7天;

 

CIFAR实验:

ImageNet实验:

 

mobile模型用了50张P100搜,large模型用了100张P100搜,并且搜出来的模型效果都还不错,虽然没有说训练了多久:

N是cell重复次数,为了保证不同N的相同的输出大小,中间的stride可能有区别,F是filter个数;

 

ICML2018: Efficient Neural Architecture Search via Parameter Sharing

 

arxiv.org/abs/1802.0326

 

重要性: ※ ※ ※ ※ ※

 

简述: 通过共享各个网络中共同单元的权重,来加快训练速度

 

搜索空间: 用有向图表示各个单元的组合和连接,找到reward最高的子图; 计算reward时,不同的模型用的是一开始train出来的同一套权重,不会专门重新优化,直接在验证集上跑一个batch计算reward,比较简单粗暴,搜出来其实不一定是最优的。

 

资源占用:

 

CIFAR上,一张卡,半天就能训练好;

AAAI2019 Regularized Evolution for Image Classifier Architecture Search

 

arxiv.org/abs/1802.0154

 

重要性: ※ ※ ※ ※

 

简介: 第一个使用演化算法做NAS并达到SOTA的算法(之前的演化算法都没达到); 改进点在于,为每个架构添加一个年龄属性,并倾向于搜索年轻的模型; 提出了一个最简单的演化算法参数组,并通过这个参数组的变动来覆盖整个NAS搜索空间。 效果比RL要好,做法比RL简单,但整体速度没有RL快(虽然claim的计算量更少,但是实现起来速度就是不如RL的方法)。

 

搜索空间: 把搜索空间表示成有向图,节点是feature map,边是运算,边有类型和方向两个属性,方向决定了要连接哪些节点,类型决定了要做哪种运算。

 

资源: 与基于RL的NASNet方法相同;

ECCV2018 NetAdapt: Platform-Aware Neural Network Adaptation for Mobile Applications

 

arxiv.org/abs/1804.0323

 

重要性: ※ ※ ※ ※

 

简介: 这其实更像一个压缩算法。 以一个pretrain模型(其实是MobileNetV1和V2)为起点,采用移动设备的真实inference时间作为latency指标,同时权衡acc和延迟进行每一层的超参选择,从而达到移动端适配的效果。 当然由于每次都去真实设备跑不太现实,难以并行,受限于设备数量,因此先跑了一下,整了一个每层参数数量和inference时间的对照表。

 

搜索空间: 每层的filter数量N,以及要从原始模型里边挑选哪N个filter保留;

 

资源开销: 没讲

 

效果: 同样acc的模型,速度超越MobileNetV2。

 

CVPR2019 AutoAugment: Learning Augmentation Policies from Data

 

重要性: ※ ※

 

arxiv.org/abs/1805.0950  (no published)

 

简介: 将数据增强策略表示为各种子策略的组合进行搜索

 

资源:

ICLR2019 DARTS: Differentiable Architecture Search

 

arxiv.org/abs/1806.0905

 

重要性: ※ ※ ※ ※ ※

 

简介: 将架构搜索表达为一个可微过程,用梯度下降来优化,搜索速度很快,效果很好,并且是开源的。

 

搜索空间: block cell结构,将cell表达为一个图,节点表示feature map,边表示operation,一个cell里有N=7个节点(含input和output),每个节点有两个input,一个是上一个节点的输出,一个是上上个节点的输出,每个节点对输入做|O|=8组运算,加权求和得到一个输出,权重用softmax归一化,整个cell的输出为所有中间节点的组合(b); 架构搜索就是,优化这些操作的权重(c),最后每个节点保留K个(这里K取2)最大概率的操作(d)。 如图:

所以这是一个模型权重w和架构权重的α的双重优化问题,通过交替迭代优化来求解:

其中,架构权重的优化看的是val的loss,模型权重的优化看的是训练集的loss,架构权重优化时理论上应该是在最优的w上优化,但这样耗时太大,因此用一步SGD后的w-lr*grad(w)来代替最优w; 论文中对这个梯度还做了一些运算上的优化;

 

这其实也是一种参数共享,不同的架构超参数在调整时共享了一份权重参数,避免每次都从头训练,之所以不同参数能够共享,是因为搜索时放在内存里的参数足够完备。 这种共享比ENAS更高明,ENAS的参数共享太粗暴了,直接将上一个模型里的参数拿过来,不考虑架构上是否适合; 而这里共享的参数正是此时最好的参数,因为超参的调整是连续的。

 

资源占用与效果(只看CNN):

速度是略逊于ENAS的,但搜出来的模型参数数量更少,准确率更高。

 

把CIFAR上搜的这个模型在ImageNet上重新train,效果还不错,说明这个架构非常transferable

CVPR2019 MnasNet: Platform-Aware Neural Architecture Search for Mobile

 

arxiv.org/abs/1807.1162

 

重要性: ※ ※ ※ ※ ※

 

简介: 兼顾了模型轻量化目标的NAS,测推断速度时是直接在手机上测的,而非使用FLOPS等指标,暗含了模型实现时带来的延迟。 (detailed knowledge of the platform and toolchain is not required.)

 

资源: 由于CIFAR太小,模型容易拟合,模型的轻量化指标对模型的结构影响不大,因此只做了ImageNet的实验; 在NASNet配置上搜索,占用64张TPUv2*4.5天,由于只是改了搜索目标,所以延时跟NASNet应该是差不多的

 

这是ImageNet上当时的benchmark

arxiv NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection

 

arxiv.org/abs/1904.0739

 

重要性: ※ ※ ※

 

简介: 第一个正式把NAS魔爪伸向Object detection的paper,虽然MNasNet也做了coco的实验,但那只是分类网络的试水,没有改detection的结构,这篇focus在backbone提取不同layer的feature后,用FPN进行跨尺度融合。

 

搜索空间: 跨尺度连接;

 

资源: 别问,问就是TPU

 

效果: 两个版本,一个准一个快;

ICML2019 EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

 

arxiv.org/abs/1905.1194

 

重要性: ※

 

简介: claim了这样一个思想: 平衡好depth/width/resolution的关系可以有更好的效果(感觉是废话),并在mobilenet和resnet上做实验验证。 然后用NAS同时以acc和flops搜了一个baseline网络出来,做了depth/width/resolution的平衡,然后就得到了一组比较好的模型EfficientNets。 对NAS这个领域没啥贡献,暂时不细看。

 

arxiv Searching for MobileNetV3

 

arxiv.org/abs/1905.0224

 

重要性: ※ ※

 

简介:

 

 

结合NAS和人工网络设计来实现MobileNetV3,以前都是纯机器搜;

 

release准确和轻量两个版本。

 

在MNas基础上,改了一下不同目标的权重,搜了一下CNN block,再用NetAdapt搜了每一层的filter大小;

 

基于搜出来的结构人工优化,包括: 把最后的1×1卷积移到global average pooling后面,并因为global average pooling这个操作实现了降维,所以可以移除一块3×3卷积; 在网络首层,减少了filter数量并使用了不同的非线性激活; 用Relu6(x+3)/6代替sigmoid以减少计算量;

 

 

资源开销: 4×4个TPU容器

 

效果: 在相同acc下,速度比mobilenetv2略快

 

Learning Data Augmentation Strategies for Object Detection

 

arxiv.org/abs/1906.1117

 

重要性: ※ ※

 

code:  https://github.com/tensorflow/tpu/tree/master/models/official/detection

 

简介: 专为Object detection搜各种augmentation的组合,效果很强,idea比较简单。

 

-完-

 

*延伸阅读

 

干货 | 让算法解放算法工程师——NAS 综述

 

学深度学习的你有GPU了吗

 

添加极市小助手微信 (ID : cv-mart) ,备注: 研究方向-姓名-学校/公司-城市 (如:目标检测-小极-北大-深圳),即可申请加入 目标检测、目标跟踪、人脸、工业检测、医学影像、三维&SLAM、图像分割等极市技术交流群 ,更有每月 大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流 , 一起来让思想之光照的更远吧~

 

 

△长按添加极市小助手

 

 

△长按关注极市平台

 

觉得有用麻烦给个在看啦~   

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注