本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
定义超参数范围
本指南介绍 SageMaker APIs如何使用定义超参数范围。还将提供您可以使用的超参数标度类型列表。
超参数和范围的选择会对调优作业的性能产生巨大影响。超参数调优通过在您为每个可调超参数指定的值范围内进行搜索,为您的模型找到最佳超参数值。您还可以指定最多 100 个静态超参数,这些超参数在调优作业过程中不会发生变化。您总共可以使用最多 100 个超参数(静态 + 可调)。有关如何选择超参数和范围的指南,请参阅超参数调优的最佳实践。您还可以使用自动调优,查找最佳的调优作业设置。有关更多信息,请参阅以下自动调优部分。
注意
SageMaker 自动模型调整 (AMT) 可能会添加额外的超参数,这些超参数总数限制为 100 个。目前,要将目标指标传递给调整任务以供训练期间使用,_tuning_objective_metric
会自动 SageMaker 添加。
静态超参数
静态超参数用于以下情况: 例如,您可以使用使用(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) 已检测到模型收敛的标志。
要使用自动调优,请执行以下操作:
-
在的
AutoParameters
字段中指定超参数和示例值。ParameterRangesAPI -
启用自动调优。
AMT将确定您的超参数和示例值是否符合自动调整条件。可用在自动调优中的超参数,会自动分配给相应的参数范围类型。然后,AMT使用ValueHint
来为您选择最佳范围。您可以使用DescribeHyperParameterTrainingJob
API来查看这些范围。
以下示例演示了如何配置使用自动调优的调优作业。在配置示例中,超参数 max_depth
具有包含示例值 4
的 ValueHint
。
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。然后,自动调谐将 max_depth 超参数转换为超参数。 AutoParameters IntegerParameterRanges
以下来自 a 的响应DescribeHyperParameterTrainingJob
API显示最优值介IntegerParameterRanges
max_depth
于2
和之间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 超参数示例