エージェントが「行動」を行ったことにより、環境に変化が起こる。 ↓でいう4番目と5番目で、これを評価しポリシーを更新する過程になる
「報酬」はエージェントの「行動」に対する環境からの評価です。強化学習アルゴリズムは、エージェントが時間の経過とともに高い「収益」を獲得するように「行動」を最適化します。
「強化学習サイクル」では、エージェントは「行動」の実行結果に応じて「報酬」を受け取り、その「報酬」に応じて「ポリシー」を更新します。
現在のステップの「即時報酬」を設定するには、AgentクラスのAddReward()とSetReward()を使います。これらを設定しない場合の即時報酬は「0.0」になります。
・void AddReward(float increment):現在のステップの即時報酬に加算
・void SetReward(float reward):現在のステップの即時報酬を設定
現在の「累計報酬」を取得するには、AgentクラスのGetCumulativeReward()を使います。これは、エピソード開始から現在までの累計報酬ですが、現在のステップの即時報酬は含まれていません。
また、現在が何ステップ目であるかを取得するには、AgentクラスのStepCountを使います。
・float GetCumulativeReward():現在の累計報酬の取得
・int StepCount:現在が何ステップ目であるかの取得
「Unity ML-Agents」の「報酬」には、先で説明した環境によって与えられる「環境報酬」の他に、未知の状態に訪れることに対して与えられる「Curiosity報酬」と、人間のデモを模倣することに対して与えられる「GAIL報酬」があります。これら報酬をまとめて「報酬シグナル」と呼びます。
・環境報酬:環境によって与えられる報酬
・Curiosity報酬:未知の状態に訪れることに対して与えられる報酬
・GAIL報酬:人間のデモを模倣することに対して与えられる報酬
「報酬」を設定する際に気をつけるポイントを紹介します。
ゲームの勝敗に対して報酬を与えた方が、良い学習に繋がります。
過度に大きな報酬は、学習効率が悪くなることがあります。
過度に大きなマイナス報酬を与えると、プラス報酬に繋がる行動であっても、選択しなくなる場合があります。
「エピソード完了」の設定方法には次の2種類の方法があります。
・ EndEpisode():エピソード完了
・ MaxStep:エピソードの最大ステップ数
任意のタイミングで「エピソード完了」を行うには、AgentクラスのEndEpisode()を使います。
「Max Step」はエピソードの最大ステップ数です。
エピソードのステップ数がこれを超えると、「エピソード完了」となります。 「0」を指定すると、無制限になります。
「Max Step」はAgentクラスを継承したスクリプトの「Max Step」で設定します。
「エピソード」を設定する際に気を付けるポイントを紹介
1エピソード完了までに時間がかかる学習環境は、学習効率が悪くなります。
エピソード完了ができず、学習が進まなくなることを防ぎます。