R.S*_*fer 1 machine-learning neural-network lstm keras tensorflow
我如何将规则(如国际象棋规则)应用于神经网络,以便网络不会预测/训练无效动作?
在 AlphaZero Chess 的示例中,网络的输出形状允许从任何方块开始的任何棋子的所有可能移动。
来自论文Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm:
国际象棋中的移动可以分为两部分:选择要移动的棋子,然后在该棋子的合法移动中进行选择。我们用一个 8 × 8 × 73 的平面堆栈来表示策略 ?(a|s),编码了 4,672 种可能移动的概率分布。每个 8 × 8 位置都标识了从中“捡起”一块的方块。前 56 个平面为任何棋子编码可能的“后移动”:棋子将沿八个相对罗盘方向之一移动的方格 [1..7] {N, NE, E, SE, S,西南,西,西北}。接下来的 8 个平面编码了该棋子可能的骑士动作。最后的 9 个平面在两个可能的对角线中对兵移动或捕获的可能不足进行编码,分别为骑士、象或车。来自第七等级的其他棋子移动或捕获被提升为皇后。
因此,例如,即使没有马在 上,或者即使没有棋子,网络也可以为移动输出正概率,或者如果有皇后但另一个棋子在挡住对角线。g1-f3
g1
e8=Q
e7
d1-h5
d1
关键是它输出了可能移动的概率分布,并且由于它是通过在只允许合法移动的情况下与自己对战来训练的,因此它将学习输出非常低或零概率的非法移动。
更准确地说,经过一定数量的自玩游戏后,网络使用监督学习进行训练,以预测给定棋盘位置的移动概率和价值。在自我博弈的一开始,网络具有随机权重,它会为许多不可能的移动输出显着的概率,但经过一次或多次监督学习迭代后,移动输出概率将开始看起来更加合理。
AlphaZero 团队选择这种架构而不是在网络中强制执行规则的原因很简单:输出必须采用固定大小,因为应该有固定数量的输出神经元。不同数量的输出神经元对应不同数量的合法移动是没有意义的。或者,将网络内非合法移动的输出归零是没有意义的,因为这将是一种高度非标准的操作,可能是运行反向传播的噩梦。您需要区分国际象棋移动生成器!
此外,当网络使用其策略输出来玩游戏时,它可以简单地将每个输出标准化为仅合法移动。通过这种方式,我们在自我对弈系统中强制执行移动合法性,而不是在神经网络架构本身内。这将在移动生成器的帮助下完成。
由于您正在询问 keras,因此您可以将这样的输出层表示为:
model.add(Dense(4672, activation='softmax'))
Run Code Online (Sandbox Code Playgroud)
总结:不一定要在预测国际象棋走法的神经网络架构中强制执行走法合法性,我们可以允许所有可能的走法(包括非法走法)并训练网络输出非法走法的低概率或零概率。然后,当我们使用移动概率进行游戏时,我们可以仅对合法移动进行归一化以获得所需的结果,但这发生在神经网络之外。
归档时间: |
|
查看次数: |
1191 次 |
最近记录: |