定義超參數範圍 - Amazon SageMaker AI

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

定義超參數範圍

本指南說明如何使用 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) 已偵測到模型收斂的旗標。

如要使用自動調校,請執行下列操作:

  1. 在 的 AutoParameters 欄位中指定超參數和範例值ParameterRangesAPI。

  2. 啟用自動調校。

AMT 將判斷您的超參數和範例值是否符合自動調校的資格。可用於自動調校的超參數會自動指派給合適的參數範圍類型。然後, AMT使用 為您ValueHint選取最佳範圍。您可以使用 DescribeHyperParameterTrainingJobAPI來檢視這些範圍。

下列範例顯示如何設定使用自動調校的調校任務。在組態範例中,超參數 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。的下列回應DescribeHyperParameterTrainingJobAPI顯示 的最佳 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