Amazon SageMaker 自動モデルチューニング PlatoBlockchain データインテリジェンスを使用してハイパーパラメーターを最適化します。垂直検索。あい。

Amazon SageMaker 自動モデル調整でハイパーパラメータを最適化する

機械学習 (ML) モデルが世界を席巻しています。 そのパフォーマンスは、適切なトレーニング データを使用し、適切なモデルとアルゴリズムを選択することにかかっています。 しかし、ここで終わりではありません。 通常、アルゴリズムは、特定のデータとタスクを採用するために、ML 実践者にいくつかの設計決定を委ねます。 これらの延期された設計決定は、次のように現れます。 ハイパーパラメータ.

その名前はどういう意味ですか。 ML トレーニングの結果であるモデルは、トレーニング中に学習されたパラメーターの集合と見なすことができます。 したがって、ML トレーニング プロセスを構成するために使用されるパラメーターは、ハイパーパラメーター (パラメーターの作成を記述するパラメーター) と呼ばれます。 いずれにしても、訓練するエポック数、学習率、決定木の最大深さなど、非常に実用的です。 また、モデルの最終的なパフォーマンスに大きな影響を与えるため、私たちはそれらに細心の注意を払っています。

ラジオ受信機のノブを回して適切な周波数を見つけるのと同じように、各ハイパーパラメーターを慎重に調整してパフォーマンスを最適化する必要があります。 ハイパーパラメータ空間で最適な値を検索することを、 ハイパーパラメータ調整 or ハイパーパラメーターの最適化 (HPO) であり、正確な予測を提供するモデルが得られるはずです。

この投稿では、最初の HPO ジョブをセットアップして実行します。 Amazon SageMaker 自動モデルチューニング (AMT)。 結果を探索するために利用できる方法について学び、HPO トライアルとハイパーパラメーター空間の探索の洞察に満ちた視覚化を作成します!

Amazon SageMaker 自動モデルチューニング

を使用する ML プラクティショナーとして SageMaker AMT、次のことに集中できます。

  • トレーニングジョブの提供
  • タスクに合った適切な目標指標を定義する
  • ハイパーパラメータ検索空間のスコープ

SageMaker AMT が残りの処理を行います。インフラストラクチャ、トレーニングジョブのオーケストレーション、ハイパーパラメータ選択の改善について考える必要はありません。

最初の単純な HPO ジョブに SageMaker AMT を使用して、XGBoost アルゴリズムをトレーニングおよび調整することから始めましょう。 私たちはあなたの AMT ジャーニーが実践的で実用的なものであることを望んでいるので、以下の例を共有しています。 GitHubリポジトリ. この投稿では、 1_tuning_of_builtin_xgboost.ipynb ノート。

今後の投稿では、最適なハイパーパラメーターを見つけるという概念を拡張し、検索空間と、モデルが敏感なハイパーパラメーターの範囲について学習することを含めます。 また、ワンショットのチューニング アクティビティを、ML プラクティショナーとの複数ステップの会話に変えて、一緒に学ぶ方法も示します。 乞うご期待(しゃれを意図)!

前提条件

この投稿は、HPO について学習することに関心があるすべての人を対象としており、トピックに関する予備知識は必要ありません。 ただし、ML の概念と Python プログラミングに関する基本的な知識は役に立ちます。 最高の学習体験を得るために、以下に従うことを強くお勧めします ノートブックで各ステップを実行する この投稿を読むのと並行して。 また、ノートブックの最後に、チューニングの結果を生き生きとさせるインタラクティブな視覚化を試すこともできます。

ソリューションの概要

SageMaker AMT を使用して最初の HPO ジョブを実行するためのエンドツーエンドのセットアップを構築します。 チューニング ジョブが完了したら、結果を調べるために使用できる方法をいくつか見ていきます。 AWSマネジメントコンソール AWS SDK と API を介してプログラムで。

まず、今のところ調整を行わずに、スタンドアロンのトレーニングジョブを実行して、環境と SageMaker トレーニングに慣れます。 として提供されている多くのアルゴリズムの XNUMX つである XGBoost アルゴリズムを使用します。 SageMaker 組み込みアルゴリズム (トレーニング スクリプトは必要ありません!)。

