iTAC_Technical_Documents

アイタックソリューションズ株式会社

ブログ名

DeepRacerの使い方やチーム体制について

今回の作業内容

今回は,DeepRacerの始め方と,今後チームとしてどのような体制でやっていくべきかについてまとめたいと思います.

この記事を読めば,とりあえずDeepRacerを始められるはずです...!

DeepRacerの始め方

コンソールにログイン

AWSのアカウントを持っている前提で話を進めていきたいと思います.

(アカウントを持っていない方は,AWSのアカウントを作成してください.)

まずは,AWSマネジメントコンソールにログインします.

AWSマネジメントコンソール

そして,リージョンを米国東部(バージニア北部)に変更します.

(2019年7月現在,DeepRacerは米国東部(バージニア北部)リージョンのみで利用できます.)

f:id:iTD_GRP:20190801172604p:plain

DeepRacerの開始

リージョンを変更後に,サービスの検索からDeepRacerを検索してDeepRacerのトップページに移動し,Get startedボタンから利用を開始します.

f:id:iTD_GRP:20190801172643p:plain

f:id:iTD_GRP:20190801172627p:plain

強化学習に向けての準備

この後は,基本的に画面に沿っていけば大丈夫です.簡単に始められます.

Step0: リソースを作成する

まずは,AWSを始めるのに必要なリソースを作成します.

Create resourcesボタンをクリックすれば自動で作成してくれます.

f:id:iTD_GRP:20190801172703p:plain

Step1: 強化学習の基礎について学ぶ

Start learning RLボタンから,強化学習の基礎とDeepRacerの概要について学ぶことができます.

DeepRacerがどのようなものなのか,また,どのように進めていけば良いのかについて簡単に解説されているので,強化学習について既に知っている方でも,DeepRacerを始めるにあたって見ておいた方が良いと思います.

f:id:iTD_GRP:20190801172713p:plain

Step2: モデルの作成とレース

ここまでで,強化学習に向けての準備は整いました.

Create modelボタンから,モデルを作成してレースに参戦する準備をしましょう!

f:id:iTD_GRP:20190801172729p:plain

モデルの作成

モデルの作成画面も,画面に沿っていけば簡単に進めていけます.

モデルの名前等の入力

これから作成するモデルに名前をつけます.

また,Model description欄からモデルに関して簡単な説明をつけることもできます.

f:id:iTD_GRP:20190801172739p:plain

強化学習の際に走らせるサーキットの選択

強化学習でモデルを構築するにあたって,シミュレータ上のサーキットにDeepRacerを走らせます.

その際,どのサーキットにDeepRacerを走らせるかをここで選択します.

基本的には,その月のVirtual Circuitを選択するのが良いと思います.

f:id:iTD_GRP:20190801172752p:plain

アクションスペースの設定

アクションスペースを設定します.

アクションスペースって何?って方は,前回の記事をご覧ください.

とりあえずは,様子見としてデフォルトのままで良いと思います(めっちゃ遅いですが...).

f:id:iTD_GRP:20190801172810p:plain

報酬関数の設定

報酬関数を設定します.

報酬関数って何?って方は,前回の記事をご覧ください.

とりあえずは,デフォルトのままで良いと思います.

f:id:iTD_GRP:20190801172934p:plain

ハイパーパラメータの設定

ハイパーパラメータはデフォルトのままで大丈夫です.

下手に弄ると,学習がうまく進みません.

f:id:iTD_GRP:20190801172949p:plain

終了時間の設定

どのくらいの間,強化学習をさせるか設定します.

アクションスペースや報酬関数をデフォルトのままにしているのであれば,1〜2時間程度の学習時間でサーキットを完走するモデルを作成することができると思います.

f:id:iTD_GRP:20190801172957p:plain

強化学習の開始

ここまでで,モデルの作成に関しての設定が終わりました.

Start trainingボタンから,シミュレータを起動して強化学習を開始しましょう!

f:id:iTD_GRP:20190801173010p:plain

強化学習中の画面

シミュレータ上で強化学習を行っている最中の画面は,こんな感じです.

画面左のReward graphには,報酬関数で得られたrewardの値の折れ線グラフが表示されています.

drive.google.com

Stop trainingボタンから,途中で強化学習を終わらせることも可能です.

レースへの参戦

シミュレータ上での強化学習が終わり,モデルが構築されるとこのような画面になります.

f:id:iTD_GRP:20190801173449p:plain

Start evaluationボタンから,作成したモデルの評価(ラップタイムの計測等)を行うことができます.

ただ,今回は早速ですがSubmit to virtual raceボタンからVirtual Circuitレースに参戦してみます.

Submit to virtual raceボタンをクリックし,Racer name(順位表等に載る名前です.後から変更できないので注意!)を入力すると、このような画面になります.

f:id:iTD_GRP:20190801173504p:plain

この画面を見ると,2019年7月現在のVirtual CircuitレースのコースがEmpire City Circuitであることが分かります.

とりあえず,プルダウンから先程作成したモデルを選択し,Submit modelボタンをクリックしてモデルを提出し,レースに参戦してみましょう!

Submit modelボタンをクリックすると,このような画面になります.

f:id:iTD_GRP:20190801173520p:plain

この画面では,現在の順位表(Leaderboard)や先程提出したモデルのラップタイム等を確認することができます.

提出したモデルのラップタイム等は,下にスクロールすると出てきます.

f:id:iTD_GRP:20190801173531p:plain

上の画像のような場合,作成したモデルではサーキットを完走できていないため,ラップタイムが計測されず,順位表に現れません...笑

このままでは終われないので,さらにモデルを改良していきましょう.

モデルの改良(クローン)

