ビジュアル入力を使用してDiablo 2を再生するように人工ニューラルネットワークをトレーニングする方法


139

私は現在、ANNにビデオゲームをプレイしてもらうことを目指しています。ここのすばらしいコミュニティから助けを借りたいと思っていました。

私はディアブロ2に落ち着きました。したがって、ゲームのプレイはリアルタイムで、アイソメトリックの観点から、プレーヤーはカメラの中心にある1つのアバターを制御します。

物事を具体的にするために、タスクは、ヘルスを0に落とさずにキャラクターx経験値を取得することです。この場合、経験値はモンスターを倒すことによって獲得されます。これはゲームプレイの例です:

ここに

今、私はネットを画面上のピクセルから取得した情報のみに基づいて動作させたいので、効率的に再生するためには非常に豊かな表現を学習する必要があります。ゲームの世界をオブジェクトに分割し、それらと対話する方法。

そして、これらすべての情報はどういうわけかネットに教えられなければなりません。私の人生では、これをどのように訓練するかを考えることはできません。私の唯一のアイデアは、画面からゲームの本質的に良い/悪いもの(健康、ゴールド、経験など)を視覚的に抽出し、その統計を強化学習手順で使用する別のプログラムを用意することです。それは答えの一部になると思いますが、それで十分だとは思いません。生の視覚的入力から目標指向の動作までの抽象化のレベルが多すぎて、私の生涯でネットを訓練するにはそのような限られたフィードバックがありません。

だから、私の質問:このタスクの少なくとも一部を実行するようにネットをトレーニングするには、他にどのような方法が考えられますか?何千ものラベル付けされた例を作成せずに。

もう少し方向付けをします。この設定で有用な情報を抽出するために、強化学習の他のソースや、監視されていない方法を探しています。または、手動でラベル付けする必要なしに、ゲームの世界からラベル付けされたデータを取得する方法を考えることができる場合は、監視付きアルゴリズム。

更新(12/04/27):

不思議なことに、私はまだこれに取り組んでおり、進歩しているようです。ANNコントローラを機能させる最大の秘訣は、タスクに適した最新のANNアーキテクチャを使用することです。したがって、時間差の逆伝播(つまり、標準の強化学習)で微調整する前に、教師なしで(ゲームをプレイしているビデオで)訓練した因数分解された制限付きボルツマンマシンで構成される深い信念ネットを使用してきましたフィードフォワードANN)。

ただし、特にリアルタイムでのアクション選択の問題と、ANN処理用にカラー画像をエンコードする方法について、さらに価値のある入力を探しています:-)

更新(10/21/15):

私がこの質問を過去にしたことを思い出しただけで、これはもうおかしな考えではないことを述べておかなければならないと思いました。前回の更新以降、DeepMindは、ニューラルネットワークで視覚入力からAtariゲームをプレイできるようにするためのネイチャーペーパーを公開しました。確かに、私が彼らのアーキテクチャを使用してDiablo 2の限られたサブセットをプレイするのを妨げている唯一のことは、基礎となるゲームエンジンへのアクセスの欠如です。画面にレンダリングしてからネットワークにリダイレクトするのは、適度な時間でトレーニングするには遅すぎるだけです。したがって、おそらくこのようなボットがディアブロ2をプレイするのはすぐにはわかりませんが、それは、オープンソースまたはレンダリングターゲットへのAPIアクセスで何かをプレイするためです。(おそらく地震?)


1
このペーパーをチェックしてください。:Dの ri.cmu.edu/pub_files/pub2/pomerleau_dean_1992_1/...
zergylord

紙とゲームの運転上の問題の大きな違いは、運転上の問題では、視覚的な入力が十分に完全な状態の表現であるということです。右側に障害物がある場合-左折、左側に障害物がある場合-回転正しい。ただし、ゲームでは、画面に表示されていないものに基づいて判断することがよくあります。店に入るといつも同じに見えるかもしれませんが、別の商品を購入する必要があります。
Don Reba

