AutoML初探 -- 上

前两天李沐大神团队发了一条关于AutoGluon的朋友圈“头发的生长剂”,成功引起我了我注意力,在人心惶惶的公司里坐着也是坐着,顺手学习了一下AutoML。
(吐槽一下,现在觉得医护工作者,消防员,教师才是真正值得尊敬的人,资本家不值得尊敬和同情,资本永远都是嗜血的)

这篇文章分两部分,上篇介绍AutoML原理,下篇实验对比。


关于AutoML

AutoML的作用其实就像字面意思一样,自动的机器学习。主要目的就是减少人工干预建立机器学习通道。而目前机器学习人工干预主要有三块工作:

  • 特征工程
  • 搭建模型
  • 模型调优

自动特征工程(Automated Feature Enginnering, Auto FE)

自动特征工程这一块其实没什么好说的,因为要实现一个泛化能力很强的特征工程模型,目前还做不到。不同的数据集都需要人工来发掘特征,很难达到自动化。 现在能做到的是做一些特征增强的工作,简单的特征选择,降维,生成,编码等。

自动模型调优

模型调优就是参数的优化(Hyperparameter Optimization, HPO),早年间的grid search还是很好用,这里还需要做的优化是优化器的优化,说成把这些方法排列组合也不为过。

自动搭建模型

自动搭建模型其实就是NAS(Neural Architecture Search,神经网络架构搜索),这一块是AutoML的主要发力方向。NAS的目标是搜索出在一数据集上表现最好的神经网络架构。就像搭积木一样,不断试错,把积木搭的又高又稳。
Google Brain的论文《Learning Transferable Architectures for Scalable Image Recognition》,里面总结了图像识别用到的神经网络的“好用的积木”其实就几个:

AutoML初探 -- 上

怎么把这几个模块进行组合,需要一个算法。
NAS算法用一个RNN作为控制器,采样不同结构的子网络,然后训练这些子网络,根据其在Validation Set上的效果,反馈给RNN进行更新。


AutoML初探 -- 上

但是NAS最大的问题是太慢了,在ImageNet这种大型数据集上训练是非常困难的(因为gpu的烧钱啊),所有要设计合理的搜索空间。所以提出了两个假设。
第一个假设,网络在结构相同的较小训练集上训练好了,迁移到大的数据集上也有好的效果;
第二个假设,NAS训练小的convolutional cell的结构,然后重复堆叠这些convolutional cell搭建更深的网络取得更好的效果。

第一个假设在深度学习里显然是有效果的。第二个假设只需要两种convolutional cell:Normal Cell和Reduction Cell就可完成,然后选择了当时最先进的两种模型,CIFAR-10和ImageNet作为整个神经网络结构。


AutoML初探 -- 上

一旦这个结构确定下来,剩下的任务就是预测Normal Cell和Reduction的结构。具体的训练过程可以再看看论文,最后训练出来最好的cell结构是这样的。


AutoML初探 -- 上

这个模型是在500块Nvidia P100s上,花了4天时间训练出来的,大概算了一下应该要4万刀。。。

这么个烧钱的玩意显然是不能推广开来的,2017年还是Google在论文《Progressive Neural Architecture Search》提出了PNAS(渐进式神经架构搜索),不是上来就抓一个模块(cell)就开始训练,而是先从简单的cell开始,逐渐向复杂的cell搜索它的结构。这种PANS方法比原始的NAS效率高5到8倍,也便宜了许多。

为了进一步提升效率,google又提出了ENAS,作者假设NAS的计算瓶颈在于,需要把每个模型到收敛,但却只是为了衡量测试精确度,然后所有训练的权重都会丢弃掉。ENAS算法强制将所有模型的权重共享,而非从零开始训练模型到收敛,我们在之前的模型中尝试过的模块都将使用这些学习过的权重。因此,每次训练新模型是都进行迁移学习,收敛速度也更快。

总结

在网上查了资料之后,发现AutoML,其实目前还是鸡肋。 因为对于简单的任务,NAS效果基本略好于人类炼丹师水平,但对于复杂的任务,NAS又变成人工智障水平,且并不会减少多少工作量。所以并不看好短期内AutoML能在工业界有什么大的作为。