AutoML简要概述
前言
AutoML是指尽量不通过人来设定超参数,而是使用某种学习机制,来调节这些超参数。这些学习机制包括传统的贝叶斯优化,多臂老虎机(multi-armed bandit),进化算法,还有比较新的强化学习。
我将AutoML分为传统AutoML ,自动调节传统的机器学习算法的参数,比如随机森林,我们来调节它的max_depth, num_trees, criterion等参数。 还有一类AutoML,则专注深度学习。这类AutoML,不妨称之为深度AutoML ,与传统AutoML的差别是,现阶段深度AutoML,会将神经网络的超参数分为两类,一类是与训练有关的超参数,比如learning rate, regularization, momentum等;还有一类超参数,则可以总结为网络结构。对网络结构的超参数自动调节,也叫 Neural architecture search (nas) 。而针对训练的超参数,也是传统AutoML的自动调节,叫 Hyperparameter optimization (ho) 。
传统AutoML
1. 贝叶斯优化
贝叶斯优化是一种近似逼近的方法,用各种代理函数来拟合超参数与模型评价之间的关系,然后选择有希望的超参数组合进行迭代,最后得出效果最好的超参数组合。
算法流程
初始化,随机选择若干组参数x,训练模型,得到相应的模型评价指标y
用代理函数来拟合x,y
用采集函数来选择最佳的x*
将x*带入模型,得到 新的y,然后进入第2步
具体算法
算法 | 代理函数 | 采集函数 | 优缺点 |
---|---|---|---|
BO | 高斯过程 | Expected Improvement | 应用广泛,在低维空间表现出色 |
SMAC | 回归随机森林 | Upper Confidence Bound | 对离散型变量表现出色 |
TPE | 高斯混合模型 | Expected Improvement | 高维空间表现出色,有论文表明最实用 |
特点
需要消耗大量资源及时间。由于需要至少几十次迭代,即需要训练几十次的模型,因而会造成大量资源、时间消耗。基于这个特点,可以说贝叶斯优化算法适合传统AutoML ,而不适合深度AutoML
效果不稳定。由于初始化存在随机性,其效果不稳定。也有论文表明,贝叶斯优化算法并不显著优于随机搜索(random search)
2. Multi-armed Bandit
multi-armed bandit是非常经典的序列决策模型,要解决的问题是平衡“探索”(exploration)和“利用”(exploitation)。
举一个bandit例子,你有20个按钮,每个按钮按一次可能得到一块钱或者拿不到钱,同时每个按钮的得到一块钱的概率不同,而你在事前对这些概率一无所知。在你有1000次按按钮的机会下,呼和得到最大收益。
这类算法,通过将自动调参问题,转化为bandit问题,配置更多资源给表现更优异的参数模型。
具体算法
Hyperband是一个颇具代表的算法。总体思路我们由一个自动调节LeNet的例子来展示:
image
R=81代表总资源, 代表每次筛选的比例,ni代表参数配置的组合数,ri代表资源数,这里代表一个epoch,第一行代表随机得到ni个参数配置,然后经过第ri次迭代之后,根据模型validation loss选择出top k个表现好的模型,继续下一行ri的训练。
特点
Bandit思想还是很重要的,是一类针对资源配置的算法,可以有效避免资源浪费在很差的参数配置上。
Bandit结合贝叶斯优化,就构成了传统的AutoML的核心,比如伯克利的这篇paper,或者今年cmu的atm 。事实上,在华为,我也搞了这方面的专利,核心也是Bandit与贝叶斯优化。
Bandit同样适合于深度AutoML中nas任务,但是对ho任务的应用,我是存疑的,比如学习率lr 一大一小两组实验,在前期极有可能是大lr那组的loss下降快,如果用bandit判断这个lr优秀,而停止了另一组的实验,很有可能造成错误。因为大的学习率,在前期可能确实会加快收敛,但是一段时间后,可能就会震荡了,最后的收敛精度可能就很低。
深度AutoML
1. 进化算法
一般的进化算法其实大同小异,差别在如何选择变异,有比较细的变异,比如在Large-Scale Evolution of Image Classifiers 这篇文章中,就定义了非常具体的变异,比如有改变通道数量,改变filter大小,改变stride等等;而在Simple And Efficient Architecture Search for Convolutional Neural Networks这篇论文中,它的变异,就借鉴了现有公认的比较好的结构,加深网络就用conv-bn-relu3件套,加宽网络加大通道数量,增加skip connection。
这些进化算法在做自动模型选择时,每次迭代都不可避免的需要在整个数据集上跑若干个epoch,而每次迭代都有许多个变异,又需要很多次迭代,导致最后的训练时间太久。
fine-tune基础上的进化
Simple And Efficient Architecture Search for Convolutional Neural Networks 这篇论文提出,我们先用一个成熟的模型去训练(也可以fine-tune训练),然后在这个模型的基础上去变异,变异之后用fine-tune训练几个epoch即可。这带来两个好的结果:
fine tune减少了大量的训练时间
我们最后拿出来的模型,至少不比成熟模型差
个人认为,这篇论文很有实际意义。
2. 强化学习
强化学习在nas和ho两方面都有应用。
强化学习-自动网络结构搜索
Learning Transferable Architectures for Scalable Image Recognition
用RNN作为controller,产生网络结构,然后根据收敛精度调节rnn。
将整个网络分为两种cell,Normal cell 和 Reduction cell,每个cell有B个block组成,而一个cell由rnn生成的过程如图所示:
image
选择一个hidden layer A
选择一个hidden layer B
为A选择一个op
为B选择一个op
选择一个结合op
重复1-5步骤B次,生成一个cell
该方法现在cifar10上寻找到两种cell的结构,然后迁移到imagenet上。
值得注意的是,该方法虽然效果惊人,但是人为的提前设定非常多:
每个cell有B个block组成,B是人为设定的值,这里被设为了5;
cell的数量及cell的排序顺序都是提前订好的;
因此在这个网络结构的搜索中,模型的探索空间有限,同时它在cifar10上进行训练,因此相对于最早的用强化学习来做automl的方法,已经加速了许多。但是还是不够快,针对速度问题,有一篇paper:enas。
ENAS 在上述方法的基础上,采用参数共享的方式,避免每次新产生的模型重头训练的问题,因此大大加速了训练时间,使得gpu耗时降低到了一天之内(cifar10数据集),可谓效果惊人!
强化学习-优化器
Neural Optimizer Search with Reinforcement Learning
用RNN作为optimizer的controller,产生optimizer,然后用小的cnn模型训练5个epoch,得到的val_acc作为reward,训练。
将每个optimizer抽象的表达为:
image
比如:
image
最后产生了两类optimizer:
image
强化学习总结
强化学习在深度学习中的应用可谓方方面面,比如用强化学习做图像的增强学习 、device配置等等,但是强化学习的问题在于每一类问题,哪怕换一份相近的数据,也要从头训练;而且训练消耗的时间非常长。
3. 其它方法
1. 辅助网络初始化参数
SMASH: One-Shot Model Architecture Search through HyperNetworks 在这篇论文中,介绍了一种利用辅助网络给不同的网络初始化参数,从而无需重训练的方法。
其大致流程是在一堆待搜索的网络结构中,随机挑选数据和网络结构,用辅助网络负责参数初始化,然后训练用梯度下降训练这个辅助网络。在该辅助网络训练的足够好之后,就可以用它给各个不同的网络初始化参数,然后测试validation loss,最后挑出最优的网络结构,从头开始正常训练。
该方法通过训练一次辅助网络,避免每个网络都需要训练的情况,使得训练时间大大减小。该方法非常具有参考意义。
2. DARTS
Differentiable architecture search (DARTS). 在这项研究中,将神经网络的探索空间从discrete变为continuous,从而可以使用梯度下降的方式,来优化神经网络的结构。
这个研究生非常有意思,非常有希望,期待这方面的继续发展!
AutoML简要概述相关推荐
- 「翻译」SAP零售预测和补货–简要概述
SAP零售预测和补货–简要概述 总体目标和适用范围 SAP Forecasting and Replenishment(F&R)是专门为零售商门店和配送中心的高效补货而创建的解决方案.其主要目 ...
- drill apache_Apache Drill 1.4性能增强的简要概述
drill apache 今天,我们很高兴地宣布,MapR发行版中现已提供Apache Drill 1.4. 钻1.4是MAPR生产就绪和支持的版本,可以从下载这里 ,找到1.4版本说明这里 . Dr ...
- Apache Drill 1.4性能增强的简要概述
今天,我们很高兴宣布Apache Drill 1.4现已在MapR发行版中可用. 钻1.4是MAPR生产就绪和支持的版本,可以从下载这里 ,找到1.4版本说明这里 . Drill 1.4以其高度灵活和 ...
- jsp 内置的对象的简要概述(转)
JSP 内置对象简要概述 (1) HttpServletRequest 类的 Request 对象 作用:代表请求对象,主要用于接受客户端通过 HTTP 协议连接传输到服务器端的数据. (2) Htt ...
- 记住密码 的 简要概述_密码错误的简要历史
记住密码 的 简要概述 IT强制的密码策略似乎是一个好主意-毕竟,攻击者有机会在八字符字符串(至少包含一个大写字母,一个低个字母)中的7.82亿个潜在组合中猜出您的确切密码字母,两个数字和一个符号? ...
- MOOS-ivp 实验十四(2)behavior简要概述
MOOS-ivp 实验十四(2)behavior简要概述 继续上一章的内容,对行为使命进行进一步的介绍和参数配置工作. 文章目录 MOOS-ivp 实验十四(2)behavior简要概述 前言 一.简 ...
- HashMap的实现原理(简要概述)
HashMap的实现原理(简要概述) 基于哈希算法实现的,它通过put存储,通过get取值. 当传入一个key时,HashMap会根据key.hashCode()计算出哈希值,然后根据这个哈希值将va ...
- SpringMVC简要概述
SpringMVC简要概述 SpringMVC简要概述 SpringMVC简要概述 一.MVC 1.MVC简介 2.MVC三层架构分析 3.MVC框架使用机制 二.SpringMVC 1.Spring ...
- Spring 核心方法 refresh 刷新流程简要概述及相关源码扩展实现(二)
前言 registerBeanPostProcessors initMessageSource 如何实际应用国际化处理 initApplicationEventMulticaster onRefres ...
最新文章
- CTFshow php特性 web143
- caffe修改hdf5的datalayer
- 今日头条在消息服务平台和容灾体系建设方面的实践与思考
- 黑马程序员_网络编程总结
- 设一棵完全二叉树共有500个结点,则在该二叉树中有______个叶子结点
- C语言以递归实现插入排序Insertion Sort算法(附完整源码)
- 第三次学JAVA再学不好就吃翔(part57)--StringBuffer和String的相互转换
- Linux文件和目录权限笔记
- QT4.8.5 显示中文
- 00-自测3. 数组元素循环右移问题
- ubuntu16全程安装mysql5.7.15!
- PAT (Basic Level) Practice1007 素数对猜想
- Swift ARKit 人脸滤镜保姆级教程
- gb28181简单实现sip信令服务器(java版基于springboot):三、sip摄像头注册(代码实现)
- Python 深度学习AI - 声音克隆、声音模仿、模拟特朗普声音唱《See You Again》,Real-Time-Voice-Cloning项目的安装与使用
- M0n0Wall防火墙安装配置
- 很好看的source insight配色方案
- Laravel 使用视图合成器 view composer 实现视图变量共享
- 关于字节,半字,字到底有多多少位
- 【A_star三维路径规划】基于matlab A_star算法无人机三维路径规划【含Matlab源码 446期】
热门文章
- python基础对list的增删查改和列表的排序
- Python 命令行之旅:深入 click 之参数篇
- 虚拟机 Linux ubuntu16.04 对 windows 设置共享文件夹教程(samba)(ubuntu16.04换源【更换下载源】【更换源】【更新源】)(如果连不上需要开SSH服务)
- python3使用SQLALchemy报错No module named ‘MySQLdb‘
- 放置奇兵 算法 月度活动 破碎时空记录 第五关 丁丁(瓦伦丁)+杰赫拉
- windows10如何删除文件时提示?(回收站--右键属性--显示删除确认对话框)
- python numpy np.argmax(a, axis=None, out=None) (按给定轴位比较,返回第一个最大值索引【下标】)
- 深入浅出python机器学习_4.3.1_岭回归的原理 4.3.2_岭回归的参数调节
- SpringBoot v2.2.6版本遇到的坑 --- HiddenHttpMethodFilter组件的锅
- java zmq订阅_从ZMQ PUB套接字获取订户过滤器