見出し画像

深層学習による自動プレイテスト

以下の記事を参考にして書いてます。

Human-Like Playtesting with Deep Learning

1. はじめに

Candy Crush Saga」は2018年10月の時点でプレーヤーに3,700以上のレベルを提供しており、毎週15個の新しいレベルがリリースされています。リリースされる全レベルは、バランスが取れていることを確認することが重要です。従来の確認方法の1つは、プレイテスターにフィードバックを求めることです。ただし、これには後ほど説明しますが制限があります。

この記事では、論文「Human-LikePlaytesting with DeepLearning」を紹介します。自動プレイテストで深層学習をどのように使用するかを説明し、人間ベースのプレイテストに対する人工知能の利点を示します。

2. 従来の方法とその制限

ゲームでのプレイテストは、プレーヤーの経験を理解するために使用され、様々な視点を持つことができます。「Candy Crush Saga」での新レベルの追加は、次の3つのプロセスに分けることができます。

(1) 作成:レベルデザイナーは、想像力と創造力を駆使して、新レベルを作成。
(2) バランス調整:レベルデザイナーは、他の人やプレイテスト会社に連絡して、新レベルが挑戦的であることを確認。多くの場合、レベルを微調整し、誰もが楽しめるようにする必要がある。
(3) リリース:世界中で利用可能にする。

通常、バランス調整に最も時間がかかりますが、デザイナーの創造的な才能を必要としません。そして、プレイテスト結果を待つのに多くの時間がかかります。新レベルを適切に調整には、プレイテスト結果が必要になり、残念ながら、人間のプレイテスターが新レベルをテストするのに1週間かかります。これにより、レベルデザイナーは、今週の新レベルの調整と次週の新レベルの作成の間でコンテキストを切り替え続ける必要があり、ストレスがかかります。

3. 自動プレイテストの利点

自動プレイテストの主要アイディアは、仮想プレイヤーを作成して、人間のプレイヤーと同じようにゲームをプレイするように学習させることです。クラウドで大規模に学習することにより、レベルデザイナーはプレイテストのフィードバックをより速く得ることができます。深層学習と「Google Cloud Platform」を使用したアプローチにより、待機時間を1週間から数分に短縮することができました。

新レベル作成のパイプラインを改善することで、いくつかのメリットと新しいユースケースが生まれました。

◎ より高品質なレベル作成
より高速なプレイテストにより、新レベルでの反復を増やすことができます。これは、レベルデザイナーがより迅速に改良できることを意味します。プレイテストはもう時間がかからないので、リリース直前でもフィードバックを取得して、全ての調整が意図した通りに機能することを確認することができます。最後に、レベルデザイナーは、1日通して同じコンテンツに集中できるため、創造性に悪影響を与えるコンテキストの切り替えを減らすことができます。

◎ より徹底的で安定したプレイテスト
人間のプレイテスターの問題の1つは、プレイすればするほどゲームが上達するということです。これはフィードバックにバイアスをもたらします。仮想プレーヤーはバージョン管理されたソフトウェアであるため、このようなバイアスを回避できます。その上、メジャーはゲームエンジンと直接通信するため、より正確で多様です。

◎ AQAバイプロダクト
コンテンツのバランス調整を目的とした自動プレイテストのプラットフォームを構築することで、開発者向けのAQAバイプロダクトを作成しました。プラットフォームを使用してレベルを探索し、バグを見つけることができます。また、新機能がゲームの残りの部分を壊さないことを確認することもできます。これは、ゲーム全体の品質を向上させるための強力なツールになります。

4. 仮想プレーヤーとAI

「Candy Crush Saga」をプレイして意味のあるフィードバックを得るには、仮想プレーヤーがゲームを理解して決定を下す必要があります。答える必要のある質問はシンプルです。

「人間のプレイヤーはこのゲームボードでどの行動を実行するか?」

この質問はシンプルですが、人工知能にとっては困難です。「Candy Crush Saga」を、AIが人間以上のパフォーマンスを発揮する「チェス」や「囲碁」などのボードゲームと区別する理由はいくつかあります。

・ゲームは非決定論的 : ゲームに関係するランダム性の原因はたくさんある。「チェス」や「囲碁」では、開始位置は常に同じであり、移動することでゲームに決定論的な結果がもたらされる。