SageMaker トレーニングが次の方法でどのように機能するかを確認します。

  • インスタンスの開始と停止
  • 必要なコンテナーをプロビジョニングします
  • トレーニングおよび検証データをインスタンスにコピーします
  • トレーニングを実行します
  • メトリックとログを収集します
  • トレーニング済みモデルを収集して保存します

次に、AMT に移動して HPO ジョブを実行します。

  • AMT を使用してチューニング ジョブをセットアップし、開始します。
  • 各トレーニング ジョブの詳細なパフォーマンス メトリクスとメタデータを抽出するために使用できる方法を詳しく調べます。これにより、ハイパーパラメータ空間の最適な値について詳しく知ることができます。
  • トライアルの結果を表示する方法を紹介します
  • 一連のチャートでデータを視覚化するツールを提供し、ハイパーパラメータ空間に関する貴重な洞察を明らかにします

SageMaker 組み込み XGBoost アルゴリズムをトレーニングする

すべてはモデルのトレーニングから始まります。 そうすることで、SageMaker トレーニングがどのように機能するかを理解できます。

SageMaker が提供するスピードと使いやすさを活用したい 組み込みアルゴリズム. 必要なのは、トレーニングを開始するためのいくつかの手順です。

  1. データの準備と読み込み – XGBoost の入力としてデータセットをダウンロードして準備し、 Amazon シンプル ストレージ サービス (Amazon S3)バケット。
  2. 組み込みアルゴリズムの画像 URI を選択します – SageMaker は、この URI を使用してトレーニングコンテナを取得します。この場合、すぐに使用できる XGBoost トレーニングスクリプトが含まれています。 いくつかのアルゴリズム バージョンがサポートされています.
  3. ハイパーパラメータを定義する – SageMaker は、 ハイパーパラメータ 組み込みアルゴリズム用。 これらは、オープンソース バージョンで使用されるものと同じハイパーパラメータです。
  4. 推定器を構築する – インスタンスタイプやインスタンス数などのトレーニングパラメータを定義します。
  5. fit() 関数を呼び出す – トレーニングの仕事を開始します。

次の図は、これらの手順がどのように連携するかを示しています。

データを提供する

ML トレーニングを実行するには、データを提供する必要があります。 Amazon S3 経由でトレーニングと検証データを SageMaker に提供します。

この例では、簡単にするために、SageMaker のデフォルトのバケットを使用してデータを保存します。 ただし、次の値を好みに合わせて自由にカスタマイズしてください。

sm_sess = sagemaker.session.Session([..])

BUCKET = sm_sess.default_bucket()
PREFIX = 'amt-visualize-demo'
output_path = f's3://{BUCKET}/{PREFIX}/output'

ノートブックでは、パブリック データセットを使用し、データをローカルに保存します。 data ディレクトリ。 次に、トレーニング データと検証データを Amazon S3 にアップロードします。 後で、これらの場所へのポインタも定義して、SageMaker Training に渡します。

# acquire and prepare the data (not shown here)
# store the data locally
[..]
train_data.to_csv('data/train.csv', index=False, header=False)
valid_data.to_csv('data/valid.csv', index=False, header=False)
[..]
# upload the local files to S3
boto_sess.resource('s3').Bucket(BUCKET).Object(os.path.join(PREFIX, 'data/train/train.csv')).upload_file('data/train.csv')
boto_sess.resource('s3').Bucket(BUCKET).Object(os.path.join(PREFIX, 'data/valid/valid.csv')).upload_file('data/valid.csv')

この投稿では、HPO の紹介に集中します。 説明のために、特定のデータセットとタスクを使用して、客観的な指標の測定値を取得し、それを使用してハイパーパラメーターの選択を最適化します。 ただし、全体的な投稿では、データもタスクも重要ではありません。 全体像を示すために、私たちが何をしているのかを簡単に説明しましょう。
手書き数字データセットの光学認識 [1] Scikit-learn 経由。 XGBoost は構造化データの優れたアルゴリズムであり、Digits データセットにも適用できます。 次の例のように、値は 8×8 画像です。
0 a
5 フォルダーとその下に
4.

