一文看懂AutoML(三)

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

其他

从整体流程上来看,NAS方法还可以分为一阶段和两阶段。两阶段是一般做法,第一个阶段就是搜索评估阶段,选出最好的架构,第二个阶段就是retrain这个最优架构,在验证集上评估。而一阶段就是只需要训练一次超网络,联合优化架构参数和模型权重,之后不需要再retrain了。比如比较有名的Once-for-all,采用了progressive shrinking算法来使得子网络之间的性能相互不受到影响。

NAS还可以分为one-shot和non-one-shot,one-shot意思就是搜索空间重合的,可以重复利用之前的参数,比如ENAS、网络态射、ProxylessNAS等都是的。

大多数NAS都只是把最终的效果当作目标,其实在移动端部署上还要考虑延时、模型大小、计算量等目标,一般都是解帕累托最优,比如MnasNet考虑到了延时。

开放性问题


搜索空间的灵活性

现在的搜索空间基本都还是人为定义的,参考了很多人类设计神经网络的经验,比如原子操作定义成conv、pooling之类的,结构上cell堆叠等等,但是真正的auto应该是模型自动设计网络架构和原子操作,比如AutoML-Zero就用最基本的原子操作(sin、cos、mean、std等)设计出了两层的神经网络。这一块应该是今后的一大方向,例如目前工作主要在CV上,而对于NLP的Transformer模型,搜索空间如何定义的很好?目前工作还寥寥无几,看了几篇也都是堆叠conv,分支结构之类的。

探索更多的领域

如上所说,目前大多数工作都是在CV上,搜的是conv结构,而像NLP、语音等领域探索甚少,像多目标领域也只有很少的工作(韩松老师组工作很多),即使是在CV,任务也大多数局限在CIFAR-10和ImageNet上。

可解释性

搜出来的网络为什么好?现在人类设计的网络大多数都能强行解释一下好处,即使它仍然是个黑盒。但是NAS搜出来的基本看不出设计的逻辑。

可复现

之前也说了,例如演化算法和强化学习这一类方法训练很不稳定,很难复现出结果。很多论文也都只是公开了最好的模型,都不放出源码的(当然我并没有质疑他们),超参数之类的也有些没有公布,这导致我们平民玩家没法复现,没法用啊。而且大家评测的环境都不相同,众说纷纭,没法公平比较,因此也有一些工作提出了NAS统一的数据集来评测。

鲁棒性

如果目标领域数据添加了噪声,可能会对搜出来的模型产生很大影响。所以如何搜出更加鲁棒、能适应不同领域或者有噪声数据的结构可能是未来的一个研究方向。

联合超参优化和架构优化

目前大多数NAS方法都是先搜出最优架构,再调整超参在目标领域上retrain,如何同时学好这两块也是一个方向。

完全的AutoML的pipeline

做到从数据收集开始一直到最后的模型生成训练全部流程化,不需要人为参与,那样才是真正的智能。目前的话有一些比较好的开源工具了,AutoKeras、NNI等等。

终身学习

当新的数据源源不断进来时,当只有少量有标签数据或者有大量无标签数据时,如何做NAS,有几个不错的工作,比如UnNAS是做无监督NAS的,MetaNAS是结合meta-learning的。

经典论文简析


(NAS)[ICLR 17] Neural Architecture Search with Reinforcement Learning

动机

用强化学习来采样网络,生成出最优网络结构,避免人工设计。

方法

用RNN来预测CNN或者RNN的结构,采样结构,下游任务效果作为强化学习得分,策略梯度更新参数。

CNN预定义好层数,LSTM每5层预测CNN一层的5个参数。

image.png

RNN预定义好cell的计算拓扑图,LSTM预测每个node的计算逻辑。

image.png

实验

image.png

接近人类设计网络的最好水平。速度超慢,800 K40,28天,只适用于小数据集例如CIFAR-10。

评价

强化学习应用到NAS的第一篇论文。

(NASNet)[CVPR 18] Learning Transferable Architectures for Scalable Image Recognition

动机

RL直接搜太慢了,只能用在小数据集,ImageNet之类的大数据集没法用。

方法

提出了NASNet,用堆叠相同cell的方式减小搜索空间。在CIFAR-10上面学习cell结构,通过增加堆叠层数的方式迁移到ImageNet上去。用PPO替代策略梯度。

image.png

选择之前的两个node,分别预测对应op,然后预测合并op。

