【问题标题】:Automatic feature extraction from chess board positions从棋盘位置自动提取特征
【发布时间】:2014-02-27 02:44:51
【问题描述】:

我正在做一个项目,我在该项目中获取棋盘位置(将 FEN 字符串转换为二进制)及其评估分数并将其提供给神经网络。我的目标是让神经网络区分好位置和坏位置。

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

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

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

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

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

【问题讨论】:

    标签: chess feature-extraction neural-network deep-learning


    【解决方案1】:

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

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

    功能请看here,以及Shannon 的经典作品。

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

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

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

    希望对你有帮助。

    【讨论】:

    • 感谢您的详细回答@Francisco。我没有使用单个位置训练网络。我已修改 Stockfish 以将其评估过程转储到日志文件中。因此,它考虑的每个新移动(位置)都会作为 FEN 字符串连同其评估分数一起写入文件。所以我有大量类似位置的转储(日志中相邻行的 2 个位置相差 1 个不同的位置)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 2021-06-23
    • 2016-12-13
    • 2018-07-04
    • 1970-01-01
    相关资源
    最近更新 更多