3

多層パーセプトロンとバックプロパゲーションを使用して、三目並べの AI をプログラムしようとしています。私の考えでは、ニューラル ネットワークをトレーニングしてボードの状態を正確に評価できるようにしようと考えていましたが、問題は、何千ものゲームを分析した後でも、ネットワークが正確な評価を出力しないことです。

27 個の入力ニューロンを使用しています。3x3 ボードの各正方形は、正方形に x、o、または空白があるかどうかに応じて、0 または 1 の値を受け取る 3 つの入力ニューロンに関連付けられています。これらの 27 個の入力ニューロンは、10 個の隠れニューロンに信号を送信します (10 個を任意に選択しましたが、5 個と 15 個も試しました)。

トレーニングのために、現在の評価関数を使用して自分自身と対戦し、各側に最適な動きと見なされるものを選択することで、プログラムに一連のゲームを生成させました。ゲームを生成した後、NN は、特定のボード状態の正しい出力を (評価関数を使用して) ボード状態の値として取得することにより、(ボード状態と正しい出力で構成される) トレーニング例をコンパイルします。ゲームシーケンス。これは、ジェラルド・テサウロが TD-Gammon をプログラミングするときに行ったことだと思いますが、記事を誤解した可能性があります。(注: 重みを更新するための特定のメカニズムについては、この投稿の最後に記載しています)。

学習率のさまざまな値とさまざまな数の隠れニューロンを試しましたが、何も機能していないようです。何時間も「学習」した後でも、戦略に目に見える改善は見られず、評価関数はどこにも正確にはほど遠い.

三目並べをプログラムするもっと簡単な方法があることを認識していますが、後で接続 4 に適用できるように、多層パーセプトロンを使用して実行したいと考えています。これは可能ですか?妥当な量の隠れニューロンを備えた三目並べボードの信頼できる評価関数はないと考え始めています。

宿題のために提出するための簡単なコードを探しているわけではないことを保証します。私はしばらくうまくいっていませんでしたが、何が間違っているのか知りたいだけです。すべてのアドバイスをいただければ幸いです。


これは、NN に使用した特定のメカニズムです。

27 個の入力ニューロンのそれぞれは、微分可能なシグモイド関数 1/(1+e^(-x)) を通過する 0 または 1 を受け取ります。各入力ニューロン i は、この出力 (i.output) に何らかの重み (i.weights[h]) を掛けて各隠れニューロン h に送信します。これらの値の合計は、隠れニューロン h (h.input) によって入力として取得され、この入力はシグモイドを通過して、各隠れニューロン (h.output) の出力を形成します。すべての非表示ニューロンの (h.output * h.weight) の合計を lastInput とします。ボードの出力値は sigmoid(lastInput) です。

学習率をアルファ、エラーを正しい出力から実際の出力を差し引いたものとします。また、dSigmoid(x) を点 x でのシグモイドの微分に等しくします。

各非表示ニューロン h の重みは、値 (alpha*err*dSigmoid(lastInput)*h.output) によって増分され、指定された入力ニューロン i から指定された非表示ニューロン h への信号の重みは、値によって増分されます。 : (alpha*err*dSigmoid(lastInput)*h.weight*dSigmoid(h.input)*i.output)。

バックプロパゲーションに関するこの講義からこれらの式を取得しました: http://www.youtube.com/watch?v=UnWL2w7Fuo8 .

4

4 に答える 4

5

Tic tac toe には 3^9 = 19683 の州があります (実際、合法でないものもありますが、大きさの順序は正しいです)。出力関数はスムーズではないため、バックプロパゲーション ネットワークでできる最善の方法は、これらすべての状態のルックアップ テーブルを「機械学習」することだと思います。

それを考えると、10 個の隠れニューロンは非常に小さいように見えます。また、数千のゲームを教えて 20,000 の異なるルックアップ テーブル エントリをトレーニングする方法はありません。そのためには、ネットワークは、教えられた状態から見たことのない状態に「外挿」する必要があり、それがどのようにできるかわかりません。

于 2012-05-21T09:37:43.570 に答える
0

隠しレイヤーのサイズを大きくするだけでなく、複数の隠しレイヤーを検討することもできます。比較のために、Fogel と Chellapilla は 40 個と 10 個のニューロンの 2 つの層を使用してチェッカー プレーヤーをプログラムしました。

まだバイアス入力を使用していない場合は、バイアス入力を使用することもできます。

あなたの基本的な方法論は正しいようですが、これが何を意味するのか100%確信が持てません:

After generating a game, the NN compiles training examples (which comprise a board state and the correct output) by taking the correct output for a given board state to be the value (using the evaluation function) of the board state that follows it in the game sequence.

トレーニング例の「正しい」答えを決定するために、既知の優れた方法(ミニマックスゲームツリーなど)を使用していることを意味していると思います。それについて少し説明してもらえますか?または、私が正しければ、対称的なボードに関しては、対処すべき微妙な点があり、同じように優れた最良の応答が複数ある可能性があるようです。そのうちの 1 つだけを正しいものとして扱うと、問題が発生する可能性があります。(または、そうではないかもしれません。よくわかりません。)

于 2012-05-21T18:22:55.563 に答える