Amazon SageMaker 自動モデルチューニングを使用してハイパーパラメータ最適化のための高度なテクニックを探索する | アマゾン ウェブ サービス

Amazon SageMaker 自動モデルチューニングを使用してハイパーパラメータ最適化のための高度なテクニックを探索する | アマゾン ウェブ サービス

高性能の機械学習 (ML) ソリューションを作成するには、ハイパーパラメーターとも呼ばれるトレーニング パラメーターの調査と最適化が必要です。 ハイパーパラメータは、特定のモデルや当面のタスクに応じて、学習率、バッチ サイズ、正則化の強度などのトレーニング プロセスを調整するために使用するノブやレバーです。 ハイパーパラメーターの調査には、各パラメーターの値を体系的に変更し、モデルのパフォーマンスへの影響を観察することが含まれます。 このプロセスには追加の労力が必要ですが、そのメリットは大きいです。 ハイパーパラメータ最適化 (HPO) は、トレーニング時間の短縮、モデルの精度の向上、新しいデータへの一般化の向上につながります。

ポストから旅を続けます Amazon SageMaker 自動モデル調整でハイパーパラメータを最適化する。 以前に単一ジョブの最適化を検討し、SageMaker 組み込みアルゴリズムの結果を視覚化し、特定のハイパーパラメータ値の影響について学びました。 HPO をモデル作成サイクルの最後に XNUMX 回限りの最適化として使用するだけでなく、会話形式で複数のステップにわたって使用することもできます。 各調整ジョブは、良好なパフォーマンスに近づくのに役立ちますが、さらに、特定のハイパーパラメーターに対するモデルの感度も学習し、この理解を次の調整ジョブに通知するために使用できます。 学んだことに基づいてハイパーパラメータとその値の範囲を修正できるため、この最適化の取り組みを会話に変えることができます。 そして、私たち ML 実践者がこれらの実行を通じて知識を蓄積するのと同じように、 Amazon SageMaker 自動モデルチューニング (AMT) ウォーム スタートでは、前のチューニング ジョブで取得したこの知識を次のチューニング ジョブでも維持できます。

この投稿では、カスタム トレーニング アルゴリズムと、ベイジアン最適化やランダム検索などのさまざまな HPO 戦略を使用して、複数の HPO ジョブを実行します。 また、ウォーム スタートを実行し、トライアルを視覚的に比較して、ハイパーパラメータ空間の探索を洗練させます。

SageMaker AMT の高度な概念

次のセクションでは、次の各トピックを詳しく見て、SageMaker AMT が ML プロジェクトへの実装にどのように役立つかを示します。

  • SageMaker トレーニングでカスタム トレーニング コードと人気の ML フレームワーク Scikit-learn を使用する
  • 評価と最適化のためのログに基づいてカスタム評価指標を定義します。
  • 適切な戦略を使用して HPO を実行する
  • ウォーム スタートを使用して、単一のハイパーパラメータ検索をモデルとのダイアログに変換します。
  • ソリューション ライブラリを使用した高度な視覚化手法を使用して、XNUMX つの HPO 戦略とチューニング ジョブの結果を比較します。

最初の投稿で使用した組み込みアルゴリズムを使用している場合でも、独自のトレーニング コードを使用している場合でも、SageMaker AMT は ML モデルを最適化するためのシームレスなユーザー エクスペリエンスを提供します。 これは、トライアルと結果を自動的に追跡しながら、当面の ML 問題に集中できるようにする重要な機能を提供します。 同時に、基盤となるインフラストラクチャを自動的に管理します。

この投稿では、SageMaker 組み込みアルゴリズムから離れ、カスタム コードを使用します。 ランダムフォレストを使用します。 スクラーン。 ただし、私たちは同じ ML タスクとデータセットに固執します。 最初の投稿、手書きの数字を検出しています。 Jupyter Notebook の内容について説明します 2_advanced_tuning_with_custom_training_and_visualizing.ipynb コードを並べて呼び出して、さらに読んでください。

さらに深く掘り下げて、結果を最適化するためにハイパーパラメーター検索スペースを探索しながら、カスタム トレーニング コードを使用、デプロイ、実行する方法を発見してみましょう。

ML モデルを構築してハイパーパラメーターの最適化を実行する方法

