AutoML

一、AutoML架构图

https://zhuanlan.zhihu.com/p/44850626
https://zhuanlan.zhihu.com/p/337961880

image.png

先是数据准备,然后是特征工程,接着是模型生成,最后就是模型评估了。

其中模型生成又可以分为搜索空间和优化方法。

搜索空间有传统的ML模型或者DL模型。

优化方法又分为超参数优化和结构优化。NAS的话主要就涉及到DL模型的搜索空间定义、结构优化和模型评估策略这三块。

二、NAS简介

搜索空间分为ML和DL两块,本文只关注DL,而优化方法又分为超参优化和网络架构优化,本文也主要只关注网络架构优化,因为超参优化是挑选出最优网络架构之后的事情了,不过也有工作将NAS用在超参优化上的,这个就不在讨论范围内了。


image.png

image.png

上面两张图是NAS的一般流程:

  • 首先针对不同的任务定义一个搜索空间,这个搜索空间就决定了你搜出来的网络架构可能长什么样子,也决定了你搜出来的架构可能性有多少,当然是越大越好,但是带来的后果就是搜索速度太慢。
  • 然后在这个搜索空间里进行搜索,采样出一个比较好的模型架构,这里方法就非常多了,最简单的就是随机搜索,随机采样一个网络架构。
  • 最后就是在训练集上评估你采样出的架构效果,反馈给架构优化,让它优化,然后继续采样,循环下去。评估方法也有很多,最简单的就是像正常训练模型那样完整训练一遍,得到效果,但是这样太慢了,因此需要其他方法来加速训练或者估计效果。

(一)、搜索空间

神经网络可以看作是一个DAG,而如何定义这个DAG,其实你可以用生成图的方式做加法生成它,也可以做减法,从大图中抽取出子图等等,有很多方法。

定义搜索空间需要人类知识,这一步目前还不够Auto,定义的好,生成出来的架构才可能好。而有些工作发现只要你搜索空间定义的足够好,随机搜索都能达到和各种架构优化方法相似的效果,那么NAS将变得毫无意义,所以这一块还是挺玄学的。

1、整体结构搜索

就是按照DAG的拓扑序,依次生成出模型架构出来。一般来说,用一个RNN来生成,每生成一个node,都要预测出它的输入是哪些node(残差)、作用在它上面的op有哪些。

但是这种方法太慢了,搜索的复杂度是指数级别的,因此在最初的几篇RL论文里,都用了几百个GPU训练了几十天才搜出来,穷苦人家可搜不起。

2、cell搜索

这种方式也是借鉴了人类设计神经网络的经验,像ResNet系列都是将一个个cell层层堆叠得到的,因此如果只搜一个cell,然后将相同的cell堆叠起来岂不是大大减小了搜索空间。后面的很多工作都是基于cell来搜索的,比如NASNet。


image.png

在NASNet中,cell被分成了两种,一种是normal cell,它的输入输出维度保持相同,另一种是reduction cell,它的结构和normal cell相似,但是输出的宽度和高度减半,通道数加倍。

最后搜索出最优cell之后,根据需要堆叠不同层数的cell就行了,这个层数也是人为定义的。但是这里就会存在一个训练和评估不一致的问题,一般来说,在搜索的时候,为了减小显存占用,会堆叠比较少的层数去评估。但是在得到最优cell之后,用来retrain时会堆叠比较多的层数,这里就不一定是最优解了。也有工作做这方面的优化,比如P-DARTS,在搜索阶段逐渐增加堆叠的层数。


image.png

3、分层搜索

当然搜索cell也是存在问题的,忽视了整体结构的优化,而且每一层的cell相同也不一定最好啊。因此后来的工作又提出了分层搜索的方法。

比如Auto-deeplab在搜索cell的同时,还搜索了不同层的分辨率,下一层的分辨率可以是一半、不变或两倍,这一步限制一是为了减小搜索空间,二是为了增加稳定性,防止分辨率变化太大。


image.png

