Q関数にニューラルネットワークを利用するQ学習アルゴリズムの2次元グリッド世界の状態をより適切に表現しようとしています。
チュートリアル「ニューラル ネットワークを使用した Q ラーニング」では、グリッドは整数 (0 または 1) の 3 次元配列として表されます。1 番目と 2 番目の次元は、グリッド ワールド内のオブジェクトの位置を表します。3 番目の次元は、それがどのオブジェクトであるかをエンコードします。
したがって、4 つのオブジェクトを含む 4x4 グリッドの場合、64 要素 (4x4x4) を含む 3 次元配列で状態を表します。これは、Meural ネットワークの入力層に 64 個のノードがあり、グリッド ワールドの状態を入力として受け入れることができることを意味します。
トレーニングに時間がかからないように、ニューラル ネットワークのノード数を減らしたいと考えています。では、グリッドの世界を double の 2 次元配列として表すことはできますか?
4x4 グリッドの世界を double の 2-d 配列として表現しようとし、さまざまなオブジェクトを表すためにさまざまな値を使用しました。たとえば、プレイヤーを表すのに 0.1 を使用し、ゴールを表すのに 0.4 を使用しました。しかし、これを実装すると、アルゴリズムはまったく学習を停止しました。
今、私の問題は、レイヤーで使用しているアクティベーション関数を変更する必要があることだと思います。現在、双曲線正接活性化関数を使用しています。入力値の範囲は (0 - 1) です。出力値の範囲は (-1 から 1) です。シグモイド関数も試しました。
これは質問するのが難しい問題だと思います。ネットワークのアーキテクチャに関する提案をいただければ幸いです。
アップデート
ゲームには 3 つのバリエーションがあります。 1. 世界は静的です。すべてのオブジェクトは同じ場所から始まります。2. プレイヤーの開始位置はランダムです。他のすべてのオブジェクトは同じままです。3. 各グリッドは完全にランダムです。
さらにテストを重ねると、最初の 2 つのバリアントを 2 次元配列表現で完成させることができることがわかりました。したがって、私のネットワーク アーキテクチャは問題ないと思います。私が発見したのは、私のネットワークが壊滅的な忘却の影響を非常に受けやすくなっているということです (3 次元配列を使用していたときよりもはるかに顕著です)。「体験再生」を使って学習させなければなりませんが、それでも3番目の亜種を完成させることはできません。がんばります。グリッドの世界表現を変更することでどれだけの違いが生じたかに、私はかなりショックを受けました。まったくパフォーマンスが向上していません。