谷歌AutoML新进展,进化算法加持,仅用数学运算自动找出ML算法
机器之心报道
参与:魔王、杜伟、小舟
授权转载自公众号机器之心
仅使用基础数学运算就能自动搜索机器学习算法?谷歌 Quoc V. Le 等人提出了 AutoML-Zero 方法。
AutoML-Zero 旨在通过从空程序或随机程序开始,仅使用基础数学运算,来自动发现能够解决机器学习任务的计算机程序。其目标是同时搜索 ML 算法的所有属性,包括模型结构和学习策略,同时将人类偏见最小化。
近来,机器学习(ML)取得了显著的成功,这要归功于深度神经网络等 ML 算法。与此同时,这一领域研究中遇到的困难又催生了 AutoML,AutoML 旨在实现 ML 算法的自动化设计。
目前,AutoML 主要通过结合复杂的手动设计组件来开发解决方案。神经架构搜索就是一个典型的示例,在这个子域中,研究人员基于复杂层(如卷积、批归一化和 dropout)来自动构建神经网络。
在 AutoML 中使用这些手动设计组件的另一种方法是从零开始搜索完整的算法。这种方法具有一定的难度,因为它需要探索大型且稀疏的搜索空间。但同时,这种方法也具有巨大的潜在益处,它不会偏向于我们已经了解的东西,并且有可能发现新的、更好的 ML 架构。
从零开始学习算法的早期研究主要聚焦算法的一个方面(如学习规则),以减少搜索空间和计算量。但自 20 世纪 90 年代后这类研究逐渐冷门,直到现在才重新得到重视。
2018 年 3 月,谷歌大脑团队即进行相关研究,使用进化的 AutoML 来发现神经网络架构。如今,谷歌将这项研究进一步扩展,证明从零开始进化 ML 算法是有可能的。相关研究被 ICML 2020 接收,这项研究出自谷歌大脑团队 Quoc V. Le 等学者之手。
论文链接:https://arxiv.org/pdf/2003.03384.pdf
GitHub 项目地址:https://github.com/google-research/google-research/tree/master/automl_zero#automl-zero
在这项研究中,谷歌提出了新方法 AutoML-Zero,该方法从空程序(empty program)开始,仅使用基本的数学运算作为构造块,使用进化方法来自动找出完整 ML 算法的代码。
在一些小的图像分类问题上,AutoML-Zero 方法重新发现了一些基本的 ML 技巧,如具备反向传播的双层神经网络和线性回归等,而这些是之前的研究人员经过数年时间才发现的。
这一结果表明,自动发现更新颖的 ML 算法以解决更棘手的问题,这一想法在未来是可行的。
接下来,我们来看 AutoML-Zero 方法的具体实现原理。
从零开始进化学习算法
谷歌使用经典进化方法的变体「正则化进化搜索方法」来搜索算法空间。这些方法被证明在发现计算机程序方面很有效,其简洁性和可扩展性使得它们非常适合发现学习算法。
正则化进化搜索方法中的 cycle。
在这项研究中,谷歌团队使用空程序对群体进行初始化,然后不断重复循环来生成更好的学习算法。
在每一次循环中,两个(或更多)随机模型展开竞争,最准确的模型成为「parent」。之后 parent 模型复制自己得到变异了的子模型,即子模型的代码以随机形式进行了修改,例如任意插入、移除或修改一行代码。
接下来,研究人员在图像分类任务上评估变异后的算法。
整个过程如下图所示:
使用空程序对群体进行初始化。经过多代后,得到进化后的群体。其中两个算法进行竞争,最准确的一个获胜并生成子模型。经过多次迭代后,最终的群体包含高度准确的分类器。
探索有难度的搜索空间
与之前的 AutoML 工作不同,AutoML-Zero 的搜索空间非常稀疏:准确算法的比例大约是 1:1012。原因在于算法构造块的细粒度,它仅包含基础运算,如变量赋值、加和矩阵相乘。在这样的环境下,随机搜索无法在合理时间内找到解,然而进化的速度提升了数万倍。
谷歌研究者将搜索分配到多个机器上,并构建了多个小型分类任务以评估每个子算法。此类评估使用高度优化的代码执行。
尽管搜索空间稀疏,但随着时间的推移,进化搜索也能发现更复杂和有效的技术。
最开始进化搜索发现的是最简单的算法——具备硬编码权重的线性模型。经过一段时间后,随机梯度下降(SGD)被创造出来学习权重,尽管梯度本身还没有作为构造块。一开始 SGD 存在一些缺陷,但它很快就进行了迭代修复,并开始了对预测和学习算法的一系列改进。
在谷歌的实验案例中,这一搜索过程发现了一些已有的有用概念。最后,该方法构建的模型优于具有类似复杂性的手动设计模型。
进化实验的流程。从左到右按时间顺序,谷歌研究者发现算法变得越来越复杂,也越来越准确。
进化后的算法
上图描述了由该方法生成的最佳进化算法。最终得到的算法包含了多项技术,如将噪声注入作为数据增强方式、双线性模型、梯度归一化和加权平均等。对基线的改进也可以迁移到搜索中未用到的数据集。
谷歌在论文中介绍了进化后代码的不同行对这些技术的实现,并通过控制变量研究验证了它们的价值。
通过更多的实验,研究者发现,控制进化过程评估算法适用性的任务能够指导进化搜索。
例如,当数据量减少时,noisy ReLU 就会出现。当训练步骤减少时,学习率有所衰减,从而加快收敛速度。
这类有针对性的发现很重要。自动发明工具的机器造出锤子或针是件很有趣的事,但是如果它能在你展示钉子后造出锤子,展示线后造出针,这不是更有趣吗?
这就像刚才提到的,当数据量较少时(「钉子」),noisy ReLU 出现(「锤子」);当训练步骤减少时(「线」),学习率出现下降(「针」)。
结论
谷歌这项研究还比较初级,尚未进化出新的算法。但是进化后得到的算法能够超越搜索空间中存在的简单神经网络,这一点已经足够振奋人心。目前,搜索进程需要大量计算。未来几年,随着硬件设备的发展,搜索方法变得更加高效,搜索结果或许会有所改进。
原文链接:https://ai.googleblog.com/2020/07/automl-zero-evolving-code-that-learns.html
谷歌AutoML新进展,进化算法加持,仅用数学运算自动找出ML算法相关推荐
- 未来dna计算机,DNA计算机领域重要进展:DNA模拟电路进行数学运算
原标题:DNA计算机领域重要进展:DNA模拟电路进行数学运算 杜克大学毕业生 Tianqi Song 和计算机科学教授 John Reif (图片来源于:John Joyner) 引言 杜克大学研究人 ...
- 对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的边。说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度
对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的 边.说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度
- 用数学运算实现数据无损压缩的算法
用数学运算实现数据无损压缩的算法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&quo ...
- 算法很美-位运算-找出落单的那个数
上级目录:算法很美 1. 题目 一个数组里除了某一个数字之外,其他的数字都出现了两次.请写程序找出这个只出现一次的数字. 2. 异或思路 异或的运算是A ^ A=0,也就是说偶数个相同的元素异或,结果 ...
- 算法期中1007. 怪兽训练 (找出有向图中所有的强连通分量的Kosaraju算法)
Description 贝爷的人生乐趣之一就是约战马会长. 他知道马会长喜欢和怪兽对决,于是他训练了N只怪兽,并对怪兽用0到N-1的整数进行编号. 贝爷训练怪兽的方式是让它们一对一互殴. 两只怪兽互殴 ...
- 算法:如何在100个人中找出有且仅有的一位确诊新冠的人
问题:假如现在有100个人,有一个人感染了新冠肺炎,问只检测一轮(即统一去做,每个人可以做多次,但是不能等到检测结果出来再去做)的情况下,如果用最少的试剂定位到感染者? 答案:对1~100名进行二进制 ...
- java高效率素数算法_《Core Java》里给出的算法,效率比较高。 统计2000000以内的所有的素数。...
1.[代码]Sieve.java import java.util.*; /** This program runs the Sieve of Erathostenes benchmark. It c ...
- 【咕嘎文本对比助手】如何两份手机号或文本对比去重,新旧两批号码如何快速的对比重复,找出重复和不重复的部分,单个文件如何找出重复,单个文件如何找出不重复下面关于五种逻辑做详细解答
在手机号码整理过程中,群发短信还有大数据分析等整理文件的过程中经常有号码重复 有人说excel有两列数据,怎么用vlookup查找两列数据是否有重复值?在SQL语句中就很好处理了not in 就完事了 ...
- 只会高中数学运算就能发现算法?Google开源的AutoML-Zero有多厉害
译者 | 刘畅 出品 | AI科技大本营(ID:rgznai100) 机器学习研究,已经在多个方面都取得了进步,包括模型结构和优化方法等.而使此类研究自动化的工作(称为AutoML)也有重大进展.这一 ...
最新文章
- mysql error 1442_MySQL错误代码为err[1442]的解决总结_MySQL
- android 之Activity间的相互跳转(通过intent构造函数)
- 机器学习算法一览(附python和R代码)
- flutter 导航页面转换动画效果
- maven web项目不能创建src/main/java等文件夹的问题
- mysql集群需要几个ip_rac集群3组机器,scan到底需要几个IP?
- JavaScript创建对象的三种方式之利用new object创建对象及使用方法(2)
- Ubuntu 11.04 下安装配置 JDK 7
- canvas 从ondraw中获取_C# 在PDF中绘制多样风格的文本
- 怎么查询共享使用人_为什么使用“共享充电宝”的人越来越少?
- 京东联盟高级API - 京东联盟商品类目查询接口
- 最近选购MP3而有感便携追求音质的一些心得
- AUTOCAD——三种修剪方式
- 详细描述Tomcat体系结构(图文并茂)
- 基于java的简单的(即时通讯)聊天程序
- 乌镇·Conflux CTO伍鸣:让公链的“不可能三角”成为可能
- 聚观早报 | 苏宁易购入驻美团外卖;今日头条接入抖音电商
- 微信公众号与小程序(二十——关于我如何莫名其妙建了一个电影搜索机器人这件事)
- asp.net销售管理系统的设计和实现
- 国内外WLAN室内定位发展重点文献
热门文章
- 自己动手设计RESTful API
- ​谷歌大神 Jeff Dean 领衔,万字展望5大 AI 趋势
- 从最强AI算力到“元脑”2.0,智算加速产业变革
- 又一起“删库”:链家程序员怒删公司 9TB 数据,被判 7 年
- 李开复对话Yoshua Bengio:AI技术的下一个突破
- 快速搭建对话机器人,就用这一招!
- 简单粗暴上手TensorFlow 2.0,北大学霸力作,必须人手一册!
- 速度超Mask RCNN四倍,仅在单个GPU训练的实时实例分割算法 | 技术头条
- 谷歌开源张量网络库TensorNetwork,GPU处理提升100倍!
- Erlang之父给程序员的两点忠告 | 缅怀