Amazon SageMaker 自動モデルチューニング PlatoBlockchain データインテリジェンスを使用してハイパーパラメーターを最適化します。垂直検索。あい。

XGBoost イメージ URI を選択します

組み込みアルゴリズム (XGBoost) を選択したら、画像 URI を取得し、これを SageMaker に渡してトレーニング インスタンスにロードする必要があります。 このステップでは、 利用可能なバージョン. ここでは、アルゴリズムの最新バージョンを提供するバージョン 1.5.1 を使用することにしました。 タスクに応じて、ML 実践者は、たとえばデータ準備手順を含む独自のトレーニング スクリプトを作成する場合があります。 しかし、これは私たちの場合は必要ありません。

独自のトレーニング スクリプトを作成する場合は、次回の投稿で取り上げますので、お楽しみに! 独自のカスタム トレーニング スクリプトを使用して SageMaker トレーニング ジョブを実行する方法を紹介します。

今のところ、アルゴリズム、AWS リージョン、およびバージョン番号を指定して、正しいイメージ URI が必要です。

xgboost_container = sagemaker.image_uris.retrieve('xgboost', region, '1.5-1')

それでおしまい。 これで、XGBoost アルゴリズムへの参照ができました。

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

次に、ハイパーパラメータを定義します。 これらの値は、モデルのトレーニング方法を構成し、最終的には、この場合の精度など、測定対象の客観的なメトリックに対してモデルがどのように機能するかに影響します。 次のコード ブロックは、SageMaker に固有のものではないことに注意してください。 私たちが実際に使っているのは オープンソース版 SageMaker によって提供され、最適化された XGBoost の

これらの各ハイパーパラメータは構成可能で調整可能ですが、客観的な指標は multi:softmax データセットと解決しようとしている問題の種類によって決まります。 私たちの場合、Digits データセットには複数のラベルが含まれています (手書きの数字の観察は、 0 or 1,2,3,4,5,6,7,8,9)、これはマルチクラスの分類問題であることを意味します。

hyperparameters = {
    'num_class': 10,
    'max_depth': 5,
    'eta':0.2,
    'alpha': 0.2,
    'objective':'multi:softmax',
    'eval_metric':'accuracy',
    'num_round':200,
    'early_stopping_rounds': 5
}

他のハイパーパラメータの詳細については、次を参照してください。 XGBoostハイパーパラメータ.

推定器を構築する

SageMaker Training の高レベルインターフェースである推定オブジェクトでトレーニングを設定します。

次に、トレーニングするインスタンスの数、インスタンス タイプ (CPU ベースまたは GPU ベース)、および接続されたストレージのサイズを定義します。

estimator = sagemaker.estimator.Estimator(
    image_uri=xgboost_container, 
    hyperparameters=hyperparameters,
    role=role,
    instance_count=1, 
    instance_type='ml.m5.large', 
    volume_size=5, # 5 GB 
    output_path=output_path
)

これで、開始するために必要なインフラストラクチャ構成ができました。 SageMaker トレーニングが残りを処理します。

fit() 関数を呼び出す

以前に Amazon S3 にアップロードしたデータを覚えていますか? 次に、それへの参照を作成します。

s3_input_train = TrainingInput(s3_data=f's3://{BUCKET}/{PREFIX}/data/train', content_type='csv')
s3_input_valid = TrainingInput(s3_data=f's3://{BUCKET}/{PREFIX}/data/valid', content_type='csv')

への呼び出し fit() 私たちのトレーニングを開始します。 作成したばかりのトレーニング データへの参照を渡し、SageMaker Training がトレーニング データと検証データを指すようにします。

estimator.fit({'train': s3_input_train, 'validation': s3_input_valid})

