雷锋网 AI 科技评论编者按:近期,Google 开源了轻量级 AutoML 框架—— AdaNet,该框架基于 TensorFlow,只需要少量的专家干预便能自动学习高质量模型,在提供学习保证(learning guarantee)的同时也能保持快速、灵活。值得一提的是,AdaNet 提供了一种通用框架,不仅能够学习神经网络架构,还能学习集成从而获得更佳的模型。雷锋网(公众号:雷锋网) AI 科技评论根据  Google AI 在博客上发布 AutoML 的文章进行编译如下。

整合了不同机器学习模型预测的模型集成,被广泛运用于神经网络来实现最优性能,它受益于悠久的历史和理论,从而在 Netflix Prize 和各项 Kaggle 竞赛等挑战赛中拔得头筹。然而由于训练耗时长,以及机器学习模型的选择机制需要自身具备领域专业知识,它们在实践中的应用并不多。不过随着算力和 TPU 等深度学习专用硬件变得更容易获得,我们可以允许更大的机器学习模型,模型集成方法也就成了一种能带来突出表现的选择。现在想象一下,一个工具可以自动搜索神经架构,并学习将最佳的神经架构集成到一个高质量的模型中。

现在,Google 对基于 TensorFlow 的轻量级框架 AdaNet 进行开源,这一框架只需要少量的专家干预便能自动学习高质量模型。AdaNet 在 Google 最近的强化学习和基于进化的 AutoML 成果的基础上构建,在提供学习保证的同时也能保持快速、灵活。重点是,AdaNet 提供了一种通用框架,不仅能够学习神经网络架构,还能学习集成从而获得更佳的模型。

AdaNet 使用方便,还能创建高质量模型,以节省机器学习从业者通常在选择最优神经网络架构上所耗费的时间,它会执行一个自适应学习算法,学习出一个由许多子网络集成得到的神经网络架构。AdaNet 能够通过不同深度和宽度的子网络来创建多种不同的集成,并在性能提升和参数数量二者之间进行权衡。

AdaNet 适应性地增加神经网络的集成。在每次迭代中,AdaNet 衡量每个候选神经网络的集成损失,并选择将最优的神经网络转入下一次迭代中。

快速易用

AdaNet 采用了 TensorFlow Estimator 接口,通过封装训练、评估、预测和输出,极大简化了机器学习编程,并整合了 TensorFlow Hub modules、TensorFlow Model Analysis、Google Cloud』s Hyperparameter Tuner 这类开源工具。其对分布式训练的支持,极大缩短了训练时间,并且增加新的 CPU 和加速器(例如 GPU)之后性能可以获得线性提升。

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

作为最好的 TensorFlow 功能之一,TensorBoard 可以将训练过程中的模型指标可视化,因而 AdaNet 可与 TensorBoard 实现无缝整合,来监控子网络训练、集成合并和性能。AdaNet 完成训练后,会输出一个可使用 TensorFlow Serving 进行部署的 SavedMode。

学习保证

构建神经网络集成面临一些挑战:要考量什么是最佳子网络架构?重复使用相同的架构最好,还是鼓励差异化最好?尽管具备更多参数的复杂子网络在训练集上倾向于表现更好,但是它们也由于更大的复杂性而可能难以泛化到未知的数据。这些挑战源自于对模型性能的评估,我们可以从训练集单独分出来一部分数据用于评估性能,不过这样的话可能会减少可用于训练神经网络的样本量。

不一样的是,AdaNet 的方法(该方法可参考 ICML 2017 的论文 AdaNet: Adaptive Structural Learning of Arti¡cial Neural Networks)是优化一个目标,在训练集的集成性能和未知数据的泛化能力间进行权衡。这里采用了一个符合人类直觉的设定:只有当一个候选的子网络对集成模型的训练损失的优化超过其对泛化能力的负面影响时,AdaNet 才会把这个子网络集成进来。这保证了:

第一,集成的泛化误差受其训练误差和复杂度的约束;

第二,通过优化这一目标,能够直接最小化该约束。

优化这一目标的实际收益是,它能消除选择加入集成的候选子网络时对于留出集的需求。如此带来的附加收益是,使得 AdaNet 能够使用更多的训练数据来训练子网络。

