Beating the World’s Best at Super Smash Bros. Melee with Deep Reinforcement Learning (2017) スマブラへRL
スマブラDXで人間のエキスパートを超えたエージェントを学習させた研究。
スマブラDX(以下SSBM)は
- 大規模で部分的にしか観測できない状態
- 人間の反応速度の限界と、数フレームの入力遅延からpartial observabilityだと言っている
- 遅延報酬
- 複雑なダイナミクス
- 26人のキャラクター
- 様々なステージ
など環境に多様性がある。
これまでのビデオゲームRLは生のピクセルを使用していた。
しかし、今回は
各プレイヤーの位置、速度、行動状態、他のいくつかの値で構成される各フレームのゲームのメモリから読み取られた特徴を使用
これにより、SSBMをプレイするという純粋なRLの課題のフォーカスする。
その他環境調整
- 60FPS→30FPSへ 1frame skip(もっと下げれば人間と同じ反応速度になるが、小ジャンプなどのアクションに支障がでる)
- GCコンの入力は複雑だから、メインアナログスティックを9次元に離散化、ボタンは5つだけ(最大1個しか押せない)で合計54次元の入力にした。(9x6(空入力)でone-hot)
- 報酬は領域の外に相手を飛ばして+1、ダメージの大きさに小さな係数かけたもの(これは毎ステップ?)
Q学習と方策勾配を使った。
Q
- n-step SARSA
- ボルツマン選択
- 出力はすべてのアクションのQ値のベクトル
PG
- ほぼA2C
シミュレータを並列で動かし学習。
非同期でサンプルを集めるため、最新の方策以外のサンプルも使ってしまうが問題になってないみたい。
すべてのポリシーはε=0.02
割引率は2秒後に半分になるように設定
2層の隠れ層を持つMLPでlayer sizeは128
重みはNrom 1のランダムで、バイアスが標準偏差0.1の zero-mean normals
活性化関数はleaky softplus alpha=0.01
勾配降下法の学習率は重要だが学習率1e-4で妥当な結果が得られた。
エージェントはキャプテン・ファルコン、ステージは戦場固定(人気で飛び道具無いから)
ゲームのCPUと対戦
QはCPUを騙して自滅させる戦略を学習した
ステージの端に移動して、一度攻撃をもらい(小さい負の報酬)、二回目はかわして敵は自滅(大きなプラス報酬)
PGは攻撃と反撃という人間らしい戦略を学習した
OpenAI Gymの環境と比較して、ピクセル値を使ってないにも関わらず、16コアマシンで数日間学習が必要だったため、Atariより難しいタスクみたい。
Self-play
CPUに勝てても人間のエキスパートには勝てない。
AlphaGOと同様の方法を使って、古いバージョンの自分と対戦させる。
AplhaGoは500iterationごとに対戦相手プールに方策パラメータを追加し、そこからランダムで相手を選ぶ
1週間PGを訓練させたら強くなった。
しかし、弱点があり、ステージ端でしゃがむと攻撃してこないで、ステージの反対側へ自滅する挙動を示した。恐らくエピソードに多様性がなく外挿が原因。
また、ステージ変えたりキャラ変えるとパフォーマンスが大幅低下。
複数のキャラから生成されたエピソードで学習を行ったがあまり上手くいかなかった。
シンプルなアプローチとして、キャラごとにネットワークを用意し、それぞれ自己対戦させた。Fox、Falco、Sheik、Marth、Peach、Captain Falcon)
するとちゃんと学習でき、以前の変な挙動も示さなくなった。
新しいキャラを学習させるときは、スクラッチより転移学習の方が効率的であることがわかった。
また、Peach, Fox, FalcoよりC Falconは学習が遅い。これはSSBMコミュニティの意見と一致している。
コミュニティとの主な違いは、コミュニティのランキングと違い、ピーチが思ったより良いパフォーマンスであること。
これは、RLが反応速度が早く、ピーチのスピードに付いていけてるからではないか?
Discussion
Qがself playでは良い結果を示さないことを発見した。
これはQ関数の学習は方策πの学習より難しいからではないか?(Qπからπを学習することより、πからQπを学習するほうが難しい)
対CPUなどの固定された相手に対しては、それなりの性能を発揮した。
つまり、訓練中の相手の非定常性にあると考えられる。
このRLエージェントへの批判は、人間が200ms程度の反応速度なのに対して、2フレーム(33ms) であること。
そのため公平にするために、反応速度の速さを利用することができないC Falconを選んだ。(C Falconは攻撃入力してから、攻撃されるまで、他のキャラの2倍かかる)