後で HPO を実行するために、実際に呼び出す必要はないことに注意してください。 fit() ここ。 後で HPO の推定オブジェクトが必要になるだけで、HPO ジョブの作成にジャンプできます。 しかし、SageMaker Training について学び、単一のトレーニングジョブを実行する方法を確認したいので、ここでそれを呼び出して出力を確認します。

トレーニングが開始されると、次のスクリーンショットに示すように、セルの下に出力が表示され始めます。 出力はで利用可能です アマゾンクラウドウォッチ このノートにも。

黒いテキストは、SageMaker 自体からのログ出力であり、インスタンスの開始やトレーニング イメージのロードなど、オーケストレーションのトレーニングに関連する手順を示しています。 青色のテキストは、トレーニング インスタンス自体から直接出力されます。 トレーニング データの読み込みと解析のプロセスを観察し、インスタンスで実行されているトレーニング スクリプトから直接、トレーニングの進行状況と目標指標の改善を視覚的に確認できます。

Jupyter Notebook の fit() 関数からの出力

また、出力ジョブの最後に、秒単位のトレーニング期間と請求可能な秒数が表示されることにも注意してください。

最後に、SageMaker がトレーニングモデルを推定オブジェクトで定義された S3 出力パスにアップロードしていることがわかります。 モデルは、推論のためにデプロイする準備ができています。

今後の投稿では、独自のトレーニング コンテナーを作成し、出力するトレーニング メトリックを定義します。 SageMaker が、トレーニングのために渡すコンテナに依存しないことがわかります。 これは、組み込みアルゴリズムをすぐに使い始めたいが、後で独自のカスタム トレーニング スクリプトを渡すことにした場合に非常に便利です。

現在および以前のトレーニング ジョブを検査する

これまでのところ、ノートブックからコードを使用して作業し、トレーニングジョブを SageMaker に送信しました。 視点を切り替えて、しばらくの間ノートブックを離れて、SageMaker コンソールでこれがどのように見えるかを確認しましょう。

SageMaker トレーニングジョブのコンソールビュー

SageMaker は、実行したトレーニング ジョブ、ハイパーパラメータ、アルゴリズム、データ入力、請求可能時間、および結果などの構成の履歴記録を保持します。 前のスクリーンショットのリストには、XGBoost でフィルター処理された最新のトレーニング ジョブが表示されます。 強調表示されているトレーニング ジョブは、先ほどノートブックでトレーニングしたジョブで、その出力は前に見ました。 詳細については、この個別のトレーニング ジョブに飛び込んでみましょう。

次のスクリーンショットは、トレーニング ジョブのコンソール ビューを示しています。

単一の SageMaker Training ジョブのコンソールビュー

セル出力として受け取った情報を確認して、 fit() SageMaker コンソール内の個々のトレーニングジョブで、推定器で定義したパラメータとメタデータとともに機能します。

前に見たトレーニング インスタンスからのログ出力を思い出してください。 ここでもトレーニング ジョブのログにアクセスできます。 モニター セクションと選択 ログを表示する.

トレーニング ジョブの [監視] タブのコンソール ビュー

これにより、CloudWatch 内のインスタンス ログが表示されます。

CloudWatch のトレーニング インスタンス ログのコンソール ビュー

また、トレーニング ジョブ用にノートブックで指定したハイパーパラメータも覚えておいてください。 トレーニング ジョブの同じ UI にも表示されます。

SageMaker Training ジョブのハイパーパラメータのコンソールビュー

実際、トレーニングジョブと推定器のために以前に指定した詳細とメタデータは、SageMaker コンソールのこのページにあります。 どのトレーニング コンテナーが使用されたか、トレーニングおよび検証データセットの場所など、トレーニングに使用された設定の有用な記録があります。

この時点で、なぜこれがハイパーパラメーターの最適化に関連するのかと疑問に思うかもしれません。 それは、私たちが興味を持っている HPO トライアルを検索、検査し、さらに深く掘り下げることができるからです。おそらく、最良の結果が得られたもの、または興味深い動作を示したものです。 何を「面白い」と定義するかはあなたにお任せします。 これにより、トレーニングジョブを検査するための共通インターフェースが提供され、SageMaker Search で使用できます。