1
私の記憶の中で最高のものになるために、Diablo 2は簡単に抽出できるスプライトシートを使用しています。オブジェクト(プレーヤー、敵など)を関連するスプライトのリストに結びつけるのはかなり簡単なはずです。オブジェクトが互いに隠れている問題は解決しませんが、それは始まりです。
ライアンジェンキンス、

@zergylord a)ディアブロ2を再生し、b)画面に描画されたピクセルを唯一の入力ソースとして使用するという基準をどれだけ堅固に維持したいかを言えると助かります。自分で物事を簡単にしたい場合は、そのうちの1つ(または両方)を少しリラックスする必要があると思います。そうするつもりですか。
Stompchicken

1
広すぎると締めくくる投票。
Ciro Santilli郝海东冠状病六四事件法轮功

回答:


54

あなたはANNのトレーニング方法について心配しているようですが、このプロジェクトは、あなたが知らないかもしれない複雑さ隠しています。画像処理によるコンピューターゲームでのオブジェクト/文字の認識は、非常に困難なタスクです(FPSゲームやRPGゲームに夢中とは言えません)。私はあなたのスキルに疑いはありませんし、それが不可能だとも言っていませんが、ANN自体を実装するよりも、ものの認識に10倍多くの時間を費やすことができます(デジタル画像処理技術の経験がある場合))。

あなたのアイデアは非常に興味深く、また非常に野心的だと思います。この時点で、それを再検討する必要があるかもしれません。このプロジェクトは大学で計画しているものだと思うので、仕事の焦点が本当にANNである場合は、もっとシンプルな別のゲームを選ぶべきでしょう。

誰かが別の、しかしどういうわけか似たようなプロジェクトのヒントを探しに来たのはそれほど昔ではないことを覚えています。それをチェックする価値があります。

一方、提案を受け入れる場合は、ゲーム内のオブジェクトを識別するためのより良い/より簡単なアプローチがあるかもしれません。しかし、最初に、このプロジェクトをあなたが望むもの、つまりスマートボットと呼びましょう。

ボットを実装する1つの方法は、ゲームクライアントのメモリにアクセスして、画面上のキャラクターの位置や健康状態などの関連情報を見つけます。コンピュータのメモリを読み取ることは簡単ですが、メモリ内のどこを探すかを正確に理解することはそうではありません。Cheat Engineのようなメモリスキャナーは、このために非常に役立ちます。

ゲームで機能するもう1つの方法は、レンダリング情報を操作することです。ゲームのすべてのオブジェクトを画面にレンダリングする必要があります。つまり、すべての3Dオブジェクトの場所は、最終的には処理のためにビデオカードに送信されます。本格的なデバッグの準備をしてください。

この回答では、画像処理を通じて目的を達成するための2つの方法について簡単に説明しました。それらに興味がある場合は、エクスプロイトオンラインゲーム(第6章)を参照してください。


43

UPDATE 2018-07-26:以上です!この種のゲームが解決できるようになりました!OpenAIを使用し、ゲームDotA 2に基づいて、チームは5v5ゲームでセミプロのゲーマーを倒すことができるAIを作成できます。DotA 2を知っていれば、このゲームは力学的にはディアブロのようなゲームに非常に似ていますが、チームプレイのためにさらに複雑であると主張できます。

予想どおり、これはディープラーニングによる強化学習の最新の進歩と、APIをきちんと取得できるためAIの開発を容易にするOpenAIのようなオープンゲームフレームワークを使用し、ゲームを加速できるために達成されました(再生されるAI自分自身に対する毎日180年のゲームプレイに相当します!)。

2018年8月5日(10日で!)、このAIをトップのDotA 2ゲーマーと対戦する予定です。これがうまくいくなら、大きな革命を予想してください。おそらくGoゲームの解決ほどにはメディア化されていませんが、それでもゲームAIにとって大きなマイルストーンになるでしょう!

