この記事の目的
モデルのトレーニングと改良を実行できるよう、必要な知識を学ぶ。
トレーニングプロセスの要素
トレーニングを行うにあたり、以下の要素を頭に入れておく必要がある。
各種パラメータは、SageMakerで既存モデルをカスタマイズする際に設定する場合もある。
エポック
すべてのトレーニングデータをモデルに通すことを1エポックという。
つまり、モデルにトレーニングデータを何回学習させるかの単位のこと。5エポックの場合は5回繰り返して学習させる。エポックが多すぎると過学習を起こすが、低すぎると学習不足になる。
ステップ
モデルがパラメータを更新する単位のこと。イテレーションともいう。
モデルは、トレーニングデータを一度ですべてを読み取れるわけではない。通常、何個かの小さなまとまり(バッチ)にわけて学習をする。バッチを処理するたびにモデルがパラメータを更新するため、バッチを処理するたびに1ステップ進む。
以下の計算で求められる。
ステップ = トレーニングデータ数 ÷ バッチサイズ
バッチサイズ
モデルが一度に処理をするトレーニングデータの大きさ。
たとえばバッチサイズが100の場合、トレーニングデータ1,000個を処理するためには、1エポックあたり10ステップが必要。
大きいほどメモリ消費量も多くなるが、大量のデータを一度に処理できるようになる。一方で、パラメータの更新頻度が下がるため、汎用的な形にはなりにくい。
学習率
ハイパーパラメータのひとつ。
モデルのパラメータが更新されるステップの大きさを制御する。学習率が高すぎると最適解を飛び越えるリスクがあり、低すぎると収束は遅いが最適解にたどり着きやすくなる。
モデルトレーニング時間を短縮する方法
早期停止
トレーニング中にモデルの性能が向上しなくなった時点で、当初決めたエポック数をこなしているかに関わらずトレーニングを終了すること。
時間を節約できる他、過学習を防止できる等のメリットがある。
分散トレーニング
トレーニングデータやモデルを複数のGPUやノード(インスタンス)に分散して並列処理をする方法。トレーニング速度がめっちゃ早くなる他、大規模データセットやモデルに対応できる。
もちろん SageMaker でも行える。
データ並列
同じモデルを持った複数のインスタンスにトレーニングデータを分割して処理をさせる方法。他のインスタンスとパラメータの更新等の情報を共有する。
モデル並列
モデル自体を複数のインスタンスに分割すること。複雑なモデルはひとつのインスタンスに収まらない場合があるので、大規模なモデルをトレーニングする時に使う。
正則化手法の利点
正則化とは、モデルの過学習を防ぐための手法のこと。
以下のような種類が存在する。
ドロップアウト
トレーニング中、ランダムにいくつかのニューロン(ニュートラルネットワークの中間層のこと)を無効にし、そのエポックでは利用しないようにする手法。
ニューロン同士の過剰な結合を防ぐことができる。
重み減衰
トレーニング中にモデルの「重み」(ニューロンの重要度)を少しずつ小さくしていく手法。必要以上に大きな重みをもたないようにすることで、モデルがシンプルになりすぎないようにする。
L1正則化
重みを小さくしつつ、必要のない重みは「0」に近づける手法。
データに余計な特徴が多いときに使用する。
L2正則化
重みを小さく保ちながら、ゼロにはしない手法。ちょうどいい値を探す。
過学習のときはモデルが極端な値をとるので、その防止ができる。
ハイパーパラメータのチューニング手法
ベイズ最適化
ベイズ最適化は、現在の知識に関連してイベントが発生する確率を記述するベイズの定理に基づく手法です。これをハイパーパラメータの最適化に適用すると、アルゴリズムは、特定のメトリクスを最適化するハイパーパラメータのセットから確率モデルを構築します。回帰分析を使用して、ハイパーパラメータの最適なセットを繰り返し選択します。
ハイパーパラメータを試すごとに得られた新しい情報を追加して、次に試すべきハイパーパラメータを選ぶ方法。実装はやや複雑。コストも高いが少ない試行回数で高い精度を達成できる。
グリッドサーチ
グリッドサーチでは、ハイパーパラメータのリストとパフォーマンスメトリクスを指定すると、アルゴリズムはすべての可能な組み合わせから最適な組み合わせを決定します。グリッドサーチは良好に機能しますが、特に多数のハイパーパラメータを使用すると、比較的煩雑でコンピューティングの使用量が多くなります。
あらかじめ設定したハイパーパラメータの組み合わせをとりあえず全部やってみて、一番良いものを選ぶ方法。
実装が簡単で確実に最適解を見つけられるが、時間がかかる。また、高次元なハイパーパラメータに対してはもっと時間がかかるので効率が悪い。
ランダムサーチ
グリッドサーチと類似の原則に基づいていますが、ランダムサーチはイテレーションごとにハイパーパラメータのグループをランダムに選択します。比較的少数のハイパーパラメータが主にモデルの結果を決定する場合に良好に機能します。
ハイパーパラメータのクループからランダムに選んだ組み合わせを試す方法。
少ない試行回数で良い結果を得られる……かもしれないが、もちろん最適解を見逃す可能性もある。
Hyperband
Hyperband は、リソースを動的に再割り当てする多重忠実度ベースの調整方法です。Hyperband では、トレーニングジョブの中間結果と最終結果の両方を使用して、使用率の高いハイパーパラメータ構成にエポックを再割り当てし、パフォーマンスの低いものは自動的に停止します。また、多数の並列トレーニングジョブを使用して、シームレスにスケールします。これらの機能により、ランダム検索やベイズ最適化戦略よりもハイパーパラメータ調整を大幅に高速化できます。
ランダムサーチをもっと効率的かつ高速に行う方法。トレーニングの中間結果と最終結果をみて、よさげなハイパーパラメータの組み合わせについては学習を続行し、だめそうなものについては早々に停止する。