再如HierNAS,按照层次结构来搜索网络架构,第一层是一些原子操作,第二层用这些原子操作生成一些比较小的网络,第三层用第二层的小网络再搭建出一个更大的网络,依次下去。


image.png

再如progressive NAS,为了减小一个cell里面的搜索空间大小,从一个cell里面只有一个block开始搜索,每次挑出top-k个cell,在基础上衍生出两个block,依次下去。评估性能用的是代理模型直接预测,不需要真的训练一遍。

再如MnasNet,它将整个网络分为了若干个cell,每个cell串行了若干个block,每个cell的block数量可能不同,而单个cell里面的block结构是相同的,这样就考虑到了整体的网络搜索空间。和堆叠cell不同的是,每个block的结构比较简单,不然的话整体上搜索复杂度还是太大了。当然这篇主要还是为了做移动端部署,因此做了多目标NAS,将延时也考虑到了目标函数中去。


image.png

之前的方法还存在一个问题,就是基本都是在小数据集上做的搜索评估,最后将最优结构运用到大数据集上,这就存在不一致性。因此例如ProxylessNAS就直接在大数据集上搜索评估,为了减小显存消耗,采用BinaryConnect,每次只激活两个结点之间的一条边。

4、网络态射

这类方法主要思想就是在已经训练好的成熟网络基础上增加宽度、深度等等,继承父网络的参数,加速子网络的训练。

首先是Net2Net,扩展分为两个方向,一种是宽度上的,一种是深度上的,不能同时进行。


image.png

因此后来就有了网络态射,可以处理任意线性层和非线性层,并且深度和宽度上可以同时扩展。

(二)、架构优化

定义好搜索空间后,就要采用架构优化算法来搜索出最优的架构了。

1、演化算法

image.png

演化算法就是模仿的生物进化过程。

首先要对网络架构进行编码,方便之后的操作。可以将图结构编码为二进制串。

但是这样固定长度不灵活。于是就有了Cartesian genetic programming、Neuro evolution of augmenting topologies、Cellular encoding等各种编码方法,详细就不介绍了。

一般演化算法分为四步:选择、交叉、变异、替换。

  • 选择。就是从候选的网络架构中挑选出适应度最高的,一种可以直接挑绝对值最高的,另一种可以挑相对值最高的,第三种比较有名的是锦标赛选择算法,也就是放回抽样,每次等概率随机选k个,挑出最好的那一个,进入下一代,其余放回,重复上述操作。
  • 交叉。交叉方式和编码方式有很大关系,
  • 变异。上面两步做完后,有很多方式可以对个体进行变异,比如随机翻转某一位,随机增加或者删除两层之间的连接等等。
  • 替换。新的个体加入种群后,旧的个体要被删除掉。可以删除最久之前的,也可以删除效果最差的,也有工作一个都不删除,只要你内存和时间顶得住。

2、强化学习

image.png

强化学习主要思想就是用一个控制器(一般是RNN)来生成网络架构,然后评估得到得分作为反馈更新控制器参数。有用策略梯度的,也有用Q-learning的,还有用PPO算法的等等。第一篇NAS论文就是用的RL,但是这一类方法普遍很费卡,一般人玩不起。

3、梯度下降

image.png

前两种都是在离散空间搜结构,梯度下降方法是将离散空间变为了连续空间。第一个提出的是DARTS,在两个结点之间定义了若干种操作,然后做softmax,最后在评估的时候取argmax。

这种方法也有不好,比如成倍增加了显存,本来一条边现在需要成倍的计算量,此外用了代理任务,在小数据集上训的层数比较少,迁移到大数据集上层数又很多。也有解决方法,比如P-DARTS,随着训练进行逐渐加层数,为了减小计算量,还逐渐减少了每条边上的操作数。而GDAS每次只选概率最大的那个操作边做前向,反向传播用gumbel softmax。

两套参数联合优化也是很困难的,DARTS用的是交替优化,一次优化结构参数,一次优化模型权重。

