谷歌开源AdaNet:基于TensorFlow的AutoML框架

最近,谷歌在GitHub上发布了用TensorFlow实现的AutoML框架——AdaNet,这是一个轻量级的基于TensorFlow的框架,能以最少的专家干预实现自动习得高质量模型。

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

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

github:https://github.com/tensorflow/adanet

01

AdaNet起源

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

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

现在,谷歌的AdaNet可以自动搜索神经架构,并学会将最优的架构组合成一个高质量的模型。该框架可以使用少量专家干预来自动学习高质量模型。AdaNet 在谷歌近期的强化学习和基于进化的 AutoML 的基础上构建,快速灵活同时能够提供学习保证(learning guarantee)。重要的是,AdaNet 提供通用框架,不仅能用于学习神经网络架构,还能学习集成架构以获取更好的模型。

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

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

02

AdaNet特征

(1)快速易用

AdaNet 实现了 TensorFlow Estimator 接口,通过压缩训练、评估、预测和导出极大地简化了机器学习编程。

它整合如 TensorFlow Hub modules、TensorFlow Model Analysis、Google Cloud』s Hyperparameter Tuner 这样的开源工具。

它支持分布式训练,极大减少了训练时间,使用可用 CPU 和加速器(例如 GPU)实现线性扩展。

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

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

(2)学习保证

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

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

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

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

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

(3)可扩展

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

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

谷歌选取了 NASNet-A CIFAR 架构的开源实现,将其转换为一个子网络,经过 8 次 AdaNet 迭代后提高其在 CIFAR-10 上的当前最优结果。此外,获得的模型在更少参数的情况下获得了以下结果:

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

03

AdaNet实践

Step 1.安装

pip install adanet

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

Step 2.数据集(Fashion MNIST dataset¶)

Fashion MNIST 是一个替代 MNIST 手写数字集的图像数据集。 它是由 Zalando(一家德国的时尚科技公司)旗下的研究部门提供。其涵盖了来自 10 种类别的共 7 万个不同商品的正面图片。

Fashion MNIST 的大小、格式和训练集/测试集划分与原始的 MNIST 完全一致。60000/10000 的训练测试数据划分,28x28 的灰度图片。你可以直接用它来测试你的机器学习和深度学习算法性能,且不需要改动任何的代码。

这个数据集的样子大致如下(每个类别占三行):

T-shirt/top

Trouser

Pullover

Dress

Coat

Sandal

Shirt

Sneaker

Bag

Ankle boot

Step 3.Baselines Model

(1)train a linear model:

线性模型达到了84.13%的准确率

(2)Let's see if we can do better with the simple_dnn AdaNet:

simple_dnn AdaNet mode达到了85.32%的准确率

Step 4.Define a convolutional AdaNet model

为AdaNet定义要探索的候选子网络搜索空间,需要扩展两个抽象类:

(1)adanet.subnetwork.Builder

(2)adanet.subnetwork.Generator

最终SimpleCNNGenerator实现了90.24%的准确率。

暗中观察

默默关注

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181111G1H00G00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券