谷歌开源集成学习工具AdaNet:2017年提出的算法终于实现了

晓查 编译整理
量子位 报道 | 公众号 QbitAI

640?wx_fmt=png

最近,谷歌在GitHub上发布了用TensorFlow实现的AutoML框架——AdaNet,它改进了集成学习的方法,能以最少的专家干预实现自动习得高质量模型。

谷歌AI研究团曾在2017年的ICML上提出了AdaNet:人工神经网络的自适应结构性学习(Adaptive Structural Learning of Artificial Neural Networks)。AdaNet建立在最近的强化学习和基于进化的AutoML成果基础之上,在提供学习保证时能做到快速灵活。

谷歌为何要推出AdaNet?

AdaNet提供了一个通用框架,不仅可以学习神经网络架构,还可以学习集合以获得更好地模型。

集成学习被广泛用于神经网络以实现最先进的性能。但是由于训练时间太长,导致它们在实践中使用不多,而且ML模型候选者做选择需要其领域专业知识。

但随着计算能力提高和专用深度学习硬件(如TPU)广泛被采用,机器学习模型变得越来越大,集成学习将变得更重要。

现在,谷歌的AdaNet可以自动搜索神经架构,并学会将最优的架构组合成一个高质量的模型。

AdaNet有何优点?

AdaNet易于使用,并能创建高质量的模型,为ML从业人员节省了用于选择最佳神经网络架构的时间,实现了将学习神经架构作为子网络集合的自适应算法。AdaNet能够添加不同深度和宽度的子网络,创建多样化的集合,并通过参数数量来改进性能。

640?wx_fmt=gif

【图】AdaNet增加集合中的神经网络,每一次迭代中,AdaNet将评估候选子网络的损失,并将最优结果放入下一次迭代中

AdaNet实现了TensorFlow Estimator接口,通过封装训练、评估、预测和服务导出,大大简化了机器学习编程。

它集成了开源工具,如TensorFlow Hub模块,TensorFlow模型分析和谷歌云的Hyperparameter Tuner。

AdaNet还支持分布式训练,可显著缩短训练时间,并使用CPU和GPU等加速器进行线性扩展。

实测效果:

640?wx_fmt=png

【图】AdaNet在CIFAR-100数据集上的表现:蓝线为训练集的精确度,红线为测试集的表现,绿线和灰线是加入子网络之前的精确度。

AdaNet还能与TensorFlow中的可视化工具TensorBoard无缝集成,以监控子网络训练、集合的组合和性能。当AdaNet完成训练后,它会导出一个可以使用TensorFlow Serving部署的SavedModel。

学习保证

构建神经网络集合有以下几个挑战:最佳子网络架构需要考虑的是什么?最好是重复使用相同的架构还是鼓励多样性?

虽然具有更多参数的复杂子网络会在训练集上有更好的表现,但由于其更大的复杂性,它们可能无法推广到其他数据上。这些挑战源于评估模型性能。

我们可以从训练集中分出的保留集合上评估性能,但这样做会减少可用于训练神经网络的样本数量。

AdaNet的方法平衡了集合在训练集上的表现和其推广到测试集的性能上的矛盾,只有改善整体训练损失而不影响其测试能力时,集合才包括候选子网络。这保证了:

  • 通过训练误差和复杂性限制集合的泛化误差。

  • 通过优化此目标,可以直接最小化此限制。

优化此目标的一个实际好处是,它降低了选择候选子网络加入集合时对保留数据集的需求。另一个好处是,可以使用更多的训练数据来训练子网络。

扩展

谷歌认为,为研究和生产提供有用的AutoML框架的关键是不仅要提供合理的默认值,还要允许用户尝试自己的子网络/模型定义。因此,机器学习研究人员,从业者和爱好可以使用高级TensorFlow API(如tf.layers)定义他们自己的AdaNet类adanet.subnetwork.Builder。

已经在其系统中集成了TensorFlow模型的用户可以轻松地将他们的TensorFlow代码转换到AdaNet子网络,并使用adanet.Estimator提高模型性能,同时获得学习保证。 AdaNet将探索他们定义的候选子网络搜索空间,并学习整合子网络。

谷歌选取了NASNet-A CIFAR架构的一个开源实现,将其转换为子网络,并在八次AdaNet迭代后改进了CIFAR-10最优结果。此外,AdaNet训练的模型相比NASNet-A使用更少的参数:

640?wx_fmt=png

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

用户还可以通过扩展adanet.subnetwork.Generator类,来完全定义要探索的候选子网络的搜索空间。这允许用户根据可用硬件来增加或减少搜索空间。

子网络的搜索空间可以简单到使用不同的随机种子复制相同的子网络配置,训练具有不同超参数组合的子网络,并让AdaNet选择包含在最终集合中的子网络。

AdaNet是一个正在进行的研究项目,页面中已经包含了一些使用密集层和卷积的工作示例,来帮助用户入门。 谷歌欢迎广大用户给这个项目做出贡献。

安装方法

AdaNet项目要求TensorFlow版本不低于1.7

$ git clone https://github.com/tensorflow/adanet && cd adanet

在安装AdaNet之前,还需要安装Bazel

cd adanet
$ bazel test -c opt //...

安装完成后,你就可以直接使用AdaNet啦!

import adanet

附录:

项目地址
https://github.com/tensorflow/adanet

谷歌论文地址
https://arxiv.org/pdf/1607.01097.pdf

加入社群

量子位AI社群开始招募啦,欢迎对AI感兴趣的同学,在量子位公众号(QbitAI)对话界面回复关键字“交流群”,获取入群方式;


此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。


进专业群请在量子位公众号(QbitAI)对话界面回复关键字“专业群”,获取入群方式。(专业群审核较严,敬请谅解)

活动策划招聘

量子位正在招聘活动策划,将负责不同领域维度的线上线下相关活动策划、执行。欢迎聪明靠谱的小伙伴加入,并希望你能有一些活动策划或运营的相关经验。相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

640?wx_fmt=jpeg

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值