查看原文
其他

谷歌发布AdaNet,快速灵活的AutoML工具,帮助开发者构筑强大集成学习模型

52CV君 我爱计算机视觉 2019-06-22

点击我爱计算机视觉标星,更快获取CVML新技术



集成学习可以有效利用不同机器学习算法,提高最终模型精确度,在Kaggle比赛中被广泛应用。



训练集成学习模型计算量浩大,参数众多,虽然随着GPU/TPU的出现一定程度上降低了问题的难度,但对开发者仍是成本极高的。


可喜的是,谷歌刚刚发布了AdaNet,这是一个基于TensorFlow的轻量级框架,可以通过最少的专家干预自动学习高质量的模型。 AdaNet以谷歌最新的强化学习和基于进化算法的AutoML为基础,在提供学习保证的同时实现快速灵活的模型构建。而且,AdaNet是一个通用框架,它不仅可以学习神经网络架构,还可以模型集成以获得更好的模型。


AdaNet易于使用,可以构筑高质量的模型,帮助机器学习从业者节省选择最佳神经网络架构的时间,并能够自适应实现将子网络集成学习为新的网络架构的方法。 

AdaNet能够添加不同深度和宽度的子网络,以创建多样化的集成,并可以在参数数量和模型性能之间方便做出权衡。


AdaNet自适应地增长了神经网络的集合。在每次迭代中,它测量每个候选者的集成损失,并选择最佳的一个进入下一次迭代。


快速且易于使用

AdaNet实现了TensorFlow Estimator接口,通过封装训练、评估、预测和模型导出,大大简化了机器学习编程。它集成了开源工具,如 TensorFlow Hub modules, TensorFlow Model Analysis, 和 Google Cloud’s Hyperparameter Tuner。分布式训练的支持可显著缩短训练时间,并能与可用的CPU和加速器(例如GPU)进行线性扩展。




AdaNet在CIFAR-100上训练结果,x轴代表训练step数,y轴代表精度。蓝线是训练集上的准确度,红线是测试集上的性能。每隔一百万step就加入一个新的子网络,最终提高整体的性能。灰线和绿线是在添加新子网之前的精度。


AdaNet的学习保证Learning Guarantees

构建神经网络集成有几个挑战:比如要考虑的最佳子网架构是什么?是否要重用相同的架构还是鼓励模型多样性?虽然具有更多参数的复杂子网将倾向于在训练集上表现更好,但由于其更大的复杂性,推广性能可能不好。这些挑战源于如何评估模型性能。可以通过将训练集样本分割来评估,但这样做会减少可用于训练神经网络的样本数量。


AdaNet的做法(源自论文“AdaNet: Adaptive Structural Learning of Artificial Neural Networks” at ICML 2017)是为了优化平衡集合在训练集上的表现及其推广到看不见的数据的能力之间的权衡的目标。直觉上是指只有当新加入的子网络改善整体训练损失而不会影响其推广能力时才将其加入。

这项学习保证意味着:

1)集合的泛化误差受其训练误差和模型复杂性的限制。

2)通过优化此目标,直接最小化此限制。

优化此目标的一个实际好处是,它不需要训练样本集专门划出一部分子集来评估选择要添加到集合中的候选子网,况且可以使用更多的训练数据来训练子网。

要了解更多信息,请浏览有关AdaNet优化目标的教程:

https://github.com/tensorflow/adanet/tree/v0.1.0/adanet/examples/tutorials/adanet_objective.ipynb


用户自定义扩展

AdaNet不仅提供了常用的模型架构供研究人员使用,同时允许用户将自己定义的网络加入进来,用户可以使用adanet.subnetwork.Builder加入使用TensorFlow API(如tf.layers)定义的网络架构,定义自己的AdaNet。


使用TensorFlow构建模型的用户可以轻松将TensorFlow代码转换为AdaNet子网,使用adanet.Estimator提高模型性能,同时获得学习保证。AdaNet将探索他们定义的候选子网的搜索空间,并学习整合子网。



在这个例子中,使用了NASNet-A CIFAR架构的开源实现,将其转换为子网,在八次AdaNet迭代后对CIFAR-10最先进的结果进行了改进。不仅提高进行而且新模型使用的参数更少。


用户还可以使用tf.contrib.estimator.Heads将自己的自定义损失函数用作AdaNet目标函数的一部分,以便训练回归,分类和多任务学习问题。


用户还可以通过扩展adanet.subnetwork.Generator类来定义要探索的候选子网的搜索空间,根据可用硬件增加或减少搜索空间。子网的搜索空间可以简单到使用不同的随机种子复制相同的子网配置,或者训练具有不同超参数组合的数十个子网,让AdaNet选择包含在最终集成模型中的子网。


AdaNet代码主页:

https://github.com/tensorflow/adanet

AdaNet教程:

https://github.com/tensorflow/adanet/tree/v0.1.0/adanet/examples/tutorials


总之一句话,要构筑神经架构的集成学习,就选AdaNet!


AdaNet会成为研究社区和Kaggle竞赛的新宠吗?让我们拭目以待~


长按关注我爱计算机视觉

【点赞与转发】就是一种鼓励

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存