大規模開発のための LUMINOUS ENGINE の ログ分析と自動テスト
株式会社 Luminous Productions 岩﨑 浩 自己紹介
• 岩﨑 浩 Hiroshi Iwasaki
– Luminous Productions http://www.luminous-productions.com/ – プログラムセクション ディレクター
FINAL FANTASY XV MONSTER OF THE DEEP FINAL FANTASY XV © 2016 SQUARE ENIX CO., LTD. All Rights Reserved. MAIN CHARACTER DESIGN:TETSUYA NOMURA LOGO ILLUSTRATION:© 2016 YOSHITAKA AMANO
©2019 Luminous Productions CO.,LTD. Agenda
• LUMINOUS ENGINE 紹介 主に機能紹介 • ログ分析と自動テスト の概要 • ログ分析 15分(目標) • プレイログ 機械学習の話とか • 自動プレイ
©2019 Luminous Productions CO.,LTD. What’s
© 2016-2019 SQUARE ENIX CO., LTD. All Rights Reserved. ©2019 Luminous Productions CO.,LTD. MAIN CHARACTER DESIGN:TETSUYA NOMURA コリジョン C#スクリプト ナビメッシュ レベルエディタ
キャラツール グラフィックス テラインツール AI LUMINOUS ENGINEの構成
VFX アニメーション UI アセットブラウザ
アセットビルド
Mayaプラグイン DevOps © 2016-2019 SQUARE ENIX CO., LTD. All Rights Reserved. MAIN©2019 CHARACTER Luminous DESIGN Productions:TETSUYA CO.,LTD. NOMURA ログ分析と自動テスト 概要
©2019 Luminous Productions CO.,LTD. QA or デバッグで 大変な所
©2019 Luminous Productions CO.,LTD. QAで大変なところ • 繰り返すのが大変 – 必須ルート、サブクエストの通しプレイ – 全ハードウェアで同じ内容をチェック • 多数のパターンを網羅するのが大変 – 全部のアイテムを検証 – 様々なセーブデータが正常にロードできるかの確認 – マップ全域を、いろいろな時間、天候で、確認
©2019 Luminous Productions CO.,LTD. デバッグで大変なところ
• どこでバグっているか見つけるのが大変。 – ほとんどの場合、原因を見つける方が、直すより大変です。 • バグを再現するのが大変。 – 再現性が低い、とか。 – 再現する手順が大変、とか。
©2019 Luminous Productions CO.,LTD. 自動化したいこと
繰り返し 自動プレイ
パターンの網羅 スクリプト実行
発生した 原因の特定 バージョンの特定
再現 リプレイ
©2019 Luminous Productions CO.,LTD. ログ分析、自動プレイの全体像
ログホスト ログサーバー Web サーバー
開発機 スケジューラ
プレイログ
テストサーバーテストサーバー テストサーバーテストサーバー テストサーバー テストサーバー 自動プレイ
©2019 Luminous Productions CO.,LTD. ログ分析、自動プレイの全体像
ログホスト ログサーバー Web サーバー
開発機 スケジューラ
プレイログ
テストサーバーテストサーバー テストサーバーテストサーバー テストサーバー テストサーバー 自動プレイ
©2019 Luminous Productions CO.,LTD. Webサーバーの役割 • ログや自動テストの可視化です。
©2019 Luminous Productions CO.,LTD. Webサーバー の機能紹介
©2019 Luminous Productions CO.,LTD. テスト結果一覧
©2019 Luminous Productions CO.,LTD. テスト結果の一覧
©2019 Luminous Productions CO.,LTD. テストが失敗したバージョンを特定
©2019 Luminous Productions CO.,LTD. テストが失敗する原因となった更新を特定
誰のSubmit?
Submitのコメント
テストが失敗した時に、 どのSubmitからバグが起きるようになったか?がわかる。
©2019 Luminous Productions CO.,LTD. 各種、レポート
パフォーマンス スクショ(2D) クラッシュした場所
JIRAチケットの場所 スクショ(パノラマ) 現在プレイされている場所
©2019 Luminous Productions CO.,LTD. 過去の履歴
2019/6/15 2019/7/16 2019/8/5
すべてのログは、過去の情報も見られます。
©2019 Luminous Productions CO.,LTD. グラフィックスの単体テスト
©2019 Luminous Productions CO.,LTD. テストに失敗したときのレポート
Microsoft Teams での通知
前回と見た目が変わっていたら通知
©2019 Luminous Productions CO.,LTD. アセットごとのスクショ&履歴
©2019 Luminous Productions CO.,LTD. Webサーバー の仕組み
©2019 Luminous Productions CO.,LTD. 全体の図
influxdb
アプリケーション開発者が 記述可能
定義ファイル Python (JSON)
自前 カスタム Flask python JavaScript ブラウザ
©2019 Luminous Productions CO.,LTD. エディタ
定義ファイル カスタム (JSON) JavaScript
ブラウザ上で、 編集し、確認が可能。
©2019 Luminous Productions CO.,LTD. Webサーバーの機能、動画
©2019 Luminous Productions CO.,LTD. ログ分析、自動プレイの全体像
ログホスト ログサーバー Web サーバー
開発機 スケジューラ
プレイログ
テストサーバーテストサーバー テストサーバーテストサーバー テストサーバー テストサーバー 自動プレイ
©2019 Luminous Productions CO.,LTD. テストサーバーの役割
• いろいろなテストを実行します。
©2019 Luminous Productions CO.,LTD. テストの記述の言語
©2019 Luminous Productions CO.,LTD. テスト記述の言語 外部(ホストPC)で動作 実機で動作
C# C++ python C# with “Python for .NET” Visual Script
.NET Frameworkに アクセス可能な言語なら、 RPC 何でもOK
©2019 Luminous Productions CO.,LTD. エンジンのスクリプトサポート
LM_FUNCと書くと、 エンジンがサポートする 全てのスクリプトからアクセス可能になります。
こんな感じで使える。
©2019 Luminous Productions CO.,LTD. Pythonでの記述例
スクショを取って、 前回の結果と比較 の例
©2019 Luminous Productions CO.,LTD. ログ分析、自動プレイの全体像
ログホスト ログサーバー Web サーバー
開発機 スケジューラ
プレイログ
テストサーバーテストサーバー テストサーバーテストサーバー テストサーバー テストサーバー 自動プレイ
©2019 Luminous Productions CO.,LTD. スケジューラの役割
• テストを実行するタイミング、条件などを制御します。 • どのマシンで実行するか?なども制御します。
©2019 Luminous Productions CO.,LTD. スケジューラ
バックエンドは Jekinsを使っています。
実行条件などは、自前のスクリプトです。
©2019 Luminous Productions CO.,LTD. スケジューラの構成
Test A 実行命令
Test B 実行命令
実行命令
マスター Job Test C 前半実行命令 実行 Job テスト実行命令を 実際に 最小単位に分解 テストを実行する
Test C 後半実行命令
©2019 Luminous Productions CO.,LTD. マスター Jobの役割
例えば、デイリーテストを実行 という命令に対して、 ・何のテストを、 ・どのプラットフォームで、 ・どのマシンでテストするか? を分解し、 複数の実行Job に投げます。
©2019 Luminous Productions CO.,LTD. 実行Jobの役割
• 複数のマシンがアサインされています。 • JenkinsのLabelを使って、実行するマシンの制御を行っ ています。
©2019 Luminous Productions CO.,LTD. ログ分析、自動プレイの全体像
ログホスト ログサーバー Web サーバー
開発機 スケジューラ
プレイログ
テストサーバーテストサーバー テストサーバーテストサーバー テストサーバー テストサーバー 自動プレイ
©2019 Luminous Productions CO.,LTD. ログ サーバー&ホストの役割
• ログを永続的に記録します。
©2019 Luminous Productions CO.,LTD. ログの構成
実機 ログホスト 実機 influxdb
Local Server
©2019 Luminous Productions CO.,LTD. ログの取り方
• 各種スクリプトにコードを仕込むことで、ログが記録されま す。 • ログは、InfluxDB に永続的に記録されます。 – ある程度古いのは間引いて消しています。
©2019 Luminous Productions CO.,LTD. C#でログを取る例
Measurement(テーブル)の Performance.FPSに value, pos, angleというFieldで保存されます。
©2019 Luminous Productions CO.,LTD. DBに書き込んだ内容を、 先ほどのWebで可視化します。
©2019 Luminous Productions CO.,LTD. ログ分析、自動プレイの全体像
ログホスト ログサーバー Web サーバー
開発機 スケジューラ
プレイログ
テストサーバーテストサーバー テストサーバーテストサーバー テストサーバー テストサーバー 自動プレイ
©2019 Luminous Productions CO.,LTD. プレイログとは?
©2019 Luminous Productions CO.,LTD. リプレイログとは?
• ゲームをリアルタイムに記録する目的に特化したログです。 – 今まで紹介したInfluxDBで取るログとは別の仕組み です。(連携はできますが)
©2019 Luminous Productions CO.,LTD. プレイログ 開発の動機
©2019 Luminous Productions CO.,LTD. あの1フレに 何が起きたかを知りたい。
©2019 Luminous Productions CO.,LTD. プレイログ開発の動機
• コリジョンが抜けた。 • キャラが突然消えた。 • 扉を開けたら、いるはずのキャラがいなかった。 • 今、立つはずのないフラグが立っている。 その瞬間、 何が起きていたのかを知りたい!
©2019 Luminous Productions CO.,LTD. 後からじゃ遅い。 常に、全部 記録しておく!
©2019 Luminous Productions CO.,LTD. プレイログでできること。
©2019 Luminous Productions CO.,LTD. プレイログを使ったデバッグ
©2019 Luminous Productions CO.,LTD. プレイログの仕組み
色々な システム プレイログ プレイログ 色々な システム システム
ポインタを 自動で比較して、 登録しておきます。 変わった値を記録します。
©2019 Luminous Productions CO.,LTD. ログを取っているパラメータ
• エンジンが認識できるゲームのプロパティ全部。 – Visual Scriptの実行履歴やプロパティの変化 – ゲームオブジェクトのプロパティ • 座標、ゲームステートなど。 • パッド入力 • パフォーマンス、プロファイル情報 – スパイクが起きたフレームを分析するため • ユーザーが指定したパラメータ
©2019 Luminous Productions CO.,LTD. プレイログに登録するコードの例
• この例では、カメラのView Matrix, Projection Matrixのリプレイログを取る、と言う指定です。 • あとは、エンジンが勝手に毎フレーム、差分を記録し続け ます。
©2019 Luminous Productions CO.,LTD. プレイログで できること
©2019 Luminous Productions CO.,LTD. プレイログでできること
• 過去の値の確認 • 過去のフレームのプレビュー • 過去の任意のフレームからのリスタート • グラフによる履歴の可視化 • 保存/読み込み • 機械学習の入出力に使う (後述)
©2019 Luminous Productions CO.,LTD. ログ分析、自動プレイの全体像
ログホスト ログサーバー Web サーバー
開発機 スケジューラ
プレイログ
テストサーバーテストサーバー テストサーバーテストサーバー テストサーバー テストサーバー 自動プレイ
©2019 Luminous Productions CO.,LTD. 自動プレイに 期待すること
©2019 Luminous Productions CO.,LTD. 自動プレイの種類
自動で、今まで行われたことのないプレイをしてくれる。 発見的自動プレイ
過去に、一度行ったプレイを、繰り返し実行してくれる。 リプレイ的自動プレイ
今回はこちらの話
©2019 Luminous Productions CO.,LTD. リプレイ的 自動プレイの手法
©2019 Luminous Productions CO.,LTD. リプレイ的自動プレイの手法
• パッド入力を記録 • スクリプトで制御
パッド、と言っていますが、 もちろん、キーボードでもマウスでもタッチパネルでも同様です。
©2019 Luminous Productions CO.,LTD. パッド入力を記録するメリット
• 非常に高い汎用性 – ゲームの種類を問わず、入力を記録するリプレイは動 作します。 • リプレイのデータを用意するのが直感的 – 普通にプレイしたのを記録すれば良い。 • そのリプレイで再現したバグは、必ずユーザーも再現可能 – リプレイで行われた操作はパッドのみなので。
©2019 Luminous Productions CO.,LTD. パッド入力を記録するデメリット
• リプレイが安定しない – 何かの拍子に、少しでもずれると、使い物にならない。 • ⾧時間の通しプレイをパッド入力だけで、再現するには、 相当の仕込みが必要。 – ランダム要素の排除、エンジンとしての、結果の安定 性、など。
©2019 Luminous Productions CO.,LTD. スクリプトで制御のメリット
• ⾧時間の通しプレイも再現可能。 – 人力でスクリプトを組むので、がんばり次第で、何とで もなる。
©2019 Luminous Productions CO.,LTD. スクリプトで制御のデメリット
• 作るのが直感的ではない。 – プログラマ的作業。 • スクリプト制御特有のバグが起こりえる。 – 実際のユーザーのプレイとは若干違う。 • メンテコストが高い。 • 汎用性が低い。
©2019 Luminous Productions CO.,LTD. パッド入力のリプレイが 安定すれば 最高
©2019 Luminous Productions CO.,LTD. パッド入力のリプレイが安定しない理由
• 毎回、同じ結果にならないエンジン側の問題 • ランダム要素という、ゲーム側の問題
問題を取り除き、 維持し続けるのは、 難しい!
©2019 Luminous Productions CO.,LTD. リプレイがずれないように、がんばるのではなく、 一度ずれても、復帰できるように がんばった方が、よさそう。
©2019 Luminous Productions CO.,LTD. マシンラーニングで やってみる。
©2019 Luminous Productions CO.,LTD. 用語
記録したパッド入力を そのまま再生したリプレイ パッドリプレイ
マシンラーニングを使った リプレイ
ラーニングリプレイ
©2019 Luminous Productions CO.,LTD. ラーニングリプレイの結果
©2019 Luminous Productions CO.,LTD. マシンラーニング の中身
©2019 Luminous Productions CO.,LTD. ニューラルネットワークです。
以下、NN
©2019 Luminous Productions CO.,LTD. マシンラーニングの中身
• 何を学ばせるか?
色々な システム プレイログ プレイログ 色々な システム システム
これを使います。
©2019 Luminous Productions CO.,LTD. プレイログの中身
ゲームの状態を保存した データ列 ・・・
フレーム番号 N-2 N-1 N N+1 N+2 N+3 この中にはパッド入力も含まれています。
時系列のデータ
©2019 Luminous Productions CO.,LTD. ゲームの実際の進行
・・・
N-1のパッド Nのパッド N+1のパッド N-1 の状態 N の状態 N+1 の状態
©2019 Luminous Productions CO.,LTD. 何を学習するか?
今回の目的はQA用途のリプレイなので。 NNの出力は、パッド入力であるべき。 ここは? ここは、パッド入力
©2019 Luminous Productions CO.,LTD. 何を学習するか?
・・・
N-1のパッド Nのパッド N+1のパッド N-1 の状態 N の状態 N+1 の状態 このゲームの状態を NNの入力に使います。
©2019 Luminous Productions CO.,LTD. 何を学習するか?
解釈を変える Nのパッド
Nのパッド N の状態 N+1 の状態 N の状態 NとN+1の差分
©2019 Luminous Productions CO.,LTD. 何を学習するか?
Nのゲーム状態と N+1への差分 パッド入力
©2019 Luminous Productions CO.,LTD. 学習データ の用意の仕方
FPSが60の場合、1秒に60個の学習データが作れます。 プレイログ 早回しをすればもっと作れます。
先ほどの動画は、約20万のデータを学習させたものです プレイにして1時間くらいの分量。
普段のプレイログは使わず、 学習用の専用のプレイセットを用意しています。
©2019 Luminous Productions CO.,LTD. 学習データを作成している様子
©2019 Luminous Productions CO.,LTD. リプレイは何を保存するのか?
・・・
学習済みNNが既にあるとして。
N-1 の状態 N の状態 N+1 の状態 これが、今回のリプレイで 保存&再生につかうデータです。
©2019 Luminous Productions CO.,LTD. リプレイをどう再生するのか?
フレームNを再生する場合
フレームNの パッド入力を求める 保存されたN+1 と、 の 状態 の状態の差分
©2019 Luminous Productions CO.,LTD. ニューラルネットワークの構成
• 入力 • 出力 – キャラの座標 – スティックの傾き (4個) – キャラの早さ – ボタンの押し具合 (8個) – カメラの向き など
©2019 Luminous Productions CO.,LTD. ニューラルネットワークの構成(一例)
• 3層で、ノード数は64の全結合。 • Dropoutは0.2 • 正則化はL2 (0.001) • 活性化関数は、ReLU • 入力データは事前に正規化。
©2019 Luminous Productions CO.,LTD. 参考1
横軸:実際の値 縦軸:予測値
©2019 Luminous Productions CO.,LTD. 参考2
横軸:予測値と実際の値との差分 縦軸:数
©2019 Luminous Productions CO.,LTD. 参考3
青が、実際のデータ オレンジが、予測値 弱い入力は改善の余地あり
©2019 Luminous Productions CO.,LTD. 参考3
青が、実際のデータ オレンジが、予測値
©2019 Luminous Productions CO.,LTD. エンジンとの連携
プレイログ プレイの巻き戻し
パッドリプレイ プレイログ ゲーム システム ラーニングリプレイ
全部、プレイログのシステム経由で行います。 ・ゲームの値を取得して、NNに渡す ・NN結果をゲームに反映する など。
©2019 Luminous Productions CO.,LTD. エンジンとの連携
プレイログ プレイの巻き戻し
パッドリプレイ プレイログ ゲーム システム ラーニングリプレイ
一般化させるため、 値の意味を知った上での学習は、 極力排除しています。
©2019 Luminous Productions CO.,LTD. 取り扱い注意な値
向き(角度) sin(θ)とcos(θ)
ビットフラグ 各ビットばらばらに
ハッシュ値 連番に
©2019 Luminous Productions CO.,LTD. 向き(角度)
• 0度と360度が同じ、とニューラルネットワークは、 理解してくれないっぽい。 – 剰余算はうまく、学習してくれない印象。 – 良い方法があるのかも知れませんが・・・ 教えて偉い人!
©2019 Luminous Productions CO.,LTD. ラーニングリプレイ再生時の工夫
• 「距離」を元に、最も近い近隣フレームに自動で補正
ここで言う「距離」とは、3Dの座標の距離のことではないです。 多次元ベクトル間の、距離のことです。 また、直値で比較するのではなく、 正規化された値で「距離」を計算しています。
この値、全体の距離です。
©2019 Luminous Productions CO.,LTD. 近隣フレームへの自動補正
©2019 Luminous Productions CO.,LTD. リプレイとの「距離」
• リプレイが、正しく再生されているか?の判定にも使えま す。
正常な再生 何かあったけど、復活した 失敗
距離のグラフ
©2019 Luminous Productions CO.,LTD. パッドリプレイへの切り替え
・・・
リプレイデータには、 パッド入力の情報も含まれていますので、 パッドリプレイ ラーニングリプレイ フレーム番号 N-2 N-1 N N+1 N+2 N+3 をシームレスに切り替えられます。
時系列のデータ
©2019 Luminous Productions CO.,LTD. パッドリプレイ ラーニングリプレイの切り替え
©2019 Luminous Productions CO.,LTD. ゲームの状況が変わった時の リプレイについて
©2019 Luminous Productions CO.,LTD. 環境変わったときのリプレイ
©2019 Luminous Productions CO.,LTD. 検出はできる。
©2019 Luminous Productions CO.,LTD. 自動テストのログを、確認
©2019 Luminous Productions CO.,LTD. 部分的に リプレイを取り直す。
©2019 Luminous Productions CO.,LTD. リプレイを、部分的に、撮り直す
©2019 Luminous Productions CO.,LTD. 日々の運用のイメージ
サーバーの自動テストの結果を確認。
自動プレイが、ずれているのを発見!
ずれている、一部のリプレイを撮り直す。 自動化したくない?
©2019 Luminous Productions CO.,LTD. マシンラーニングで リプレイを撮り直そう!
©2019 Luminous Productions CO.,LTD. 強化学習を 使います。
©2019 Luminous Productions CO.,LTD. 強化学習を使う上での、2つの目標
できるだけ、一般化を維持するため、
最終出力は、パッド入力 ゲームの内容に依存する処理は極力しない。
©2019 Luminous Productions CO.,LTD. 強化学習の結果
©2019 Luminous Productions CO.,LTD. 強化学習の中身
• Actor-Critic (DDPG)を使っています。 • 出力された値をそのまま、パッド入力として使ってい ます。 • 毎フレ評価しています。
©2019 Luminous Productions CO.,LTD. 強化学習のおおざっぱな説明 学習
ある状態(state)で、ある行動(action)をした時に、 どんな状態(next state)になって、 どんな報酬(reward)がもらえるか? を学習していく
学習後 ある状態(state)でどんな行動(action)を取るのが良いか? を教えてくれるようになる
©2019 Luminous Productions CO.,LTD. 強化学習の超おおざっぱな説明 AIは超適当に行動するから、 その結果が「良い」か「悪い」か教えてね。 良い行動ばっかり取るようになるよ!
良い結果になったら、 それまでの過程の行動も、良かったと覚えるよ!
これがポイント
©2019 Luminous Productions CO.,LTD. 強化学習で使うパラメータ
状態 ゲーム状態 (state)
行動 パッド入力 (action)
報酬 ? (reward)
©2019 Luminous Productions CO.,LTD. 報酬(reward)について
• まずは、ゴールを決める。
これがゴール
現実 理想の位置
©2019 Luminous Productions CO.,LTD. AIに見えている世界
これがゴール
理想
現実
©2019 Luminous Productions CO.,LTD. DDPGのモデルについて
• Actor – 4層。16ノード – 活性化関数は、LeakyReLU • ReLUだと、dying ReLUが多発したので。 – 出力層の活性化に、sigmoid • linearにしていたら、出力(パッド入力)が数百、数千にすぐに 行ってしまい、その後、値が張り付いて動かないこと多発。 • 試しにsigmoidにしたら、改善したので、そのまま利用。 – 出力が0-1になるので、これを-1 ~ 1に変換して利用して います。
©2019 Luminous Productions CO.,LTD. DDPGのモデルについて
• Critic – 4層。32ノード – 活性化関数は、LeakyReLU
©2019 Luminous Productions CO.,LTD. DDPGの構成
• 入力 • 出力 – キャラの座標 – スティックの傾き (4個) – キャラの早さ – ボタンの押し具合 (8個) – カメラの向き (連続値) – キャラの向き ラーニングリプレイと同じ
©2019 Luminous Productions CO.,LTD. 試行 1
• ゴールしたときにのみ報酬(reward)を与える
©2019 Luminous Productions CO.,LTD. 試行1の結果 • この後、しばらく続けても、1度もゴールに到達す ることはありませんでした。
途中経過を評価しないとダメ。
©2019 Luminous Productions CO.,LTD. 試行 2
• 「距離」を報酬に利用 • 近くなったら、プラス報酬(reward) 遠くなったら、マイナス報酬(reward) • 毎フレ、「距離」に応じて、少しずつマイナス評価
©2019 Luminous Productions CO.,LTD. 試行2の結果
• 序盤は良さげですが、最終的には、ひたすら壁に向かって歩き続けると言う 結果になりました。
他の事例を見るに、もっとうまくいきそう?? 一度、シンプルな例で検証
©2019 Luminous Productions CO.,LTD. 単純な移動で検証
• actionは、パッド入力ではなく、「上下左右の4方向移動のみ(離散値)」 • 4方向、固定量、必ず移動する(壁との衝突は取ります) • 速度、加速、アニメーションなどは無視 • DQNで学習。
©2019 Luminous Productions CO.,LTD. 単純な移動の検証を受けて 報酬(reward)は、そんなに間違ってなさそう。 単純な移動版を見るに、細かい動きが多い。
パッド入力は、細かい入力の切り替えだと、 移動方向が変わらない。
乱数を60フレームに 1回のみ更新するように。
©2019 Luminous Productions CO.,LTD. 試行3
• 乱数を60フレームに1回のみ更新。(モデルの実行は毎フレーム)
©2019 Luminous Productions CO.,LTD. 試行3の結果
• かなり改善。 • ゴールに到達できたので、一旦OKではありますが、壁に向かって移動してい る時間が⾧いです。 • 何回か試しましたが、うまくいくか、うまくいかないかは、ランダム。 • もっと複雑な例だと、厳しそう。
壁に当たった時に減点したい。
©2019 Luminous Productions CO.,LTD. 壁に当たったときに減点したい でも、一般化は維持したい。 直近の30フレーム分 現在 過去30フレームで、 一番近い状況(status)がどれか? を求める。 ・・・ 直近、5フレーム以外が 一番近い場合は、減点。
古 新
©2019 Luminous Productions CO.,LTD. 壁に当たったときに減点したい
壁にぶつかっていないとき
時間的に近い物は、 時間的に遠い物は、 距離的にも近い 距離的にも遠い
©2019 Luminous Productions CO.,LTD. 壁に当たったときに減点したい
壁にぶつかっているとき
時間的に近い物も 時間的に遠い物も 全部近い
©2019 Luminous Productions CO.,LTD. 壁に当たったときに減点したい
過去30フレームの状況(status)が同じ 同じって何? 壁にぶつかったり、立ち止まったり、 何か、無駄なことをしている。
減点対象
©2019 Luminous Productions CO.,LTD. 「同じ」ってどう判定する?
直近の30フレーム分 ただの、数字の配列。 「同じかどうか?」の閾値を何にすれば良い?
一般化されたデータで、 ・・・ その閾値を決めるのは危険。
どっちのデータの方が近いか? の比較なら、データに依存せず可能。
©2019 Luminous Productions CO.,LTD. 壁にぶつかっていないケース
壁にぶつかっていないけど、 減点対象になってしまうケース。
こういったケースも、 減点してしまって良いと判断。
©2019 Luminous Productions CO.,LTD. 試行 4
• 近い過去に同じ状況(status)があれば、減点
©2019 Luminous Productions CO.,LTD. 試行4 の結果
• 壁に向かって歩く時間が減って、最終結果は改善。 • 学習時間は延びました。 • でも、最適化前でも、20万ステップで、1時間くらいなので、OK。
©2019 Luminous Productions CO.,LTD. 参考
横軸:エピソード数(1エピソードはおよそ1000ステップ) 縦軸:エピソードの報酬(reward)
©2019 Luminous Productions CO.,LTD. 次に、リプレイを、 どう更新するか?
©2019 Luminous Productions CO.,LTD. リプレイの更新
• 学習した強化学習のモデル自体をリプレイでは利用しません。 • 利用するには、もっと学習を収束させないと使えないので。 • たまたまのラッキーでも、とにかくゴールに1度でも到達できれば、その プレイを記録すれば十分です。 • ただ、あまりに遠回りだと微妙なので、一度ゴールに到達しても、しばら くは、学習を継続しています。
©2019 Luminous Productions CO.,LTD. リプレイの更新
• ゴールにたどり着いたら、スコア(累計の報酬reward)を評価。 • 最高スコアを更新していたら、リプレイを更新。
©2019 Luminous Productions CO.,LTD. まとめ
©2019 Luminous Productions CO.,LTD. ラーニングリプレイ の良い点
• 出力は「パッド入力」なので、応用範囲が広いです。 • ある程度ずれてても補正されます。 • 一部だけ、撮り直すと言うことができます。 • 状況が変わっても、ある程度は自動で復旧できます。
©2019 Luminous Productions CO.,LTD. ラーニングリプレイ の課題
• リプレイが【だいたい】再現できている、という感じなので、厳密 な動作を要求する場合は、現状、難しいです。 – 細い綱渡りをする場面、とか。 – もっとたくさんデータを集めて、もっと適切なモデルで学習さ せれば、もっと良くなると思います。 – ある場面だけ、パッドリプレイに切り替える、のもOK • 学習させるデータにはコツが必要。 – AIトレーニングを担当する人が必要かも。
©2019 Luminous Productions CO.,LTD. QAの近未来はこうなる(かも)
QA AI トレーナー テストの内容を決める。 色々な、お手本プレイを再現できるよう、 お手本プレイを作る。 AI を学習させる人
自動プレイシステム
ゲームのジャンルを問わず、 共通化された仕組み。
©2019 Luminous Productions CO.,LTD. ログ分析、自動プレイの全体像
ログホスト ログサーバー Web サーバー
開発機 スケジューラ
プレイログ
テストサーバーテストサーバー テストサーバーテストサーバー テストサーバー テストサーバー 自動プレイ
©2019 Luminous Productions CO.,LTD. Q&A
©2019 Luminous Productions CO.,LTD. http://www.luminous-productions.com/
©2019 Luminous Productions CO.,LTD. • Microsoft Teams はMicrosoft Corporationの商標または登録商標です。 • INFLUXDBはインフラックスデータ インクの商標または登録商標です。 • MAYAはオートデスク インコーポレイテッドの商標または登録商標です。 • その他掲載されている会社名、商品名は、各社の商標または登録商標です。
©2019 Luminous Productions CO.,LTD.