

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

# 定义超参数范围
<a name="automatic-model-tuning-define-ranges"></a>

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

超参数和范围的选择会对调优作业的性能产生巨大影响。超参数调优通过在您为每个可调超参数指定的值[范围](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTrainingJobDefinition.html#sagemaker-Type-HyperParameterTrainingJobDefinition-HyperParameterRanges)内进行搜索，为您的模型找到最佳超参数值。您还可以指定最多 100 个[静态超参数](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTrainingJobDefinition.html#sagemaker-Type-HyperParameterTrainingJobDefinition-StaticHyperParameters)，这些超参数在调优作业过程中不会发生变化。您总共可以使用最多 100 个超参数（静态 \$1 可调）。有关如何选择超参数和范围的指南，请参阅[超参数调优的最佳实践](automatic-model-tuning-considerations.md)。您还可以使用自动调优，查找最佳的调优作业设置。有关更多信息，请参阅以下**自动调优**部分。

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

## 静态超参数
<a name="automatic-model-tuning-define-ranges-static"></a>

静态超参数用于以下情况：   如果您具备可指导您选择常量值的背景知识。   如果您不希望探索超参数的值范围。   例如，您可以使用 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](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html)操作的`HyperParameterTrainingJobDefinition`参数[StaticHyperParameters](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTrainingJobDefinition.html#sagemaker-Type-HyperParameterTrainingJobDefinition-StaticHyperParameters)字段中指定键值对。

## 动态超参数
<a name="automatic-model-tuning-define-ranges-dynamic"></a>

您可以使用 SageMaker API 来定义[超参数范围](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTrainingJobDefinition.html#sagemaker-Type-HyperParameterTrainingJobDefinition-HyperParameterRanges)。在传递给 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html) 操作的 `HyperParameterTuningJobConfig` 参数的 `ParameterRanges` 字段中，指定超参数的名称和值的范围。

`ParameterRanges` 字段具有三个子字段：分类、整数和连续。您最多可定义总共 30 个（分类 \$1 整数 \$1 连续）可调超参数进行搜索。

**注意**  
每个分类超参数最多可以有 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` 的值应等于可能的不同分类组合的总数。

## 自动调优
<a name="automatic-model-tuning-define-ranges-autotune"></a>

为了节省搜索超参数范围、资源或目标指标的时间和资源，自动调优功能可以自动猜测某些超参数字段的最佳值。可使用自动调优查找以下字段的最佳值：
+ **[ParameterRanges](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html#sagemaker-Type-HyperParameterTuningJobConfig-ParameterRanges)**— 调整作业可以优化的超参数的名称和范围。
+ **[ResourceLimits](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ResourceLimits.html)**— 调整作业中要使用的最大资源。这些资源可能包括最大训练作业数、调优作业的最大运行时，以及可以同时运行的最大训练作业数。
+ **[TrainingJobEarlyStoppingType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html#sagemaker-Type-HyperParameterTuningJobConfig-TrainingJobEarlyStoppingType)**— 一个标志，如果某项工作与客观指标相比没有显著改善，则停止训练作业。默认为启用状态。有关更多信息，请参阅 [提前停止训练作业](automatic-model-tuning-early-stopping.md)。
+ **[RetryStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTrainingJobDefinition.html#sagemaker-Type-HyperParameterTrainingJobDefinition-RetryStrategy)**— 重试训练作业的次数。`RetryStrategy` 的非零值会增加作业成功完成的可能性。
+ **[Strategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html#sagemaker-Type-HyperParameterTuningJobConfig-Strategy)** – 指定超参数调优如何选择超参数值组合以用于其启动的训练作业。
+ **[ConvergenceDetected](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ConvergenceDetected.html)**— 表示自动模型调整 (AMT) 已检测到模型收敛的标志。

要使用自动调优，请执行以下操作：

1. 在 [ParameterRanges](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ParameterRanges.html)API 的`AutoParameters`字段中指定超参数和示例值。

1. 启用自动调优。

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\$1depth 超参数转换为超参数。 AutoParameters `IntegerParameterRanges`以下响应来自 `DescribeHyperParameterTrainingJob` API，显示 `max_depth` 的最优 `IntegerParameterRanges` 介于 `2` 与 `8` 之间。

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

## 超参数标度类型
<a name="scaling-type"></a>

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

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

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

对数  
超参数调优使用对数标度在超参数范围中搜索值。  
对数标度仅适用于其值大于 0 的范围。  
当搜索范围跨多个数量级时，可选择对数标度。  
例如，如果您正在调整一个[调整线性学习器模型](linear-learner.md)模型，并且为 `learning_rate` 超参数指定了介于 0.0001 到 1.0 之间的值范围，请考虑以下这点：与按线性标度搜索相比，按对数标度均匀搜索可以提供更好的整个范围的样本。这是因为平均而言，按线性标度搜索会将训练预算的 90% 用于 0.1 到 1.0 之间的值。因此，只剩下 10% 的训练预算用于 0.0001 到 0.1 之间的值。

`ReverseLogarithmic`  
超参数调优可使用反向对数标度，在超参数范围中搜索值。只有连续的超参数范围才支持反向对数标度。整数超参数范围不支持此功能。  
如果搜索范围对非常接近 1 的微小变化高度敏感，则可选用反向对数标度。  
反向对数标度仅适用于完全位于 0 <= x < 1.0 内的范围。

有关使用超参数缩放的笔记本示例，请参阅上的 [Amazon A SageMaker I 超参数示例](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/hyperparameter_tuning)。 GitHub