[Amazon SageMaker] 組み込みアルゴリズムのオブジェクト検出でハイパーパラメータ調整をやってみました
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:mAPのmaximizeです。 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
オプティマイザが、sgdとrmspropの際の、重み減衰係数です。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を使用する場合の設定について確認してみました。
やってみて分かるのですが、各パラメータは、相互に影響があるので、探査はそう簡単な作業ではありません。探査範囲を広く取った場合、相当回数の試行を行わないと、良好なパラメータを得ることはできないでしょう。
自動で探査が行えるとは言え、パラメータの範囲指定に職人技(経験値)が必要だと痛感しました。