建立自己的Alpha Zero。 第2部分:决策

“我很期待看到冲突即将来临的所有可能结果。” —漫威电影宇宙公司的超级英雄斯蒂芬·文森特·斯特兰奇医生。

如果我们能提前预测我们行动的所有结果! 不幸的是,我们不能,而且机器也不能,除非他们要解决的任务非常简单。 但是,机器仍然可以比任何人更快地预测游戏的未来状态。 此功能使AI在跳棋,国际象棋,围棋和其他各种游戏中的表现都优于人类。 Alpha Zero还使用称为蒙特卡洛树搜索(MCTS)的算法来利用预测的功能。

该算法使AI可以研究最有希望的未来期货,而不仅仅是试图想象所有可能的情况。 Alpha Zero将MCTS与深度神经网络相结合,能够评估游戏状态,从而可以确定这些最有前途的未来。 给定足够的训练数据,此方法使Alpha Zero能够有效地找到从任何游戏状态中获胜的最佳方法。

了解MCTS如何工作的最好方法是实施它。 但是,在开始实现之前,我们先做一些基本的编码。

游戏和代理

我们将在Python中定义两个简单的接口: GameAgent 。 通过游戏界面,我们可以创建游戏会话,观察当前状态,采取措施并获得游戏会话的结果。 使用Agent界面,我们可以根据当前游戏状态预测策略和价值。

花一两分钟来熟悉这些界面。 当您准备就绪时,我们将立即开始实施MCTS!

基于MCTS的代理

现在,我们将制作一个基于MCTS的代理 。 我知道,在没有解释的情况下实现一种算法很奇怪,但是请相信我。 它并不像看起来那么难。 阅读实现将使您对算法的工作原理有一个基本的了解,而当我以更正式的方式进行解释时,这一切都是有意义的。

哇! 那需要处理很多代码。 现在是时候解释一下这里发生了什么。

蒙特卡罗树搜索

MCTS是一种策略搜索算法,可以在游戏进行多次模拟之后,在探索与开发之间取得平衡,以输出改进的策略。 MCTS会构建一棵树,其中的节点是不同的观察值,并且如果有效的操作会导致状态从一个节点转换到另一个节点,则两个节点之间将存在有向边。

对于每条边,我们维持一个Q值,该值由Q(s,a)表示该值是采取该动作的预期奖励,而N(s,a)则表示我们在不同模拟中从状态s采取动作a的次数。

MCTS的超参数是:

  • 模拟次数是代表每次调用agent.predict函数时要访问的先前未探索节点的数量的参数;
  • cpuct是控制勘探程度的参数;
  • 勘探率是控制最终政策分配的参数。 将其设置为较高的值可得到几乎均匀的分布,而将其设置为0可让我们始终选择最佳动作。

探索的过程是迭代的。 首先从游戏中获取观察值,然后使用以下方法获得观察值哈希

game.get_observation_str(observation):

我们遍历许多模拟 ,每次执行对树的探索,直到使用搜索方法找到以前未探索的终端节点。 请注意,我们应该将当前游戏状态的副本传递给搜索方法,因为它会在探索过程中更改游戏的状态。

因此,搜索开始了……

如果到达终端节点,则只需传播当前播放器的值即可:
因此,搜索开始了……

如果到达终端节点,则只需传播当前播放器的值即可:

如果到达先前未探索的节点,则会得到P(s) ,这是根据神经网络返回的策略从状态s采取特定动作的先验概率。 请注意,神经网络代理使用我们之前定义的相同接口。

如果遇到已知状态,我们将计算每个边缘的U(s,a)值(操作->状态转换),这是边缘Q值的上限置信度。 这些值的计算公式为:

一旦我们完成了MCTS仿真, N(s,a)值将为每个州的政策提供一个很好的近似值。 剩下的唯一事情就是应用我们的勘探速率参数来控制策略值的分布:

恭喜你! 您现在已经了解了蒙特卡洛树搜索的工作原理! 但是,还剩下一件事,我们才能使它起作用。

神经网络

您还记得来自AgentMCTS的这些专线吗?

这正是我们在这里使用神经网络的方式。 它产生策略和价值,因此Agent接口也可以与神经网络一起重用。 让我们写一个基于神经网络的Agent ! 我们将使用Keras库使我们的代码尽可能的干净。 首先,我们定义抽象神经网络:

现在,我们定义将使用神经网络的Agent

如果您想知道如何使神经网络输出策略和值,这是一个针对Alpha Zero的简单卷积神经网络的示例:

汇集全部

今天,我们定义了我们的核心接口:游戏,代理和NNet。 我们实现了基于神经网络的Agent和基于Monte Carlo Tree Search的Agent! 因此,要初始化我们的蒙特卡洛代理程序,我们只需要编写代码:

我们的agent_mcts可能会预测游戏状态的策略和价值,如下所示:

下一步是什么?

太棒了! 现在,我们的核心课程几乎已经准备就绪,可以编写Alpha Zero培训管道了。 下次,我们将向您展示如何训练代理商使用“蒙特卡洛树搜索”和深度残差网络来播放英语草稿。 该游戏的复杂性大约有500,995,484,682,338,672,639个可能的位置,因此该任务将是一个有趣的任务。

敬请关注!