UPDATE 2017-01: AlphaGoの成功以来、この分野は非常に速く動いており、ほぼ毎月ゲームでの機械学習アルゴリズムの開発を促進する新しいフレームワークがあります。これが私が見つけた最新のもののリストです:

  • OpenAIのユニバース機械学習を使用して事実上すべてのゲームをプレイするためのプラットフォーム。APIはPythonであり、VNCリモートデスクトップ環境の背後でゲームを実行するため、あらゆるゲームの画像をキャプチャできます。おそらく、ユニバースを使用して、機械学習アルゴリズムでDiablo IIをプレイできます。
  • OpenAIのジム:Universeに似ていますが、強化学習アルゴリズムを具体的にターゲットにしています(そのため、AlphaGoで使用されるフレームワークの一般化のようなものですが、より多くのゲームに対して)。OpenAI Gymを使用したブレイクアウトやドゥームなどのゲームへの機械学習の適用をカバーするUdemyのコースがあります。
  • TorchCraftTorch(機械学習フレームワーク)とStarCraft:Brood Warの架け橋。
  • pyGTA5:画面キャプチャのみを使用して、GTA5で自動運転車を構築するプロジェクト(オンラインビデオがたくさんあります)。

とてもエキサイティングな時間!

重要な更新(2016年6月): OPで指摘されているように、ビジュアル入力のみを使用してゲームをプレイするように人工ネットワークをトレーニングするこの問題は、いくつかの深刻な機関によって現在取り組んでおり、DeepMind Deep-Qlearning-Network(DQN )

そして今、次のレベルの課題に取り組みたい場合、ViZDoomなどのさまざまなAIビジョンゲーム開発プラットフォームの 1つを使用できます。ViZDoomは、高度に最適化されたプラットフォーム(7000 fps)であり、ネットワークをトレーニングして、視覚的な入力のみを使用してDoomをプレイできます。 :

ViZDoomでは、視覚情報(画面バッファー)のみを使用してDoomを再生するAIボットを開発できます。これは主に、機械視覚学習、特に深層強化学習の研究を目的としています。ViZDoomはZDoomに基づいており、ゲームの仕組みを提供します。

そして結果は非常に素晴らしいです、彼らのウェブページのビデオとここの素晴らしいチュートリアル(Pythonで)を見てください!

Quakesと呼ばれるQuake 3 Arena用の同様のプロジェクトもあります。これは、基礎となるゲームデータへの簡単なAPIアクセスを提供しますが、それをスクラップして、スクリーンショットとAPIを使用して、エージェントを制御するだけです。

スクリーンショットだけを使用するのにこのようなプラットフォームが役立つのはなぜですか?基盤となるゲームデータにアクセスしない場合でも、そのようなプラットフォームは以下を提供します。

  • ゲームの高性能実装(より短い時間でより多くのデータ/再生/学習世代を生成できるため、学習アルゴリズムはより速く収束できます!)
  • エージェントを制御するためのシンプルで応答性の高いAPI(つまり、人間の入力を使用してゲームを制御しようとすると、一部のコマンドが失われる可能性があるため、出力の信頼性の低下にも対処します...)。
  • カスタムシナリオの簡単なセットアップ。
  • カスタマイズ可能なレンダリング(処理を容易にするために取得した画像を「単純化」するのに役立ちます)
  • 同期(ターンバイターン)プレイ(最初にリアルタイムで動作するためにアルゴリズムを必要としないため、複雑さが大幅に軽減されます)。
  • クロスプラットフォーム互換性、レトロコンパチビリティ(新しいゲームアップデートがあったときにボットがゲームで動作しなくなるリスクがない)などの追加の便利な機能

要約すると、これらのプラットフォームの優れた点は、対処する必要があった以前の技術的な問題(ゲーム入力の操作方法、シナリオの設定方法など)の多くが軽減されるため、学習アルゴリズムに対処するだけで済むことです。自体。

さあ、仕事に取り掛かって、これまでで最高のAIビジュアルボットにしてください;)


ビジュアル入力のみに依存するAIの開発の技術的な問題を説明する古い投稿

上記の同僚の何人かに反して、私はこの問題が扱いにくいとは思いません。しかし、それは確かに非常に難しいものです!

