一文看懂AutoML(二)

本文涉及的产品
文件存储 NAS,50GB 3个月
简介: 首先这篇综述是讲AutoML的,不单单是NAS,但是因为NAS是AutoML中最最重要的一部分,所以主要篇章还是用来讲NAS了。据作者所说,应该是第一篇完整讲述AutoML整个流程的综述。

网络态射

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

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

image.png

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

架构优化

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

演化算法

image.png

演化算法就是模仿的生物进化过程。首先要对网络架构进行编码,方便之后的操作。可以将图结构编码为二进制串,但是这样固定长度不灵活。于是就有了Cartesian genetic programming、Neuro evolution of augmenting topologies、Cellular encoding等各种编码方法,详细就不介绍了。

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

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

强化学习

image.png

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

梯度下降

image.png

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

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

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

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

代理模型

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

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

网格和随机搜索

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

混合优化方法

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

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

超参优化

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

模型评估


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

低保真度

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

权重共享

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

代理模型

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

early stop

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

一些讨论


效果对比

image.png

image.png

可以看出,演化算法和强化学习搜索时间都非常长,除了个别几个用了权重共享之类技巧的。梯度下降方法全部都挺快的,但是整体效果都不如其他几类方法。

相关实践学习
基于ECS和NAS搭建个人网盘
本场景主要介绍如何基于ECS和NAS快速搭建个人网盘。
阿里云文件存储 NAS 使用教程
阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。 产品详情:https://www.aliyun.com/product/nas
相关文章
|
5月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Azure 机器学习 - 使用 ONNX 对来自 AutoML 的计算机视觉模型进行预测
Azure 机器学习 - 使用 ONNX 对来自 AutoML 的计算机视觉模型进行预测
67 0
|
3月前
|
机器学习/深度学习 数据采集 算法
探索XGBoost:自动化机器学习(AutoML)
探索XGBoost:自动化机器学习(AutoML)
224 40
|
5月前
|
机器学习/深度学习 算法 数据挖掘
机器学习(七)模型选择
机器学习(七)模型选择
39 0
|
5月前
|
机器学习/深度学习 数据采集
Azure 机器学习 - 使用 AutoML 预测进行深度学习
Azure 机器学习 - 使用 AutoML 预测进行深度学习
61 0
|
5月前
|
机器学习/深度学习 开发工具 异构计算
Azure 机器学习 - 使用 AutoML 和 Python 训练物体检测模型
Azure 机器学习 - 使用 AutoML 和 Python 训练物体检测模型
60 0
|
5月前
|
机器学习/深度学习 存储 算法
Azure 机器学习 - 使用无代码 AutoML 训练分类模型
Azure 机器学习 - 使用无代码 AutoML 训练分类模型
49 0
|
12月前
|
机器学习/深度学习 数据采集 编解码
一文看懂AutoML
一文看懂AutoML
|
12月前
|
机器学习/深度学习 自然语言处理 算法
最佳机器学习模型选择指南!
最佳机器学习模型选择指南!
|
机器学习/深度学习 数据采集 编解码
一文看懂AutoML(一)
首先这篇综述是讲AutoML的,不单单是NAS,但是因为NAS是AutoML中最最重要的一部分,所以主要篇章还是用来讲NAS了。据作者所说,应该是第一篇完整讲述AutoML整个流程的综述。
387 0
一文看懂AutoML(一)
|
机器学习/深度学习 自然语言处理 算法
一文看懂AutoML(三)
首先这篇综述是讲AutoML的,不单单是NAS,但是因为NAS是AutoML中最最重要的一部分,所以主要篇章还是用来讲NAS了。据作者所说,应该是第一篇完整讲述AutoML整个流程的综述。
234 0
一文看懂AutoML(三)