SageMaker AMT は HPO ジョブを調整しますが、HPO トライアルはすべて個別の SageMaker トレーニング ジョブとして開始され、そのようにアクセスできます。

トレーニングがカバーされたので、チューニングを始めましょう!

SageMaker 組み込みの XGBoost アルゴリズムをトレーニングして調整する

XGBoost モデルを調整するために、既存のハイパーパラメーターを再利用し、探索する値の範囲を定義します。 これは、ハイパーパラメータ検索空間内の探索の境界を拡張するものと考えてください。 チューニング ジョブは検索スペースからサンプリングし、値の新しい組み合わせについてトレーニング ジョブを実行します。 次のコードは、SageMaker AMT がサンプリングするハイパーパラメータ範囲を指定する方法を示しています。

from sagemaker.tuner import IntegerParameter, ContinuousParameter, HyperparameterTuner

hpt_ranges = {
    'alpha': ContinuousParameter(0.01, .5),
    'eta': ContinuousParameter(0.1, .5),
    'min_child_weight': ContinuousParameter(0., 2.),
    'max_depth': IntegerParameter(1, 10)
}

個々のハイパーパラメータの範囲は、次のようにタイプによって指定されます 連続パラメータ. これらのパラメータ範囲の選択に関する詳細とヒントについては、次を参照してください。 XGBoostモデルを調整する.

まだ実験を行っていないため、ハイパーパラメータの適切な値の範囲はわかりません。 したがって、アルゴリズムに関する知識と組み込みアルゴリズムのハイパーパラメーターのドキュメントを使用して、経験に基づいた推測から始めます。 これにより、検索スペースを定義するための開始点が定義されます。

次に、定義された範囲内のハイパーパラメータからチューニング ジョブ サンプリングを実行します。 その結果、どのハイパーパラメータ範囲が良い結果をもたらすかがわかります。 この知識があれば、使用するハイパーパラメータ範囲を狭めたり広げたりすることで、検索空間の境界を絞り込むことができます。 次の最後のセクションでは、試行から学ぶ方法を示します。ここでは、結果を調査して視覚化します。

次の投稿では、旅を続け、さらに深く掘り下げていきます。 さらに、検索空間を探索するために使用できるいくつかの戦略があることを学びます。 これらの異なる戦略を比較しながら、後続の HPO ジョブを実行して、ハイパーパラメーターのさらにパフォーマンスの高い値を見つけます。 また、SageMaker AMT でウォームスタートを実行して、以前に探索した検索スペースから得た知識を、最初の境界を超えた探索で使用する方法についても説明します。

この投稿では、ベイジアン検索戦略を使用して単一の HPO ジョブの結果を分析および視覚化する方法に焦点を当てます。

リンクされたノートブックをたどると、単一の組み込み XGBoost トレーニング ジョブに使用したものと同じ推定器が渡されることに注意してください。 この推定オブジェクトは、AMT が作成する新しいトレーニング ジョブのテンプレートとして機能します。 AMT は、定義した範囲内でハイパーパラメータを変化させます。

客観的指標を最大化したいことを指定することで、 validation:accuracy、トレーニングインスタンスログでこれらのメトリクスを探し、検証データの精度メトリクスを最大化すると思われるハイパーパラメータ値を選択するように SageMaker AMT に指示しています。 私たちは適切なものを選びました XGBoost の客観的指標 私たちのドキュメントから。

さらに、並列化を利用できます max_parallel_jobs. これは、特に、以前の試行の結果を考慮 (学習) せずに、試行が個別に選択される戦略の場合に、強力なツールになる可能性があります。 これらの他の戦略とパラメーターについては、次の記事で詳しく説明します。 この投稿では、優れたデフォルト戦略であるベイジアンを使用します。

また、定義します max_jobs 合計で実行する試行の数を定義します。 私たちの例から自由に逸脱して、より小さな数を使用してお金を節約してください。

n_jobs = 50
n_parallel_jobs = 3