上記で指摘した最初の問題は、ゲームの状態を表すことです。1つの画像だけで完全な状態を表すことはできません。何らかの記憶を維持する必要があります。(健康だけでなく、装備されているオブジェクト、使用可能なアイテム、クエスト、ゴールなども含まれます)。このような情報を取得するには、2つの方法があります。最も信頼性が高く簡単なゲームデータに直接アクセスする方法です。または、いくつかの簡単な手順(インベントリを開く、スクリーンショットを撮る、データを抽出する)を実装して、これらの情報の抽象的な表現を作成することもできます。もちろん、スクリーンショットからデータを抽出するには、監視対象の手順(完全に定義したもの)または監視なし(機械学習アルゴリズムを介して)を入力する必要がありますが、複雑さは大幅に増大します...)。教師なし機械学習の場合、構造学習アルゴリズムと呼ばれるごく最近の種類のアルゴリズムを使用する必要があります(これは、データを分類したり値を予測する方法ではなく、データの構造を学習します)。http://techtalks.tv/talks/54422/

次に、必要なすべてのデータをフェッチしても、ゲームが部分的にしか観察できないという別の問題があります。したがって、世界の抽象的なモデルを挿入し、アバターの場所だけでなく、画面外のクエストアイテム、目標、敵の場所など、ゲームからの処理済み情報をフィードする必要があります。Vermaak 2003のMixture Particle Filtersを調べてみてください。

また、あなたが持っている必要があり自律エージェントをして、目標が動的に生成されます。試すことができるよく知られているアーキテクチャはBDIエージェントですが、実際のケースでこのアーキテクチャを機能させるには、おそらくそれを微調整する必要があります。別の方法として、再帰的ペトリネットもあります。これは、ペトリネットのあらゆる種類のバリエーションと組み合わせて、非常によく研究された柔軟なフレームワークであり、優れた形式化と証明の手順を備えているため、目的を達成できます。

そして最後に、上記のすべてを行ったとしても、ゲームを加速した速度でエミュレートする方法を見つける必要があります(ビデオを使用するのは良いかもしれませんが、問題は、アルゴリズムが制御せずに見ているだけで、それ自体を試すことは学習にとって非常に重要です)。実際、現在の最先端のアルゴリズムでは、人間が学習できるのと同じことを学習するのに多くの時間がかかることはよく知られています(強化学習ではさらにそうです)。したがって、プロセスを高速化できない場合(つまり、ゲーム時間を短縮できない場合)、アルゴリズムは単一のライフタイムに収束することもありません...

結論として、ここで達成したいのは、現在の最先端のアルゴリズムの限界(そしておそらくそれを少し超える)です。私はそれが可能かもしれないと思うが、それは場合でも、あなたは時間のヘラの多くを費やすつもりです、これは理論上の問題ではなくなるため、実用上の問題はあなたがここに近づいているので、あなたは、実装とする必要がある多くを組み合わせますそれを解決するためのさまざまなAIアプローチの

チーム全体で取り組んでいる数十年の研究では十分ではない可能性があるため、あなたが一人でパートタイムで取り組んでいる場合は(おそらく生計を立てているため)、近くに到達することなく一生を過ごすことができます。実用的なソリューション。

したがって、ここでの最も重要なアドバイスは、期待低くして、複雑さを軽減することですできる限りすべての情報を使用して問題を解決し、スクリーンショットに依存することをできるだけ避け(つまり、ゲームに直接フックしてDLLインジェクションを探す)、監視された手順を実装して問題を単純化し、アルゴリズムはすべてを学習します(つまり、今のところ画像処理を可能な限り落とし、内部のゲーム情報に依存します。後でアルゴリズムが適切に機能する場合は、AIプログラムの一部を画像処理に置き換えることで、徐々に完全な目標を達成できます。たとえば、何かがうまく機能する場合は、問題を複雑にして、監視された手順とメモリゲームデータをスクリーンショットの監視されていない機械学習アルゴリズムで置き換えることができます)。

頑張ってください、そしてそれがうまくいけば、必ず記事を公開してください、あなたは確かにそのような難しい実用的な問題を解決することで有名になるでしょう!


27

