Tic-Tac-Toe ボードの状態 (最終または中間) を「X 勝」、「O 勝」、または「引き分け」に分類するニューラル ネットワークの設定に苦労しています。
現在の解決策と結果について説明します。アドバイスをいただければ幸いです。
* データ セット * データセット = 958 の可能なエンド ゲーム + 958 のランダム ゲーム = 1916 のボード状態 (ランダム ゲームは不完全かもしれませんが、すべて合法です。つまり、両方のプレイヤーが同時に勝つことはありません)。
トレーニング セット = データセットの 1600 のランダム サンプル テスト セット = 残りの 316 ケース
私の現在の疑似ランダム開発シナリオでは、データセットには次の特徴があります。トレーニング セット: - "X" で 527 勝 - "O" で 264 勝 - 809 引き分け テスト セット: - "X" で 104 勝 - "O" で 56 勝 - 156 引き分け
* モジュレーション * 入力層: 18 個の入力ニューロンがあり、それぞれがボードの位置とプレーヤーに対応しています。したがって、ボード (B=空白): xxo ox B B o X は次のようにエンコードされます: 1 0 1 0 0 1 0 1 1 0 0 0 0 0 1 1 0
出力層: 各結果 (X 勝、O 勝、引き分け) に対応する 3 つの出力ニューロン。
* 建築 *
基づく: http://www.cs.toronto.edu/~hinton/csc321/matlab/assignment2.tar.gz
1 つの隠れ層 隠れ層の活性化関数: ロジスティック出力層の活性化関数: Softmax エラー関数: Cross-Entropy
* 結果 *
100% の正しい分類率を達成するパラメーターの組み合わせはないようです。いくつかの例:
NHidden LRate InitW MaxEpoch Epochs FMom Errors TestErrors
8 0,0025 0,01 10000 4500 0,8 0 7
16 0,0025 0,01 10000 2800 0,8 0 5
16 0,0025 0,1 5000 1000 0,8 0 4
16 0,0025 0,5 5000 5000 0,8 3 5
16 0,0025 0,25 5000 1000 0,8 0 5
16 0,005 0,25 5000 1000 0,9 10 5
16 0,005 0,25 5000 5000 0,8 15 5
16 0,0025 0,25 5000 1000 0,8 0 5
32 0,0025 0,25 5000 1500 0,8 0 5
32 0,0025 0,5 5000 600 0,9 0 5
8 0,0025 0,25 5000 3500 0,8 0 5
重要 - 次のいずれかを改善できると思われる場合: - データセットの特性 (トレーニングとテスト ケースのソースと量) が最適ではありません。- 別の問題の変調がより適しています (入力/出力ニューロンのエンコード) - より優れたネットワーク アーキテクチャ (隠れ層の数、活性化/エラー関数など)。
この点に関する私の現在のオプションは、最適ではないにしても、システムが 100% の正しい分類率を持つことを妨げるべきではないと仮定して、他の考えられる問題に焦点を当てたいと思います。
言い換えれば、ゲームの単純さを考えると、このデータセット/変調/アーキテクチャでそれを行う必要があるため、パラメータに関して何が間違っているのでしょうか?
私は ANN の経験があまりなく、私の主な質問は次のとおりです。16 個の隠れニューロンを使用して、ANN は各隠れユニットを「特定の方法で勝利した特定のプレイヤー」に関連付けることを学習できます (3 つの異なる行 + 3 つの異なる列 +対角2本)※2人プレイ
この設定では、重みの「最適な」セットは非常に簡単です。各非表示ユニットには、3 つの入力ユニット (プレーヤーの行、列、または対角線に対応する) からの「より大きな」接続重みと、「より大きな」接続重みがあります。出力ユニットの 1 つに (そのプレイヤーの「勝利」に対応します)。
上の表が示すように、何をしてもテストエラーの数を減らすことはできません。
アドバイスをいただければ幸いです。