跳至主要内容

使用 Auto-Keras 的自动化机器学习

了解自动化机器学习,以及如何使用 auto-keras 实现它。
· 11分钟 阅读

使用 AI 探索

如今,“机器学习”不再陌生,得益于 DataCamp、Coursera、Udacity 等机构持续探索如何更高效、更灵活地将机器学习教育带给大众。借助这些平台,如今几乎无需门槛就能入门这一领域。然而,自动化机器学习这一术语近年来在各大数据科学教育社区屡上头条。包括Google、H2O.ai 等在内的许多组织都在这一方向上投入了卓有成效的工作。与传统的机器学习相比,这并不是一个特别常见的话题。毕竟机器学习本身就涉及到自动化;于是人们自然会先问一句:“机器学习也能被自动化吗?”

本教程将回答这些问题中的许多。

让我们开始吧。

理解标准的机器学习流水线

当您以数据科学家的身份解决问题时,常见的工作流程大致如下:

  1. 数据收集
  2. 数据预处理
  3. 初始化一个可能适合该问题的机器学习模型
  4. 训练模型
  5. 测试模型
  6. 微调模型参数
  7. 再一次测试模型
  8. 传达与呈现结果

第二步数据预处理涵盖面非常广,因为它本质上是上述流程中最耗时的环节之一,包含数据清洗、数据变换、特征选择等多个子任务。第 3 到 7 步只是针对一个机器学习模型而言。优秀的实践者当然不会在一个模型上就止步不前,他会在不同模型上开展实验,比较结果,最终为问题选择最优模型。因此,又出现了另一组非常耗时的任务——该选用哪一种模型?

以下关于机器学习任务中调试过程的引言十分贴切,值得时刻铭记:

“机器学习的调试发生在两种情况下:1)您的算法无法工作;或 2)您的算法不够好。[...] 算法第一次就能工作的情况极为罕见,因此大多数时间都会花在构建与改进算法上。” - S. Zayd Enam

至此,您应当对标准的机器学习工程任务有了一个大致印象。最终,您必须决定哪个模型最适合手头问题,并说明其缘由。有时待尝试的可能性数量极多,而截止期限却迫在眉睫。——体会到问题的本质了吗?我们继续深入。

如何将机器学习流水线自动化?

本节将围绕为某个问题选择最佳模型展开,并设想一种情形:可尝试的可能性越多,留给您的时间却越少。

在本教程一开始,您遇到了这样一个问题:“机器学习也能被自动化吗?”这个问题一点也不幼稚。Sebastian Raschka就在一次采访中将自动化机器学习描述为“对自动化的自动化进行自动化”。

回顾一下您刚刚看到的数据科学标准流程中的第 5 步——微调模型的超参数。假设您已经完成了数据准备,并初始化了一个分类器 X。再假设 X 有 5 个不同的超参数。接下来,您需要用不同的超参数取值组合多次尝试同一个分类器 X,这绝非易事。更麻烦的是,尝试了多种组合后,您发现结果仍不理想。于是您决定再测试 4 个分类器(每个都有 6 个不同的超参数)。可以想象这会多么耗时!即便如此,万一结果仍不理想呢?继续排查又将是一段漫长而耗时的过程。

自动化机器学习的思想正是由此而来。

“如果必须基于多种算法与不同的超参数配置构建大量机器学习模型,那么模型的构建与模型性能/精度的比较都可以实现自动化。”——KDNuggets

现在您明白,为什么自动化机器学习这个术语近年来会在各大数据科学教育社区频频出现。下一节我们将进一步学习自动化机器学习。

自动化机器学习简介

为不同机器学习模型调优超参数往往也非常耗时。更计算机科学一些的说法是,超参数调优是一种搜索过程,在本场景下可能极其“穷举”。如果这个过程本身也能自动化呢?这正是自动化机器学习要做的事。“自动化机器学习是弥补数据科学家短缺的直接方案,它可以通过加速工作周期、提升模型精度,大幅提高数据科学家的绩效与生产力,最终甚至可能在某些场景下替代对数据科学家的需求。”——Automated Machine Learning for Internet of Things

关于自动化机器学习,您已经具备足够的背景知识,可以看看实际效果了。但在此之前,我们先了解一些常用的 Python 自动化机器学习库。

用于自动化机器学习的 Python 库

有许多 Python 库可用于执行自动化机器学习。它们的目标大同小异,即将机器学习流程自动化。以下是一些使用广泛的自动化机器学习库:

这些库各有思路来应对“对自动化的自动化进行自动化”的过程。但在本教程中,您将使用Auto-Keras。还等什么?我们动手吧。

Auto-keras 简介

