【人工智能】基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计

基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计

  • 摘要
  • 蒙特卡洛树搜索算法
  • 五子棋博弈的状态价值函数
  • 附1:详细论文说明下载:
  • 附2:实现代码下载(2022.10更新后代码):

摘要

随着人工智能领域的发展,深度学习、强化学习等算法被广泛应用于解决各种游戏博弈问题,通过训练神经网络来得到各种游戏的人工智能算法,人工智能来到了一个新的发展水平。在此类游戏博弈问题上,其他的方法要么是类似穷举法的搜索算法,它们在有限计算资源的情况下博弈能力较弱;要么是基于机器学习的方法,它们虽然博弈能力强,但是需要花费大量资源,训练和预测时都十分缓慢。因此,在设计此类游戏博弈的算法中,有必要既兼顾计算的时间问题,也兼顾算法的博弈能力的问题。在本次课程设计中,我们使用蒙特卡洛树搜索与深度神经网络来设计一种基于强化学习的AI五子棋算法,实现了从零开始学习五子棋博弈的人工智能算法。其中神经网络是经过设计的策略价值网络; 蒙特卡洛树搜索可根据多次模拟博弈的结果预测最优的移动方案。将五子棋规则与蒙特卡洛树搜索和策略价值网络相结合,蒙特卡洛树搜索使用策略价值网络评估落子位置和选择移动,增强树的搜索强度,提高落子质量,优化自对弈迭代。通过蒙特卡洛树搜索进行自对弈,训练一个神经网络来预测落子选择以及游戏的赢家。最后,该算法与其他方法进行了对比,测试结果表明我们设计的算法在五子棋的对弈上相对于其他方法有着更好的性能以及要求更低的计算资源。

蒙特卡洛树搜索算法

蒙特卡洛树搜索是由前里尔第三大学助理教授Rémi Coulom首次提出,并应用于围棋博弈程序Crazy Stone,Crazy Stone成为了第一个达到职业围棋五段水平的人工智能算法[16][17],蒙特卡洛树搜索最主要的目的就是要根据当前的游戏状态给出价值最高的博弈方案。在本章节中会解释蒙特卡洛树搜索的原理与过程,并做详细的分析与介绍。

  • 蒙特卡洛树搜索的基本过程

蒙特卡洛树搜索算法将采用一种全新的方法去计算最优动作。顾名思义,蒙特卡洛树搜索采用蒙特卡洛方法,以某一状态作为根节点,进行随机模拟,由根节点开始向下扩展博弈树,最后根据模拟结果预测最优的决策方案。蒙特卡洛树搜索的核心是搜索,即沿着博弈树向下模拟并扩展的一组遍历过程。单次遍历从根节点(当前博弈状态)出发,向下选择延伸,直到遇到未完全展开的节点,未完全展开的节点表示其至少有一个未被访问的子节点。遇到未完全展开的节点时,将采用某种策略进行扩展,选择其中一个未被访问过的子节点作为本次模拟的端节点,随后采取反向传播的方法将模拟结果逐级向上更新,直至回到根节点。一旦搜索达到设定的次数上限或时间上限,即停止蒙特卡洛树搜索,根据根节点的子节点所获得的统计量做出最优决策[31]。

下图展示了蒙特卡洛树搜索的基本过程。蒙特卡洛树搜索由选择(Selection)、扩展(Expansion)、模拟(Simulation)、更新(Backpropagation)四个基本过程组成。

【人工智能】基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计_第1张图片
第一步是选择(Selection):这一步会从根节点开始,每次都选一个“最值得搜索的子节点”,一般使用最大置信上界(UCT)选择分数最高的节点,直到来到一个“存在未扩展的子节点”的节点,如图中的 3/3 节点。之所以叫做“存在未扩展的子节点”,是因为这个局面存在未走过的后续着法,也就是MCTS中没有后续的动作可以参考了。这时我们进入第二步。
第二步是扩展(Expansion),在这个搜索到的存在未扩展的子节点,加上一个0/0的子节点,表示没有历史记录参考。这时我们进入第三步。
第三步是仿真(Simulation),从上面这个没有试过的着法开始,用一个简单策略比如快速走子策略(Rollout policy)走到底,得到一个胜负结果。快速走子策略一般适合选择走子很快可能不是很精确的策略。因为如果这个策略走得慢,结果虽然会更准确,但由于耗时多了,在单位时间内的模拟次数就少了,所以不一定会棋力更强,有可能会更弱。这也是为什么我们一般只模拟一次,因为如果模拟多次,虽然更准确,但更慢。
第四步是回溯(Backpropagation), 将我们最后得到的胜负结果回溯加到MCTS树结构上。注意除了之前的MCTS树要回溯外,新加入的节点也要加上一次胜负历史记录,如图最右边所示。

  • 最大置信上界算法

