ごっつ楽しんで簡単に学べる、強化学習超初心者でもDeepRacerで遊んでみよう #reinvent

2018.12.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ、千葉です。

機械学習の超初心者である私がDeepRacerで強化学習を体験してみました。超初心者でも、強化学習ってどんなのか楽しく学べたのでみんなにも体験いただきたいと思いレポートします。DeepRacerで強化学習してみてください。またDeepRacerやってる人が口を合わせてかわいいってう感想を持ちます、実際かわいいんだこれが。ハードルは全然高くないので、軽い気持ちでやってみてください!

DeepRacerとは?

まずはおさらいです。DeepRacerとはラジコンです。でも、ただのラジコンではないんです。ラジコンにカメラがついており、画像により道路を認識して、強化学習により、走行できるように育てる必要があります。

強化学習とは?

強化学習とは、パブロフの犬が代表的なようです。「餌を与える前にベルをならすことを繰り返すことによって、ベルをならすと犬はよだれをだす」ようになるというのが、パブロフの犬です。強化学習とは、このように行動に対する何かに作用をさせ、繰り返し実施することで学習するという考え方がベースになっています。

DeepRacerは、ラジコンをコースで走らせるのですが、強化学習を利用してモデルを作ります。例えば、中心線からずれたけどちゃんと戻ったらいいね!してあげたり、スピード出してゴールできたらいいね!してあげて、どう行動すればいい評価もらえるかを学習し、早く走れるモデルを作っていきます。

強化学習のフロー

DeepRacerは、いいかんじにラップされているので初心者でも、簡単に強化学習させて、育てることを楽しめます。やることは、以下の3ステップです。

モデルの作成

まずは、コースを選択します。現在は1つコースが用意されていて、今後追加される予定です。

評価関数を作成します。

一見難しそうに見えますが、やることは、どんな行動をしたらいいかを定義することです、例えば、throttleという速度のパラメータ(0-1)があるのですが、0.9 以上だったら高評価と定義します。例えば以下のコードを追加します。rewardというのが、どれくらいよくできたか、褒める値です。いいね!です。

if throttle >= 0.9:
        reward = 1

パラメータは様々あるので、何を高評価とするかを定義し、早く走れるモデルを作ります。学習中のrewardがどれくらい得たかをグラフでみれます。どんどん育ってるのがわかりますね。

また学習中は、こんな感じでバーチャル空間での動きを確認できます。走行を重ねるにつれ、だんだんとコースを走れるようになっていきます。これの育つ感じがたまらんのです。

モデルの評価

モデルが作成できたら、このモデルがどれくらいの走行性能があるか確認します。この場合は、1分くらいで走行できるモデルが完成したようです。3回目の走行は31%でコースアウトしてますねw

アーキテクチャ

WorkShop時に、DeepRacerのアーキテクチャが紹介されていました。バックエンドにSageMakerとRoboMakerが利用されています。RoboMakerは、バーチャル空間で機械学習できるようにするサービスで、動画でみたようなバーチャル空間を作っています。

プレビュー申請

まだ、プレビュー中なので申請して承認されないと利用できないのです。今すぐ申請しましょう!!

https://console.aws.amazon.com/deepracer/home?region=us-east-1

パラメータ

行動に対し評価(reward)するのですが、取得できるパラメータは以下になります。いろいろ考えて、はやいマシンを作りましょう。

  • on_track
    • 車両の前部が白線の外側にある場合、車両はオフトラック(False)
    • そうでない場合は、トラック上にあります(True)
  • x
    • 車両がx軸に沿っている部分の割合。 1は座標系の最大x値を示します。
  • y
    • Fraction of where the vehicle is along the y-axis. 1 indicates maximum y value in the coordinate system.
  • distance_from_center
    • ウェイポイントのnearest_waypointエントリから定義される、トラックの中心線からのフラクションの変位。
  • car_orientation
    • 車両のx軸に対するラジアン単位の車両のヨー角。
  • progress
    • 完了したトラックのパーセンテージ。
  • steps
    • 完了したステップの数。
  • throttle
    • 車の速度。 0は停止を示し、1は最高速度を示します
  • steering
    • 車両のx軸に対するラジアン単位の車両のヨー角
  • track_width
    • トラック幅。
  • waypoint
    • ウェイポイントは、転換点を定義するタプルです。
  • waypoints
    • オーダーされたウェイポイントのリスト
  • closest_waypoint
    • ユークリッド距離によって測定された、車両のxおよびy位置に与えられた最も近いウェイポイントの0ベースのインデックス

最後に

DeepRacerを使ってみました。遊びながら強化学習について学べました。こんな感じで、楽しみながら学べるサービスになっています。キーノート2日目の前に大会が開かれて、結構もりあがりました。ワークショップでは各地のサミットでも大会をやるって言っていたので楽しみです。ただ、DeepRacerのラジコンはAmazon.comで購入できるのですが、まだ日本にシップできないみたいなので、GAが待たれます。待ち遠しい!

参考