写点什么

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

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

关注

评论

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

Java多线程入门篇,GitHub标星1w的Java架构师必备技能

Java 程序员 面试 后端

【LeetCode】三数之和Java题解

Albert

算法 LeetCode 8月日更

Vue进阶(十):NPM 管理 node.js 依赖

No Silver Bullet

Vue npm nodejs 8月日更

「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之数据库逆向(十二)

crudapi

Vue crud crudapi quasar 数据库逆向

java学习-数据类型和运算符,Java社招面经分享

Java 程序员 面试 后端

巨头纷纷布局分布式云,一场新的云战争即将打响

云计算

Swift 实现获取、展示 Mac 的 WiFi 密码

fuyoufang

ios swift SwiftUI Mac 软件 8月日更

带你读AI论文:SDMG-R结构化提取—无限版式小票场景应用

华为云开发者联盟

语义 多模态 推理模型 SDMG-R 检测文本

Druid 集群方式部署 —— 操作系统和发行版本

HoneyMoose

DAPP智能合约系统源码开发

获客I3O6O643Z97

智能合约 DAPP智能合约交易系统开发

Druid 集群方式部署 —— 从独立服务器部署上合并到集群的硬件配置

HoneyMoose

【Flutter 专题】76 图解基本 TabBar 标签导航栏 (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

elaticsearch kibana介绍与安装

Rubble

Go与Redis连接池的那些事儿~

Regan Yue

redis Go 语言 8月日更

oeasy教您玩转vim - 5 - # 插入模式

o

netty系列之:netty中的Channel详解

程序那些事

Java Netty nio channel 程序那些事

让数据库从业者用实力对美国说不!

博文视点Broadview

Pangaea AI 智能机器人炒币系统开发

获客I3O6O643Z97

量化策略 量化跟单 量化机器人

10 分钟从 HTTP 切换到 HTTPS,保证个人博客安全性!

沉默王二

个人博客

手撸二叉树之路径总和

HelloWorld杰少

数据结构与算法 8月日更

oeasy教您玩转vim - 6 - # 保存修改

o

增强自动化测试的8大技巧

禅道项目管理

测试 自动化测试

Java学习路线图(如何快速学Java,Java算法题面试

Java 程序员 面试 后端

JAVA学习(3,黑马Java全套百度云

Java 程序员 面试 后端

Java已死,有事烧纸,字节跳动历年校招Java面试真题解析

Java 程序员 面试 后端

Java并发编程(实战(1),真香警告

Java 程序员 面试 后端

Fil值得投资吗?Ipfs未来价值一万一枚?

区块链 分布式存储 IPFS fil

Druid 集群方式部署 —— 选择硬件

HoneyMoose

kubernetes入门:使用kubeadm搭建node,楼主亲测

小鲍侃java

8月日更

oeasy教您玩转vim - 4 - # 深入帮助

o

十大排序算法--快速排序

Ayue、

排序算法 8月日更

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