1. ホーム
  2. machine-learning

[解決済み] Diablo 2をプレイするための人工ニューラルネットワークを視覚的に学習させる方法とは?

2022-05-15 19:32:48

質問

私は今、ANNにビデオゲームをプレイしてもらおうと試みているのですが、ここの素晴らしいコミュニティから何か助けを得たいと思っていました。

私は Diablo 2 に落ち着きました。ゲームプレイはリアルタイムで、アイソメトリックな視点から、プレイヤーはカメラを中心とした一人のアバターを操作します。

具体的には、自分のキャラクターの体力を0にすることなく、××の経験点を得るというもので、経験点はモンスターを倒すことで得られます。以下、ゲームプレイの一例です。

さて、ネットは画面上のピクセルから得た情報のみに基づいて動作するようにしたいので、効率的にプレイするためには、非常に豊富な表現を学習しなければなりません。なぜなら、そのためには、ゲーム世界をオブジェクトに分割する方法と、オブジェクトと対話する方法を(少なくとも暗黙的に)知る必要があると思われるからです。

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

そこで質問ですが、このタスクの少なくとも一部を行うためにネットを訓練するために、他にどのような方法が考えられますか?できれば、何千ものラベル付き例を作成せずに。

もう少し方向性を教えてください。私は、強化学習の他のソースや、この設定で有用な情報を抽出するための教師なしメソッドを探しています。または、手動でラベル付けすることなく、ゲームの世界からラベル付きデータを取得する方法を考えることができれば、教師ありのアルゴリズムです。

更新(2012/04/27)しました。

不思議なことに、私はまだこれに取り組んでいて、進展しているようです。ANN コントローラを動作させる最大の秘訣は、そのタスクに適した最も高度な ANN アーキテクチャを使用することです。したがって、私はこれまで ディープ ビリーフ ネット で構成される 条件付き制限付きボルツマンマシン で微調整する前に、教師なし方式で(私がゲームをプレイしているビデオを使って)学習させたものです。 時間差バックプロパゲーション (すなわち、標準的なフィードフォワード ANN による強化学習) を使って微調整します。

特にリアルタイムでの行動選択の問題や、ANN処理のためにカラー画像をどのようにエンコードするかなど、より価値のある情報を求めています :-)

更新(10/21/15)しました。

ちょうど私がこの質問をしたことを思い出したので、これはもはやクレイジーなアイデアではないことを述べておこうと思いました。私の最後の更新以来、DeepMind はその性質について発表しました。 ニューラル ネットワークに視覚入力からアタリ ゲームをプレイさせることに関する論文 . 実際、私が彼らのアーキテクチャを使って限られたサブセットの『Diablo 2』をプレイするのを阻んでいる唯一のものは、基盤となるゲーム エンジンにアクセスできないことです。画面にレンダリングしてからネットワークにリダイレクトするのは、合理的な時間でトレーニングするにはあまりにも遅いのです。したがって、この種のボットが「Diablo 2」をプレイする姿をすぐに目にすることはないでしょうが、それは、オープンソースか、レンダリングターゲットにAPIアクセスできるものをプレイすることになるからでしょう。(おそらく Quake?)

どのように解決するのですか?

ANNをどのように学習させるか悩んでいるようですが このプロジェクトには、複雑な問題が隠されています。 が隠されています。コンピュータゲームにおけるオブジェクト/キャラクタ認識 画像処理 というのは、非常に難易度の高い作業です(と言うより クレイジー FPSやRPGのようなゲームではありません)。私はあなたのスキルを疑っていませんし、それができないとも言いませんが、ANN自体の実装よりも、認識に関する作業に10倍以上の時間を費やすことは簡単です(あなたがすでにANNの経験を持っていると仮定すると)。 デジタル画像処理 の技術)。

私は、あなたのアイデアは非常に 興味深いものであり また、非常に 野心的で . この時点で、あなたはそれを再考することをお勧めします。このプロジェクトは、あなたが大学のために計画しているものであると私は感じているので、作品の焦点は本当にANNである場合は、おそらく別のゲーム、より簡単なものを選択する必要があります。

のヒントを探しに来た人がいたのを覚えています。 別の、しかしどうにかして似たようなプロジェクト 少し前のことです。調べてみる価値はありそうです。

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

一つの方法 ボットを実装するための はゲームクライアントのメモリにアクセスします。 のメモリにアクセスして、画面上のキャラクターの位置や体力などの関連情報を探します。コンピュータのメモリを読み取るのは簡単ですが、メモリのどこを探せばよいかを正確に把握するのは容易ではありません。メモリスキャナのような チート エンジン のようなメモリスキャナは、この点で非常に役に立ちます。

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

この回答では、画像処理によってあなたが望むものを達成するための2つの方法について簡単に説明しました。それらに興味がある場合は、次のサイトで詳細を見ることができます。 オンラインゲームを利用する (第6章)に書かれています。