tuner_parameters = {
    'estimator': estimator, # The same estimator object we defined above
    'base_tuning_job_name': 'bayesian',
    'objective_metric_name': 'validation:accuracy',
    'objective_type': 'Maximize',
    'hyperparameter_ranges': hpt_ranges,
    'strategy': 'Bayesian',
    'max_jobs': n_jobs,
    'max_parallel_jobs': n_parallel_jobs
}

私たちはもう一度呼びます fit()、投稿の前半で単一のトレーニング ジョブを開始したときと同じ方法です。 ただし、今回は、estimator オブジェクトではなく、tuner オブジェクトについてです。 これにより、チューニング ジョブが開始され、次に AMT がトレーニング ジョブを開始します。

tuner = HyperparameterTuner(**tuner_parameters)
tuner.fit({'train': s3_input_train, 'validation': s3_input_valid}, wait=False)
tuner_name = tuner.describe()['HyperParameterTuningJobName']
print(f'tuning job submitted: {tuner_name}.')

次の図は、SageMaker AMT に HPO を含めることで以前のアーキテクチャを拡張したものです。

SageMaker AMT を使用した SageMaker トレーニングとハイパーパラメータ最適化の概要

HPO ジョブが送信されたことがわかります。 によって定義される試行回数に応じて、 n_jobs 並列化のレベルによっては、時間がかかる場合があります。 この例では、並列化レベル 30 のみで 50 回の試行に最大 3 分かかる場合があります。

tuning job submitted: bayesian-221102-2053.

このチューニング ジョブが完了したら、SageMaker コンソールで利用できる情報を調べてみましょう。

コンソールで AMT ジョブを調査する

を選択して、SageMaker コンソールでチューニングジョブを見つけてみましょう トレーニング ナビゲーションペインで ハイパーパラメータ調整ジョブ. これにより、次のスクリーンショットに示すように、AMT ジョブのリストが表示されます。 ここに私たちの場所があります bayesian-221102-2053 ジョブを調整し、それが完了したことを確認します。

ハイパーパラメータ調整ジョブ ページのコンソール ビュー。 画像は、1 つのチューニング エントリを含むチューニング ジョブのリスト ビューを示しています。

この HPO ジョブの結果を詳しく見てみましょう。

プログラムで結果を抽出する方法については、 ノート. 最初に SageMaker Python SDKは、SageMaker 専用の API を提供する高レベルのオープンソース Python ライブラリです。 それから ボト3、SageMaker およびその他の AWS サービスへの低レベル API を提供します。

SageMaker Python SDK を使用して、HPO ジョブの結果を取得できます。

sagemaker.HyperparameterTuningJobAnalytics(tuner_name).dataframe()[:10]

これにより、次のスクリーンショットに示すように、Pandas DataFrame で各試行の結果を分析できました。

HPO ジョブのために実行された証跡の結果とメタデータを示す Jupyter Notebook の Pandas テーブル

もう一度視点を切り替えて、SageMaker コンソールで結果がどのように見えるかを見てみましょう。 次に、カスタム ビジュアライゼーションを見ていきます。

同じページで、私たちの選択 bayesian-221102-2053 チューニング ジョブは、チューニング ジョブで実行されたトライアルのリストを提供します。 ここでの各 HPO トライアルは、SageMaker トレーニングジョブです。 以前、単一の XGBoost モデルをトレーニングし、SageMaker コンソールでトレーニング ジョブを調査したときのことを思い出してください。 ここでの試行についても同じことができます。

試行を調査すると、次のことがわかります。 bayesian-221102-2053-048-b59ec7b4 約 89.815% の検証精度で、最高のパフォーマンスのモデルを作成しました。 を選択して、どのハイパーパラメータがこのパフォーマンスにつながったかを調べてみましょう。 最高のトレーニングジョブ タブには何も表示されないことに注意してください。

実行されたトレーニング ジョブのリストを示す、単一のチューニング ジョブのコンソール ビュー

評価された最高のハイパーパラメータの詳細ビューを見ることができます。

最適なトレーニング ジョブの詳細を示す、単一の調整ジョブのコンソール ビュー

