DeepRacerを通じて強化学習の仕組みを学ぶ
DeepRacerの醍醐味はなんといっても強化学習を学べること。ここで強化学習とDeepRacerの関係性を確認しておこう。AIで特定のタスクに特化し、明示的にプログラムすることなく学習方法をアルゴリズムに教えるのが機械学習となる。そのなかでも正解のラベルをつける教師あり学習、ラベルをつけない教師なし学習がある。
強化学習は特定の環境下での行動の結果を通じて学習させる。ペットを調教(訓練)する時をイメージすると分かりやすい。例えば犬に「お手」や「お座り」など期待する行動をすれば報酬を与え、期待しない行動には報酬を与えない(あるいはペナルティーを与える)ことを繰り返すことで、より期待通りの行動をとれるようになる。DeepRacerであれば、コースをより速く走ることになる。人間が何かを体得する時も強化学習に近いことをしているのではないだろうか。
強化学習における要素をDeepRacerに当てはめてみよう。「エージェント」は自律的に行動するためのデバイスやソフトウェアであり、DeepRacerなら車体となる。ゴールはトラックをより速く一周すること。「環境」はエージェントとインタラクションを行うもので、DeepRacerならトラックとなる。「状態」はエージェントから観測されるもので、DeepRacerならカメラから得られた情報、例えばセンターラインの位置などとなる。「行動」はエージェントがうけとる状態に応じて、ゴールに到達するために事前に定義したものから選択される。
「報酬」はゴールに到達するための行動に与えるものとなる。DeepRacerではこの報酬の設定、つまり報酬関数が最も重要となる。より速くトラックを1周することができる行動にはより大きな報酬を与え、コースアウトには報酬を差し引く(ペナルティーを与える)。DeepRacerリーグとはこの報酬関数の競技と言ってもいいかもしれない。
繰り返すが、ゴールは「できるだけ速くコースを1周する」こと。エージェントはカメラやセンサーを通じて環境の状態を測定し、それに応じて行動を選択し、その行動の結果に対して報酬が与えられることを繰り返すことで学習が進む。
![DeepRacerが自律的に走行できる仕組み](http://cz-cdn.shoeisha.jp/static/images/article/17464/17464_p1.png)
より具体的に報酬関数を見ていこう。例えば図のようにセンターラインを走れば大きな報酬(2ポイント)、少し離れると少ない報酬(0.2ポイント)を割り当て、コースアウトしたら走行中止とする。エージェントは探索フェーズでは試行錯誤を繰り返し、より高い報酬を獲得する行動を模索する。何度も繰り返すうちに一定の報酬に収束し、それは学習が進んだことになる。
![DeepRacerへの報酬の与え方の例](http://cz-cdn.shoeisha.jp/static/images/article/17464/17464_p2.png)
実際の強化学習はAWSにログインして「AWS DeepRacer」コンソールからモデルを作成して進めていく。やることは独自の報酬関数を作成していくのだが、DeepRacerは機械学習の習得が目的なのでサンプルが用意されている。ドキュメントや解説動画が豊富にあるので、いろいろと目を通しながら知識を蓄えていこう。
報酬関数の作成では、トラックのいろいろな要素(中心線や境界線、オントラックまたはオフトラックなど)から各種パラメーター(車体の向き、中心線からの距離など)を入力していく。目的はより速くトラックを周回することだが、ただセンターラインに乗ればいいというわけではないだろう。ぜひ最高・最速のモデルを作ることに挑戦してほしい。
2019年のDeepRacerリーグから関与しているアマゾンウェブサービスジャパン合同会社 機械学習ソリューションアーキテクト 宇都宮聖子氏は「DeepRacerでシミュレーション(仮想レース)とリアルのギャップを経験するとまた面白いと思います。さらに機械学習そのものや、AWSのSageMakerなどAWSの各種サービスについても知るきっかけになるといいと思います」と話す。