イベント
[CEDEC 2019]ゲームの敵AIはAIに作らせる。「『強い』を作るだけが能じゃない!ディープラーニングで3Dアクションゲームの敵AIを作ってみた」聴講レポート
「CEDEC 2019」公式サイト
4Gamer「CEDEC 2019」記事一覧
登壇したのはLuminous Productionsのプログラマー,上段達弘氏だ。スクウェア・エニックス入社後にゲームエンジン「Luminous Studio」の開発に携わり,「FINAL FANTASY XV」ではAI関連の実装を担当したという。そんな上段氏が行った技術検証が,「FINAL FANTASY XV」風のバトルをテーマに,ディープラーニングで敵キャラクターのAIを低コストで作るというものだった。
敵キャラクターのAIを作るには,これまではスクリプトを書いたり,パラメータテーブルを使ったりなどの手法が用いられてきた。
Luminous Studioには「AI Graph」と呼ばれるツールが実装されており,エンジニアでなくてもAI作りに関われるが,それでもまだロジカルな作業であることは否めないと上段氏は述べる。実際のゲームを作りでは,こうしたAIの制作をモンスターの数だけ繰り返すのだから,かかるコストも大きい。そこで,「敵キャラクターのAIをAIに作らせよう」と思い立ったのだという。AIのディープラーニングを使うことで,シミュレーションを繰り返すだけで敵キャラクターのAIが完成し,量産も楽になるというわけだ。
ここで目標となったのが以下の3点である。
1:人手を使わず,自動でAIを作る
2:不自然ではなく,賢く見えるくらいのクオリティを担保する
3:プランナーがあとからAIを調整する方法を用意する
1は省力化,2は見た目のよいAIを作るためということは分かるが,なぜあとから人間が調整できなければならないのだろうか。
それは,単純に強いAIを作ることだけが目的ではないからだ。例えば,最適解を学習したAIが,一分の隙もない機械的な動きでこちらを叩きつぶしにくるとしたらどうだろうか。それは確かに「強い」が,プレイヤーはまったく面白くない。ゲームの相手を務めるAIは,わざと隙を作ってプレイヤーの攻撃を受けたり,プレイヤーが攻略しやすいパターンで動いたりしたうえで,勇猛だったり臆病だったりといった個性まで表現しなければならない。
そのため,プランナーがあとから調整できる仕組みが求められるのだ。
今回の取り組みでキーになるのが,「強化学習」だ。強化学習とは,望ましい行動に報酬を与えることでAIに学習させるという手法で,ざっくりというなら,エサを使って犬にお手という動作を覚えさせるようなものだ。
このケースでは,「ダメージを与えた」「敵の攻撃を避けた」といった行動に報酬を与える。するとAIは,報酬がもらえる行動を学習し,さらに報酬を得られるように行動を変化させていくという。
上段氏が用いたのは「DQN」(Deep Q Network)というAIだという。DQNもより多くの報酬がもらえるように動きを学習していくのだが,合わせて,Q値と呼ばれる「将来的にもらえそうな報酬」も考慮する。
つまり,その場で報酬が得られる行動をあえて選ばず,時間が経てばより多くの報酬がもらえそうな行動を選択できるのだ。非専門家にはなかなか難しい話だが,とりあえず,「敵キャラクターっぽい行動を取ると報酬をもらえるAIが,より多くの報酬を目指して学習を続けていく」ぐらいの理解で大丈夫だろう。
最初はランダムに技を出していたAIも,学習を進めることで適切なタイミングで攻撃を出したり,技を当てるための位置取りをしたりと,それらしい動きになってくるという。ちなみに,学習は自動で進められるため,人間が見ている必要ないのだが,上段氏はAIが学習している様子が可愛らしく,ついつい眺めてしまうそうだ。
しかし,この学習を進めるだけでは,最適な行動を取るだけのつまらないAIになってしまうのは上記のとおり。実際,ディープラーニングを続けた結果,強い技だけを繰り出すAIが生まれてしまった。
こうした事態は,報酬を調整することにより防ぐことができ,さらに,敵キャラクターの個性を出すことも可能になる。例えば,強い技だけを繰り返すようなら,同じ行動を取った場合に報酬を与えないようにする。接近戦を挑んでくるAIを作りたければ,相手との距離を詰めることで報酬を与える。こうした調整を加えたことで,AIはいろいろな技を適度に使い分けつつ戦うようになったという。
この段階で試しにAIを複数体投入して集団戦をテストしたところ,AIの攻撃が激しすぎて手も足も出なかったという。ある程度,予想できたことだろうが,ここでも報酬を調整することで問題を解決している。
例えば,「仲間AIが攻撃しているときに攻撃しても,報酬を与えない」ことにより,1体が攻撃している間,残りのAIが成り行きを見守るようになった。もちろん,スクリプトを書いたわけでも,ロジックを組んだわけでもないので,従来のやり方よりははるかに少ない労力で済んでいる。
次に上段氏が取り組んだのが,パッド操作をAIに学習させ,プレイヤーキャラクターを自動制御するAIを作り出すことだ。これは,敵キャラクターのAIとまったく同じというわけにはいかなかった。
敵キャラクターの場合は,まずモーション(行動)を選択させ,これが終わると評価と報酬を判定すれば良かった。これは,DQNを2〜3秒に1度,動かすだけになる。
しかし,プレイヤーキャラクターの場合は,パッドを連続して操作しなくてはならないうえに,即座に行動が始まるわけではない(例えば,攻撃ボタンを押してから技が出るまでにはコンマ数秒の間がある)ため,DQNを0.2秒ごとに動かす必要があった。
また,操作が連続しているため,どの操作が報酬につながったのかAIに分かりづらく,行動を何秒か遡って報酬を評価するようにしたという。会場ではAIが操作するプレイヤーキャラクターと敵キャラクターの戦闘場面が公開されたが,どちらもAI操作であることが分からないほど自然な動きを見せていた。
こうして学習を終えたAIだが,そのまま使えるわけではない。冒頭にも書いたように,学習の結果がプランナーの望むものでないことがあるためで,人間があとから介入する必要が出てくるのだ。上段氏は,行動の価値を変更して再学習なしにAIの行動を調整できるシステムを実装して,きめ細やかな対応を可能にしたという。
AIの学習は,5〜7時間ほどかければ十分に良い結果が出るとのこと。作業時間を短縮するため,フィールドを12階層重ね,それぞれでAIを戦わせたりしているというから,まるでバトルマンガの修行場のようだ。
AIを育ててることで,問題点も明らかになってきた。AIが行動を選択する際にはランダムな要素も含まれるため,「この行動のあとには,必ずこういう動きをさせたい」という演出が求められる場合には,スクリプトの出番になるという。
また,AIの場合,バグの再現が困難であるという。デバッグにはバグの再現が必須なので,これは確かに問題といえそうだ。
また,AIは学習と同じ条件下ではうまく行動できるが,未知の状況には対処できない。例えば,平地で学習させたAIを高低差の激しい地形に投入しても,とんちんかんな動きをしてしまう。こうした事態を防ぐには,いろいろな状況で学習させるしかなく,今のところ時間をかけるしか解決策はないという。AIの学習には敵AIが必要で,学習結果は敵AIの質が高いほど良いものになるため,これを作成する手間と労力も省けない(プレイヤーキャラクターのAIと敵キャラクターのAIをまっさらな状態から戦わせれば一気に成長してくれそうだが,実際に試したところ,お互いがランダムな行動を取るだけでダメだったとのこと)。
ディープラーニングで敵キャラクターのAIを作る。しかも,単に強いだけではゲームの相手として失格なので,人間が調整してより良いAIを作り上げる。碁や将棋など,最近はひたすら強いAIが話題だが,ゲームならではの特殊性を加味したAI作りという,興味深い講演だった。上段氏の取り組みは今のところ実験段階だが,ローコストでゲームに向いたAIが量産できるのなら,新たな可能性も生まれてくるだろう。取り組みの進展に期待しよう。
「CEDEC 2019」公式サイト
4Gamer「CEDEC 2019」記事一覧
- この記事のURL: