围棋AI,蒙特卡洛树搜索

目录

1 蒙特卡罗方法(Monte Carlo method)

2. 蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)

3 Upper Confidence Bounds(UCB)

正文

1 蒙特卡罗方法(Monte Carlo method)

像圆周率计算实验一样,用通过概率实验所求的概率估计估计一个未知量,这样的方法统称为蒙特卡罗方法(Monte Carlo method)

在现实世界中,大量存在一些复杂性过程,由于这类模型含有不确定的随机因素,我们很难直接用一个确定性模型来分析和描述。面对这种情况.数据科学家难以作定量分析,得不到解析的结果,或者是虽有解析结果,但计算代价太大以至不能使用。在这种情况下,可以考虑采用 Monte Carlo 方法 [1]。

2. 蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)算法

蒙特卡洛树搜索是一种基于树结构的蒙特卡洛方法,所谓的蒙特卡洛树搜索就是基于蒙特卡洛方法在整个2N(N等于决策次数,即树深度)空间中进行启发式搜索,基于一定的反馈寻找出最优的树结构路径(可行解)。概括来说就是,MCTS是一种确定规则驱动的启发式随机搜索算法 [1]。

以MCTS的围棋AI算法为例,MCTS应用了Minimax作为启发方法,Alpha-beta剪枝降低运算量, network作为估算方法。

看下图,假设现在轮到黑棋,黑棋有b1和b2两手可选,白棋对于b1有w1和w2两手可选,白棋对于b2有w3 w4 w5三手可选:

围棋AI,蒙特卡洛树搜索_第1张图片

然后假设走完w1/w2/w3/w4/w5后,经过局面评估,黑棋的未来胜率分别是50%/48%/62%/45%/58%(等一下,这些胜率是怎么评估出来的?我们后文会说这个问题)。 

如果白棋够聪明,会在黑棋走b1的时候回应以w2(尽量降低黑棋的胜率),在黑棋走b2的时候回应以w4(尽量降低黑棋的胜率)。

所以走b1后黑棋的真实胜率是48%,走b2后黑棋的真实胜率是45%。黑棋的正解是b1。这就是 Minimax 搜索的核心思想:在搜索树中,每次轮到黑棋走时,走对黑棋最有利的;轮到白棋走时,走对黑棋最不利的。由于围棋是零和游戏,这就可以达到最优解。这是一个由底往上的过程:先把搜索树画到我们可以承受的深度,然后逐层往上取最大值或最小值回溯,就可以看到双方的正解(如果胜率评估是准确的)[2] 。

如果想把 Minimax 搜索运用到围棋上,立刻会遇到两个大问题:

  1. 搜索树太广。棋盘太大了,每一方在每一步都有很多着法可选。
  2. 很难评估胜率。除非把搜索树走到终局,这意味着要走够三百多步(因为对于电脑来说,甚至很难判断何时才是双方都同意的终局,所以只能傻傻地填子,一直到双方都真的没地方可以走为止)。简单地说,搜索树也需要特别深。

蒙特卡洛树搜索的意义在于部分解决了上述两个问题:

  1. 它可以给出一个局面评估,虽然不准,但比没有强。这就部分解决了第二个问题。评估算法在AlphaGo中采用深度学习网络 value network。这个算法简而言之就是为当前棋盘局面计算出一个信服的分数。如果不使用深度学习,可以通过计算棋子数量,棋子占用的棋盘面积,棋子块目前有多少口气来计算分数。
  2. 根据它的设计,搜索树会较好地自动集中到“更值得搜索的变化”(注意,也不一定准)。如果发现一个不错的着法,蒙特卡洛树搜索会较快地把它看到很深,可以说它结合了广度优先搜索和深度优先搜索,类似于启发式搜索。这就部分解决了第一个问题 [2]。

围棋AI,蒙特卡洛树搜索_第2张图片

接这篇博客给出了关于搜索树如何进行启发式搜索的例子:28 天自制你的 AlphaGo (6) : 蒙特卡洛树搜索(MCTS)基础 - 知乎

在每层位置上筛选“最优价值的子节点”时,传统alpha-beta方法会选择价值最突出的子节点。即每次都只选择“最有利的/最不利的”,但是这会意味着搜索树的广度不够,容易忽略实际更好的选择。 蒙特卡洛搜索MTCS会选择采用UCB公式来更好的关注深度和广度问题。

3 Upper Confidence Bounds(UCB)

Exploration and Exploitation,

Exploitation: 

  • Exploit our current knowledge
  • Choose high-valued actions for which we already know the value
  • Low risk, Low Reward (possibly)
  • We know what we will get
  • Always choosing actions we are familiar with gives us little new information

Exploration

  • Try actions we haven’t before
  • Helps us learn their values
  • Possible that new actions have higher rewards than previously selected
  • Once we have explored sufficiently, then we can exploit the best actions and know that they are the best

探索也好,利用也罢,怎么去确定他们的分配比例呢?这就是难题所在了,我们可以设置一个概率参数p,以p的概率探索,以1-p的概率利用。下面要介绍的UCB也是其中的一种 [3]。

UCB公式如下:

其中 v_i 是节点估计的值(比如胜率),n_i 是节点被访问的次数,而 N 则是其父节点已经被访问的总次数。C 是可调整参数。

前者代表我们的经验,而后者代表我们的勇气。我们重点看一下我们的“勇气”。后面的值越大,代表着相对父节点的访问,我们访问当前这个子节点的次数偏少,因此我们要多多关注它,反之,则正好相反 [3]。

引用

[1] https://www.cnblogs.com/LittleHann/p/11608182.html#_label1

[2] 28 天自制你的 AlphaGo (6) : 蒙特卡洛树搜索(MCTS)基础 - 知乎

[3] 面向初学者的蒙特卡洛树搜索MCTS详解及其实现_彩虹糖的博客-CSDN博客

你可能感兴趣的:(dl/ml,matlab,机器学习,python)