あなたが追求している問題は、あなたがそれを定義した方法では扱いにくいものです。ニューラルネットワークが問題の豊富な表現を「魔法のように」学習すると考えるのは、通常、誤りです。ANNがタスクに適したツールであるかどうかを判断する際に留意すべき良い事実は、それが補間法であることです。関数の近似を見つけることで問題を組み立てることができるかどうか考えてください。この関数には多くのポイントがあり、ネットワークの設計とトレーニングに多くの時間がかかります。

あなたが提案する問題はこのテストに合格しません。ゲームコントロールは、画面上の画像の機能ではありません。プレイヤーがメモリに保持しなければならない多くの情報があります。簡単な例として、ゲームの店に入るたびに画面が同じに見えることはよくあります。ただし、購入するものは状況によって異なります。ネットワークがどれほど複雑であっても、画面のピクセルがその入力である場合、店舗に入ると常に同じアクションを実行します。

その上、スケールの問題があります。あなたが提案するタスクは単純すぎて、妥当な時間で学ぶことはできません。ゲームAIの仕組みについては、aigamedev.comを参照してください。一部のゲームでは人工ニューラルネットワークが使用されていますが、使用方法は非常に限られています。ゲームAIは開発が難しく、開発に費用がかかることがよくあります。機能的ニューラルネットワークを構築する一般的なアプローチがあった場合、業界はおそらくそれを手にしたでしょう。tic-tac-toeのような、はるかに単純な例から始めることをお勧めします。


けっこうだ。ネットワークに似たほとんどすべてをANNと呼ぶことができますが、実質的な議論につながることはほとんどありません。:)
ドン・レバ

ええええ...私のモチベーションをもっと詳しく説明する必要がありました。私はゲームAIを作成するより良い方法があることを知っていますが、これは私がアップグレードしているANNシミュレータの限界を押し上げるために行っています。参照:stanford.edu/group/pdplab/pdphandbook
zergylord

1
いずれにせよ、Don Rebaは正しいです。私も、Diabloのようなものの戦略を、多くの事前知識を組み込んで強化学習アプローチの基礎となる有用な機能を抽出せずに学ぶのは現実的ではないと思います。今日のコンピュータを使用して不可能ではないにしても、ビデオ入力から学ぶだけでは非常に困難になります。
2011

18

私はあなたが画像処理に対処する必要はありませんゲームを選ぶことをお勧めので、このプロジェクトの中心は、ANNで何ができるか模索しているように、ここでの他の回答から、のように思えるいる(と思われる本当に Aで困難な作業リアルタイムゲーム)。Starcraft APIを使用してボットを構築すると、関連するすべてのゲーム状態にアクセスできるようになります。

http://code.google.com/p/bwapi/


2

最初のステップとして、連続するフレームの違いを確認します。背景と実際のモンスタースプライトを区別する必要があります。世界にもアニメーションが含まれていると思います。それらを見つけるために、キャラクターを動かし、世界とともに動くすべてのものを大きな背景画像/アニメーションに収集します。

(FFTを使用して)相関関係のある敵を検出および識別できます。ただし、アニメーションがピクセル単位で繰り返される場合は、いくつかのピクセル値を確認する方が速くなります。主なタスクは、新しいオブジェクトが画面に表示されたときに識別し、スプライトフレームのすべてのフレームをデータベースに徐々に追加する堅牢なシステムを作成することです。おそらく、武器のエフェクトのモデルも作成する必要があります。それらは、相手のデータベースが乱雑にならないように差し引く必要があります。


2
Diablo IIゲームに慣れているので、256色を使用していると言えます(一部のモードでハイまたはトゥルーカラーを使用する場合を除く)。また、スプライトを多用してさまざまなオブジェクトを表示します。一部のスプライトを(スクリーンショットからでも)抽出できる場合は、スプライトに基づいてオブジェクトを認識するようにツールをトレーニングすることができます(たとえば、ドロップした「マイナーヒーリングポーション」は常に同じように見えます)。しかし、Diablo II固有のものについて深く掘り下げると、さらに多くの質問が発生します。頑張ってください
イヴァイロスラヴォフ

1

