神经网络对游戏检查者的理想输入

Asq*_*qan 3 artificial-intelligence machine-learning 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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输入长度将仅为64,但是我不确定哪个会带来更好的结果?

小智 5

如果仍然有人对此主题感兴趣,我建议使用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在学习有效动作方面做得非常出色。我选择将输出编码为32 x 4矩阵,每行代表一个电路板位置,每列代表一个方向。在训练过程中,我只是将其分解为一个128维的单热编码矢量(使用softmax激活的argmax)。请注意,此输出编码会导致给定板的许多无效移动(例如,从边缘和拐角处移出板,移动到占据的位置等)。我们希望神经网络可以在较大的情况下学习有效的游戏足够的训练集。我发现CNN在学习有效动作方面做得非常出色。我选择将输出编码为32 x 4矩阵,每行代表一个电路板位置,每列代表一个方向。在训练过程中,我只是将其分解为一个128维的单热编码矢量(使用softmax激活的argmax)。请注意,此输出编码会导致给定板的许多无效移动(例如,从边缘和拐角处移出板,移动到占据的位置等)。我们希望神经网络可以在较大的情况下学习有效的游戏足够的训练集。我发现CNN在学习有效动作方面做得非常出色。请注意,此输出编码会导致给定板的许多无效移动(例如,从边缘和拐角处移出板,移动到占据的位置等)。我们希望神经网络可以在较大的情况下学习有效的游戏足够的训练集。我发现CNN在学习有效动作方面做得非常出色。请注意,此输出编码会导致给定板的许多无效移动(例如,从边缘和拐角处移出板,移动到占据的位置等)。我们希望神经网络可以在较大的情况下学习有效的游戏足够的训练集。我发现CNN在学习有效动作方面做得非常出色。

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