如何在神经网络的输出中强制执行像国际象棋移动合法性这样的规则?

如何将规则(如国际象棋规则)应用于神经网络,使网络不会预测/训练非法移动?


回答:

以AlphaZero国际象棋为例,网络的输出形状允许所有可能的移动,无论棋子从哪个方格开始移动。

来自论文通过自我对弈使用通用强化学习算法掌握国际象棋和将棋

国际象棋中的移动可以分为两部分:选择要移动的棋子,然后在该棋子的合法移动中进行选择。我们通过一个8×8×73的平面堆栈来表示策略π(a|s),该堆栈编码了4,672个可能移动的概率分布。每个8×8的位置标识了从哪个方格“拿起”棋子。前56个平面编码了任何棋子的可能“女王移动”:棋子将移动的方格数[1..7],沿着八个相对罗盘方向之一{N, NE, E, SE, S, SW, W, NW}。接下来的8个平面编码了该棋子的可能骑士移动。最后的9个平面编码了可能的兵种升级,对于兵的移动或捕获在两个可能的对角线上,分别升级为骑士、主教或车。其它从第七排的兵移动或捕获将升级为女王。

因此,例如,网络被允许为移动g1-f3输出正概率,即使g1上没有骑士,或者为移动e8=Q输出正概率,即使e7上没有兵,或者d1-h5如果d1上有女王但另一棋子阻挡了对角线。

关键在于它输出的是可能移动的概率分布,并且由于它通过与自己对弈进行训练,其中只允许合法移动,它将学会为非法移动输出非常低或零的概率。

更具体地说,在一定数量的自我对弈游戏之后,网络通过监督学习进行训练,以预测给定棋盘位置的移动概率和价值。在自我对弈的最初阶段,网络具有随机权重,它将为许多不可能的移动输出显著的概率,但在经过一次或多次监督学习迭代后,移动输出概率将开始看起来更加合理。

AlphaZero团队选择这种架构而不是在网络中强制执行规则的原因很简单:输出必须具有固定大小,因为应该有固定数量的输出神经元。根据合法移动的不同数量来设置不同数量的输出神经元是没有意义的。或者,在网络内部将非法移动的输出置零也是没有意义的,因为这将是一个非常非标准的操作,可能会使反向传播成为噩梦。你需要区分一个国际象棋移动生成器!

此外,当网络使用其策略输出进行游戏时,它可以简单地仅对合法移动进行归一化。这样,我们在自我对弈系统中强制执行移动合法性,但不在神经网络架构本身中执行。这将借助移动生成器来完成。

由于您特别询问了关于keras的问题,您可以将这样的输出层表示为:

model.add(Dense(4672, activation='softmax'))

总结:在预测国际象棋移动的神经网络架构中,并不一定需要强制执行移动合法性,我们可以允许所有可能的移动(包括非法的),并训练网络为非法移动输出低或零的概率。然后,当我们使用移动概率进行游戏时,我们可以仅对合法移动进行归一化以获得所需的结果,但这是在神经网络之外进行的。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注