神经网络架构与训练,自学,棋盘对称,Playout Cap Randomization,结果可视化
蒙特卡洛树搜索从我们之前的文章中介绍 (MCTS) 以及如何使用它来获得给定棋盘状态的输出策略。 我们也理解神经网络在这里 MCTS 两个主要作用; 引导探索神经网络的战略输出,用其价值输出代替传统的蒙特卡洛rollout算法。
在这一部分,我们将从这个神经网络的架构开始,检查它的不同层、输入和输出。 然后了解如何使用自我游戏训练网络和研究训练神经网络的损失函数。 本文还将仔细研究培训的细节,包括特定的细节 Chain Reaction 游戏的数据增强技术和 Playout Cap Randomization 提高训练效率的方法。最后,我们将可视化地查看我们的工作成果。
神经网络架构
神经网络模型的输入形状是MxNx7,其中M和N分别为Chain Reaction游戏的行数和列数。图中的数字7表示有7个通道,每个通道以二进制数据的形式存储一些特定信息,如下所示:
Description of the encoded stateSize of the state: M*N*7channel 1 : stores the MxN map where red orbs are 1 in numberchannel 2 : stores the MxN map where red orbs are 2 in numberchannel 3 : stores the MxN map where red orbs are 3 in numberchannel 4 : stores the MxN map where green orbs are 1 in numberchannel 5 : stores the MxN map where green orbs are 2 in numberchannel 6 : stores the MxN map where green orbs are 3 in numberchannel 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。
我们的战略目标将是使用蒙特卡洛搜索树。
损失函数
由于我们有两个任务头,损失函数需要包括自价值损失和战略损失
AlphaZero损失函数如下:
价值损失:游戏结束时使用价值分配获得的预测值与目标值之间的均方损失。战略损失:预测策略和从MCTS计算练习中获得的战略目标之间的交叉熵损失。
在AlphaZero这两训练神经网络的损失是这两种损失的总和。我们称之为AlphaLoss”。
数据增强
为了提高训练效率,我们可以这样做作:如果我们知道一个棋盘状态的正确策略,那么我们就知道通过旋转、翻转或转置棋盘矩阵获得的其他七个棋盘状态的正确策略,这就是我们所说的棋盘的对称性。
通过翻转、旋转和换位可以产生7种以上的棋盘状态。对于所有这些状态,我们可以很容易地获正确的政策。
为了在代码中实现这一点,我们需要一个其中存储了棋盘状态和策略目标的缓存区,在游戏结束获得实际奖励值时,目标值分配给临时缓冲区中的每个元素。
下图是构造这个缓存的代码
Playout Cap Randomization
我们还可以引入了Playout Cap Randomization,因为它有助于提高培训效率。
AlphaZero的自我游戏训练过程,它得到的唯一真正奖励是在游戏结束时,所以获得的奖励是非常少的,而价值头专注于预测这个奖励,如果我们想改善价值训练,就需要增加AlphaZero的游戏的次数。
如果我们想提高策略训练,我们则可以关注更多的蒙特卡洛回放。
这里我们可以只增加一些随机选择的动作而不是增加游戏中所有动作的使用次数,只使用一些特定的动作的数据进行训练。在其他动作中,我们可以减少其选择次数。这种技术被称为Playout Cap Randomization。
结果展示
最后让我们看看我们的训练成果
对阵一个随机的代理
随机的代理没有任何策略,只是在棋盘上随机的进行可用的操作。以下是在3×3, 4×4和5×5棋盘上对随机代理的胜率。
可以看到对于一个3 x 3的棋盘,即使没有MCTS,在80个回合后至少可以达到75%的胜率
对于一个4 x 4的棋盘,训练在500个回合后就会饱和,然后就会变成振荡,但在1300回合附近,没有MCTS的代理的胜率超过80%
对于一块5 x 5的棋盘来说,训练在1000个周期左右就饱和了
可视化
每一场比赛都包括棋盘上的一系列动作。对于一块5×5的棋盘,第一步有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分布并学习它的参数。然后使用这个分布的一个缩放版本来近似有界连续空间。
我们有一个在3×3的Chain Reaction棋盘上训练一个效果非常好的代理。如果我们能将这些知识转移到4×4大小或其他大小的棋盘上,那就太好了。这项工作的重点也是一个方向[5]。如果没有这样的传输机制,在更大的棋盘上上进行训练在计算上是非常昂贵的,例如:15×15或20×20棋盘。
作者:Bentou
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至827202335@qq.com 举报,一经查实,本站将立刻删除。文章链接:https://www.eztwang.com/dongtai/64234.html