建立人工神经网络对Tic-Tac-Toe End-Games进行分类

时间:2012-07-16 13:10:44

标签: neural-network classification tic-tac-toe

我很难设置一个神经网络来将Tic-Tac-Toe板状态(最终或中间)分类为“X wins”,“O wins”或“Tie”。

我将描述我目前的解决方案和结果。任何建议都表示赞赏。

* DATA SET * 数据集= 958个可能的结束游戏+ 958个随机游戏= 1916个董事会状态 (随机游戏可能不完整,但都是合法的。即两个玩家不能同时获胜)。

训练集= 1600数据集的随机样本 测试集=剩余316例

在我目前的伪随机开发方案中,数据集具有以下特征。 训练集: - “X”赢得527胜 - “O”获得264胜 - 809关系 测试集: - “X”获得104胜 - “O”获得56胜 - 156关系

*调制* 输入层:18个输入神经元,其中每个神经元对应一个棋盘位置和玩家。因此, 董事会(B =空白): x x o o x B B o X. 编码为: 1 0 1 0 0 1 0 1 1 0 0 0 0 0 0 1 1 0

输出层:3个输出神经元,对应于每个结果(X wins,O wins,Tie)。

*架构*

基于:http://www.cs.toronto.edu/~hinton/csc321/matlab/assignment2.tar.gz

1个单隐藏层 隐藏层激活功能:Logistic 输出层激活功能:Softmax 错误功能:交叉熵

*结果*

没有参数组合似乎达到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 个答案:

答案 0 :(得分:2)

你正在做的一切都是正确的,但你只是想在这里解决一个难题,即从一些井字游戏配置的例子中概括到所有其他。

不幸的是,您使用的简单神经网络不会感知输入(邻域)的空间结构,也无法利用对称性。因此,为了获得完美的测试错误,您可以:

  • 增加数据集的大小以包含大多数(或所有)可能的配置 - 然后网络将能够简单地记忆,如大多数设置中的零训练错误所示;

  • 选择一个不同的问题,其中有更多结构要概括;

  • 使用可以捕获对称性(例如,通过权重共享)和/或输入的空间关系(例如,不同的特征)的网络架构。 Convolutional networks就是其中的一个例子。