谷歌开源了基于 TensorFlow 的轻量级框架 AdaNet,该框架可以使用少量专家干预来自动学习高质量模型。据介绍,AdaNet 在谷歌近期的强化学习和基于进化的 AutoML 的基础上构建,快速灵活同时能够提供学习保证(learning guarantee)。重要的是,AdaNet 提供通用框架,不仅能用于学习神经网络架构,还能学习集成架构以获取更好的模型。

  • 相关论文: AdaNet: Adaptive Structural Learning of Artificial Neural Networks
  • 论文地址:https://arxiv.org/pdf/1607.01097.pdf

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

  • 教程 notebook:https://github.com/tensorflow/adanet/tree/v0.1.0/adanet/examples/tutorials

结合不同机器学习模型预测的集成学习在神经网络中得到广泛使用以获得最优性能,它从其悠久历史和理论保证中受益良多,从而在 Netflix Prize 和多项 Kaggle 竞赛等挑战赛中取得胜利。但是,因其训练时间长、机器学习模型的选择要求领域专业知识,它们在实践中并不那么常用。而随着算力、深度学习专用硬件(如 TPU)的发展,机器学习模型将越来越大,集成技术也将越发重要。现在,想象一个工具,它能够自动搜索神经架构,学习将最好的神经架构集成起来构建高质量模型。

刚刚,谷歌发布博客,开源了基于 TensorFlow 的轻量级框架 AdaNet,该框架可以使用少量专家干预来自动学习高质量模型。AdaNet 在谷歌近期的强化学习和基于进化的 AutoML 的基础上构建,快速灵活同时能够提供学习保证(learning guarantee)。重要的是,AdaNet 提供通用框架,不仅能用于学习神经网络架构,还能学习集成架构以获取更好的模型。

AdaNet 易于使用,能够创建高质量模型,节省 ML 从业者在选择最优神经网络架构上所花费的时间,实现学习神经架构作为集成子网络的自适应算法。AdaNet 能够添加不同深度、宽度的子网络,从而创建不同的集成,并在性能改进和参数数量之间进行权衡。

AdaNet 适应性地增长集成中神经网络的数量。在每次迭代中,AdaNet 衡量每个候选神经网络的集成损失,然后选择最好的神经架构进入下一次迭代。

快速易用

AdaNet 实现了 TensorFlow Estimator 接口,通过压缩训练、评估、预测和导出极大地简化了机器学习编程。它整合如 TensorFlow Hub modules、TensorFlow Model Analysis、Google Cloud』s Hyperparameter Tuner 这样的开源工具。它支持分布式训练,极大减少了训练时间,使用可用 CPU 和加速器(例如 GPU)实现线性扩展。

AdaNet 在 CIFAR-100 上每个训练步(x 轴)对应的准确率(y 轴)。蓝线是训练集上的准确率,红线是测试集上的性能。每一百万个训练步开始一个新的子网络,最终提高整个集成网络的性能。灰色和绿色线是添加新的子网络之前的集成准确率。

TensorBoard 是 TensorFlow 最好的功能之一,能够可视化训练过程中的模型指标。AdaNet 将 TensorBoard 无缝集成,以监控子网络的训练、集成组合和性能。AdaNet 完成训练后将导出一个 SavedModel,可使用 TensorFlow Serving 进行部署。

学习保证

构建神经网络集成存在多个挑战:最佳子网络架构是什么?重复使用同样的架构好还是鼓励差异化好?虽然具备更多参数的复杂子网络在训练集上表现更好,但也因其极大的复杂性它们难以泛化到未见过的数据上。这些挑战源自对模型性能的评估。我们可以在训练集分留出的数据集上评估模型表现,但是这么做会降低训练神经网络的样本数量。

不同的是,AdaNet 的方法是优化一个目标函数,在神经网络集成在训练集上的表现与泛化能力之间进行权衡。直观上,即仅在候选子网络改进网络集成训练损失的程度超过其对泛化能力的影响时,选择该候选子网络。这保证了:

  1. 集成网络的泛化误差受训练误差和复杂度的约束。

  2. 通过优化这一目标函数,能够直接最小化这一约束。

优化这一目标函数的实际收益是它能减少选择哪个候选子网络加入集成时对留出数据集的需求。另一个益处是允许使用更多训练数据来训练子网络。

AdaNet 目标函数教程:https://github.com/tensorflow/adanet/blob/v0.1.0/adanet/examples/tutorials/adanet_objective.ipynb

可扩展

谷歌认为,创建有用的 AutoML 框架的关键是:研究和产品使用方面不仅能够提供合理的默认设置,还要让用户尝试自己的子网络/模型定义。这样,机器学习研究者、从业者、喜爱者都能够使用 tf.layers 这样的 API 定义自己的 AdaNet adanet.subnetwork.Builder。

已在自己系统中融合 TensorFlow 模型的用户可以轻松将 TensorFlow 代码转换到 AdaNet 子网络中,并使用 adanet.Estimator 来提升模型表现同时获取学习保证。AdaNet 将探索他们定义的候选子网络搜索空间,并学习集成这些子网络。例如,采用 NASNet-A CIFAR 架构的开源实现,把它迁移到一个子网络,经过 8 次 AdaNet 迭代后提高其在 CIFAR-10 上的当前最优结果。此外,获得的模型在更少参数的情况下获得了以下结果:

在 CIFAR-10 数据集上,NASNet-A 模型的表现 vs 结合多个小型 NASNet-A 子网络的 AdaNet 的表现。

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

