AWS DeepRacer をやってみた！

AWS DeepRacerはご存じですか？
「AWS re:Invent 2018」の基調講演で発表されてから注目を集めています。昨年は今回は、**機械学習がほぼ素人**の筆者が、そんなDeepRacerの概要から、DeepRacerでの強化学習、実際に学習＆評価してバーチャルで走らせるまでの手順を紹介してみます。実機での挑戦記もいずれ掲載できればと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/9e7363f3-87b7-89f1-4da6-84a3d5cd6564.png)
#AWS DeepRacerとは？
AWS社は、**「強化学習をすべての開発者に届けるためのサービス」**といった、キャッチコピーで表現しています。
DeepRacerは、**自律走行**を行う**レーシングカー**で、その走行エンジンに**機械学習モデル**が用いられています。
自分で作り上げたモデルは、コンピュータ上の**バーチャルレース**や、**現実世界での実機レース**での走行エンジンとして利用でき、走行タイムを他の人と競い合えるので、「世界で一番優れた機械学習モデルを作ってやろう!」と事前と**闘志が湧き上がって**きますね！
ゲーム感覚で深層強化学習のハイパーパラメーターの意味や働きなどを学べる狙いがあるようですね。

#DeepRacerを始めてみる
まず、AWSコンソールにログインし、DeepRacerを探してみます。
リージョンについて1点注意があります、2020年4月時点ではバージニアリージョンでのみ提供されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/c8cdd397-bf55-0fa8-7f94-cda7403bed35.png)

それでは、DeepRacerのトップページから**開始（get started）**のメニューボタンを押してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/a7f6b01b-34e2-199c-e66a-3cb0bd45c238.png)

「**Create Resource**」ボタンを押下し、DeepRacerに必要なリソースを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/f1828e59-020e-09f6-ea37-2e0e98fb0150.png)

なお、上記のリソース作成にはIAMアカウントに下記の権限が必要となりますので一般ユーザに必要な権限を事前に付与しておくようご留意下さい。
<https://docs.aws.amazon.com/ja_jp/deepracer/latest/developerguide/deepracer-understand-required-permissions-and-iam-roles.html>

リソース作成が成功するとこちらのように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/b3219449-289f-eecc-f352-0ad05318d690.png)

強化学習及びモデル作成のポイントについて説明になります（飛ばしてもよいです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/7863968c-bbad-8cc2-e37f-9f6f10dcae27.png)

さていよいよモデルの作成になります！「**Create model**」ボタンを押下してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/d04047cc-b53f-0bfa-518d-21f6c2dcf28a.png)

#モデル作成
前述ではStep1のガイダンスからモデル作成画面に遷移していますが、サイドバーメニューの**"Your models"**から直接開始することができます。
##何を設定するのか？
モデル作成では下記手順にて設定していきます。
   1. Model details（モデル名称・備考を記載）
   2. Environment simulation（学習するコースを選択）
   3. Race Type（レースタイプを選択）
   4. Agent（学習させるレーシングカーのエージェントを選択）
   5. Reward function（強化学習の報酬関数を定義）　 
   6. Hyperparameters（学習ハイパーパラメーターを設定）
   7. Stop conditions（学習時間を設定）

##1. Model details（モデル名称・備考を記載）
モデル名称と備考を記載しましょう。後で変更できないので注意が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/f490b93b-33a3-9c35-27dc-5934e6d2ab3b.png)

##2. Environment simulation（学習するコースを選択）
学習対象のコースを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/e9927916-5b6e-fe5d-9ace-2113bda7213e.png)

##3. Race Type（レースタイプを選択）
単独でのタイムトライアル、障害物回避、他レーシングカーとの競争の3種類から選択できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/b9964023-ab2d-fbae-9e22-ddfef668d3a4.png)

##4. Agent（学習させるレーシングカーのエージェントを選択）
レーシングカーのエージェントを選択します、最初は**Original car**が提供されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/9d9ef52c-632e-507f-0de2-f107ef093a43.png)

レーシングカーは自分でカスタマイズ可能です。
左側のメインメニューから**「Your garages」**を選択し、**Build new vehcle**ボタンで自身独自のレーシングカーを作成可能です。
以下の設定が可能です。
　- Sensor
　- Neural network topologies
　- Action Space

###Seneor
レーシングカーに搭載するカメラが選択できます。
コースやレースタイプに応じてカメラのスペックを選択する必要がありそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/10318a14-a9e2-c6fe-0790-97e4b852ca0a.png)

###Neural network topologies
CNNの階層を選択しますが、3層もしくは5層の2つから選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/6d3ab07d-e607-8b10-fc93-069cbf7edbc2.png)

###Action Space
ロボットの動作条件として、最高速度や最大舵角に応じてActionのパターンが変化します。
このAction Spaceと後述の報酬関数のチューニングが大きく性能を左右するような気がしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/d20a9a02-d83a-0303-3f74-c86eeac5a465.png)

##5. Reward function（強化学習の報酬関数を定義）　 
様々なパラメータ（スピード、走行位置、脱輪判定など）を組み合わせて、強化学習の報酬関数を定義します。
デフォルト初期関数でもいい感じに走ってくれますので、最初はそのままでも良いと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/f976c085-eb5a-374b-c550-416b7a20622a.png)

##6. Hyper parameters（学習ハイパーパラメーターを設定）
ハイパーパラメータをいじれますが、特にまだ変更していません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/e4f975d8-5b77-d0ce-efd7-bb27b47cf5ac.png)

##7. Stop conditions（学習時間を設定）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/cf5b2d7a-6140-b7ed-8f25-162b2ef6ff3c.png)

モデル作成の設定は以上になります。後は**Create model**を押してもらえればモデル作成が開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610508/d8ef3b78-1cd0-42f5-d3f7-607815172723.png)

指定の学習時間が経過すればモデルの出来上がりです、それでは次にモデルを評価してみましょう

#モデル評価
後日記載