・各レベルは一意 : スコアに到達したり、材料を集めたりするなど、実行できる目標の量は少ないが、異なるゲーム要素のセットによって管理される。 たとえば、コンベヤーベルト、ポータル、重力、レベルの形状は、レベルを通過するために必要な戦略に大きく影響する。

・状態空間は巨大 : 「Candy Crush Saga」の標準的なゲームボードは9x9グリッドで、囲碁の19x19グリッドよりもかなり小さい。ただし、ゲームの要素には100種類近くあり、囲碁(黒、白)やチェス(キング、クイーン、ルーク、ビショップ、ナイト、ポーン)よりも大きくなっている。さらに、ゲーム要素の動作は、それが相互作用する他のゲーム要素に依存する。その上、ゲーム要素は互いに積み重なる場合と積み重ならない場合があり、それらの動作も変更する。

どの行動を実行するかを決めるために、様々なアプローチが可能です。 以下は、私たちが試した3つの異なるテクニックと、その長所と短所になります。

◎ ヒューリスティック
「ヒューリスティック」は、実行時に高速で、プロジェクトの開始時に手軽に作成できます。また、統合テスト中に空白を埋めるのにも役立ちます。解決しようとしている問題が十分にシンプルであるならば、それらは良い中期的な解決策かもしれません。ただし、それらの精度は平凡であることが多く、埋め込まれた知識は開発者が重視するものに偏っています。さらに、長期間維持するのには非常に費用がかかります。

◎ モンテカルロ木探索(MCTS)
「モンテカルロ木探索」を使用すると、様々な可能性を探り、最良の結果に到達できるように事前に計画を立てることができます。「Candy Crush Saga」では、ゲーム後半でより良いコンボを作るために小さな動きをするのが一般的です。これは、単純なヒューリスティックよりも、プレイヤーが「Candy Crush Saga」をプレイする方法に近いものです。一方、シミュレーションに基づいているため、実行時の速度は遅く、最大1000倍になります。さらに、可能な限り最高の結果に到達することは、超人的プレイヤーを模倣することを意味します。プレイヤーの多くは超人的プレイヤーではないため、このアルゴリズムは最良の選択ではありません。

◎ 教師あり学習
「教師あり学習」は、実世界のデータから学習します。そのデータが実際のプレーヤーからのものである場合、「モンテカルロ木探索」が抱える超人的プレイヤーの問題を回避できます。また、コーディングが難しい「ヒューリスティック」を表現することもできます。さらに、「教師あり学習」は分類問題で役立つことが証明されています。ただし、適切に学習するには、多くのサンプルが必要です。

私達は、「教師あり学習」を本番で使用することにしました。しかし、「ヒューリスティック」はインフラの構築を開始するには十分以上のものであり、手元にデータがない場合には「モンテカルロ木探索」は良い解決方法となり得ることを念頭に置いておくと良いでしょう。

5. 教師あり学習による解決方法

まず、質問に注釈を付けて、分類問題に変えます。人間のプレイヤー(データソース)がこのゲームボード(入力)でどの行動(ラベル)を実行するかを予測したいと思います。 

画像1

「教師あり学習」の入力は、「Candy Crush Saga」のゲームボードです。ボードは安定状態であり、行動が実行されるのを待っています。そのため、画像分類と非常によく似た問題として扱えます。深層ニューラルネットワークは畳み込み層に大きく依存しています。ゲームにはマルコフ性があると仮定しました。必要な全ての情報はゲームの状態に含まれています。LSTMなどのシーケンスモデルは分類性能を向上させる可能性がありますが、そのほとんどは深層ニューラルネットワークによって既にキャプチャされています。また、ゲームは非決定論的であり、プレイ時間中に多くのランダム性があるため、シーケンスモデルの学習を妨げる多くのノイズが発生します。

ニューラルネットワークのアーキテクチャを深く掘り下げる前に、「入力」と「ラベル」がどのようにエンコードされているかを見てみます。

◎ 入力エンコーディング
「Candy Crush Saga」のゲームボードはRGB画像のように扱うことができますが、これは、ニューラルネットワークによる入力の理解がピクセルレベルであることを意味します。互いに近い黄色のピクセルの塊が黄色いキャンディーを表し、キャンディーが1つの原子的なゲーム要素であることを理解するには、多くのリソースと学習時間がかかります。

