セッションのアジェンダ

茂手木新之介氏(以下、茂手木):では、これから「『AIにゲームを学習させる環境』の導入から安定運用までの学び」について、株式会社ディー・エヌ・エー ゲーム事業本部エンターテインメントサイエンス部AI推進グループの茂手木が発表を行います。

(スライドを示して)本発表はこのような構成になっています。第1章では登壇者である私の簡単な紹介を。第2章ではゲーム開発が抱える課題と、(第3章以降で紹介する)「その課題に対してAIで解決するというアプローチ」といった部分への導入を行い、第3章ではAIによる学習とは何かといった解説をします。

第4章ではAIにゲームを学習させる環境について、エンジニアリングの観点から、各節で機能や機構、設計、実装について解説を。第5章ではAIにゲームを学習させる環境の活用例や、環境導入をスムーズに行うためのチームの構成の解説を行い、第6章で本発表の総括を行います。

ゲーム開発の現状と課題、そのためのアプローチ

では第1章、登壇者紹介です。本日発表する、登壇者の茂手木新之介です。2017年にDeNAへ新卒入社し、ソーシャルゲームの新機能開発や運用を担当。その後、2020年よりAI推進グループに籍を置き、複数タイトル案件でAI導入のためのシミュレータ開発などを行っています。

では第2章、導入です。近年において、ゲームはリリースして終わりではなく、リリース後も数年にわたって運用を行うケースが増えています。特にソーシャルゲームなどのタイトルでは数年にわたって運用するのが一般的であり、長年運用を続けていくとスキル・キャラクター・装備などが増えていき、それらの組み合わせは膨大なものになります。

ゲームにおいて難易度などのゲームバランスは、ゲームのおもしろさを左右する重要な観点です。このバランスを正しく保つことがゲームのユーザー体験や品質の向上につながります。

しかし長年運用を続けていくと、スキル・キャラクター・装備などの組み合わせ数が増えていき、人間の力のみですべてを把握して、適切な難易度にゲームバランスを調整することが難しくなってしまいます。

ゲームのデバッグやQAも同様に、長年運用を続けた結果として複雑になったソースコードや実装の組み合わせに問題がないかを人間がすべてチェックするのは難しく、効率的な手段が求められています。

運用年数に比例してコンテンツの組み合わせ数が増えてしまい、人間の力のみですべてを把握してバランスを取るということ、チェックすることが難しい課題に対して、人間の代わりにAIにゲームをプレイさせる研究が活発になっており、ゲームバランスの調整やデバッグにAIを用いた報告が年々増えています。

では、AIにゲームをプレイさせるためには何をすればよいのでしょうか。人の代わりにAIにゲームをプレイさせるためには、人の目や手の代わりにAIが操作できるような機構を追加し、AIにゲームの学習をさせる必要があります。

それでは本章のまとめです。ゲームバランスはゲームのユーザー体験や品質の向上につながる重要な要素ですが、ゲーム開発が抱える課題として、運用年数に比例して増えていくコンテンツの組み合わせ数に対し、人間の力のみですべてを把握してバランスを取ることや、チェックが難しいという課題がありました。

そこで、ゲームに人の目や手の代わりにAIが操作できるような機構を追加し、AIにゲームを学習させたうえで、AIに人間以上のパフォーマンスでゲームをプレイさせることで、これらの課題にアプローチする研究が増えています。

AIがゲームを学習できる環境とはどんな環境か?

では第3章、AIによるゲームの学習です。前章では、AIにゲームを学習させてゲームをプレイさせることについて話しましたが、そもそもAIによる学習とはなんでしょうか。ここでいうAIによる学習とは、ゲームにおいて「○○な状況で」「××したら」「△△になった」というような、因果関係を伴う一連の事象を膨大なパターン数で思考し、結果を評価・解釈することをいいます。

では例を示しましょう。「○○な状況」というのは、味方と弱い敵が1人ずついる状況や味方が2人に強い敵が(1人)いる状況など、ゲームにおける敵味方のキャラクターやステータス、ステージなどさまざまなパラメータがされている状況です。

この状況に対してそれぞれ「攻撃したら」「防御したら」といった入力をした結果、勝った・負けたという(勝負の)結果を出力するまでの一連の事象を膨大なパターン数で思考し、結果を評価・解釈する。これがAIによる学習です。

では、ゲームにおける「○○な状況で」「××したら」「△△になった」という因果関係を伴う一連の事象を膨大なパターン数で思考し、結果を評価・解釈できる環境とは、いったいどんな環境でしょうか。

