DeepRacer BootCampでハイパーパラメータのメカニクスと最適化について勉強をしてきた #reinvent

2019.12.05

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

せーのでございます。

2019年12月02日〜2019年12月07日にかけてアメリカはラスベガスにてAWS最大のカンファレンス、AWS re:Invent 2019が開催されております。
クラメソチームは今年は80名という常軌を逸した人数で現地に乗り込んでおります。

今年のre:InventといえばDeepRacerの映えある第一回世界大会決勝が行われます。
決勝目指してメキシコシティまで行ってきた身としては注目しないわけには行きません。

会場では決勝大会の他にも最後の予選、新たに発表されているダブルカメラ、LiDAR付きのDeepRacer「DeepRacer Evo」の体験会などもあってレーサー達を離さないわけですが、その中でひときわガチ感の強い「DeepRacer BootCamp」に参加してみました。

詳しくはこちらを御覧ください。

DeepRacer BootCampでハイパーパラメータの自動最適化について勉強をしてきた #reinvent

今回はその中でSageMakerを使ったDeepRacerハイパーパラメータのメカニクスと最適化についてのセッションをご紹介します。こちらも30分というショートセッションでした。

レポート

  • ハイパーパラメータとは何か
  • 機械学習の学習プロセスに影響する外部の変数のこと
  • 学習時間とモデルのパフォーマンスを最適化するためにチューニングできる
  • "one size fits all(最適な解がある)"というわけではない

  • 適応できるハイパーパラメータ

    • 勾配降下のバッチサイズ
    • 直近の実機の経験値
    • ランダムに抽出される
    • モデルの重みを更新するのに使う
    • バッチサイズを大きくする = より安定するが学習時間が伸びる
    • 設定値: 32, 64, 128, 256, 512
    • デフォルト: 64
    • エポック数
    • トレーニングデータを通過する数
    • バッチサイズに関連する
    • 数が多い = より安定するが学習時間が伸びる
    • 設定値: 3-10
    • デフォルト: 3
    • 学習率
    • トレーニングサイクルの間のモデルを更新する値
    • 値が小さいとトレーニングが安定するが極小値でスタックする場合がある
    • 値が大きいと学習が早くなるが収束を妨げる可能性がある
    • 設定値: 0.000000001-0.001
    • デフォルト: 0.0003
    • エントロピー
    • ポリシー分布にランダム性を追加するために使う不確実性の程度
    • 「探索」と「収束」のバランスをコントロールする値
    • 設定値: 0-1
    • デフォルト: 0.01
    • 割引係数
    • 現在予測される報酬で考慮されるステップ数
    • 例えば0.9の割引係数は、エージェントが移動時に次の10ステップを考慮するようにする
    • 一方、0.999の割引係数は、エージェントが次の1000ステップを考慮するようにする
    • 設定値: 0-1
    • デフォルト: 0.999
    • 損失タイプ
    • トレーニング中にモデルにデータを渡す際の損失を測定する
    • 逆伝播のプロセス中にモデルを更新するために必要な変更を決定する
    • 設定値: Huber / Mean squared error
    • デフォルト: Huber loss
    • Huber lossは更 新が平均二乗誤差と比較して大きくなるとモデルの重みにより小さい増分を行う
    • 収束に問題がある場合はHuber lossを使う
    • 各ポリシー更新反復間のエクスペリエンスエピソードの数
    • モデルを更新する間にエージェント(機体のこと)が実行するエピソードの数
    • 大きいとより経験値がモデルのトレーニングに活かされる
    • 問題がより複雑になる時は、ここを大きくするべき
    • 設定値: 5-100
    • デフォルト: 20
  • ハイパーパラメータをチューニングする戦略
    • 一般的な戦略
    • デフォルトでスタートさせる
    • いいスタートポイントを与える
    • 1-2時間のおレーニングで車が一周回るようになる
    • 少しずつ小さくしていく
    • 大きく値を変えると"overshooting"という状態になる
    • 短いインターバルで学習を繰り返す
    • 詳細なメモを記憶する
    • クローンしたモデルのCapaxityを使って、現在のスナップショットに関する情報を集め、必要に応じて戻す
    • 最も最新のスナップショットをどんな変更を記録し、どのような測定可能範囲か、のアウトライン
    • ログを使う
    • ログはトレーニングの最中なにがおこなわれているのか理解する努力をする
    • 普通のJupyter notebookログ分析ツールはそのプロセスを助ける
    • アグレッシブにはじめて、その後トーンダウンさせていく
    • モデルがランダムに初期化されるとき、2杯の偽物がでる (その後見ます)

まとめ

ハイパーパラメータの基礎的な部分をおさらいしました。これに更に色々な部分があわさってCafeができるのです。