写点什么

Amazon SageMaker Automatic Model Tuning:利用机器学习支持机器学习

  • 2019-10-18
  • 本文字数:2900 字

    阅读完需:约 10 分钟

Amazon SageMaker Automatic Model Tuning:利用机器学习支持机器学习

Amazon SageMaker Automatic Model Tuning 已正式发布。Automatic Model Tuning 消除了为了搜索超参数空间,以获得更精确的模型,而必须执行的无差异化繁重工作。在训练和校正机器学习模型时,开发人员和数据科学家能够利用这项功能节省大量时间和工作。超参数校正任务会根据已完成的训练任务的结果,启动使用不同超参数组合的多项训练任务。SageMaker 根据贝叶斯优化训练“元”机器学习模型,为我们的训练任务推断超参数组合。我们稍微深入地探索一下这方面的内容。

机器学习过程中的模型校正

开发人员的常见机器学习流程包括 4 个步骤:探索性数据分析 (EDA)、模型设计、模型训练和模型评估。SageMaker 可访问服务内功能强大的 Jupyter 笔记本实例、内置算法和模型训练,从而简化了这些步骤。我们专注于流程的训练部分,通常会处理数据并将其馈送到模型之中,以根据我们的预期结果评估模型的预测结果。我们会将整体输入数据中的评估数据部分与用于训练模型的训练数据分隔开。我们可以利用评估数据来检查我们的模型处理其从未见过的数据时的行为。在许多情况下,在我们选择算法或构建自定义模型后,我们需要搜索该算法可能的超参数配置空间,以获得输入数据的最佳结果。


超参数控制底层算法的运行方式,会影响模型性能。它们可以是:训练的纪元数、网络中的层数、学习速率、优化算法等等。通常,您要从随机值或其他问题的常见值开始,并在开始看到变更所产生的影响后迭代调整。过去,这是一个费力的手动过程。然而,由于某些杰出研究人员的努力,如今我们可以使用 SageMaker 来消除几乎所有的手动工作。用户只需要选择要校正的超参数、要探索的每个参数的范围,以及要纳入预算的训练任务总数即可。我们来看看实际操作。

超参数校正

为了演示这项功能,我们将使用标准 MNIST 数据集、Apache MXNet 框架和 SageMaker Python 开发工具包。您在下方看到的所有内容均可在 SageMaker 示例笔记本中找到。


首先,我将在笔记本实例上使用 SageMaker Python 开发工具包创建一个传统的 MXNet 估算器:


Python


import boto3import sagemakerfrom sagemaker.mxnet import MXNetrole = sagemaker.get_execution_role()region = boto3.Session().region_nametrain_data_location = 's3://sagemaker-sample-data-{}/mxnet/mnist/train'.format(region)test_data_location = 's3://sagemaker-sample-data-{}/mxnet/mnist/test'.format(region)estimator = MXNet(entry_point='mnist.py',                  role=role,                  train_instance_count=1,                  train_instance_type='ml.m4.xlarge',                  sagemaker_session=sagemaker.Session(),                  base_job_name='HPO-mxnet',                  hyperparameters={'batch_size': 100})
复制代码


这可能与您在其他 SageMaker 示例中看到的内容非常相似。


现在,我们可以导入一些用于自动校正模型的工具,并创建我们的超参数范围。


Python


from sagemaker.tuner import HyperparameterTuner, IntegerParameter, CategoricalParameter, ContinuousParameterhyperparameter_ranges = {'optimizer': CategoricalParameter(['sgd', 'Adam']),                         'learning_rate': ContinuousParameter(0.01, 0.2),                         'num_epoch': IntegerParameter(10, 50)}
复制代码


校正任务将从这些范围中选择参数,并使用这些参数来确定训练工作应重点攻克的最佳位置。参数有多种类型:


  • Categorical(分类型)参数使用来自离散集的一个值。

  • Continuous(连续型)参数可以使用介于最小值与最大值之间的任何实数值。

  • Integer(整数型)参数可使用指定界限内的任意整数。


既然我们已经定义了范围,下面就要定义成功指标,以及用于在培训任务日志中查找该指标的正则表达式。


Python


objective_metric_name = 'Validation-accuracy'metric_definitions = [{'Name': 'Validation-accuracy',                       'Regex': 'Validation-accuracy=([0-9\\.]+)'}]
复制代码


现在,仅需再定义几项内容,就可以开始校正了!


Python


tuner = HyperparameterTuner(estimator,                            objective_metric_name,                            hyperparameter_ranges,                            metric_definitions,                            max_jobs=9,                            max_parallel_jobs=3)tuner.fit({'train': train_data_location, 'test': test_data_location})
复制代码


现在,我们可以打开 SageMaker 控制台,选择 Hyperparameter tuning jobs (超参数校正任务) 子控制台,并查看所有校正任务。



我们可以单击刚刚创建的任务来查看更多详细信息,并了解校正结果。



默认情况下,控制台将向我们展示最佳任务和所用参数,但我们也可以查看其他所有任务。



跳转回我们的笔记本实例, tuner.analytics() 中有一个方便的分析对象,可用于通过一些 bokeh 绘图呈现训练结果。SageMaker 示例笔记本中提供了这方面的几个示例。



此功能适用于内置算法、使用 SageMaker Python 开发工具包创建的任务,甚至是 Docker 中的自带训练任务。