ゲームエンジンのおかげで、入力を異なる方法でエンコードし、深層学習モデルが既に知っていることを理解するために、リソースを浪費するのを防ぐことができます。入力を102個のバイナリチャネルを持つ9x9グリッドとして表しました。各チャネルは1種類のゲーム要素に関連付けられており、その要素が9x9グリッドの各セルに存在するかどうかを示します。入力の理解がゲーム要素レベルになり、学習がはるかに高速かつ効率的になりました。

画像2

◎ 行動エンコーディング
教師あり学習モデルを適切に学習するには、信頼できる情報源としてのラベルが必要です。行動とは何かを定義し、一貫した方法でラベルを付ける必要があります。ただし、学習データのゲームボードには、ボードに存在するゲーム要素に依存するため、使用可能な行動の固定数は含まれていません。

この問題に取り組むために、行動をゲームボード上の2つのセル間のスワップとして定義します。次に、これらのセル間のエッジのOneHotエンコードされたインデックスをラベルとして使用します。これにより、行動の定義は、特定のサンプルで使用可能な行動の数に依存しなくなります。

画像3

「Candy Crush Saga」には、スワップの方向が重要なエッジケースがいくつかあります。モデルの改善点の1つは、モデルを考慮して144ではなく288のラベルを使用するか、2番目の出力を使用してスワップの方向を予測することです。

万が一、ネットワークがゲームルールに反する行動を推奨した場合、実行時にそれを検出し、次に推奨される行動を選択できます。

6. ネットワークアーキテクチャと学習

私達の問題は画像分類に近いため、フィードフォワードの深層畳み込みネットワークアーキテクチャに焦点を当てました。上記のように、ネットワークの入力は102個のバイナリチャネルを持つ9x9グリッドですが、出力は144個のスワップインデックスの確率分布です。最高性能を実現するために、様々なアーキテクチャを試しました。それらと私達が到達したさまざまなパフォーマンスの詳細については、論文「Human-LikePlaytesting with DeepLearning」を参照してください。

画像4

分割前のデータセットは、約1,200万のサンプルで構成されています。ゲームサーバーから「Google Cloud BigQuery」に取り込まれます。PythonとTensorflowを使用してニューラルネットワークを実装し、「Google Cloud Machine LearningEngine」で学習しました。

7. 本番環境グレードの機械学習プロダクトの開発

本番環境グレードの機械学習プロダクトの開発は、簡単な作業ではありません。モデルの予測性能は満足のいくものですが、ソフトウェアおよびシステムエンジニアリングのベストプラクティスに従うことが重要です。これには、バージョン管理、監視、文書化などの従来の方法が含まれます。MLアプリの場合、学習データまたは推論データを準備してモデルにフィードするデータパイプラインにも適用されます。

機械学習に基づくサービスを長期的に実行可能にするためには、多くのコンポーネントが必要です。復元力のあるMLアプリには、アップストリームの成熟したデータパイプラインとダウンストリームの効率的なサービングパイプラインの両方が必要です。

画像5

幸いなことに、私達には大量のデータの処理に関して優れた歴史があります。今年の夏に発表されたように、データウェアハウスを「Google Cloud Platform」に移動しました。プレイテストのパイプラインもGCPにもプッシュすることを選択しました。

8. プレイテストのパイプライン

クラウドで実行する前に、MLモデルをローカルで1ゲームラウンドプレイしたいとします。パイプラインのコアは、次の3つのアプリで構成されています。

・game : Candy Crush Saga
・brain : 学習済いのMLモデル
・agent : gameとbrain間のブリッジ

gameとbrainの両方にREST APIを介してアクセスできるため、大きなシステムでの通信と統合を容易にすることができます。

プレイテストのセッション開始時に、agentはgameにレベルを送信します。次に、そのタスクは、gameの状態を取得し、brainに予測を求め、gameで推奨される行動を実行することです。ゲームラウンドが勝利または敗北で終了するまで、それが繰り返されます。プレイテストのセッション中に、agentは関心のある全てのメトリックを記録し、セッション終了時にそれらをエクスポートします。

画像6

なぜagentがあるのでしょうか。その役割は非常にシンプルで、brainやgameに簡単に組み込むことができるほどシンプルです。

実際には、第3の存在としてのagentは不可欠です。それはgameとbrainがお互いに、そしてパイプラインの残りの部分とのゆるやかな結合を持つことを可能にします。

9. API、Docker、Kubernetes

3つの異なるアプリが、異なるDockerイメージに埋め込まれています。コンテナとAPIを使用すると、実装の詳細が抽象化されます。これにより、パイプラインの様々なコンポーネントのプロトタイピング、バージョン管理、リリース、展開が容易になります。

