見出し画像

Unity ML-Agents 0.14.0 の学習状況の監視

1. TensorBoardの起動

「Unity ML-Agents」では、訓練中または訓練後に「TensorBoard」を使って学習を観察することができます。

「TensorBoard」の起動方法は、次のとおりです。

(1)「Unity ML-Agents」のルートフォルダで、以下のコマンドを実行します。

$ tensorboard --logdir=summaries --port=6006

(2)ブラウザで「localhost:6006」を開く。

「mlagents-learn」の統計情報の出力先は「summaries/<run-id>」です。「--save-freq=<n>」によって、統計を保存する頻度を指定できます。

「mlagents-learn」は「run-id」を指定しない場合、デフォルトで「ppo」を使用します。統計は全て同じフォルダに保存され、TensorBoardで1つのセッションとして表示されます。数回実行すると、複数のグラフが混ざり解釈が困難になります。その場合は、summariesフォルダ下のフォルダを削除してください。

【ノート】TensorBoardが使用するデフォルトのポートは6006です。既に6006のセッションが実行されてる場合、「--port」で別ポートを指定することで、新しいセッションを起動できます。

2. TensorBoardの操作

「TensorBoard」の左側で、表示する訓練を選択できます。複数の「run-id」を選択して、統計を比較することもできます。TensorBoardウィンドウには、グラフ表示および平滑化するためのオプションもあります。
統計情報は「Environment」「Losses」「Policy」でまとめられています。

3. 統計情報 - Environment

◎ Lesson(カリキュラム学習)
レッスンからレッスンへの進捗状況を表示します。

◎ Cumulative Reward
全エージェントの平均累積報酬を表示します。
継続して増加し、振れ幅も小さいことが期待されます。

◎ Episode Length
全エージェントの平均エピソード長を表示します。

4. 統計情報 - Losses

Curiosity Forward Loss(Curiosity)
モデル損失の逆関数の平均の大きさを表示します。
モデルが新しい観察エンコードをどれだけうまく予測できるかを示します。

Curiosity Inverse Loss(Curiosity)
フォワードモデル損失関数の平均の大きさを表示します。
モデルが2つの観察間で実行される行動をどれだけうまく予測できるかを示します。

◎ Policy Loss
ポリシーの損失を表示します。
訓練が成功すると減少します。

◎ Value Loss
価値の損失を表示します。
報酬が増加するにつれて増加し、報酬が安定すると減少します。

5. 統計情報 - Policy

◎ Curiosity Reward(Curiosity)
「Curiosity」の平均累積報酬を表示します。

◎ Curiosity Value Estimate(Curiosity)
エージェントが受け取る将来の「Curiosity」の平均累積報酬を表示します。
平均累積報酬が増加するにつれて増加します。

◎ Extrinsic Reward(Curiosity)
「Extrinsic」の平均累積報酬を表示します。

Extrinsic Value Estimate(Curiosity)
エージェントが受け取る将来の「Extrinsic」の平均累積報酬を表示します。
平均累積報酬が増加するにつれて増加します。

◎ Entropy(PPO)
行動がどれだけランダムであるかを表示します。
Discreteの場合、減少が早すぎる、まったく減少しない場合は、「beta」を調整する必要があります。

◎ Entropy(SAC)
行動がどれだけランダムであるかを表示します。
減少が早すぎるか、なかなか減少しない場合は、「init_entcoef」を調整する必要があります。

◎ Entropy Coefficient(SAC)
SACは「最大エントロピー」強化学習アルゴリズムであり、SACを使用して訓練されたエージェントは、問題を解決しながらランダムに動作するように奨励されます。エントロピー係数は、ランダムに行動するインセンティブと報酬を最大化するインセンティブのバランスをとります。この値は、訓練中にエージェントがある程度のランダム性を保持するように自動的に調整されます。訓練の開始時に着実に減少し、一定の小さな値に達すると安定します。
減少が早すぎるか、なかなか減少しない場合は、「init_entcoef」を調整する必要があります。

◎ Learning Rate
学習率を表示します。
「learning_rate_schedule」が「linear」でない限り、時間と共に減少します。


この記事が気に入ったらサポートをしてみませんか?