

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 定義超參數範圍
<a name="automatic-model-tuning-define-ranges"></a>

本指南說明如何使用 SageMaker API 來定義超參數範圍。內文也提供您可以使用的超參數擴展類型清單。

您對超參數和範圍的選擇，會大幅影響調校任務的效能。超參數調校會針對您為每個調校式超參數所指定的值[範圍](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)。可以在 `ParameterRanges` 欄位中指定超參數的名稱和值範圍，其位於您傳遞給 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateHyperParameterTuningJob.html) 操作的 `HyperParameterTuningJobConfig` 參數中。

該 `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 呼叫中包含先前的組態後，系統會建立調校任務。隨即，自動調校會將 AutoParameters 中的 max\$1depth 超參數轉換為超參數 `IntegerParameterRanges`。來自 `DescribeHyperParameterTrainingJob` API 的以下回應，會針對 `max_depth` 顯示介於 `2` 和 `8` 之間的最佳 `IntegerParameterRanges`。

```
{
    '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` 超參數指定 .0001 至 1.0 之間的值範圍，請考慮下列重點：依對數擴展進行統一搜尋，可提供比以線性擴展搜尋更佳的整個範圍取樣。這是因為以線性擴展搜尋平均會將 90% 的訓練預算投入至 .1 到 1.0 之間的值。因此對於 .0001 和 .1 之間的值，只剩下 10% 的訓練預算。

`ReverseLogarithmic`  
超參數調校會使用反向對數擴展搜尋超參數範圍中的值。只有連續的超參數範圍才支援反向對數擴展。不支援將其用於整數超參數範圍。  
當您搜尋的範圍對於非常接近 1 的小型變更非常敏感時，請選擇反向對數尺度。  
反向對數尺度僅適用於範圍完全落在 0<=x<1.0 的範圍。

如需使用超參數擴展的範例筆記本，請參閱[ GitHub 上的這些 Amazon SageMaker AI 超參數範例](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/hyperparameter_tuning)。