游戏跳棋的神经网络的理想输入

时间:2013-05-02 23:30:31

标签: machine-learning artificial-intelligence neural-network feed-forward

我是神经网络的新手,我正在设计一个前馈神经网络来学习玩游戏检查器。 作为输入,必须给出董事会,输出应该有机会赢或输。但是,如何将跳棋板理想地转换成一排数字用于输入?每个广场上有32个可能的正方形和5种不同的可能性(国王或白色或黑色玩家和自由位置)。如果我为每个方块的每个可能值提供一个输入单位,它将是32 * 5.另一种选择是:

  Free Position: 0 0

  Piece of white: 0 0.5 && King Piece of white: 0 1

  Piece of black: 0.5 1 && King Piece of black: 1 0

在这种情况下,输入长度将只有64但我不确定哪一个会给出更好的结果?

4 个答案:

答案 0 :(得分:4)

如果有人仍然对这个主题感兴趣 - 我建议使用32维向量编码Checkers板。我最近在一个专家Checkers数据库上训练了一个CNN,并且能够在没有搜索的情况下实现令人惊讶的高水平游戏,有点类似(我怀疑)与Deepmind用于预训练AlphaGo的监督学习步骤。我将我的输入表示为一个8x4网格,集合中的条目[-3,-1,0,1,3]对应一个对立的国王,对立的检查者,空的,自己的检查者,自己的国王,具有代表性。因此,不是使用160维向量对板进行编码,其中每个维度对应于位置片组合,而是可以将输入空间缩减为32维向量,其中每个板位置由唯一维度表示,并且在该位置由一组实数编码 - 这是在没有任何信息丢失的情况下完成的。

至少在我看来,更有趣的问题是哪种输出编码最有利于学习。一种选择是以与输入相同的方式对其进行编码。我建议不要发现将输出编码简化到(要移动的部分)的位置和方向(沿着它移动所述部分)对于学习更有利。虽然造成这种情况的原因可能更为微妙,但我怀疑这是由于跳棋的巨大状态空间(类似于50 ^ 20板的位置)。考虑到我们的预测模型的目标是接受包含大量可能状态的输入,并从(最多)48种可能性(12次乘以4种可能的方向,不包括跳跃)产生一次输出(即移动),构建神经网络的首要任务应该是将输入和输出空间的复杂性与实际游戏的复杂性相匹配。考虑到这一点,我选择将输出编码为32 x 4矩阵,每行代表一个板位置,每列代表一个方向。在训练期间,我简单地将其解析为128维,单热编码矢量(使用softmax激活的argmax)。请注意,此输出编码适用于给定电路板的许多无效移动(例如,从边缘和角落移出电路板,移动到占用位置等等) - 我们希望神经网络可以在大的情况下学习有效的播放足够的训练集。我发现CNN在学习有效动作方面做得非常出色。

我在http://chrislarson1.github.io/blog撰写了有关此项目的更多信息。

答案 1 :(得分:2)

我和Tic-Tac-Toe做过这种事。有几种方法可以表示这一点。 TTT最常见的一种是输入和输出,代表电路板的整个尺寸。在TTT中,这变为9 x隐藏x 9.输入-1表示X,0表示无,1表示O.然后神经网络的输入是电路板的当前状态。输出是所需的移动。无论什么输出神经元具有最高的激活将是移动。

传播训练在这里不会很好,因为你没有有限的训练集。像模拟退火,PSO或任何具有得分功能的东西都是理想的。对于评分函数而言,将网络彼此对接会很棒。

这对TTT来说有点好用。我不确定它对Checkers的效果如何。国际象棋可能会摧毁它。对于Go来说,它可能毫无用处。

问题在于神经网络只会在固定位置学习模式。例如,跳跃左上角的对手与在左下角跳跃某人完全不同。这些必须单独学习。

或许更好的方法是以位置无关的方式表示电路板的确切状态。这需要一些思考。例如,您可能会传达存在的“跳跃”机会。什么向国王广场机会的存在等等,让网络学会优先考虑这些。

答案 2 :(得分:1)

我已经尝试了所有可能性和直觉,我可以说最好的主意是将所有方块的所有可能性分开。因此,具体:

0 0 0: free
1 0 0: white piece
0 0 1: black piece
1 1 0: white king
0 1 1: black king

还可以增强有关游戏情况的其他参数,例如受到威胁的棋子数量或跳跃的可能性。

答案 3 :(得分:0)

请看这篇论文 Blondie24第46页,有神经网络输入的描述。