0からはじめるAWS DeepRacer

はじめに

はじめまして。Webサービス開発グループの2019年度新入社員の岩崎です。

現在、弊社内では強化学習の勉強としてAWS DeepRacerに関する社内勉強会が開催されており、私もそれに参加をしています。そして、今回は強化学習の知識0の状態からAWS DeepRacerに触れてみてのことを書いていこうと思います。

AWS DeepRacerとは

Q: AWS DeepRacer とは何ですか?
AWS DeepRacer は、文字通り強化学習によって駆動される完全自走型の 1/18 スケールのレースカー、3D レーシングシミュレーター、およびグローバルレーシングリーグを備えた、強化学習 (RL) を自由自在に操る最速の手段です。

-引用- AWS DeepRacer のよくある質問

強化学習で学習させたレースカーをコースで走らせ、そのタイムを競いながら強化学習を学ぶことができるというものです。実機のレースカーが無くてもシミュレーションとして学習を行うこともできます。

そして、開催されているリーグで10位以内に入賞するとAWS DeepRacerのレースカーを、トップになるとラスベガスで行われる re:Invent 2019 に旅費無料で招待されるなどのご褒美 (!) も用意されています。

強化学習とは

強化学習(きょうかがくしゅう、英: Reinforcement learning)とは、ある環境内におけるエージェントが、現在の状態を観測し、取るべき行動を決定する問題を扱う機械学習の一種。エージェントは行動を選択することで環境から報酬を得る。強化学習は一連の行動を通じて報酬が最も多く得られるような方策(policy)を学習する。

-引用-「強化学習」『フリー百科事典 ウィキペディア日本語版』。2018年10月18日 01:00  UTC

ある環境内 (コース) でエージェント (レーシングカー) が現在の状態からどのような行動をとれば良いかを学習させる機械学習の一種です。コースでレーシングカーが取った行動に対して報酬関数からその行動の良し悪しを決定、繰り返し行うことでより良い行動を学ばせていきます。

実践

1回目

記念すべき第1回目の学習モデルです。報酬関数やアクションリストにどのような値を設定すればいいかも分からない状態のため、基本的にサンプルをそのまま走らせてみました。基本は大事。

アクションリストはステアリング30°、最高速度3m/s、報酬関数にはサンプルにあった「センターラインに合わせて走行」を設定し、7月リーグの学習用コースのEmpire City trainingで学習開始!学習中は車載カメラの映像を見ることができます。

90分間の学習を行い、試走をしてみたところ……

あれ?初めてにしては意外と良い結果なのでは……?試走前は1回でも完走したら良い方、完走できないのが当たり前と思っていました。しかし、実際は5回中3回は完走、残り2回は90%以上とゴールまであとわずかという結果です。ただひとつ気になるのはタイムが40秒かかっていること、リーグでの記録を見ると1位の記録は10.028秒、100位でも19.193秒です (2019/07/22現在) 。40秒なんてノロノロした走りをしてたらいくらなんでも勝ち目はありません。速さを……、もっと速さを……!

2回目

とにもかくにも最高速度を上げましょう!新しくモデルを作成します。最高速度を5m/sに変更し、1回目では直進してほしい箇所でふらふらと走っていたので報酬にはステアリングを大きく切ると減点をする関数も追加します。不要なステアリングを減らすことでジグザグ走行を抑制するのが狙いです。

 

1回目と同じようにEmpire City Training で90分で学習を始めましょう。

タイムをほぼ半分に短縮できました……!最高記録は21.001秒、夢の10秒台まであと1秒ほどです!

スピードは十分そうなのであとは報酬関数をいじれば10秒台に行けるかもしれません。

別コースで試走

タイムが大幅に縮まり気分が盛り上がってきたところでちょっと気になる情報を見つけました。それは

「学習の際に走らせるEmpire City trainingとリーグ本番のEmpire City Circuitには違いがある。」

というものです。比べて見ると

なるほど、たしかに左下のカーブ部分が変わっている……

これはつまり、良い結果が出ても本番でも同じような結果になるとは限らない、ということです。試走で10秒台に入れたけれども本番では完走できなかった、なんてことになってしまうかもしれません。Empire City training以外のコースでもしっかりと走り切るモデルにしなければいけません……!

というわけで今のモデルが別コースでどれだけ走れるか、というのをちょっと試してみましょう。

試走コースはAWS Summitで使われていたre:Invent 2018にしてみます。さぁ結果は……?

コースの半分も進めず、という結果になってしまいました……。初見のコースとはいえここまで下がってしまうとは少し驚きです。しかし、めげていても始まりません。モデルの学習を続けましょう。

3回目

前述したコースの違いの問題はありますが、まずは10秒台に入ることを目標にモデルの学習を進めたいと思います。

モデルをCloneし、さらなるスピードを求めて今度は遅く走っていると減点を与えるようにしてみます。また、何回も同じコースで学習していると過学習が進み本番に弱いモデルになってしまうと思い、コースをre:Invent 2018に変えて学習してみます。

逆に悪くなってしまいました……、これは難しい!過学習を嫌って早めのうちから学習コースを変えたのが裏目に出てしまったのかもしれません。やはり一筋縄ではいかないようです。

さいごに

3回の学習をしたところで今回は終了です。この記事を執筆中にもいろいろと試してはいたのですがいまだに2回目のモデルの21.001秒をこえる記録は出せていません。まだまだ精進が必要なようです。まずはEmpire City trainingを10秒台で走れるようなモデルを目指して頑張りたいと思います!

読んでいただきありがとうございました!