論文:Beating the World’s Best at Super Smash Bros. Melee with Deep Reinforcement Learning

モデルフリー系の深層強化学習の手法を用いてスマブラDXのゲームAIを作ったという論文が出ていたので読んだ。以下はそのメモ。

概要

論文URL : https://arxiv.org/abs/1702.06230
著者のグループは github でコードを公開しており、そのデモ動画が twitch や youtube に上がっている。
www.youtube.com
上の動画はその一例。明記されていないが、動きからして 2P のキャプテン・ファルコンが強化学習 AI で、1P が人間だと思われる。スマブラの素人が見てもあまりピンと来ないのだが、人間側は世界ランキングでトップ50相当のプレイヤー(二人いて、途中で交代している)らしい。

reddithacker news でも活発に議論されている模様。

内容

環境の定義について

  • Atari のゲーム環境などとは異なり、画像ではなくエミュレーターのメモリから必要な情報を取り出してそれを観測情報としている。具体的にはプレイヤーの位置、速度、行動状態などがあると記されている。観測の次元がどれくらいなのかは自分が見た限りでは明記されていないように見えるが、多くとも数十次元程度といったところだろうか。
  • ゲーム自体は60フレームで動いているが、行動は2フレームおきに行うようにしている。スキップしたフレームでは何も行わないと記されている(が、これだと左右移動とかが不自然になるので正確には直前の行動を繰り返しているのでは?)
  • ゲームキューブのコントローラーには2つのアナログスティックと幾つかのボタンが有り、複雑な入力を入れることが可能である。が、簡略化のために、アナログスティックの操作は9個に限定し、ボタンは5つのうち高々1つしか選べないようにしている。これにより、9*(5+1)=54個の離散の行動値から1つを選ぶように設定している。
  • 報酬関数の設計は、相手を倒す/相手に倒されるでそれぞれ+1/-1が得られる設定にしている。が、これだけだと報酬を得るまでが遠すぎるので、相手に与えた/相手から与えられたダメージも報酬に加えている。

手法

  • ニューラルネットを用いたQ学習(DQN)と方策勾配法(Advantage Actor-Critic)を試した。
  • Atari ではゲーム環境を実時間の数百倍でエミュレートできるが、スマブラDXではせいぜい1~2倍の速度でしかエミュレートできず、そこがボトルネックになってしまう。これを解決するために、複数個(50個とかのオーダー)のエミュレーターを並列で走らせた。計算資源はどこかから調達した。
  • ハイパーパラメータは色々チューニングした。ε(行動をランダムに選ぶ確率?)は0.02、割引率は0.99くらい、割引報酬の和は10ステップまで取る。
  • Q関数やactor,criticのニューラルネットアーキテクチャには隠れ層2、チャンネル数128の全結合のものを用いた。詳しく調べていないが、層を増やしたりしても結果は良くはならなかったと記されている。
  • 活性化関数として、leaky relu のソフト版のようなものを使ったと記されている : $f(x) = \log(\exp(0.01x) + \exp(x))$ …が、一体なぜ?
  • 学習率は手で調整して 1e-4 にした。
    • この後で、TRPO でステップ幅を決める手法も紹介されているが、実験どの部分で使ったのかよく分からない。

実験1 : 普通に対戦

  • エージェントをそれぞれスマブラDXに標準搭載されているAIと対戦させた。
  • ステージは「戦場」、プレイキャラは両方ともキャプテン・ファルコン (↑の動画の通り)
  • DQN も Actor-Critic も20時間くらい経てば相手を上回る性能になった。DQNの方が収束が速い。
  • 報酬関数の値を見ると DQN と Actor-Critic で大差はなかったが、学習した方策に大きな違いが見られた。DQN は相手(標準AI)に対してハメ技のような手を探して相手を自滅に追い込むのに対し、Actor-Critic では人間と似た戦略に落ち着いた。
  • 学習アルゴリズムのベースラインとして、OpenAI が提供している A3C のアルゴリズムを試してみたが、うまくいかなかったと記されている。

実験2 : 自己対戦

  • それなりに強いエージェントが出来たことなので、AlphaGo のときと同じ要領で自己対戦のアプローチを試した。
  • 最初は弱い人間プレイヤーにも負けるエージェントだったが、1週間自己対戦を行うと中級プレイヤー(著者)も勝てないほどになった。
  • その後さらに1週間自己対戦を行った後、スマブラDXのトッププレイヤー達と対戦を行わせたところ、エージェントの方が倒した回数を上回る結果となった。(詳細は論文のテーブル1)
  • しかし、エージェントは謎のハメ技を使うと倒せてしまうことも判明した。具体的には、ステージの端で座ったままで居るとエージェントは変な挙動をして、自滅してしまうこともあるらしい。学習中にハメ技を仕掛けてくるような対戦相手が居ないことが原因だろうとしている。

実験3 : 複数キャラ

  • キャプテン・ファルコンしか使えないのは不満なので、他のキャラクターでも学習を試みた。具体的には Sheik, Marth, Fox, Falco, Peach, Falcon が挙がっている。
    • 投擲技を行うキャラ(フォックスとか)が居る気がするのだがいいのだろうか…
  • …学習した結果、どれくらい強くなかったのか書かれていない。
  • 環境が多様になったおかげか、奇妙な挙動をしたりハメ技で死んだりすることは無くなったと書かれている。
  • あるキャラクターのエージェントを学習する時に、初期値として他のキャラクターで学習したパラメータを持ってきて学習すると、学習時間が短くて済んだと記されている。

議論

  • Q学習は固定された環境ではうまくいったものの、自己対戦のような環境が変遷していく場合にはうまくいかなかった。policy iteration に加えて環境の変化に追随するのが難しいのではないかと筆者らは予想している。
  • 探索と活用について:Actor-Critic ではエントロピー項の係数で探索量を調整しているが、スマブラDXでは多くのフレームではどう動こうが重要ではない場面が多く、そういったときにエントロピーが高くなり、行動が不安定になりがちになるのでなんとかする方法が欲しい。
    • どうでもいい場面ならどう動こうが別に良いのでは? と思ったのだけど違うのだろうか
  • 人間には反射速度に200ms程度の限界があるのに、このエージェントは2フレーム(33ms)で反射していて、人間との対戦ではフェアではないのではないか、という批判がある。これに対して、行動を即時に行うのではなく、一定フレームだけ遅れて行うようにして学習させたところ、6フレーム遅延させたあたりから一気に性能が悪化していったと記されている。遅延そのものだけでなく、報酬の遅れなどが原因なのかもしれないが、定かではない。

感想

  • 手法面での真新しさは特に無いものの、モデルフリー系の強化学習手法を実際の難しいタスクに適応しようとしたケーススタディとして面白い。細かいチューニングとかの話も結構参考になる(かも)。
  • Q学習系と方策勾配系の手法で振る舞い方に差が出るという話は聞いたことがなかったので面白いと思った。普通の論文では報酬の合計値でしか性能を見ないので、こういった違いにはなかなか気付けない気がする。ただ、この話がどこまで一般的なものなのかはよく分からない。
  • 良い強化学習エージェントを作り上げるには、試行錯誤も学習も含めやはり相当な計算資源と時間が必要なのだと感じた。
  • そもそも海外で未だにスマブラDXが人気ということを知らなかった。
  • 論文のタイトルはやや誇張気味で、まだやることは色々残っている。