Machine learning AlphaZero:在自玩期间访问了哪些节点?

Machine learning AlphaZero:在自玩期间访问了哪些节点?,machine-learning,artificial-intelligence,reinforcement-learning,monte-carlo-tree-search,Machine Learning,Artificial Intelligence,Reinforcement Learning,Monte Carlo Tree Search,阅读这篇文章有助于更好地理解AlphaZero背后的原理。不过,有些事情我还是不能完全确定 下面是作者的UCT_搜索方法,可以在Github上的代码中查阅: 这里,UCTNode.backup()将网络的值\u估计值添加到所有遍历的节点(另请参见此) def-UCT\u搜索(游戏状态、读取数、网络、温度): root=UCTNode(游戏状态,move=None,parent=DummyNode()) 对于范围内的i(num_读取): 叶=根。选择叶() encoded_s=ed.encode_

阅读这篇文章有助于更好地理解AlphaZero背后的原理。不过,有些事情我还是不能完全确定

下面是作者的
UCT_搜索
方法,可以在Github上的代码中查阅:
这里,
UCTNode.backup()
将网络的
值\u估计值
添加到所有遍历的节点(另请参见此)

def-UCT\u搜索(游戏状态、读取数、网络、温度):
root=UCTNode(游戏状态,move=None,parent=DummyNode())
对于范围内的i(num_读取):
叶=根。选择叶()
encoded_s=ed.encode_板(leaf.game);encoded_s=encoded_s.转置(2,0,1)
encoded_s=torch.from_numpy(encoded_s).float().cuda()
子优先级,值估计=净(编码)
child_priors=child_priors.detach().cpu().numpy().reformate(-1);价值估算=价值估算。项目()
如果leaf.game.check_winner()==True或leaf.game.actions()=[]:#如果有人赢了或平局
叶备份(价值估算);持续
展开(儿童优先)#需要确保有效移动
叶备份(价值估算)
返回根

此方法似乎只访问直接连接到根节点的节点
然而,(关于AlphaGo Zero)说:

每个模拟从根状态开始,并迭代选择 使置信上限Q(s,a)+U(s,a)最大化的移动,其中 U(s,a)∝ P(s,a)/(1+N(s,a)),直到遇到叶节点s′

因此,我期望的是:

def UCT_search():
对于范围内的i(num_读取):
当前节点=根
当前_节点展开时:
…
当前\节点=当前\节点。选择\叶()
当前节点备份(价值估算)
UCTNode.is_expanded
is
False
如果尚未访问该节点(或是结束状态,即游戏结束)


你能解释一下为什么会这样吗?还是我忽略了什么
提前感谢

您提到的逻辑在中,它选择了最好的叶子,而不仅仅是直接连接的节点

您提到的逻辑在中,它选择了最好的叶子,而不仅仅是直接连接的节点

我认为随着游戏状态的更新,根节点会自动更新。因此,新位置将是函数开始探索的根。我认为随着游戏状态的更新,根节点会自动更新。因此,新位置将是函数开始探索的根。