Unity ML-Agents 0.14.0 のセルフプレイ
1. セルフプレイ
「セルフプレイ」は、「対戦型競技」でエージェント同士を競い合わせることにより上達させる学習方法です。「対戦型競技」とは、2人のプレイヤーまたは2つのチームが対戦して勝敗を決める競技で、一方の利益が一方の損失になるゲームです。「セルフプレイ」は、エージェントの対戦相手として、現在または過去の「自分」を使用します。
これは、「OpenAI Five」や「AlphaStar」などでも使われている学習方法で、完全に訓練されたエージェントは、人間のトッププレーヤーをも上回ります。
「Unity ML-Agents」で「セルフプレイ」を行うには、
(1) 対戦型競技の環境の準備。
(2) エージェントのチームIDの設定。
(3) 最終的な報酬を「+1」「0」「-1」に設定。
(4) セルフプレイの訓練設定パラメータの設定。
が必要になります。
2. エージェントのチームIDの設定
「セルフプレイ」を行うには、2人または2チームのエージェントをチームIDで区別します。「Behavior Parameters」の「Team ID」にチームIDを設定してください。サンプル学習環境「Tennis」では、片方を「0」、片方を「1」に設定しています。
3. 最終的な報酬を「+1」「0」「-1」に設定
「セルフプレイ」では、最終的な報酬を次のように設定します。
・勝ち : +1
・負け : -1
・引き分け : 0
後ほど紹介するセルフプレイの訓練指標である「ELO」の計算は、最終的な報酬が「+1」「0」「-1」のいずれかであることに依存しています。
4. セルフプレイの訓練設定パラメータの設定
「セルフプレイ」を行うには、「訓練設定ファイル」に「self_play」を追加します。
Tennis:
normalize: true
max_steps: 5.0e7
learning_rate_schedule: constant
batch_size: 1024
buffer_size: 10240
hidden_units: 256
time_horizon: 1000
self_play:
window: 10
play_against_current_self_ratio: 0.5
save_steps: 50000
swap_steps: 50000
◎ window
エージェントの対戦相手として保持するポリシー数を指定します。この値が大きいと、対戦相手が多様であることを意味します。
・典型的な範囲:5-30
◎ play_against_current_self_ratio
エージェントが現在の自分と対戦する確率を指定します。現在の自分はポリシーを更新しているため、反復ごとに異なる対戦相手と戦うことになります。学習が不安定になる可能性がありますが、より良い結果に繋がる可能性もあります。
・典型的な範囲 : 0.0〜1.0
◎ save_steps
ポリシーを何ステップ毎に保存するかを指定します。
・典型的な範囲:10000〜100000
◎ swap_steps
敵のポリシーを何ステップ毎に交換するかを指定します。
・典型的な範囲:10000〜100000
4. ELO
「セルフプレイ」では、累積報酬は学習の進捗を示す正しい指標にはなりません。自分が強くなることで、対戦相手(現在または過去の自分)も強くなるからです。
そこで、「Unity ML-Agents」では「ELO」と呼ばれる指標を提供します。「ELO」は、対戦型競技において、相対評価で実力を表すために使われる指標の一つです。適切な訓練を行うことで、「ELO」は着実に増加します。また、「ELO」で重要なのは「変化量」です。「絶対値」ではありません。「ELO」は「TensorBoard」を使って、監視することができます。
この記事が気に入ったらサポートをしてみませんか?