机器学习系列之蒙特卡罗树搜索(MCTS)

蒙特卡罗树搜索(MCTS)

蒙特卡罗算法的思想可以看我这篇博客
蒙特卡罗树搜索,即 Monte Carlo tree search(MCTS)是一种启发式搜索算法。现在我们来考虑下围棋这个游戏,我们用经典的Minmax搜索会碰到两个问题:

  • 每一步可能有很多中走法,这就导致搜索树太广
  • 要走很多步游戏才结束,也就是说搜索树特别深

这时,蒙特卡罗树搜索就能发挥作用,它不遍历整个搜索树,也即找到的不是最优解,但是是一个解决该问题的方法,它可以让游戏树向最优的方向扩展

原理

蒙特卡罗树搜索的每个循环包括下面四个步骤(看不懂没关系,我后面会结合图具体讲解):

  • 选择(Selection):从根节点R开始,选择合适的子节点向下至叶子节点L(怎样选择合适的点后面再说)。
  • 扩展(Expansion):除非任意一方的输赢使得游戏在L结束,否则创建一个或多个子节点并选取其中一个节点C。
  • 仿真(Simulation):在从节点C开始,用随机策略进行游戏,又称为playout或者rollout。
  • 反向传播(Backpropagation):把模拟的结果加到它所有的父节点上。

图片来自维基百科
上图来自于维基百科,每个节点上的A/B可以理解为,该节点被访问了B次,然后黑方胜利了A次,可以对照理解它的四个步骤。所以,我们其实可以看出,它是想用选择某节点后输赢的频率来代替选择该节点后输赢的概率,也就是说我想计算走这一步后的最后赢的概率,但是因为无法穷举,就计算输赢的频率。用能观察的频率代替真实的概率

选择方式

现在来介绍第一步怎么选择,我们肯定希望选择最具有潜力的节点,选节点有很多种方式,最经典的方式是UCB1公式,取其值较大的节点,公式具体为:
w i n i + c ln ⁡ t n i \frac{w_i}{n_i}+c\sqrt{\frac{\ln t}{n_i}} niwi+cnilnt

  • w i w_i wi代表第 i i i次移动后取胜的次数。
  • n i n_i ni代表第 i i i次移动后仿真的次数。
  • c c c为探索参数—理论上等于 2 \sqrt {2} 2 ;在实际中通常可凭经验选择; c c c越大,越会照顾访问次数相对较少的节点。
  • t t t代表仿真总次数,等于所有 n i n_i ni的和。

例如:
7/10对应的分数为: 7 10 + c log ⁡ 21 10 ≈ 0.7 + 0.55 c \frac{7}{10} + c\sqrt{\frac{\log 21}{10}}\approx0.7+0.55c 107+c10log21 0.7+0.55c
5/8对应的分数为: 5 8 + c log ⁡ 21 8 ≈ 0.625 + 0.62 c \frac{5}{8} + c\sqrt{\frac{\log 21}{8}}\approx0.625+0.62c 85+c8log21 0.625+0.62c

扩展

如果所选节点L能判定输赢,则该轮游戏结束,否则,创建一个或多个子节点C;
如果所选节点L不能判定输赢,如上图第2个树,选择了叶子节点3/3,然后建立一个子节点,初始状态为0/0。

仿真

到这一步原则上是采用随机策略,实际操作也可以使用一下“有经验”的策略,不过仿真需要快速完成,也即需要快速分出胜负。从上图第三个树上可以看出,最后黑方输了,然后这个节点为0/1,也即访问了一次,赢了0次。

反向传播

这一步很简单,就是将刚才的结果加到所有的父节点上。如上图所示,它的父节点访问次数都加1,黑方赢的次数都加0。

使用蒙特卡罗树做决策

当构建好一颗蒙特卡洛树以后,需要用它来做决策时,应该选择访问量最大的节点。因为我们可以试想一下,如果访问量很低的节点,就算它的胜率很高,也不可靠,因为模拟次数太少。而访问量大的点是通过UCB公式选择出的,所以它的胜率不会低,而且稳定性强

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值