image.png

实验

image.png

image.png

效果和参数量都好于前作,达到了SOTA水平。速度加快很多,500 P100,4天,相比于前作加速7倍。

评价

NASNet,通过cell堆叠加快了结构搜索的速度,同时效果达到了SOTA,并且容易迁移到其他任务上去。

ENAS)[ICML 18] Efficient Neural Architecture Search via Parameter Sharing

动机

之前的方法采样出一个结构,在dev上得到acc,然后就会抛弃权重,重新采样训练,非常耗时。

方法

定义一个超图,每次搜出的子图共享权重。

对于RNN cell,LSTM的每两个step预测之前某个node作为输入,再预测op,最后出度0的node拼接作为输出。

image.png

对于CNN,一种策略是直接生成整个网络,每个node先预测之前哪些作为输入,然后预测op。

image.png

另一种策略和NASNet类似,堆叠cell,搜索空间缩小到一个cell。

实验

image.png

优于NAS和NASNet,1 1080Ti,16小时,相比NAS加速1000倍。

评价

训练速度很快,AutoKeras背后就采用了ENAS。

(DARTS)[ICLR 19] DARTS: Differentiable Architecture Search

动机

离散结构搜索太慢了,采样+验证+反馈的循环很耗时。

方法

连续域结构搜索代替离散域结构搜索,用微分来优化结构。

两套参数:模型参数(训练集优化)、结构参数(验证集优化)。

交替优化两套参数,softmax+relax学习最终结构。

image.png

实验

image.png

效果达到或接近了SOTA,速度上比ENAS慢,比其他的方法快。

评价

第一个用可微分方法做NAS的,第一个连续空间搜索代替离散空间搜索。

[ICLR 19] Rethinking the Value of Network Pruning

动机

现有的剪枝方法存在问题,很多操作不合理,没有必要。

方法

传统剪枝方法基于两个假设:

  • 过参数化很重要,训练大模型再剪枝优于直接训练剪枝后的模型。
  • 继承大模型参数,再finetune很重要,优于随机初始化剪枝后模型再重新训练。

本文认为都不一定对:

  • 对于预定义好的模型,直接训练可以达到和训练-剪枝-finetune相同甚至更好的效果。
  • 大模型剪枝后,随机初始化重新训练,效果和继承参数finetune差不多。

所以本文认为剪枝后的结构重要,而参数不是那么重要。

实验

image.png

一系列实验结果验证了猜想,此外本文还否定了彩票假设,认为剪枝后随机初始化即可,没必要和原始初始化相同。

评价

仍然有一些局限性,比如数据分布均衡、模型比较大,估计在其他设置下不一定work。而且不如finetune速度快。

参考链接

不错的综述或讨论

https://lilianweng.github.io/lil-log/2020/08/06/neural-architecture-search.html

https://jinzhuojun.blog.csdn.net/article/details/84698471

http://www.tensorinfinity.com/paper_136.html

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

https://www.zhihu.com/question/359162202

https://github.com/pzhren/Awesome-NAS

Neural Architecture Search: A Survey

A Comprehensive Survey of Neural Architecture Search: Challenges and Solutions

AutoML: A Survey of the State-of-the-Art

A Comprehensive Survey of Neural Architecture Search: Challenges and Solutions

一些经典论文

Neural Architecture Search with Reinforcement Learning

Designing Neural Network Architectures using Reinforcement Learning

Efficient Neural Architecture Search via Parameter Sharing

Learning Transferable Architectures for Scalable Image Recognition

DARTS: Differentiable Architecture Search

Neural Architecture Optimization

FP-NAS: Fast Probabilistic Neural Architecture Search

SNAS: Stochastic Neural Architecture Search

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

Once for All: Train One Network and Specialize it for Efficient Deployment

Rethinking the Value of Network Pruning

TextNAS: A Neural Architecture Search Space Tailored for Text Representation

The Evolved Transformer

HAT: Hardware-Aware Transformers for Efficient Natural Language Processing

Searching Better Architectures for Neural Machine Translation

一些经典源码或工具

https://github.com/quark0/darts

https://github.com/melodyguan/enas

https://github.com/mit-han-lab/once-for-all

https://github.com/mit-han-lab/hardware-aware-transformers

https://github.com/microsoft/nni

https://github.com/IntelLabs/distiller

https://autokeras.com/

参考资料


