最初のAWS DeepRacerモデルの作り方 ..というPDFを翻訳してみた

[AWS Deep Racer](https://aws.amazon.com/jp/deepracer/) がAWS re:Invent で発表されました。

ただまだ今の所、実車は日本で購入できないそうですが、ドキュメントはいくつか公開されているのでちくちく読んでいこうと思っています。

今回は以下のPDFを勝手に訳してみました。

- [最初のAWS DeepRacerモデルの作り方(How to create your first AWS DeepRacer model](https://d1.awsstatic.com/deepracer/How-to-create-your-first-AWS-DeepRacer-model.pdf)

あくまで勝手に翻訳してしまったので、翻訳に誤りがあっても許してください..

--------------------------------------------
# はじめてのAWS DeepRacerモデルの作り方

強化学習（RL）を始めるためのエキサイティングで楽しい方法を提供する 1/18 スケールのレースカーAWS DeepRacer へようこそ。 AWS DeepRacer は、AWS コンソールにオンラインバーチャルシミュレータを提供し、自律型自動車レースに必要なRLモデルを作成、調整、調整することができます。 また、シミュレータでモデルのパフォーマンスを評価し、実世界の自律的な体験のためにAWS DeepRacerにそれらを導入することもできます。 このガイドでは、シミュレータを紹介し、最初の強化学習モデルの作成を開始します。

このガイドを実行するには、AWSアカウントとIAMユーザのみが必要です。AWS DeepRacerカーを所有する必要はありません。 AWSアカウントとIAMユーザが設定されている場合は、次のセクションにスキップしてください。それ以外の場合は、引き続きお読みください。

## AWSアカウントとIAMユーザの作成


AWS DeepRacerを使用するには、AWSアカウントが必要です。 AWSアカウントは無料です。 あなたはあなたが使用するAWSサービスに対してのみ支払いを行います。

AWSアカウントにサインアップするには、次の手順に従ってください。

1. https://portal.aws.amazon.com にアクセスします。
2. 無料アカウントを作成を選択します。
3. ページの指示に従います。
    登録手続きの一部には、電話連絡を受け、電話のキーパッドを使用してPINを入力する手順が含まれています。

成功すると、上記のサインアップ手順にて、提供された電子メールアドレスで識別される root アカウントが作成されます。 この root アカウントを使用してAWSにサインインすることはできますが、アカウントを管理するためにAWSにサインインするための管理者権限を持つIAMユーザを作成することをお勧めします。 チームメンバがアカウントで指定されたAWSサービスを呼び出すために、より制限の厳しい権限を持つIAMユーザーを作成することもできます。

IAMユーザを作成するには、次の手順に従ってください。

1.  AWS Management Console にサインインし、https://console.aws.amazon.com/iam/ でIAMコンソールを開きます。
2. ナビゲーションペインで[ユーザ]を選択し、[ユーザの追加]を選択します。
3. アクセスタイプで、許可されたAWSサービスのAPIを呼び出すProgrammatic Accessと、許可されたサービスに対してAWS Management Consoleを起動するAWS Management Console Accessの両方を選択します。
4. コンソールパスワードで、自動生成パスワードまたはカスタムパスワードを選択します。 [カスタムパスワード]を選択した場合は、パスワードを入力します。
5. 次回のログイン時にユーザにパスワードの再設定を要求するかどうかを選択し、「次へ：アクセス権」を選択します。
6.  <ユーザ名>の権限を設定するには、既存のポリシを直接添付、AdministrativeAccess、および次へ：確認を選択します。
7. 設定を確認します。 変更を加える前のページに戻るには、前を選択します。 ユーザを作成するには、ユーザ登録を選択します。

おめでとうございます、AWSアカウントとIAMユーザを作成したので、AWS DeepRacerそしてその他すべてのAWSサービスをためす準備ができました！



## 強化学習とは何ですか？

強化学習（RL）は、エージェントが特定の目標を達成するために環境内でどの行動を取るかを選択するモデルの作成に関連の強い機械学習の要素のひとつです。 AWS DeepRacerシミュレータでは、** エージェント** は仮想自動車、 **環境** は仮想レーストラック、 **アクション(行動)** はスロットルと車両へのステアリング入力で、 **目標(ゴール)** はトラックから逸脱することなくできるだけ早くレーストラックを完了させることです。 DeepRacer はシミュレートされたレーストラックの周りをドライブするので、状態と呼ばれる環境の画像をRLモデルに送り、現在の状態から取る最良のアクションを受け取ります。 訓練を受けていないRLモデルは、最初のころは環境を探索できるようにランダムにアクションを選択しますが、時間の経過とともに、より良い行動が繰り返し観察され、より良い結果をもたらすアクションを学び始めます。 その後、この知識を利用して各状態で繰り返し最高のアクションをとるるようになります。

どのようなアクション（行動）がより良いかどのようにして知るのでしょうか？最終目標がなにかどのようにして分かるのですか？ 報酬関数はその両方の質問に答えます。 車が取る各アクションに対して、アクションの結果に基づいて報酬を受け取るとします。 このような場合、好ましい結果につながるアクションに対して車に報酬を与える報酬機能を指定しなければなりません。そして、車が繰り返し優先的な結果に到着すると、あなたの目標(ゴール)にも到達するはずです。 報酬機能には、アクションが良いか悪いかを判断し、それを定量化するための「ロジック(論理)」が含まれています。 したがって、良い報酬機能を生み出すことは、モデルが適切な行動を学習し、最終的に目標に到達することを保証する上で不可欠です。 例えば、あなたの目標がレーストラック周りのラップを終えることであるならば、トラックからはずれる場合とは対照的に、トラック上にいることに対して報酬を与える方法は良い出発点です。


RL最適化アルゴリズムは、エージェントが任意の状態から達成することができる累積報酬を最大にするように選択すべきアクションモデルをトレーニングします。状態における累積報酬は、終了状態（トラックの終了またはトラックからの離脱など）に達するまで、即時アクションおよびその後の各アクションから受け取ったすべての報酬の合計です。各状態における最良のアクションは、エージェントが各後続状態で最良のアクションを選択し続けると仮定して、最大累積報酬を可能にします。

トレーニングは、最新のモデルをつかって経験を得ることと、最新の経験を使用してモデルを更新することとを繰り返す反復プロセスです。経験収集フェーズ中に、各ステップの結果は、（状態、アクション、次の状態、報酬）タプルの形で格納されます。エピソードとは、自動車の始動状態から次の終了状態までのすべてのステップを指します。ユーザ指定のエピソード数が実行された後、最新の経験からいくつかのサンプル（バッチサイズと呼ばれる）が取り出され、モデルの更新に使用されます。モデルが更新されると、最新バージョンのモデルを使用して車の再探索が開始されます。

ギアを切り替えて、最初のAWS DeepRacer RLモデルを作成しましょう。

## 最初のAWS DeepRacer RL モデルの作成

AWS DeepRacerへのホワイトリストへのアクセスは https://aws.amazon.com/deepracer で申請することができます。 ホワイトリストに登録されている場合は、AWS Console にログインし、地域として米国東部（N Virginia）を選択し、DeepRacerを検索するか、https://aws.amazon.com/deepracer にアクセスしてモデルを作成(Create Model)を選択してください。

コンソールで使用されている用語集を読む場合は、[情報(Info)]ボタンを使用してください。 情報(Info)ボタンは情報セクションをページの右側にスライドさせ、現在のフローを中断しません。 また、AWS DeepRacerデベロッパードキュメント（https://docs.aws.amazon.com/deepracer/latest/developer/）にもお気軽に問い合わせてください。

## モデルの詳細

1.モデル名を入力します。
2.モデルの説明を提供します。
3.リソースの登録を選択します。

これにより、IAMの役割が設定され、AWS DeepRacerに、他のAWSサービスを呼び出す権限が与えられます。 AWS Amazon SageMakerによる強化学習モデルトレーニング、AWS RoboMakerによるレーシングシミュレータ、仮想シミュレーション映像のビデオストリーミング用Amazon Kinesisビデオストリーム、モデルストレージ用Amazon S3、ログキャプチャ用Amazon CloudWatchが含まれます。 正常に終了した場合は、次のモデル詳細画像の下部に表示されているようなメッセージが表示されます。

<img width="195" alt="model_details.png" src="https://qiita-image-store.s3.amazonaws.com/0/213774/1f58a4ad-3401-84ea-2d2e-ce44bdadf44d.png">


## 環境シミュレータ

このセクションでは、モデルをトレーニングするトラックを選択できます。
1. re:Invent 2018 を選択します。




## 報酬関数

報酬関数セクションでは、Python構文とシミュレータから公開される変数を使用して、独自の報酬関数をプログラムすることができます。 変数は、シミュレーション環境内でのエージェントの位置や向きなどのエージェントに関する情報を提供します。 これらの変数を使用して、独自のロジックを作成して、成果が良いか悪いか、そしてどれだけの成果を報酬するかを判断できます。 今のところ、basic reward functionを使用します。 basic reward functionは、トラックにとどまっている車に報酬を与え、車がトラックの真ん中に近い場合はより高い報酬となるような関数を提供します。
1. basic reward functionを拡張します
2. コードの挿入を選択して、サンプルの基本コードを挿入します
3. Validateを選択して、コードにエラーがないことを確認します

<img width="199" alt="reward_function_configuration.png" src="https://qiita-image-store.s3.amazonaws.com/0/213774/ffeea536-0572-f157-21db-1c0f5e56f4c6.png">



## アルゴリズムの設定

アルゴリズムの設定は、RL最適化アルゴリズムによって使用されるハイパーパラメータでコントロールします。デフォルト値は各パラメータの良い出発点です。今は変更しません。 次の表は、各パラメータがモデルのトレーニング方法にどのように影響するかを示しています。 我々の場合、モデルはニューラルネットワークです。

|ハイパーパラメータ|トレーニング上でのインパクト|
|:-----------------|:---------------------------|
| バッチサイズ| バッチサイズは、最新の経験から無作為に抽出されたステップ数を決定し、ネットワークのトレーニングに使用します。 したがって、ネットワークを更新するために使用するのは経験の量です。|
| エポック数 | トレーニングが実行されるたびに、最適化アルゴリズムがバッチを通じて実行されます。ネットワークのウェイトを更新するバッチの実行回数です。|
| 学習律    | 学習率は、ネットワークウェイトに対する更新のサイズを決定します。|
| 探索      | これは、探索/利用のトレードオフを提供するために使用される方法です。 したがって、あなたのモデルは、どの程度まで explore(探索) vs exploit(利用) するかを探っていくことになります。|
| エントロピー | エントロピーは、アクションの確率分布にノイズを追加することによって、探査の量を制御します。 エントロピーが小さいほど探査が少なくなります。 |
| 割引要因  | これは、モデルがその行動を評価するために時間的にどのくらい先をよむべきかを決定します。 私たちの基本的な環境では、0.9は約20〜30歩先くらいで、回頭するには100秒のステップが必要です。|
| 損失タイプ        | ウェイト更新プロセス中に使用される損失関数。 |
| トレーニング間のエピソード数| トレーニングを実行する前に、どのエピソードの形で取得したいのかを決定します。 各トレーニングステップの後、新たにトレーニングされたモデルを使用してより多くのエピソードを取得し、プロセスを繰り返し続けます。 |


## 停止条件

1.最大値を指定します。 時間は150分です。 150分が経過する前にいつでも止めることができるので心配しないでください。 モデルに満足していない場合は、強化学習メニューからクローンを作成し、新しいパラメータでトレーニングを再開することができます。

モデルのトレーニングを開始する準備が整ったので、Start training を選択してください。 次の6分間で、AWS DeepRacerサービスは、さまざまなAWSサービスを調整して、RLモデルが訓練される仮想シミュレータを作成します。 画面の上部にある青色のバーは、インスタンスがまだプロビジョニングされているかどうか、またはトレーニングが開始されているかどうかを示します。 トレーニングが開始されたら、補強学習のリストからモデルを選択します。 モデルの詳細ページが開きます。

<img width="212" alt="Model_training_initialization.png" src="https://qiita-image-store.s3.amazonaws.com/0/213774/14dfa6e4-f19f-3a36-917e-3ba9d6345dc1.png">

<img width="261" alt="Model_training_in_progress.png" src="https://qiita-image-store.s3.amazonaws.com/0/213774/52de8c21-1a97-46af-78bc-dcd360fc2354.png">




## モデルのトレーニング

モデルのトレーニングが開始されると、各エピソードについてエージェントが受け取る累積報酬を示す TrainingRewardScore グラフが表示されます。エピソードは、車の出発点から次の終了状態までのステップ数です。停止状態はトラックをはずれる(オフトラック)か、トラック上で走行し続けて 1,000ステップに達したときに指定されます。あなたのモデルがトレーニング中のときには、報酬のラインが増えるはずですが、最初は変動すると考えてください。あなたのモデルが収束した時期を決定することは、アート（奇跡？）です。シミュレータの車が2周を終えたらすぐに、トレーニングをモニタして停止することをお勧めします。ここでのリスクは、モデルを過度に訓練することです。シミュレータで良好な結果が得られますが、現実世界のレースのためにAWS DeepRacer実車へダウンロードすると、モデルがうまく機能しない可能性があります。あなたの車がバーチャルトラックを完成させておらず、報酬グラフやビデオによって判断されるようにモデルが改善しなくなった場合は、トレーニングを中止してモデルを調整してください。

おめでとうございます。あなたは最初のAWS DeepRacerモデルを作成し、それを評価したり、AWS DeepRacerに展開したりすることができます。

(本文おわり)
--------------------------------------------



実はここ3ヶ月ほどDonkey Carというものをやっておりまして..

こんなのも公開していたりします..

- [写真で見るDonkey Carの作り方](https://www.slideshare.net/HoriTasuku/donkey-car)

Donkey CarにもDonkey SimulatorというOSSがありまして、この上で強化学習モデルをトレーニングさせることもできます。

つまり、この記事に書かれているレベルは、OSSなのでベソス神へお布施をはらわずとも実現可能です。

以下の記事も書いております（Qiita以外ですが）ので、詳細を知りたいという方はご笑覧ください。

- [Windows10上でdonkey_gymの強化学習デモをうごかす](https://fight-tsk.blogspot.com/2018/10/windows10donkeygym.html)

AWS DeepRacer が1/18を採用しているのは、サーボコントローラでフックできるホビー用RCカーの海外の標準です。

タミヤや京商は1/10なのでもっとおおきめでホイールベースが長くなるため、搭載バッテリ容量は大きくなる半面回頭性能は劣ることになります。

ただ.. AWS DeepRacer より貧弱なRaspberry Piベースなので
MobidiusなどをつかわないとAWS Racerにはかてなさそうだなあ..