AutoML是我一直很关注的领域,也实际设计过相关的很多功能,但是目前AutoML在商业化层面落地的还不多。一个关键因素是AutoML现在在Feature生成或者调参方面有一些应用,但是这些应用更多地是建模的辅助。目前的AutoML技术很难实现从0构建一个算法。如果AutoML希望大规模的应用,一定要在NAS,也就是网络探索上有建树。这也是Google最新发表的这篇文章的原因,他提出AutoML-Zero,从零起步去构建算法。接下来作者会给大家分享下一些看法。
这篇论文比较有意思的一点是Google很好地定义了AutoML的一个流程。它把机器学习算法生成的流程拆分成了,Setup、Predict、Learn。如下图所示:
Setup:算法结构的初始化
Predict:模型的预测和验证
Learn:算法的训练
定义好流程之后就要看如何做网络结构的探索。这里面巧妙地运用了RandomSearch和进化式搜索。
在Setup阶段首先要构建一个海量的模型库,通过RandomSearch随机找一个模型作为初始。接着进入Predict阶段,在Predict阶段内置了一个预测数据集,可能是Cifar10之类的。然后用初始模型做预测,看效果。
将其中比较好的效果的模型保留,剩下的删除。接着在比较好的模型基础上增添一些op,比如增加一些正弦因子,如下图所示:
然后在Learn阶段去按照这个NAS结构构建新模型。
这样就构成了一个进化式的搜索体系,不断地生成新的网络结构,然后基于效果好的网络结构向上进化,不断递归这个流程,如下图所示:
整体流程大概是上面介绍的这样。
这篇论文还是比较偏学术,其实是给大家构建了一套NAS的流程体系,但是这个流程其实要依赖海量计算能力才可能实现。虽然论文在后面花了十几页的篇幅证明可行性,但是我个人还是觉得这个方案流程是没问题的,但是实际落地可能有很多问题要解决。比如随机增加算子,会不会造成大量的报错,会不会浪费大量计算资源,所以真正的效果还需要观望。