ハイパーパラメーターのチューニングにスイープ ジョブを使う
Azure Machine Learning では、スイープ ジョブを実行してハイパーパラメーターを調整できます。
ハイパーパラメーターのチューニング用のトレーニング スクリプトを作成する
スイープ ジョブを実行するには、他のトレーニング ジョブと同様の方法でトレーニング スクリプトを作成する必要があります。ただし、スクリプトは次のことを行う必要があります。
- 変更するハイパーパラメーターごとに引数を含めます。
- MLflow を使ってターゲット パフォーマンス メトリックをログに記録します。 ログに記録されたメトリックにより、スイープ ジョブはハイパードライブの実行によって開始された子実行のパフォーマンスを評価し、最適なパフォーマンスのモデルが生成されるものを特定できるようになります。
注意
Azure Machine Learning 内で MLflow を使って機械学習実験とモデルを追跡する方法の記事を参照してください。
たとえば、次のサンプル スクリプトでは、--regularization
引数を使用して "正則化率" ハイパーパラメーターを設定するロジスティック回帰モデルをトレーニングし、"正確性" メトリックを Accuracy
の名前でログに記録しています。
import argparse
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import mlflow
# get regularization hyperparameter
parser = argparse.ArgumentParser()
parser.add_argument('--regularization', type=float, dest='reg_rate', default=0.01)
args = parser.parse_args()
reg = args.reg_rate
# load the training dataset
data = pd.read_csv("data.csv")
# separate features and labels, and split for training/validatiom
X = data[['feature1','feature2','feature3','feature4']].values
y = data['label'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30)
# train a logistic regression model with the reg hyperparameter
model = LogisticRegression(C=1/reg, solver="liblinear").fit(X_train, y_train)
# calculate and log accuracy
y_hat = model.predict(X_test)
acc = np.average(y_hat == y_test)
mlflow.log_metric("Accuracy", acc)
スウィープ ジョブの構成と実行
スイープ ジョブを準備するには、まず実行するスクリプトを指定し、スクリプトで使うパラメーターを定義するベースのコマンド ジョブを作成する必要があります。
from azure.ai.ml import command
# configure command job as base
job = command(
code="./src",
command="python train.py --regularization ${{inputs.reg_rate}}",
inputs={
"reg_rate": 0.01,
},
environment="AzureML-sklearn-0.24-ubuntu18.04-py37-cpu@latest",
compute="aml-cluster",
)
これで、入力パラメーターを検索空間でオーバーライドできるようになります。
from azure.ai.ml.sweep import Choice
command_job_for_sweep = job(
reg_rate=Choice(values=[0.01, 0.1, 1]),
)
最後に、コマンド ジョブに対して sweep()
を呼び出し、検索空間をスイープします。
from azure.ai.ml import MLClient
# apply the sweep parameter to obtain the sweep_job
sweep_job = command_job_for_sweep.sweep(
compute="aml-cluster",
sampling_algorithm="grid",
primary_metric="Accuracy",
goal="Maximize",
)
# set the name of the sweep job experiment
sweep_job.experiment_name="sweep-example"
# define the limits for this sweep
sweep_job.set_limits(max_total_trials=4, max_concurrent_trials=2, timeout=7200)
# submit the sweep
returned_sweep_job = ml_client.create_or_update(sweep_job)
スイープ ジョブの監視と確認
Azure Machine Learning スタジオでスイープ ジョブを監視できます。 スイープ ジョブは、試行されるハイパーパラメーターの各組み合わせについて試行を開始します。 試行ごとに、ログに記録されたすべてのメトリックを確認できます。
さらに、スタジオで試行を視覚化することで、モデルを評価し、比較することができます。 各グラフを調整して、各試行のハイパーパラメーター値とメトリックを表示し、比較することができます。
ヒント
詳細については、ハイパーパラメーターのチューニング ジョブの視覚化方法の記事を参照してください。