Open bhpfelix opened 6 years ago
我也在关心这个问题,也一直没有弄明白。有个问题是如果按照论文说法,是在给树的节点赋值的时候加上概率并添加噪声,那么每次扩展节点的时候,每个概率都会有误差,那么很多次搜索都是在瞎搜,即使网络拟合的策略概率已经很好了,但是每次把tau=0.001并添加噪声,都会破坏拟合好的概率,导致学到程度后不再提升,而且网络的拟合loss也跟高。不知道我的理解对不对。
Dirichlet noise只在每次get action probability时的root node加,之后扩展的node是不加的。上面问题尝试弄清楚action selection时是在mcts前的prior probability加noise还是在mcts后用visit count算出的search probability加noise。前者的话是不会太影响搜索效果的,只会promote每次mcts playout时第一步尝试尽可能多的下子方法,不会影响之后的下子以及playout结束后使用最后的search probability来选择一个strong move,而后者则会直接在根据search probability选择action时引入noise,进而有可能undermine mcts作为“policy improvement process”的效果
这种方式我觉得和论文的描述更贴近。也有一点问题,在于tau=0.001了再加噪声,会使得策略网输出的最优节点的概率为0.75,剩下的概率很小。那么树的探索很多次都会走向那个概率为0.75的分支,除非那个点输的情况特别多,否则即使它不如其中某一些节点效果好,也会因为visit次数多而仍然选择这个节点下棋。然后再下一次计算这个状态的下子概率的时候,这个突出的节点又会因为visit次数最多而得到最高的π(a|s)。虽然原文的意思是为了减小探索,但是在搜索次数有限的情况下,会不会陷入一种走子里面再也出不来,也就是说MCTS并没有提升棋力。方便加个微信交流一下吗?
AlphaGo Zero论文中确实是把dirichlet noise加在MCTS搜索开始时根节点的prior probability上的,我之前有尝试过,但在我小棋盘小算力的情况下没观察到有效果提升。按照我的个人理解,这只是一个引入exploration的方式,我现在直接在mcts结束之后的概率上加noise,有点类似于Q-learning中episilon-greedy探索策略,强制以一定概率随机探索,总的来说是加强了探索的程度,让实际落子的时候也会尝试尽可能多的下法。另外,现在输出供策略网络训练的数据中使用的是没有加noise的MCTS搜索返回的原始概率,所以可能不会影响mcts输出作为“policy improvement”的效果
您好!论文中提到对prior probabilities in the root node添加dirichlet noise,按AlphaGo Zero和AlphaZero论文里的notation来看,这里的prior probabilities应该指的是policy value network在feedforward相应的game state后输出的move probabilities,而不是mcts playout之后用visit count算出的search probabilities,但看下面这里好像是在visit count算出的search probabilities上加了dirichlet noise? https://github.com/junxiaosong/AlphaZero_Gomoku/blob/66292c55cc53acfae7f7bc5a15a370571549bdd9/mcts_alphaZero.py#L190-L198
下面是下赢奕心那位的implementation,看起来是在root node的move probabilities加了noise的 (另外注意到他的alpha用了0.04,估计是因为用的15x15的棋盘?) https://github.com/zhongjn/gomokuer/blob/f44a6f3389b9a97647ce3c8fef17d0363cdb609b/search.cpp#L186-L188