棋盘代码_国际象棋程序Stockfish NNUE设计简介(二)棋盘表示

本文介绍了Stockfish国际象棋程序的NNUE(Neural Network UCI Enhancement)设计,特别是棋盘表示方法。棋盘表示采用41024维的二进制向量,区分“己方”与“对方”,并进行黑白棋子的翻转处理,以确保对称性。NNUE通过二进制化枚举值提高线性可分性,采用稀疏向量存储,减少计算和存储成本,实现快速的棋盘状态更新。这种方法体现了深度学习中简化特征工程的“端到端学习”思想。
摘要由CSDN通过智能技术生成

df643eda230e78865d780fe46e8b41e2.png

棋盘表示,即将一个静态的棋盘状态信息量化为一个向量表示,也就是问题形式化的过程。机器学习中也称这个步骤为“特征工程”。这里仅介绍在Stockfish 12中使用的网络结构,也就是HalfKP_256X2_32_32。

NNUE的棋盘表示并未用到任何需要复杂计算的高级信息,仅使用了朴素的棋子与所在格子的组合枚举。作为NNUE估值网络的输入,每一个棋盘局面被表示成为一个41024 x 2 = 82048维的二进制向量。其中41024维是两个棋手中某一方的棋盘表示,而2指棋手双方。注意,这里的x2指的并不是简单的”白方、黑方“,而是指“己方、对方”。

己方与对方

那么什么是“己方“与“对方”,以及为什么要这样区分呢?这就要从Min-Max搜索本身性质说起。

经典Min-Max搜索规定了,在二人有限零和博弈中,一方为“极大” 方,另一方为“极小”方。极大方与极小方轮流相互调用:极大方对每个子节点先调用极小搜索,然后在返回的极小值中选最大的返回;极小方则相反。而估值函数只需返回一个[-1.0,+1.0]之间的概率,以指示当前局面对极大方还是极小方更有利(由符号决定:+表示极大方占优,反之则极小方占优),以及有利的程度(由绝对值决定,越大优势程度越高)。但是稍加观察你就会发现,极小方搜索时做的事情和极大方几乎完全一样,只有符号相反。于是就有了将两方统一起来的Nega-Max搜索。

int NegaMax(int depth) {
    
    if (depth == 0) return evaluate(side_to_move);
    int max = -inf;
    for (all_moves) {
    
        score = -NegaMax(depth - 1);
        if (score > max)
            max = score;
    }
    return max;
}

在Nega-Max搜索中,每一方都是极大方。在搜索每个节点时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值