最后还有个问题,就是搜索后期会倾向于搜索残差连接之类的操作,这不好。于是DARTS+发现一个cell里出现两个或以上残差连接后就直接停止。P-DARTS则是给残差加了正则化,减小出现的次数。

4、代理模型

这一类方法(SMBO)使用一个代理模型来指导最优模型的生成。传统的方法有贝叶斯优化(高斯过程、随机森林、TPE等等),就不详细介绍传统方法了。

也有用神经网络当作代理模型的,比如PNAS、EPNAS、NAO都用一个LSTM或者MLP将离散的结构编码成连续的表示,然后预测性能,接着找出性能最高的最优表示,用解码器还原出离散的结构。

5、网格和随机搜索

这就是最原始最普通的优化方法,比如直接在搜索空间随机搜索结构,然后评估,最后取最优的就行了。虽说随机搜索听起来不大行,但实际出来的效果,能和大多数NAS方法达到相似效果,还很简单。

6、混合优化方法

上面这么多方法混合在一起,可能效果会更好。演化算法是全局优化的,鲁棒性很强,但是随机性有点大,不稳定,计算消耗也大。强化学习也是的,训练很不稳定。梯度下降方法训练快,但是需要提前定义好超网络结构,限制了结构的多样性。

演化算法可以结合强化学习、梯度下降、SMBO,梯度下降也可以结合SMBO等等,这里就不详细介绍了,典型的例子有Evo-NAS、NAO等等。

(三)、超参优化

这一步其实是脱离了NAS的,就和一般的超参优化一样,网络搜索、随机搜索、贝叶斯优化、梯度优化等等方法。

(四)、模型评估

在模型生成之后,需要对模型进行评估,然后指导架构优化模块生成更好的架构。最一般的方法就是从头开始训练到收敛,但是这样太慢了,一般都要生成个几百万以上的架构的,训练时间太久了。

1、低保真度

可以在评估时降低数据集的分辨率,降低cell堆叠的层数,使用小数据集等等,这样可以快速得到架构的大致效果,但是最后得到的架构可能在目标数据集上不是全局最优的。

2、权重共享

比如ENAS,可以在多次评估模型性能时,继承之前相同node的参数,可以加快收敛速度。网络态射也是用到了权重共享。

3、代理模型

直接学习一个预测器,输入是网络架构,输出是它的性能,当然这需要提前先训练一些模型,得到(架构,性能)的若干数据,然后才能学习出这个预测器,PNAS就是这么干的。当然预测器的学习数据肯定不会多,所以SemiNAS就用半监督的方法,利用大量无标注的结构去预测出性能,加入到训练集中继续优化预测器。

4、early stop

可以只训练几轮,然后根据前期的学习曲线预测出最终的性能。

三、贝叶斯优化

一般也就调一调GBM,,,
https://www.cnblogs.com/yangruiGB2312/p/9374377.html
https://www.zhihu.com/question/33711002/answer/1536396538
https://zhuanlan.zhihu.com/p/29779000
https://zhuanlan.zhihu.com/p/340578370
https://zhuanlan.zhihu.com/p/76269142
https://zhuanlan.zhihu.com/p/150555551

四、NAS经典论文解读

https://cloud.tencent.com/developer/inventory/8074
https://chengfeng96.com/blog/2019/11/26/NAS-%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%88%E4%B8%80%EF%BC%89-NASNet/
https://fallenk.github.io/2019/06/03/NeuralArchitectureSearch/
https://www.infoq.cn/article/jgqpbhs7irx9dlymuxtu
https://aijishu.com/a/1060000000148746
https://zhuanlan.zhihu.com/p/120849856
https://zhuanlan.zhihu.com/p/120849856
https://zhuanlan.zhihu.com/p/93786753
https://zhuanlan.zhihu.com/p/130856689
https://zhuanlan.zhihu.com/p/104912306
https://zhuanlan.zhihu.com/p/94252445
https://zhuanlan.zhihu.com/p/81126873
https://zhuanlan.zhihu.com/p/71547478
https://zhuanlan.zhihu.com/p/144386823

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容