どのハイパーパラメータ値がこの優れたパフォーマンスにつながったかをすぐに確認できます。 しかし、私たちはもっと知りたいと思っています。 何を推測できますか? 私たちはそれを見る alpha 0.052456 の近似値を取り、同様に、 eta 0.433495 に設定されています。 これは、これらの値がうまく機能していることを示していますが、ハイパーパラメーター空間自体についてはほとんどわかりません。 たとえば、0.433495 が eta テストされた最高値であるか、またはより高い値を選択することで成長とモデルの改善の余地があるかどうか。

そのためには、ズームアウトして、ハイパーパラメーターの他の値がどのように機能するかを確認するために、より広い視野を取る必要があります。 大量のデータを一度に見る方法の XNUMX つは、HPO 試行からのハイパーパラメーター値をグラフにプロットすることです。 そうすれば、これらの値が相対的にどのように機能したかがわかります。 次のセクションでは、このデータを SageMaker から引き出して視覚化します。

私たちの試験を視覚化する

SageMaker SDK は探索用のデータを提供し、ノートブックはそれを垣間見ることができます。 しかし、それを利用して視覚化する方法はたくさんあります。 この投稿では、 アルテア 試験のより視覚的な概要を作成するために使用する統計的視覚化ライブラリ。 これらは amtviz サンプルの一部として提供しているパッケージ:

from amtviz import visualize_tuning_job
visualize_tuning_job(tuner, trials_only=True)

これらのビジュアライゼーションの威力は、試験の検証精度 (y 軸) を時間 (x 軸) に対してプロットするとすぐに明らかになります。 次の左側のグラフは、経時的な検証精度を示しています。 時間の経過とともにより多くの試行を実行するにつれて、モデルのパフォーマンスが向上していることを明確に確認できます。 これは、ベイジアン戦略を使用して HPO を実行した場合の直接的で期待される結果です。 次の投稿では、これが他の戦略とどのように比較されるかを確認し、これがすべての戦略に当てはまる必要はないことを確認します。

HPO トレイルを示す XNUMX つのチャート。 左のグラフは、経時的な検証精度を示しています。 右のグラフは、検証精度値の密度グラフを示しています

時間の経過に伴う全体的な進行状況を確認した後、ハイパーパラメーター空間を見てみましょう。

次のグラフは、y 軸の検証精度を示しています。各グラフは、 max_depth, alpha, eta, min_child_weight それぞれ x 軸上。 HPO ジョブ全体を各グラフにプロットしました。 各ポイントは 50 回の試行であり、各グラフには 48 回の試行がすべて含まれていますが、ハイパーパラメーターごとに分けられています。 これは、最高の成績を収めたトライアル #49 が、これらの各チャートで XNUMX つの青い点で表されていることを意味します (次の図で強調表示されています)。 他のすべての XNUMX の試行のコンテキスト内で、そのパフォーマンスを視覚的に比較できます。 それでは、よく見てみましょう。

魅力的な! ハイパーパラメータ空間で定義された範囲のどの領域が最もパフォーマンスが高いかがすぐにわかります! 私たちのことを振り返って eta サンプリング値を 0 に近づけるとパフォーマンスが低下し、境界の 0.5 に近づけるとより良い結果が得られることは明らかです。 逆は真であるように思われる alpha, max_depth 好ましい値のセットがより限定されているようです。 見つめている max_depth、ベイジアン戦略を使用して、SageMaker AMT が過去にうまく機能したことを学習した値をより頻繁にサンプリングするように指示する方法も確認できます。

y 軸に検証精度を示す XNUMX つのグラフ。各グラフは x 軸に max_depth、alpha、eta、min_child_weight をそれぞれ示します。 各データ ポイントは XNUMX つの HPO トライアルを表します

私たちを見て eta おそらく 0.45 を超えて、さらに右に探索する価値があるかどうか疑問に思うかもしれません。 精度が低下し続けていますか、それともここでさらにデータが必要ですか? この疑問は、最初の HPO ジョブを実行する目的の一部です。 これにより、ハイパーパラメータ空間のどの領域をさらに調査する必要があるかについての洞察が得られます。

