パネルディスカッションで話された「初めてコースを見たときに、どこに着目するか?」「ズバリ、勝つポイントは?」「報酬関数を決める方法は?」についての内容をお伝えする。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載では、アマゾン ウェブ サービス ジャパンが主催するイベントでのセッション内容を基に、DeepRacerの概要から実践方法までを紹介してきた。今回はそれを踏まえた応用編として、「どうすればDeepRacerリーグ(レース大会)に勝てるのか?」を紹介する。
本稿は、(少し古いが)2019年10月4日に開催された「AWS DevDay Tokyo 2019」における「パネルディスカッション:AWS DeepRacerと機械学習の可能性」の「第一部: Winner の皆さんに聞く『どうすれば勝てますか?』」を書き起こしたものである。パネルディスカッションは二部構成で、この後で「第二部: AI 人材育成とは? DeepRacer をきっかけにしての次のステップは?」が続いたが、その内容は割愛した。
登壇者は、モデレーターとして、
パネリストとして、
が登壇した。ちなみにパネルディスカッション全体では、DeepRacer機能の解説員としてアマゾン ウェブ サービス ジャパンの鮫島正樹氏 (図1の左から2番目)が登壇し、第二部ではDNPの和田剛氏(図1の右端)も登壇した。
まずは鮫島氏から、「DeepRacerとは何か?」について簡単な説明があった(図3、図4)。
本連載で説明済みの内容なので、この部分の説明は省略する。
なお、DeepRacerの新型機である「AWS DeepRacer Evo」が2019年11月27日に発表されている。AWS DeepRacerのクラウド上でも新機能の追加や機能改良が行われている。本稿の内容はあくまで2019年10月4日時点の情報であるので、その点はご了承いただきたい。
また、2019年12月4日に開催された「AWS DeepRacerリーグチャンピオンシップカップ2019」において、このセッションに登壇した瀧下氏が世界一に輝いている。それだけに、本稿の内容はDeepRacerで強くなりたい人にとって大いに参考になるのではないだろうか。
さて、パネルディスカッションでは、
という3点の質問が行われた。各勝者の回答内容を見ていくことにしよう(以下、敬称略。以下、ディスカッションの発言部分は、です・ます調)。
――(瀧澤) DeepRacerのバーチャルサーキット(Virtual Circuit)の場合、図5に示すようなコースが1カ月ごとに出てきます。
このどこに着目すれば、速く走ってレースに勝てるようになるのでしょうか? 全員に聞いていきます。まずは大野さんから。
大野 初めてコースを見たときには、「どういうライン取りをしたら速く走れるか」を考えるのが大切です。具体的には、図6のようにコース上に線を引きます。
ポイントは、「どれくらい内側を走れるか」「どれだけ真っすぐを維持しながら、カーブに入れるか」を意識しながら線を引くことです。
―― 割と普通の、車と同じようなライン取りなのですね。
大野 そうですね。ライン取りを考えるときに、自分はあまり経験がありませんが、ラジコンカーなどのレースで実践されているライン取りと同じです。
―― 相場さんの場合はどうですか?
相場 私もライン取りを考えます。特に図7に示す2点が重要です。
1点目は、「左右それぞれのカーブがどのくらい存在するか?」を見ます。例えば図7の左側にある「re:Invent 2018」のコースであれば、(レース/トラックは反時計回りに進むので)左カーブばかりで、右カーブは一度しか出てこないので、「右カーブの学習が弱くなる」と予想します。
2点目は、「ジグザグの道は存在するか?」を見ます。図7の右側にある「Kumo Torakku」のコースであれば、赤枠で囲っているジグザグになっている道は、「ジグザグさせずに、なるべく真っすぐ突っ切りたい」というように考えます。
このような2点に着目しながら、仮説を立てて、ざっくりとした方針を決めます。
―― 確かに私も、ジグザグの道を真っすぐ走らせるために、報酬関数を考えたことがあります。阿蘇さんはどうですか?
阿蘓 私も大野さんの図6と、最初のアプローチは同じです。コミュニティーの中にイギリスのF1チームを引退した人がいるので、その人に「このコースをもっとうまく走らせたい」と相談したら、「実際のレースだと、加加速度(ジャーク: 単位時間当たりの加速度の変化率)が少ない方が速く走れる」とのことでした。そこで本物レースとDeepRacerを見比べつつ、「どのように曲がればよいのか」を点々でプロットしてもらい、その点々の上を上手に走れるように報酬関数を決定していきました。
―― 瀧下さんもだいたい同じでしょうか?
瀧下 私の場合は、それぞれのコースにおける一番大きなカーブを見て、「どれくらいの行動空間(Action space: スピードとステアリング角度の組み合わせ)にしたら走りやすそうか」を考えます。つまり、どれくらいのステアリング角度で、どれくらいのスピードを出すのがよいかを最初に考えます。
―― そのやり方は、初めのバーチャルサーキットのときからですか? それとも何度もレースに出るうちにそうなったのですか?
瀧下 最初からです。初めのバーチャルサーキット「London Loop」(前掲の図5を以下に再掲)はカーブが緩そうな印象があったのでステアリング角度を小さめにしてみたり、「Kumo Torakku」はステアリング角度を大きめにしてみたりしました。
―― それでは次の質問に入ります。
―― 勝つポイントについても順番に全員に聞いていこうと思います。瀧下さんからお願いします。
瀧下 2019年6月に開催されたAWS Summit Tokyo 2019でのDeepRacerリーグ(以下、Tokyo Summit)は3日間ありましたので、1日目でダメだった点を改善して2日目に再チャレンジすることができました。1日目に極端に違う2つの強化学習モデルを使って走らせて、それでうまく走れた方のモデルをスピードアップさせたバージョンを2日目に走らせました。それが一番速く走りました。
その際に一番気を付けたのが、コースアウトしないモデルにすることです。二番目がスピードより安定して走ることを求めました。
大野 スピードよりも安定を求めた瀧下さんが一番速いというのも、ちょっとアレ(=真逆の結果)なんですけど……(笑)。僕は、多少コースアウトしてもよいので、どれだけ速いスピードで駆け抜けられるかを大切にしました。先ほどのライン取りの話と同じですが、できるだけ真っすぐスピードに乗って走れるようなモデルを意識してレースに参加しました。
相場 Tokyo Summitのときは、図8に示すように、大きく3つの仮説と方針を立てました。具体的には、「実機でもwaypoints(ウェイポイント: 参照点、コース上の地点)は有効なのか?」「アクション数が少ない方が安定するのでは?」「貪欲にセンターラインを攻める報酬関数の方が、アウトコース気味になった際も立て直しやすいのでは?」に関する仮説と方針です。
Tokyo Summitで初めて実機を触ることになったので、waypointsの仮説は実証できずに本番を迎えることになりましたが、取りあえずDeepRacerのシミュレーター上で、waypointsに沿う形になっているときの報酬を高くしたり、行動空間(Action space)を広げたりなど、さまざまなことを検証しました。
学習を進めると、確かに走行は安定してきますが、あまり速度が出ないという問題がありました。そこで、「シミュレーター上で、どういう動きをしているか」を見てみると(図8の下)、蛇行運転、細かくハンドルを切っているような走行になっていました。それを踏まえて、行動空間を狭く(=アクション数を少なく)したり、センターラインを貪欲に攻めてコースアウトしてもすぐに戻れるようにしたりなど方針を工夫しました。先ほど大野さんから「コースアウトしてもよいので速く」という手法とは真逆ですね。
―― Tokyo Summitの1位(瀧下さん)、2位(大野さん)、3位(瀧下さん)と順番に話を聞きましたが、それぞれ勝つための戦略は違うのですね。
―― では最後に、報酬関数の決め方について教えてください。瀧下さん。
瀧下 結果的にいうと、一番速く走ったモデルの報酬関数のほとんどが、AWSコンソールのサンプルコードなのです。
―― 本当ですか?(驚) 本当のことを隠していないですか?
瀧下 いいえ。1日目に走らせた2つのモデルは、速く走った方がサンプルコードほぼそのままです。もう一方は、いろいろゴチャゴチャと自分でコードを加えていましたが、ボロボロでまともに走行しなかったということがありました。先ほど話したように、2日目に速く走った方のスピードをチューニングすることで1位になりました。
―― 要するに、私も含めて皆さんにもチャンスがあったということですね。大野さんお願いします。
大野 報酬関数の決め方は、基本的に先ほど話した「ライン取り」を報酬関数にどう反映させるのか、ということです。ラインを報酬関数に落とすには図9のようにします。
図9の左にある赤色の線は、コース上に自分が引いたラインです。このラインを図10の右にある青色の点のように、座標上の点に変換します。あとは、その座標に近いほど報酬が高くなるように報酬関数を書きます。また、ラインの角度と車体の角度が一致するほど報酬が高くなるように報酬関数を書きます。
記述した報酬関数のモデルで走行した結果は、ログ分析ツールなどを使って確認します。図10は上がライン取りで、下が走行結果です。
相場 Tokyo Summitのときの報酬関数は、先ほども少し触れたように「センターラインを貪欲に攻める」というもので、AWSコンソールのサンプルコードの係数をいじるところから始めて、「蛇行せずに最初の直線でいかに速度を稼ぐか」「最後の長い直線で速度を上げられるか」を目指しました。センターライン上を進んでいるときは極端に報酬を高くして、そうではないときには明らかに報酬を低くするような、極端な報酬関数を作りました。
図11は、左が「re:Invent 2018」で、右が「Cumulo Carerra」のコースです。re:Invent 2018は、できるだけセンターライン上を走る結果となっています。一方のCumulo Carerraは、センターライン上ではないところも走っています。これは、基本的にはセンターライン上を走るのだけれども、ハンドルを切らずに直線で走れる場合にも報酬を高くする、というアレンジを加えた結果です。
阿蘓 僕の場合は、10個くらいの報酬関数を考えて、トライ&エラーしながら組み合わせて、良いものをピックアップしていきました。
―― 皆さん、ありがとうございます(この後、「re:Invent 2019レースに向けての抱負は?」という質問もあったが、すでに開催済みなので割愛する)。
以上がパネルディスカッションの第一部の内容だった。
DeepRacerの細かな部分をどう調整すればよいかは分からないことが多い。成功している人がどうやっているかは気になるだろう。今回の内容はそれに応える良いコンテンツではないかと思う。本稿がDeepRacerで活躍するための一助になるとうれしい。
Copyright© Digital Advantage Corp. All Rights Reserved.