こんにちは!エンジニアの岩間です。
この記事は、ギークフィード Advent Calendar 2023 第20日目の記事です!
昨日のesarのブログに続き、今回もAWS DeepRacerについてです。
先日、ついにAWS DeepRacerデビュー&初レースに参加してきたので、そこで得た感想や私なりの気づきを共有できればと思います。
目次
AWS DeepRacerとは
AWS DeepRacerとは、自律走行モデルカーを活用し、楽しみながら機械学習を学べるサービスで、ユーザーは3Dレーシングシミュレーターで自動運転モデルをトレーニングすることができます。
下の画像はシミュレーターでトレーニング中のDeepRacerの様子です。
機械学習にはいくつかの主要なアプローチがあるのですが、DeepRacerではそのうちの一つである強化学習を使用することでモデルカーの自動運転を実現しています。
強化学習(RL)とは、エージェント(モデルカー)が現在の状態を観測し、得られる報酬を最大化するために、どのような行動をとるべきかを決定する手法で、DeepRacerでは報酬関数の実装や各種パラメータの調整により、モデルカーが最適な動作を学習することができます。
また、自分自身で作成したモデルで実際のレースに参加することもできます。
世界中で開催されているDeepRacer Leagueの中でも、特にre:Inventで行われるチャンピオンシップリーグは、大きな舞台となっており、世界中のスーパープレイヤー達による勝負が繰り広げられます。
ちなみに私がDeepRacerを初めて知ったきっかけは、今年の4月に行われたAWS Summit TokyoでのSummitサーキットでした。
その場の熱気に触れ、「機会学習モデルで車が自動運転する…なんて未来的なんだ…DeepRacerすごい!やってみたい!」とワクワクした気持ちになったことを覚えています。
写真はその時の様子です。
※余談ですが、レースで使用されているDeepRacerモデルカーの実機は、なんとAmazon(USサイト)で購入ができるようです。
これで自宅でも手軽にDeepRacerの世界に飛び込むことができますね!
レースに参加してみた
嬉しいことに、先日DeepRacer Jr.Champion Cupへ参加する機会があり、ワクワクしながら参加してきました!
機械学習もDeepRacerも初心者の私にとって最初は不安もありましたが、初心者でも楽しむことができ、すぐにその魅力に引き込まれました。
初めての参加は……皆さん速すぎますね!というのが率直な感想です。
気になる予選リーグでの結果ですが、Smile Speedwayのコースでタイムは9.797秒、46人中10位にランクインしました。
1位の方とは1.598秒差、5位の決勝進出には0.537秒及ばずでした。
レース当日は何度も挑戦してみましたが、なかなかタイムが伸びず、この秒差はかなり大きな壁だということを痛感しました…。
DeepRacerに触れてみてわかったこと
ここからは、DeepRacerに触れてわかったことや、レースに参加して得た気付きを共有していきます。
機械学習の奥深さ
DeepRacerを始めた頃は、自分が実装したモデルでDeepRacerが可愛らしくもがんばりながら進む姿に心を奪われました。
下の動画はよちよち歩きの頃のDeepRacerの様子です。
最初はそんなDeepRacerに癒やされつついたのですが、一定のレベルまでモデルが成長した後に課題がでてきました。
トレーニングを重ねて、モデルがある程度コースを学習してからの0.x秒を縮めるのが難しく、走行成績が伸び悩みました。
この中盤以降のフェーズでの改善が思っていた以上に苦戦し、新しいモデルを実装してみても、期待した成果が得られない…というフラストレーションのループに陥ります。
「この部分を工夫したら速くなるはず」と期待して実装し、検証した結果、むしろ成績が悪化する…そんな一筋縄ではいかないところにDeepRacerの奥深さを感じました。
実際にレースに参加してみて感じたことは、トレーニング中盤以降のフェーズでどれだけタイムを縮められるかは、かなり重要なポイントだということです。
レースではミリ秒の差で順位が変動することもあり、ここで諦めずに、モデルをどのように進化させていくかが、結果に大きな影響を与えると実感しました。
トレーニング時間のバランス
トレーニング時間に関しては、学習時間が長すぎても短すぎてもNGということがわかりました。
私の場合ですが、一つのモデルで合計7~15時間のトレーニングをしたモデルは比較的良いタイムがでる傾向がありました。
それ以上学習しても過学習となってしまい、タイムは伸びにくかったです(or 低下することもありました)。
また例えば、同じ180分のトレーニング時間でも、
- 180分×1回
- 90分×2回
- 60分×3回
とトレーニング時間を分割したりすることで、タイムが変わってくるということにも気が付きました。
コースごとの最適戦略
レースに参加してわかったことは、速いプレーヤーはコースに合わせた最適な走り方をしている、ということです。
下の画像は数あるコースのうちの一部ですが、DeepRacerには直線が多いコース、カーブが多いコースなど、様々な特徴を持つコースがあるため、コースに合わせた戦略が重要になるということがわかりました。
どのポイントで内回りや大回りにするか、速度を上げるか下げるかなど、戦略はコースごとに変わってきます。
上位プレーヤーの走行動画を拝見したところ、くねくねした道はセンターラインを無視して直進走行していたり、急カーブの前では減速したり、センターラインより少し内側を走行していたり…とコースに合わせた様々な工夫が散りばめられていました。
Smile Speedwayというコースを具体例に挙げて考えてみると、下の画像の赤矢印で示したエリアはなるべく直線で進みたいポイントになるかと思います。
例えばこのとき、デフォルトの報酬関数である「follow the center line」をそのまま使用すると、センターラインからの距離が近いほど大きな報酬が得られるため、良くも悪くもセンターラインに忠実に従うモデルができやすくなります。
そのため、コースの特性に合わせて報酬関数やパラメータを微調整して少しづつ改良していくアプローチが重要だと感じました。
計測方式ごとの最適戦略
DeepRacer Cupで採用される計測方式には例えば以下の種類があります。
- Total Time (合計タイム):
- 3周の合計タイムが計測されます。いかにコースアウトを避けつつ3周を走破できるかが鍵となります。
- Best Lap (ベストラップ):
- 3周した中で一番速いタイムが計測されます。安定性よりも速さを優先し、奇跡の一周を狙うことが可能です。
先日参加したJr.Champion Cup予選ではBest Lapの計測方式が採用されており、24時間何度でも挑戦可能かつ、その中でのベストラップをみてくれます。そのため、奇跡の一周狙いで諦めずに何度も挑戦したのですが、
計測方式によって、速さと安定性のバランスをどのようにとるのかは重要だと思いました。
地道な改良
一度のトレーニングでモデルを作り上げるのではなく、走行ログやグラフをみながら、ベストなモデルのcloneを重ねて少しづつ改良をしていくことは、個人的には良かったポイントです。
私の場合、トレーニングを開始して1時間時点でのログとグラフの結果を確認して、トレーニングを続けるかどうかを判断していました。
例えば、下の画像のように値が全体的に右肩上がりのグラフになっていたら、追加でトレーニングを続行し、様子をみました。
逆に、下の画像のような全体的に平行線なグラフになっていた場合は学習を一時停止し、モデルをcloneしてパラメータや設定を再調整して試してみたりしました。
モデルの成績が伸び悩んだときは、別のコースでトレーニングしてみるのも効果的でした。
例えば、直線でのふらつきや遅さが気になったときは、直線の多いコース(OvalTrackなど)等でトレーニングしていました。
DeepRacerの料金
もっとこうしたらよくなるのでは?今度はこのパラメータを調整してみよう!と色々とモデルを作っていると、気づかぬうちに利用料金が高額になっていることがあります。
最初の10時間の無料時間枠と5GBの無料ストレージを超えた場合、追加の利用には1時間あたり3.50USDの料金が発生します。
新しいアプローチを試す前に、予算を考慮したり、無料枠内での実験を最大限に活用する工夫も必要になるかと思います。
まとめ
いかがでしたでしょうか。
以上、「AWS DeepRacerデビュー!初のレース参加から得た感想と気づき」でした!
DeepRacerは楽しみながら機械学習を学べる素晴らしいサービスです。
これまで機械学習初心者だった私にとって、DeepRacerは新しい分野に挑戦する非常に良い経験となりました。
またレースの機会があれば是非挑戦してみたいと思います。
この記事が皆さまのご参考になれば嬉しいです。
ここまでお読みいただき、ありがとうございました。
- [会話型AI活用]Amazon LexとConnectでシーン別にお花をレコメンドする仕組みを作ってみた - 2024-12-23
- FreePBXで留守電メッセージをメール通知するまでの設定手順 - 2024-12-16
- Amazon Connect最初の一歩!シンプルなコールセンターを構築してみた - 2024-12-06
- 電子工作で自作した植物の自動水やり機から土壌データをAWS IoT Coreに連携してみた - 2024-09-13
- 【ESP8266 NodeMCU】電子工作で植物の自動水やり機を作ってみた - 2024-08-14