[1]

AutoML: A survey of the state-of-the-art: https://arxiv.org/abs/1908.00709

image.png

作者简介:godweiyang知乎同名华东师范大学计算机本硕,字节跳动算法工程师,研究方向句法分析、机器翻译、模型压缩

相关实践学习
函数计算部署PuLID for FLUX人像写真实现智能换颜效果
只需一张图片,生成程序员专属写真!本次实验在函数计算中内置PuLID for FLUX,您可以通过函数计算+Serverless应用中心一键部署Flux模型,快速体验超写实图像生成的魅力。
相关文章
|
3月前
|
存储 关系型数据库 分布式数据库
客户说|古茗选用阿里云PolarDB,以云端之力解锁茶饮数字化新高度
阿里云PolarDB将持续以“业务价值”为锚点,通过技术迭代与场景化解决方案,让每一笔交易更流畅,让每一份数据更智能,助力古茗实现“每天一杯喝不腻”的日常化国民茶饮愿景。
|
Python Windows
win64系统安装32位的python解释器和打包成exe程序
本文说明了在win64系统环境下,如何安装32位的python解释器,同时对32位虚拟环境下运行的python程序进行打包,将其打包成可执行的exe程序,以图文相结合的方式记录了操作步骤,供大家参考。
922 0
|
8月前
|
JavaScript 前端开发
Node.js 中实现多任务下载的并发控制策略
Node.js 中实现多任务下载的并发控制策略
211 15
|
SQL JSON 关系型数据库
"SQL老司机大揭秘:如何在数据库中玩转数组、映射与JSON,解锁数据处理的无限可能,一场数据与技术的激情碰撞!"
【8月更文挑战第21天】SQL作为数据库语言,其能力不断进化,尤其是在处理复杂数据类型如数组、映射及JSON方面。例如,PostgreSQL自8.2版起支持数组类型,并提供`unnest()`和`array_agg()`等函数用于数组的操作。对于映射类型,虽然SQL标准未直接支持,但通过JSON数据类型间接实现了键值对的存储与查询。如在PostgreSQL中创建含JSONB类型的表,并使用`->>`提取特定字段或`@>`进行复杂条件筛选。掌握这些技巧对于高效管理现代数据至关重要,并预示着SQL在未来数据处理领域将持续扮演核心角色。
269 0
|
机器学习/深度学习 存储 搜索推荐
百亿大规模图在广告场景的应用
这篇摘要主要介绍了美团外卖在搜索推荐业务中如何利用图技术解决挑战,包括外卖广告搜索推荐业务的介绍、异构大图的演进、大规模图引擎的建设,以及系统的总结和展望。
|
算法 安全 PHP
24-9-24-CTFweb爆破-学习笔记
本文档详细记录了CTFshow平台上的Web安全挑战学习过程,包括条件爆破、伪随机数爆破及目录遍历等多种攻击手法。通过分析PHP的`substr()`函数与MD5加密特性,实现对特定条件的token爆破;利用Mersenne Twister算法的伪随机数生成机制破解随机数挑战;通过身份证信息爆破获取账户密码;最后通过目录遍历技术找到隐藏的flag。提供了完整的脚本示例,帮助读者理解和实践各种爆破技巧。
|
Java C++
jni传递对象
【5月更文挑战第4天】
188 2
|
机器学习/深度学习 编解码 自然语言处理
【18】Vision Transformer:笔记总结与pytorch实现
【18】Vision Transformer:笔记总结与pytorch实现
1192 0
【18】Vision Transformer:笔记总结与pytorch实现
|
SQL 分布式计算 大数据
大数据SQL数据倾斜与数据膨胀的优化与经验总结
目前市面上大数据查询分析引擎层出不穷,但在业务使用过程中,大多含有性能瓶颈的SQL,主要集中在数据倾斜与数据膨胀问题中。本文结合业界对大数据SQL的使用与优化,尝试给出相对系统性的解决方案。
14009 5
|
弹性计算 关系型数据库 数据库
开源PostgreSQL在倚天ECS上的最佳优化实践
本文基于倚天ECS硬件平台,以自顶向下的方式从上层应用、到基础软件,再到底层芯片硬件,通过应用与芯片的硬件特性的亲和性分析,实现PostgreSQL与倚天芯片软硬协同的深度优化,充分使能倚天硬件性能,帮助开源PostgreSQL应用实现性能提升。