niconicoのゲーム投稿サービス RPGアツマール に投稿されたゲームのプレイ方法を学習するシステム「マールタス」を紹介します。 下のデモはマールタスがゲーム「きまぐれバウンドボール」を学習させた際の推移を再生できるようにしたものです。 グラフの横軸は学習のステップ数、縦軸は報酬の平均を示しています。グラフをクリックするとその場所に最も近い段階のプレイ動画を再生します。 学習開始直後はほとんどボールを打ち返せていませんが、学習が進むにつれて段々とボールを落とさず打ち返せるようになっていきます。
ビデオゲームAIは人工知能研究の一分野としてCOMプレイヤーの振る舞いのデザインやゲーム開発におけるデバックの自動化など、多様な研究が行われてきました。 最近では後述する強化学習への注目から、ATARI [1]のような古いアーケードゲームに留まらず Start Craft II のような複雑なゲームも扱われるようになりました。 人間プレイヤーとの対決も行われており、トップレベルプレイヤーに匹敵しあるいは打ち負かす例も報告されています [2]。
マールタスはビデオゲームAIの1つとして位置付けられます。 niconicoのサービスの1つであるRPGアツマールに投稿されたゲームを強化学習と呼ばれる方法を使って学習します。 学習を始めてすぐは操作方法を何も知らないのですぐにゲームオーバーになりますが、経験を積む内に段々と上達し高いスコアを出せるようになっていきます。 私たちはこのマールタスを使ってRPGアツマールのゲームをより楽しむ体験を提供したいと考えています。 たとえば投稿されたゲームの自動プレイ動画を作ることでゲームの面白さを紹介することができるかもしれません。 また自動プレイの結果を解析することで製作者様へのフィードバックを行う、なども考えられます。
2019年8月28日(水)に第1回マールタスの学習実験の生放送が行われます。 この放送ではマールタスが実際に学習をして上達する様子を24時間生放送でお届けします。
一口に「人工知能」と言ってもアプローチは様々です。 伝統的なゲームAIでは条件分岐にまつわるルールを記述したいわゆるルールベースな方法が多く使われてきました。 ビデオゲームは人が作ったものです。そのためどのような操作を行えば何が起きるのかはルールとして内部で記述されています。 ゲームを司るロジックを把握しているのであれば「良い」ゲーム操作をするルールが記述できそうです。 しかし実際にはゲームロジックが複雑であったりランダム性を含む場合にはルールの記述が困難になります。 そこでルールを人間の設計者が記述するのではなく、実際にゲーム操作を行なって得られる経験データを利用してルールをシステムに自動で獲得させる機械学習のアプローチが考えられます。
ビデオゲームは現実世界の問題と異なり、同じ条件で繰り返し試行ができます。 そのためビデオゲームを対象とした場合、機械学習の中でもオンライン学習と呼ばれる手法がしばしば用いられます。 オンライン学習とは解きたい対象を使って評価を行いながら継続的にシステムの性能を向上させていく手法です。 つまりゲームを何度も繰り返しプレイして得られた経験を使ってシステムを更新していくのです。 ニコニコ動画においても遺伝的アルゴリズムや決定木を使って何度もプレイしながらゲームクリアを目指す動画などが投稿されています。
マールタスが採用しているのは強化学習と呼ばれるオンライン学習の1種です。 強化学習は解きたい対象となる環境(今回ではゲーム)を行動によって操作する方法を最適化する手法です。 環境は何かしらの状態を持っており、行動によってその状態が逐次変化していきます。 状態を受けて行動を選択する主体をエージェントと呼び、行動選択の方法は方策と呼ばれます。 エージェントは環境の状態遷移に伴って、新たな状態と共に状態遷移のよさを示す指標を受け取ります。 この指標は報酬と呼ばれ、報酬の決め方は設計者が決めるものです。 エージェントは何かしらの初期状態から出発して、行動を選択しては環境から新たな状態を受け取り、また次の行動を選択します。 このようにして一連の行動、状態、報酬の系列データが得られます。 強化学習の目的はこの系列データにおける報酬の総和を最大化できる方策を探すことです。
マールタスを上記の強化学習の問題設置をあはめてみましょう。 まず解きたい対象である環境はゲームそのものに相当します。 そして環境の状態はプレイ中の様子を表現したデータであり、マールタスの場合ではゲーム画面の画像を用いています。 行動はボタンを押すことであり、状態遷移すなわちゲームプレイの良さを測る指標である報酬はスコアです。 つまりマールタスはゲーム画面の画像を受けてゲームを初めから終わりまでプレイし、スコアの合計を最大化することを目的として学習を進めます。 ただし報酬はステップ間のスコアの差分であり、一連の報酬の総和が最終スコアになるように設計されています。
上の図は行動を1回だけ選択する単純な場合を図示したものです。 マールタスは何かしらのゲーム画面(状態A)を見ており、ボタンのa, bの内いずれかを押すことにします。 そして押されたボタンによってゲームの状態がB1またはB2へと変化し、スコアが増減します。 この例では状態Aにおいてはスコアが増えるボタンaを選ぶ方策が有効であると言えます。
ではさらにボタンを何回も押すような場合を考えて見ましょう。 上の図では先ほどの例ど同様に状態Aにいますが、何回もボタンを押すので未来に渡って枝分かれが生じます。 1回押した直後にスコアアップしたとしても、その先は運悪くほとんどスコアがもらえないルートなのかもしれません。 そこで状態Aで行動aまたはbを選択した場合に将来に渡って得られるであろうスコアの合計をそれぞれ考えることにします。 この合計スコアを行動価値またはQ値と呼び、Q値を計算する関数をQ関数と呼びます。 正確なQ関数を得ることができれば、ゲームの状態に応じて取りうる行動の価値を計算できるため、毎時刻において最適な行動を取り続けることができます。
マールタスはDeep Q-Learning [3]と呼ばれる方法でQ関数を学習によって獲得しています。 Q関数は事前には未知ですが、取りうる観測と行動の全ての組み合わせを数え上げることができれば最適なQ関数を作ることが可能です。 しかし実際にはこの組み合わせは膨大でありまた観測が連続値である場合には実質不可能です。 そこでDeep Q-Learningではニューラルネットワークを使ってQ関数を近似します。 ニューラルネットワークによって近似されたQ関数は「Qネットワーク」と呼ばれます。 Qネットワークは状態を入力として行動価値を出力します。 そして実際のゲームプレイで得られた経験データを使って出力の行動価値の推定精度を上げるよう学習を行います。
Qネットワークの学習は大まかに以下のようなステップで行います:
Qネットワークを学習し最適化するためには観測と行動とそれによって得られた報酬のペアデータを大量に必要とします。 つまり実際にゲームプレイを行う必要があります。 一般的に、強化学習ではQネットワークのパラメータ最適化にかかる計算時間よりも学習データ生成に時間がかかります。 そのため並列して複数の同じゲームをプレイさせることで効率的に学習データを収集することを考えます。 具体的には上の図のように複数のQネットワークとゲームを持ったプロセス(Worker, Actorなどと呼ばれる)を並列に実行し1つのバッファに集約します。 Qネットワークの学習は1つのプロセスで行い、このバッファから一定数のデータをバッチとしてサンプルし最適化を行います。 具体的には現在マールタスはApe-X [4]と呼ばれる学習方法に則っており、実装はRLlib [5]と呼ばれるライブラリを主に使用しています。このライブラリについては解説記事があるのでこちらを参照してください。
実際にDeep Q-Learningを使ってRPGアツマールのゲーム8種類を学習させてみました。 RPGアツマールはブラウザゲームなため、ブラウザを複数立ち上げてゲーム画面をキャプチャしクリックやキーボードの操作を行動として学習しました。 学習途中のゲープレイ動画はこちらの記事で見ることができます。 是非マールタスの性能がどのくらいなのか、実際に同じゲームをプレイして是非確かめてみてください。
実験の結果わかったことの1つとしてマールタスは全てのゲームをマスターできるわけではなく、向き不向きがあることです。 例えば、アクションゲームのような比較的素早く正確な操作を求められるゲームは得意な傾向があります。 対して長期間に渡るプランニングが必要とされるゲームは苦手な傾向があります。 プランニングは強化学習一般においても難しい問題として知られており、取った行動に対して報酬が反映されるのが遅いために正確な価値の推定が難しいことが主な原因です。
この記事ではビデオゲームの操作を自動的に獲得するシステム「マールタス」の紹介を行いました。 ゲームAIにおけるマールタスの位置付けと採用している学習アルゴリズムであるDeep Q-Learningの概要を紹介しました。
マールタスは生まれたばかりです。 学習方法の改善に加えて人間との対戦やお助けプレイなど、よりゲームを楽しむための機能を追加していきたいと思っています。 これからマールタスをどうぞよろしくお願いします!
[1] Bellemare, M. G., Naddaf, Y., Veness, J. and Bowling, M.: The Arcade Learning Environment: An Evaluation Platform for General Agents, Journal of Artificial Intelligence Research, Vol. 47, pp. 253–279 (2013).
[2] Vinyals, O., Babuschkin, I., Chung, J., Mathieu, M., Jaderberg, M., Czarnecki, W. M., Dudzik, A., Huang, A., Georgiev, P., Powell, R., Ewalds, T., Horgan, D., Kroiss, M., Danihelka, I., Agapiou, J., Oh, J., Dalibard, V., Choi, D., Sifre, L., Sulsky, Y., Vezhnevets, S., Molloy, J., Cai, T., Budden, D., Paine, T., Gulcehre, C., Wang, Z., Pfaff, T., Pohlen, T., Wu, Y., Yogatama, D., Cohen, J., McKinney, K., Smith, O., Schaul, T., Lillicrap, T., Apps, C., Kavukcuoglu, K., Hassabis, D. and Silver, D.: AlphaStar: Mastering the Real-Time Strategy Game StarCraft II, https://deepmind.com/blog/alphastar-mastering-real-time-strategy-game-starcraft-ii/ (2019).
[3] Mnih, V., Kavukcuoglu, K., Silver, D., Rusu, A. A., Veness, J., Bellemare, M. G., Graves, A., Riedmiller, M., Fidjeland, A. K., Ostrovski, G., Petersen, S., Beattie, C., Sadik, A., Antonoglou, I., King, H., Kumaran, D., Wierstra, D., Legg, S. and Hassabis, D.: Human-level control through deep reinforcement learning, Nature, Vol. 518, No. 7540, pp. 529–533 (2015).
[4] Horgan, D., Quan, J., Budden, D., Barth-Maron, G., Hessel, M., van Hasselt, H. and Silver, D.: Distributed Prioritized Experience Replay, International Conference on Learning Representations, pp. 1–19 (2018).
[5] Liang, E., Liaw, R., Moritz, P., Nishihara, R., Fox, R., Goldberg, K., Gonzalez, J. E., Jordan, M. I. and Stoica, I.: RLlib: Abstractions for Distributed Reinforcement Learning, International Conference on Machine Learning (2017).