谷歌开源的基于 TensorFlow 的轻量级框架 AdaNet几大优点

TensorFlow 是相对高阶的机器学习库,用户能够方便地用它设计神经网络结构,而没必要为了追求高效率的实现亲自写 C++或 CUDA 代码。它和 Theano 同样都支持自动求导,用户不须要再经过反向传播求解梯度。git

 

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

 

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

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

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

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

若是对Python编程、网络爬虫、机器学习、数据挖掘、web开发、人工智能、面试经验交流。感兴趣能够519970686,群内会有不按期的发放免费的资料连接,这些资料都是从各个技术网站搜集、整理出来的,若是你有好的学习资料能够私聊发我,我会注明出处以后分享给你们。数组

快速易用网络

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://blog.csdn.net/Stephen_shijun/article/details/83622600

相关文章
相关标签/搜索