はじめに
今回、iTAC Solutionsでは、AWS DeepRacer(以下DeepRacer)という大会に出場することになりました。 そこで、本記事では、DeepRacerとはどのような大会なのかということを紹介していきたいと思います。
DeepRacerとは…?
DeepRacerとは、「AWS主催の、1/18サイズの完全自走型レーシングカーを強化学習(Reinforcement Learning: RL)により操縦(?)し、トラックを1周するときのタイムを競うレース」のことです。
以下の動画を見ていただけると、少しは想像がつくかと思います。
もう少し詳しく説明すると、この大会はレーシングの大会です。
しかし、ただのレースの大会ではなく、下の写真(AWS DeepRacer公式サイトより引用)のような1/18サイズ(25~30cmくらいのサイズ)の完全自走型レーシングカーを用いたレースです。
この完全自走型レーシングカーは、ラジコンのように人がリモコンなどを使って操縦するのではありません。
レーシングカーにはカメラが搭載されており、このカメラから得られる情報やこのレーシングカーがコースのどこにいるか、またコースのルートをもとに機械学習、具体的には強化学習という手法を使って、走行するためのモデルを作成し、そのモデルを使って自動運転で走ります。
「強化学習により操縦(?)」と書いたのは、人が操縦というよりも自動運転で動かすためです。
強化学習について
強化学習とは、機械学習の手法の1つで、「ある行動を何回も試行錯誤を繰り返すことで、その行動の最適化を行う」学習方法のことです。
(AWS DeepRacerの「Get started with reingorcement learning」から引用)
上の概念図で説明すると、強化学習ではまず、エージェントが環境に対してとりあえず何かしらアクションを行います。
その結果、エージェントには「環境がどのような状態になったか」と「その状態になった結果得られる報酬」が返されます。
強化学習ではこの 「得られる報酬」を最大化する ことが目的となります。
DeepRacerにおける例
例えばDeepRacerの場合、先ほどの図におけるエージェントはレーシングカー、環境はレースコース(トラック)、アクションは「トラックを走行する」になります。
まず、レーシングカーは何の情報もなしにとりあえずトラックを走行します。
その結果、レーシングカーが走った走行ルート(DeepRacerにおける"状態")をもとに、報酬が計算されます。
DeepRacerにおける報酬は、さまざまに決めることができます。
例えば、報酬を「どれくらいコースをはみ出さないで走れたか?」とする場合、はみ出さなければはみ出さないほど多い報酬を与えるような関数を設定し、その関数に従って走行経路に対する報酬を計算します。
レーシングカーは計算された報酬をもとに、より報酬を大きくできる走行経路を計算します。
そしてレーシングカーは計算された走行経路に沿って走行、報酬を計算しレーシングカーはさらにその報酬を大きくできる走行経路を計算し…
というように繰り返し学習が行われ、最終的に最適な走行ルートを走ることができるようになるということになります。
DeepRacerにおける強化学習において重要なこと
機械学習における学習では、 * どのようなアルゴリズムを用いて学習するか? * どのようなパラメータで学習させるか? が重要です。
しかし、DeepRacerでは強化学習のアルゴリズムは、PPO(Proximal Policy Optimization)というアルゴリズムを用いて学習するため、ここは変更できません。
そのため、後者の 「学習率やエポック数などパラメータ(DeepRacerではハイパーパラメータ)をどのように設定するか?」がまず重要になります。(下手にいじるとうまく学習できなくもなるので、注意は必要)
そして、強化学習において最も重要なのは、「いかに報酬を決めるか?」です。
次回の記事で具体的に書きたいと思いますが、DeepRacerでは「報酬関数」というものをあらかじめ定めておいて、どのような状態のときにどのような報酬を与えるかを予め関数として設定します。
そしてその関数をもとにレーシングカーに報酬が返されます。
ということは、すなわち「報酬関数をいかに作成するか?」が重要になるということです。
もちろん、DeepRacerでの最大の目的は「トラックを最も速く走ること」です。
この目的から逆算して、どのように報酬関数を定めればよいか?を考えなくてはなりません。
例えば、「中心線から逸脱しない」ように報酬関数のパラメータを設定するということも「トラックを最も速く走ること」には目的として合致すると思います。
しかし、コーナーを曲がるときは一般に「大きく曲がる」方が速い(減速が少ない)といわれます。
すると、大きく曲がるためにはコーナー直前で中心線よりも外側を走る必要があります。
また、中心線を意識しすぎてしまうと、直線コースでも小刻みに「曲がる」というアクションを行うことで、中心線を守ろうとしてしまいます。
しかし、「曲がる」というアクションはレーシングカーのスピードの低下につながってしまいます。
そのため、必ずしも「中心線から逸脱しない」ということは正しくなく、もっと様々なことを考慮して報酬関数を調整しなくてはなりません。
AWS DeepRacerリーグについて
AWS DeepRacerでチャンピオンになるためには、AWSのカンファレンス、re:Inventで開催されるAWS DeepRacer Knockout Roundsに出場する必要があります。
AWS DeepRacer Knockout Roundsに出場するには、以下のサーキットに参加する必要があります。 * Summit Circuit races * Virtual Circuit races
これらのレースで上位になる、もしくは各レースで付与されるポイントの年間累積ポイントで最高得点を記録するとAWS DeepRacer Knockout Roundsに出場することができます。
Summit Circuit races
これは、AWS Summitで行われるレースで、参加資格は18歳以上です。
この時に用いられるコースは以下の「re:Invent 2018」コース(2019年現在)です。
AWS Summitレースは日本含め世界各国で行われており、ここでトップになるとAWS DeepRacer Knockout Roundsに参加することができます。
Virtual Circuit races
Virtual Circuit racesとは、オンライン上で行われているレースで、参加資格は14歳以上です。
このVirtual Circuit racesでは、チャンピオンカップやSummit Circuit racesのような実機を使って行うレースとは違い、オンライン上でシミュレーターを使ってタイムを測定します。
このVirtual Circuit racesは毎月コースが変わり、月間一位になると、AWS DeepRacer Knockout Roundsの出場権が与えられます。
まとめ
今回は、我々がAWS DeepRacerに参加するということで、大会の概要をまとめました。次回の記事では、具体的にどのようにAWS DeepRacerを始めるか?について書きたいと思います。