[Amazon SageMaker] 組み込みアルゴリズムのオブジェクト検出でハイパーパラメータ調整をやってみました

2020.05.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

CX事業本部の平内です。

Amazon SageMaker(以下、SageMaker)では、ハイパーパラメータ調整(以下、HPO)を使用することで、指定範囲のパラメータで多数のトレーニングを実行し、最適なモデルを得ることができます。

HPOについては、「そもそもパラメータチューニングって何?」って所から下記に詳しく紹介されています。

今回は、組み込みアルゴリズムの 物体検出(object-detection)で、OHPを使用する場合に設定する項目や、その範囲について確認してみました。

2 Hyperparamater tuning job

SageMakerのコンソールから Training > Hyperparamater tuning jobs > Create hyperparamater tunings jobsと辿り、ハイパーパラメータ調整を開始します。

(1) Job settings

  • Hyperparamater tuning job name

既存のジョブ名と重複しなければ、使用可能なキャラクター制限内で自由に指定可能です。

(2) Early stopping(Off/Auto)

Autoの場合、これ以上学習を進めても効果が無いと判断した場合に、SageMakerの判断で学習が停止されます。時間とCPUの節用となるので、特に要件がなければ、Autoにしておく方が良いように思います。(early_stopping_typeも併せてTrueにしないと有効に機能しません)

参考:https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/automatic-model-tuning-early-stopping.html

(3) Tuning Strategy (ランダム検索/ベイズ検索)

既知の結果から値を探査する「ベイズ検索」と、未試行の大きく異なるハイパーパラメータ値を選択できる「ランダム検索」の2つから選択できます。両者は、トレードオフの関係にあります。

参考:https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/automatic-model-tuning-how-it-works.html

(4) Algorithm options

アルゴリズムは、今回目的としてる、ビルトインのObject Detectionを選択します。 また、input modeについては、データセットが、「イメージ形式」でない場合は、高速という意味で、PIPEを選択するのが良いと思います。

(5) Objective metric

評価の基準となるパラメータで、vallidation:mAPmaximizeです。 mAPスコアが最大になるように調整されます。

(6) Hyperparameter configuration

物体検出アルゴリズムにおける、ハイパーパラメータの探査範囲は、下記に記載があります。

参考:https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object-detection-tuning.html

learning_rate

最初の学習レートの設定で、0〜0.5の範囲の浮動小数点で設定されます。 指定可能な範囲は、0.000001〜0.5となります。

mini_batch_size

学習のバッチサイズです。8〜64が指定可能ですが、一回のバッチサイズは、検証データの件数を超えることができないので注意が必要です。 ※ もし、検証データが20件だった場合は、指定可能範囲は8〜20となります。

momentum

オプティマイザがsgdの際のモーメンタムです。0〜0.999の範囲で指定します。

optimizer

['sgd', 'adam', 'rmsprop', 'adadelta']の4種類から、探査対象とするものを選択します。

weight_decay

オプティマイザが、sgdrmspropの際の、重み減衰係数です。0〜0.999の範囲で指定します。

ephochs

エポック回数(範囲はありませんが、大きなデータセットで、大きなエポック数を指定すると、膨大な時間がかかります)

なお、以下については、パラメータ調整に関係なく、データセットに依存しています。

num_classes

データセットに含まれるクラス数

num_training_samples

学習データの数

!

(7) Input data configuration

入力となるデータセットの指定であり、通常の学習の設定と同じです。

参考:[Amazon SageMaker] オブジェクト検出で利用可能な3種類のデータ形式のそれぞれの指定方法

(8) Output data configuration

出力となるモデルの配置位置であり、通常の学習の設定と同じです。

(9) Resource limits

Maximum parallel training jobsは、並列数、Maximum training jobsは、パラメータ調整の試行回数です。

※ 下記では、とりあえず試行回数を10回としていますが、パラメータの範囲が大きい場合、10回ぐらいでは探査しきれないと思います。

(10) Review and create

Create hyperparamater training jobを選択するとジョブが開始されます。

3 結果確認

当該ジョブのStatusが、Completedになれば、作業は完了です。

Training jobsで、試行したジョブが列挙されています。

Best training jobが、mAPスコアが最高となったジョブです。

完了した全てのジョブは、Outputにモデルが出力されています。

4 最後に

今回は、組み込みアルゴリズムの 物体検出(object-detection)で、OHPを使用する場合の設定について確認してみました。

やってみて分かるのですが、各パラメータは、相互に影響があるので、探査はそう簡単な作業ではありません。探査範囲を広く取った場合、相当回数の試行を行わないと、良好なパラメータを得ることはできないでしょう。

自動で探査が行えるとは言え、パラメータの範囲指定に職人技(経験値)が必要だと痛感しました。