1 蒙特卡罗方法(Monte Carlo method)
2. 蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)
3 Upper Confidence Bounds(UCB)
像圆周率计算实验一样,用通过概率实验所求的概率估计来估计一个未知量,这样的方法统称为蒙特卡罗方法(Monte Carlo method)。
在现实世界中,大量存在一些复杂性过程,由于这类模型含有不确定的随机因素,我们很难直接用一个确定性模型来分析和描述。面对这种情况.数据科学家难以作定量分析,得不到解析的结果,或者是虽有解析结果,但计算代价太大以至不能使用。在这种情况下,可以考虑采用 Monte Carlo 方法 [1]。
蒙特卡洛树搜索是一种基于树结构的蒙特卡洛方法,所谓的蒙特卡洛树搜索就是基于蒙特卡洛方法在整个2N(N等于决策次数,即树深度)空间中进行启发式搜索,基于一定的反馈寻找出最优的树结构路径(可行解)。概括来说就是,MCTS是一种确定规则驱动的启发式随机搜索算法 [1]。
以MCTS的围棋AI算法为例,MCTS应用了Minimax作为启发方法,Alpha-beta剪枝降低运算量, network作为估算方法。
看下图,假设现在轮到黑棋,黑棋有b1和b2两手可选,白棋对于b1有w1和w2两手可选,白棋对于b2有w3 w4 w5三手可选:
然后假设走完w1/w2/w3/w4/w5后,经过局面评估,黑棋的未来胜率分别是50%/48%/62%/45%/58%(等一下,这些胜率是怎么评估出来的?我们后文会说这个问题)。
如果白棋够聪明,会在黑棋走b1的时候回应以w2(尽量降低黑棋的胜率),在黑棋走b2的时候回应以w4(尽量降低黑棋的胜率)。
所以走b1后黑棋的真实胜率是48%,走b2后黑棋的真实胜率是45%。黑棋的正解是b1。这就是 Minimax 搜索的核心思想:在搜索树中,每次轮到黑棋走时,走对黑棋最有利的;轮到白棋走时,走对黑棋最不利的。由于围棋是零和游戏,这就可以达到最优解。这是一个由底往上的过程:先把搜索树画到我们可以承受的深度,然后逐层往上取最大值或最小值回溯,就可以看到双方的正解(如果胜率评估是准确的)[2] 。
如果想把 Minimax 搜索运用到围棋上,立刻会遇到两个大问题:
蒙特卡洛树搜索的意义在于部分解决了上述两个问题:
接这篇博客给出了关于搜索树如何进行启发式搜索的例子:28 天自制你的 AlphaGo (6) : 蒙特卡洛树搜索(MCTS)基础 - 知乎
在每层位置上筛选“最优价值的子节点”时,传统alpha-beta方法会选择价值最突出的子节点。即每次都只选择“最有利的/最不利的”,但是这会意味着搜索树的广度不够,容易忽略实际更好的选择。 蒙特卡洛搜索MTCS会选择采用UCB公式来更好的关注深度和广度问题。
Exploration and Exploitation,
Exploitation:
Exploration
探索也好,利用也罢,怎么去确定他们的分配比例呢?这就是难题所在了,我们可以设置一个概率参数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博客