まず人間の場合で考えてみましょう。人間は手を使い、コントローラーなどのUIから状況を操作し、画面に映る情報を目で把握し、状況や結果を認識します。

AIの場合はというと、AIは現実世界に肉体を持っていません。ゆえに、手を使った操作や目を使った認識ができません。

では、手の代わりにロボットアームを、目の代わりにカメラを使って、人間と同じような操作・認識をできるようにするべきでしょうか。

もちろん、この方法でもAIにゲームを学習させる環境は作れます。ただ学習対象をデジタルゲームとした場合、アナログゲームと比較してデジタルゲームは内部的に持つパラメータが多くあり、画面に表示されない要素も多いです。また、「味方・敵・地形・天候・時間」など、プレイヤーが能動的に干渉できない要素もあります。

例えば、将棋と一般的なデジタルゲームを比較した場合、将棋であれば盤面や自分の駒、相手の駒、取られた自分の駒、取った相手の駒、駒の移動方向、他にも経過ターンなどがパラメータとしてあります。

一般的なデジタルゲームの場合、敵味方にHPやMP、攻撃力・防御力などのさまざまなパラメータが設定されています。他にもスキルや装備、好感度とか、ダメージ計算の複雑なロジックなどがあります。デジタルゲームとアナログゲームでは、操作や認識できるパラメータに大きな差があります。

以上のことを踏まえて、ゲームにおける因果関係を伴う一連の事象をAIに学習させようと考えた時、デジタルゲームの状況は、画面から目視のみで得られる情報だけで十分でしょうか。

同じように、ゲームにおける因果関係を伴う一連の事象をAIに学習させようと考えた時、デジタルゲームの状況は、提供されたUIから操作できる内容だけで十分でしょうか。

では、デジタルゲームにおいて十分なAIが学習できる環境とはなんでしょう。それはゲームに対して見えない部分も含めた状況を再現できる入力機構、見えない部分も含めた状況を記録できる出力機構が実装されており、そして効率よく学習を行うためゲームを並列かつ高速で実行できる仕組みが必要です。

そして、デジタルゲームを学習対象にするのなら、ゲーム内で見えない部分も含めた状況を再現できる入力機構、ゲーム内で見えない部分を含めた状況を認識できる出力機構、ゲームを並列かつ高速で実行できる仕組みを学習対象のデジタルゲームに対して実装し、そのゲームをサーバーなどのCUIで、並列かつ高速で実行できるようにするのがよいでしょう。

本章のまとめです。AIが学習できる環境とは、AIが学習を行うためにゲーム内で見えない部分も含めた状況を再現できる入力機構、ゲーム内で見えない部分を含めた状況を記録できる出力機構、ゲームを並列かつ高速で実行できる仕組みが学習対象のゲーム上に実装されている環境のことです。また、この環境のことをシミュレータ環境とも呼びます。

「AIにゲームを学習させる環境」に必要な機能

では第4章、実践−エンジニアリング編−です。第1節、「AIにゲームを学習させる環境」における機構・機能。前章でも解説しましたが、シミュレータ環境を導入するということは、学習対象のゲームに対して見えない部分も含めた状況を再現できる入力機構と、見えない部分も含めた状況を記録できる出力機構を実装して、さらに並列かつ高速で実行できるような仕組みを実装することでした。

各機能をシンプルに表現すると、出力機構はAIが学習に用いるためのログを出す機構。入力機構はログを用いてゲームロジックに干渉する機構。並列実行はサーバー上で並列にゲームを動かせる仕組み。高速実行はゲームをGUIから切り離し、CUI上で動かせる仕組みといえます。本節では上記機能についての解説を行います。

出力機構の解説を行おうと思いますが、その前に、(前提として)これから説明する出力機構・入力機構では、メッセージ駆動で動くゲームを例に用いて解説を行います。そのため、出力機構・入力機構の解説を先行して、メッセージ駆動の解説を行います。

メッセージ駆動とは、ゲームにおけるコアロジックの実装方法の1種です。

(スライドを示して)このようにメッセージ発行者、メッセージキュー、ゲームロジックなどから構成される仕組みです。

では、実際にメッセージ駆動がどのようにゲームを処理するかの解説をします。メッセージ発行者は攻撃や防御などのメッセージを適宜発行します。例えば、味方キャラクターが攻撃する時は攻撃のメッセージが、プレイヤーがUIから防御を選択した場合、UIから防御メッセージなどが発行されます。

メッセージは、メッセージキューに対して発行された順に蓄積されていきます。キューに蓄積されたメッセージは順次ゲームロジックに送られていき、ゲームロジックにてメッセージの解釈を行い、ダメージ計算やその反映などを行います。

