NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:00596
用户头像

发布了 1836 篇内容, 共 92.4 次阅读, 收获喜欢 73 次。

关注

评论

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

双向带头循环链表的(增删查改)的实现

lovevivi

c 数据结构 10月月更

不错的项目管理系统厂商有哪些?

PingCode

Linux系统-进程概念

可口也可樂

Linux 10月月更 Linux进程

Linux系统-进程地址空间

可口也可樂

Linux 10月月更 Linux进程地址空间

开源软件与开源协议的法律问题分析

Andy

开源 架构 调研

Linux 驱动开发:USB无线wifi驱动开发(MT7601)、完成WIFI管理工具安装

DS小龙哥

10月月更

【一Go到底】第二十二天---函数参数传递方式、变量作用域

指剑

Go golang 10月月更

【微信小程序】带你进入小程序的世界

hacker707

微信小程序 10月月更

在线问题反馈模块实战(十二)​:实现图片删除功能

bug菌

springboot 项目开发 10月月更

单链表的(增删查改)的实现

lovevivi

c 数据结构 10月月更

嵌入式 Linux 入门(二、Linux 文件系统、文件类型及权限管理)

矜辰所致

Linux 文件系统 10月月更

Pycharm配置远程解释器并自动上传代码

渔戈

pycharm 开发工具 10月月更

极客时间运维进阶训练营第一周作业

9527

Kafka消费者JoinGroupRequest流程解析

石臻臻的杂货铺

kafka Kafka实战 10月月更

HashMap源码分析(四)

知识浅谈

hashmap 10月月更

【LeetCode】下一个更大元素单调栈Java题解

Albert

算法 LeetCode 10月月更

ES6之let、const与var

木偶

JavaScript 前端 ES6 10月月更

Docker常用命令小记

程序员欣宸

Docker 容器化 10月月更

【kafka原理】消费者提交已消费的偏移量

石臻臻的杂货铺

kafka Kafka实战 10月月更

鸿蒙开发实例 | 分布式涂鸦

TiAmo

华为 华为云 云开发 10月月更

“程”风破浪的开发者|一文GET钉钉连接平台

六月的雨在InfoQ

学习方法 钉钉宜搭 10月月更 “程”风破浪的开发者 钉钉连接平台

在线问题反馈模块实战(十一)​:实现图片下载功能

bug菌

springboot 项目开发 10月月更

Linux系统-进程控制

可口也可樂

Linux 10月月更 Linux进程

规划兼职工作

掘金安东尼

算法 10月月更

深入浅出ES6中的解构

木偶

JavaScript 前端 ES6 10月月更

数据湖(七):Iceberg概念及回顾什么是数据湖

Lansonli

数据湖 10月月更

在线问题反馈模块实战(十)​:实现图片预览功能

bug菌

springboot 项目开发 10月月更

顺序表的(增删查改)实现

lovevivi

c 数据结构 10月月更

前端布局之浅谈BFC

CoderBin

CSS 面试 前端 10月月更

Flex布局教程:语法篇

木偶

css3 前端 10月月更

使用 SAP Business Application Studio 创建 Fiori Elements 应用显示 OData 服务的数据

Jerry Wang

云原生 Cloud SAP 10月月更 btp

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