ML ソリューションを構築する一般的なプロセスはどのようなものですか? 多くの使用例が考えられ、多種多様な ML タスクが存在しますが、段階的なアプローチとして次のメンタル モデルをお勧めします。

  1. 現在の ML シナリオを理解し、要件に基づいてアルゴリズムを選択します。 たとえば、教師あり学習アルゴリズムを使用して画像認識タスクを解決したい場合があります。 この投稿では、最初の投稿と同じ手書き画像認識シナリオと同じデータセットを引き続き使用します。
  2. SageMaker Training で使用するアルゴリズムの実装を決定します。 SageMaker の内部または外部のさまざまなオプションがあります。 さらに、タスクに最適で最適化したい基礎となる指標 (精度、F1 スコア、ROC など) を定義する必要があります。 SageMaker は、ニーズとリソースに応じて XNUMX つのオプションをサポートしています。
    • 事前トレーニングされたモデルを使用します。 Amazon SageMaker ジャンプスタート、そのまま使用することも、微調整するだけで使用することもできます。
    • 前回の投稿で行ったように、トレーニングと調整には XGBoost などの組み込みアルゴリズムの XNUMX つを使用します。
    • Scikit-learn、TensorFlow、PyTorch などの主要なフレームワークの XNUMX つに基づいてカスタム モデルをトレーニングし、調整します。 AWS は、この目的のために、あらかじめ作成された Docker イメージのセレクションを提供しています。 この投稿では、このオプションを使用します。これにより、事前に作成されたコンテナー イメージ上で独自のコードを実行することで、迅速に実験できるようになります。
    • 他にサポートされていないフレームワークやソフトウェアを使用する場合に備えて、独自のカスタム Docker イメージを使用してください。 このオプションは最も多くの労力を必要としますが、最高度の柔軟性と制御も提供します。
  3. データを使用してモデルをトレーニングします。 前のステップでのアルゴリズムの実装に応じて、これはトレーニング データを参照してトレーニング ジョブを実行するか、トレーニング用のカスタム コードを追加するだけで簡単になります。 私たちの場合、Scikit-learn に基づいた Python のカスタム トレーニング コードを使用します。
  4. ハイパーパラメーターの最適化を (ML モデルとの「会話」として) 適用します。 トレーニング後は、通常、アルゴリズムのハイパーパラメーターの値の最も有望な組み合わせを見つけて、モデルのパフォーマンスを最適化する必要があります。

ML アルゴリズムとモデルのサイズによっては、ハイパーパラメーター最適化の最後のステップが予想よりも大きな課題になる可能性があります。 次の質問は、この段階の ML 実践者にとって一般的なものであり、あなたもよくご存じかもしれません。

  • 私の ML 問題に影響を与えるのはどのようなハイパーパラメータですか?
  • 巨大なハイパーパラメータ空間を効果的に検索して、最高のパフォーマンスの値を見つけるにはどうすればよいでしょうか?
  • 特定のハイパーパラメータ値の組み合わせはパフォーマンス指標にどのような影響を与えますか?
  • コストは重要です。 リソースを効率的に使用するにはどうすればよいですか?
  • どのようなチューニング実験に価値があるのでしょうか?また、それらをどのように比較できますか?

これらの質問に答えるのは簡単ではありませんが、良いニュースがあります。 SageMaker AMT を使用すると、面倒な作業が軽減され、適切な HPO 戦略と探索したい値の範囲の選択に集中できるようになります。 さらに、当社の視覚化ソリューションにより、反復分析と実験プロセスが容易になり、パフォーマンスの良いハイパーパラメータ値を効率的に見つけることができます。

次のセクションでは、Scikit-learn を使用して数字認識モデルをゼロから構築し、これらすべての概念が実際に動作する様子を示します。

ソリューションの概要

SageMaker は、モデルをトレーニング、評価、調整するための非常に便利な機能をいくつか提供します。 エンドツーエンドの ML ライフサイクルのすべての機能をカバーしているため、Jupyter ノートブックを離れる必要さえありません。

最初の投稿では、SageMaker 組み込みアルゴリズム XGBoost を使用しました。 今回はデモンストレーションの目的で、独自のトレーニング コードを提供する方法を示すことができるため、ランダム フォレスト分類子に切り替えます。 私たちは独自の Python スクリプトを提供し、フレームワークとして Scikit-learn を使用することを選択しました。 では、特定の ML フレームワークを使用したいことをどのように表現すればよいでしょうか? これから説明するように、SageMaker はバックグラウンドで別の AWS サービスを使用して、トレーニング用に事前に構築された Docker コンテナ イメージを取得します。Amazon エラスティック コンテナ レジストリ (Amazon ECR)。

コード スニペットや点をつなぐ図など、次の手順を詳しく説明します。 前に述べたように、機会があれば、ノートブックを開いてコード セルを段階的に実行して、AWS 環境にアーティファクトを作成してください。 アクティブラーニングにとってこれより優れた方法はありません。

  1. まず、データをロードして準備します。 を使用しております Amazon シンプル ストレージ サービス (Amazon S3) を使用して、手書きの数字データを含むファイルをアップロードします。
  2. 次に、トレーニング スクリプトとフレームワークの依存関係を準備します。 Python でカスタム トレーニング コードを提供し、いくつかの依存ライブラリを参照して、テストを実行します。
  3. カスタム目標メトリクスを定義するために、SageMaker では、コンテナログファイルから必要なメトリクスを抽出するための正規表現を定義できます。
  4. scikit-learn フレームワークを使用してモデルをトレーニングします。 事前に構築されたコンテナー イメージを参照することで、対応する Estimator オブジェクトを作成し、カスタム トレーニング スクリプトを渡します。
  5. AMT を使用すると、さまざまな HPO 戦略を試すことができます。 この投稿では、そのうちの XNUMX つであるランダム検索とベイジアン検索に焦点を当てます。
  6. SageMaker HPO 戦略から選択します。
  7. チューニング結果を視覚化、分析、比較します。 視覚化パッケージを使用すると、メトリクスに基づいて、どの戦略がより優れたパフォーマンスを発揮し、どのハイパーパラメータ値が最高のパフォーマンスを実現するかを発見できます。
  8. ハイパーパラメータ空間の調査を続行し、HPO ジョブをウォーム スタートします。