クローン機能を用いることで,既に学習済みのモデルを複製して,それをベースに強化学習を再開させることができます.

これを繰り返すことで,モデルを改良していくことが可能です.

(ただし,学習をさせすぎると過学習になってしまう恐れがあります.)

クローンを行うには,先程のモデルの画面で,Cloneボタンをクリックします.

f:id:iTD_GRP:20190801173543p:plain

すると,先程のようなモデルの作成の設定画面になるので,先程と同様に報酬関数等の設定をしていきます.

f:id:iTD_GRP:20190801173555p:plain

ここで,1つ重要なことがあります.

それは,クローンする際に報酬関数やハイパーパラメータに関しては変更できるが,アクションスペースは変更できないということです.

アクションスペースによってトップスピード等が決まっているため,モデルを作成する際にはアクションスペースは非常に重要であると言えます.

ただ,報酬関数やハイパーパラメータに関しては変更できるので,例えば「最初はシンプルな報酬関数によって基本的な走り方を学習させて,その後クローンする毎に詳細な報酬関数を追加していくことで,より厳密な走り方を学習させる」というような方針でモデルを作成していくこともできます.

クローンしたモデルの作成に関しての設定が終わったら,先程と同様にStart trainingボタンから,シミュレータを起動して強化学習を開始しましょう!

f:id:iTD_GRP:20190801173609p:plain

このようにして,クローンを繰り返すことでサーキットを速く走れるモデルを作成していきます

DeepRacerの始め方は以上になります!

チーム体制について

アカウントについて

DeepRacerリーグにチームで参戦する場合,以下の2つの方法が考えられます.

  • 体制A:チーム全員で1つのアカウントを共有し,各自のモデルを共有しながら開発を行う.
  • 体制B:チーム全員がそれぞれアカウントを所有し,各自のノウハウを共有しながら開発を行う.

体制Aの場合

DeepRacerでは他のアカウントで作成したモデルを使用してシミュレータ上で強化学習させることはできません.

そのため,Aの場合はモデルを共有できることが1つ大きなメリットです.

しかし,Aの場合,DeepRacer公式ルールのVirtual Circuit race rulesに抵触する恐れがあります.

特に以下の部分です.

  1. You may only compete with your own Reinforcement Learning models or the stock AWS DeepRacer Reinforcement Learning models provided by AWS in the AWS DeepRacer console. ii. Anyone who shares Reinforcement Learning models or use shared Reinforcement Learning models, other than those provided by AWS in the AWS DeepRacer console, will be disqualified. iii. You may only submit your Reinforcement Learning models to the virtual race while the virtual race is open.

また,同時にシミュレータ上で強化学習できるのは1つのアカウントにつき最大で2つ,そして,1度レースにモデルを提出すると,その後30分は次のモデルを提出できないということもあり,チームメンバーが同じ時間帯に同時に作業を行いづらいというデメリットもあります.

体制Bの場合

先ほども述べたようにDeepRacerでは他のアカウントで作成したモデルを使用してシミュレータ上で強化学習させることはできません.

そのため,あくまで個人がそれぞれ開発を行ってレースに参戦し,そこで得られたノウハウ(報酬関数やアクションスペース,学習時間等)を共有するといった形になります.

また,レースに参戦する際,順位表等に表示されるRacer名を決める必要があるのですが,他のアカウントと同じ名前を使用できないため,iTACとして参戦する場合,例えば以下のようになります.

Yuto-iTAC-Solutions-Lab

この場合,チーム一丸となって開発しているというよりも,個人参戦にiTACがスポンサーとして付いているというようなイメージになってしまう恐れがあります(名前にTeamを入れれば,多少はチーム感が出るかも...?).

ただ,メンバーそれぞれが個別にアカウントを所有するということは,各自が思うままに学習させたり,レースにモデルを提出できたりするので,それはメリットの1つと言えます.

アカウントについてのまとめ

個人的には,個人参戦にiTACがスポンサーとして付いているというようなイメージになってしまう恐れがあるものの,公式ルールに抵触する恐れがない体制Bの方が無難だと感じています.

開発について

色々とネット上の記事を読んだりしていると,報酬関数について2つの方針が存在しているような印象を受けました.

  • 方針1:DeepRacerのタイムアタックに特化した複雑な報酬関数を実装する.
  • 方針2:強化学習の力を生かし,単純な報酬関数を実装する.

方針1

現在の上位層は,どちらかというと方針1の方が多いような気がしています.

しかし,方針1を突き詰めると,サーキットの最適な走り方を,そっくりそのまま実装するということになってしまい,強化学習によるレースの醍醐味が薄れてしまうのではないかと思っています.

ただし,短期的に1位を目指すという意味では方針1は合っているのではないかと思います.

方針2

方針1の人の方が多いように感じていますが,少なからず方針2の人もいます.

その中にはたった4行の報酬関数で8位になった人もいるようです.

その報酬関数を見ましたが、短いながらも考え抜かれた報酬関数でした(これについては、また後日に詳しく解説したいと思います).

また,恐らく方針2の場合は,月が変わってサーキットが変更された場合でもモデルを簡単に使いまわすことができるのではないかと思います.

開発についてのまとめ

方針1と方針2では,それぞれメリット・デメリットがあるため,DeepRacerチームが発足されたら,方針1チームと方針2チームで分けるのもアリかなと現在は思っています.

まとめ

今回は,DeepRacerの始め方と今後チームとしてどのような体制でやっていくべきかについてまとめました.

今後は,実際にチームが発足された場合の具体的なチーム体制や開発の方針を決定したり,実際に開発を行っていったりしたいと思います.


前の記事へ 目次に戻る