はじめに
DeepRacer Preview申請が通ったので試してます。
当初順調だったのですが、不可解な現象に遭遇していてその情報の共有となります。
残念ながら、現時点で原因わかっていないのであくまで現象の共有のみとなります。
ここではDeepRacerの入門的な話はとばしてます。触る分にはそんなに難しくないです。
DeepRacerの説明はAWSの開発者ガイド をみるとよいです。ただ、preview版なので記述が実際に追いついていない部分も多少あります。
書いている人について
- AWSの基本はわかっている
- 機械学習については コーセラでまなんだが実践経験はなし
- Deep learning、reinforcement learning の知識はなし
- pythonは読めるがたいして書けない
経緯について
モデル作成 -> 3時間トレーニング -> うまく走る -> モデルクローン -> 5時間トレーニング -> 反抗期
という流れでした。以下順に説明していきます。
作成モデルについて
アクションと報酬関数を定義すればシミュレーション可能です。
報酬関数
スピードが欲しかったのでコース上存在すれば1でそれにスピードを足した数を報酬としています
def reward_function(params): reward = 1e-3 # likely crashed/ close to off track on_track = params['all_wheels_on_track'] speed = params['speed'] steering_angle = params['steering_angle'] if on_track : reward = 1.0 + speed return float(reward)
アクション
方向は5種類(3,5,7が選択可能)、速度も3種類を選択して15アクションで設定です
その他
Hyper parameterなどは変更していません。
3時間トレーニング
何回かためして経験で2時間以上トレーニングしたほうがいい結果がでる用に見えたので3時間トレーニングしました
グラフがあまり安定していませんが、結果できたモデルは25秒程度のラップで動きました。
ちなみにこんな感じではしってました
https://www.take00.com/dr/low_stering2_training.mp4 (1.8MB)
モデルクローン
できたモデルをクローンすることで、追加のトレーニングができます。その際には報酬関数を変更することもできます(アクションは変更できない)。
5時間トレーニング
長時間トレーニングすれば10秒台も余裕なんじゃないの?とあまく考え5時間トレーニングしました
開始から2時間頃すると評価がほぼ0になっています。
反抗期
開始後すぐに右に曲がりコースアウトをする、を永遠に続けるようになります。こうなるといくらトレーニングしても評価があがらないです。
動画はこちら。 https://www.take00.com/dr/failed.mp4 (576KB)
仮説
- 報酬のグラフが上下しすぎていて学習できない?
- モデルのcloneはしてはいけない?
調べてること
Hyper parameter
変更することによる影響がよくわからないので学習が遅くなる方向で、パラメータを変更してみましたが状況変化はないです
cloduwatchで見える報酬グラフとログのつきあわせ
- これから調査予定だが、きれいに走っているのにcloudwatchの報酬の値が低いという現象が結構な頻度でおきているようにみえる。