
はじめに
本田技研工業でアプリ開発を担当している松村です。
先日、社内でAWSDeepRacerを使用したレース大会があり、
自身が所属する「デジタルラボ」の有志で参加しました。
AWSDeepRacerとは
クラウドベースの 3D レーシング シミュレーターと強化学習によって駆動する完全自律型の 1/18 スケール レースカーを通じて、機械学習を実際に体験できるサービス
参照:https://aws.amazon.com/deepracer/
大会の概要
- 3人1組の計14チームのトーナメント戦
- 実際のレーシングカーモデルでレース
- コースはAtoZを使用
- 予選と本戦の2部構成で開催
- ルール
- レーシングカーを2分間コースを走らせ続けて1周毎のタイムを計測
- 2分間のうちのコースアウトしなかった最速のタイムを記録として登録
- コースアウトした場合はコースアウトが発生した箇所に戻してレースを再開
大会までの道のり
-
とりあえず3Dシミュレータを使って擬似レースを実効してみる
- 最初はサンプルコードを実行
-
def reward_function(params): ############################################################################# ''' これは all_wheels_on_track(全ての車輪がトラック上にあるか)と speed(速度)を使った シンプルな報酬関数の例 ''' # 入力パラメータを取得 # すべての車輪がトラック上にあるかどうか(True/False) all_wheels_on_track = params['all_wheels_on_track'] # 現在の速度(float) speed = params['speed'] # この値を基準として、遅すぎる場合にペナルティを与える SPEED_THRESHOLD = 1.0 if not all_wheels_on_track: # 車がトラック外に出た場合、非常に小さな報酬を与える reward = 1e-3 elif speed
-
- 学習中に出力される動画のスクショ
- 学習のベースコースは大会で使用される「AtoZコース」を使用
- 最初はサンプルコードを実行
-
強化学習の精度を高める
-
色々試してみる
- 単純に速度重視、角度重視、操作数重視、センターライン重視と色々を考えて試してみた
- 結論から言うと、1周あたり10秒以上となりあまりいい効果は得られなかった
- チームメンバと情報交換し、操作数が少なければ少ないほど最適なコース選択して、最速な自立走行をしてくれる可能性があると話し合った
-
学習ログの視覚化
大会前日
大会当日
- 予選
- 2分間を2回計測し、上位5チームのみ決勝に進出
- 我々は5位で決勝進出
- 本戦
- 予選結果はリセットされ、決勝の2分間の記録で順位が決まる
- 我々は3位
まとめ
- 報酬関数で具体的な目標を与えると学習は安定するが、具体的な目標を設定した人間の能力が上限になる
- 報酬関数で抽象的な目標を与えると、使っている人間の能力を超えて走り方を学習してくれる。ただ学習は安定しない
- ハイパーパラメーターは効果があるかわからない
- コードは複雑なものよりシンプルなものの方がいい
- シミュレータと実機では挙動が違うことが多いので、データやロジックのみをみるのではなく、実機での挙動もしっかりとみないといけないと改めて実感
採用情報
本田技研工業に少しでも興味を持っていただきましたら、
お気軽にエントリーをお願いします。
Views: 0