AMT は、基盤となるコンピューティング インフラストラクチャのスケーリングと管理を行い、さまざまなチューニング ジョブを実行します。 アマゾン エラスティック コンピューティング クラウド (Amazon EC2) インスタンス。 こうすることで、インスタンスをプロビジョニングしたり、オペレーティング システムやハードウェアの問題を処理したり、ログ ファイルを集計したりする負担を自分で負う必要がなくなります。 ML フレームワークのイメージは Amazon ECR から取得され、チューニング結果を含むモデルアーティファクトは Amazon S3 に保存されます。 すべてのログとメトリクスは次の場所に収集されます。 アマゾンクラウドウォッチ 必要に応じて便利なアクセスとさらなる分析が可能になります。

前提条件

これはシリーズの続きであるため、必ず読むことをお勧めしますが、必ずしも必須ではありません。 SageMaker AMT と HPO に関する最初の投稿。 それとは別に、ML の概念と Python プログラミングに関する基本的な知識が役に立ちます。 また、次の各ステップに従うことをお勧めします。 付属のノート この投稿を読みながら、GitHub リポジトリからアクセスしてください。 このノートブックは最初のノートブックとは独立して実行できますが、サブフォルダーからのコードが必要です。 README ファイルの説明に従って、環境内の完全なリポジトリのクローンを作成してください。

コードを試し、インタラクティブな視覚化オプションを使用すると、学習体験が大幅に向上します。 ぜひチェックしてみてください。

データをロードして準備する

最初のステップとして、ダウンロードされたことを確認します。 桁データ トレーニングに必要なファイルは SageMaker からアクセスできます。 Amazon S3 を使用すると、これを安全かつスケーラブルな方法で行うことができます。 完全なソース コードについてはノートブックを参照し、独自のデータに自由に適応させてください。

sm_sess = sagemaker.session.Session(boto_session=boto_sess, sagemaker_client=sm)
BUCKET = sm_sess.default_bucket()
PREFIX = 'amt-visualize-demo'
s3_data_url = f's3://{BUCKET}/{PREFIX}/data'
digits = datasets.load_digits()
digits_df = pd.DataFrame(digits.data)
digits_df['y'] = digits.target
digits_df.to_csv('data/digits.csv', index=False)
!aws s3 sync data/ {s3_data_url} —exclude '*' —include 'digits.csv'

  digits.csv ファイルにはフィーチャ データとラベルが含まれています。 次の数字 8 の画像に示すように、各桁は 8×4 イメージのピクセル値で表されます。
Scikit-learn の数字データセット

トレーニング スクリプトとフレームワークの依存関係を準備する

データが S3 バケットに保存されたので、以下に基づいてカスタム トレーニング スクリプトを定義できます。 シキット学習 Pythonで。 SageMaker では、後でトレーニングのために Python ファイルを参照するだけのオプションが提供されます。 Scikit-learn ライブラリや pandas ライブラリなどの依存関係は、次の XNUMX つの方法で提供できます。

  • それらは、 requirements.txt file
  • これらは、SageMaker によって提供されるか、カスタムビルドされた、基盤となる ML コンテナー イメージにプリインストールされます。

どちらのオプションも一般に依存関係管理の標準的な方法とみなされているため、すでによく知っているかもしれません。 SageMaker がサポートする さまざまな ML フレームワーク すぐに使用できる管理された環境で。 これには、私たちの場合のように、PyTorch、TensorFlow、Scikit-learn などの最も人気のあるデータ サイエンスや ML フレームワークの多くが含まれます。 追加のものは使用しません requirements.txt ファイルですが、自由にいくつかのライブラリを追加して試してみてください。

この実装のコードには、と呼ばれるメソッドが含まれています。 fit()、数字認識タスク用の新しい分類器を作成し、それをトレーニングします。 SageMaker 組み込みの XGBoost アルゴリズムを使用した最初の投稿とは対照的に、現在は RandomForestClassifier ML ライブラリ sklearn によって提供されます。 の呼びかけ fit() 分類子オブジェクトのメソッドは、CSV データのサブセット (80%) を使用してトレーニング プロセスを開始します。

