谷歌宣布开源AdaNet!
集成学习是结合不同机器学习(ML)模型预测的艺术,广泛用于神经网络以实现最先进的性能,受益于丰富的历史和理论保证,以便在诸如Netflix和各种Kaggle比赛等挑战中取得成功,获得奖品。然而,由于训练时间长,它们在实践中使用不多,而且ML模型候选者选择需要其自己的领域专业知识。但随着计算能力和专用深度学习硬件(如TPU)变得更容易获得,机器学习模型将变得更大,系统集成将变得更加突出。现在,想象一个工具可以自动搜索神经架构,并学会将最好的架构组合成一个高质量的模型。
今天,我们很高兴能够分享AdaNet,这是一个基于TensorFlow的轻量级框架,可以通过最少的专家干预自动学习高质量的模型。AdaNet以我们最近的强化学习和基于进化的AutoML努力为基础,在提供学习保证的同时快速灵活。重要的是,AdaNet提供了一个通用框架,不仅可以学习神经网络架构,还可以学习集成以获得更好的模型。
AdaNet易于使用,并且可以创建高质量的模型,为ML从业者节省了通常用于选择最佳神经网络架构的时间,实现了将神经架构学习为子网集合的自适应算法。AdaNet能够添加不同深度和宽度的子网,以创建多样化的集合,并通过参数数量来改善性能。
AdaNet自适应地增长了神经网络的集合。在每次迭代中,它测量每个候选者的集合损失,并选择最佳的一个
快速且容易使用
AdaNet实现了TensorFlow Estimator接口,通过封装训练、评估、预测和服务导出,大大简化了机器学习编程。它集成了开源工具,如TensorFlow Hub模块、TensorFlow模型分析和Google Cloud的Hyperparameter Tuner。分布式训练支持可显著缩短训练时间,并可与可用的CPU和加速器(例如GPU)进行线性扩展。
AdaNet在CIFAR-100上每列车步(X轴)的精度(y轴)。蓝线是训练集上的准确度,红线是测试集上的性能。一个新的子网络开始训练每一百万个步骤,并最终提高整体的性能。在添加新子网之前,灰线和绿线是整体的精确度。
由于TensorBoard是用于在训练期间可视化模型度量的最佳TensorFlow功能之一,因此AdaNet可与其无缝集成,以监控子网络训练、集合组合和性能。当AdaNet完成训练后,它会导出一个可以使用TensorFlow服务部署的SavedModel。
学习保证
构建神经网络集合有几个挑战:要考虑的最佳子网架构是什么?是否最好重用相同的架构或鼓励多样性?虽然具有更多参数的复杂子网将倾向于在训练集上表现更好,但由于其更大的复杂性,它们可能不会推广到看不见的数据。这些挑战源于评估模型性能。我们可以评估来自训练集的保持集分割的性能,但这样做会减少可用于训练神经网络的示例数量。
相反,AdaNet的方法(在ICML 2017中的“AdaNet:人工神经网络的自适应结构学习”中提出)是为了优化平衡集合在训练集上的表现与其推广到看不见的数据的能力之间的权衡的目标。直觉是指整体只有当它改善整体训练损失而不是影响其概括能力时才包括候选子网。这保证了:
集合的泛化误差受其训练误差和复杂性的限制。
通过优化此目标,我们直接最小化此限制。
优化此目标的一个实际好处是,它不需要保留集来选择要添加到集合中的候选子网。这样做的另一个好处是可以使用更多的训练数据来训练子网。要了解更多信息,请浏览有关AdaNet目标的教程。
(https://github.com/tensorflow/adanet/blob/v0.1.0/adanet/examples/tutorials/adanet_objective.ipynb)
可扩展
我们认为,为研究和生产使用提供有用的AutoML框架的关键是不仅要提供合理的默认值,还要允许用户尝试自己的子网/模型定义。因此,机器学习研究人员,从业者和爱好者被邀请使用高级TensorFlow API(如tf.layers)定义他们自己的AdaNet adanet.subnetwork.Builder。
已经在其系统中集成了TensorFlow模型的用户可以轻松地将他们的TensorFlow代码转换为AdaNet子网,并使用adanet.Estimator提高模型性能,同时获得学习保证。AdaNet将探索他们定义的候选子网的搜索空间,并学习整合子网。例如,我们采用了NASNet-A CIFAR架构的开源实现,将其转换为子网,并在八次AdaNet迭代后对CIFAR-10最先进的结果进行了改进。此外,我们的模型使用更少的参数实现了这个结果:
2018年Zoph等人提出的NASNet-A模型与AdaNet学习在CIFAR-10上结合NASNet-A子网络的性能。
还邀请用户将自己的自定义损失功能用作AdaNet目标的一部分,以便训练回归、分类和多任务学习问题。
用户还可以通过扩展adanet.subnetwork.Generator类来完全定义要探索的候选子网的搜索空间。这允许他们根据可用硬件增加或减少搜索空间。子网的搜索空间可以简单到使用不同的随机种子复制相同的子网配置,训练具有不同超参数组合的数十个子网,并让AdaNet选择包含在最终集合中的子网。