当前位置: 首页 > 知识库问答 >
问题:

博弈跳棋神经网络的理想输入

傅涵忍
2023-03-14

我正在设计一个学习如何玩跳棋游戏的前馈神经网络。

对于输入,必须给出棋盘,输出应该给出赢与输的概率。但是什么是理想的棋盘到一排数字的转换?有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,但我不确定哪一个会给出更好的结果。谁能对此给出任何见解?

共有3个答案

姚伟
2023-03-14

我尝试了所有的可能性,凭直觉我可以说,最伟大的想法是分离所有方块的所有可能性。因此,具体来说:

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

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

巫马翰翮
2023-03-14

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

传播训练在这里不会太好,因为你不会有一个有限的训练集。类似模拟退火、粒子群优化或任何具有分数函数的方法都是理想的。为了得分功能,让网络互相竞争将是一件好事。

这对TTT来说效果很好。我不确定它如何适用于跳棋。国际象棋可能会摧毁它。对于围棋来说,它可能毫无用处。

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

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

况弘新
2023-03-14

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

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

我在上写了更多关于这个项目的文章http://www.chrislarson.io/checkers-p1.

 类似资料:
  • 我试图测试自己理解递归的能力,所以我给自己一个任务,在递归中做跳跃游戏练习 给定一个非负整数数组,您最初位于数组的第一个索引处。数组中的每个元素代表该位置的最大跳转长度。你的目标是在最小的跳跃次数内达到最后一个指数。 https://leetcode.com/problems/jump-game-ii/ 我试图修改这部分代码,但它没有出现在调试器上,因此我没有真正看到这部分代码中的问题 如果有人能

  • 神经网络 (Neural Network) 是机器学习的一个分支,全称人工神经网络(Artificial Neural Network,缩写 ANN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。 Perceptron (感知器) 一个典型的神经网络由输入层、一个或多个隐藏层以及输出层组成,其中箭头代表着数据流动的方向,而圆圈代表激活函数(最常用的激活函数为

  • 译者:bat67 最新版会在译者仓库首先同步。 可以使用torch.nn包来构建神经网络. 我们以及介绍了autograd,nn包依赖于autograd包来定义模型并对它们求导。一个nn.Module包含各个层和一个forward(input)方法,该方法返回output。 例如,下面这个神经网络可以对数字进行分类: 这是一个简单的前馈神经网络(feed-forward network)。它接受一

  • 我用newff在Matlab中创建了一个用于手写数字识别的神经网络。 我只是训练它只识别0 输入层有9个神经元,隐层有5个神经元,输出层有1个神经元,共有9个输入。 我的赔率是0.1 我在Matlab中进行了测试,网络运行良好。现在我想用c语言创建这个网络,我编写了代码并复制了所有的权重和偏差(总共146个权重)。但当我将相同的输入数据输入到网络时,输出值不正确。 你们谁能给我指点路吗? 这是我的

  • 人工神经网络 人工神经网络又叫神经网络,是借鉴了生物神经网络的工作原理形成的一种数学模型。下面是一张生物神经元的图示: 生物神经网络就是由大量神经元构成的网络结构如下图: 生物的神经网络是通过神经元、细胞、触电等结构组成的一个大型网络结构,用来帮助生物进行思考和行动等。那么人们就想到了电脑是不是也可以像人脑一样具有这种结构,这样是不是就可以思考了? 类似于神经元的结构,人工神经网络也是基于这样的神

  • 我正在开发一种卷积神经网络用于图像分类或更好的车牌分类。这些车牌最多包含8个字符,每个字符可以包含37个字符(A-Z、0-9和空格)。我现在想知道如何设计网络中的最后两层。我认为,最后一个必须是具有37个概率的softmax层。这应该完全连接到一个(?)神经元在前一层?我想,在前一层我们需要8个神经元,因为之前的车牌上有8个字符,但我不确定。在此层之前,我添加了一些卷积层和maxPooling层。