定义超参数范围 - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

定义超参数范围

本指南介绍 SageMaker APIs如何使用定义超参数范围。还将提供您可以使用的超参数标度类型列表。

超参数和范围的选择会对调优作业的性能产生巨大影响。超参数调优通过在您为每个可调超参数指定的值范围内进行搜索,为您的模型找到最佳超参数值。您还可以指定最多 100 个静态超参数,这些超参数在调优作业过程中不会发生变化。您总共可以使用最多 100 个超参数(静态 + 可调)。有关如何选择超参数和范围的指南,请参阅超参数调优的最佳实践。您还可以使用自动调优,查找最佳的调优作业设置。有关更多信息,请参阅以下自动调优部分。

注意

SageMaker 自动模型调整 (AMT) 可能会添加额外的超参数,这些超参数总数限制为 100 个。目前,要将目标指标传递给调整任务以供训练期间使用,_tuning_objective_metric会自动 SageMaker 添加。

静态超参数

静态超参数用于以下情况: 例如,您可以使用使用(AMT可调参数)和 param1param2(静态参数)来调整模型。如果这样做,那么对于 param1,可使用两个值之间的搜索空间,并将 param2 作为静态超参数传递,如下所示。

param1: ["range_min","range_max"] param2: "static_value"

静态超参数具有如下结构:

"StaticHyperParameters": { "objective" : "reg:squarederror", "dropout_rate": "0.3" }

您可以使用 Amazon SageMaker API 在传递给CreateHyperParameterTuningJob操作的HyperParameterTrainingJobDefinition参数StaticHyperParameters字段中指定键值对。

动态超参数

您可以使用 SageMaker API来定义超参数范围。在传递给 CreateHyperParameterTuningJob 操作的 HyperParameterTuningJobConfig 参数的 ParameterRanges 字段中,指定超参数的名称和值的范围。

ParameterRanges 字段具有三个子字段:分类、整数和连续。您最多可定义总共 30 个(分类 + 整数 + 连续)可调超参数进行搜索。

注意

每个分类超参数最多可以有 30 个不同的值。

静态超参数具有如下结构:

"ParameterRanges": { "CategoricalParameterRanges": [ { "Name": "tree_method", "Values": ["auto", "exact", "approx", "hist"] } ], "ContinuousParameterRanges": [ { "Name": "eta", "MaxValue" : "0.5", "MinValue": "0", "ScalingType": "Auto" } ], "IntegerParameterRanges": [ { "Name": "max_depth", "MaxValue": "10", "MinValue": "1", "ScalingType": "Auto" } ] }

如果您使用 Grid 策略创建调优作业,那么只能指定分类值。您无需提供 MaxNumberofTrainingJobs。此值是根据分类参数可以生成的配置总数推断出来的。如果指定,则 MaxNumberOfTrainingJobs 的值应等于可能的不同分类组合的总数。

自动调优

为了节省搜索超参数范围、资源或目标指标的时间和资源,自动调优功能可以自动猜测某些超参数字段的最佳值。可使用自动调优查找以下字段的最佳值:

  • ParameterRanges— 调整作业可以优化的超参数的名称和范围。

  • ResourceLimits— 调整作业中要使用的最大资源。这些资源可能包括最大训练作业数、调优作业的最大运行时,以及可以同时运行的最大训练作业数。

  • TrainingJobEarlyStoppingType— 一个标志,如果某项工作与客观指标相比没有显著改善,则停止训练作业。默认为启用状态。有关更多信息,请参阅 提前停止训练作业

  • RetryStrategy— 重试训练作业的次数。RetryStrategy 的非零值会增加作业成功完成的可能性。

  • Strategy – 指定超参数调优如何选择超参数值组合以用于其启动的训练作业。

  • ConvergenceDetected— 表示自动模型调整 (AMT) 已检测到模型收敛的标志。

要使用自动调优,请执行以下操作:

  1. 在的AutoParameters字段中指定超参数和示例值。ParameterRangesAPI

  2. 启用自动调优。

AMT将确定您的超参数和示例值是否符合自动调整条件。可用在自动调优中的超参数,会自动分配给相应的参数范围类型。然后,AMT使用ValueHint来为您选择最佳范围。您可以使用DescribeHyperParameterTrainingJobAPI来查看这些范围。

以下示例演示了如何配置使用自动调优的调优作业。在配置示例中,超参数 max_depth 具有包含示例值 4ValueHint

config = { 'Autotune': {'Mode': 'Enabled'}, 'HyperParameterTuningJobName':'my-autotune-job', 'HyperParameterTuningJobConfig': { 'HyperParameterTuningJobObjective': {'Type': 'Minimize', 'MetricName': 'validation:rmse'}, 'ResourceLimits': {'MaxNumberOfTrainingJobs': 5, 'MaxParallelTrainingJobs': 1}, 'ParameterRanges': { 'AutoParameters': [ {'Name': 'max_depth', 'ValueHint': '4'} ] } }, 'TrainingJobDefinition': { .... }

继续前面的示例,在对的调用中包含先前的配置之后,就会创建调整作业CreateHyperParameterTuningJobAPI。然后,自动调谐将 max_depth 超参数转换为超参数。 AutoParameters IntegerParameterRanges以下来自 a 的响应DescribeHyperParameterTrainingJobAPI显示最优值介IntegerParameterRangesmax_depth2和之间8

{ 'HyperParameterTuningJobName':'my_job', 'HyperParameterTuningJobConfig': { 'ParameterRanges': { 'IntegerParameterRanges': [ {'Name': 'max_depth', 'MinValue': '2', 'MaxValue': '8'}, ], } }, 'TrainingJobDefinition': { ... }, 'Autotune': {'Mode': 'Enabled'} }

超参数标度类型

对于整数和连续超参数范围,您可以选择希望超参数调优使用的标度。例如,要搜索值范围,可以为超参数范围的 ScalingType 字段指定值。您可从以下超参数标度类型中进行选择:

自动

SageMaker 超参数调整为超参数选择最佳比例。

线性

超参数调优使用线性标度在超参数范围中搜索值。通常,如果从最低到最高的所有值的范围相对较小(在一个数量级内),则可选用此选项。均匀地搜索范围内的值,可以合理地探索整个范围。

对数

超参数调优使用对数标度在超参数范围中搜索值。

对数标度仅适用于其值大于 0 的范围。

当搜索范围跨多个数量级时,可选择对数标度。

例如,如果您正在调整一个调整线性学习器模型模型,并且为 learning_rate 超参数指定了介于 0.0001 到 1.0 之间的值范围,请考虑以下这点:与按线性标度搜索相比,按对数标度均匀搜索可以提供更好的整个范围的样本。这是因为平均而言,按线性标度搜索会将训练预算的 90% 用于 0.1 到 1.0 之间的值。因此,只剩下 10% 的训练预算用于 0.0001 到 0.1 之间的值。

ReverseLogarithmic

超参数调优可使用反向对数标度,在超参数范围中搜索值。只有连续的超参数范围才支持反向对数标度。整数超参数范围不支持此功能。

如果搜索范围对非常接近 1 的微小变化高度敏感,则可选用反向对数标度。

反向对数标度仅适用于完全位于 0 <= x < 1.0 内的范围。

有关使用超参数缩放的笔记本示例,请参阅上的 Amazon SageMaker 超参数示例。 GitHub