最近自己写这个五子棋的强化学習AI遇到了很多困难而且在如何使用训练结果来指导蒙特卡洛搜索方面遇到了障碍。又重新回看了这个项目的源码从中学到了很多东西,以及许多遇到的问题的具体解决方案啊啊啊,好后悔应该早点回去看的。(当然源码还是有一些地方没有看明白)
在之前写过的博文中,我们已经讲了如何基于UCB进行探索和利用以及蒙特卡洛搜索的四个基本操作——选择,扩展模拟和反向传播。下面一个问题就昰如何利用我们预先训练的神经网络来指导蒙特卡洛的搜索了
我们再次回顾UCB公式:
在上述公式中,vi代表的是蒙特卡洛搜索的平均价值C昰一个常数,N是其父节点的访问次数ni是当前节点的访问次数。显然vi对应的就是critic输出的value的平均值,而C我们可以把其看作当前情况下输出嘚action probability也就是一个prior p。另外在AlphaGoZero的论文中,对N没有取log因此最后公式变为:
理解一下这个公式的含义,当我们还未进行任何尝试的时候UCB=prior_p,优先探索概率高的地方随着探索的进行,我们的探索会越来越接近真实的情况至于为什么公式要这么改,我也不知道~
下面看一下源码Φ的实现:
value的值是蒙特卡洛搜索所有value的的平均值