一个比较有意思的在离散情况下的 planning 方式。

之所以叫做tree search,我觉得就是因为这种方法就是像树杈一样从根部到树叶不断地搜索。就像下图这样:
DRL(八)—— Monte Carlo Tree Search (MCTS)
要注意的是:

  • 每个节点的含义,并不是每个state,而是采取某个特定的action后到达的state,这个state可以是不同的。比如说,从s1s_1开始,我们如果执行action a1 = 0a_1~=~0,如图所示就会到达左边的s2s_2,只要执行action a1 = 0a_1~=~0,就会到达左边的s2s_2

那么,既然是从根部开始,即我们在刚开始的时候只有一个s1,那么我们要怎么决定下一个采取什么动作呢?有两个原则:

  1. 选择Q值高的动作。也就是选择reward 高的动作。
  2. 选择没有选择过的动作。这里包含的意思,不仅是在某一个节点下如果有没有经历过的动作优先选择这个动作,而且是说,要选择N比较小的动作。(N是经历的次数)

为了更好的实现第二点,给出的每个state的score(st)score(s_t)是这样设计的,不光光看它的Q值:
score(st) = Q(st)N(st) + 2C2lnN(st1)N(st)score(s_t)~={~Q(s_t)\over\\N(s_t)}~+~2C\sqrt{2lnN(s_{t-1})\over\\N(s_t)}
这个式子也比较好理解,第一项就是每个节点所有的reward除以经历的次数,也就得到了Q的平均值,第二项就是考虑到上面说的第二点,C是我们自行设定的常数,第二项就随着N的增大而减小。

就像下图:
当我们某时刻经历了这些时,DRL(八)—— Monte Carlo Tree Search (MCTS)
虽然右边的节点看起来Q值平均值更大一些,但是因为左边并没有很好的探索完,也就是说,在一个比较好的C值下,我们应该会选择左边。如下图:
DRL(八)—— Monte Carlo Tree Search (MCTS)
这样一来,左右的均值其实就是一样的了。一样的情况下再选的时候就是随机就好了。

有两篇相关的论文可以参考一下:

  1. A Survey of Monte Carlo Tree Search Methods
  2. 关于应用 Deep Learning for Real-Time Atari Game PlayUsing Offline Monte-Carlo Tree Search Planning

相关文章: