

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

# Neptune ML でのモデルのハイパーパラメータ設定のカスタマイズ
<a name="machine-learning-customizing-hyperparams"></a>

Neptune ML モデルトレーニングジョブを開始すると、Neptune ML は先行する[データ処理](machine-learning-on-graphs-processing.md)ジョブから推測された情報を自動的に使用します。この情報を使用して、タスク用に複数のモデルをトレーニングするための [SageMaker AI ハイパーパラメータチューニングジョブ](https://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-how-it-works.html)の作成に使用されるハイパーパラメータ構成範囲を生成します。そうすれば、トレーニングの対象となるモデルのハイパーパラメータ値の長いリストを指定する必要はありません。代わりに、モデルのハイパーパラメータの範囲とデフォルトは、タスクタイプ、グラフタイプ、およびチューニングジョブ設定に基づいて選択されます。

ただし、データ処理ジョブが生成する JSON 設定ファイルを変更して、デフォルトのハイパーパラメータ設定を上書きし、カスタムハイパーパラメータを指定することもできます。

Neptune MLを使う [modelTraining API](machine-learning-api-modeltraining.md) では、`maxHPONumberOfTrainingJobs`、`maxHPOParallelTrainingJobs` および `trainingInstanceType` のようなハイレベルハイパーパラメータチューニングジョブ設定をいくつか制御できます。モデルのハイパーパラメータをよりきめ細かく制御するには、データ処理ジョブが生成する `model-HPO-configuration.json` ファイルをカスタマイズします。ファイルは、処理ジョブの出力用に指定した Amazon S3 の場所に保存されます。

ファイルをダウンロードし、デフォルトのハイパーパラメータ設定を上書きするように編集し、同じ Amazon S3 の場所にアップロードし直すことができます。ファイルの名前を変更しないでください。編集の際は、次の手順に従うよう注意してください。

Amazon S3 からファイルをダウンロードするには:

```
aws s3 cp \
  s3://(bucket name)/(path to output folder)/model-HPO-configuration.json \
  ./
```

編集が終わったら、ファイルを元の場所にアップロードし直します。

```
aws s3 cp \
  model-HPO-configuration.json \
  s3://(bucket name)/(path to output folder)/model-HPO-configuration.json
```

## `model-HPO-configuration.json` ファイルの構造
<a name="machine-learning-hyperparams-file-structure"></a>

`model-HPO-configuration.json` ファイルは、学習するモデル、機械学習 `task_type` およびモデルトレーニングのさまざまな実行に対して変更または固定する必要のあるハイパーパラメータを指定します。

ハイパーパラメータは、ハイパーパラメータチューニングジョブが呼び出されたときにハイパーパラメータに与えられる優先順位を示すさまざまな階層に属するものとして分類されます。
+ Tier-1 ハイパーパラメータの優先順位は最優先されます。`maxHPONumberOfTrainingJobs` を10 未満の値に設定すると、Tier-1 ハイパーパラメータのみが調整され、残りはデフォルト値になります。
+ Tier-2 ハイパーパラメータの優先順位は低いため、チューニングジョブの合計トレーニングジョブが 10 以上あっても 50 未満の場合は、Tier-1 と Tier-2 の両方のハイパーパラメータが調整されます。
+ Tier 3 のハイパーパラメータは、合計 50 を超えるトレーニングジョブがある場合にのみ、Tier-1 および Tier-2 とともに調整されます。
+ ハイパーパラメータを特定の層に配置し、その範囲を編集し、そのデフォルト値が適切に設定されていることを確認して、ハイパーパラメータの優先順位を変更します。

### `model-HPO-configuration.json` ファイルの例
<a name="machine-learning-hyperparams-file-sample"></a>

次に、`model-HPO-configuration.json` ファイルの例を示します。

```
{
  "models": [
    {
      "model": "rgcn",
      "task_type": "node_class",
      "eval_metric": {
        "metric": "acc"
      },
      "eval_frequency": {
          "type":  "evaluate_every_epoch",
          "value":  1
      },
      "1-tier-param": [
        {
            "param": "num-hidden",
            "range": [16, 128],
            "type": "int",
            "inc_strategy": "power2"
        },
        {
          "param": "num-epochs",
          "range": [3,30],
          "inc_strategy": "linear",
          "inc_val": 1,
          "type": "int",
          "node_strategy": "perM"
        },
        {
          "param": "lr",
          "range": [0.001,0.01],
          "type": "float",
          "inc_strategy": "log"
        }
      ],
      "2-tier-param": [
        {
          "param": "dropout",
          "range": [0.0,0.5],
          "inc_strategy": "linear",
          "type": "float",
          "default": 0.3
        },
        {
          "param": "layer-norm",
          "type": "bool",
          "default": true
        }
      ],
      "3-tier-param": [
        {
          "param": "batch-size",
          "range": [128, 4096],
          "inc_strategy": "power2",
          "type": "int",
          "default": 1024
        },
        {
          "param": "fanout",
          "type": "int",
          "options": [[10, 30],[15, 30], [15, 30]],
          "default": [10, 15, 15]
        },
        {
          "param": "num-layer",
          "range": [1, 3],
          "inc_strategy": "linear",
          "inc_val": 1,
          "type": "int",
          "default": 2
        },
        {
          "param": "num-bases",
          "range": [0, 8],
          "inc_strategy": "linear",
          "inc_val": 2,
          "type": "int",
          "default": 0
        }
      ],
      "fixed-param": [
        {
          "param": "concat-node-embed",
          "type": "bool",
          "default": true
        },
        {
          "param": "use-self-loop",
          "type": "bool",
          "default": true
        },
        {
          "param": "low-mem",
          "type": "bool",
          "default": true
        },
        {
          "param": "l2norm",
          "type": "float",
          "default": 0
        }
      ]
    }
  ]
}
```

### `model-HPO-configuration.json` 要素のリスト。
<a name="machine-learning-hyperparams-file-elements"></a>

このファイルには、モデル設定オブジェクトが 1 つ含まれる `models` という名前のトップレベル配列が 1 つある JSON オブジェクトが含まれています。ファイルをカスタマイズするときは、`models` 配列にはモデル設定オブジェクトが 1 つしかないことを確認してください。ファイルに複数のモデル設定オブジェクトが含まれている場合、チューニングジョブは警告とともに失敗します。

モデル設定オブジェクトには、次の最上位要素が含まれます。
+ **`model`** — (*文字列*) トレーニングするモデルタイプ (**変更しない**)。次の値を指定できます。
  + `"rgcn"` — これは、ノード分類およびリグレッションタスク、および異種リンク予測タスクのデフォルトです。
  + `"transe"` — これは、KGE リンク予測タスクのデフォルトです。
  + `"distmult"` — これは KGE リンク予測タスクの代替モデルタイプです。
  + `"rotate"` — これは KGE リンク予測タスクの代替モデルタイプです。

  原則として、`model` 値は直接変更しないでください。モデルタイプによって適用可能なハイパーパラメータが実質的に異なることが多く、トレーニングジョブの開始後に解析エラーが発生する可能性があるためです。

  モデルタイプを変更するには、`model-HPO-configuration.json` ファイルで変えるのではなく、[モデルトレーニング API](machine-learning-api-modeltraining.md#machine-learning-api-modeltraining-create-job)で `modelName` パラメータを使用します。

  モデルタイプを変更し、細粒度のハイパーパラメータを変更するには、使用するモデルのデフォルトのモデル設定テンプレートをコピーして、`model-HPO-configuration.json` ファイルにペーストします。推論タスクタイプが複数のモデルをサポートしている場合は、`model-HPO-configuration.json` ファイルと同じ Amazon S3 の場所に `hpo-configuration-templates` という名前のフォルダがあります。このフォルダには、タスクに適用可能な他のモデルのデフォルトのハイパーパラメータ設定がすべて含まれています。

  たとえば、`KGE` リンク予測タスクのためにモデルとハイパーパラメータ設定をデフォルトの `transe` モデルから `distmult` モデルに変更する場合、`hpo-configuration-templates/distmult.json` ファイルの内容を `model-HPO-configuration.json` ファイルに貼り付けるだけで、それから必要に応じてハイパーパラメータを編集します。
**注記**  
`modelTraining` APIで `modelName` のパラメータを設定し、また `model` とハイパーパラメータの仕様を `model-HPO-configuration.json` ファイルで変更すると、これらは異なり、`model-HPO-configuration.json` ファイル内の `model` 値が優先され、`modelName` 値は無視されます。
+ **`task_type`** — (*文字列*) データ処理ジョブによって推測される、またはデータ処理ジョブに直接渡される機械学習タスクタイプ (**変更しない**)。次の値を指定できます。
  + `"node_class"`
  + `"node_regression"`
  + `"link_prediction"`

  データ処理ジョブは、エクスポートされたデータセットと生成されたトレーニングジョブ設定ファイルでデータセットのプロパティを調べて、タスクタイプを推論します。

  この値は変更しないでください。別のタスクをトレーニングしたいなら、[新しいデータ処理ジョブを実行する](machine-learning-on-graphs-processing.md)必要があります。`task_type` 値が予測と異なる場合は、データ処理ジョブへの入力が正しいか確認する必要があります。これには、`modelTraining` API に対するパラメータ、およびデータエクスポートプロセスによって生成されたトレーニングジョブ設定ファイル内があります。
+ **`eval_metric`** — (*文字列*) 評価指標は、モデルのパフォーマンスを評価し、HPO 実行全体で最もパフォーマンスの高いモデルを選択するために使用する必要があります。次の値を指定できます。
  + `"acc"` — 標準の分類精度。これは、データ処理中に不均衡なラベルが検出されない限り、単一ラベル分類タスクのデフォルトです。この場合、デフォルトは `"F1"` です。
  + `"acc_topk"` — **`k`** 予測の中で正しいラベルが一番上にある回数。追加のキーとして `topk` で受け渡すことで **`k`** 値も設定できます。
  + `"F1"` — [F1 スコア](https://en.wikipedia.org/wiki/F-score)。
  + `"mse"` – [平均二乗誤差メトリクス](https://en.wikipedia.org/wiki/Mean_squared_error)。リグレッションタスクの場合。
  + `"mrr"` – [平均逆数ランクメトリクス](https://en.wikipedia.org/wiki/Mean_reciprocal_rank)。
  + `"precision"` — 予測された陽性に対する真陽性の比率として計算されたモデルの精度。`= true-positives / (true-positives + false-positives)`。
  + `"recall"` — 実際の陽性に対する真陽性の比率として計算されたモデルのリコール。`= true-positives / (true-positives + false-negatives)`。
  + `"roc_auc"` — [ROC カーブ](https://en.wikipedia.org/wiki/Receiver_operating_characteristic)下のエリア。これは、マルチラベル分類のデフォルトです。

  たとえば、メトリクスを `F1` に変更するには、`eval_metric` 値を次のように変更します。

  ```
  "  eval_metric": {
      "metric": "F1",
    },
  ```

  または、メトリクスを `topk` 精度スコアに変更するには、`eval_metric` 値を次のように変更します。

  ```
    "eval_metric": {
      "metric": "acc_topk",
      "topk": 2
    },
  ```
+ **`eval_frequency`** — (*オブジェクト*) トレーニング中に検証セット上のモデルのパフォーマンスをチェックする頻度を指定します。検証のパフォーマンスに基づいて、早期停止を開始し、最適なモデルを保存できます。

  `eval_frequency` オブジェクトには いわゆる `"type"` および `"value"` の、2 つの要素が含まれています。例:

  ```
    "eval_frequency": {
      "type":  "evaluate_every_pct",
      "value":  0.1
    },
  ```

  有効な `type` 値は次のとおりです。
  + **`evaluate_every_pct`** — 各評価で完了するトレーニングの割合を指定します。

    `evaluate_every_pct` の場合、`"value"` フィールドには、そのパーセンテージを表すゼロから 1 までの浮動小数点数が含まれます。

    
  + **`evaluate_every_batch`** — 各評価で完了するトレーニングバッチの数を指定します。

    `evaluate_every_batch` の場合、`"value"` フィールドには、そのバッチ数を表す整数が含まれます。
  + **`evaluate_every_epoch`** — 評価ごとのエポック数を指定します。新しいエポックは午前 0 時に開始されます。

    `evaluate_every_epoch` の場合、`"value"` フィールドには、そのエポック数を表す整数が含まれます。

  `eval_frequency` のデフォルトの設定は次のとおりです。

  ```
    "eval_frequency": {
      "type":  "evaluate_every_epoch",
      "value":  1
    },
  ```
+ **`1-tier-param`** — (*必須*) Tier-1 ハイパーパラメータの配列。

  ハイパーパラメータを調整しない場合は、これを空の配列に設定できます。これは SageMaker AI ハイパーパラメータチューニングジョブによって起動されるトレーニングジョブの総数には影響しません。これは、すべてのトレーニングジョブが 1 より多いが 10 未満の場合、同じハイパーパラメータのセットで実行されることを意味します。

  一方、すべての調整可能なハイパーパラメータを同じ有意で扱う場合は、すべてのハイパーパラメータをこの配列に入れることができます。
+ **`2-tier-param`** — (*必須*) Tier-2 ハイパーパラメータの配列。

  これらのパラメータは、`maxHPONumberOfTrainingJobs` が 10 より大きい値を持つ場合にのみ調整されます。そうしない場合は、デフォルト値が固定されます。

  最大で 10 のトレーニングジョブ用のトレーニング予算がある場合、または他の理由で Tier-2 ハイパーパラメータを必要とせず、すべての調整可能なハイパーパラメータを調整する場合は、これを空の配列に設定できます。
+ **`3-tier-param`** — (*必須*) Tier-3 ハイパーパラメータの配列。

  これらのパラメータは、`maxHPONumberOfTrainingJobs` が 50 より大きい値を持つ場合にのみ調整されます。そうしない場合は、デフォルト値が固定されます。

  Tier-3 ハイパーパラメータを調整しない場合は、これを空の配列に設定できます。
+ **`fixed-param`** — (*必須*) 既定値のみを取り、さまざまなトレーニングジョブによって変化しない固定ハイパーパラメータの配列。

  すべてのハイパーパラメータを変更する場合は、これを空の配列に設定し、すべての階層を変えるか、すべてのハイパーパラメータを Tier-1 にするのに十分な大きさ `maxHPONumberOfTrainingJobs` の値に設定します。

`1-tier-param`、`2-tier-param`、`3-tier-param` および `fixed-param` の各ハイパーパラメータを表す JSON オブジェクトには、次の要素が含まれます。
+ **`param`** — (*文字列*) ハイパーパラメータの名前 (**変わらない**)。

  フレームワークの使用の詳細については、[Neptune ML の有効なハイパーパラメータ名のリスト](#machine-learning-hyperparams-list)を参照してください。
+ **`type`** — (*文字列*) ハイパーパラメータタイプ (**変わらない**)。

  有効なタイプは、`bool`、`int` および `float` です。
+ **`default`** — (*文字列*) ハイパーパラメータのデフォルト値。

  新しいデフォルト値を設定できます。

調整可能なハイパーパラメータには、次の要素を含めることができます。
+ **`range`** — (*配列*) 連続調整可能なハイパーパラメータの範囲。

  これは、2つの値、すなわち範囲の最小値と最大値を持つ配列でなければなりません (`[min, max]`)。
+ **`options`** — (*配列*) カテゴリカル調整可能なハイパーパラメータのオプション。

  この配列には、考慮すべきすべてのオプションが含まれている必要があります。

  ```
    "options" : [value1, value2, ... valuen]
  ```
+ **`inc_strategy`** — (*文字列*) 連続調整可能なハイパーパラメータ範囲に対する増分変更のタイプ (**変わらない**)。

  有効な値は、`log`、`linear`、`power2` です。これは、範囲キーが設定されている場合にだけ適用されます。

  これを変更すると、チューニングにハイパーパラメータの全範囲を使用しないことがあります。
+ **`inc_val`** — (*浮動小数点*) 連続調整可能ハイパーパラメータで連続する増分が異なる量 (**変わらない**)。

  これは、範囲キーが設定されている場合にだけ適用されます。

  これを変更すると、チューニングにハイパーパラメータの全範囲を使用しないことがあります。
+ **`node_strategy`** — (*文字列*) このハイパーパラメータの有効範囲は、グラフ内のノード数に基づいて変化することを示します (**変わらない**)。

  有効な値は、`"perM"` (100 万当たり)、`"per10M"` (1000 万当たり)、`"per100M"` (1 億当たり) です。

  この値を変更するのではなく、代わりに `range` を変更します。
+ **`edge_strategy`** — (*文字列*) このハイパーパラメータの有効範囲は、グラフ内のエッジ数に基づいて変化することを示します (**変わらない**)。

  有効な値は、`"perM"` (100 万当たり)、`"per10M"` (1000 万当たり)、`"per100M"` (1 億当たり) です。

  この値を変更するのではなく、代わりに `range` を変更します。

### Neptune ML のすべてのハイパーパラメータのリスト
<a name="machine-learning-hyperparams-list"></a>

次のリストには、Neptune ML の任意のモデルタイプおよびタスクに対して設定できるすべてのハイパーパラメータが含まれています。これらはすべて全部のモデルタイプに適用できるわけではないので、ハイパーパラメータは使用しているモデルのテンプレートに表示される `model-HPO-configuration.json` ファイルでのみ設定します。
+ **`batch-size`** — 1 つのフォワードパスで使用するターゲットノードのバッチのサイズ。*タイプ*: `int`。

  これをはるかに大きな値に設定すると、GPU インスタンスのトレーニングでメモリの問題が発生する可能性があります。
+ **`concat-node-embed`** — モデルの表現度を高めるために、処理された特徴を学習可能な最初のノード埋め込みと連結して、ノードの初期表現を取得するかどうかを示します。*タイプ*: `bool`。
+ **`dropout`** — ドロップアウトレイヤーに適用されるドロップアウトの確率。*タイプ*: `float`。

  
+ **`edge-num-hidden`** — エッジフィーチャモジュールの非表示のレイヤーサイズまたはユニット数。`use-edge-features` が `True` に設定されている場合にのみ使用されます。*タイプ*: 浮動小数点。
+ **`enable-early-stop`** — 早期停止機能を使用するかどうかを切り替えます。*タイプ*: `bool`。*デフォルト*: `true`。

  このブール値パラメータを使用して、早期停止機能をオフにします。
+ **`fanout`** — ネイバーサンプリング中にターゲットノードについてサンプリングするネイバーの数。*タイプ*: `int`。

  この値は、`num-layers` と緊密に結合されています。また、常に同じハイパーパラメータ層内に配置する必要があります。これは、潜在的な GNN レイヤーごとにファンアウトを指定できるためです。

  このハイパーパラメータによってモデルのパフォーマンスが大きく変わる可能性があるため、固定するか、Tier-2 または Tier-3 ハイパーパラメータとして設定する必要があります。これを大きな値に設定すると、GPU インスタンスのトレーニングでメモリの問題が発生する可能性があります。
+ **`gamma`** — スコア関数のマージン値。*タイプ*: `float`。

  これは、`KGE` リンク予測モデルのみに当てはまります。
+ **`l2norm`** — オプティマイザで使用される荷重減衰値。荷重に L2 正規化ペナルティを課します。*タイプ*: `bool`。
+ **`layer-norm`** — `rgcn` モデルにレイヤー正規化を使用するかどうかを示します。*タイプ*: `bool`。
+ **`low-mem`** — 速度を犠牲にしてリレーションメッセージパッシング関数のメモリ不足実装を使用するかどうかを示します。*タイプ*: `bool`。

  
+ **`lr`** — 学習レート。*タイプ*: `float`。

  これは Tier-1 ハイパーパラメータとして設定する必要があります。
+ **`neg-share`** — リンク予測では、正のサンプリングされたエッジが負のエッジサンプルを共有できるかどうかを示します。*タイプ*: `bool`。
+ **`num-bases`** — `rgcn` モデルにおける基底分解のベース数。グラフ内のエッジタイプの数よりも小さい `num-bases` の値を使用すると、グラフは `rgcn` モデルの正則化手段として機能します。*タイプ*: `int`。
+ **`num-epochs`** - 実行するトレーニングエポックの数。*タイプ*: `int`。

  エポックは、グラフを通る完全なトレーニングパスです。
+ **`num-hidden`** — 非表示のレイヤーのサイズまたは単位数。*タイプ*: `int`。

  これにより、特徴がないノードの初期埋め込みサイズも設定されます。

  これを `batch-size` を減らすことなくはるかに大きな値に設定すると、GPU インスタンスのトレーニングでメモリの問題が発生する可能性があります。
+ **`num-layer`** — モデル内の GNN レイヤーの数。*タイプ*: `int`。

  この値は、ファンアウトパラメータと緊密に結合されています。また、常に同じハイパーパラメータ層内にファンアウトを設定した後にこれが来る必要があります。

  これによってモデルのパフォーマンスが大きく変わる可能性があるため、固定するか、Tier-2 または Tier-3 ハイパーパラメータとして設定する必要があります。
+ **`num-negs`** — リンク予測では、正のサンプルあたりの負のサンプルの数。*タイプ*: `int`。
+ **`per-feat-name-embed`** — 特徴を組み合わせる前に個別に変換することにより、各特徴を埋め込むかどうかを示します。*タイプ*: `bool`。

  `true` に設定すると、ノードごとの各フィーチャが独立して固定次元サイズに変換され、その後、ノードのすべての変換されたフィーチャが連結され、さらに `num_hidden` 次元に変換されます。

  `false` に設定すると、フィーチャ固有の変換を行わずにフィーチャが連結されます。
+ **`regularization-coef`** — リンク予測では、正則化損失の係数。*タイプ*: `float`。
+ **`rel-part`** — `KGE` リンク予測に対してリレーションパーティションを使用するかどうかを示します。*タイプ*: `bool`。
+ **`sparse-lr`** — 学習可能なノード埋め込みの学習率。*タイプ*: `float`。

  学習可能な初期ノード埋め込みは、特徴がないノードや、`concat-node-embed` が設定されたときに使用されます。スパース学習可能ノード埋め込みレイヤーのパラメータは、個別の学習率を持つことができる別のオプティマイザを使用してトレーニングされます。
+ **`use-class-weight`** — 不均衡な分類タスクにクラス荷重を適用するかどうかを示します。`true` に設定すると、ラベル数を使用して、各クラスラベルの荷重が設定されます。*タイプ*: `bool`。
+ **`use-edge-features`** — メッセージの受け渡し時にエッジ機能を使用するかどうかを示します。`true` に設定すると、特徴を持つエッジタイプのカスタムエッジ機能モジュールが RGCN レイヤーに追加されます。*タイプ*: `bool`。
+ **`use-self-loop`** — `rgcn` モデルのトレーニングにセルフループを含めるかどうかを示します。*タイプ*: `bool`。
+ **`window-for-early-stop`** - 早期停止を決定するために平均する最新の検証スコアの数を制御します。デフォルトは 3. type=int です。[Neptune ML でのモデルトレーニングプロセスの早期停止](machine-learning-improve-model-performance.md#machine-learning-model-training-early-stop) も参照してください。*タイプ*: `int`。*デフォルト*: `3`。

  「」を参照してください。

## Neptune ML でのハイパーパラメータのカスタマイズ
<a name="machine-learning-hyperparams-editing"></a>

`model-HPO-configuration.json` ファイルを編集しているときでは、最も一般的な変更の種類を以下に示します。
+ `range` ハイパーパラメータの最小値および/または最大値を編集します。
+ ハイパーパラメータを固定値に設定するには、`fixed-param` セクションを開き、デフォルト値を設定したい固定値に設定します。
+ ハイパーパラメータを特定の層に配置し、その範囲を編集し、そのデフォルト値が適切に設定されていることを確認して、ハイパーパラメータの優先順位を変更します。