关于人工智能:使用PyTorch实现简单的AlphaZero的算法3神经网络架构和自学习

42次阅读

共计 3141 个字符,预计需要花费 8 分钟才能阅读完成。

神经网络架构和训练、自学习、棋盘对称性、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。

后果展现

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

对阵一个随机的代理

随机的代理没有任何策略,只是在棋盘上随机的进行可用的操作。以下是在 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 棋盘。

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

作者:Bentou

正文完
 0