(57)【要約】【課題】格闘ゲームの学習装置および学習プログラム【解決手段】入力操作部（２０）と表示部（１２）と記憶部（３０）と制御部（１３）を備えた格闘ゲーム装置（１０）において、記憶部はゲームプログラム記憶部（３１ａ）と、学習プログラム記憶部（３２ａ）と、学習データ記憶部（３２ｂ，３２ｃ）を含む。制御部は、ゲームプログラムを実行して格闘ゲームに登場する複数のキャラクタの動画を生成して表示部に表示させるとともに、所定タイミング毎に入力操作部の操作データ（キーデータ）と画面状態データ（履歴データ）を収集し、学習プログラムを実行して画面状態データに基づいて深層学習の処理を行うことにより、学習に関する重みを最適化する。【選択図】図１
2019195512.tif 000002
【特許請求の範囲】
【請求項１】
プレイヤによって操作され、格闘ゲームに登場する少なくとも１つのキャラクタの動きを指示するための方向指示部と当該キャラクタの動作を指示するための動作指示部を含む入力操作部、
ゲームに関連する画像を表示するための表示部、
各種プログラムとデータを記憶するための記憶部、および
前記入力操作部による操作状態と前記記憶部に記憶されているプログラムに基づいて格闘ゲームに登場する複数のキャラクタの動きを制御する制御部を備え、
前記記憶部は、
複数のキャラクタの動きを制御するゲーム制御プログラムを記憶するゲームプログラム記憶部と、
プレイヤによって操作されるキャラクタの動きの履歴を取得するために、前記入力操作部の操作状態を深層学習し推論するための学習プログラムを記憶する学習プログラム記憶部と、
学習のためのデータを記憶する学習データ記憶部と、
前記表示部に表示させるためのゲーム画像データを更新的に記憶する表示用記憶部とを含み、
前記制御部は、
前記ゲーム制御プログラムを実行することによって、前記入力操作部の操作状態に応じて、格闘ゲームに登場する複数のキャラクタの動画と格闘ゲームに関連する画像を生成して前記表示用記憶部に更新的に書き込み、当該表示用記憶部の画像を読み出して前記表示部に表示させるとともに、所定タイミング毎に前記入力操作部の操作に応じてキャラクタの繰り出す技に関連する操作データと画面表示に関連する画面状態データを収集し、
前記学習プログラムを実行することによって、前記所定タイミング毎に収集された画面状態データを前記学習データ記憶部に書き込み、学習データ記憶部に記憶されている画面状態データに基づいて深層学習の計算処理を行うことによって学習結果の重みを最適化することを特徴とする、格闘ゲームの学習装置。
【請求項２】
前記格闘ゲームは、第１のキャラクタと第２のキャラクタの２つのキャラクタによって対戦するものであって、第１のキャラクタおよび第２のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタであり、
前記制御部は、前記ゲーム制御プログラムを実行するゲーム制御部と、前記学習プログラムを実行する学習制御部とを含み、
前記ゲーム制御部は、前記入力操作部の操作に応じて前記一方のキャラクタの動きを変化させかつ当該入力操作部の操作に関連する操作データと、前記第１のキャラクタおよび第２のキャラクタの画面表示状態に関連する画面状態データを前記学習制御部へ送り、
前記学習データ記憶部は、所定タイミング毎に送られるてくる操作データと画面状態データを先入れ先出し態様で記憶する画面状態履歴記憶部を含み、
前記学習制御部は、前記画面状態履歴記憶部に記憶されている一定数のタイミングの各画面状態データを、複数層からなるリカレント・ニューラル・ネットワークを用いて深層学習の計算処理を行ってキーデータを算出し、学習結果の重みを最適化する、請求項１に記載の格闘ゲームの学習装置。
【請求項３】
前記格闘ゲームは、前記第１のキャラクタおよび前記第２のキャラクタの何れか一方のキャラクタがプレイヤによって操作され、他方のキャラクタがプレイヤによる前記入力操作部の操作とは独立して動作するものであり、
前記学習制御部は、入力すべきキーのキーデータを前記ゲーム制御部へ送り、
前記ゲーム制御部は、学習結果の重みを反映したキーデータを学習制御部から受け取り、ゲーム制御プログラムの実行に関連して他方のキャラクタの動きを制御する、請求項２に記載の格闘ゲームの学習装置。
【請求項４】
前記学習データ記憶部は、画面状態データの履歴を一時的に記憶する画面状態履歴データ記憶部と、前記深層学習の処理結果として複数の層別の重みの計算結果を記憶する層別の重み記憶部とを含み、
前記制御部は、収集した画面状態データを前記画面状態履歴データ記憶部に書き込むとともに、画面状態履歴データ記憶部に記憶されている各画面状態データを第一層の入力として、複数の層においてそれぞれの入力に対応する重みを乗算して、層毎の出力を計算し、その出力を次の層の入力として計算する処理を逐次的に行い、最終層の出力として得たキーデータと、実際に押されていたキーの差分を用いて、層別の重みを最適化して前記層別の重み記憶部に記憶させる学習制御部を含む、請求項１に記載の格闘ゲームの学習装置。
【請求項５】
前記学習制御部は、現在の画面状態とその時点で最新の重みとを掛け合わせてプレイヤが押していたであろうキーを導き出すための推論処理部と、現在の画面状態とプレイヤが実際に押したキーを深層学習の重みに反映するための学習処理部を含み、
前記推論処理部は、収集した画面状態データを前記画面状態履歴データ記憶部に書き込むとともに、画面状態履歴データ記憶部に記憶されている各画面状態データを第一層の入力として、それぞれの層において重みを乗算して、層別の出力を算出し、その出力を次の層の入力として逐次的に計算することで、最終層の出力としてキーデータを得るものであり、
前記学習処理部は、前記推論処理部によって算出されたキーデータと、当該時刻に対応するプレイヤの操作によるキーデータに基づいて深層学習の重みを最適化する、請求項２ないし請求項４のいずれかに記載の格闘ゲームの学習装置。
【請求項６】
前記学習制御部は、深層学習の処理として、少なくとも１つの全対全結合層による計算処理と、複数のゲーテッド・リカレント・ユニット層による計算処理を実行するものであって、
前記全対全結合層による計算処理では、重み行列を入力のベクトルと乗算する処理を実行し、
前記各ゲーテッド・リカレント・ユニット層による計算処理では、複数のゲーテッド・リカレント・ユニット層のそれぞれにおいて、重みを使って忘れる量を計算し、重みを使って反映量を計算し、出力候補を計算する処理を順次行うことを特徴とする、請求項２ないし請求項５のいずれかに記載の格闘ゲームの学習装置。
【請求項７】
前記学習制御部は、前記各ゲーテッド・リカレント・ユニット層による計算処理として、前記出力候補の計算後に、選択的にドロップアウト処理をして出力することを特徴とする、請求項６に記載の格闘ゲームの学習装置。
【請求項８】
前記ゲーム制御プログラム記憶部は、プレイヤによる前記入力操作部の操作に応じた操作データを所定時間分だけ一時記憶する操作データ記憶部を含み、
前記制御部は、前記ゲーム制御プログラムの実行に関連して、前記入力操作部の操作に応じた操作データを前記操作データ記憶部に先入れ先出し態様で記憶させるとともに、前記学習に関する層別の重みを前記学習データ記憶部に記憶させる、請求項１ないし請求項５のいずれかに記載の格闘ゲームの学習装置。
【請求項９】
前記学習データ記憶部は、操作データと画面表示に関連する画面状態データを記憶する画面状態データ記憶部と、前記深層学習後の各層の重みを記憶する複数層分の重みデータ記憶部とを含み、
前記学習制御部は、ゲームプレイ中の操作データと画面表示に関連する画面状態データを先入れ先出し態様で前記画面状態データ記憶部に記憶させるとともに、前記深層学習後の各層の重みデータを対応する層別の前記重みデータ記憶部に記憶させる、請求項２ないし請求項５のいずれかに記載の格闘ゲームの学習装置。
【請求項１０】
前記格闘ゲームは、第１のキャラクタと第２のキャラクタの２つのキャラクタによって対戦するものであって、第１のキャラクタおよび第２のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタであり、
前記画面状態データは、少なくとも２つのキャラクタの位置データを含む、請求項１ないし請求項９のいずれかに記載の格闘ゲームの学習装置。
【請求項１１】
前記格闘ゲームは、第１のキャラクタと第２のキャラクタの２つのキャラクタによって対戦するものであって、第１のキャラクタおよび第２のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタであり、
前記画面状態データは、少なくとも、２つのキャラクタの場所に関する場所データと、２つのキャラクタの表示に関するキャラクタ表示関連データを含む、請求項１ないし請求項９のいずれかに記載の格闘ゲームの学習装置。
【請求項１２】
前記画面状態データは、２つのキャラクタの動きに関する速度データをさらに含む、請求項１１に記載の格闘ゲームの学習装置。
【請求項１３】
プレイヤによって操作され、格闘ゲームに登場する少なくとも１つのキャラクタの動きを指示するための方向指示部および当該キャラクタの動作を指示するための動作指示部を含む入力操作部と、ゲームに関連する画像を表示するための表示部と、各種プログラムおよびデータを記憶するための記憶部と、コンピュータとを備えた格闘ゲーム装置において、前記コンピュータによって格闘ゲームを実行させるためのプログラムであって、
前記コンピュータを、
前記入力操作部による操作と前記記憶部に記憶されているゲームプログラムに基づいて、格闘ゲームに登場する複数のキャラクタの動きを制御して複数のキャラクタの動画を生成するとともに、格闘ゲームに関連する画像を生成するゲーム制御部と、
プレイヤによって操作される前記入力操作部の操作状態に応じてキャラクタの繰り出す技に関連する操作データと画面表示に関連する画面状態データを収集して、深層学習の計算処理を行うことによって学習に関する重みを最適化して前記記憶部に記憶させる学習制御部として機能させるための、格闘ゲームの学習プログラム。
【請求項１４】
前記記憶部は、画面状態データを一時的に記憶する画面状態データ記憶部と、前記深層学習の処理として最適化した複数の層別の重みを記憶する層別の重み記憶部とを含み、
前記コンピュータを、前記画面状態データ記憶部に記憶されている画面状態データと重みを乗算してキーデータを計算し、前記画面状態データ記憶部に記録された実際に押されていたキーとの差分を用いて重みを最適化して前記層別の重み記憶部を更新する学習制御部として機能させる、請求項１３に記載の格闘ゲームの学習プログラム。
【請求項１５】
前記記憶部は、画面状態データの履歴を一時的に記憶する画面状態履歴データ記憶部と、前記深層学習の処理として最適化した複数の層別の重みを記憶する層別の重み記憶部とを含み、
前記コンピュータを、前記画面状態履歴データ記憶部に記憶されている各画面状態データを第一層の入力として、複数の層においてそれぞれの入力に対応する重みを乗算して、層毎の出力を計算し、その出力を次の層の入力として計算する処理を逐次的に行い、最終層の出力として得たキーデータと、実際に押されていたキーの差分を用いて、層別の重みを最適化して前記層別の重み記憶部に記憶させる学習制御部として機能させる、請求項１３に記載の格闘ゲームの学習プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、格闘ゲームの学習装置および学習プログラムに関し、特に家庭用ゲーム機又はアーケードゲーム機若しくは通信ゲーム機のようなビデオゲーム機の格闘ゲームにおいて、プレイヤによって操作されるキャラクタの操作状態を含む履歴データを収集して画面状態データに基づいて学習する、格闘ゲームの学習装置および学習プログラムに関する。
【背景技術】
【０００２】
２つのキャラクタが対戦する格闘ゲームが知られている。格闘ゲームでは、２つのキャラクタを別々のプレイヤが操作して対戦する２人プレイと、一方のキャラクタをプレイヤによる操作とし、他方のキャラクタをコンピュータによる操作とする、１人プレイ（コンピュータ対戦）の２種類の対戦の仕方（遊び方）がある。
従来の対戦格闘ゲームにおいて、プレイヤと対戦するためのキャラクタの動作をコンピュータで決定する際、その決定のための一連の条件を、プログラムによって明示的に記述していた。この方法を使って、プレイヤの位置と行動から、対戦相手として適切な行動を決定し、プレイヤがより心地よくゲームを継続できるような対戦相手を実現していた。また、ネットワークを介した他のプレイヤとの対戦は、双方のプレイヤが同時期にネットワークに接続する必要があった。
【０００３】
従来の格闘ゲームにおいて、プレイヤの操作に基づくキャラクタの攻撃動作に関する学習のための技術としては、特許文献１〜特許文献３が知られている。
特許文献１は、図１７とその説明（段落番号［０１４３］〜［０１５６］）及び段落番号［００１７］に記載のように、事前にプログラムで認識するようにした操作の頻度を元にプレイデータを記録している。これを基に、図１２に示すような基本思考パターンで行動種類を決定し、行動種類別の頻度に基づいて再現する行動を決定するものである。
【０００４】
特許文献２は、プレイヤがキャラクタを操作してゲーム中に取った行動の種類（プレイスタイル，キャラクタの行動，キャラクタの技等）ごとの頻度を計算して、図６に示すようなプレイヤパターン情報の構造に記録している（段落番号［００２３］〜［００２５］［００２８］及び［００７８］を参照）。
【０００５】
特許文献３は、請求項３にあるように、ＨＭＭ（Hidden  Marcov  Model；隠れマルコフモデル）の状態遷移確率を、各アクションについてのエージェント（キャラクタと同義）の状態遷移確率に拡張した拡張ＨＭＭをモデルに採用している。そして、学習部がBaum-Welchの再推定法に従い、各アクションについての状態遷移確率と観測確率とを推定することにより、拡張ＨＭＭの学習を行っている。
しかし、ＨＭＭを用いた学習は、一般的に、少ないデータから学習できる利点のある反面、長期的な時系列のデータがあっても、事前に決定した長さのデータから次の行動を決定するという欠点がある。具体的には、学習を開始する前に状態数を決定しておく必要があり、この状態数は図２のようにゲーム内容から推定できる場合以外に、どのような状態にすれば良いのかを判断することが難しい。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−１５６４０５号公報
【特許文献２】特開２００４−０２４３６０号公報
【特許文献３】特開２０１３−０５５０５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従来のプログラム的に記述する技術は、対戦相手が人間の場合の行動と異なり、対戦相手の行動としては不自然な部分があった。このため、プレイヤも積極的にコンピュータの対戦相手と戦おうとすることが少なかった。また、プログラム開発のために、キャラクタの行動を決定するための条件を全て列挙する必要があり、開発に多大な時間がかかり、プログラムの誤り（バグ）も生じ易かった。
【０００８】
特許文献１の技術は、ゲームの局面や画面状況に応じて変化する人間の行動を再現することはできない問題点があった。
特許文献２の技術は、事前にプログラムで検出しているパターンしか記録できないことに加えて、どのようなゲーム状況の下で特定の操作を行ったかを記録することができない。そのため、ゲーム状況（又は画面状況）に関連する行動の種類に応じたゲーム画面を再現できない問題点があった。
また、特許文献３のＨＭＭを用いた学習は、一般的に、少ないデータから学習できる利点のある反面、長期的な時系列のデータがあっても、事前に決定した長さのデータから次の行動を決定するという欠点がある。具体的には、学習を開始する前に状態数を決定しておく必要があり、この状態数は図２のようにゲーム内容から推定できる場合以外に、一般的な決定方法がないという問題点があった。
【０００９】
それゆえに、この発明の主たる目的は、事前に学習させた結果を使用することによって、より人間らしい行動をコンピュータ相手の対戦でも実現し得る、格闘ゲームの学習装置及び学習プログラムを提供することである。
【００１０】
この発明の他の目的は、プレイヤのキャラクタ操作の行動に基づいて学習することにより、キャラクタの動きを子細にプログラムで決めるためのプログラム開発に要する時間の短縮化を図れる、格闘ゲームの学習装置及び学習プログラムを提供することである。
【課題を解決するための手段】
【００１１】
第１の発明は、入力操作部（２０、実施例との対応を示せばコントローラ２０Ａ。以下括弧内の技術用語は同様）と、表示部（液晶表示器１２）と、記憶部（メモリ３０）と、制御部（処理ユニット又はＣＰＵ１３）とを備えた格闘ゲームの学習装置である。
入力操作部は、プレイヤ（遊技者）によって操作され、格闘ゲームに登場する少なくとも１つのキャラクタの動きを指示する方向指示部（方向スイッチ２２，ジョイスティック２４）と当該キャラクタの動作を指示する動作指示部（押ボタン２３ａ〜２３ｄ）を含む。表示部は、ゲームに関連する画像（又は映像）を表示するものである。記憶部は、各種プログラムを記憶する。制御部は、入力操作部による操作と記憶部に記憶されているプログラムに基づいて格闘ゲームに登場する複数のキャラクタの動きを制御する。
さらに、記憶部は、複数のキャラクタの動きを制御するゲーム制御プログラムを記憶するゲーム制御プログラム記憶部（記憶領域３１ａ）と、プレイヤによって操作されるキャラクタの動きの履歴を取得するために入力操作部の操作状態を深層学習し推論するための学習プログラムを記憶する学習プログラム記憶部（記憶領域３２ａ）と、学習データを更新的に記憶する学習データ記憶部（記憶領域３２ｂ，３２ｃ）と、表示部に表示させるためのゲーム画像（又はゲーム映像）データを更新的に記憶する表示用記憶部（表示用メモリ３３）とを含む。
制御部（ＣＰＵ１３）は、入力操作部の操作状態に応じて、ゲーム制御プログラムを実行することによって、格闘ゲームに登場する複数のキャラクタの動画を生成するとともに、格闘ゲームに関連する画像（例えば、背景画像，パワー，技に関する表示，得点，ライフ等の情報）を生成して表示部に表示させる。さらに、制御部（ＣＰＵ１３）は、学習プログラムを実行することによって、入力操作部の操作状態に応じてキャラクタの繰り出す技に関連する操作データと画面表示に関連する画面状態データを学習データ記憶部に書き込み、学習データ記憶部に記憶されている画面状態データに基づいて深層学習の処理を行うことによって学習に関する重みを最適化する。
【００１２】
第１の発明によれば、事前に学習させた結果を使用することによって、より人間らしい行動をコンピュータ相手の対戦でも実現することができる、格闘ゲームの学習装置が得られる。
【００１３】
第２の発明は、第１の発明に係る格闘ゲームの学習装置であって、格闘ゲームが第１のキャラクタと第２のキャラクタの２つのキャラクタによって対戦するものであって、第１のキャラクタおよび第２のキャラクタの少なくとも一方がプレイヤ（遊技者）によって操作されるキャラクタである。制御部がゲーム制御プログラムを実行するゲーム制御部と学習プログラムを実行する学習制御部とを含む。
ゲーム制御部は、入力操作部の操作に応じて一方のキャラクタの動きを変化させかつ当該入力操作部の操作に関連する操作データと、第１のキャラクタおよび第２のキャラクタの画面表示状態に関連する画面状態データを学習制御部へ送る。
学習データ記憶部は、所定タイミング毎に送られるてくる操作データと画面状態データを先入れ先出し態様で記憶する画面状態履歴記憶部を含む。
そして、学習制御部は、画面状態履歴記憶部に記憶されている一定数のタイミングの各画面状態データを、複数層からなるリカレント・ニューラル・ネットワーク（ＲＮＮ）を用いて深層学習の計算処理を行ってキーデータを算出し、画面状態履歴記憶部のキーデータとの差分を用いて重みを最適化するものである。
第２の発明によれば、複数層からなるリカレント・ニューラル・ネットワーク（ＲＮＮ）を用いて深層学習の計算処理を行うことができ、重みを最適化することができる。
【００１４】
第３の発明は、第２の発明に係る格闘ゲームの学習装置おいて、格闘ゲームが第１のキャラクタおよび第２のキャラクタの何れか一方のキャラクタがプレイヤによって操作され、かつ他方のキャラクタがプレイヤによる入力操作部の操作とは独立して動作するものである。
そして、学習制御部は、入力すべきデータを前記ゲーム制御部へ送る。ゲーム制御部は、学習結果の重みを反映したキーデータを学習制御部から受け取り、ゲーム制御プログラムの実行に関連して他方のキャラクタの動きを制御するものである。
この第３の発明によれば、学習結果をゲームに反映することができ、他方のキャラクタを制御するためのプログラム開発を簡略化でき、プログラム開発時間の短縮化とプログラマの労力の軽減を図ることができる。
【００１５】
第４の発明は、第１の発明に係る格闘ゲームの学習装置において、学習データ記憶部が画面状態データの履歴を一時的に記憶する画面状態履歴データ記憶部と、深層学習の処理として最適化した複数の層別の重みを記憶する層別の重み記憶部とを含む。
制御部は、収集した画面状態データを画面状態履歴データ記憶部に書き込むとともに、画面状態履歴データ記憶部に記憶されている各画面状態データと第１の層の入力として、複数の層においてそれぞれの入力と対応する重みを乗算して、層別の出力を計算し、次の層の入力とする処理を逐次的に行い、最終層の出力としてキーデータを算出し、画面状態履歴データ記憶部のキーデータとの差分を用いることにより層別の重みを最適化して層別の重み記憶部に記憶を更新させる学習制御部を含む。
この第４の発明によれば、層別の重みデータを算出することによって、より一層人間らしい行動をコンピュータ相手の対戦でも実現することができる。
【００１６】
第５の発明は、第２の発明ないし第４の発明のいずれかに係る格闘ゲームの学習装置において、学習制御部は、現在の画面状態と最適化済みの重みと掛け合わせてプレイヤが押していたであろうキーを導き出すための推論処理部と、現在の画面状態とプレイヤが実際に押したキーを深層学習の重みに反映するための学習処理部を含む。
推論処理部は、収集した画面状態データを画面状態履歴データ記憶部に書き込むとともに、画面状態履歴データ記憶部に記憶されている各画面状態データを第１層の入力として、それぞれの層において重みと乗算して、層別の出力を算出する。この出力を次の層の入力として、それぞれの層の出力を逐次的に出力し、最終層の出力が全体の出力であるキーデータとなる。
学習処理部は、推論処理部によって算出された層別のキーデータと、当該時刻に対応するキーデータに基づいて深層学習の重みを最適化する。
この第５の発明によれば、推論処理部と学習処理部によって、操作データ（又はキーデータ）に基づいて深層学習の重みを最適化し、人間が画面状態に応じて入力したキーデータの性質を反映したキーデータを計算することができる。
【００１７】
第６の発明は、第２の発明ないし第５の発明の何れかに係る格闘ゲームの学習装置において、学習制御部が深層学習の処理として、少なくとも１つの全対全結合層による計算処理と、複数のゲーテッド・リカレント・ユニット（ＧＲＵ）層による計算処理を実行するものである。
全対全結合層による計算処理では、重み行列を入力のベクトルと乗算する処理を実行する。各ゲーテッド・リカレント・ユニット層による計算処理では、複数のゲーテッド・リカレント・ユニット層のそれぞれにおいて、重みを使って忘れる量を計算し、重みを使って反映量を計算し、出力候補を計算する処理を順次行うことを特徴とする。
第６の発明によれば、少なくとも１つの全対全結合層と複数のゲーテッド・リカレント・ユニット層による計算処理を実行することによって、出力候補を計算することにより、より人間らしい行動をコンピュータ相手の対戦でも実現することができる。
【００１８】
第７の発明は、第６の発明に係る格闘ゲームの学習装置において、学習制御部が各ゲーテッド・リカレント・ユニット層による計算処理として、出力候補の計算後に、選択的にドロップアウト処理をして出力する。
第７の発明によれば、選択的にドロップアウト処理をすることにより、より人間らしい行動をコンピュータ相手の対戦でも実現することができる。
【００１９】
第８の発明は、第１の発明ないし第５の発明のいずれかに係る格闘ゲームの学習装置において、ゲーム制御プログラム記憶部はプレイヤによる入力操作部の操作に応じたキーデータを所定時間分だけ一時記憶するキーデータ記憶部を含む。
制御部は、ゲーム制御プログラムの実行に関連して、入力操作部の操作に応じたキーデータをキーデータ記憶部に先入れ先出し態様で記憶させるとともに、学習によって最適化した層別の重みを学習データ記憶部（又は層別の重み記憶部）に記憶させる。
第８の発明によれば、相手が早い動きを繰り返しているなら行動を変えるといった、時系列での状況変化に応じた意思決定を学習に反映することができる。
【００２０】
第９の発明は、第１の発明ないし第５の発明のいずれかに係る格闘ゲームの学習装置において、学習データ記憶部が操作データと画面表示に関連する画面状態データを記憶する画面状態データ記憶部と、深層学習後の各層の重みを記憶する複数層分の重み記憶部とを含む。
学習制御部は、ゲームプレイ中のキーデータと画面表示に関連する画面状態データを先入れ先出し態様で画面状態データ記憶部に記憶させるとともに、深層学習後の各層の重みを対応する層別の前記重み記憶部に記憶させる。
第９の発明によれば、相手の時系列での行動変化だけでなく、自分が同じ攻撃を繰り返したら、次は同じ攻撃を繰り返さないといった、自分の履歴に応じた意思決定を学習結果に反映することができる。
【００２１】
第１０の発明は、第１の発明ないし第９の発明のいずれかに係る格闘ゲームの学習装置において、格闘ゲームが第１のキャラクタと第２のキャラクタの２つのキャラクタによって対戦するものであって、第１のキャラクタおよび第２のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタである。そして、画面状態データは、少なくとも２つのキャラクタの位置データを含むデータである。
第１０の発明によれば、少なくとも２つのキャラクタの位置データを含む画面状態データを用いて、深層学習の重みを反映したキーデータを計算することができる。
【００２２】
第１１の発明は、第１の発明ないし第９の発明のいずれかに係る格闘ゲームの学習装置において、格闘ゲームが第１のキャラクタと第２のキャラクタの２つのキャラクタによって対戦するものであって、第１のキャラクタおよび第２のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタである。画面状態データは、少なくとも、２つのキャラクタの場所に関する場所データと、２つのキャラクタの表示に関するキャラクタ表示関連データとを含む。
第１１の発明によれば、画面状態データとして、少なくとも、２つのキャラクタの場所に関する場所データと、２つのキャラクタの表示に関するキャラクタ表示関連データとを用いて、深層学習の重みを反映したキーデータを計算することができる。
【００２３】
第１２の発明は、第１１の発明に係る格闘ゲームの学習装置において、画面状態データは、２つのキャラクタの動きに関する速度データをさらに含む。
第１２の発明によれば、画面状態データとして、少なくとも、２つのキャラクタの場所に関する場所データおよび２つのキャラクタの表示に関するキャラクタ表示関連データに加えて、さらに２つのキャラクタの動き関する速度データを用いて、深層学習の重みを反映したキーデータを計算することができる。
【００２４】
第１３の発明は、プレイヤ（遊技者）によって操作され、格闘ゲームに登場する少なくとも１つのキャラクタの動きを指示するための方向指示部（実施例との対応関係を示せば、方向スイッチ２２又はジョイスティック２４）および当該キャラクタの動作を指示するための動作指示部（押ボタン２３ａ〜２３ｄ）を含む入力操作部（２０，２０Ａ）と、ゲームに関連する画像を表示するための表示部（１２）と、各種プログラムおよびデータを記憶するための記憶部（３０）と、コンピュータ（１３）とを備えた格闘ゲーム装置（１０）において、コンピュータによって格闘ゲームを実行させるための学習プログラムである。
すなわち、コンピュータを、ゲーム制御部と学習制御部として機能させる格闘ゲームの学習プログラムである。
ゲーム制御部は、入力操作部による操作と記憶部に記憶されているゲームプログラムに基づいて、格闘ゲームに登場する複数のキャラクタの動きを制御して複数のキャラクタの動画を生成するとともに、格闘ゲームに関連する画像（例えば、背景画像や、パワー，技に関する表示，得点，ライフ等の情報）を生成する。
学習制御部は、プレイヤによって操作される入力操作部の操作状態に応じてキャラクタの繰り出す技に関連する操作データと画面表示に関連する画面状態データを収集して、深層学習の計算処理を行うことによって学習に関する重みを最適化して記憶部に記憶させる。
第１３の発明によれば、事前に学習させた結果を使用することによって、より人間らしい行動をコンピュータ相手の対戦でも実現することのできる、学習プログラムが得られる。
【００２５】
第１４の発明は、第１３の発明に係る格闘ゲームの学習プログラムであって、記憶部が画面状態データを一時的に記憶する画面状態データ記憶部と、深層学習の処理として複数の層別の重みの計算結果を記憶する層別の重み記憶部とを含む。
そして、コンピュータを、画面状態データ記憶部に記憶されている画面状態データを第１層の入力として、それぞれの層において入力と重みとを乗算して層別の出力を計算し、その出力を次の層の入力とする計算を逐次的に各層に対して行うことで、最終層の出力としてキーデータを算出し、そのキーデータと画面状態データ記憶部に記憶されているキーデータとの差分を用いて層別の重み記憶部に記憶を更新させる学習制御部として機能させる。
第１４の発明によれば、請求項１３と同様の効果が奏される。
【００２６】
第１５の発明は、第１３の発明に係る格闘ゲームの学習プログラムであって、
記憶部が画面状態データの履歴を一時的に記憶する画面状態履歴データ記憶部と、深層学習の処理として最適化した複数の層別の重みを記憶する層別の重み記憶部とを含む。
そして、コンピュータを、画面状態履歴データ記憶部に記憶されている各画面状態データを第一層の入力として、複数の層においてそれぞれの入力に対応する重みを乗算して、層毎の出力を計算し、その出力を次の層の入力として計算する処理を逐次的に行い、最終層の出力として得たキーデータと実際に押されていたキーの差分を用いて、層別の重みを最適化して層別の重み記憶部に記憶させる学習制御部として機能させる。
この第１５の発明によれば、層別の重みデータを算出することによって、より一層人間らしい行動をコンピュータ相手の対戦でも実現することができる、学習プログラムが得られる。
【発明の効果】
【００２７】
この発明の格闘ゲームの学習装置によれば、事前に学習させた結果を使用することによって、より人間らしい行動をコンピュータ相手の対戦でも実現することができるという、特有の効果が奏される。
【００２８】
また、この発明によれば、プレイヤのキャラクタ操作の行動に基づいて学習することにより、キャラクタの動きを子細にプログラムで決めるためのプログラム開発に要する時間の短縮化を図ことができるという効果が奏される。
【図面の簡単な説明】
【００２９】
【図１】この発明の一実施例の格闘ゲーム装置のブロック図である。
【図２】格闘ゲーム装置に用いられる入力操作部の一例のコントローラの外観図である。
【図３】メモリの記憶領域（メモリマップ）の一例の図解図である。
【図４】格闘ゲームの画面の表示例を示す図である。
【図５】格闘ゲームに登場するあるキャラクタの技の種類と操作方法を図解的に示した図である。
【図６】技の他の例の「天地返し」の操作例とキャラクタの動きの表示例を示す図である。
【図７】技のその他の例の「超受け身」の操作例とキャラクタの動きの表示例を示す図である。
【図８】深層学習のためにデータ収集する際の履歴データの項目（種類）の詳細を図解的に示した図である。
【図９】この発明の一実施例の格闘ゲームの全体の制御（メインスレッドと学習・推論スレッド）を示すフローチャートである。
【図１０】メインスレッドと学習スレッドのやりとりのタイムチャートを示す。
【図１１】プレイヤの操作状態を学習するときのメインスレッドから学習スレッドへ送るデータを図解的に示した図である。
【図１２】学習結果を利用してキャラクタを動かすときのメインスレッドと学習・推論スレッド間のやり取りするデータを図解的に示した図である。
【図１３】学習・推論スレッドの動作原理を説明するための図解図である。
【図１４】学習・推論スレッド中の「各層の重みデータを使って出力を計算する処理」の一例であって、データの流れから見たブロック図である。
【図１５】全体フローにおける学習・推論スレッド中の「各層の重みデータを使って出力を計算する処理」の他の例のフローチャートである。
【図１６】学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理」中の「全対全結合の処理」の一例の回路図である。
【図１７】学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理」中の「全対全結合の処理」の他の例のフローチャートである。
【図１８】学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理」中の「ＧＲＵのある一層の処理」の一例の回路図である。
【図１９】学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理」中の「ＧＲＵのある一層の処理」の他の例のフローチャートである。
【図２０】学習・推論スレッドにおける「重み更新処理」の詳細なフローチャートである。
【発明を実施するための形態】
【００３０】
以下、この発明の一側面における実施の形態に基づいて説明する。但し、この発明の範囲を逸脱することなく、種々の改良や変形を行うことができることは言うまでもない。すなわち、この発明の実施にあたって、実施形態に応じた具体的構成を適宜採用してもよい。
【００３１】
図１は、この発明の一実施例の格闘ゲーム装置のブロック図である。
図１を参照して、この発明の一実施例の格闘ゲーム装置として用いられる情報処理装置の外観構成と、システム構成を説明する。
【００３２】
この実施例の格闘ゲーム装置１０は、家庭用テレビゲーム機，パーソナルコンピュータ（以下「パソコン」と略称）又は携帯ゲーム機情報通信端末機若しくはアーケードゲーム機（業務用ビデオゲーム機）等の情報処理装置と、格闘ゲームのための各種プログラムを含んで構成される。
【００３３】
より具体的には、格闘ゲーム装置１０は、ゲーム機本体（図示では、外観図を省略し一点鎖線のブロックで示す）１１に、中央処理ユニット（ＣＰＵ）１３と、ハードディスク（ＨＤＤ）１４と、通信制御部１５と、半導体メモリ等の記憶装置（又はメモリ）３０を内蔵して構成される。
ゲーム機本体１１には、入力操作部（家庭用テレビゲーム機の場合はコントローラ）２０が接続されるとともに、家庭用テレビ受像機等の液晶表示器（表示部）１２が接続される。
そして、中央処理ユニット（以下「ＣＰＵ」と略称する）１３には、データバス１６ａ，１６ｂ，１６ｃ，１６ｄ，１６ｅを介して、対応する液晶表示器１２，メモリ３０，入力操作部２０の一例のコントローラ２０Ａ，ハードディスク１４，通信制御部１５が接続される。
【００３４】
通信制御部１５は、外部のネットワーク網１７に接続され、ＣＰＵ１３から供給される送信データを並列−直列変換しかつ宛先データを付加してネットワーク網１７へ送信するとともに、ネットワーク網１７から送信された受信データを直列−並列変換してＣＰＵ１３に与える。
【００３５】
図２は、格闘ゲーム装置に用いられる入力操作部の一例のコントローラの外観図である。
コントローラ２０Ａは、ハウジング２１を含む。ハウジング２１は、上面が平坦な中央部２１ａの左右に、グリップ状の左把持部２１ｂと右把持部２１ｃを形成して構成される。
中央部２１ａと左把持部２１ｂの連結部分には、４つの押点を有する十字型の方向スイッチ２２が装着される。中央部２１ａと右把持部２１ｃの連結部分には、４つの押ボタン２３ａ〜２３ｄが十字形（上下左右の４方向）に配置して装着される。
また、必要に応じて、中央部２１ａと左把持部２１ｂの連結部分の基部（方向スイッチ２２の斜め右下方）には、アナログジョイスティック（以下「ジョイスティック」と略称する）２４が傾動自在に装着される。中央部２１ａと右把持部２１ｃの連結部分の基部（押ボタン２３ｃ，２３ｄの斜め左下方）には、ジョイスティック２５が傾動自在に支持される。
【００３６】
方向スイッチ２２，ジョイスティック２４及びジョイスティック２５は、キャラクタの移動方向の指示、又は技の種類を指定するための操作に用いられる。具体的には、方向スイッチ２２は、上下左右の４方向に押点を有し、上下左右の何れかの押点を押すことによって、上下左右の何れかの方向を指示するための入力を行うものである。また、ジョイスティック２４及びジョイスティック２５は、上下左右の４方向と、４方向の中間となる右斜め上（又は右上），右斜め下（又は右下），左斜め下（又は左下），左斜め上（又は左上）の４方向を加えた８方向の入力が可能である。
なお、方向スイッチ２２を用いて８方向を指示する場合は、上と右の押点を同時に押して「右斜め上」、右と下の押点を同時に押して「右斜め下」、下と左の押点を同時に押して「左斜め下」、左と上の押点を同時に押して「左斜め上」のそれぞれの入力（斜め４方向）を指示することもできる。
【００３７】
一方、押ボタン２３ａ〜２３ｄは、その上面にアルファベットのＡＢＣＤ又は△〇×□等の記号が付されて、ゲームにおけるキャラクタの動作（動き又は行動）を指示するために用いられる。例えば、この実施例の格闘ゲームでは、押ボタン２３ａ〜２３ｄには、弱パンチ，強パンチ，弱キック，強キックの機能が割り当てられる。
【００３８】
ゲームプレイする場合、プレイヤは、左手で左把持部２１ｂを握りかつ右手で右把持部２１ｃを握った状態で、左手親指で方向スイッチ２２又はジョイスティック２４を操作し、右手親指で押しボタン２３ａ〜２３ｄ又はジョイスティック２５を操作する。
本願の格闘ゲームでは、方向スイッチ２２又はジョイスティック２４を何れかの同じ方向に連続して押し続けたときにキャラクタの移動方向を指示する。一方、方向スイッチ２２又はジョイスティック２４を複数の方向に素早く傾動させた（例えば、右横，右斜め下，下等を組み合わせて入力した）後で押ボタン２３ａ〜２３ｄの１つ又は複数を押したときは、技の種類を指定する入力を行うものである。
【００３９】
他にも、中央部２１ａの上面の空いたスペース又は上辺の左右の側面に、各種のスイッチ又はボタンが装着されるが、本願の格闘ゲームでは密接な関係が無いため、詳細な説明を省略する。
【００４０】
なお、情報端末装置が携帯ゲーム機又はスマートフォンの場合はコントローラ２０Ａに代えて入力操作部の他の例としてタッチパネルが用いられ、パソコンの場合はキーボードとマウスが用いられ、業務用ビデオゲーム機の場合はジョイスティックと押ボタンが用いられる。
【００４１】
図３は、メモリ３０の記憶領域（メモリマップ）の一例の図解図である。
メモリ（記憶部）３０は、ゲーム制御のプログラムおよびデータを記憶するゲーム制御プログラム用メモリ３１と、学習・推論プログラム用メモリ３２と、表示用データを記憶する表示用メモリ３３を含む。
【００４２】
ゲーム制御プログラム用メモリ３１は、記憶領域３１ａ〜３１ｅを含む。
記憶領域３１ａは、ゲーム制御のためのプロクラムを記憶するゲーム制御プログラム記憶領域であって、図９のメインスレッドの制御を行うためのプログラムを記憶する。
記憶領域３１ｂは、キャラクタ別コマンドテーブル（又はコマンド表）を記憶するものであり、例えば複数（又は多数）のキャラクタ別に、技（わざ）の種類と、各技の種類別のキーシーケンス（後述の図５参照）等を記憶する。
記憶領域３１ｃは、キャラクタ毎に当該キャラクタを描画するためのデータを記憶するキャラクタ描画データ記憶領域である。また、記憶領域３１ｃは、各技を表示するための複数の変化点における画像を表示するための骨格に対応する頂点座標等を記憶する。例えば、各キャラクタをポリゴンで表示する場合はポリゴンの動きを制御するプログラムと、各ポリゴンに張り付けるテクスチャデータを記憶する。また、キャラクタのビットマップ画像でもよい。
【００４３】
記憶領域３１ｄは、キー入力履歴データを記憶するキー入力履歴データ記憶領域であり、自分（プレイヤ）が操作するキャラクタの操作データと、対戦相手のプレイヤ（又はコンピュータ）が操作するキャラクタの操作データをセットで記憶するものである。この記憶領域３１ｄは、一定の記憶容量を有していて、先入れ先出し方式でキー入力履歴を記憶するものである。そのため、一定容量を超えるキー入力履歴が蓄積されると、最も古い履歴データを消去して新しい履歴データを記憶することになる。
記憶領域３１ｅは、画面状態データを記憶する画面状態データ記憶領域であり、対戦中の画面状態として、対戦する２つのキャラクタ（第１のキャラクタと第２のキャラクタ）別に、各キャラクタの場所に関するデータ（例えば、位置又は座標データ，向きデータ，残りライフデータ等）、各キャラクタの動画表示に関するデータ（例えば、アクション番号，アクションフレーム，キャラクタＩＤ等）、各キャラクタの動きに関するデータ（例えば、移動速度や移動加速度等）を記憶するとともに、その時点において操作されているキーデータを記憶する。この記憶領域３１ｅは、比較的短い時間分の記憶容量（例えば１フレーム又は１画面分）を有していて、画面状態データ（図８の１７項目の履歴データ）を記憶する。
【００４４】
学習・推論プログラム用メモリ３２は、記憶領域３２ａ〜３２ｄを含む。
記憶領域３２ａは、学習・推論の制御のためのプロクラムを記憶する学習・推論制御プログラム記憶領域であって、図９の学習・推論スレッドの制御を行うためのプログラムを記憶する。この記憶領域３２ａも、記憶媒体の種類としては記憶領域３１ａと同様のものが用いられる。
記憶領域３２ｂは、画面状態履歴データを記憶する画面状態履歴バッファメモリ（又は記憶領域）であり、対戦中の２つのキャラクタ（第１のキャラクタと第２のキャラクタ）別の画面状態（例えば、キャラクタ別の場所に関するデータと、各キャラクタの動画表示に関するデータと、各キャラクタの動きに関するデータ等の図９の１７項目）を記憶する。この記憶領域３２ｂは、記憶するデータ項目が記憶領域３１ｅと同様であるが、記憶容量が記憶領域３１ｅよりも大きな一定の記憶容量を有する。この記憶領域３２ｂは、１ラウンドの履歴データを記憶するのに十分な比較的長い時間（例えば９０秒程度）分の記憶容量を有していて、先入れ先出し方式で画面状態データを記憶する。そのため、一定容量を超える画面状態履歴が蓄積されると、最も古い履歴データを消去して新しい履歴データを記憶することになる。
【００４５】
このように、画面状態のデータを、メモリ３１の記憶領域３１ｅとメモリ３２の記憶領域３２ｂの二重で（又は別々に）記憶するのは、次の理由による。すなわち、記憶領域３１ｅは、ゲームプレイ中の画面状態であって、格闘ゲームの制御に用いるための現時点（又は最新）の１画面分の履歴データを記憶するのに対して、記憶領域３２ｂは人間（プレイヤ）がゲーム操作する際の判断の対象となる状態が見た目で（視覚的に認識される）画面状態であるので、その画面状態の変化の流れを累積的に履歴データとして記憶して、学習計算に利用するのに十分な時間分の画面状態履歴データを記憶するためである。
【００４６】
記憶領域３２ｃは、対戦する２体のキャラクタ別であって、深層学習（「ニューラルネット」ともいう）の計算処理によって得られた深層学習の各層（又は多層）の重みデータを記憶する記憶領域であり、深層学習の層毎の記憶領域を有するものである。
【００４７】
なお、ゲーム制御プログラム用メモリ３１の記憶領域３１ｂ，３１ｃ，３１ｄおよび学習・推論制御プログラム用メモリ３２の記憶領域３２ｂに記憶される各種プログラム又はデータは、ゲーム機本体１１が家庭用ゲーム機であれば、ゲーム制御および学習・推論のためのプログラムや画像データを外部の不揮発性記憶媒体として、ＣＤ−ＲＯＭ又はＤＶＤ等のディスク状記録媒体に格納しておき、ゲームプレイの開始に先立って、ゲーム機本体１１の半導体メモリ（例えばＲＡＭ）に読み込んで使用するようにしてもよい。その場合は、ゲーム機本体１１内には、ＤＶＤ等を光学的に読み取る光学式読取機が内蔵される。
【００４８】
表示用メモリ３３は、液晶表示器１２の１画面（１フレーム）分の各画素に対応する表示画像を少なくとも２画面分だけ一時記憶する記憶領域（又は記憶容量）を有する。そして、表示用メモリ３３は、液晶表示器１２の表示サイクルに同期して一方の記憶領域に書き込まれた画像データ（ビットマップデータ）を読み出し、次のフレームに表示すべき画像データを他方の記憶領域に書き込み、これをフレーム毎に交互に読み出しと書き込みを繰り返すものである。表示用メモリ３３から読み出された画像データは、液晶表示器１２に与えられて、表示される。
【００４９】
図４は、格闘ゲームの画面の表示例を示す図である。
格闘ゲームの表示画面４０は、画面の縦方向の中央から広範囲に亘る領域が対戦画像表示領域（又はステージ）４１であり、対戦画像表示領域４１の上部の帯状の領域がキャラクタ別情報表示領域４２となる。対戦画像表示領域４１には、プレイヤの操作する第１のキャラクタ（自キャラクタ；以下「キャラクタ１」ということもある）４３と、対戦相手（２人プレイの場合は相手、１人プレイの場合はコンピュータ）の操作する第２のキャラクタ（敵キャラクタ；以下「キャラクタ２」ということもある）４４とが向かい合った状態で大きく表示される。
キャラクタ別情報表示領域４２は、左右に分割されて、左側がプレイヤの操作するキャラクタ（自キャラクタ）用、右側が対戦相手のプレイヤの操作するキャラクタ（敵キャラクタ）用となる。キャラクタ別情報表示領域４２には、各キャラクタの顔画像が左右に表示されるとともに、各キャラクタの顔画像に対応して対戦時に参照する情報（例えば、キャラクタの名前又はキャラクタＩＤ，残りライフ）がそれぞれ表示される。
なお、キャラクタ１とキャラクタ２の対戦時の表示位置は、自キャラクタと敵キャラクタを左右で逆にして、右をキャラクタ１、左をキャラクタ２としてもよい。
【００５０】
対戦画像表示領域４１に表示される自キャラクタ４３および敵キャラクタ４４は、ステージ上の位置（座標情報），向き，アクション番号，アクションフレーム，移動速度と加速度の各情報をそれぞれ保有している。各キャラクタ４３，４４は、向きの情報と移動速度によって、移動する方向と速度が決められ、加速度によってジャンプの高さ又は飛ぶ距離が決まる。
例えば、自キャラクタ４３は、ジョイスティック２４（又は方向スイッチ２２）が連続して右に傾動されると右へ移動し、ジョイスティック２４（又は方向スイッチ２２）が連続して左に傾動されると左へ移動し、ジョイスティック２４（又は方向スイッチ２２）が連続して上に傾動されるとジャンプし、ジョイスティック２４（又は方向スイッチ２２）が連続して下に傾動されるとしゃがみ込むような動き又は行動を行う。また、自キャラクタ４３は、ジョイスティック２４（又は方向スイッチ２２）を下に傾動させた後、素早く上に傾動されると、ハイジャンプする。
【００５１】
図５は、格闘ゲームに登場するあるキャラクタ（図示の例では「大門」）の技の種類と操作方法を図解的に示した図である。
このキャラクタ別の技の種類と操作方法は、キャラクタ毎のコマンドテーブルとして、記憶領域３１ｂに記憶されている。
コマンドテーブルには、キャラクタ毎に、技区分、技名称、各技の操作方法のデータが予め登録されている。例えば、図５の例では、キャラクタの名前が「大門」といい、技区分（又は技の分類）として、「通常投げ」，「特殊技」，「必殺技」，「超必殺技」，「ＭＡＸ超必殺技」を使うことができる。技区分に対応して、複数の技があり、それぞれの技に名称（例えば、「つかみ叩きつけ」，「頭上払い」，「天地返し」，「切り株返し」・・・等）が付けられている。
各技に対応して、操作方法として、キー入力の操作手順が登録されている。例えば、図５の操作方法の記載例では、「頭上払い」という技を出す場合は、方向スイッチ２２又はジョイスティック２４を瞬時に右斜め下に傾けた後、押ボタン２３ｃを押圧する。
【００５２】
また、「天地返し」という技を出す場合は、ジョイスティック２４（又は方向スイッチ２２）を瞬時に右に傾けて、右斜め下，下，左斜め下，左，右に順次傾けた後、押ボタン２３ａ又は２３ｃを押圧する。この場合、ジョイスティック２４の操作は、右に傾けた位置から右斜め下を介して左まで時計回りに１８０度回転させた後で、右に傾動するように、極短時間に連続的に操作することになる。このジョイスティック２４の複数の方向への瞬間的かつ連続的な傾動操作と押ボタン２３ａ〜２３ｄの１つまたは複数の押圧操作の流れが、技を入力するためのキーシーケンスとなる。
一方、ジョイスティック２４のある１方向の傾き又は押ボタン２３ａ〜２３ｄの何れか１つの押圧によるキー操作は、１つのキーコードとして入力されることになる。
その他の技の種類の名称に対応する操作方法は、図５のコマンドテーブルに示すように、ジョイスティック２４の傾き方向（矢印の記号の向き）と押ボタン２３ａ〜２３ｄの組み合わせ操作のとおりである。そして、コマンドテーブルは、図５の図示の例に限らず、他のキャラクタ別のテーブルを予め登録するものである。
【００５３】
次に、本出願人の格闘ゲームにおける代表的な技の種類について、操作例とキャラクタの動きの表示例を具体的に説明する。
図６は技の一例の「天地返し」の操作例とキャラクタの動きの表示例を示す図である。
技「天地返し」は、ジョイスティック２４（又は方向スイッチ２２）を瞬時に右に傾けて、下回り（時計方向）に半回転させた後で右に倒した後、押ボタン２３ａ又は２３ｃを押す操作によって、入力する。
この場合のキャラクタの動き又は行動の画像表現は、足を開きかつ両腕を構えて立ち、上半身を前に倒してから起き上がる際に、柔道の背負い投げのように投げた後に、立ったままで相手に向かい合って構えた態勢を取るような、一連の攻撃による演出表現である。
図６の技の例では、「天地返し」という技が５つのアクションフレーム１〜５で表現され、５段階のアクションフレームの全体で１つのアクションを特定するためのアクション番号が付される。
【００５４】
図７は技のその他の例の「超受け身（強）」の操作例とキャラクタの動きの表示例を示す図である。
技「超受け身（強）」は、ジョイスティック２４（又は方向スイッチ２２）を瞬時に下に傾けて、時計方向に１／４回転させた後で右に倒した後、押ボタン２３ｄを押す操作によって入力する。
この場合のキャラクタの動き又は行動の画像表現は、前後に足を開いて上半身を少し前に倒して、前下方向に倒れ込み、半回転して受け身の姿勢を取ってから起き上がって、立ったままで相手に向かい合って構えた態勢を取るような、一連の攻撃による演出表現である。
図７の技の例では、「超受け身（強）天地返し」という技が４つのアクションフレーム１〜４で表現され、４段階のアクションフレームの全体で１つのアクションを特定するためのアクション番号が付される。
【００５５】
ところで、上述のような各種の技の動画による画像表現は、キャラクタの動きの大きな変換点となる複数のポイントの骨格データをキャラクタ別かつ技別に記憶領域３１ｃに予め登録しておき、各変換点の間の画像を補完処理することによって、滑らかな動きのある技を見せるように演出表現している。
【００５６】
図８は、深層学習のためにデータ収集する際の履歴データの項目（種類）の詳細を図解的に示した図である。
履歴データは、自分（プレイヤ自身）の操作する第１のキャラクタの履歴データと、対戦相手である第２のキャラクタの履歴データに大別（大分類）される。
自分（プレイヤ自身）の履歴データ（小分類）としては、場所に関係するデータ、キャラクタの表示に関するデータ、キャラクタの動きに関するデータ、およびキー操作に関するデータがある。
【００５７】
場所に関係するデータには、例えば「ステージ上の座標位置（Ｘ座標とＹ座標）」「キャラクタの向き（左向き又は右向き）」「残りライフ」等がある。
「ステージ上の座標位置」と「キャラクタの向き」は、対戦相手との間合いと向きを知ることにより、技の有効性（効き具合い）を判断する情報として利用される。より具体的には、ステージ上での「位置」情報は、相手との間合いを認識し、距離によって当たる攻撃と当たらない攻撃があるのを判断するのに用いる。「向き」は、相手キャラクタが右側にいるか左側にいるかによって、近寄りたいときや遠ざかりたいときに押す方向のキーが逆になるため、判断の結果、意図通りにキャラクタを動かすために用いる。「残りライフ」は、次に攻撃を受けると負ける等の状況によって、自キャラクタの取るべき行動が変化するので、これを認識できるようにするために用いる。
【００５８】
キャラクタの表示に関するデータには、対戦している２つのキャラクタ別の技の種類を指定するための「アクション番号」、「アクションフレーム」、「キャラクタコード（ＩＤ）」等がある。「アクション番号」は、キャラクタの動き又は行動に対応して振られた番号で、例えば倒れる動き，斬りかかる動き，蹴る動き等の番号である。「アクションフレーム」は、アクション番号に対応する動き（行動）の動き始めから終わりまでのどの段階かを示すものであり、例えば図６及び／又は図７における技のどの変化点のアクションかを示すものである。「キャラクタＩＤ」は、ゲームで遊ぶ際に選べる複数のキャラクタのうち、プレイヤがどのキャラクタを操作しているかを示すコードである。
「アクション番号」および「アクションフレーム」は、画面上でキャラクタがどのように表示されているかを認識するのに用いる。「キャラクタＩＤ」は、キャラクタ毎にコマンドが異なり、取れる行動も異なるので、自分・相手のキャラクタの組み合わせに対応した適切な行動を判断できるようにするために用いる。
【００５９】
動きに関するデータには、移動速度と移動加速度等がある。これらの速度データは、Ｘ座標とＹ座標のそれぞれのデータを含む。「移動速度」と「移動加速度」は、相手が近づいてきている場合又は近づき終わった場合等によって、特別な判断が必要なときに参照できるようにするために用いる。
キー操作に関するデータには、押し込まれているキーを表すキーデータがある。キーデータの詳細については、図１１を参照して後述する。
【００６０】
対戦相手（相手）の履歴データは、自分の履歴データのうちで、キー操作に関するデータを除くデータ、すなわち場所に関係するデータとキャラクタの表示に関するデータと、動きに関するデータである。
この履歴データは、ＣＰＵの動作サイクルのうちの所定時間（例えば液晶表示器１２の１フレーム期間に相当する６０分の１秒）毎に取得されて、記憶領域（又は画面状態履歴バッファ）３２ｂに先入れ先出し方式で書き込み及び読み出しが行われることになる。
【００６１】
図９は、この発明の一実施例の格闘ゲームの全体の制御（メインスレッドと学習・推論スレッド）を示すフローチャートである。
この実施例の格闘ゲームの全体の制御としては、格闘ゲームをプレイするためのメイン（又はゲーム）スレッドと、深層学習するための学習・推論スレッドがある。
メインスレッドは、状態計算処理と描画処理（Ｓ６〜Ｓ９の処理）とに大別され、状態計算処理と描画処理を交互に実行するものである。状態計算処理は、キャラクタ１の状態計算処理（Ｓ１ａ〜Ｓ５ａ又はＳ１ａ，Ｓ１１ａ，Ｓ１２ａ，Ｓ３ａ〜Ｓ５ａの処理）と、キャラクタ２の状態計算処理（Ｓ１ｂ〜Ｓ５ｂ又はＳ１ｂ，Ｓ１１ｂ，Ｓ１２ｂ，Ｓ３ｂ〜Ｓ５ｂの処理）とを含む。なお、キャラクタ１の状態計算処理とキャラクタ２の状態計算処理は、機能的に同じものであるので、同じステップ番号で示し、キャラクタ１用の処理とキャラクタ２用の処理を区別するために、ステップ番号の末尾にキャラクタ１用に「ａ」、キャラクタ２用に「ｂ」を付けて示す。
また、メインスレッドでは、液晶表示器１２の１フレーム期間に相当する１／６０秒毎に、状態計算処理（キャラクタ１，２）と描画処理を順次実行する。
これらのキャラクタ１，２の状態計算処理と描画処理のプログラムが、ＣＵＰ１３をゲーム制御部として機能させる。換言すると、これらの状態計算処理と描画処理のプログラムとＣＵＰ１３によって、ゲーム制御部が構成される。
【００６２】
学習・推論スレッドでは、メインスレッドから送られてくる画面状態データ及び／又はコントローラ２０Ａのキーデータに基づいて、キャラクタ１用の処理（Ｓ２１ａ〜Ｓ２５ａ）又はキャラクタ２用の処理（Ｓ２１ｂ〜Ｓ２５ｂ）を行うことにより、キャラクタ１とキャラクタ２の別に学習・推論のための処理を実行する。なお、学習・推論スレッドの処理も、キャラクタ１の処理とキャラクタ２の処理が同じものであるので、同じステップ番号の末尾にキャラクタ１用に「ａ」、キャラクタ２用に「ｂ」を付けて示す。
この学習・推論スレッドの処理は、メインスレッドの状態計算処理と描画処理を行ってないときに、時分割的に実行される。この学習・推論スレッドのプログラムがＣＵＰ１３を学習制御部として機能させる。換言すると、これらの学習・推論スレッドのプログラムとＣＵＰ１３によって、学習制御部が構成される。
ここで、「学習」とは、プレイヤが実際に押したキーと現在の画面状態とを、深層学習の重みに反映する操作をいう。「推論」とは、現在の画面情報を、取得済みの重みと掛け合わせて、現時点の画面状態を見ているプレイヤ（人間）が押したであろうキーを導き出す操作をいう。
【００６３】
図１０は、メインスレッドと学習スレッドの情報のやりとりのタイムチャートを示す。次に、図１０を参照して、１つのキャラクタにおけるメインスレッドの処理と学習スレッドの処理の相互の関係の概要を説明する。
プレイヤの行動とキー入力を使って重みに学習を反映する場合は、図１０に示すように、メインスレッドにおいてキーの操作状態を示すキーデータ（又はキーコード）の取得が行われ、画面状態の計算が行われた後、描画処理が行われる。このキーデータの取得と画面状態の計算処理と描画処理が、例えば１／６０秒毎に行われる。そして、画面状態の計算が終了すると、実際に押されていたキーデータと現在の画面状態を表すデータ（例えば、自キャラクタ及び敵キャラクタ別の座標位置，残りライフ等）が履歴データとして学習スレッドへ送られる。これらの処理がキーデータの取得毎に順次行われる。
【００６４】
学習スレッドでは、画面状態と推論したキーと実際に押されたキーの差分が複数層（例えば６層）の深層学習の計算によって求められる。すなわち、メインスレッドから１／６０秒毎に送られてくる履歴データが、学習スレッド側の記憶領域（画面状態履歴バッファ）３２ｂに一定期間分蓄積されて保存される。十分な履歴データ（例えば、数秒から１ラウンド程度）が蓄積されると、履歴データを重みとして反映するための計算が行われる。履歴データに基づく重みが深層学習の各層の重みデータとして与えられ、重みを反映して計算される。これによって、深層学習の各層では、画面状態に基づいて層別の重みを計算して、記憶領域（層別の重み記憶部）３２ｃに記憶させるものである。
【００６５】
（２人プレイの場合のメインスレッドの動作）
次に、図１〜図１０を参照して、図９のメインスレッドの具体的な動作を説明する。
バトルの開始に先立って、何れかのプレイヤがコントローラ２０Ａを操作して、２人プレイモードを選択するとともに、バトル開始を指示する。これに応じて、ＣＰＵ１３は記憶領域３１ａに登録されているゲーム制御プログラムを実行して、メインスレッドの処理、すなわちキャラクタ１用及びキャラクタ２用の状態計算処理と、描画処理を開始する。
先ず、ステップ（フローチャートの図では、記号「Ｓ」で示す）１ａにおいて、学習・推論に基づくキャラクタ１の再現動作中か否かが判断される。換言すると、推論・学習の結果を使ってキャラクタ１及び／又はキャラクタ２の動きを再現するモードであるか否かが判断される。この実施例では、２人プレイのときは、キャラクタ１とキャラクタ２の両方がプレイヤ（自分と相手）によって操作されるので、学習・推論処理に基づくキャラクタ１の再現動作中でないことが判断される。
【００６６】
なお、１人プレイのとき（すなわち相手がコンピュータのとき）には、キャラクタ１についてはプレイヤ（自分）によって操作されるので学習・推論処理に基づくキャラクタ１の再現動作中ではないことが判断されるが、キャラクタ２についてはコンピュータ（相手）によって操作されるので学習・推論処理に基づくキャラクタ１の再現動作中であることが判断されることになる。その場合は後述する。
【００６７】
そして、ステップ１ａにおいて、キャラクタ１の学習・推論処理に基づくキャラクタ１の再現動作中でないことが判断されると、ステップ２ａへ進む。ステップ２ａにおいて、その時点において操作されているキャラクタ１用のコントローラ２０Ａの方向スイッチ２２，押ボタン２３ａ〜２３ｄ又はジョイスティック２４の何れかの操作状態を示すキーのキーデータが読み込まれて、取得される。このとき取得されたキーデータは、図８の自キャラクタのキーデータとなる。
続くステップ３ａにおいて、そのときの画面状態データと、ステップ２ａで取得されたキーデータが学習スレッド（Ｓ２１ａ）へ送られる。この場合のデータの詳細については、図１１を参照して後述する。
【００６８】
ステップ４ａにおいて、取得されたキーデータがキー履歴データとして記憶領域３１ｄのキャラクタ１用の記憶領域に書き込まれる。
続くステップ５ａにおいて、記憶領域３１ｄに記憶されているキャラクタ１用のキー履歴データと記憶領域３１ｂに記憶されているコマンド表を参照して、キャラクタ１の動作又は技を決定する処理が行われる。ただし、上述のステップ２ａにおいて取得したキーデータは、１／６０秒毎に取得する１つのキーデータのみであるが、このステップ５ａにおいて技を決定するためには、自プレイヤがある期間内（例えば数フレーム〜数十フレームの期間内）に順次入力したキーデータの組み合わせ状態（図５の何れかの技に対応するキーシーケンス）である必要がある。そのため、技を特定できるだけの一連のキーデータが入力されるまではキャラクタの動作又は技を決定することなく、技を決定できるだけの複数のキーデータが入力されて蓄積されるのを待つことになる。
その後、キャラクタ２用の状態計算処理におけるステップ１ｂへ進む。
【００６９】
ステップ１ｂにおいて、学習・推論に基づくキャラクタ２の再現動作中でないことが判断されて、ステップ２ｂへ進む。
ステップ２ａにおいて、その時点において操作されているキャラクタ２用のコントローラ２０Ａの方向スイッチ２２，押ボタン２３ａ〜２３ｄ又はジョイスティック２４の何れかの操作状態を示すキーのキーデータが読み込まれて、取得される。このとき取得されたキーデータは、図８ではキャラクタ２にとっての自キャラクタのキーデータとなる。つまり、図８の履歴データは、キャラクタ１用とキャラクタ２用の２種類あることになる。
続くステップ３ａにおいて、そのときの画面状態データと、ステップ２ｂで取得されたキーデータが学習スレッド（Ｓ２１ｂ）へ送られる（この場合のメインスレッドから学習・推論スレッドへ送られるデータについては後述の図１１を参照）。
【００７０】
ステップ４ｂにおいて、取得されたキーデータがキー履歴データとして記憶領域３１ｄのキャラクタ２用の記憶領域に書き込まれる。
続くステップ５ｂにおいて、記憶領域３１ｄに記憶されているキャラクタ２用のキー履歴データと記憶領域３１ｂに記憶されているコマンド表を参照して、キャラクタ２の動作又は技を決定する処理が行われる。ただし、この場合も上述のステップ５ａと同様に、技を特定できるだけのキーデータが入力されて蓄積されるまでは、キャラクタ２の動作又は技を決定することなく、技を決定できるだけの複数のキーデータが入力されて蓄積されるのを待つことになる。
その後、描画処理におけるステップ６へ進む。
【００７１】
ステップ６において、画面状態の更新処理、例えば自キャラクタと敵キャラクタのそれぞれの骨格の位置の計算や、プレイヤの操作によって敵にどの程度のダメージを与えることができたかの計算等の処理が行われる。
ステップ７において、自キャラクタと敵キャラクタのライフの減分の計算又は両キャラクタのライフの残分の計算が行われる。このライフの減分の計算は、相手の繰り出した技のレベルに応じて、減分する値が異なるものである。
【００７２】
ステップ８において、描画の画像（自キャラクタと敵キャラクタの２体のキャラクタと背景画像）を生成して、表示用メモリ３３に更新的に書き込む。具体的には、背景画像を表示用メモリ３３に更新的に書き込むとともに、ステップ６において計算された自キャラクタと敵キャラクタの骨格位置等に基づいて、記憶領域３１ｂに登録されている自キャラクタと敵キャラクタの技別の画像表示のための骨格データを読み出して、技を繰り出すため変化点毎の描画の画像をポリゴンによって順次生成して、各変化点の画像をビットマップ画像に変換して、表示用メモリ３３に書き込む（実際には、背景画像の上に自キャラクタと敵キャラクタの画像を上書きする）。
なお、各キャラクタの技の変化を滑らかに表示するために、各変化点の間の画像の補完処理が行われる。
これらのステップ６〜ステップ８の描画処理の動作は、従来の格闘ゲームのゲーム制御の動作と同様であるので、詳細な説明を省略する。
【００７３】
ステップ９において、勝敗が決定したか否かが判断される。ここで、勝敗の決定は、自キャラクタ４３と相手キャラクタ４４の何れかのライフ（残りライフ）が０（ゼロ）になったとき、又は一定の対戦時間内に勝敗の決着がつかない場合に残りライフの大きなキャラクタを勝者と判断することにより行う。このステップ９において、勝敗が決定していないことが判断されると、前述のステップ１へ戻る。
そして、勝敗が決定するまで、ステップ１ａ〜５ａ（キャラクタ１用の状態計算処理），ステップ１ｂ〜５ｂ（キャラクタ２用の状態計算処理）およびステップ６〜９（描画処理）の動作が繰り返される。
【００７４】
これらの繰り返し動作中に、キャラクタ１，２用のそれぞれのキー履歴データが記憶領域３１ｄに蓄積されて、技を特定できるだけの十分なキー操作による入力があると、上述のステップ５ａ又は５ｂにおいて、記憶領域３１ｂのコマンド表を参照して、入力された技の種類又はキャラクタの動作が特定される。技又はキャラクタの動作が特定されると、ステップ７において自キャラクタの位置と相手キャラクタの位置を参照して、相手キャラクタ（又は自キャラクタ）のダメージが計算されて、ダメージに応じてライフの減分計算が行われ、残りライフを画面に表示する準備が行われる。
【００７５】
上述の動作を１ラウンド終了するまで繰り返すことによって、キャラクタ１のキー入力履歴データが記憶領域３１ｄのキャラクタ１用のエリアに累積的に記憶され、キャラクタ２のキー入力履歴データが記憶領域３１ｄのキャラクタ２用のエリアに累積的に記憶されることになる。また、現時点における画面状態データ（図８のキャラクタ１用とキャラクタ２用のそれぞれの８項目のデータと、キャラクタ１用のキーデータ）が、最新の画面状態データとして記憶領域３１ｅに更新的に記憶されることになる。
そして、ステップ９において勝敗の決定したことが判断されると、次のステップ１０において、終了処理が行われる。例えば、自キャラクタと敵キャラクタのうちの勝利した方のキャラクタの勝利演出の表示が行われ、必要に応じて対戦結果が保存される。終了処理の後、２人プレイの対戦プレイが終了する。
【００７６】
（１人プレイの場合のメインスレッドの動作）
バトルの開始に先立って、プレイヤ（自分）がキャラクタ１を操作してコンピュータ（キャラクタ２）と対戦する１人プレイを選択した後、スタートボタンを押圧する。応じて、キャラクタ１用の状態計算処理が実行される。
すなわち、ステップ１ａにおいて、学習・推論処理に基づくキャラクタ１の再現動作中でないことが判断される。そのため、上述のステップ２ａ〜５ａの動作が実行される。このステップ２ａ〜５ａの処理は、２人プレイの場合の動作と同様であるので、省略する。
【００７７】
ステップ５ａの後、キャラクタ２用の状態計算処理のステップ１ｂへ進む。
ステップ１ｂにおいて、キャラクタ２についてはコンピュータ（相手）によって操作されるので、学習・推論処理に基づくキャラクタ２の再現動作中であることが判断されて、ステップ１１ｂへ進む。ステップ１１ｂにおいて、後述するキャラクタ２用の学習・推論スレッドのステップ２２ｂから送られてくる推論結果のキーデータを取得する。
【００７８】
続く、ステップ１２ｂにおいて、キャラクタ２の画面状態データが学習スレッドへ送られる。このとき送られるキャラクタ２の画面状態データは、図８の相手キャラクタ用がキャラクタ２用で、自キャラクタ用がキャラクタ１用である。その後、ステップ４ｂへ進む。
ステップ４ｂにおいて、ステップ１１ｂで取得したキャラクタ２のキーデータがキャラクタ２の履歴データに追加される。ステップ５ｂにおいて、記憶領域３１ｄに記憶されているキャラクタ２用のキー履歴データと記憶領域３１ｂに記憶されているコマンド表を参照して、キャラクタ２の動作又は技を決定する処理が行われる。
ところで、前述のステップ５ａ及び５ｂにおいては、数フレーム〜数十フレーム経過した後における技に対応する一連のキーデータが入力されて取得されたときに、図５に示す何れかの技を指定するキーシーケンスが入力されることになる。
その後、描画処理のステップ６へ進む。
【００７９】
続いて、ステップ６〜ステップ９の動作が順次行われるが、これらの動作は上述の１人プレイの場合の描画処理の動作と同様であるので、省略する。
そして、ステップ９において、勝敗の決定したことが判断されると、ステップ１０において終了処理が行われた後、１人プレイによる対戦プレイが終了する。
【００８０】
なお、プレイヤの好みによって、キャラクタ２を操作して１人プレイ（コンピュータ対戦）したい場合もある。
その場合は、キャラクタ１側がコンピュータによって操作されるキャラクタとなり、キャラクタ２がプレイヤによって操作されることになる。
この場合の動作としては、キャラクタ１用の状態計算処理がステップ１ａ，１１ａ，１２ａ，４ａ，５ａの流れで行われるとともに、キャラクタ２用の状態計算処理がステップ１ｂ〜５ｂの流れで行われることになる。
ステップ１ａ，１１ａ，１２ａの処理は、キーデータと画面状態データを送受する相手がキャラクタ１用の学習・推論スレッド（ステップ２３ａ，２１ａ）であることを除いて、キャラクタ２用の状態計算処理で説明したステップ１１ｂ，１２ｂと同様であるので、その動作説明を省略する。
【００８１】
図１１は、プレイヤの操作状態を学習する際のメインスレッドから学習スレッドへ送るデータを図解的に示した図である。
次に、図１１を参照して、メインスレッドから学習スレッドへ送られるデータに着目して、画面状態データとキーデータを補足説明する。
前述の図９では、１／６０秒毎に、ステップ３ａにおいてキャラクタ１の画面状態データとキーデータを送信し、ステップ３ｂにおいてキャラクタ２の画面状態データとキーデータを送信しているが、その前にキャラクタ１（自分）又はキャラクタ２（相手又は敵）の何れもその時点における画面状態データが取得されて、記憶領域３１ｅに記憶されることになる。このとき、キャラクタ１用の画面状態データに関連して、キャラクタ１用のキーデータがその時点の画面状態データに関連する履歴データの一部として記憶される。
ところで、図１１における時刻のスケール（左列の１〜２５で表す行）は、１行当たり１／６０秒である。自プレイヤが押しているキャラクタ１を操作するためのキーは、図９のステップ２ａで取得されるものであって、各時刻の横に矢印又はアルファベット記号で示す。格闘ゲームで各プレイヤによって押されるキーは、方向スイッチ２２又はジョイスティック２４によって指示される「左，右，上，下」と、押ボタン２３ａ〜２３ｄの「Ａ，Ｂ，Ｃ，Ｄ」の８つある。なお、左下斜めは、下と左の両方が押されたことを表す。学習スレッドでは、各キーが押されているかどうかは、押されていないときを「０」、押されているときを「１」と定めて、８つのキーを８ビットの数字列（又はコード）で表す。８ビットの数字列は、「１」の立っているビット位置によって、方向の「左，右，上，下」及び／又は押ボタンの「Ａ，Ｂ，Ｃ，Ｄ」を表す。
【００８２】
例えば、図１１の例では、時刻１〜５の間に「下」が押されたときは、動作又は技を指示する「０，０，０，１，０，０，０，０」（下に対応する４ビット目のみ「１」）の数字列が発生されるとともに、図５のコマンド表を参照して「しゃがむ」動作を指定するコマンドと判断（又は解釈）されることになる。このとき、学習スレッドに送るデータは、その時点の画面状態データ（項目は図８の履歴データを参照）と、キーの操作として「下」を表す数字列（「０，０，０，１，０，０，０，０」）である（図９のＳ３ａ及びＳ３ｂで送るキーデータ）。
また、時刻６〜１２の間に「左斜め下」が押されたときは、「１，０，０，１，０，０，０，０」（左に対応する１ビット目と下に対応する４ビット目が「１」）の数字列と、「しゃがみ後退」動作を指定するコマンドと判断される。このとき、学習スレッドに送るデータは、その時点の画面状態データと、キーの操作として「左斜め下」を表す数字列（「１，０，０，１，０，０，０，０」）である。
また、時刻１３〜１７の「左」が押されたときは、「１，０，０，０，０，０，０，０」（１ビット目のみ１）の数字列と、「後退」動作を指定するコマンドと判断される。このとき、学習スレッドに送るデータは、その時点の画面状態データと、キーの操作として「左」を表す数字列「１，０，０，０，０，０，０，０」（これをキーデータという）である。
さらに、時刻１８〜２５の「Ｂ」が押されたときは「０，０，０，０，０，１，０，０」（Ｂに対応する６ビット目のみ１）の数字列と、技「超受け身（弱）」のコマンドと判断される。このとき、学習スレッドに送るデータは、その時点の画面状態データと、キーの操作として「Ｂ」を表す「０，０，０，０，０，１，０，０」である。
しかし、キー「下」「左斜め下」「左」のそれぞれが押された時点では個々のコマンド入力と解されるが、その後にキー「Ｂ」が押されたことによって、キー「下，左斜め下，左」とキー「Ｂ」の組み合わせによって指定される技である「超受け身」（図７の技）が入力されたものと判断されて、決定される（図９のＳ５ａ又はＳ５ｂで判断される技又は動作）。
【００８３】
図１２は、学習結果を利用してキャラクタを動かすときの、メインスレッドにおける学習スレッドとのデータの流れを図解的に示した図である。
次に、図１２を参照して、学習スレッドとデータの流れ（図９のＳ１１ａ又はＳ１１ｂ、Ｓ１２ａ又はＳ１２ｂ）を簡単に説明する。
前述のステップ１２ａ及び／又は１２ｂにおいて各時刻における学習スレッドに送るデータは、図８の各画面状態データである。前述のステップ１１ａ及び／又は１１ｂにおいて学習スレッドから受け取るキーデータ（図１２の中央列の矢印又はアルファベット記号で示すデータ）は、方向スイッチ２２又はジョイスティック２４によって指示される「左，右，上，下」と、押ボタン２３ａ〜２３ｄの「Ａ，Ｂ，Ｃ，Ｄ」の８つの何れかである。
この各画面状態データと学習スレッドから受け取るキーデータに基づいて、学習・推論スレッド側では推論処理、又は推論処理と学習処理が行われる。この学習処理の結果として、学習結果後のキーデータが状態計算処理へ送られることになる。
【００８４】
（学習・推論の動作）
次に、図１〜図１２を参照して、図９のフローチャートに沿って学習・推論スレッドの動作の概要を説明する。
学習・推論スレッドでは、メインスレッドのようにフレーム周期で（又は１／６０秒毎に）動作するものではなく、メインスレッドのキャラクタ１用及びキャラクタ２用の状態計算処理部から画面状態データ及び／又はキーデータが送られてくる毎に、ステップ２１ａ〜２５ａ及びステップ２１ｂ〜２５ｂの処理を順次実行するものである。なお、以下には、プレイヤがキャラクタ１を操作する場合であって、キャラクタ１用の学習・推論スレッドの動作を代表して説明するものとする。
前述のメインスレッドにおけるステップ３ａにおいて画面状態データとキーデータが送られてくると、ステップ２１ａにおいて、画面状態データとキーデータが取得される。一方、ステップ１２ａにおいて画面状態データのみが送られると、ステップ２１ａにおいて、画面状態データが取得される。
【００８５】
ここで、深層学習の計算に用いる「画面状態データ」は、図８の履歴データに含まれる自キャラクタと敵キャラクタに共通する項目のうち、キーデータを除く項目であって、場所に関係するデータと、キャラクタの表示に関するデータと、キャラクタの動きに関するデータとを含む。場所に関係するデータとしては、キャラクタの位置（ステージ上の座標位置），キャラクタの向きおよび残りライフが含まれる。キャラクタの表示に関係するデータとしては、アクション番号（又は技の種類を表す番号），アクションフレームおよびキャラクタＩＤが含まれる。キャラクタの動きに関連するデータとしては、移動速度と加速度が含まれる。
なお、画面状態データは、これらの全てを用いる必要がなく、格闘ゲームにおいて重要な項目を適宜の１つ又は複数を選んでもよい。
【００８６】
次のステップ２２ａにおいて、本願の特徴となる深層学習の計算処理、すなわち各層の重みデータを使って出力を計算する処理が行われる。この処理は、推論処理であって、後述の図１４，図１６，図１８に示す機能ブロック図又は図１５，図１７，図１９に示すフローチャートによって実行されるが、詳細は図１４〜図１９を参照して後述する。
ステップ２３ａにおいて、推論したキー（キーデータ）を決定して、キャラクタ１用の状態計算処理のステップ１１ａへ送信する。実際には、ステップ２１ａ〜２４ａを繰り返すうちに、１／６０秒毎に読み込まれるキーの組み合わせに基づいて、所定期間（数フレーム〜数十フレーム間）内に、操作されたキーの組み合わせによるキーシーケンス（技を特定するキーシーケンス）が決定されることになる。
ステップ２４ａにおいて、学習中か否かが判断され、学習中でなければステップ２１ａへ戻り、ステップ２１ａ〜２４ａの処理が１ラウンド中繰り返される。
【００８７】
前述のステップ２１ａ〜２４ａの処理を繰り返しているときにおいて、ステップ２４ａにおいて学習中であることが判断されると、ステップ２５ａへ進む。
ステップ２５ａにおいて、重み更新の処理が行われる。この重み更新の処理は、ステップ２２ａにおいて推論した結果と対応する時点のキーデータを使って学習処理するものであり、図２０に示す詳細フローを参照して後述する。
【００８８】
なお、プレイヤがキャラクタ２を操作してプレイしている場合（すなわち、２人プレイによる対戦の場合、または１人のプレイヤによるコンピュータ対戦であってコンピュータ側がキャラクタ１の場合）は、キャラクタ２用の学習・推論スレッドにおいて、ステップ２１ｂ〜２４ｂの繰り返し処理、又はステップ２１ｂ〜２５ｂの繰り返し処理が行われる。この場合は、キャラクタ２用の状態計算処理のステップ３ｂ又はステップ１２ｂから送られてくる画面状態データ及び／又はキーデータがキャラクタ２をプレイヤ操作する場合のデータである点を除いて、キャラクタ１の学習・推論スレッドの動作と同様なので、省略する。
【００８９】
（学習・推論結果を利用した１人プレイの動作）
ところで、前述のステップ２３ａと１１ａにおいては、学習・推論スレッド側から推論した結果のキーをキャラクタ１用の状態計算処理（Ｓ１１ａ）側へ送っても、プレイヤがキャラクタ１を操作してプレイしている限り、ステップ１ａからステップ１１ａ，１２ａを通らないため、推論又は学習の結果がキャラクタ１の動きに反映されることはない。
一方、推論又は学習の結果がキャラクタの動きに反映されるのは、２人プレイの期間において少なくとも１ラウンド分の履歴データが記憶領域３２ｂに蓄積され、当該ラウンドにおける層別の重みデータが記憶領域３２ｃに蓄積された後に、１人のプレイヤが別のラウンドとしてコンピュータ対戦する場合に相手の操作状態に基づく推論及び／又は学習結果を用いてプレイするときであって、相手のキャラクタに対応する状態計算処理においてステップ１ｂ，１１ｂ，１２ｂ（又はその逆の場合のステップ１ａ，１１ａ，１２ａ）を通る際に、推論及び／又は学習結果を利用した対戦プレイが行われることになる。つまり、少なくとも、１ラウンド終わった後のコンピュータ対戦する場合に、推論及び／又は学習結果を利用した対戦が行われることになる。
すなわち、キャラクタ１の状態計算処理では、前述の「１人プレイの場合のメインスレッドの動作」と同様の処理（Ｓ１ａ〜Ｓ５ａ）が行われるが、キャラクタ２の状態計算処理では、ステップ１ｂにおいて、学習・推論処理に基づくキャラクタ２の再現動作中であることが判断されて、ステップ１１ｂへ進む。ステップ１１ｂにおいて、キャラクタ２用の学習・推論スレッドのステップ２２ｂから送られてくる推論結果のキーデータを取得する。ステップ１２ａにおいて、キャラクタ２の今回のラウンドにおける画面状態データが学習スレッドへ送られる。
【００９０】
その後、ステップ４ｂにおいて、取得されたキーデータがキー履歴データとして記憶領域３１ｄのキャラクタ２用の記憶領域に書き込まれる。ステップ５ｂにおいて、記憶領域３１ｄに記憶されているキャラクタ２用のキー履歴データと記憶領域３１ｂに記憶されているコマンド表を参照して、キャラクタ２の動作又は技を決定する処理が行われる。この場合、１ラウンド前までの画面状態データおよびキーデータに基づいた学習結果によってキャラクタ２の動作又は技を決定することになる。
そして、描画処理におけるステップ６へ進み、前述と同様のステップ６〜９が実行される。そして、勝敗が決定するまで、ステップ１ａ〜５ａ，１ｂ，１１ｂ，１２ｂ，４ｂ，５ｂ，６〜９の処理が繰り返される。このとき、学習結果に基づいてキャラクタ２の動作又は技が繰り出されるように、キャラクタ２の動きが制御されることになる。
【００９１】
このように、キャラクタ２用の状態計算処理と学習・推論スレッドのプログラム（処理ステップ）を、キャラクタ１用の状態計算処理と学習・推論スレッドのプログラムと全く同じに構成すれば、共通のプログラムを１つ作成するだけで、２体のキャラクタのプログラムを個別に開発する必要がなく、プログラムの開発時間を短縮化でき、プログラマの開発負担を軽減できる利点がある。
また、コンピュータ対戦する場合のコンピュータ側のプログラムが、様々な状況を考慮して作成するために複雑となるところを、本願のように推論・学習システムを採用すれば、コンピュータ側のプログラムを簡略化でき、開発時間の短縮化を図ることができ、開発コストの低減を図れる利点がある。また、ゲーム画面を見ている人間であれば操作するであろうキーを使って、コンピュータ側のキャラクタの動きを制御できる利点がある。
【００９２】
図１３は学習・推論スレッドの動作原理の概要を説明するための概念図である。
図１３の学習・推論制御部５０は、キャラクタ１とキャラクタ２別に設けられ、キャラクタ別に学習・推論の処理を行うが、ここでは説明の簡略化のため、１つのキャラクタ（例えばキャラクタ２）の場合について説明する。
学習・推論制御部５０は、推論処理部５０ａと学習処理部５０ｂを含む。推論処理部５０ａは、ステップ２２ａ又は２２ｂの「各層の重みデータを使って出力を計算する処理」を行うものであって、複数層（例えば６層）のリカレント・ニューラル・ネットワーク（以下「ＲＮＮ」と略称）で構成される。このＲＮＮは、時系列のデータを深層学習するのに適している。また、推論処理部５０ａの他の例として、第１層の全対全結合層（入力側）と第２層〜第５層のゲーテッド・リカレント・ユニット（以下「ＧＲＵ」と略称）層と第６層の全対全結合層（出力側）の６層で構成してもよい。
学習処理部５０ｂ、ステップ２５ａ又は２５ｂの「重み更新処理」を行うものであって、第１層の重み更新処理部ないし第６層の重み更新処理部を含む。
【００９３】
図９及び図１３を参照して、キャラクタ２用の状態計算処理のステップ３ｂから送られてくる画面状態データ（キーデータを除く１６項目）とキーデータ（両方合わせて、図８に示す履歴データ）は、ステップ２１ｂにおいて取得されて、記憶領域３２ｂ（画面状態履歴バッファ）に先入れ先出し態様で記憶される。この記憶領域３２ｂは、少なくとも１ラウンド分の履歴データを記憶する容量を有し、新しい履歴データが入力される毎に古い履歴データを順次シフトしながら記憶することにより、先頭のアドレスに最も古い履歴データ（ｔ−（ｎ−６）の時点ではラウンド開始時の履歴データ）を記憶し、最新時刻（ｔ）に対応する入力側のアドレスに最新の履歴データを記憶する。
【００９４】
推論処理部５０ａは、記憶領域３２ｂに履歴データが記憶されると、古い順に履歴データを順次読み出して、画面状態データを項目別に読み出してＲＮＮの第１層（又は入力側の全対全結合層）へ並列的に入力させて、入力に対するそれぞれの重みを乗算して出力を求める。ここでいう入力別の重みは、入力をどれだけ出力に反映させるかを決めるものである。
また、画面状態データの項目は、キャラクタ１とキャラクタ２の別に、例えば８項目（両方合わせて１６項目）あるが、１項目でＸ座標とＹ座標の２つの数値データを必要とする項目（位置座標，移動速度，加速度）もあるので、２２要素の入力となる。
ＲＮＮの第１層（又は入力側の全対全結合層）は、画面状態データに対応する２２要素毎に、重み計算を行う。そして、前段の層の出力が次段の層で重み計算されて、次々段の層の入力となる。このようにして、最終段のＲＮＮ層（又は第６層の全対全結合層）から、複数の層での計算を反映した出力が、ステップ２３ｂ（又は２３ａ）でいう「推論したキーを決定したキーデータ」として、ステップ１１ｂ（又は１１ａ）へ送られることになる。また、推論したキーを決定するキーデータは、学習処理部５０ｂの入力とされる。
【００９５】
学習処理部５０ｂは、推論処理部５０ａの最終層（又は第６層の全対全結合層）からの画面状態を反映した出力である現在の重みを使った場合に押したいキーと同じ時刻において、プレイヤが実際に押していたキーとの差分を誤差としてキャラクタ別に求める。このキャラクタ別の差分の誤差が、推論処理部５０ａの層順とは逆に、第６層から第１層の順（古い順）で層別の誤差として順次求められて、キャラクタ毎かつ層別に最適化された重みとして記憶領域３２ｃに更新的に書き込まれる。キャラクタ毎かつ層別に最適化された重み（すなわち、学習結果としての画面状態を見たプレイヤが押すであろうキーデータに対応した重み）が記憶領域３２ｃのキャラクタ別の層別に更新的に記憶される。
この学習結果のキーデータは、ステップ２１ｂ〜２５ｂ（キャラクタ１の場合は２１ａ〜２５ａ）の処理を繰り返している間のステップ２３ｂ（又は２３ａ）において、ステップ１１ｂ（又は１１ａ）へ送られることにより、キャラクタ２（又は１）の学習・推論処理に基づくキャラクタ２（又は１）の再現動作中にコンピュータ対戦しているキャラクタ２の動きの制御に利用される。
【００９６】
以下には、図１４ないし図２０を参照して、学習・推論処理の詳細を説明する。
図１４は、学習・推論スレッド中の「各層の重みデータを使って出力を計算する処理（推論処理）」の一例であって、データの流れから見たブロック図である。
図１４において、推論処理部５０ａは、例えば、第１層の全対全結合回路（入力側）５１と、第２層〜第５層のＧＲＵ回路５２〜５５と、第６層の全対全結合回路（出力側）５６の６層で構成される。
ここで、「全対全結合」とは、入力に対して、それぞれのセルで保持する、入力のそれぞれに対する重みを乗算することによって出力を得る層をいう。「ＧＲＵ（Gated Recurrent Unit）」とは、ＬＳＴＭ（Long Short-Term Memoryの略）の性質を保ったまま単純化したセルをいう。
【００９７】
全対全結合回路（入力層）５１は、入力が画面状態の項目数（１６項目／１項目がＸ座標とＹ座標で表される位置座標，移動速度及び加速度の２要素の項目を含めて２２要素）であり、出力が６４要素である。ここで、入力の画面状態データの項目から見れば２２要素で足りるが、この実施例では将来の項目数の増加及び計算処理の容易化を考慮して、１６項目の２２要素を６４要素の出力形式となるようにしている。
この全対全結合回路５１は、行列とベクトルの積の計算、すなわち画面状態データと各入力に対する重みの乗算を行うものであって、具体的には図１６に示すような６４個のセルからなるが、図１７に示すようなフローの処理で実行される。
全対全結合回路５１は、入力として画面状態を表す数列（１６項目で２２要素）を受けて、例えば６４要素の出力を第１段目のＧＲＵ回路５２の入力として与える。
【００９８】
全対全結合回路５１の後段には、第２層〜第５層となるＧＲＵ回路５２〜５５が配列される。
ＧＲＵ回路（ＧＲＵの第１段）５２ないしＧＲＵ回路（ＧＲＵの第４段）５５は、ＲＮＮを構成する部品の一種のＬＳＴＭであり、キャラクタ毎の画面状態データの項目別に、前段からの出力を入力として受けて、各入力と入力別に異なる重みの数値を乗算してそれぞれの層の出力を求め、次段の層の入力とする。
すなわち、ＧＲＵ回路５２の出力が第２段目のＧＲＵ回路５３の入力（６４要素）となり、ＧＲＵ回路５３の出力が第３段目のＧＲＵ回路５４の入力（６４要素）となり、ＧＲＵ回路５４の出力が第４段目のＧＲＵ回路５５の入力（６４要素）となり、ＧＲＵ回路５５の出力が全対全結合回路（出力層）の入力（６４要素）となる。
全対全結合回路（出力側・最終層）の出力は、現在の画面状態に対応した推定されるキーデータとなり、そのキーデータが例えば８つのキー（方向スイッチ２２の４方向の押点又は押ボタン２３ａ〜２３ｄ）に対応する。
これらの全対全結合回路（入力層）５１，ＧＲＵ回路５２〜５５および全対全結合回路（出力層）５６は、図１５の各ステップ２２１〜２２６と同様の計算を行うものである。
全対全結合回路５６の処理は、入力（画面状態の各項目データ）に対し、それぞれのセルで保持する、入力それぞれに対する重みを乗算することによって、出力を得る層である。例えば、適切な学習の後には、自分と相手の間合いを計算したりする。また、それぞれのセルの中で、その層の入力それぞれをどれだけそのセルの出力に反映するかの重みを保持している。
これらのＧＲＵ回路５２〜５５の具体的な構成は、図１８に示す。
【００９９】
図１５は、全体フローにおける学習・推論スレッド中の「各層の重みデータを使って出力を計算する処理（推論処理）」の詳細なフローチャートである。
図１５では、２層（入力側と出力側）の全対全結合層と４層のＧＲＵ層からなる６層のニューラルネットによる重み計算の例を示す。
【０１００】
次に、「各層の重みデータを使って出力を計算する処理」の概要を説明する。この処理は、プレイヤがコントローラ２０Ａを操作して自キャラクタに技を繰り出させる状況を再現する際に、画面の状況、例えば自キャラクタと相手（敵）キャラクタの位置関係や組み合わせによって、技の出すタイミングや有効な技の種類が異なるので、画面の状況を考慮するために重みデータを更新処理するものである。
そして、全体として、それぞれの層がキャラクタ別に１回又は複数回の「画面状態に基づく項目別の入力×重みデータ＝出力」の計算をすることによって、推論している。
本当に欲しい出力（人間プレイヤの操作／正解）が分かっているときは、この推論の結果が正解とは異なるので、逆に計算してやることによって重みを少しずつ調整して、欲しい出力が得られるようにしていく操作が学習である。
なお、層が複数に重なって、直前の層の出力がある層の入力に繋がっているので、重みの修正が必要な場合は出力側に一番近い層から行う必要がある。
【０１０１】
次に、図１５を参照して、「各層の重みデータを使って出力を計算する処理」の詳細を説明する。
学習スレッドでは、１／６０秒毎に、メインスレッドから、そのときの画面状態データおよびその瞬間にプレイヤが押しているキーのキーデータを取得する（ステップ２１参照）。それに応じて、ステップ２２１において、全対全結合の層（入力層）の出力計算が行われる。
全対全結合の層では、履歴データの項目別に、画面状態データからの入力と入力それぞれに対応する重みを掛け算した計算結果が出力となる。
この全対全結合の計算処理は、具体的には図１６の回路又は図１７に示すフローの処理によって行われるが、後述する。
【０１０２】
ステップ２２２において、全対全結合層からの出力を受けて、履歴データの項目別にＧＲＵの第１段（層）目の出力を計算する処理が行われる。ステップ２２３において、ＧＲＵの第１段（層）目の出力を受けて、履歴データの項目別にＧＲＵの第２段目の出力を計算する処理が行われる。同様に、ステップ２２４において、前段の出力を受けて、履歴データの項目別にＧＲＵの第３段目の出力を計算する処理が行われる。ステップ２２５において、前段の出力を受けて、履歴データの項目別にＧＲＵの第４段目の出力を計算する処理が行われる。
これらのＧＲＵの推論時の処理は、入力と３種類の重み（Ｚ，Ｒ，Ｗ）と自身の出力を用いて計算する必要がある。ＧＲＵの重みに関する計算は、全対全結合の層の場合と同様の行列積である。
これらのＧＲＵ層の詳細は、図１８のＧＲＵ回路又は図１９のフローを参照して後述する。
その後、ステップ２２６において、全対全結合の層（出力層）の出力を計算する。この処理は全対全結合の層（入力層）と同じ処理であるが、入力層とは逆に出力の数が入力の数より少ない計算処理である。
そして、次のステップ２３のキーを決定する処理へ進む。
【０１０３】
ところで、「各層の重みデータを使って出力を計算する処理」（深層学習の処理）を、格闘ゲームにおけるコントローラ２０Ａの各キーの操作との関係で考察すれば、次のとおりである。
例えば、学習を反映する前の重み情報を利用して、それぞれの時刻で取得した画面情報から、それぞれのボタンを押すかどうか、重み情報を用いてキャラクタを動かすときと同様の処理で計算する。この処理において、方向スイッチ２２又はジョイスティック２４の上下左右と押ボタン２３ａ〜２３ｄの８つについて、押す（１）か、押さない（０）かの間（０〜１）の数値として計算される。その結果により、キャラクタを動かす場合は、計算結果が０．５よりも大きければ「押す」、０．５よりも小さければ「押さない」と決めて、キーデータ（０．０〜１．０の間の実数）をメインスレッドに送る（ステップ２３）。
一方、学習している場合は、これらの情報を用いて重み更新の処理（ステップ２５）が行われる。
【０１０４】
図１６は、学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理」中の「全対全結合」の一例の回路図である。図１６では、データの流れから見た全対全結合回路の１つの要素（セル）の回路を示しているが、このようなハード回路で構成することもできる。
図１６において、全対全結合回路５１は、６４個の全対全結合セル５１−１〜５１−６４からなる。各全対全結合セル５１−１〜５１−６４は、３２個の乗算器５１ａ〜５１ｄと１つの加算器５１ｅとから構成される。１つの全対全結合セル（例えば５１−１）の乗算器５１ａ〜５１ｄには、１つの画面状態データの所定項目に対応する要素データが一方入力（各セルへの３２ビットの入力、ｉ１，ｉ２，・・・ｉ３２）として与えられるとともに、各入力に対する重みが他方入力として与えられ、対応する一方入力と他方入力をそれぞれ乗算することによって行列計算を行う。
ここで、各入力に対する重みは、ランダムに初期化されるが、深層学習の学習を繰り返す毎に、次第に適切な重みに近づく。そして、学習結果として変化した重みの値が外部に保存されたり、外部から読み出されることになる。
各乗算器５１ａ〜５１ｄの乗算結果（すなわち行列計算の結果）が加算器５１ｅによって加算されて、この層の１要素分の出力（ｏ１）として出力される。
同様にして、他の全対全結合セル５１−２〜５１−６４でも、乗算器５１ａ〜５１ｄによる行列計算の結果が加算器５１ｅによって加算されて、この層の他の要素分（５１−２〜５１−６４）の出力（ｏ２〜ｏ６４）として出力される。
この全対全結合回路５１の出力（ｏ１〜ｏ６４）が第１段目のＧＲＵ回路５２の入力（６４要素）となる。
【０１０５】
全対全結合の層の処理は、入力（画面状態）に対し、それぞれのセルで保持する、入力それぞれに対する重みを乗算することによって、出力を得る層である。例えば、適切な学習の後には、自分と相手の間合いを計算したりする。また、それぞれのセルの中で、その層の入力それぞれをどれだけそのセルの出力に反映するかの重みを保持している。
【０１０６】
図１７は、学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理（推論処理）」中の「全対全結合の処理」の詳細なフローチャートである。
ステップ２２１ａにおいて、キャラクタ別であって画面状態データの各項目別に、重み行列（入力サイズ×出力サイズ）を入力のベクトルと乗算することによって、全対全結合の計算処理が行われる。すなわち、ステップ２２１ａの処理は、キャラクタ別の画面状態データの各項目に対応する６４要素別に、重み行列を入力のベクトルと乗算する計算が行われる。
【０１０７】
図１８は、学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理」中の「ＧＲＵのある一層の推論処理」の一例の回路図である。図１８では、ＧＲＵをデータの流れから見て表したもので、６４要素を並列的に処理するハード（回路）的に示す。
図１８において、ＧＲＵ回路５２は、要素毎の積（行列・ベクトル積）を計算する乗算部５２ａ〜５２ｄ，５２ｇ，５２ｈと、要素毎の和を計算する加算部５２ｅ，５２ｊと、減算部５２ｆと、入力部５２１と、出力部５２２と、６４要素のレジスタ（ｒ，ｚ，１−ｚ）５２３，５２４，５２５と、重み部５２６，５２７，５２８と、ドロップアウト部５２ｋとから構成される。
加算部５２ｅと乗算部５２ｈと加算部５２ｊが直列的に接続されて、入力部５２１と出力部５２２の間に接続される。
【０１０８】
重み部５２６〜５２８は６４×６４の行列であって、そのうち重み部５２６は出力をアップデート量に反映する行列（重み１）であり、重み部５２７は出力をリセット量に反映する行列（重み２）であり、重み部５２８はリセット量と出力を入力に反映する行列（重み３）である。これらの重み１〜３は、初期状態ではランダムに設定されるが、学習処理を重ねるに従って徐々に適正化され、最終的には最適化される。
また、出力部５２２の出力は、ドロップアウト部５２ｋに与えられるとともに、乗算部５２ａ〜５２ｃ及び５２ｇに入力として与えられるように構成される。これによって、古い履歴データの各項目に対応する要素の重みを、新しい履歴データに基づく重み計算に反映（又はフィードバック）させている。ドロップアウト部５２ｋは、要素毎に所定の確率で出力を０（ゼロ）に強制する。
これらの各乗算部５２ａ〜５２ｄ，加算部５２ｅ，減算部５２ｆ，乗算部５２ｇ，５２ｈ及び加算部５２ｊは、末尾の記号ａ〜ｊの順序で、それぞれの機能である乗算，加算又は減算の処理を行うものである。
これらの計算処理の詳細は、図１９を参照して後述する。
なお、他のＧＲＵ回路５３〜５５も、ＧＲＵ回路５２と同様に構成される。
【０１０９】
ＧＲＵ回路５２の動作としては、前段（全対全結合セル５１−１〜５１−６４）の出力が入力されると、現在（又は現時点）の重みをどれだけ反映し、過去の状態の重みをどれだけ忘れるかを求める。
具体的には、乗算部５２ａは、出力部５２２の出力（現時点の１つ前の時点の画面状態データに基づく重み計算結果）と、重み部５２６から入力される重み１とを要素毎に乗算して、アップデート量（ｚ）を計算し、その途中の計算結果をレジスタ５２４に一時ストアさせる。乗算部５２ｂは、出力部５２２の出力と重み部５２７から入力される重み２とを要素毎に乗算して、リセット量（ｒ）を計算し、その途中の計算結果をレジスタ５２３に一時ストアさせる。乗算部５２ｃは、出力部５２２の出力とリセット量を要素毎に乗算する。
乗算部５２ｄは、乗算部５２ｃの出力と重み部５２８から入力される重み２とを要素毎に乗算する。
【０１１０】
加算部５２ｅは、入力部５２１からの入力である現時点の画面状態データの各要素と乗算部５２ｄからの入力を要素毎に加算する。減算部５２ｆは、乗算部５２ａの出力であるアップデート量の各要素を１から減算した値（１−ｚ）を計算し、その途中の計算結果をレジスタ５２５に一時ストアさせる。乗算部５２ｇは、アップデート量と現在の出力を要素毎に乗算する。乗算部５２ｈは、加算部５２ｅの出力と減算部５２ｆの出力を要素毎に乗算する。
加算部５２ｊは、乗算部５２ｇの出力と乗算部５２ｈの出力を要素毎に加算して、出力をアップデートする。この出力が、過去の状態を忘れさせるため、ドロップアウト部５２ｋによって所定の確率でゼロに強制されて、ドロップアウト付きの出力として次段（層）のＧＲＵ回路５３へ入力される。
このようにして、ゲームプレイしている人間の動き又はそれに近い動きとなるように、調整して出力（重み）を決める処理をしている。
【０１１１】
図１９は、学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理」中の「ドロップアウト付きＧＲＵ（ある一層）の推論処理」の詳細なフローチャートである。
各ＧＲＵ層は、前段からの入力がある毎に、次のような処理を行う。ステップ２２２ａにおいて、キャラクタ別の項目別に、現在の出力と重み１（Ｚ）とを乗算することにより、アップデート量を計算する（図１８の例との対応関係を示せば、計算途中の結果をレジスタ５２３に一時ストアさせること。以下、カッコ内の符号は図１８の計算処理の対応部分を示す）。このアップデート量は、新しい入力を次の状態にどれだけ反映するかを決める量である。ステップ２２２ｂにおいて、現在の出力と重み２（Ｒ）とを乗算してリセット量を計算する（５２ｂ）。このリセット量は、古いことをどれだけ忘れるかを示す量である。ステップ２２２ｃにおいて、リセット量と現在の出力とを乗算する（５２ｃ）。これらのステップ２２２ａ〜２２２ｃの処理によって、重みを使い、忘れる量を計算している。
ステップ２２２ｄにおいて、重み３（Ｗ）とステップ２２２ｃで得た出力のベクトルを乗算する（５２ｄ）。これによって、重みを使い、反映量の計算を行うことにより、一つ前の出力をどれくらい今回の出力候補に反映するか計算している。
【０１１２】
ステップ２２２ｅにおいて、入力とステップ２２２ｄで得た出力を加算する。ステップ２２２ｆにおいて、アップデート量（ｚ）の各要素を１から減算した値を計算する（５２ｆ）。ステップ２２２ｇにおいて、アップデート量と現在の出力を、要素毎に乗算する（５２ｇ）。ステップ２２２ｈにおいて、ステップ２２２ｅの出力とステップ２２２ｆの出力を乗算する（５２ｈ）。これらのステップ２２２ｅ〜２２２ｈの処理によって、重みを使い、出力候補の計算を行っている。
ステップ２２２ｊにおいて、ステップ２２２ｇの出力とステップ２２２ｈの出力を加算して、出力をアップデートする（５２ｉ）。これによって、ドロップアウト前の出力を計算している。
ステップ２２２ｋにおいて、出力の各要素をランダムに０（ゼロ）にして、次の層に渡す（５２ｋ）。これによって、ドロップアウト処理をして、出力を得る処理を行う。この処理は、出力毎にランダムに０にする処理である。具体的には、出力＝要素毎に（ドロップアウト無し出力又はランダムで０にする）得られた出力の重みを学習の際に使うため、学習が必要な場合、記憶領域３２の当該層に対応するエリアに時系列で記憶されて、蓄積される。
以上の処理を繰り返すことによって、ＧＲＵ層は、過去の情報を加味する度合いを調整しつつ、新しい画面状態に対応するための適切なキーデータを計算している。
【０１１３】
図２０は、学習・推論スレッドにおける「重み更新処理」の詳細なフローチャートである。
次に、図２０を参照して、「重み更新処理」の詳細な動作を説明する。
ステップ２５１において、現在時刻（又は現時点）の画面状態データが記憶領域（画面状態履歴バッファ）３２ｂに追加して書き込まれる。すなわち、重み更新の処理では、メインスレッドから受け取った「プレイヤが実際に押していたキー」と、上述の処理で計算された「現在の重みを使った場合の押したいキーの差分」を「誤差」として扱う。この「誤差」と「受け取っている画面状態」、「プレイヤが実際に押していたキー」の各データが、まとめて記憶領域３２ｂに時系列で保存される。
【０１１４】
ステップ２５２において、画面状態データの履歴が十分に蓄積されているか否かが判断される。深層学習するためには少なくとも数秒分の履歴が必要であり、この段階で例えば５秒間の分の履歴がなければ、十分な履歴が蓄積されてから重みを更新処理することになる。そのため、履歴が十分でない場合は、「重み更新処理」を終了して、学習・推論スレッドのステップ２１へ戻る。
一方、十分な（例えば５秒分の）履歴が十分に蓄積されていることが判断されると、ステップ２５３へ進む。
【０１１５】
ステップ２５３〜２５９では、時刻ｔの誤差を最小にするために、記憶領域（画面状態履歴バッファ）３２ｂに保存されている、「各時刻での画面状態」、「押されているキー」および「現在の重みを使った場合に押したいキー」の組のデータを、時系列の逆順に（新しいものから古いものの順に）、次の処理を施す。すなわち、第６層の全対全結合の層（図１２のＳ２２６；図１５の最下段の５６に対応）については、当該層の出力の誤差がこの（現）時刻の誤差と一致している状態であるので、第６層の出力側から順に以下の処理を行う。
【０１１６】
ステップ２５３において、現在時刻（ｔ）が画面状態履歴バッファの最新時刻とされる。ステップ２５４において、現在時刻（ｔ）の誤差を最小にするため、第６層の全対全結合層の重みの更新の方向を調整して、誤差に繋がった入力の差が計算される。
具体的には、全対全結合の層の出力（図１５のＳ２２６、図１５の出力に対応）は、第６層の入力と、「入力それぞれに対応する重み」を掛け算したものであるので、出力の誤差の責任が「重みにある」と仮定すれば、このときの入力に応じてそれぞれの重みをどのように変更すれば誤差を最小にできるかを、重みを変化させたときの誤差の勾配から計算して求めることができる。
この誤差を最小にする方向を、今思っている方向と合成して、新しい向きを決定する。次に、「入力に責任がある」として、今持っている重みのデータと出力を乗算することにより、この時刻での出力の誤差に対応する入力の誤差を計算することができる。これは、一段上の層で同様の処理を行うためである。
【０１１７】
同様に、現在時刻（ｔ）の誤差を最小にするために、ステップ２５５において、第５層のＧＲＵ層の各重みの更新の方向を調整して、誤差に繋がった入力の差が計算される。
続くステップ２５６において、第４層のＧＲＵ層の各重みの更新の方向を調整して、誤差に繋がった入力の差が計算される。ステップ２５７において、第３層のＧＲＵ層の各重みの更新の方向を調整して、誤差に繋がった入力の差が計算される。ステップ２５８において、第２層のＧＲＵ層の各重みの更新の方向を調整して、誤差に繋がった入力の差が計算される。さらに、ステップ２５９において、第１層の全対全結合層の各重みの更新の方向を調整して、誤差に繋がった入力の差が計算される。
【０１１８】
ステップ２６０において、現在時刻（ｔ）の履歴データが記憶領域３２ｂの先頭のエリアに達したか否かが判断される。これは、記憶領域３２ｂが先入れ先出し態様であるので、出力される記憶位置に達したかどうかを判断するためである。先頭のエリアに達していないことが判断されると、ステップ２６１において、現在時刻から「−１」（１を減算）されて、現在時刻がｔ＝ｔ−１となり、前述のステップ２５４へ戻る。そして、その次の時刻（ｔ＝ｔ−１）における履歴データの重み更新を行うため、ステップ２５４〜２６０の処理が繰り返される。
ステップ２６０において、現在時刻（ｔ）の最新履歴のエリアに記憶されていた履歴データが記憶領域３２ｂの先頭のエリアに達したことが判断されると、ステップ２６２へ進む。ステップ２６２において、各層の重みを「学習率×更新の方向」で更新して、キャラクタ毎であって層毎に最適化された重みが記憶領域３２ｃの対応するエリアに記憶される。
このようにして、ゲームプレイの場で入力されたデータに基づいて格闘ゲーム装置１０の中で学習する、いわゆるオンライン学習が行われることになる。
【０１１９】
そして、ゲームプレイ（対戦）を行う毎に上述の学習処理が繰り返されて、１ラウンドの対戦が終了する毎に、各ラウンドの６層分の重みデータがニューラルネットの各重みとして、ハードディスク１４（図１参照）に累積的に記憶されることになる。
【０１２０】
このようにして蓄積されたプレイヤの行動履歴は、重みデータ（固定長）に反映される。重みデータは、ゲーム終了時にハードディスク１４に保存され、次回起動時に再び読み出すことにより、更に学習を行うか、学習した行動を再現するのに使用される。
そして、他のプレイヤの格闘ゲーム装置１０に学習データを取り込むことにより、それを使ってプレイするのに利用される。これによって、上手な人の操作方法を習ってゲームプレイすることができる。
また、他のプレイヤの重みのデータは、ネットワーク網１７を介して転送される。
自分のプレイによる重みデータは、例えばスコアランキングに紐付けたり、あるいはネット対戦の際にバックグラウンドで対戦し又は観戦しているユーザと交換することにより、プレイヤからの操作がなくても交換することも可能となる。
【０１２１】
次に、本願の格闘ゲームの学習装置を格闘ゲームに採用すれば、プログラマの負担軽減がどのようにして実現されるかについて説明する。
従来、コンピュータが自動でキャラクタを操作するプログラムは、それぞれの技を出す条件や確率を、プログラマが一つずつ、「もし〜ならば〜」をプログラム中に記述することで作成していた。その場合のプログラマの作業量は、１対１の対戦ゲームにおいて、キャラクタの組み合わせが登場するキャラクタの数の２乗になるので、キャラクタの数の２乗倍に比例する複雑さのプログラムを作成する必要があった。
しかも、全てのキャラクタの組み合わせについて、矛盾なく自然に動くプログラムを作成するのには、注意と長時間の検証（デバッグ作業）を要していた。
本願の深層学習を用いれば、技を出す条件や確率等の条件を、プログラマが逐一明示（プログラミングで記述）することなく、実際の局面と行動の履歴から自動で抽出できる。この性質を利用して、ランダムな動きに準ずる行動履歴から始めて、互いに戦わせ、勝った方の行動履歴を学習させる、というステップを繰り返すことによって、自動的に強いキャラクタの操作方法を学習した重みデータを得ることができる（遺伝的アルゴリズム）。
そのため、本願の学習方法を用いれば、プログラマがコンピュータ対戦用のキャラクタの動きの条件や確率をプログラムで逐一記述する必要がなく、膨大なパターンでの対局で勝利することのできるような自動的にキャラクタを操作するプログラムを得ることができる。
【０１２２】
また、本願では、学習のために使用している画面状態データが、２つのキャラクタの場所関係，キャラクタ表示関係，動きに関する数値データ（又は実数）であり、実際に表示される画面状態の画素（又はドット）データではないので、画素データを用いて学習計算する場合に比べて、学習の計算処理を高速に行うことができ、ＣＰＵ１３の負担を軽減できる利点がある。その結果、ＣＰＵ１３の処理能力を画像処理の時間に多く振り分けることが可能となる。
【０１２３】
（変形例）
上述の実施例では、深層学習するための画面状態データの一例として、図８に示す履歴データの１６項目の全てを用いて学習処理する場合を説明したが、他の例として、一部のデータ、例えば少なくとも場所関係に含まれるステージ上での位置情報（Ｘ座標とＹ座標）をキャラクタ別に持たせることによっても、本願の技術思想を実現できることは言うまでもない。
また、画面状態データのさらに他の例として、図８に示す履歴データのうち、場所に関する項目（例えば位置）とキャラクタ表示に関する項目（例えばアクション番号）と動きに関する項目（例えば移動速度）だけを用いて、学習させてもよい。
画面状態を表す項目数が少ないと、人間らしい動きを再現する精度が多少損なわれて、動きが若干荒くなることもあり得るが、技術思想としては実現可能である。
【０１２４】
また、推論処理部５０ａを２層の全対全結合層（入力側と出力側）と４層のＧＲＵ層で構成する場合を説明したが、６層のＲＮＮで構成してもよく、また層の数を適宜増減してもよい。また、各ＧＲＵ層が６４要素の場合を説明したが、項目数に応じて要素数を適宜変更してもよいことはもちろんである。
【０１２５】
この発明によれば、事前に学習させた結果を使用することによって、より人間らしい行動をコンピュータ相手の対戦でも実現することができる。
【産業上の利用可能性】
【０１２６】
この発明の格闘ゲームの学習装置および学習プログラムは、格闘ゲームのプレイヤの操作を学習する装置としての産業上の利用意義が大きい。
【符号の説明】
【０１２７】
１０    格闘ゲーム装置に用いられる情報処理装置
１１    ゲーム機本体
１２    液晶表示器（表示部）
１３    ＣＰＵ（制御部）
１４    ハードディスク（ＨＤＤ）
２０    入力操作部
２０Ａ  コントローラ
２１    ハウジング
２２    方向スイッチ（方向指示部）
２３ａ〜２３ｄ  押ボタン（動作指示部）
３０    メモリ（記憶部）
３１    ゲームプログラム用メモリ
３１ａ  ゲームプログラム記憶部
３２    学習・推論プログラム用メモリ
３２ａ  記憶領域（学習プログラム記憶部）
３２ｂ  記憶領域（画面状態履歴記憶部）
３２ｃ  記憶領域（層別の重み記憶部）
３３    表示用メモリ（表示用記憶部）
４１    対戦画像表示領域４１
４２    キャラクタ別情報表示領域４２
４３    自キャラクタ４３
４４    敵キャラクタ４４
５０    学習制御部
５０ａ  推論処理部
５０ｂ  学習処理部
５１，５６  全対全結合回路
５２〜５５  ＧＲＵ回路
【図１】
2019195512.tif 000003
【図２】
2019195512.tif 000004
【図３】
2019195512.tif 000005
【図４】
2019195512.tif 000006
【図５】
2019195512.tif 000007
【図６】
2019195512.tif 000008
【図７】
2019195512.tif 000009
【図８】
2019195512.tif 000010
【図９】
2019195512.tif 000011
【図１０】
2019195512.tif 000012
【図１１】
2019195512.tif 000013
【図１２】
2019195512.tif 000014
【図１３】
2019195512.tif 000015
【図１４】
2019195512.tif 000016
【図１５】
2019195512.tif 000017
【図１６】
2019195512.tif 000018
【図１７】
2019195512.tif 000019
【図１８】
2019195512.tif 000020
【図１９】
2019195512.tif 000021
【図２０】
2019195512.tif 000022
【手続補正書】
【提出日】平成30年6月13日(2018.6.13)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１６
【補正方法】変更
【補正の内容】
【００１６】
第５の発明は、第２の発明ないし第４の発明のいずれかに係る格闘ゲームの学習装置において、学習制御部は、現在の画面状態と最適化済みの重みとを掛け合わせてプレイヤが押していたであろうキーを導き出すための推論処理部と、現在の画面状態とプレイヤが実際に押したキーを深層学習の重みに反映するための学習処理部を含む。
推論処理部は、収集した画面状態データを画面状態履歴データ記憶部に書き込むとともに、画面状態履歴データ記憶部に記憶されている各画面状態データを第１層の入力として、それぞれの層において重みと乗算して、層別の出力を算出する。この出力を次の層の入力として、それぞれの層の出力を逐次的に出力し、最終層の出力が全体の出力であるキーデータとなる。
学習処理部は、推論処理部によって算出された層別のキーデータと、当該時刻に対応するキーデータに基づいて深層学習の重みを最適化する。
この第５の発明によれば、推論処理部と学習処理部によって、操作データ（又はキーデータ）に基づいて深層学習の重みを最適化し、人間が画面状態に応じて入力したキーデータの性質を反映したキーデータを計算することができる。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００２３
【補正方法】変更
【補正の内容】
【００２３】
第１２の発明は、第１１の発明に係る格闘ゲームの学習装置において、画面状態データは、２つのキャラクタの動きに関する速度データをさらに含む。
第１２の発明によれば、画面状態データとして、少なくとも、２つのキャラクタの場所に関する場所データおよび２つのキャラクタの表示に関するキャラクタ表示関連データに加えて、さらに２つのキャラクタの動きに関する速度データを用いて、深層学習の重みを反映したキーデータを計算することができる。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００２８
【補正方法】変更
【補正の内容】
【００２８】
また、この発明によれば、プレイヤのキャラクタ操作の行動に基づいて学習することにより、キャラクタの動きを子細にプログラムで決めるためのプログラム開発に要する時間の短縮化を図ることができるという効果が奏される。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００６１
【補正方法】変更
【補正の内容】
【００６１】
図９は、この発明の一実施例の格闘ゲームの全体の制御（メインスレッドと学習・推論スレッド）を示すフローチャートである。
この実施例の格闘ゲームの全体の制御としては、格闘ゲームをプレイするためのメイン（又はゲーム）スレッドと、深層学習するための学習・推論スレッドがある。
メインスレッドは、状態計算処理と描画処理（Ｓ６〜Ｓ９の処理）とに大別され、状態計算処理と描画処理を交互に実行するものである。状態計算処理は、キャラクタ１の状態計算処理（Ｓ１ａ〜Ｓ５ａ又はＳ１ａ，Ｓ１１ａ，Ｓ１２ａ，Ｓ３ａ〜Ｓ５ａの処理）と、キャラクタ２の状態計算処理（Ｓ１ｂ〜Ｓ５ｂ又はＳ１ｂ，Ｓ１１ｂ，Ｓ１２ｂ，Ｓ３ｂ〜Ｓ５ｂの処理）とを含む。なお、キャラクタ１の状態計算処理とキャラクタ２の状態計算処理は、機能的に同じものであるので、同じステップ番号で示し、キャラクタ１用の処理とキャラクタ２用の処理を区別するために、ステップ番号の末尾にキャラクタ１用に「ａ」、キャラクタ２用に「ｂ」を付けて示す。
また、メインスレッドでは、液晶表示器１２の１フレーム期間に相当する１／６０秒毎に、状態計算処理（キャラクタ１，２）と描画処理を順次実行する。
これらのキャラクタ１，２の状態計算処理と描画処理のプログラムが、ＣＰＵ１３をゲーム制御部として機能させる。換言すると、これらの状態計算処理と描画処理のプログラムとＣＰＵ１３によって、ゲーム制御部が構成される。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００６２
【補正方法】変更
【補正の内容】
【００６２】
学習・推論スレッドでは、メインスレッドから送られてくる画面状態データ及び／又はコントローラ２０Ａのキーデータに基づいて、キャラクタ１用の処理（Ｓ２１ａ〜Ｓ２５ａ）又はキャラクタ２用の処理（Ｓ２１ｂ〜Ｓ２５ｂ）を行うことにより、キャラクタ１とキャラクタ２の別に学習・推論のための処理を実行する。なお、学習・推論スレッドの処理も、キャラクタ１の処理とキャラクタ２の処理が同じものであるので、同じステップ番号の末尾にキャラクタ１用に「ａ」、キャラクタ２用に「ｂ」を付けて示す。
この学習・推論スレッドの処理は、メインスレッドの状態計算処理と描画処理を行ってないときに、時分割的に実行される。この学習・推論スレッドのプログラムがＣＰＵ１３を学習制御部として機能させる。換言すると、これらの学習・推論スレッドのプログラムとＣＰＵ１３によって、学習制御部が構成される。
ここで、「学習」とは、プレイヤが実際に押したキーと現在の画面状態とを、深層学習の重みに反映する操作をいう。「推論」とは、現在の画面情報を、取得済みの重みと掛け合わせて、現時点の画面状態を見ているプレイヤ（人間）が押したであろうキーを導き出す操作をいう。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００８１
【補正方法】変更
【補正の内容】
【００８１】
図１１は、プレイヤの操作状態を学習する際のメインスレッドから学習スレッドへ送るデータを図解的に示した図である。
次に、図１１を参照して、メインスレッドから学習スレッドへ送られるデータに着目して、画面状態データとキーデータを補足説明する。
前述の図９では、１／６０秒毎に、ステップ３ａにおいてキャラクタ１の画面状態データとキーデータを送信し、ステップ３ｂにおいてキャラクタ２の画面状態データとキーデータを送信しているが、その前にキャラクタ１（自分）又はキャラクタ２（相手又は敵）の何れもその時点における画面状態データが取得されて、記憶領域３１ｅに記憶されることになる。このとき、キャラクタ１用の画面状態データに関連して、キャラクタ１用のキーデータがその時点の画面状態データに関連する履歴データの一部として記憶される。
ところで、図１１における時刻のスケール（左列の１〜２５で表す行）は、１行当たり１／６０秒である。自プレイヤが押しているキャラクタ１を操作するためのキーは、図９のステップ２ａで取得されるものであって、各時刻の横に矢印又はアルファベット記号で示す。格闘ゲームで各プレイヤによって押されるキーは、方向スイッチ２２又はジョイスティック２４によって指示される「左，右，上，下」と、押ボタン２３ａ〜２３ｄの「Ａ，Ｂ，Ｃ，Ｄ」の８つある。なお、左斜め下は、下と左の両方が押されたことを表す。学習スレッドでは、各キーが押されているかどうかは、押されていないときを「０」、押されているときを「１」と定めて、８つのキーを８ビットの数字列（又はコード）で表す。８ビットの数字列は、「１」の立っているビット位置によって、方向の「左，右，上，下」及び／又は押ボタンの「Ａ，Ｂ，Ｃ，Ｄ」を表す。
【手続補正書】
【提出日】令和1年9月20日(2019.9.20)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
第１の発明は、第１のキャラクタと第２のキャラクタの２つのキャラクタによって対戦し、第１のキャラクタおよび第２のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタである格闘ゲームにおいて、プレイヤによって操作されるキャラクタの操作状態を学習する格闘ゲームの学習装置であって、入力操作部（２０、実施例との対応を示せばコントローラ２０Ａ。以下括弧内の技術用語は同様）と、表示部（液晶表示器１２）と、記憶部（メモリ３０）と、制御部（処理ユニット又はＣＰＵ１３）とを備える。
入力操作部は、プレイヤ（遊技者）によって操作され、格闘ゲームに登場する第１のキャラクタと第２のキャラクタの一方のキャラクタの動きを指示する方向指示部（方向スイッチ２２，ジョイスティック２４）と当該キャラクタの動作を指示する動作指示部（押ボタン２３ａ〜２３ｄ）を含む。表示部は、ゲームに関連する画像（又は映像）を表示するものである。記憶部は、各種プログラムを記憶する。制御部は、入力操作部による操作と記憶部に記憶されているプログラムに基づいて格闘ゲームに登場する複数のキャラクタの動きを制御する。
さらに、記憶部は、複数のキャラクタの動きを制御するゲーム制御プログラムを記憶するゲーム制御プログラム記憶部（記憶領域３１ａ）と、プレイヤによって操作されるキャラクタの動きの履歴を取得するために入力操作部の操作状態を深層学習し推論するための学習プログラムを記憶する学習プログラム記憶部（記憶領域３２ａ）と、学習データを更新的に記憶する学習データ記憶部（記憶領域３２ｂ，３２ｃ）と、表示部に表示させるためのゲーム画像（又はゲーム映像）データを更新的に記憶する表示用記憶部（表示用メモリ３３）とを含む。
制御部（ＣＰＵ１３）は、入力操作部の操作状態に応じて、ゲーム制御プログラムを実行することによって、格闘ゲームに登場する複数のキャラクタの動画を生成するとともに、格闘ゲームに関連する画像（例えば、背景画像，パワー，技に関する表示，得点，ライフ等の情報）を生成して表示部に表示させる。また、制御部（ＣＰＵ１３）は、学習プログラムを実行することによって、入力操作部の操作状態に応じてキャラクタの繰り出す技に関連する操作データと画面表示に関連する画面状態データを学習データ記憶部に書き込み、学習データ記憶部に記憶されている操作データと画面状態データに基づいて深層学習の処理を行うことによって学習に関する重みを最適化する。さらに、制御部（ＣＰＵ１３）は、第１のキャラクタおよび第２のキャラクタによる後続する対戦ゲームに際して、最適化した学習結果の重みを反映させて、入力操作部による入力に基づくことなく他方のキャラクタの動きを制御する。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１３
【補正方法】変更
【補正の内容】
【００１３】
第２の発明は、第１の発明に係る格闘ゲームの学習装置であって、制御部がゲーム制御プログラムを実行するゲーム制御部と学習プログラムを実行する学習制御部とを含む。
ゲーム制御部は、入力操作部の操作に応じて一方のキャラクタの動きを変化させかつ当該入力操作部の操作に関連する操作データと、第１のキャラクタおよび第２のキャラクタの画面表示状態に関連する画面状態データを学習制御部へ送る。
学習データ記憶部は、所定タイミング毎に送られるてくる操作データと画面状態データを先入れ先出し態様で記憶する画面状態履歴記憶部を含む。
そして、学習制御部は、画面状態履歴記憶部に記憶されている一定数のタイミングの各画面状態データを、複数層からなるリカレント・ニューラル・ネットワーク（ＲＮＮ）を用いて深層学習の計算処理を行ってキーデータを算出し、画面状態履歴記憶部のキーデータとの差分を用いて重みを最適化するものである。
第２の発明によれば、複数層からなるリカレント・ニューラル・ネットワーク（ＲＮＮ）を用いて深層学習の計算処理を行うことができ、重みを最適化することができる。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１６
【補正方法】変更
【補正の内容】
【００１６】
第５の発明は、第４の発明に係る格闘ゲームの学習装置において、学習制御部は、現在の画面状態とその時点で最新の重みとを掛け合わせてプレイヤが押していたであろうキーを導き出すための推論処理部と、現在の画面状態とプレイヤが実際に押したキーを深層学習の重みに反映するための学習処理部を含む。
推論処理部は、収集した画面状態データを画面状態履歴データ記憶部に書き込むとともに、画面状態履歴データ記憶部に記憶されている各画面状態データを第１層の入力として、それぞれの層において重みと乗算して、層別の出力を算出する。この出力を次の層の入力として、それぞれの層の出力を逐次的に出力し、最終層の出力が全体の出力であるキーデータとなる。
学習処理部は、推論処理部によって算出された層別のキーデータと、現在の画面状態の時点に対応するキーデータに基づいて深層学習の重みを最適化する。
この第５の発明によれば、推論処理部と学習処理部によって、操作データ（又はキーデータ）に基づいて深層学習の重みを最適化し、人間が画面状態に応じて入力したキーデータの性質を反映したキーデータを計算することができる。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１９
【補正方法】変更
【補正の内容】
【００１９】
第８の発明は、第１の発明ないし第５の発明のいずれかに係る格闘ゲームの学習装置において、ゲームプログラム記憶部はプレイヤによる入力操作部の操作に応じたキーデータを所定時間分だけ一時記憶するキーデータ記憶部を含む。
制御部は、ゲーム制御プログラムの実行に関連して、入力操作部の操作に応じたキーデータをキーデータ記憶部に先入れ先出し態様で記憶させるとともに、学習によって最適化した層別の重みを学習データ記憶部（又は層別の重み記憶部）に記憶させる。
第８の発明によれば、相手が早い動きを繰り返しているなら行動を変えるといった、時系列での状況変化に応じた意思決定を学習に反映することができる。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００２４
【補正方法】変更
【補正の内容】
【００２４】
第１３の発明は、プレイヤ（遊技者）によって操作され、格闘ゲームに登場する第１のキャラクタと第２のキャラクタの一方のキャラクタの動きを指示するための方向指示部（実施例との対応関係を示せば、方向スイッチ２２又はジョイスティック２４）および当該キャラクタの動作を指示するための動作指示部（押ボタン２３ａ〜２３ｄ）を含む入力操作部（２０，２０Ａ）と、ゲームに関連する画像を表示するための表示部（１２）と、各種プログラムおよびデータを記憶するための記憶部（３０）と、コンピュータ（１３）とを備えた格闘ゲーム装置（１０）において、第１のキャラクタと第２のキャラクタの２つのキャラクタによって対戦し、第１のキャラクタおよび第２のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタである格闘ゲームであって、コンピュータによって格闘ゲームを実行させる際に、プレイヤによって操作されるキャラクタの操作状態を学習するための学習プログラムである。
すなわち、コンピュータを、ゲーム制御部と学習制御部として機能させる格闘ゲームの学習プログラムである。
ゲーム制御部は、入力操作部による操作と記憶部に記憶されているゲームプログラムに基づいて、格闘ゲームに登場する複数のキャラクタの動きを制御して複数のキャラクタの動画を生成するとともに、格闘ゲームに関連する画像（例えば、背景画像や、パワー，技に関する表示，得点，ライフ等の情報）を生成する。
学習制御部は、プレイヤによって操作される入力操作部の操作状態に応じてキャラクタの繰り出す技に関連する操作データと画面表示に関連する画面状態データを収集して、操作データと画面状態データに基づいて深層学習の計算処理を行うことによって学習に関する重みを最適化して記憶部に記憶させる。また、ゲーム制御部は、第１のキャラクタおよび第２のキャラクタによる後続する対戦ゲームに際して、最適化した学習結果の重みを反映させて、入力操作部による入力に基づくことなく他方のキャラクタの動きを制御する。
第１３の発明によれば、事前に学習させた結果を使用することによって、より人間らしい行動をコンピュータ相手の対戦でも実現することのできる、学習プログラムが得られる。
【手続補正６】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１のキャラクタと第２のキャラクタの２つのキャラクタによって対戦し、第１のキャラクタおよび第２のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタである格闘ゲームにおいて、プレイヤによって操作されるキャラクタの操作状態を学習する格闘ゲームの学習装置であって、
プレイヤによって操作され、格闘ゲームに登場する前記第１のキャラクタおよび前記第２のキャラクタの一方のキャラクタの動きを指示するための方向指示部と当該キャラクタの動作を指示するための動作指示部を含む入力操作部、
ゲームに関連する画像を表示するための表示部、
各種プログラムとデータを記憶するための記憶部、ならびに
前記入力操作部による操作状態と前記記憶部に記憶されているプログラムに基づいて格闘ゲームに登場する複数のキャラクタの動きを制御する制御部を備え、
前記記憶部は、
複数のキャラクタの動きを制御するゲーム制御プログラムを記憶するゲームプログラム記憶部と、
プレイヤによって操作されるキャラクタの動きの履歴を取得するために、前記入力操作部の操作状態を深層学習し推論するための学習プログラムを記憶する学習プログラム記憶部と、
学習のためのデータを記憶する学習データ記憶部と、
前記表示部に表示させるためのゲーム画像データを更新的に記憶する表示用記憶部とを含み、
前記制御部は、
前記ゲーム制御プログラムを実行することによって、前記入力操作部の操作状態に応じて、格闘ゲームに登場する複数のキャラクタの動画と格闘ゲームに関連する画像を生成して前記表示用記憶部に更新的に書き込み、当該表示用記憶部の画像を読み出して前記表示部に表示させるとともに、所定タイミング毎に前記入力操作部の操作に応じてキャラクタの繰り出す技に関連する操作データと画面表示に関連する画面状態データを収集し、
前記学習プログラムを実行することによって、前記所定タイミング毎に収集された操作データと画面状態データを前記学習データ記憶部に書き込み、学習データ記憶部に記憶されている操作データと画面状態データに基づいて深層学習の計算処理を行うことによって学習結果の重みを最適化し、
前記第１のキャラクタおよび前記第２のキャラクタによる後続する対戦ゲームに際して、前記最適化した学習結果の重みを反映させて、前記入力操作部による入力に基づくことなく他方のキャラクタの動きを制御することを特徴とする、格闘ゲームの学習装置。
【請求項２】
前記制御部は、前記ゲーム制御プログラムを実行するゲーム制御部と、前記学習プログラムを実行する学習制御部とを含み、
前記ゲーム制御部は、前記入力操作部の操作に応じて前記一方のキャラクタの動きを変化させかつ当該入力操作部の操作に関連する操作データと、前記第１のキャラクタおよび第２のキャラクタの画面表示状態に関連する画面状態データを前記学習制御部へ送り、
前記学習データ記憶部は、所定タイミング毎に送られるてくる操作データと画面状態データを先入れ先出し態様で記憶する画面状態履歴記憶部を含み、
前記学習制御部は、前記画面状態履歴記憶部に記憶されている一定数のタイミングの各画面状態データを、複数層からなるリカレント・ニューラル・ネットワークを用いて深層学習の計算処理を行ってキーデータを算出し、学習結果の重みを最適化する、請求項１に記載の格闘ゲームの学習装置。
【請求項３】
前記格闘ゲームは、前記第１のキャラクタおよび前記第２のキャラクタの何れか一方のキャラクタがプレイヤによって操作され、他方のキャラクタがプレイヤによる前記入力操作部の操作とは独立して動作するものであり、
前記学習制御部は、入力すべきキーのキーデータを前記ゲーム制御部へ送り、
前記ゲーム制御部は、学習結果の重みを反映したキーデータを学習制御部から受け取り、ゲーム制御プログラムの実行に関連して他方のキャラクタの動きを制御する、請求項２に記載の格闘ゲームの学習装置。
【請求項４】
前記学習データ記憶部は、画面状態データの履歴を一時的に記憶する画面状態履歴データ記憶部と、前記深層学習の処理結果として複数の層別の重みの計算結果を記憶する層別の重み記憶部とを含み、
前記制御部は、収集した画面状態データを前記画面状態履歴データ記憶部に書き込むとともに、画面状態履歴データ記憶部に記憶されている各画面状態データを第一層の入力として、複数の層においてそれぞれの入力に対応する重みを乗算して、層毎の出力を計算し、その出力を次の層の入力として計算する処理を逐次的に行い、最終層の出力として得たキーデータと、実際に押されていたキーの差分を用いて、層別の重みを最適化して前記層別の重み記憶部に記憶させる学習制御部を含む、請求項１に記載の格闘ゲームの学習装置。
【請求項５】
前記学習制御部は、現在の画面状態とその時点で最新の重みとを掛け合わせてプレイヤが押していたであろうキーを導き出すための推論処理部と、現在の画面状態とプレイヤが実際に押したキーを深層学習の重みに反映するための学習処理部を含み、
前記推論処理部は、収集した画面状態データを前記画面状態履歴データ記憶部に書き込むとともに、画面状態履歴データ記憶部に記憶されている各画面状態データを第一層の入力として、それぞれの層において重みを乗算して、層別の出力を算出し、その出力を次の層の入力として逐次的に計算することで、最終層の出力としてキーデータを得るものであり、
前記学習処理部は、前記推論処理部によって算出されたキーデータと、前記現在の画面状態の時点に対応するプレイヤの操作によるキーデータに基づいて深層学習の重みを最適化する、請求項４に記載の格闘ゲームの学習装置。
【請求項６】
前記学習制御部は、深層学習の処理として、少なくとも１つの全対全結合層による計算処理と、複数のゲーテッド・リカレント・ユニット層による計算処理を実行するものであって、
前記全対全結合層による計算処理では、重み行列を入力のベクトルと乗算する処理を実行し、
前記各ゲーテッド・リカレント・ユニット層による計算処理では、複数のゲーテッド・リカレント・ユニット層のそれぞれにおいて、重みを使って忘れる量を計算し、重みを使って反映量を計算し、出力候補を計算する処理を順次行うことを特徴とする、請求項２ないし請求項５のいずれかに記載の格闘ゲームの学習装置。
【請求項７】
前記学習制御部は、前記各ゲーテッド・リカレント・ユニット層による計算処理として、前記出力候補の計算後に、選択的にドロップアウト処理をして出力することを特徴とする、請求項６に記載の格闘ゲームの学習装置。
【請求項８】
前記ゲームプログラム記憶部は、プレイヤによる前記入力操作部の操作に応じた操作データを所定時間分だけ一時記憶する操作データ記憶部を含み、
前記制御部は、前記ゲーム制御プログラムの実行に関連して、前記入力操作部の操作に応じた操作データを前記操作データ記憶部に先入れ先出し態様で記憶させるとともに、前記学習に関する層別の重みを前記学習データ記憶部に記憶させる、請求項１ないし請求項５のいずれかに記載の格闘ゲームの学習装置。
【請求項９】
前記学習データ記憶部は、操作データと画面表示に関連する画面状態データを記憶する画面状態データ記憶部と、前記深層学習後の各層の重みを記憶する複数層分の重みデータ記憶部とを含み、
前記学習制御部は、ゲームプレイ中の操作データと画面表示に関連する画面状態データを先入れ先出し態様で前記画面状態データ記憶部に記憶させるとともに、前記深層学習後の各層の重みデータを対応する層別の前記重みデータ記憶部に記憶させる、請求項２ないし請求項５のいずれかに記載の格闘ゲームの学習装置。
【請求項１０】
前記格闘ゲームは、第１のキャラクタと第２のキャラクタの２つのキャラクタによって対戦するものであって、第１のキャラクタおよび第２のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタであり、
前記画面状態データは、少なくとも２つのキャラクタの位置データを含む、請求項１ないし請求項９のいずれかに記載の格闘ゲームの学習装置。
【請求項１１】
前記格闘ゲームは、第１のキャラクタと第２のキャラクタの２つのキャラクタによって対戦するものであって、第１のキャラクタおよび第２のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタであり、
前記画面状態データは、少なくとも、２つのキャラクタの場所に関する場所データと、２つのキャラクタの表示に関するキャラクタ表示関連データを含む、請求項１ないし請求項９のいずれかに記載の格闘ゲームの学習装置。
【請求項１２】
前記画面状態データは、２つのキャラクタの動きに関する速度データをさらに含む、請求項１１に記載の格闘ゲームの学習装置。
【請求項１３】
第１のキャラクタと第２のキャラクタの２つのキャラクタによって対戦し、第１のキャラクタおよび第２のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタである格闘ゲームにおいて、プレイヤによって操作されるキャラクタの操作状態を学習する格闘ゲームのプログラムであって、
プレイヤによって操作され、格闘ゲームに登場する前記第１のキャラクタおよび前記第２のキャラクタの一方のキャラクタの動きを指示するための方向指示部および当該キャラクタの動作を指示するための動作指示部を含む入力操作部と、ゲームに関連する画像を表示するための表示部と、各種プログラムおよびデータを記憶するための記憶部と、コンピュータとを備えた格闘ゲーム装置において、前記コンピュータによって格闘ゲームを実行させるためのプログラムを含み、
前記コンピュータを、
前記入力操作部による操作と前記記憶部に記憶されているゲームプログラムに基づいて、格闘ゲームに登場する複数のキャラクタの動きを制御して複数のキャラクタの動画を生成するとともに、格闘ゲームに関連する画像を生成するゲーム制御部と、
プレイヤによって操作される前記入力操作部の操作状態に応じてキャラクタの繰り出す技に関連する操作データと画面表示に関連する画面状態データを収集して、操作データと画面状態データに基づいて深層学習の計算処理を行うことによって学習に関する重みを最適化して前記記憶部に記憶させる学習制御部と、
前記第１のキャラクタおよび前記第２のキャラクタによる後続する対戦ゲームに際して、前記最適化した学習結果の重みを反映させて、前記入力操作部による入力に基づくことなく他方のキャラクタの動きを制御するゲーム制御部として機能させるための、格闘ゲームの学習プログラム。
【請求項１４】
前記記憶部は、画面状態データを一時的に記憶する画面状態データ記憶部と、前記深層学習の処理として最適化した複数の層別の重みを記憶する層別の重み記憶部とを含み、
前記コンピュータを、前記画面状態データ記憶部に記憶されている画面状態データと重みを乗算してキーデータを計算し、前記画面状態データ記憶部に記録された実際に押されていたキーとの差分を用いて重みを最適化して前記層別の重み記憶部を更新する学習制御部として機能させる、請求項１３に記載の格闘ゲームの学習プログラム。
【請求項１５】
前記記憶部は、画面状態データの履歴を一時的に記憶する画面状態履歴データ記憶部と、前記深層学習の処理として最適化した複数の層別の重みを記憶する層別の重み記憶部とを含み、
前記コンピュータを、前記画面状態履歴データ記憶部に記憶されている各画面状態データを第一層の入力として、複数の層においてそれぞれの入力に対応する重みを乗算して、層毎の出力を計算し、その出力を次の層の入力として計算する処理を逐次的に行い、最終層の出力として得たキーデータと、実際に押されていたキーの差分を用いて、層別の重みを最適化して前記層別の重み記憶部に記憶させる学習制御部として機能させる、請求項１３に記載の格闘ゲームの学習プログラム。