もっと知りたいと思っていて、このトピックの紹介に興奮している場合は、次の投稿にご期待ください。さまざまな HPO 戦略について詳しく説明し、それらを相互に比較します。独自の Python スクリプトを使用してトレーニングを練習します。

クリーンアップ

HPO の実験が終わったときに不要なコストが発生しないようにするには、S3 バケット内のプレフィックスが付いたすべてのファイルを削除する必要があります。 amt-visualize-demo また、 Studio リソースをシャットダウンする.

ノートブックで次のコードを実行して、この投稿からすべての S3 ファイルを削除します。

!aws s3 rm s3://{BUCKET}/amt-visualize-demo --recursive

データセットまたはモデル アーティファクトを保持する場合は、コード内のプレフィックスを次のように変更できます。 amt-visualize-demo/data データのみを削除するか、 amt-visualize-demo/output モデル成果物のみを削除します。

まとめ

この投稿では、XGBoost アルゴリズムの SageMaker 組み込みバージョンを使用してモデルをトレーニングおよび調整しました。 SageMaker AMT で HPO を使用することにより、この特定のアルゴリズムとデータセットでうまく機能するハイパーパラメータについて学びました。

ハイパーパラメータ調整ジョブの結果を確認するいくつかの方法を見てきました。 最良のトライアルのハイパーパラメーターを抽出することから始めて、トライアルが時間の経過とともにどのように進行したか、どのハイパーパラメーター値が影響を与えるかをより深く理解する方法も学びました。

SageMaker コンソールを使用して、個々のトレーニング実行をより深く掘り下げ、ログを確認する方法も確認しました。

次に、ズームアウトしてすべてのトライアルをまとめて表示し、他のトライアルやハイパーパラメータとの関係でパフォーマンスを確認しました。

各試行からの観察に基づいて、ハイパーパラメーター空間をナビゲートして、ハイパーパラメーター値のわずかな変更がモデルのパフォーマンスに大きな影響を与える可能性があることを確認できたことを学びました。 SageMaker AMT を使用すると、ハイパーパラメータの最適化を実行して、適切なハイパーパラメータ値を効率的に見つけ、モデルのパフォーマンスを最大化できます。

将来的には、SageMaker AMT が提供するさまざまな HPO 戦略と、独自のカスタムトレーニングコードの使用方法を検討します。 質問がある場合、または今後の投稿で取り上げるべき領域を提案したい場合は、コメントでお知らせください。

それまでは、あなたとあなたのモデルが学習とチューニングを楽しんでくれることを願っています!

参考文献

引用:

[1] Dua、D.およびGraff、C.(2019)。 UCI機械学習リポジトリ[http://archive.ics.uci.edu/ml]。 カリフォルニア州アーバイン:カリフォルニア大学情報科学部。


著者について

Amazon SageMaker 自動モデルチューニング PlatoBlockchain データインテリジェンスを使用してハイパーパラメーターを最適化します。垂直検索。あい。アンドリュー・エルル アマゾン ウェブ サービスのソリューション アーキテクトです。 彼はドイツの中小企業と協力しています。 仕事以外では、徒歩や自転車で自然を探索することを楽しんでいます。

Amazon SageMaker 自動モデルチューニング PlatoBlockchain データインテリジェンスを使用してハイパーパラメーターを最適化します。垂直検索。あい。エリナ・レシク ミュンヘン在住のソリューション アーキテクトです。 彼女の焦点は、金融サービス業界の企業顧客です。 自由な時間には、Elina はスペイン語でギター理論を学び、クロス ラーニングをしたり、ランニングに出かけたりするのが好きです。

Amazon SageMaker 自動モデルチューニング PlatoBlockchain データインテリジェンスを使用してハイパーパラメーターを最適化します。垂直検索。あい。マリアーノ・カンプ アマゾン ウェブ サービスのプリンシパル ソリューション アーキテクトです。 彼は、機械学習に関してドイツの金融サービスの顧客と協力しています。 余暇には、マリアーノは妻とハイキングを楽しんでいます。

タイムスタンプ:

より多くの AWS機械学習