シンプルなおもちゃのゲームを書いていますが、その上にディープニューラルネットワークをトレーニングするつもりです。ゲームのルールはおおよそ次のとおりです。
- ゲームには、六角形のセルで構成されるボードがあります。
- 両方のプレイヤーは、ボード上で自由に配置することを選択できるピースの同じコレクションを持っています。
- 互いに位置と構成に応じて、異なるタイプのピースを配置するとポイントが与えられます(または相手のポイントが減ります)。
- より多くのポイントを獲得した人が勝ちます。
追加のルール(ターン、ピースの数、タイプなど)がありますが、この質問の文脈では重要ではありません。自分自身と対戦することで繰り返し学習できるディープニューラルネットワークを考案したいと思います。私の質問は、入力と出力の表現についてです。特に:
- ピースのパターンが重要なので、少なくともいくつかの畳み込み層があると考えていました。ボードはさまざまなサイズにすることができますが、原則として非常に小さいです(テストでは6x10、数個のセルで拡張するため)。それは理にかなっていますか?どのようなプーリングを使用できますか?
- 両側を表現するには?で、この論文、外出先について、著者は、2つの入力行列、白の石と黒の石のための1のための1つを使用します。この場合でも機能しますか?しかし、A、B、C、Dなど、さまざまなタイプのピースがあることを思い出してください。2x4の入力行列を使用する必要がありますか?それは非常にまばらで、私にはほとんど効率的ではないようです。たたみ込み層が機能するにはあまりにもまばらになると思います。
- 出力は、ボードの位置を表すマトリックス上の確率の分布に加えて、プレイするピースを示す確率の別の配列になると考えました。ただし、ターンを渡す能力も表現する必要があります。これは非常に重要です。他の確率の中でその重要性を薄めることなくそれを行うにはどうすればよいですか?
- そして最も重要なことは、勝ち手のみを強制するのか、それとも負け手を強制するのか?希望する確率を1に設定しただけなので、勝ちの動きを強制するのは簡単です。その移動確率を0に設定し、他のすべてを同じ値に設定しますか?また、最終的なスコアの差によって動きを強制することは意味がありますが、これはおおよそ確率である出力の意味に反しますか?
また、フレームワークとしてSynapticを使用することを考えてnode.jsでゲームエンジンを開発しましたが、畳み込みネットワークで動作するかどうかはわかりません(ローカルの知覚フィールドに関連付けられた重みを修正する方法があるとは思いません)。ノードと互換性のある他のライブラリに関するアドバイスはありますか?