def fit(train_dir, n_estimators, max_depth, min_samples_leaf, max_features, min_weight_fraction_leaf): digits = pd.read_csv(Path(train_dir)/'digits.csv') Xtrain, Xtest, ytrain, ytest = train_test_split(digits.iloc[:, :-1], digits.iloc[:, -1], test_size=.2) m = RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth, min_samples_leaf=min_samples_leaf, max_features=max_features, min_weight_fraction_leaf=min_weight_fraction_leaf) m.fit(Xtrain, ytrain) predicted = m.predict(Xtest) pre, rec, f1, _ = precision_recall_fscore_support(ytest, predicted, pos_label=1, average='weighted') print(f'pre: {pre:5.3f} rec: {rec:5.3f} f1: {f1:5.3}') return m

完全なスクリプトについては、Jupyter ノートブックを参照してください。 GitHubの.

完全なトレーニング プロセスのためにコンテナー リソースをスピンアップする前に、スクリプトを直接実行しようとしましたか? これは、コードに構文エラーがないことを迅速に確認し、データ構造の一致するディメンションやその他のエラーを早い段階でチェックするための良い方法です。

コードをローカルで実行するには XNUMX つの方法があります。 まず、ノートブックですぐに実行できます。これにより、Python デバッガーも使用できるようになります。 pdb:

# Running the code from within the notebook. It would then be possible to use the Python Debugger, pdb.
from train import fit
fit('data', 100, 10, 1, 'auto', 0.01)

あるいは、コンテナーで使用する場合と同じ方法で、コマンド ラインから train スクリプトを実行します。 これは、さまざまなパラメータの設定や、必要に応じてデフォルト値の上書きもサポートします。次に例を示します。

!cd src && python train.py --train ../data/ --model-dir /tmp/ --n-estimators 100

出力として、客観的なメトリクスの精度、再現率、F1 スコアに基づいたモデルのパフォーマンスの最初の結果を確認できます。 例えば、 pre: 0.970 rec: 0.969 f1: 0.969.

このような簡単なトレーニングには悪くありません。 しかし、これらの数字はどこから来たのでしょうか?そして、それをどうすればよいのでしょうか?

カスタム目標指標を定義する

覚えておいてください、私たちの目標は、タスクに関連すると考えられる客観的な指標に基づいてモデルを完全にトレーニングし、調整することです。 カスタム トレーニング スクリプトを使用するため、SageMaker のこれらのメトリクスを明示的に定義する必要があります。

私たちのスクリプトは、トレーニング中にメトリクスの精度、再現率、F1 スコアを出力します。 print 関数:

print(f'pre: {pre:5.3f} rec: {rec:5.3f} f1: {f1:5.3}')

標準出力は SageMaker によってキャプチャされ、ログ ストリームとして CloudWatch に送信されます。 メトリクス値を取得し、後で SageMaker AMT で操作するには、その出力を解析する方法に関する情報を提供する必要があります。 これは、正規表現ステートメントを定義することで実現できます (詳細については、「 Amazon CloudWatch メトリクスを使用したトレーニング ジョブの監視と分析):

metric_definitions = [ {'Name': 'valid-precision', 'Regex': r'pre:s+(-?[0-9.]+)'}, {'Name': 'valid-recall', 'Regex': r'rec:s+(-?[0-9.]+)'}, {'Name': 'valid-f1', 'Regex': r'f1:s+(-?[0-9.]+)'}] 

前述のコードの最初のメトリック定義を一緒に見てみましょう。 SageMaker は、ログ内で次で始まる出力を探します。 pre: そして、その後に XNUMX つ以上の空白、その後に抽出する数値が続きます。そのため、丸括弧を使用します。 SageMaker はそのような値を見つけるたびに、それを次の名前の CloudWatch メトリクスに変換します。 valid-precision.

Scikit-learn フレームワークを使用してモデルをトレーニングする

トレーニング スクリプトを作成した後 train.py CloudWatch 内でメトリクスを監視する方法を SageMaker に指示し、 SageMaker エスティメーター 物体。 トレーニング ジョブを開始し、指定したインスタンス タイプを使用します。 しかし、このインスタンス タイプは、実行するインスタンス タイプとどのように異なるのでしょうか。 Amazon SageMakerスタジオ ノートブックがオンになっています、そしてなぜですか? SageMaker Studio は、ノートブックとは別のコンピューティング インスタンスでトレーニング (および推論) ジョブを実行します。 これにより、ジョブがバックグラウンドで実行されている間も、ノートブックで作業を続けることができます。

パラメータ framework_version トレーニング ジョブに使用する Scikit-learn バージョンを指します。 あるいは、渡すこともできます image_uri estimator。 お気に入りのフレームワークや ML ライブラリが利用可能かどうかを確認できます。 事前に構築された SageMaker Docker イメージ そのまま使用するか、 拡張機能付き.

