ハイパーパラメータの範囲を定義する - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ハイパーパラメータの範囲を定義する

このガイドでは、 SageMaker APIs を使用してハイパーパラメータの範囲を定義する方法について説明します。また、使用できるハイパーパラメータのスケーリングタイプのリストも提供しています。

ハイパーパラメータと範囲を選択すると、調整ジョブのパフォーマンスに大きく影響します。ハイパーパラメータチューニングでは、調整可能なハイパーパラメータごとに指定した値の範囲を検索して、モデルに最適なハイパーパラメータ値を見つけます。調整ジョブ中に変化しない静的ハイパーパラメータを最大 100 個指定することもできます。ハイパーパラメータは、合計で 100 個まで (静的パラメータ + 調整可能なパラメータ) を使用できます。ハイパーパラメータと範囲の選択に関するガイダンスについては、ハイパーパラメータ調整のベストプラクティスを参照してください。Autotune を使用して最適な調整ジョブ設定を見つけることもできます。詳細については、次の「Autotune」セクションを参照してください。

注記

SageMaker 自動モデルチューニング (AMT) では、ハイパーパラメータの合計が 100 個という制限に影響するハイパーパラメータ (1 つ) が追加されることがあります。現在、トレーニング中に使用する調整ジョブに目標メトリクスを渡すために、 _tuning_objective_metricは自動的に SageMaker 追加されます。

静的ハイパーパラメータ

静的ハイパーパラメータは次の場合に使用します。 たとえば、AMT を使用して、param1 (調整可能なパラメータ) と param2 (静的パラメータ) を使用してモデルを調整するとします。その場合、2 つの値の間にある 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 フィールドには、カテゴリ、整数、連続の 3 つのサブフィールドがあります。検索対象となる調整可能なハイパーパラメータを合計 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 を指定した場合、この値は、異なるカテゴリの可能な組み合わせの合計数と等しくなる必要があります。

Autotune

ハイパーパラメータ範囲、リソース、または目標メトリクスを検索する時間とリソースを節約するため、Autotune により一部のハイパーパラメータフィールドの最適値を自動的に推測できます。Autotune を使用して、以下のフィールドの最適な値を検索します。

  • ParameterRanges – 調整ジョブが最適化できるハイパーパラメータの名前と範囲。

  • ResourceLimits - 調整ジョブで使用される最大リソース。これらのリソースには、トレーニングジョブの最大数、調整ジョブの最大実行時間、同時に実行できるトレーニングジョブの最大数が含まれます。

  • TrainingJobEarlyStoppingType — 目標メトリクスに対してジョブが大幅に改善されない場合にトレーニングジョブを停止するフラグ。デフォルトでは有効になっています。詳細については、「トレーニングジョブを早期停止する」を参照してください。

  • RetryStrategy – トレーニングジョブを再試行する回数。RetryStrategy の値を 0 以外に設定すると、ジョブが正常に完了する可能性が高くなります。

  • Strategy — ハイパーパラメータ調整で、起動するトレーニングジョブに使用するハイパーパラメータ値の組み合わせをどのように選択するかを指定します。

  • ConvergenceDetected — 自動モデル調整 (AMT) がモデルの収束を検出したことを示すフラグ。

Autotune を使用するには、次の操作を行います。

  1. ParameterRanges API の AutoParametersフィールドにハイパーパラメータとサンプル値を指定します。

  2. Autotune を有効にします。

AMT では、ハイパーパラメータとサンプル値が自動調整の対象となるかどうかを判断します。Autotune で使用できるハイパーパラメータは、適切なパラメータ範囲タイプに自動的に割り当てられます。次に、AMT は ValueHint を使用して最適な範囲を選択します。DescribeHyperParameterTrainingJob API を使用すると、これらの範囲を表示できます。

次の例は、Autotune を使用する調整ジョブを設定する方法を示しています。設定例では、ハイパーパラメータ max_depthValueHint にサンプル値 4 が含まれています。

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 の呼び出しに以前の設定が含まれた後に調整ジョブが作成されます。次に、autotune は の max_depth ハイパーパラメータ AutoParameters をハイパーパラメータ に変換しますIntegerParameterRanges。次の DescribeHyperParameterTrainingJob API からの応答は、max_depth の最適な IntegerParameterRanges 値が28 の間であることを示しています。

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

ハイパーパラメータのスケーリングタイプ

整数型および連続型のハイパーパラメータ範囲では、ハイパーパラメータ調整に使用するスケールを選択できます。たとえば、値の範囲を検索するには、ハイパーパラメータ範囲の ScalingType フィールドに値を指定できます。次のハイパーパラメータスケーリングタイプから選択できます。

Auto

SageMaker ハイパーパラメータの調整では、ハイパーパラメータに最適なスケールを選択します。

[Linear] (線形)

ハイパーパラメータの調整では、線形スケールを使用してハイパーパラメータ範囲内の値を検索します。通常、すべての値の最低から最高までの範囲が比較的小さい (1 桁違いである) 場合に、線形スケールを選択します。範囲内の値の均一な検索により、範囲全体を適切に探索できるためです。

対数

ハイパーパラメータの調整では、対数を使用してハイパーパラメータ範囲内の値を検索します。

対数スケールは、範囲内の値が 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 ハイパーパラメータの例 GitHubを参照してください。