Tic Tac Toe神经网络作为评价函数

时间:2012-05-21 05:48:22

标签: machine-learning neural-network tic-tac-toe backpropagation

我一直在尝试使用多层感知器和反向传播来编写一个用于tic tac toe的AI。我的想法是训练神经网络成为电路板状态的准确评估函数,但问题是即使在分析了数千个游戏之后,网络也没有输出准确的评估。

我正在使用27个输入神经元; 3x3板上的每个方块与三个输入神经元相关联,这三个输入神经元接收0或1的值,具体取决于方块是否具有x,o或空白。这27个输入神经元向10个隐藏的神经元发送信号(我任意选择10个,但我也试过了5个和15个)。

对于训练,我已经让程序通过使用当前评估函数对自己进行游戏来生成一系列游戏,以选择每一方被视为最佳移动的内容。在生成游戏之后,NN通过将给定板状态的正确输出作为其后面的板状态的值(使用评估函数)来编译训练示例(其包括板状态和正确的输出)。游戏序列。我认为这是Gerald Tesauro在编写TD-Gammon时所做的,但我可能误解了这篇文章。 (注意:我在本文的底部放置了更新权重的具体机制)。

我已经尝试了各种学习率的值,以及不同数量的隐藏神经元,但似乎没有任何效果。即使经过数小时的“学习”,战略也没有明显改善,评估功能也不会接近准确。

我意识到有更简单的方法来编写tic tac toe,但我想用多层感知器做这件事,以便我可以将它应用于以后连接4。这甚至可能吗?我开始认为对于具有合理数量的隐藏神经元的tic tac toe板没有可靠的评估功能。

我向你保证,我不会找一些快速的代码来交作业作业。我已经有一段时间没有成功工作,只想知道我做错了什么。所有建议都表示赞赏。


这是我用于NN的具体机制:

27个输入神经元中的每一个接收0或1,其通过可微分的S形函数1 /(1 + e ^( - x))。每个输入神经元i发送该输出(i.output),乘以一些权重(i.weights [h])到每个隐藏的神经元h。这些值的总和被隐藏神经元h(h.input)作为输入,并且该输入通过sigmoid以形成每个隐藏神经元(h.output)的输出。我将lastInput表示为所有隐藏神经元中(h.output * h.weight)的总和。然后,板的输出值是sigmoid(lastInput)。

我将学习率表示为alpha,并将错误表示为正确的输出减去实际输出。另外,我让dSigmoid(x)等于x点处的sigmoid的导数。

每个隐藏神经元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 个答案:

答案 0 :(得分:6)

Tic tac toe有3 ^ 9 = 19683个州(实际上,其中一些不合法,但数量级是正确的)。输出功能不顺畅,所以我认为反向传播网络能做的最好的就是“死记硬背学习”所有这些状态的查找表。

考虑到这一点,10个隐藏的神经元似乎非常小,并且你无法通过教授几千个游戏来训练20k个不同的查找表条目。为此,网络必须从已经教过的状态“推断”它从未见过的状态,我不知道它是如何做到的。

答案 1 :(得分:0)

您可能需要考虑多个隐藏图层,以及增加隐藏图层的大小。为了进行比较,Fogel和Chellapilla使用了两层40和10个神经元来编程一个跳棋玩家,所以如果你需要更多的东西,那么可能会出现一些错误。

您可能还想使用偏置输入,如果您还没有。

你的基本方法似乎很合理,虽然我不是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.

我认为你的意思是你正在使用一些已知良好的方法(如minimax游戏树)来确定训练样例的“正确”答案。你能解释一下吗?或者,如果我是正确的,就对称板而言,似乎有一个微妙的处理,它可能有不止一个同样好的最佳响应。如果您只是将其中一个视为正确,那么可能会导致问题。 (或者它可能不会,我不确定。)

答案 2 :(得分:0)

只是想提出另一个想法,你是否考虑过使用强化学习来完成这项任务?这将更容易实施,更有效。例如,您可以使用通常用于游戏的Q学习。

答案 3 :(得分:0)

Here,您可以找到一种使用自我玩法训练Tik Tak Toe(可变木板尺寸)的神经网络的实现。使用简单的渐变复制技巧在整个游戏中向后传播渐变。