我们甚至可以单击 Create hyperparameter tuning job (创建超参数校正任务),直接在控制台中创建校正任务。


首先,我们选择任务名称、IAM 角色以及任务应该在其中运行的 VPC(如果有)。



接下来,我们对训练任务进行配置。此时可以使用内置算法,也可以使用自定义 Docker 映像。如果使用的是自定义映像,那么我们将该正则表达式定义为在日志中查找客观指标。现在我们只需选择 XGBoost 并单击“下一步”。



现在,我们将配置校正任务参数,与在笔记本示例中一样。我将选择曲线下面积 (AUC) 作为优化的客观指标。由于这是一种内置算法,因此先前的步骤已经填充了该指标的正则表达式。我将设置最小和最大轮次数,然后单击“下一步”。



在下一屏中,我们可以配置算法期望获得的输入通道以及输出模型的位置。我们通常不仅有“训练”通道,而且还有一个“评估”通道。



最后,我们可以配置此校正任务的资源限制。



现在,可以 快速进行 校正了!

其他资源

要利用自动校正模型功能,用户必须定义几项内容:超参数范围、成功指标和查找指标的正则表达式、并行运行的任务数以及要运行的任务数上限。对于内置算法,我们甚至不需要定义正则表达式。需要权衡所用的并行任务数和最终模型的准确性,并作出细微调整。增加 max_parallel_jobs 可加快完成校正任务,但较低的并行度通常会提供略好一些的最终结果。


使用 Amazon SageMaker Automatic Model Tuning 无需额外付费,您仅需为校正任务启动的训练任务所用的基础资源付费。此功能现已面向提供 SageMaker 的所有区域推出。该功能以 API 的形式提供,并且可在控制台中查看自动校正模型启动的训练任务。您可以阅读文档,了解更多信息。


我坚信这项功能可以帮助开发人员节省大量时间和精力,我也很期待看到客户利用这项功能取得的成果。


作者介绍:


Randall Hunt


AWS 全球高级布道师。此前供职于 NASA, SpaceX 及 MongoDB。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/sagemaker-automatic-model-tuning/


2019-10-18 09:00678
用户头像

发布了 1849 篇内容, 共 114.7 次阅读, 收获喜欢 78 次。

关注

评论

发布
暂无评论
发现更多内容

如何根据日志来了解一个请求经历了什么?

我爱娃哈哈😍

软件架构 架构设计 架构实战

C4C Cloud Application Studio做ABSL开发的一些性能方面的最佳实践

汪子熙

Cloud CRM SAP C4C

利用Chrome的Heap Snapshot功能分析一个时间段内的内存占用率

汪子熙

JavaScript chrome

基于Mac的手动搭建WordPress个人站点的方法

三掌柜

5月日更

Python 持久化 - 文件

若尘

文件 持久化 持久化存储 5月日更

设计千万级学生管理系统的考试试卷存储方案

9527

如何将BSP应用配置成Fiori Launchpad上的一个tile

汪子熙

SAP abap Fiori SAP UI5 bsp

MySQL主从网络延迟解决方案

运维研习社

MySQL 运维 主从同步 5月日更

Go 并发编程 — 深入浅出 sync.Pool ,围观最全的使用姿势,理解最深刻的原理

奇伢云存储

并发编程 云存储 Go 语言

🚄【Redis 干货领域】帮你完全搞定 Cluster 原理(实践篇)

洛神灬殇

redis redis集群 redis cluster 5月日更 redis架构

如何在SAP CRM WebClient UI里创建HANA Live Report

汪子熙

CRM SAP WebClient UI

模块四-千万级学生管理系统试卷存储方案

华仔架构训练营

SAP Fiori Launchpad Tile点击后跳转的调试技巧

汪子熙

JavaScript SAP Fiori SAP UI5

找出 SAP OData service出错根源的小技巧

汪子熙

SAP Fiori SAP UI5 OData

架构实战营-作业四

大可

和另一半过不一样的520

小英

520单身福利 520 单身福利

☕【Java技术之旅】从底层角度去认识线程的原理

洛神灬殇

Java 线程 Thread 线程协作 5月日更

另一种方式实现事务码SE16里的结果集修改

汪子熙

JavaScript SAP Fiori

开发中Docker常用容器记录

Docker

Go 并发编程-goroutine 初体验

Rayjun

Go 语言 goroutine

Inner Join, Left Outer Join和Association的区别

汪子熙

SAP abap ST05

再谈前端性能监控及4个最佳工具分享

devpoint

大前端 sentry

自我复盘

lenka

5月日更

Shell脚本-简单爬虫

追风的少年

SAP Fiori 应用 Footerbar 区域按钮的高亮显示逻辑

汪子熙

JavaScript SAP Fiori SAP UI5

Authorization object在哪些ABAP代码里使用到

汪子熙

CRM SAP abap Netweaver

架构实战营模块4作业

Vic

架构实战营

SAP 不同 ABAP 系统里同一 Customizing activity 的显示差异分析

汪子熙

CRM SAP ERP abap 定制化

到底哪种类型的错误信息会阻止business transaction的保存

汪子熙

CRM SAP abap

高性能 JavaScriptの五 -- 快响应用户界面

空城机

JavaScript 大前端 5月日更

一个查看 SAP UI5 控件所有公有方法的小技巧

汪子熙

JavaScript SAP SAP UI5

Amazon SageMaker Automatic Model Tuning:利用机器学习支持机器学习_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章