強化学習の恩恵をユーザー体験に 〜 運営型ゲームにおけるエッジAI開発の舞台裏

516 Views

January 26, 26

スライド概要

【イベント】
DeNA × AI Talks #5
https://dena.connpass.com/event/377181/

profile-image

DeNA が社会の技術向上に貢献するため、業務で得た知見を積極的に外部に発信する、DeNA 公式のアカウントです。DeNA エンジニアの登壇資料をお届けします。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

DeNAxAI Talks #5 強化学習の恩恵をユーザー体験に 〜 運営型ゲームにおけるエッジAI開発の舞台裏 〜 株式会社ディー・エヌ・エー 坂見 耕輔 © DeNA Co., Ltd. 1

2.

目次 1 本発表の流れ 2 運営型ゲームにおける強化学習 3 強くて自然なモデルを作るための工夫 4 開発効率を向上させるための工夫 © DeNA Co., Ltd. 2

3.

01 本発表の流れ © DeNA Co., Ltd. 3

4.

本発表について ● 本発表は、CEDEC 2025 にて発表を行った「強化学習の恩恵をユーザー体験に 〜 運 営型ゲームにおけるエッジAI開発の舞台裏 〜」(竹村・坂見・村上) を再構成し、そ の後の実験の工夫を追加したものです。 ○ © DeNA Co., Ltd. https://cedil.cesa.or.jp/cedil_sessions/view/3138 4

5.

自己紹介 ● 坂見 耕輔 (さかみ こうすけ) ○ 2019年にDeNAに新卒で入社 ○ 入社後はデータサイエンティストとして 最適化案件やゲーム案件に従事 ● © DeNA Co., Ltd. 社外での活動 ○ Kaggle Competitions Grandmaster ○ 『Kaggleではじめる大規模言語モデル入門』寄稿 5

6.