すべての可能な「動き」のセットから「結果」のセット(確率を伴う可能性がある)をいつでも生成でき、ゲームに一貫性の概念がある(たとえば、レベルXを何度もプレイできる)と想定すると、再び)、ランダムな重みを持つN個のニューラルネットワークから始めて、それぞれに次のようにゲームをプレイさせることができます。

1)考えられるすべての「移動」について、考えられる「結果」のリストを(関連する確率とともに)生成します。2)各結果について、ニューラルネットワークを使用して、「結果」の関連する「価値」(スコア)を決定します(たとえば、 -1と1の間の数、1が最良の結果、-1が最悪)3)確率が最も高い*スコアにつながる「移動」を選択します4)移動が「勝つ」または「負ける」場合、停止します。それ以外の場合は、手順1に戻ります。

一定の時間(または「勝つ」/「失う」)の後、ニューラルネットワークが「目標」にどれだけ近かったかを評価します(これには、おそらくドメインに関する知識が含まれます)。次に、ゴールから最も遠いNNの50%(または他のパーセンテージ)を破棄し、上位50%のクロスオーバー/変異を実行して、新しいNNのセットを再度実行します。満足のいくNNが出るまで実行を続けます。


ああ、面白いことにGAをミックスに追加する。残念ながら、ネットワークでは実際にキープレス/マウスの動きをアクションとして送信しているため、ネットワークごとに1台の物理コンピューターが必要になります> <別の問題は、環境の状態空間が離散的ではないことです(技術的にはそうですが、非常に細かい)。たとえば、マウスクリックに関連する可能性のある結果を想像してください。ネットの制御下にあるキャラクターが移動または攻撃する可能性がありますが、敵も移動する可能性があり、影や天気の影響などの環境とはピクセルごとに異なります。 。
zergylord

まあ私の観点からは、ニューラルネットでできることはそれほど多くありません。せいぜい、離散状態空間の概念の学習可能なヒューリスティック関数として使用できるようです。敵の変動性を組み込むには、おそらく他のヒューリスティックを使用する必要があります。次に、それを使用して、関連する確率とともに、移動ごとに可能な結果状態のセットを作成できます。また、初期構成と最終構成の静的な概念がある限り、一度に1つずつ各ニューラルネットを実行できます。
tstramer

1

あなたの最善の策は、数個/ 5月のネットワークを含む複雑なアーキテクチャであると思います:1つはアイテムを認識して応答し、1つは店用、1つは戦闘用(おそらくここでは、敵の認識用、攻撃用の1つ)などです。 。

次に、可能な限り最も単純なディアブロIIゲームプレイ、おそらく野蛮人について考えてみましょう。次に、第1領域のように、最初は単純にしてください。

次に、価値のある「目標」は、敵のオブジェクトの消滅と、ヘルスバーの減少(逆にスコア付け)でしょう。

これらの個別の「より単純な」タスクを処理したら、「マスター」ANNを使用して、アクティブ化するサブANNを決定できます。

トレーニングに関しては、3つのオプションしか表示されません。上記の進化的な方法を使用できますが、そのために個別のプログラム全体をコーディングしない限り、「勝者」を手動で選択する必要があります。あなたはネットワークに誰かがプレイするのを「見て」もらうことができます。ここでは、プレーヤーまたはプレーヤーのスタイルのグループをエミュレートする方法を学びます。ネットワークは、プレーヤーの次のアクションを予測しようとし、正しい推測のために強化されます。実際にANNを取得した場合、これはビデオゲームプレイで実行でき、実際のライブゲームプレイは必要ありません。最後に、ネットワークにゲームをプレイさせ、敵の死、レベルアップ、健康回復などをポジティブな強化として、プレーヤーの死、体力損失などをネガティブな強化として行うことができます。しかし、単純なネットワークでさえ、単純なタスクでさえ学ぶために何千もの具体的なトレーニングステップが必要であることを確認すると、

あなたのプロジェクトはすべて非常に野心的です。しかし、私は、十分な時間が与えられれば、「理論的にはそれができる」と考える人もいます。

お役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.