さらに、設定することで EC2 スポット インスタンスで SageMaker トレーニング ジョブを実行できます。 use_spot_instances 〜へ True。 これらは、次のことができる予備容量インスタンスです。 コストを最大 90% 節約。 これらのインスタンスにより、トレーニング ジョブをいつ実行するかが柔軟になります。

estimator = SKLearn( 'train.py', source_dir='src', role=get_execution_role(), instance_type= 'ml.m5.large', instance_count=1, framework_version='0.23-1', metric_definitions=metric_definitions, # Uncomment the following three lines to use Managed Spot Training # use_spot_instances= True, # max_run= 60 * 60 * 24, # max_wait= 60 * 60 * 24, hyperparameters = {'n-estimators': 100, 'max-depth': 10, 'min-samples-leaf': 1, 'max-features': 'auto', 'min-weight-fraction-leaf': 0.1}
)

Estimator オブジェクトを設定した後、次のメソッドを呼び出してトレーニングを開始します。 fit() 関数を使用して、Amazon S3 上のトレーニング データセットへのパスを指定します。 これと同じ方法を使用して、検証データとテスト データを提供できます。 私たちは、 wait パラメータを True これにより、トレーニングされたモデルを後続のコード セルで使用できるようになります。

estimator.fit({'train': s3_data_url}, wait=True)

ハイパーパラメータを定義し、調整ジョブを実行する

これまでのところ、XNUMX セットのハイパーパラメータ値を使用してモデルをトレーニングしました。 しかし、その価値観は良かったのでしょうか? それとももっと良いものを探すことはできるでしょうか? を使ってみましょう HyperparameterTuner クラス ハイパーパラメータ空間に対して体系的な検索を実行します。 この空間をチューナーでどうやって探すのでしょうか? 必要なパラメータは、最適化をガイドする目標メトリック名と目標タイプです。 最適化戦略は、検索スペースをさらに定義するため、チューナーにとってもう XNUMX つの重要な議論です。 以下の XNUMX つの異なる戦略から選択できます。

  • グリッド検索
  • ランダム検索
  • ベイジアン最適化 (デフォルト)
  • ハイパーバンド

これらの戦略についてさらに詳しく説明し、この投稿の後半で戦略を選択するためのガイダンスを提供します。

チューナー オブジェクトを定義して実行する前に、アーキテクチャの観点から理解をまとめてみましょう。 SageMaker AMT のアーキテクチャの概要については、「 私たちの最後の投稿 便宜上、その抜粋をここに再掲します。

Amazon SageMaker 自動モデルチューニングアーキテクチャ

どのハイパーパラメータを調整するか、静的のままにするかを選択できます。 動的ハイパーパラメータの場合、以下を提供します。 hyperparameter_ranges 調整可能なハイパーパラメータの最適化に使用できます。 ランダム フォレスト分類器を使用しているため、 Scikit-learn ランダム フォレストのドキュメント.

また、チューナーが使用できるトレーニング ジョブと並列トレーニング ジョブの最大数によってリソースも制限されます。 これらの制限がさまざまな戦略の結果を相互に比較するのにどのように役立つかを見ていきます。

