本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
定義超參數範圍
本指南說明如何使用 SageMaker APIs 定義超參數範圍。內文也提供您可以使用的超參數擴展類型清單。
您對超參數和範圍的選擇,會大幅影響調校任務的效能。超參數調校會針對您為每個調校式超參數所指定的值範圍,尋找您模型的最佳超參數值。您也可以指定最多 100 個靜態超參數,這些參數在調校任務中並不會變更。您最多可使用 100 個超參數 (靜態 + 調校式)。如需超參數和範圍的選擇準則,請參閱超參數調校的最佳實務。您也可以使用自動調校來尋找最佳的調校任務設定。如需更多資訊,請參閱下列自動調校一節。
注意
SageMaker AI Automatic Model Tuning (AMT) 可能會新增額外的超參數 (導致總超參數限制為 100 個)。目前,為了將您的目標指標傳遞至調校任務,以便在訓練期間使用, SageMaker AI _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來定義超參數範圍。可以在 ParameterRanges
欄位中指定超參數的名稱和值範圍,其位於您傳遞給 CreateHyperParameterTuningJob
操作的 HyperParameterTuningJobConfig
參數中。
該 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
。的下列回應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
欄位指定一個值。您可以從下列超參數擴展類型來選擇:
- Auto
-
SageMaker AI 超參數調校會選擇超參數的最佳擴展。
- 線性
-
超參數調校會使用線性尺度搜尋超參數範圍中的值。通常,如果從最低到最高的所有值範圍相對較小 (在一個幅度以內),則選擇此選項。從範圍內統一搜尋值,可以對整個範圍進行合理的探索。
- 對數
-
超參數調校會使用對數尺度搜尋超參數範圍中的值。
對數擴展只適用於值大於 0 的範圍。
當您搜尋跨多個幅度的範圍時,請選擇對數擴展。
例如,如果您調校的是 調校線性學習程式模型 模型,並為
learning_rate
超參數指定 .0001 至 1.0 之間的值範圍,請考慮下列重點:依對數擴展進行統一搜尋,可提供比以線性擴展搜尋更佳的整個範圍取樣。這是因為以線性擴展搜尋平均會將 90% 的訓練預算投入至 .1 到 1.0 之間的值。因此對於 .0001 和 .1 之間的值,只剩下 10% 的訓練預算。 ReverseLogarithmic
-
超參數調校會使用反向對數擴展搜尋超參數範圍中的值。只有連續的超參數範圍才支援反向對數擴展。不支援將其用於整數超參數範圍。
當您搜尋的範圍對於非常接近 1 的小型變更非常敏感時,請選擇反向對數尺度。
反向對數尺度僅適用於範圍完全落在 0<=x<1.0 的範圍。
如需使用超參數擴展的範例筆記本,請參閱 上的這些 Amazon SageMaker AI 超參數範例 GitHub