用户也可以通过拓展 adanet.subnetwork.Generator 类别,完全定义要探索的候选子网络搜索空间。这使得用户能够基于硬件扩大或缩小搜索空间范围。子网络的搜索空间可以简单到复制具备不同随机种子的同一子网络配置,从而训练数十种具备不同超参数组合的子网络,并让 AdaNet 选择其中一个进入最终的集成模型。

原文地址:https://ai.googleblog.com/2018/10/introducing-adanet-fast-and-flexible.html

https://www.jiqizhixin.com/articles/2018-10-31-15

[机器学习]AutoML---谷歌开源AdaNet:基于TensorFlow的AutoML框架相关推荐

  1. 基于TensorFlow深度学习框架,运用python搭建LeNet-5卷积神经网络模型和mnist手写数字识别数据集,设计一个手写数字识别软件。

    本软件是基于TensorFlow深度学习框架,运用LeNet-5卷积神经网络模型和mnist手写数字识别数据集所设计的手写数字识别软件. 具体实现如下: 1.读入数据:运用TensorFlow深度学习 ...

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

    点击我爱计算机视觉标星,更快获取CVML新技术 集成学习可以有效利用不同机器学习算法,提高最终模型精确度,在Kaggle比赛中被广泛应用. 训练集成学习模型计算量浩大,参数众多,虽然随着GPU/TPU ...

  3. Google 开源 AdaNet:快速灵活的轻量级 AutoML 框架

    雷锋网 AI 科技评论编者按:近期,Google 开源了轻量级 AutoML 框架-- AdaNet,该框架基于 TensorFlow,只需要少量的专家干预便能自动学习高质量模型,在提供学习保证(le ...

  4. 谷歌I/O走进TensorFlow开源模型世界:从图像识别到语义理解

    谷歌I/O走进TensorFlow开源模型世界:从图像识别到语义理解 2017-05-23 16:13:11    TensorFlow    2 0 0 一年一度的谷歌开发者大会 Google I/ ...

  5. 谷歌开源 MobileNetV3:新思路 AutoML 改进计算机视觉模型移动端

    谷歌从 17 年发布 MobileNets 以来,每隔一年即对该架构进行了调整和优化.现在,开发者们对 MobileNetV3 在一次进行了改进,并将 AutoML 和其他新颖的思想融入到该移动端的深 ...

  6. 模型部署到移动端_谷歌开源 MobileNetV3:新思路 AutoML 改进计算机视觉模型移动端...

    雷锋网 AI 开发者按:谷歌从 17 年发布 MobileNets 以来,每隔一年即对该架构进行了调整和优化.现在,开发者们对 MobileNetV3 在一次进行了改进,并将 AutoML 和其他新颖 ...

  7. 谷歌开源 TensorFlow 的简化库 JAX

    谷歌开源了一个 TensorFlow 的简化库 JAX. JAX 结合了 Autograd 和 XLA,专门用于高性能机器学习研究. 凭借 Autograd,JAX 可以求导循环.分支.递归和闭包函数 ...

  8. 谷歌开源 Kotlin 版本 gRPC

    谷歌开源了 gRPC-Kotlin/JVM,让开发者可以在 Kotlin 项目中更方便地使用 gRPC,以更简单的方式构建可靠的网络连接服务. gRPC 是谷歌开源的高性能.通用 RPC 框架,支持多 ...

  9. 令人激动!谷歌推强化学习新框架「多巴胺」,基于TensorFlow,已开源丨附github...

    郭一璞 发自 凹非寺  量子位 报道 | 公众号 QbitAI 上周那个在DOTA2 TI8赛场上"装逼失败"的OpenAI Five,背后是强化学习的助推. 其实不仅仅是Open ...

最新文章

  1. Linux EXT2文件系统结构分析(详情见附件)
  2. wxWidgets:wxAppConsole类用法
  3. 赞扬精心设计:基于属性的测试如何帮助我成为更好的开发人员
  4. Flex 学习笔记------FLACC Crossbridge
  5. java反编译工具_安卓逆向之反编译工具的使用
  6. bash shell简介及变量
  7. 自动驾驶——目标检测(Camera传感器)的学习笔记
  8. 优秀程序员都有哪些编程习惯?
  9. 语音性别识别_语音识别识别性别_语音文字识别 - 云+社区 - 腾讯云
  10. Toontrack Superior Drummer for Mac(鼓音乐制作工具)
  11. 了解java虚拟机mdash;串行回收器(6)
  12. fiddler4安装教程以及手机下载证书时报错 no root certificate was found解决方法
  13. “你好,世界!” Python教程
  14. 寒假第二周 总结与反思
  15. Spark吐血整理,学习与面试收藏这篇就够了!
  16. 音乐app项目开发(一)
  17. 数显之家快讯:【SHIO世硕心语】父亲的格局,母亲的情绪,是一个家最好的风水
  18. Java点集_java-二维点集的包装
  19. linux 10 -Bash Shell编程
  20. [转]JavaScript和html5 canvas生成圆形印章

热门文章

  1. 滴滴开源首次发布年度报告
  2. 数据结构——图的深度遍历
  3. License分类 + 引入开源软件时License的注意事项
  4. firefox-Developer开发者站点——关于Object.create()新方法的介绍
  5. 关于java中的数组
  6. 开发工程师的职场人生路(转)
  7. android 运行jar包,android将so打到jar包中并运行-Go语言中文社区
  8. php改vue,修改.vue · 柳鑫鹏/1702phpA - Gitee.com
  9. 2021年中宁中学高考成绩查询,2021宁夏中卫市重点高中排名
  10. linux下编译httpd,Linux下编译安装Apache httpd 2.4