Closed gmftbyGMFTBY closed 6 years ago
https://github.com/junxiaosong/AlphaZero_Gomoku/blob/68603c0d8e5a0ef9273bacc7d281abe27493da1b/mcts_alphaZero.py#L137 首先非常感谢作者的贡献,这份代码的教育意义非常大。对于这一行代码的问题,首先解释一下,对于 update_recursive 函数里面的 -leaf_value 我比较清楚。但是该局棋面的估计 leaf_value, 按照上述的代码,为什么本节点(做出估计的节点)的估计 V 要变成 -leaf_value。我认为做出估计的节点的 V 应该是 leaf_value 不是 -leaf_value,在向树上反向传播的时候需要每一层修正一次符号这个我是明白的(因为树是敌我交替的),但是update_recursive函数的调用入口的负号这里不是很懂,是我比较大的一个困惑,希望可以得到作者的解读,再次感谢。
顺便确认一下,代码中多次提到的 current player 是指当前棋局下需要走子的玩家吗?
@gmftbyGMFTBY leaf_value是从leaf节点的视角考虑的,leaf value传入后是用来更新Q value的,而leaf节点的Q value是给它的父节点选择分支的时候用的,所以这个Q value是从父节点的视角出发的,所以leaf节点自身的leaf value和自身的Q value就是从相反的视角考虑的,所以传入时就加了负号。 另外current player 是指当前棋局下需要走子的玩家。
https://github.com/junxiaosong/AlphaZero_Gomoku/blob/68603c0d8e5a0ef9273bacc7d281abe27493da1b/mcts_alphaZero.py#L137 首先非常感谢作者的贡献,这份代码的教育意义非常大。对于这一行代码的问题,首先解释一下,对于 update_recursive 函数里面的 -leaf_value 我比较清楚。但是该局棋面的估计 leaf_value, 按照上述的代码,为什么本节点(做出估计的节点)的估计 V 要变成 -leaf_value。我认为做出估计的节点的 V 应该是 leaf_value 不是 -leaf_value,在向树上反向传播的时候需要每一层修正一次符号这个我是明白的(因为树是敌我交替的),但是update_recursive函数的调用入口的负号这里不是很懂,是我比较大的一个困惑,希望可以得到作者的解读,再次感谢。
顺便确认一下,代码中多次提到的 current player 是指当前棋局下需要走子的玩家吗?