コンテナにMLモデルがあると、ローカルでの使用が簡単になり、ゲームのQAセッション中にブラックボックスとして扱うことができるゲーム開発者にとって便利です。もう1つの利点は、MLモデルを別の決定アルゴリズムに置き換えることにした場合でも、ワークフローが変更されないことです。さらに、コンテナとAPIを使用すると、様々なゲームをパイプラインに統合する方法を統一できます。新しいゲームをサポートする機能が大幅に向上しています。

画像7

最後になりますが、DockerコンテナとSwaggerで定義されたAPIにより、統合テスト中にモックを簡単に操作できます。したがって、クラウドでスケーラブルなパイプラインの作業を開始するために、完全に学習されたMLモデルや完全に互換性のあるゲームは必要ありませんでした。

私達のゲームはランダム性を伴うため、プレイテストのメトリックを使用して信頼できる統計を計算できるようにするには、レベルごとに数百のゲームラウンドを並行して実行する必要があります。これを実現するために、GKEで「Kubernetes Deployments」を作成して水平方向にスケーリングします。

Kubernetesでは、デプロイ可能な最小のユニットはポッドと呼ばれ、1つ以上のコンテナが含まれています。エージェントとゲームは一緒にスケーリングするため、同じポッド定義にグループ化します。最初の展開でいくつかのレプリカが作成されます。brainはステートレスであり、そのライフサイクルはゲームやエージェントから独立しています。したがって、独自のポッド定義、デプロイメント、およびレプリカがあります。brainのポッドはKubernetesサービスを通じて公開され、agentのポッドがアクセスできるようにします。Kubernetesにbrainとagentの両方がいることで、Kubeflowを使用した強化学習への扉が開かれます。

brainポッドのスケーリングは、水平ポッドオートスケーラーによって処理されます。ただし、agentは、オーケストレーションサーバー(次のセクションで説明)によって「Kubernetes API」を介してスケーリングされます。これにより、オートスケーラーが提供するスケーリングよりもスマートで高速なスケーリングが可能になります。ただし、agentは、オーケストレーションサーバー(次のセクションで説明)によって「Kubernetes API」を介してスケーリングされます。これにより、オートスケーラーが提供するスケーリングよりもスマートで高速なスケーリングが可能になります。いくつかの利点には、たとえば、コールドスタートのより良い管理とゲーム間の優先順位付けが含まれます。通常、新しいレベルごとに数百のagentを実行します。

画像8

10. タスクキュー、オーケストレーション、アクセシビリティ

「Cloud PubSub」を使用して分散タスクキューを作成しました。各ゲームラウンドの試行のレベルとパラメータをagentに配信し、エクスポートしたプレイテストのメトリックを保存します。

リアルタイム分析プラットフォームであるRBEAは、これらの指標を集約して分析します。私達のデータサイエンティストは、通常のワークフローとあまり変わらずにメトリックを調査できます。また、パイプラインのバックエンドコードを変更することなく、データに関して多くの柔軟性を提供します。

様々なパイプラインコンポーネントをオンプレミスのオーケストレーションサーバと調整し、APIも提供します。レベルの設計者、データサイエンティスト、開発者は、クラウドでのリソース管理について心配することなく、自動プレイテストをスムーズに行うことができます。

パイプラインの展開は、「Deployment Manager」を使用して実行されます。スクリプト化され、バージョン管理されたデプロイメントプロセスがもたらす利点に加えて、私たちの主なユースケースは、新しいゲームをサポートしたり、開発と本番パイプラインを区別したりするパイプラインを作成することです。

11. おわりに

自動プレイテストのプラットフォームが人間ベースのプレイテストと比較して、どのような利点をもたらすかを見ました。私達のレベルデザイナーは、より良いコンテンツをリリースするために1日に数回繰り返すことができ、コンテキスト切り替えの影響を少なくすることができ、開発者はそれを回帰テストやデバッグに使用できます。

深層学習はこの新しいツールの中核であり、プレーヤーをシミュレートすることができます。クラウドで実行される分散インフラストラクチャに支えられており、シームレスにアクセスできる本番環境グレードのソフトウェアの品質に到達します。2018年10月の時点で、2500万回のゲームラウンドが仮想プレーヤーでプレイされています。

この記事が気に入ったらサポートをしてみませんか?