如需了解更多,可参考其 AdaNet 目标函数教程(https://github.com/tensorflow/adanet/blob/v0.1.0/adanet/examples/tutorials/adanet_objective.ipynb)。

可扩展性

Google 认为,创建应用于研究和产品的有用的 AutoML 框架的关键是,它不仅能够提供合理的默认值,还能让用户可以尝试定义自己的子网络/模型。最终,机器学习研究者、从业者以及爱好者都能够受邀使用 tf.layers 等高水平的 TensorFlow APIs,来定义他们自己的 AdaNet adanet.subnetwork.Builder。

对于已经在自己的系统中集成了 TensorFlow 模型的用户,可以轻易地将自己的 TensorFlow 代码转到 AdaNet 子网络中,并且能够在获得学习保证的同时,使用 adanet.Estimator 来提升模型性能。AdaNet 会探索他们定义的候选子网络搜索空间,同时学习对子网络进行集成。例如,Google 实现 NASNet-A CIFAR 架构的开源,将其迁移到了一个子网络中,并经过 8 次 AdaNet 迭代提高了它在 CIFAR-10 上的最优结果。除此之外,Google 的模型实现了用更少参数来获得以下结果:

在 CIFAR-10 数据集上,展示在 Zoph et al., 2018 中的 NASNet-A 模型的性能 VS 学习结合多个小型 NASNet-A 子网络的 AdaNet 的性能。

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

用户还可以通过扩展 adanet.subnetwork.Generator 类别,来充分定义要探索的候选子网络搜索空间。这使得他们能够基于可获得的硬件来扩大或者缩小其搜索空间。子网络的训练空间可以简单也可以复杂,简单的时候可以只是多次复制同样的子网络设置,只不过用了几个不同的随机种子,复杂的时候就可以是用不同的超参数组合训练几十个不同的子网络,然后由 AdaNet 选择其中的某一个包括到最终的集成模型中。

如果的大家对独立尝试 AdaNet 感兴趣,可以前往 Github repo(https://github.com/tensorflow/adanet),并查看相关教程(https://github.com/tensorflow/adanet/tree/v0.1.0/adanet/examples)。

via:Google AI Blog(Charles Weill,Introducing AdaNet: Fast and Flexible AutoML with Learning Guarantees),雷锋网 AI 科技评论编译

Google 开源 AdaNet:快速灵活的轻量级 AutoML 框架相关推荐

  1. [机器学习]AutoML---谷歌开源AdaNet:基于TensorFlow的AutoML框架

    谷歌开源了基于 TensorFlow 的轻量级框架 AdaNet,该框架可以使用少量专家干预来自动学习高质量模型.据介绍,AdaNet 在谷歌近期的强化学习和基于进化的 AutoML 的基础上构建,快 ...

  2. PyTorch(一个快速灵活的深度学习框架)入门简介及安装方法

    一个快速灵活的深度学习框架--PyTorch 前言:2018年7月30日也是我接触PyTorch深度学习框架的第一天.听老师说这套框架比TensorFlow好用吧.行!开启pytorch之旅.出发! ...

  3. 用rapid-framework开源工具快速生成SSH的网站框架MVC模式

    使用开源工具rapid-framework快速搭建ssh项目框架 环境 IDE:myeclipse 8.5 详细搭建过程: 一:打开myeclipse 8.5新建一个web工程,取名web_frame ...

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

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

  5. Google 开源的依赖注入库,比 Spring 更小更快!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:GinoBeFunny zhuanlan.zhihu.com ...

  6. 开源公司黄页之 Google 开源软件推荐

    在企业使用开源和贡献开源方面,Google一直是行业的典范.一直以来,Google都在极力推广和倡导开源,并发布了一系列开源项目.如果没有开源软件,Google也难以达到今日的成功.开源中国社区目前收 ...

  7. Google 开源的项目集合

    原链接 文为大家整理了 Google 开源的项目,看看有没有感兴趣的,排名顺序按照 Github ★Star 数排列. 0.机器学习系统 TensorFlow★Star 62533 TensorFlo ...

  8. 玩转Google开源C++单元测试框架

    玩转Google开源C++单元测试框架Google Test系列(gtest)(总) 前段时间学习和了解了下Google的开源C++单元测试框架Google Test,简称gtest,非常的不错. 我 ...

  9. Google开源word2vec,文本相似度计算工具

    Google开源word2vec,文本相似度计算工具 谷歌已经使用Deep Learning技术开发了许多新方法来解析语言,目前,谷歌开源了一款基于Deep Learning的学习工具--word2v ...

最新文章

  1. 怎么查询redis缓存的数据_阿里开发十年写出这份「Redis简明教程」+「Redis实战」请你查收...
  2. 【嵌入式干货】利用二分法定位Flash存有数据(非FF)的地址
  3. python爬虫提取a标签_Python爬虫 Pyppeteer获取a标签的文本和链接
  4. php中调行高代码_单元格行高怎么设置
  5. 时间更新服务器推荐 - NTP时间同步服务器集群:ntp.api.bz
  6. 列举python中可变数据类型_python 可变数据类型 和 不可变数据类型
  7. 手游传奇刷元宝_传奇手游 平民制霸刀刀爆元宝!
  8. 小米手机安装证书(安卓)
  9. Google X 新项目,用计算机视觉养鱼?
  10. 如何不起协议,R1ping通R3
  11. RedisTemplate和StringRedisTemplate在项目中应用
  12. Xshell7免费版申请无需破解
  13. python内置函数dict()
  14. 优酷KUX视频转换MP4工具,纯个人向分享
  15. wps序号打乱重新排序_wps表格序号自动排列
  16. Linux下识别NTFS格式的U盘
  17. STM32F103C8T6以寄存器方式借助面包板搭建电路点亮LED流水灯详解
  18. IntelliJ IDEA中JAVA连接MySQL数据库
  19. 数据库【MySQL数据库介绍】
  20. .NET 跨平台界面框架和为什么你首先要考虑再三

热门文章

  1. java多线程——饥饿和公平
  2. UNITY调用安桌方法出现 JNI: Init'd AndroidJavaClass with null ptr!
  3. SQL repeat()函数
  4. 配置Haproxy增加日志记录功能
  5. HTML5实践 -- 使用css装饰你的图片画廊 - part2
  6. 一点一滴培养你的领导气质
  7. SpringBoot高级篇MongoDB之修改基本使用姿势
  8. Github上如何在组织中创建代码仓库,并如何授予该组织中某个小组权限?
  9. 关于如何解决解决The SDK platform-tools version ((25.0.3)) is too old to check APIs compiled with API 26...
  10. 模拟互联网中的dns服务布置(bind)