定义超参数范围 - Amazon SageMaker

定义超参数范围

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

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

注意

SageMaker 自动模型调优 (AMT) 可能会添加额外的超参数,这些超参数也在 100 个总的超参数限制范围内。目前,为了将目标指标传递给调优作业以供训练期间使用,SageMaker 会自动添加 _tuning_objective_metric

静态超参数

静态超参数用于以下情况: 例如,您可以使用 AMT 通过 param1(可调参数)和 param2(静态参数)来调整模型。如果这样做,那么对于 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. ParameterRanges API 的 AutoParameters 字段中,指定超参数和示例值。

  2. 启用自动调优。

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

以下示例演示了如何配置使用自动调优的调优作业。在配置示例中,超参数 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': { .... }

继续上述示例,将先前的配置包括在 CreateHyperParameterTuningJob API 调用中之后,创建调优作业。然后,自动调优将 AutoParameters 中的 max_depth 超参数转换为超参数 IntegerParameterRanges。以下响应来自 DescribeHyperParameterTrainingJob API,显示 max_depth 的最优 IntegerParameterRanges 介于 28 之间。

{ '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 内的范围。

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