今天(2017-10-19) 看到一篇关于蒙特卡罗搜索树 (Monte Carlo Tree Search) 的文章,感觉写的非常好,决定尝试翻译一下,于是就有了这篇文章:)。
原文在这阅读原文 monte-carlo-tree-search

1 What is MCTS?

 蒙特卡罗搜索树是 一个在人工智能(AI)问题中做出优化决策的方法,通常在组合游戏中移动规划。它将随机模拟的一般性与树搜索的精度相结合。  由于 AlphaGo 卓越的表现,并潜在应用于一些其他难题上,人们对MCTS的研究兴趣急剧上升。其应用范围超越了游戏,理论上 MCTS 可以应用于能用 {state,action} 来描述的任何领域,以及预测结果的 模拟。

2 Basic Algorithm

 基本的MCTS算法很简单:根据模拟当前状态的结果,逐个节点构建搜索树。该过程可以分为以下4个步骤:

MCTS-tree

  1. Selection 从根节点Root开始,递归地选择最佳子节点(后面详述),直到到达叶节点L。
  2. Expansion 如果L不是一个终止节点(游戏未结束),然后创建一个或多个子节点并选择一个C。
  3. Simulation 从C运行模拟输出,直到达到结果。(注:这里有点拗口,可以简单理解为当前节点输赢的概率)
  4. Backpropagation 用上一步得到的结果,反向更新当前搜索路径上的每个节点的值。

补充: (1) 每个节点必须包含两个重要的信息:基于模拟结果的估计值和它被访问的次数。 (2) 在最简单和最高记忆效率的实现中,MCTS将每次迭代添加一个子节点。根据具体的业务场景: 每次迭代添加多个子节点可能更好。

3 Node Selection

如何选择最优的子节点呢? 树下降期间的节点选择,是通过选择最大化一些数量的节点来实现的(译者注:类似于贪心的策略,每次选取局部最优,这个最优是模拟出来的,所以每个子节点都有机会),类似于玩家必须选择胜算最大的落子位置。通常使用以下公式来计算:

upper-confidence-bounds-for-trees-UCB

其中vi是节点的估计值,ni是节点被访问的次数,N是其父访问次数的总次数。C是可调偏置参数。

4 Conclusion

  • UCB公式平衡了对已知奖励的开发与探索相对未访问的节点,以鼓励他们的锻炼。
  • 奖励估计是基于随机模拟,因此节点必须在这些估计值变得可靠之前多次访问;
  • MCTS的估计通常在搜索开始时是不可靠的,但是在给定足够的时间和给出无限时间的完美估计的情况下,收敛到更可靠的估计。