2

我正在做一个项目,我将棋盘位置(FEN 字符串转换为二进制)和它的评估分数输入神经网络。我的目标是让神经网络区分好位置和坏位置。

我如何对位置进行编码:国际象棋中有 12 个独特的棋子,即白棋和黑棋的棋子、车、马、象、王后国王。我使用 4 位对每一块进行编码,其中 0000 表示一个空方块。所以这 64 个方格被编码成 256 位,我用另外 6 位来表示游戏状态,比如轮到谁移动,国王城堡状态等。

问题:由于国际象棋位置的输入空间既不是平滑的也不是单模态的(棋盘位置的微小变化可能导致评估分数的巨大变化),神经网络学习不好。现在,下一个合乎逻辑的事情是以某种方式提取有用的特征(如材料差异、中心控制等)并将其提供给网络。

我不想手动选择功能,因为我希望网络自己学习所有内容。因此,我正在考虑使用自动编码器自动提取特征。有没有更好的方法来实现这一点?

摘要:从棋盘位置自动提取特征以便将其输入神经网络的最佳方法是什么?

更新:为了生成训练数据,我修改了 Stockfish 以将其评估过程转储到日志文件中。因此,它考虑的每个新移动(位置)都会作为 FEN 字符串连同它的评估分数一起写入文件

4

1 回答 1

1

神经网络可以给出任何函数的近似值。唯一需要考虑的是搜索空间的维度,它限制了您必须获得良好近似值的数据量。

对于有监督的网络(您使用自动编码器,然后我认为您使用了一些反向传播的变体),我很难想象您认为如何使用单个位置进行训练,因为您需要在训练集中具有相似的位置。也许您的方法不同,但我相信第二种策略(使用功能)更有希望。我认为使用职位需要大量的数据训练才能获得好的结果。

看这里的特色,看看香农的经典作品。

我还从Crafty的源代码中获取了有用的信息。

但是您必须从 FEN 字符串中提取这些信息。

自动编码器是一种减少数据的方法(很好,因为可以提高性能)。正如此处所报告的,使用 Pincipal Component Analysys 似乎更好。

我希望这可以帮助你。

于 2014-02-04T13:40:12.157 回答