4

我是神经网络的新手,我正在设计一个前馈神经网络来学习玩游戏跳棋。作为输入,必须给出棋盘,输出应该给出输赢的机会。但是如何将棋盘理想地转换为一排数字进行输入呢?每个方格有 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

4 回答 4

6

如果有人仍然对这个话题感兴趣——我建议用 32 维向量对棋盘进行编码。我最近在一个专家 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://www.chrislarson.io/checkers-p1上写了更多关于这个项目的文章。

于 2016-09-21T14:57:13.070 回答
3

我用井字游戏做过这种事情。有几种方法可以表示这一点。TTT 最常见的一种是具有代表整个电路板尺寸的输入和输出。在 TTT 中,这变为 9 x hidden x 9。X 的输入为 -1,无为 0,O 为 1。然后神经网络的输入是棋盘的当前状态。输出是所需的移动。任何输出神经元具有最高的激活都将是移动。

传播训练在这里不会很好,因为你不会有一个有限的训练集。像模拟退火、PSO 或任何具有评分函数的东西都是理想的。将网络相互竞争以获得评分功能会很棒。

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

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

也许更好的是以独立于位置的方式表示板的确切状态。这需要一些思考。例如,您可能会传达存在哪些“跳跃”机会。存在哪些走向王牌的机会,等等,并让网络学会优先考虑这些。

于 2013-05-03T14:32:19.053 回答
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

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

于 2013-07-07T02:52:18.357 回答
0

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

于 2013-05-12T16:23:40.767 回答