ゲームロジックにて処理された結果は描画に渡され、ダメージ時のスキルのアニメーションなどが再生されます。また、ゲームロジックにてメッセージの処理が行われると、次のメッセージがキューから与えられ、順次処理を行なっていきます。このようにゲームの処理を行うのがメッセージ駆動です。

では、出力機構の解説に入ります。出力機構は、メッセージをいつ・誰が・なんのメッセージをキューに送ったかをログに記録する機構です

(スライドを示して)このように、キューに送られてきたメッセージをログに記録していきます。また、メッセージを処理した結果どのような計算になり、どのように処理し、どのように反映したかをログに記録します。

では、次に入力機構の解説を行います。入力機構とは、ログなどに従って、各メッセージの発行者のフリをしてメッセージを発行する機構です。

入力機構にログを読ませると、入力機構がそれぞれのフリをしてメッセージを発行。

また、入力機構を用いる時も同じように出力のログは記録しています。

メッセージを処理した結果をログに記録するのも同様です。

では次に、並列実行&高速実行について解説を行います。AIにおける学習は、イテレーションがとても重要です。学習対象にもよりますが、弊社がCEDEC2020で行なった学習では、8時間で200,000戦の対戦数を確保しています。

これは毎分400戦以上を行なっている計算であり、このためにはゲームが並列実行と高速実行できる必要があります。この時、高速実行はゲームをGUIから切り離し、描画をスキップすることで実現しています。

「AIにゲームを学習させる環境」の導入における設計・実装の注意

では次に第2節、「AIにゲームを学習させる環境」の導入における設計・実装です。ここまで、シミュレータ環境の導入において求められる機構・仕組みについて解説を行いました。この項では、シミュレータ環境の導入において押さえておくべき設計や実装について解説を行います。

最初に、「AIにゲームを学習させる環境」を二重管理にしないようにする。デジタルゲームに対してシミュレータ環境を後付けで実装することを考えた時に、すでに運用しているゲームへの影響を最小限にするため、運用中の実装を複製して、複製した実装に対してシミュレータ環境を追加するという選択をしがちです。

しかし、この設計では運用中の実装に修正があるたびシミュレータ環境の修正も必要になり、運用中の実装に対して、常に追従するコストが求められてしまいます。

また、この修正作業が必要になった場合、修正が完了するまでシミュレータ環境を稼働できない問題が発生することもあります。昨今の運用型ゲームタイトルでは更新頻度が高いゲームも多く、二重管理を行う設計は、二重に運用保守コストがかかってしまうので避けるべきです。

では次に、開発初期時点から「AIにゲームを学習させる環境」の導入を前提に設計を行うことについて解説を行います。

シミュレータ環境の機構や仕組みは、ゲームにおけるコアロジックの実装と密接に関係しています。シミュレータ環境を既存のゲームに対して後付けで導入した場合、既存のゲームのコアロジックを修正したり、そこだけイレギュラーな対応を求められたりしてしまうことがあります。既存のゲームのコアロジックを修正する場合は、影響範囲が大きく、工数も大きくなってしまい、ゲームやシミュレータ環境の設計が複雑になってしまうということがあります。

ゆえに、ゲームの新規開発を行う際には、将来的にAI活用は必須であると見据えたうえで、開発初期時点からシミュレータ環境を導入することを前提に、ゲームのコアロジックや周辺機能の設計・実装を行う必要があります。

弊社における開発でも、シミュレータ環境を後付けで導入した場合と開発初期から導入した場合における導入コストとして、開発期間で8倍、開発費用では7倍の差が確認されています。

それでは本章のまとめです。(スライドを示して)シミュレータ環境とは、出力機構と入力機構と並列実行と高速実行を実装したゲームのことであり、各機能は下記のような特徴を持つものでした。

出力機構はAIが学習に用いるためのログを出す機構、入力機構はログを用いてゲームロジックに干渉する機構、並列実行はサーバー上で並列にゲームを動かせる機能、高速実行はゲームをGUIから切り離しCUIで動かせる機能でした。

また、シミュレータ環境導入にあたり、下記の設計・実装について注意を行う必要があります。運用・保守コスト的観点においては、ゲームとシミュレータ環境の二重管理になるような設計・実装は避ける。開発期間・開発費用といった導入コスト的観点においては、シミュレータ環境を後付けするような設計・実装ではなく、開発初期時点から導入することで前提にゲームの設計・実装を行うといったことでした。

後半に続く