近年来,机器学习取得了巨大的成功,这些成功得益于机器学习算法的不断优化,例如深度神经网络。深度神经网络在不断发现问题和解决问题的过程中又推动了 AutoML 的发展。到目前为止,AutoML 一直致力于通过组合复杂的手工设计组件来构建解决方案。一个典型的例子是神经架构搜索,这是一个子领域,在这个子领域中,人们可以从复杂的层(例如卷积、批标准化和 dropout)自动构建神经网络,这也是许多研究的主题。
在 AutoML 中使用的这些手工设计的组件的另一种方法是从头开始搜索整个算法,这很有挑战性。因为它需要探索广泛而稀疏的搜索空间,但它有很大的潜在好处:它不会偏向我们已知的内容,而且有可能发现新的、更好的机器学习架构。
打个比方,我们可以这样来描述 AutoML:如果一个人要建造一座房子,那么他从零开始动手,要比只使用预制板建造房子有更多的灵活性或改进的潜力。然而,对房屋的设计却是极为艰难的一个步骤,因为与预制的整个房间的组合相比,将砖瓦和砂浆结合起来的可能方法要多得多。因此,早期对算法从头开始学习的研究主要集中在算法的某一方面,例如学习规则,以此来减少搜索空间和所需的计算量。自 20 世纪 90 年代初以来该问题就没有被重新研究过,直到现在。
我们最近将在 ICML 2020 上发表的论文,论证了从零开始成功地进化机器算法是有可能的。我们提出的方法,称为 AutoML_Zero,从空程序开始,仅使用基本的数学运算作为构建块,应用进化方法自动找到完整机器学习算法的代码。针对小图像分类问题,我们的方法重新发现了基本的机器学习技术,如带有反向转播的二层神经网络、线性回归等,这些都是多年来研究人员发明的。这一结果证明了自动发现更多新的机器学习算法来解决未来更难的问题的可行性。
论文地址: https://arxiv.org/abs/2003.03384
GitHub 地址: https://github.com/google-research/google-research/tree/master/automl_zero
我们使用经典进化方法的一种变体来搜索算法空间。自 20 世纪 80 年代以来,这些方法在发现计算机程序方面已被证明是有用的。它们的简单性和可扩展性使其特别适合于学习算法的发现。
在我们的例子中,population 是用空程序初始化的。然后,它在重复循环中进化,以产生越来越好的学习算法。在每个周期中,两个(或更多)随机模型相互竞争,最精确的模型成为父模型。亲本克隆自身产生一个子代,子代会发生变异。也就是说,子代码是以随机的方式修改的,这可能意味着,例如,在代码中任意插入、删除或修改一行。然后在图像分类任务中对变异算法进行评估。
population 用空程序进行初始化。历经许多代之后,我们看到一个更进化的 population,它的两个算法相互竞争。最准确的算法将赢得生“孩子”的机会。经过许多这样的事件之后,最终的 population 将包含高度精确的分类器。
与以前的 AutoML 工作相比,我们的 AutoML-Zero 设置使得搜索空间非常稀疏,在 10^{12} 个候选者中可能只有一个精确的算法。这是由于提供给算法的构建块的粒度造成的,这些构建块只包括变量赋值、加法和矩阵乘法等基本操作。在这样的环境中,随机搜索无法在合理的时间内找到解决方案,然而根据我们的测量,进化速度可以加快数万倍。我们将搜索分布在偶尔交换算法的多台机器上(类似于现实生活中的迁移。)我们还构建了小的代理分类任务,用于评估每个子算法,并使用高度优化的代码来执行这个评估。
尽管如此稀疏,但随着时间的推移,进化搜索会发现更复杂、更有效的技术。最初,出现了最简单的算法,该算法用硬编码的权重表示线性模型。随着时间的推移,该算法发明了随机梯度下降法(SGD)来学习权重,尽管梯度本身并没有作为构建块提供。虽然一开始存在缺陷,但 SGD 的问题得到了相对较快的解决,开始了对预测和学习算法进行一系列改进。在我们的简单场景中,该过程发现了几个已知对研究社区有用的概念。最后,我们的方法成功地构建了一个模型,性能优于类似复杂度的手工设计的模型。
进化实验的进展,随着时间的推移,从左到右,我们看到算法变得更加复杂,更加正确。
上图包含了由我们的方法产生的最佳进化算法。最终的算法包括数据增强、双线性模型、梯度归一化和权重平均等噪声注入技术,并且对基线的改进也转移到搜索过程中未使用的数据集上。我们的论文描述了进化代码的不同行是如何实现这些技术的,并通过消融研究验证了它们的价值。
通过更多的实验,我们证明了通过控制“栖息地”(即进化过程评估算法适应度的任务)来引导进化搜索是可行的。例如,当我们减少数据量时,出现了有噪声的 ReLU,这有助于正则化。或者,当我们减少训练步数时,我们会见证学习率衰减的出现,从而实现更快的收敛。这类有针对性的发现很重要:如果自动工具发明器能想出一把锤子或一根针,事情可能会很有趣;但如果你给它看一些钉子时,它会想到一把锤子,给它看一些线时,它想出一根针,那就更有趣了。通过这样的类比,在我们的工作中,当存在少量数据(“钉子”)时,就会发现有噪声的 ReLU(“锤子”),而当存在少量训练步骤时,学习率就会下降。
我们认为这只是初步工作。我们还没有从根本上进化出新的算法,但令人鼓舞的是,进化后的算法可以超越搜索空间中存在的简单神经网络。目前,搜索过程需要大量的计算。随着未来几年可用硬件规模的扩大和搜索方法的效率提高,搜索空间可能会变得更具包容性,搜索结果也会得到改善。随着我们对 AutoML-Zero 的进一步了解,我们对发现新的机器学习算法的前景感到兴奋。
作者介绍:
Esteban Real,主任软件工程师。Chen Liang,软件工程师,供职于 Google Research、Brain Team。
原文链接:
https://ai.googleblog.com/2020/07/automl-zero-evolving-code-that-learns.html
领取专属 10元无门槛券
私享最新 技术干货