「運営型ゲーム」と「エッジAI」の定義 ● ● © DeNA Co., Ltd. 「運営型ゲーム」の定義 ○ ゲームを構成するユニット(キャラクターなど)やアクション(バトルコマン ドなど)が継続的に追加されるタイプのゲームを指す。 ○ 加えて、ゲームを進める上で有利とされる戦略が時間軸で変化し、NPCやオー トモードといったゲームAIに持続的な更新が求められるものを指す。 「エッジAI」の定義 ○ 家庭用ゲーム機からスマホまで、すべての計算がゲーム動作端末で完結するAI のことを指す。本発表は狭義のオンデバイスという言葉に改める。 ○ 本発表はスマホゲーム開発(主にC#)で培った知見がベースになるが、プラット フォームを問わない普遍的な開発ノウハウをお伝えしたい。 6

7.

02 運営型ゲームにおける強化学習 © DeNA Co., Ltd. 7

8.

運営型ゲームにおける対戦AIの重要性 ● 対戦AIは様々なところで利用 PvEコンテンツ PC NPC PvPマッチングの代替 PC バランス調整・デバッグ PC NPC VS NPC VS NPC © DeNA Co., Ltd. 8

9.

従来の対戦AI開発方法 ルールベースAI 探索木AI 現在の状態 敵発見 行動によって分岐 HP十分? HPは十分? Yes No 攻撃 後退 一番良い状態 強い/自然なAIにすると複雑な実装になりがちに © DeNA Co., Ltd. 9

10.

従来の対戦AI開発の課題 運営型ゲームの特性:継続的なアップデート ● メンテナンス コスト ゲームの更新量 対戦AIが複雑になり、メンテナンスコストが増大していく © DeNA Co., Ltd. 10

11.

強化学習という選択肢 ● ● 強いAIを作るのに「強化学習」が台頭 ○ 世界チャンピオンに勝てるレベルの強さ ○ 複雑なゲームでも人間を超える賢さに 具体事例 ○ 囲碁世界チャンピオンに勝利した AlphaGo (2015) ○ ○ 将棋の電王戦 (2011〜) 逆転オセロニアにて様々なデッキで https://speakerdeck.com/dena_tech/qiang-hua-xue-xi-detotup ureberufalseqiang-sanidao-da-sitani-zhuan-oseroniadui-zhanai-dena-techcon-2022 トッププレイヤーに勝ち越し (2022) © DeNA Co., Ltd. 11

12.

強化学習とは? 一般的なAIの学習では・・・ 対戦ログ 強化学習では・・・ 動的なゲーム環境 データ生成 模倣 試行錯誤 対戦ログ 状態:ゲーム状況 報酬:勝/負 教師あり学習 AI 強化学習 AI (深層ニューラルネットワーク使用) (深層ニューラルネットワーク使用) 一般的なAIの学習(教師あり学習) は与えられたデータを模倣する学習形式 強化学習は自ら試行錯誤して データ生成から請け負う学習形式 © DeNA Co., Ltd. 12

13.

なぜ運営型ゲームAIに強化学習を選ぶのか? ● ① 環境変化への高い適応力: ○ アップデートに対し、モデルを再学習させることでルール変更に柔軟に追従 ルールベースのような大幅な手直しが不要な場合が多い ● ● ② 高速な推論: ○ 学習済みのニューラルネットワークは計算量がほぼ一定で非常に高速 ○ 探索木のように局面によって計算時間が変動しない ③ 副次的効果: ○ 大量対戦によるゲームクライアントコード/ロジックの未知のバグ発見 実は強化学習を利用するメリットは多い! © DeNA Co., Ltd. 13

14.

その他強化学習の応用先 ● 作成した対戦AIについては、対戦環境のバランス設計支援などにも利用可能 新規キャラクタ を扱えるAI 結果集計 可視化 AI同士の大量 対戦による検証 OK 設計案 検証 評価 設計 完了 対戦環境 投入 NG © DeNA Co., Ltd. 14

15.

03 強くて自然なモデルを作るため の工夫 © DeNA Co., Ltd. 15 15

16.

本章で伝えたいこと ● 強くて自然なモデルを作るために必要な工夫についてご紹介 ○ ● © DeNA Co., Ltd. 我々の経験を元に、一般的な tips について共有 特に以下のトピックについて: ○ 数値的な特徴量をモデルにどう入れるか? ○ 学習用データの生成における工夫 ○ 対戦相手との相性をどうモデルに反映させるか? ○ 細かい挙動の制御をどのように実現するか? 16

17.

ゲーム特有の特徴量をどうモデルに入力するか? ● 様々な情報を強化学習のモデルが理解しやすい形に変形して入力する必要がある キャラ 特徴量 数値に変形 して入力 次の行動 属性 攻撃力 例 体力 80 ターン数 3 0.8 1/100 0.3 大きさを -1 ~+1 前後にするな ど極端な値が入力されないよ うに 1/10 → 環境が定常的でないため standard scaling 等の標準的なスケーリングができない! © DeNA Co., Ltd. 17

18.

数値的な特徴量をモデルにどう入れるか? ● 様々な方法が考えられるが一例:multi scale sigmoid/tanh ○ 定数or更新可能なパラメータをモデルへ入力したいサイズ分だけかける ○ sigmoid や tanh などといった関数をかけて大きさを -1~+1 の範囲に ○ 正負や0かどうかが重要な場合、tanhは正負が保たれて変換されてモデルが解釈 しやすい sigmoid or tanh スケール x 1/10 残り体力 x 1/20 80 x 1/50 x 1/100 © DeNA Co., Ltd. 18

19.

数値的な特徴量をモデルにどう入れるか? ● ● multi scale sigmoid/tanh の問題点: 差分特徴量が学習しにくい ○ sigmoid(100) - sigmoid(90) と sigmoid(10) - sigmoid(0) の値が異なる ○ 例: 敵キャラクターとの相対位置、HPとダメージから残りHPを計算する、等 そこで、Positional Encoding を併せて用いる ○ 低周波成分と高周波成分の組み合わせで、差分を特徴量化しやすい ○ 低周波成分: 長期戦略のように大局的な判断に用いる ○ 高周波成分: 小さな差分が影響を持つような判断に用いる 低周波成分 © DeNA Co., Ltd. 高周波成分 19

20.

学習用データの生成における工夫 ● 強いキャラを使うと適当に行動しても勝つので、何の行動が良かったのか学べない VS 行動によって勝敗が変動しにくい VS 行動によって勝敗が変動 → 解決:AIの自己対戦でデータ生成をする際、お互いの “強さ” をなるべく揃える 強さを揃えた対戦データで、AIが勝利に寄与した行動を学べるように © DeNA Co., Ltd. 20

21.

対戦相手との相性をどうモデルに反映させるか? ● ゲームによっては、デッキ・キャラ・効果などに有利不利などの相性が存在 ● 補助タスクとして、デッキやキャラなどの対戦前に決まる情報から勝敗を予測 させることで、相性を考慮した学習ができ性能が向上する NN 対戦前に決まる デッキ・キャラ情報 NN 対戦中の状態 NN NN 勝敗予測 (補助タスク) 行動を決定 (メインタスク) ※ NN: Neural Network © DeNA Co., Ltd. 21

22.

細かい挙動の制御をどのように実現するか? ● ● 違和感のない自然なAIを作るために、特定の状況下での行動を制御したい ○ 例:全く意味のない行動をしてしまうのを防ぎたい ○ 例:自滅してしまうのを防ぎたい 報酬設計での誘導を行うことで実現可能 ゲーム状態を観測 行動選択(移動・攻撃等) ゲーム環境 次のゲーム状態と報酬を観測 … 報酬を与えられた行動が促進される ようにモデルが学習される © DeNA Co., Ltd. 22

23.

細かい挙動の制御をどのように実現するか? ● ただし、通常の方策勾配法で、単純に報酬にペナルティを追加すると、それ以前の 関係ないアクションにノイズが伝播してしまう ○ 例: 自滅してしまうのはその行動単体が悪いのであって、その行動が選択できる 状況自体は悪くない ● 通常の policy loss に加えて、行動単体に対するペナルティ項を追加する ○ Critic の loss には含めない ペナルティ項 特定の行動が実行されたことを示すフラグ 例えば、自滅行動が発生したときに値を持つ © DeNA Co., Ltd. 23

24.

04 開発効率を向上させるための 工夫 © DeNA Co., Ltd. 24 24

25.

本章で伝えたいこと ● 開発効率を向上させるための工夫 ● 学習 ● © DeNA Co., Ltd. ○ シミュレータ ○ 分散処理 推論 ○ オンデバイス推論とは ○ 特徴量の後方互換性 ○ 特徴量作成におけるエンジン関数の使用 ○ データ生成の高速化 25

26.

本章で伝えたいこと ● 開発効率を向上させるための工夫 ● 学習 ● © DeNA Co., Ltd. ○ シミュレータ ○ 分散処理 推論 ○ オンデバイス推論とは ○ 特徴量の後方互換性 ○ 特徴量作成におけるエンジン関数の使用 ○ データ生成の高速化 26

27.

「大量の学習データ」をどう用意するのか? ● 強化学習の課題 ○ 大量のデータと計算資源が必要 ○ ゲームによっては、一つの強化学習モデルを学習するのに、数百万〜数千万回 の対戦エピソードが必要になる 解決策 © DeNA Co., Ltd. ○ ユーザーログを使用した学習による高速化 ○ 自己対戦 + 高速ゲームシミュレーション によるデータ生成 ○ 分散処理によるデータ生成のスケーリング 27

28.

ユーザーログを使用した学習による高速化 ● 強化学習による学習と同時に、ユーザーのログを使用した教師あり学習を行うこと で、学習を高速化 ○ ユーザーのログだけでは、未リリースのデータに対応していないため、強化学 習と組み合わせる必要がある 盤面情報 モデル NN © DeNA Co., Ltd. ユーザーが実際 に取った行動 28

29.

ゲームシミュレータとゲームクライアント ゲーム環境 AI学習コード ゲームシミュレータ ゲームクライアント AIとゲームクライアント 対戦AIを学習させる 間の通信のインター ゲームロジックの実装 フェースを提供 © DeNA Co., Ltd. 29

30.

シミュレータ設計の詳細 CEDEC 2021: 明日から実践!強化学習で強い対戦ゲームAIを 作ろう 〜だれでも試せる状態をめざして〜 © DeNA Co., Ltd. 30

31.

シミュレータ開発 ● ● シミュレータの機能 ○ エピソード生成 ○ 評価用対戦 ○ ユーザーログ再生 学習速度向上の鍵:高速なゲームシミュレータ ○ 大量の自己対戦を行う上でゲームシミュレータの高速化は必須 ■ ● © DeNA Co., Ltd. 実機や通常のプレイ速度より圧倒的に高速に動作する必要 技術的な工夫 ○ ゲームエンジンをベースに描画処理を省略するなどのヘッドレス化 ○ gRPCを用いた学習コード(Python) と シミュレータ(C#) 間の効率的な通信 31

32.

分散処理のアーキテクチャ全体像 ● © DeNA Co., Ltd. モデルの学習とは別に、以下を “Workers” として分散処理 ○ エピソード生成(自己対戦のログ生成・ユーザーログの再生) ○ モデルの性能評価 32

33.

分散処理の実装:強化学習ライブラリ HandyRL の活用 分散システムの構築・運用は複雑 → 既存ライブラリが強力な味方に ● HandyRLを利用することで開発効率向上 ● ライブラリが提供する機能例: ○ Worker-Learner間の通信、データ収集 ○ 複数のWorkerプロセス/スレッド管理 ○ 学習に利用するエピソードの管理 https://github.com/DeNA/HandyRL © DeNA Co., Ltd. 33

34.

本章で伝えたいこと ● 開発効率を向上させるための工夫 ● 学習 ● © DeNA Co., Ltd. ○ シミュレータ ○ 分散処理 推論 ○ オンデバイス推論とは ○ 特徴量の後方互換性 ○ 特徴量作成におけるエンジン関数の使用 ○ データ生成の高速化 34

35.

対戦AIの推論方法の比較 サーバーサイド推論 ● 実機からAPIサーバーにリクエス トを飛ばし、推論結果のアク ションを受け取る方法 オンデバイス推論 ● 実機内で推論を実行する方法 ● 今回の発表で取り扱う リクエスト アクション © DeNA Co., Ltd. 35

36.

オンデバイス推論を実現する仕組み 実機には組み込まれない AI学習コード ゲームシミュレータ ● ● 学習済みモデルを C#で推論できるように ONNX形式に変換 © DeNA Co., Ltd. ゲームクライアント AIの推論 学習と推論で共通の処理 ○ 特徴量作成 ○ 行動インデックス変換 36

37.

特徴量の後方互換性の担保 ● 強化学習モデルの開発にあたり、評価として過去モデルに対す る勝率を使用したい ● しかし、新しいモデルの特徴量のテンソルをそのまま過去モデ ルに入力することはできない 入力特徴量のテンソル 旧モデル … 新モデル © DeNA Co., Ltd. 37

38.

特徴量の後方互換性の担保 ● そこで、特徴量をカラムごとに持たせる形式に ● ONNX モデルの対応する特徴量を自動で選択することで、過去 のモデルに対しても推論を行えるように 特徴量を作成 © DeNA Co., Ltd. モデルに対応する特徴量を選択 推論を実行 38

39.

特徴量をカラムごとに保持するメリット 前処理をモデルに持たせられる ● ● スケール変換等の前処理をモデルに持たせることで、パラメータの変更等で ビルドを作り直す必要がなくなる デバッグ時に生の特徴量の値を確認することができる モデル 特徴量作成 前処理 ● ● © DeNA Co., Ltd. 推論 スケール変換 テンソル化 39

40.

特徴量をカラムごとに保持するメリット それぞれの単体テストを書くことができる ● ● 特徴量の計算が正しいことをテストにより担保することができる バフスキルがかかっていることを考慮できているか?などの、細かいケース をチェックできる 盤面を作成 © DeNA Co., Ltd. 特徴量を計算 値をテスト 40

41.

特徴量をカラムごとに保持するメリット 過去モデルの計算を再現することができる ● ● ● 新しく追加した特徴量に対応する重みをゼロにすることで、新しいモデルで 過去モデルの計算を再現できる 追加学習による学習時間の短縮 前バージョンのモデルとの勝率比較 重み行列 新しく追加した特徴量に 対応する重みをゼロにする HP -0.124 0.802 0.014 0.249 ATK -1.002 0.421 0.358 -0.773 DEF 0.0 0.0 0.0 0.0 … … … … 0.911 -0.399 0.409 -0.811 TYPE © DeNA Co., Ltd. 41

42.

特徴量作成におけるゲームクライアント関数の使用 ● 実際のゲームでは、条件や計算が複雑すぎて、単純な特徴量では情報が十分でない ● 逆転オセロニアの例: ● ○ 「周囲に自分の〜駒があるとき」 ○ 「直前のターンに〜枚以上返されているとき」 ○ バフ・ひっくり返す枚数・毒・... 毒 ひっくり 返す枚数 C#で特徴量を計算するときは、ゲームクライアント バフ を使用できるので、条件判定の関数を使ったり、 時限効果 実際に盤面を遷移させた情報を使用することが できる! オーラバフ HP 攻撃力 © DeNA Co., Ltd. 42

43.

データ生成の高速化 ボトルネックであるデータ通信を減ら ● 状態 したい ゲームクライアントに推論の仕組みが ● あるため、対戦後にまとめて結果を受 ゲーム環境 行動 AI学習 コード 状態 行動 ゲームクライアント … け取ることでデータ通信の量を大幅に ゲームシミュレータ 減らせる ● データ生成: 45s → 11s (24%) ● 評価対戦: 46s → 3s (6%) 全体の学習が 14d → 6d に短縮! © DeNA Co., Ltd. モデル ゲーム環境 AI学習 コード 対戦 ゲームシミュレータ 結果 ゲームクライアント 43

44.

まとめ ● 運営型ゲームにおける強化学習実用化の工夫についてご紹介しました ○ ○ © DeNA Co., Ltd. モデルを強くする工夫について ■ 非定常的なゲーム環境に耐えうる特徴量・モデルの設計ポイント ■ キャラ間のステータス差や相性を加味したモデル学習 開発効率を向上させる工夫について ■ 効率的な分散学習を支えるシステムアーキテクチャとデータ生成 ■ ゲームロジックの変化に迅速に適合するための特徴量設計 44

45.

© DeNA Co., Ltd. 45

46.

Appendix © DeNA Co., Ltd. 46 46

47.

どういう入力(特徴量)があり得るか? 主要な特徴量は以下の2種類 ● ● © DeNA Co., Ltd. ① カテゴリカルな特徴量 ○ IDや種類・分類などのカテゴリーを表すデータ ○ 例:キャラID、ロジックのID、属性、種族、バフやデバフの種類... ② 数値的な特徴量 ○ 量や程度を表す、連続的または離散的な数値データ ○ 例:体力(HP)、攻撃力(ATK)、防御力(DEF)、クールタイム、移動速度... 47

48.

カテゴリカルな特徴量をどう入れるか? ● Embedding と呼ばれるベクトル表現に変換 ○ 各IDに対応するベクトルが用意されたテーブルから、入力されたIDに対応する ベクトルを取り出す ○ Pytorch の torch.nn.Embedding などを利用 ID キャラID 2 0 0.6 0.1 -0.7 0.2 1 0.5 0.8 0.4 -0.2 2 -0.3 0.2 0.3 0.9 3 -0.8 -0.4 0.6 0.3 ⋮ © DeNA Co., Ltd. 数値の大きさもちょうど良く 入力サイズも自由に決められる -0.3 0.2 0.3 0.9 ⋮ 48