今回の概要
前回はDeepRacerとはどのような大会か?ということについて紹介しました.
今回はDeepRacerの始め方について説明していきたいと思います.
DeepRacerの開始方法
今回この記事では,AWSのアカウントを持っている前提で話を進めていきたいと思います.
ちなみにアカウントの作成は,ここからアカウント作成画面に移動して,アカウントの情報や連絡先情報,支払い情報等を入力してプランを選択すれば登録ができます.
DeepRacerの開始
ログインしたらまず以下のようにDeepRacer開始前にリージョンを「米国東部(バージニア北部)」に変更します.
「米国東部(バージニア北部)」にリージョンを変更しないとDeepRacerは使うことができません.
次にDeepRacerのトップページに移動します.
AWSのトップページの「サービスを検索する」から「DeepRacer」と入力し,候補として出てくる「AWS DeepRacer」を選択します.
DeepRacerのトップページに移動するので,「Get started」をクリックします.
するとAWS DeepRacerを始めることができます.
DeepRacerの準備
表示されている通りに従ってDeepRacerの準備を行います.
ただし,DeepRacerはプロキシ環境下ではうまく行かないことがあるので注意してください.
Step0: アカウントのリソース作成
DeepRacerに必要なリソースを作成します.
Created resourcesをクリックして作成します.
Step1: 強化学習の基礎の学習
「Start learning RL」をクリックすると,強化学習とDeepRacerの報酬関数の設定方法等について学ぶことができます.
ここのステップは任意なので,学ぶ必要がないと思えば,飛ばしても問題はありません.
Step2: モデルの作成
以上で準備は終了しました.「Create model」をクリックすると,モデルの作成を行うことができます.
モデル作成
モデルの名前の入力
「Model name」モデルの名前を入力します.また,任意でモデルの説明を「Model description」に入力することもできます.
サーキットの選択
強化学習してモデルを作成させる際に,シミュレーター上でレーシングカーを走らせるサーキットを選択します.
2019年9月現在のサーキット一覧は以下のようになっています.
re:Invent 2018は前回も記述したようにSummit Circuit racesで用いられるコースで,それ以外のコースはVirtual Circuit racesで用いられるコースです.
必ずしも出場するレースのコースで学習する必要はないですが,Summit Circuit racesに参加する場合はre:Invent 2018のコースで,Virtual Circuit racesに参加する場合はその月のコースで速いタイムを出す必要があります.
アクションスペースの設定
以下の画面でアクションスペースを設定します.
アクションスペースのパラメータは以下の4つから決めます. * Maximum steering angle:前輪の最大回転角度.最大30°まで指定可能. * Steering angle granualarity:前輪の角度の分割数. 例えばMaximum steering angleが30°の場合,操縦の方向は左30°,右30°の範囲で曲がることができる. そのうえでSteering angle granualarityを5に指定した場合,指定した範囲内で5方向に進むことができる. (0°の方向と左右それぞれ15°,30°の方向,計5方向)
Maximum speed:車の最大スピード
Speed granularity:上記の最大スピードの分割数 (Maximum speedが3m/s,Speed granuarityが3のとき,1m/s,2m/s,3m/sの範囲内で調整する.
するとAction list,すなわち車がどういう動きをするかをSteeringとSpeedとの対応で定義します.
報酬関数の設定
報酬関数を設定します.
報酬関数は前回の記事でも説明した通り,コース上におけるレーシングカーの状態から得られるパラメータをもとにどのようなルールで報酬を与えるかを決めます.
コース上におけるレーシングカーの状態から得られるパラメータについては後述します.
ハイパーパラメータの設定
ハイパーパラメータとは,機械学習における学習のパラメータです.
ここで設定できるハイパーパラメータには以下のようなものがあります.
Gradient descent batch size(勾配降下のバッチサイズ): バッチサイズ.データセットをどれくらいの大きさのサブセットに分けて学習するかを指定.(32,64,128,256,512が指定可能,デフォルトは64)
Number of epochs(エポック数): エポック数とは,学習データを全て学習することを1回とすると,それを何回行うかという回数のこと.多い方が良いが,一方で時間がかかる.バッチサイズが小さい場合は小さくても問題ない.(3~10の整数が指定可能,デフォルトは3)
Learning rate(学習率): 学習の結果がネットワークの重み設定にどれだけ寄与するかを制御するかの割合です.高いレートを使用した方がより速く学習できる一方,大きすぎると収束しない可能性がある.(10^-3~10^-8の実数が指定可能,デフォルトは0.0003)
Entropy(エントロピー): アクションスペースに対するランダム性.これが大きいとより広くアクションスペースを探索する.(0~1の間の実数,デフォルトは0.01)
Discount factor(割引係数): どれくらい将来の値を考慮せずに調整するかを設定するパラメータ.割引係数が大きいほど将来の報酬を現在の学習で考慮して計算する.(0~1の間の実数,デフォルトは0.999)
Loss type(損失タイプ): ネットワークの重みを更新するために用いられる損失関数.速く学習する場合は平均二乗誤差,収束の問題がある場合はHuber損失の方がよい.(Huber損失 or Mean square error(平均二乗誤差),デフォルトはHuber損失)
Number of experience episodes between each policy-updating iteration(各ポリシー更新反復間のエクスペリエンスエピソードの数): 学習データを取得するために必要なエクスペリエンスバッファのサイズ.DeepRacerにおけるエクスペリエンスバッファとは,カメラによってとらえられた画像や車両によって取られたアクションなどの情報のこと.より複雑な報酬関数を作るときにはより大きな値を指定する必要がある. (5~100の間の整数,デフォルトは20)
終了時間の設定
学習する時間を設定します.
強化学習の開始
以上が決定できたら「Start training」をクリックすると学習を開始します.
Virtual Circuit racesへの参戦
強化学習を開始すると,学習が始まります.
この状態になったら設定した学習時間だけ学習が行われ,報酬のグラフとシミュレーションの状況をビデオでストリーミングできます.
画面の見方
学習中,学習後には以下のような画面が表示されます.(以下の画像は学習終了後)
左には報酬関数のグラフ,右には学習中のみ現在のレーシングカーの状態がストリーミングで動画として再生されます.
学習終了後,右上のボタンがクリックできるようになり,クローンや作成モデルのダウンロード,Virtual raceへの参戦ができます.
また,評価を行いたい場合は,この下にあるEvaluationの「Start evaluation」をクリックします.
報酬のグラフ
学習中や学習終了後に報酬の遷移を表すグラフを見ることができます.
青のグラフが報酬(Reward),紫のグラフが完走率(Progress)の値を示しています.
先ほどの画面のグラフから,最終的に報酬を300近くまで上昇させることができた一方,完走率は25%程度と低いことがわかります.
クローン
クローンすると,現在のモデルを複製してそれをベースに再度学習を行うことができます.
ここをクリックすると,再度上述のモデル作成の画面になりますが,アクションスペースの指定はできないため,そこに注意は必要になります.
評価
学習したモデルを評価することができます.
上述のとおりまず,EvaluationにあるStart evaluationをクリックします.
するとコース選択画面になるので,コースを選択.
そしてコースの下に「Choose number of trials to evaluate your model」と書いてあるところ,ここで評価で何回試行するかを選択します.
評価後Virtual Raceに参戦する場合,Virtual Race Submissionのチェックボックスにクリックし,右下のStart evaluationをクリックします.
すると以下のように評価が開始され,右にはレーシングカーのビデオのストリーミング,右には評価結果が出力されます.
得られるパラメータについて
DeepRacerでは,コース上におけるレーシングカーの状態から得られるパラメータを用いて,報酬関数を作成します.
ここでは具体的にどのようなパラメータが得られるかについて説明したいと思います.
トラック全体からみたレーシングカーやトラックのパラメータ
x
,y
:トラック内のレーシングカーの車体中心の座標(x
:x座標,y
:y座標).- 原点はトラック左端
- それぞれ値はFloat型で格納
heading
:トラック全体に対する車体の進行方向- Float型(-180~180)
- 座標系のx軸に対する進行方向の角度
- 0°:車体がトラックに対して右側を向いているとき
- 0°から反時計回りを正,時計回りを負
waypoints
:トラックの全waypointの座標リストを格納したリスト.- waypointとは,トラック内におけるマイルストーン
- 各waypointの座標は[x座標,y座標]のようなリストで表現(x座標,y座標はそれぞれFloat型)
closest_waypoints
:レーシングカーに最も近い2つのwaypointのインデックスを格納したリスト.- ユーグリッド距離によって算出された最も近いものと2番目に近いもののwaypointが格納されているリスト.
- 各waypointにはインデックスが振られている.
- 各インデックスはInt型
- ユーグリッド距離によって算出された最も近いものと2番目に近いもののwaypointが格納されているリスト.
レーシングカーからみたトラックに対するパラメータ
all_wheels_on_track
:レーシングカーの全ての車輪がコース内にあるかを示すフラグ- Boolean型
- 全ての車輪がコース内にあるときのみTrue
- 1つでもコースを外れているときFalse
- Boolean型
track_width
:トラックの横幅- Float型
distance_from_center
:車体の中心線からの距離- Float型(0~
track_width/2
)
- Float型(0~
steering_angle
:車体に対する前輪の曲がり(ステアリング)角度- Float型(-30~30)
- 正:左へのステアリング
- 負:右へのステアリング
- Float型(-30~30)
speed
:車両の速度- Float型(0.0~5.0)
- 単位はm/s
is_left_of_center
:トラックの中心線より左側にあるか?- Boolean型
- 左にある:True
- 右にある:False
- Boolean型
学習自体に関するパラメータ
step
:完了したステップ数- 学習の完了したステップ数
progress
:トラック完走率- Float型(0~100)
まとめ
今回はDeepRacerの始め方についての記事でした.今後は,チームとしての進捗や学んだことなどを書ければと思っています.