神经网络架构和训练、自学习、棋盘对称性、Playout Cap Randomization,后果可视化

从咱们之前的文章中,介绍了蒙特卡洛树搜寻 (MCTS) 的工作原理以及如何应用它来取得给定棋盘状态的输入策略。咱们也了解神经网络在 MCTS 中的两个次要作用;通过神经网络的策略输入来领导摸索,并应用其价值输入代替传统的蒙特卡洛rollout算法。

在这一部分中,咱们将从这个神经网络的架构开始,查看它的不同层、输出和输入。而后理解如何应用自我对弈训练网络和钻研用于训练神经网络的损失函数。本文还将认真钻研训练的细节,包含特定于 Chain Reaction 游戏的数据加强技术和称为 Playout Cap Randomization 的办法进步训练效率。最初咱们将可视化查看咱们的工作成绩。

神经网络架构

神经网络模型的输出形态为MxNx7,其中M和N别离为Chain Reaction游戏的行数和列数。图形中的数字“7”示意有7个通道,每个通道以二进制数据的模式存储的某些特定信息,如上面所示:

 Description of the encoded state  Size of the state: M*N*7  channel 1 : stores the MxN map where red orbs are 1 in number  channel 2 : stores the MxN map where red orbs are 2 in number  channel 3 : stores the MxN map where red orbs are 3 in number  channel 4 : stores the MxN map where green orbs are 1 in number  channel 5 : stores the MxN map where green orbs are 2 in number  channel 6 : stores the MxN map where green orbs are 3 in number  channel 7 : MxN map of ones if it is red player's turn otherwise  a map of zeroes

上面的图片展现了神经网络的架构。

咱们的神经网络构造是一个resnet构造-它有conv2d, batchnorm2d和relu层,dropout层和两个工作头。

输入值的头有一个tanh激活函数,产生一个介于-1和+1之间的数字。策略头有一个softmax函数,它帮忙咱们失去板子上所有动作的概率分布。

基本块(small block)如上图所示与resnet相似,咱们会将这些基本块进行组合。

输出通过的第一个块由conv2d、batchnorm2d和relu层组成

由基本块(conv2d和batchnorm2d层)和relu层组成咱们上图所示的残差块(resnet)

五个resnet块组成了咱们神经网络的两头块

dropout块接管前一个块的输入,其中的linear层起到管制维度数的作用

咱们的网络结构中应用了两个dropout块

值头输入的是-1,1之间的动作价值(value)

策略头输入被用作棋盘上所有动作的概率分布(0,1之间)

下图显示了应用PyTorch在Python中实现该体系结构的代码。

实现了咱们模型架构,上面就要看下如何进行训练了

自我对局

上图显示了在游戏中如何进行任何单个操作的流程。在自我对局框架中,咱们有两个玩家(都是AI),红色和绿色。每个玩家应用上述步骤进行操作。如果红色赢了游戏。对于所有的红色挪动,目标值+1,对于所有的绿色挪动,目标值是-1。

咱们取得策略指标将是应用蒙特卡洛搜寻树取得的策略。

损失函数

因为咱们有2个工作头,所以损失函数须要蕴含自价值损失和策略损失

AlphaZero的损失函数如下:

  • 价值损失:在游戏完结时应用价值调配取得的预测值和指标价值之间的均方损失。
  • 策略损失:在预测的策略和从MCTS演习中取得的策略指标之间计算穿插熵损失。

在AlphaZero中训练神经网络的损失就是这两个损失的总和。咱们称之为“AlphaLoss”。

数据加强

为了进步训练效率,咱们能够这样操作:如果咱们晓得一个棋盘状态的正确策略,那么咱们就晓得通过旋转、翻转或转置棋盘矩阵取得的其余七个棋盘状态的正确策略,这就是咱们所说的棋盘的对称性。

通过翻转、旋转和换位能够产生7种以上的棋盘状态。对于所有这些状态,咱们能够很容易地获正确的政策。

为了在代码中实现这一点,咱们须要一个其中存储了棋盘状态和策略指标的缓存区,在游戏完结取得理论处分值时,目标值调配给长期缓冲区中的每个元素。

下图是结构这个缓存的代码

Playout Cap Randomization

咱们还能够引入了Playout Cap Randomization,因为它有助于进步培训效率。

AlphaZero的自我游戏训练过程,它失去的惟一真正处分是在游戏完结时,所以取得的处分是非常少的,而价值头专一于预测这个处分,如果咱们想改善价值训练,就须要减少AlphaZero的游戏的次数。

如果咱们想进步策略训练,咱们则能够关注更多的蒙特卡洛回放。

这里咱们能够只减少一些随机抉择的动作而不是减少游戏中所有动作的应用次数,只应用一些特定的动作的数据进行训练。在其余动作中,咱们能够缩小其抉择次数。这种技术被称为Playout Cap Randomization。

后果展现

最初让咱们看看咱们的训练成绩

对阵一个随机的代理

随机的代理没有任何策略,只是在棋盘上随机的进行可用的操作。以下是在3x3, 4x4和5x5棋盘上对随机代理的胜率。

能够看到对于一个3 x 3的棋盘,即便没有MCTS,在80个回合后至多能够达到75%的胜率

对于一个4 x 4的棋盘,训练在500个回合后就会饱和,而后就会变成振荡,但在1300回合左近,没有MCTS的代理的胜率超过80%

对于一块5 x 5的棋盘来说,训练在1000个周期左右就饱和了

可视化

每一场较量都包含棋盘上的一系列动作。对于一块5x5的棋盘,第一步有25种可能。随着训练的进行,神经网络的值头输入一直进步,从而改良了蒙特卡罗搜寻。以下是这些动作的可视化。可视化是针对一个5 x 5的棋盘,所以有25种可能性。这25种可能被映射到一个圆(在开始)或一个弧(前面经过训练)。

在1000次蒙特卡洛演练中应用未经训练的值网络所采取的口头。(5 × 5-> 25动作)。25个动作被映射到圆/圆弧中的角度。搜寻最多只能达到4步的深度。

25个动作被映射到圆/圆弧中的角度。因为价值网络启发式的存在,搜寻甚至深刻到20步。

将来的倒退方向

Chain Reaction的游戏有一个人类精心设计的启发式策略[2]。训练一个简略AlphaZero代理并试着让它与这样的策略竞争是很乏味的。

有一种称为hidden queen chess”/ “secret queen chess”的国际象棋变体,其中每个玩家在游戏开始时抉择他们的一个棋子作为皇后,并且该抉择不会向对手走漏。然而 AlphaZero 实用于完满信息博弈和施行训练代理在信息不欠缺的状态下策论的论文会很乏味 [3]。

如果可能超过离散动作空间[4]将是乏味的。间断动作空间将在机器人或主动驾驶汽车利用中更为常见。[4]承受beta散布并学习它的参数。而后应用这个散布的一个缩放版本来近似有界间断空间。

咱们有一个在3x3的Chain Reaction棋盘上训练一个成果十分好的代理。如果咱们能将这些常识转移到4x4大小或其余大小的棋盘上,那就太好了。这项工作的重点也是一个方向[5]。如果没有这样的传输机制,在更大的棋盘上上进行训练在计算上是十分低廉的,例如:15x15或20x20棋盘。

本文代码:https://avoid.overfit.cn/post/d2e6352cf0104473ba896d198f8277bc

作者:Bentou