最大置信上界算法(Upper Confidence Bound Apply to Tree,UCT),是一种博弈树搜索算法,该算法将蒙特卡洛树搜索(Monte-Carlo Tree Search,MCTS)方法与Upper Confidence Bound(UCB)公式结合,极大提高了大规模博弈树在搜索过程中的效率,降低了搜索的空间复杂度。UTC算法可以表示为:
【人工智能】基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计_第2张图片
蒙特卡洛树搜索遍历过程中总是优先选择UCT值最大的节点。首先,该函数的对象为节点v及其子节点v(i),它包括两个组件。第一个组件为:
【人工智能】基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计_第3张图片
该组件被称为exploitation组件,可以简单理解为博弈获胜的概率,其值为子节点v(i)的总模拟奖励Q(v_i)除以总访问次数N(v_i),即节点v_i的胜率评估结果。我们总是希望优先遍历具有更高胜率的节点,但是一味贪婪最大化胜率评估值会导致偏差。假设仅使用exploitation UCT组件开始蒙特卡洛树搜索。从根节点开始,对子节点进行一次模拟,然后下一步仅访问那些模拟结果至少有一次是赢的节点。第一次模拟结果不幸失败的节点会立刻被舍弃,而那些第一次模拟中获胜的节点会被不断的探索,这导致整个博弈树的展开与首次模拟的位置有着极大的关联,更多潜在的优质策略动作未被足够的探索。因此本文通过某种方式均衡探索和利用,这就是第二个UCT组件exploration:
【人工智能】基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计_第4张图片
exploration组件提高了那些未被充分探索的节点被访问到的概率,这些节点被访问到的次数相对较少(N(v_i)较低),exploration随着节点访问量的增加而递减,访问量少的节点有着更高的exploration,从而增大其被选中几率,指引exploration更充分的探索。
最后,本文使用UCT公式中的参数c来控制exploitation和exploration两个组件之间的权衡。通常c的取值为0.5。

  • 终止蒙特卡洛树搜索

不难知道,蒙特卡洛树搜索策略的好坏与模拟次数有着直接的关系,模拟的次数越多,搜索的结果越可靠。但是受限于计算资源与时间,模拟不可能一直进行下去。通常情况,算法会设置一个模拟的上限,当从根节点开始模拟到一定盘数时,就停止搜索。随后根据根节点的子节点的访问量N(v_i),选择最佳的动作。

当使用蒙特卡洛树搜索执行完一个动作时,博弈状态往前推进了一步,新的状态为对手的起始状态。当对手也完成落子时,新的状态即为新一轮蒙特卡洛树搜索的根节点(起始状态)。而如果对手的落子选择在上一次模拟的情况之内,可以从上一轮展开的博弈树中截取相应的子树成为新的博弈树,这样就实现了博弈树模拟结果的复用,提高了模拟的效率。当对手的落子选择不在上一次模拟情况内的时候,则需要构建一颗新的博弈树,上一轮的模拟结果均被舍弃。

五子棋博弈的状态价值函数

基于上述分析,本文采用神经网络作为状态价值函数的逼近器,使用蒙特卡洛策略评估方法作为更新方法,神经网络最小化估计值和奖赏的均方误差
【人工智能】基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计_第5张图片
由于蒙特卡洛策略评估具有零偏差和高方差,因此本文引入策略函数,以提高决策的正确性及鲁棒性。

附1:详细论文说明下载:

https://download.csdn.net/download/weixin_39589455/15465016

附2:实现代码下载(2022.10更新后代码):

https://download.csdn.net/download/weixin_39589455/86812601

你可能感兴趣的:(深度学习,人工智能,神经网络,算法,蒙特卡洛树搜索,策略价值网络,1024程序员节)