一文看懂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知乎同名华东师范大学计算机本硕,字节跳动算法工程师,研究方向句法分析、机器翻译、模型压缩

相关实践学习
基于ECS和NAS搭建个人网盘
本场景主要介绍如何基于ECS和NAS快速搭建个人网盘。
阿里云文件存储 NAS 使用教程
阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。 产品详情:https://www.aliyun.com/product/nas
相关文章
|
11月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Azure 机器学习 - 使用 ONNX 对来自 AutoML 的计算机视觉模型进行预测
Azure 机器学习 - 使用 ONNX 对来自 AutoML 的计算机视觉模型进行预测
122 0
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【AI大模型】Transformers大模型库(二):AutoModelForCausalLM
【AI大模型】Transformers大模型库(二):AutoModelForCausalLM
105 1
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【AI大模型】Transformers大模型库(八):大模型微调之LoraConfig
【AI大模型】Transformers大模型库(八):大模型微调之LoraConfig
74 0
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【AI大模型】Transformers大模型库(四):AutoTokenizer
【AI大模型】Transformers大模型库(四):AutoTokenizer
98 0
|
5月前
|
监控 数据采集 机器学习/深度学习
AIGC-Whisper模型
6月更文挑战第1天
|
6月前
|
机器学习/深度学习 数据采集 算法
探索XGBoost:自动化机器学习(AutoML)
探索XGBoost:自动化机器学习(AutoML)
291 40
|
11月前
|
机器学习/深度学习 数据采集
Azure 机器学习 - 使用 AutoML 预测进行深度学习
Azure 机器学习 - 使用 AutoML 预测进行深度学习
136 0
|
11月前
|
机器学习/深度学习 开发工具 异构计算
Azure 机器学习 - 使用 AutoML 和 Python 训练物体检测模型
Azure 机器学习 - 使用 AutoML 和 Python 训练物体检测模型
86 0
|
11月前
|
机器学习/深度学习 存储 算法
Azure 机器学习 - 使用无代码 AutoML 训练分类模型
Azure 机器学习 - 使用无代码 AutoML 训练分类模型
79 0
|
11月前
|
机器学习/深度学习 存储 人工智能
Azure 机器学习:使用OpenAI GPT模型
Azure 机器学习:使用OpenAI GPT模型
188 0
下一篇
无影云桌面