tuner_parameters = { 'estimator': estimator, 'base_tuning_job_name': 'random', 'metric_definitions': metric_definitions, 'objective_metric_name': 'valid-f1', 'objective_type': 'Maximize', 'hyperparameter_ranges': hpt_ranges, 'strategy': 'Random', 'max_jobs': n, # 50 'max_parallel_jobs': k # 2 } 

エスティメーターと同様 fit 関数で、チューナーの呼び出しによるチューニング ジョブを開始します。 fit:

random_tuner = HyperparameterTuner(**tuner_parameters)
random_tuner.fit({'train': s3_data_url}, wait=False)

SageMaker にトレーニング ジョブを実行させるために必要な作業はこれだけです (n=50) バックグラウンドで、それぞれが異なるハイパーパラメータのセットを使用します。 この投稿の後半で結果を調べます。 その前に、今度はベイジアン最適化戦略を適用して、別のチューニング ジョブを開始しましょう。 完了後に両方の戦略を視覚的に比較します。

tuner_parameters['strategy'] = 'Bayesian'
tuner_parameters['base_tuning_job_name'] = 'bayesian'
bayesian_tuner = HyperparameterTuner(**tuner_parameters)
bayesian_tuner.fit({'train': s3_data_url}, wait=False)

SageMaker は必要なコンピューティング インスタンスを互いに独立して調整するため、両方のチューナー ジョブを並行して実行できることに注意してください。 これは、ここで行うように、さまざまなアプローチを同時に実験する実践者にとって非常に役立ちます。

SageMaker HPO 戦略から選択する

戦略のチューニングに関しては、SageMaker AMT にはグリッド検索、ランダム検索、ベイズ最適化、ハイパーバンドなどのいくつかのオプションがあります。 これらの戦略は、自動チューニング アルゴリズムが指定された範囲のハイパーパラメーターを探索する方法を決定します。

ランダム検索は非常に簡単です。 指定された範囲から値の組み合わせがランダムに選択され、順次または並列で実行できます。 それは、ターゲットに当たることを期待して、目隠しをしてダーツを投げるようなものです。 この戦略で始めましたが、別の戦略で結果は改善しますか?

ベイジアン最適化は、ランダム検索とは異なるアプローチを採用します。 以前の選択の履歴を考慮して、最良の結果が得られる可能性が高い値を選択します。 以前の探索から学習したい場合は、以前の探索の後に新しいチューニング ジョブを実行することでのみこれを実現できます。 当然ですよね? このように、ベイズ最適化は以前の実行に依存します。 しかし、HPO 戦略によってより高度な並列化が可能になることがわかりましたか?

ハイパーバンド 面白いですね! これは、マルチフィデリティ戦略を使用します。つまり、最も有望なトレーニング ジョブにリソースを動的に割り当て、パフォーマンスの低いトレーニング ジョブを停止します。 したがって、Hyperband は、以前のトレーニング ジョブから学習して、リソースの計算効率が高くなります。 パフォーマンスの低い構成を停止した後、新しい構成が開始され、その値がランダムに選択されます。

ニーズとモデルの性質に応じて、調整戦略としてランダム検索、ベイジアン最適化、またはハイパーバンドのいずれかを選択できます。 それぞれに独自のアプローチと利点があるため、ML の探索にどれが最適であるかを検討することが重要です。 ML 実践者にとって朗報なのは、各トライアルの客観的指標に対する影響を視覚的に比較することで、最適な HPO 戦略を選択できることです。 次のセクションでは、さまざまな戦略の影響を視覚的に特定する方法を見ていきます。

チューニング結果の視覚化、分析、比較

調整作業が完了すると、とても興奮します。 それらはどのような結果をもたらしますか? 基本モデルと比較して、当社の指標ではどのような向上が期待できますか? 私たちのユースケースで最もパフォーマンスの高いハイパーパラメータは何でしょうか?

HPO の結果を表示する迅速かつ簡単な方法は、SageMaker コンソールにアクセスすることです。 下 ハイパーパラメータ調整ジョブ、(チューニング ジョブごとに) テストされ、客観的なメトリックによって測定された最高のパフォーマンスを実現したハイパーパラメーター値の組み合わせを確認できます (valid-f1).

ハイパーパラメータ調整ジョブのメトリクス

必要なのはそれだけですか? ML 実践者として、これらの値に興味があるだけでなく、モデルの内部動作についてさらに詳しく知り、モデルの可能性を最大限に探求し、経験的なフィードバックで直観力を強化したいと思うこともあるでしょう。

優れた視覚化ツールは、時間の経過に伴う HPO による改善を理解し、ML モデルの設計上の決定に関する経験的なフィードバックを得るのに非常に役立ちます。 これは、目標メトリックに対する個々のハイパーパラメータの影響を示し、調整結果をさらに最適化するためのガイダンスを提供します。

私たちは、使用 amtviz チューニングジョブを視覚化および分析するためのカスタム視覚化パッケージ。 使い方は簡単で、便利な機能が備わっています。 いくつかの個別のチャートを解釈し、最後にランダム検索とベイズ最適化を並べて比較することで、その利点を実証します。

まず、ランダム検索用のビジュアライゼーションを作成しましょう。 電話することでこれを行うことができます visualize_tuning_job() から amtviz そして最初のチューナー オブジェクトを引数として渡します。

from amtviz import visualize_tuning_job
visualize_tuning_job(random_tuner, advanced=True, trials_only=True)

いくつかのグラフが表示されますが、順を追って見ていきましょう。 出力の最初の散布図は次のようになり、どの表にも見当たらない視覚的な手がかりがすでに得られています。

ハイパーパラメータ最適化ジョブの結果

各ドットは、個々のトレーニング ジョブのパフォーマンスを表します (私たちの目標 valid-f1 y 軸) は、特定のハイパーパラメータのセットによって生成された開始時間 (x 軸) に基づきます。 したがって、調整ジョブの期間中にモデルが進行するにつれて、モデルのパフォーマンスを確認します。

点線は、これまでに見つかった最良の結果を強調表示し、時間の経過とともに改善されたことを示しています。 最も優れた 1 つのトレーニング ジョブは、約 0.91 の FXNUMX スコアを達成しました。

累積的な進行状況を示す点線のほかに、グラフに傾向が見られますか?

おそらくそうではありません。 ランダムな HPO 戦略の結果を見ているので、これは予想通りです。 各トレーニング ジョブは、異なるがランダムに選択されたハイパーパラメーターのセットを使用して実行されました。 チューニング ジョブを継続した場合 (または同じ設定で別のジョブを実行した場合)、時間の経過とともにおそらくより良い結果が得られるでしょうが、確信は持てません。 ランダム性というのは難しいものです。

次のグラフは、全体的なパフォーマンスに対するハイパーパラメーターの影響を測定するのに役立ちます。 すべてのハイパーパラメータが視覚化されていますが、簡潔にするために、そのうちの XNUMX つに焦点を当てます。 n-estimators および max-depth.

ハイパーパラメータ ジョブの詳細

上位 XNUMX つのトレーニング ジョブで使用されていたのは、 n-estimators 20歳から80歳くらいで、 max-depth それぞれ約10と18。 正確なハイパーパラメータ値は、各ドット (トレーニング ジョブ) のツールチップに表示されます。 すべてのチャートにわたって動的に強調表示されるため、多次元のビューが得られます。 あれ見た? 各ハイパーパラメータは、個別のグラフとして目的のメトリックに対してプロットされます。

さて、どのような洞察が得られるでしょうか n-estimators?

左のグラフに基づくと、非常に低い値の範囲 (10 未満) では、高い値に比べて悪い結果が得られることが多いようです。 したがって、値を大きくすると、モデルのパフォーマンスが向上する可能性があり、これは興味深いことです。

対照的に、 max-depth 客観的な指標に対するハイパーパラメータはかなり低いです。 一般的な観点から、どの値の範囲のパフォーマンスが優れているかを明確に伝えることはできません。

要約すると、ランダム検索は、比較的短い時間でもパフォーマンスの良いハイパーパラメータのセットを見つけるのに役立ちます。 また、優れたソリューションに偏ることはなく、検索空間のバランスの取れたビューを提供します。 ただし、リソースの使用効率はあまり高くない可能性があります。 不十分な結果をもたらすことが知られている値範囲のハイパーパラメータを使用してトレーニング ジョブを実行し続けます。

ベイズ最適化を使用した XNUMX 番目の調整ジョブの結果を調べてみましょう。 使用できます amtviz これまでランダム検索チューナーで行ったのと同じ方法で結果を視覚化します。 さらに良いことに、関数の機能を使用して、両方のチューニング ジョブを XNUMX つのグラフ セットで比較できます。 かなり便利です!

visualize_tuning_job([random_tuner, bayesian_tuner], advanced=True, trials_only=True)

ハイパーパラメータ最適化ジョブ ベイジアン VS ランダム

ランダム検索 (オレンジ色の点) とベイジアン最適化 (青い点) の両方のすべてのトレーニング ジョブの結果を視覚化しているため、さらに多くの点があります。 右側には、すべての F1 スコアの分布を視覚化した密度グラフが表示されます。 トレーニング ジョブの大部分は、F1 スケールの上位 (0.6 以上) の結果を達成しました。これは良いことです。

ここでの重要なポイントは何でしょうか? 散布図は、ベイズ最適化の利点を明確に示しています。 以前の実行から学習できるため、時間の経過とともにより良い結果が得られます。 同じ数のトレーニング ジョブで、ランダム (0.967 対 0.919) と比較して、ベイジアンを使用した方が大幅に優れた結果が得られたのはこのためです。

さらにできることはあります amtviz。 掘り下げてみましょう。

SageMaker AMT にチューニングのために多数のジョブを実行する指示を与えると、一度に多数のトライアルを表示するのが面倒になる可能性があります。 これが、これらのグラフをインタラクティブにした理由の XNUMX つです。 すべてのハイパーパラメータ散布図をクリックしてドラッグすると、特定の値の範囲にズームインし、結果の視覚的な解釈を調整できます。 他のすべてのチャートは自動的に更新されます。 それはかなり役に立ちますね。 次のグラフを例として参照し、ノートに記入して実際に試してみてください。

ハイパーパラメータ最適化ジョブ視覚化機能

チューニング最大主義者として、別のハイパーパラメーター調整ジョブを実行すると、モデルのパフォーマンスがさらに向上する可能性があると判断することもできます。 ただし、今回は、より良い結果が期待できる場所が (大まかに) すでにわかっているため、ハイパーパラメータ値のより具体的な範囲を調べることができます。 たとえば、100 ~ 200 の値に焦点を当てることを選択できます。 n-estimators、グラフに示されているように。 これにより、AMT は最も有望なトレーニング ジョブに集中できるようになり、チューニングの効率が向上します。

まとめると、 amtviz は、モデルのハイパーパラメータがパフォーマンスに及ぼす影響をより深く理解し、調整作業においてより賢明な決定を可能にする豊富な視覚化機能を提供します。

ハイパーパラメータ空間の探索を継続し、HPO ジョブをウォーム スタートします。

AMT がハイパーパラメーター検索空間を効率的に探索するのに役立つことがわかりました。 しかし、結果を繰り返し改善するために複数回の調整が必要な場合はどうすればよいでしょうか? 冒頭で述べたように、最適化フィードバック サイクル、つまりモデルとの「会話」を確立したいと考えています。 毎回最初から始める必要がありますか?

実行の概念を見てみましょう ウォーム スタート ハイパーパラメータ調整ジョブ。 新しいチューニング ジョブを最初から開始するのではなく、以前の HPO 実行で学習した内容を再利用します。 これにより、チューニング時間とコンピューティング リソースの効率が向上します。 以前の結果に基づいてさらに反復できます。 ウォーム スタートを使用するには、 WarmStartConfig と指定します warm_start_type as IDENTICAL_DATA_AND_ALGORITHM。 これは、ハイパーパラメータ値は変更しますが、データやアルゴリズムは変更しないことを意味します。 以前の知識を新しいチューニング ジョブに転送するように AMT に指示します。

以前のベイジアン最適化およびランダム検索チューニング ジョブを次のように参照します。 parents、ウォーム スタートには両方を使用できます。

warm_start_config = WarmStartConfig(warm_start_type=WarmStartTypes.IDENTICAL_DATA_AND_ALGORITHM, parents=[bayesian_tuner_name, random_tuner_name])
tuner_parameters['warm_start_config'] = warm_start_config

ウォーム スタートを使用する利点を確認するには、次の表を参照してください。 これらは次によって生成されます。 amtviz 以前と同様の方法で行いますが、今回はウォーム スタートに基づいて別のチューニング ジョブを追加しました。

ハイパーパラメータ最適化ジョブのウォームスタート

左側のグラフでは、新しいチューニング ジョブのほとんどがパフォーマンス メトリック グラフの右上隅にあることがわかります (オレンジ色でマークされた点を参照)。 実際、ウォーム スタートでは以前の結果が再利用されており、それがこれらのデータ ポイントが F1 スコアの上位結果に含まれる理由です。 この改善は、右側の密度グラフにも反映されています。

言い換えれば、AMT は、以前のトライアルからの知識に基づいて、有望なハイパーパラメータ値のセットを自動的に選択します。 これを次のグラフに示します。 たとえば、アルゴリズムは次の低い値をテストします。 n-estimators これらは低い F1 スコアを生成することが知られているため、頻度は低くなります。 ウォーム スタートのおかげで、リソースを無駄にすることはありません。

ハイパーパラメータの最適化の視覚化されたジョブ

クリーンアップ

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

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

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

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

まとめ

私たちは、ML ソリューションを構築する技術にハイパーパラメーターの探索と最適化がどのように含まれるかを学びました。 これらのノブやレバーの調整は、トレーニング時間の短縮、モデルの精度の向上、全体的に優れた ML ソリューションにつながる、要求は厳しいもののやりがいのあるプロセスです。 SageMaker AMT 機能は、複数のチューニング ジョブの実行とウォーム スタートに役立ち、さらなるレビュー、視覚的な比較、分析のためのデータ ポイントを提供します。

この投稿では、SageMaker AMT で使用する HPO 戦略を検討しました。 私たちはランダム検索から始めました。これは、ハイパーパラメーターが検索空間からランダムにサンプリングされる、単純だがパフォーマンスの高い戦略です。 次に、その結​​果を、確率モデルを使用して最適なハイパーパラメーターの検索をガイドするベイズ最適化と比較しました。 最初のトライアルを通じて適切な HPO 戦略と適切なハイパーパラメータ値の範囲を特定した後、ウォーム スタートを使用して将来の HPO ジョブを合理化する方法を示しました。

定量的な結果を比較することで、ハイパーパラメーターの検索空間を探索できます。 私たちは、並べて視覚的に比較することを提案し、インタラクティブな探索に必要なパッケージを提供しました。 ハイパーパラメータ調整の旅において、この記事がどれほど役に立ったかをコメントでお知らせください。


著者について

ウエミット・ヨルダスウミット・ヨルダス アマゾン ウェブ サービスのシニア ソリューション アーキテクトです。 彼はドイツのさまざまな業界の企業顧客と協力しています。 彼は AI の概念を現実世界のソリューションに変換することに熱心に取り組んでいます。 仕事以外では、家族との時間を楽しんだり、おいしい食べ物を味わったり、フィットネスを追求したりしています。

エリナ・レシクエリナ・レシク は、ミュンヘンに拠点を置くソリューション アーキテクトです。 彼女は金融サービス業界の企業顧客に焦点を当てています。 自由時間には、エリナがいくつかの IT 集会で生成 AI を使用してアプリケーションを構築したり、気候変動を迅速に解決するための新しいアイデアを推進したり、計画されたスケジュールから典型的に逸脱してハーフマラソンの準備として森の中を走っているのを見つけることができます。

マリアーノ・カンプマリアーノ・カンプ アマゾン ウェブ サービスのプリンシパル ソリューション アーキテクトです。 彼はドイツの銀行や保険会社と協力して機械学習に取り組んでいます。 マリアーノは余暇には妻とハイキングを楽しんでいます。

タイムスタンプ:

より多くの AWS機械学習