“Auto-Keras 是一个用于自动化机器学习的开源软件库。”(来源)它由德州农工大学的 DATA Lab 与社区贡献者共同开发。根据 auto-keras 官方网站的介绍——“自动化机器学习的最终目标,是为缺乏数据科学或机器学习背景的领域专家提供易用的深度学习工具。Auto-Keras 提供的功能可自动搜索深度学习模型的结构与超参数。”

AutoKeras Logo

来源:Auto-Keras

要安装 auto-keras,只需运行以下命令。

注意:目前 Auto-Keras 仅兼容 Python 3.6。

!pip install autokeras

成功安装 Auto-Keras 后,就可以做一个快速的小实验了。

使用 Auto-keras 的 AutoML 案例研究

在此案例中,您将使用非常流行的 MNIST 数据集。keras 已内置该数据集,因此无需单独下载。我们先加载 auto-keras 的 ImageClassifier 模块,同时从 keras 模块加载 MNIST 数据集。

from keras.datasets import mnist
from autokeras import ImageClassifier

您从 keras.datasets 模块加载了 MNIST 数据集,并从 auto-keras 导入了 ImageClassifier。接下来将数据集拆分为训练集与测试集。

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape + (1,)) # (1,) denotes the channles which is 1 in this case
x_test = x_test.reshape(x_test.shape + (1,)) # (1,) denotes the channles which is 1 in this case
Downloading data from https://s3.amazonaws.com/img-datasets/mnist.npz
11493376/11490434 [==============================] - 1s 0us/step

完成训练/测试集的划分后,用 x_train 和 y_train 拟合 ImageClassifier,并在 x_test 和 y_test 上测试其性能。

# Instantiate the ImageClassifier class
clf = ImageClassifier(verbose=True, augment=False)
# Fit the train set to the image classifier
clf.fit(x_train, y_train, time_limit=12 * 60 * 60)
clf.final_fit(x_train, y_train, x_test, y_test, retrain=True)
# Summarize the results
y = clf.evaluate(x_test, y_test)
print(y * 100)

就这么简单。四五行代码即可完成一次快速实验。当然,运行并不一定“快”。上述代码需要相当的时间才能执行完成。合适的深度学习实验环境配置无疑会有所帮助。Google Colab 也是一个很好的起点。

现在我们来了解一下以上代码中用到的参数。以下参考自 auto-keras 文档,摘录要点如下:

  • 在 ImageClassifier() 中:
    • verbose:布尔值,是否在输出中打印搜索过程。
    • augment:布尔值,指示数据是否需要增强。如果未设置,将使用常量 Constant.DATA_AUGMENTATION 的值,默认 True。
  • 在 fit() 方法中:
    • time_limit:以秒为单位的搜索时间上限。
  • final_fit():在找到最佳结构后进行最终训练。
    • retrain:布尔值,是否重新初始化模型权重。

Auto-keras 仍在演进中,目前处于预发布版本。根据其官方网站介绍,它支持以下主要模块:

  • supervised:所有监督学习任务的基类。
  • bayesian:用于贝叶斯优化的 GaussianProcessRegressor。
  • search:所有搜索器类的基类。每个搜索器类都可以重写其搜索函数以实现各自策略。
  • graph:表示 Keras 模型神经结构图的类。Graph 从 Keras 模型中提取神经结构图。图中的每个节点是层与层之间的中间张量,每个层是图中的一条边。需要注意的是,多条边可能指向同一层(例如,Add 层将两个张量相加为一个张量,因此会关联到两条边)。
  • preprocessor:可对数据进行格式化的类。该类提供将分类标签转换为向量等方式。
  • model_trainer:用于训练模型的类。该类可结合给定的数据加载器训练一个 Pytorch 模型。度量、损失函数与模型必须彼此兼容,详见属性说明。

结束语

恭喜您读到这里。在本教程中,您回顾了通用的机器学习流程,并了解了如何对其进行自动化。您简要浏览了可用于 AutoML 的库,体验了 auto-keras 所提供的高层抽象,以及它的易用性。

本教程或许会让您产生一种担忧:当 AutoML 足够成熟时,会不会取代许多数据科学家?真会吗?不妨再想一想。AutoML 实际上是把为某个问题迭代挑选最佳模型的繁琐过程从数据科学家身上解放出来。在此过程中,数据科学家可以将更多精力放在更为关键的数据本身上。这篇 Randy Olson 的采访对该话题有不少精彩见解,建议一读,您就不会再感到沮丧了。如果您对机器学习从业者的价值仍有疑虑,不妨看看这篇文章。

自动化机器学习领域确实在不断进步。比如,NAS(Neural Architecture Search,神经结构搜索)是一种用于搜索最佳神经网络结构的算法。以下是一些展示 AutoML 前沿用例的资源链接:

参考资料:

如果您想进一步学习深度学习,请参加 DataCamp 的 “Python 深度学习入门”课程,并查看我们的Python 深度学习导论课程。

主题