1

我正在根据早期版本的 AlphaGo(AlphaGo Fan 或 AlphaGo Lee)的架构实现一个围棋程序,例如使用策略网络、价值网络和蒙特卡洛树搜索(MCTS)。目前我已经训练了一个像样的策略网络和一个不敏感的价值网络,而且我没有一个快速推出的策略。我所说的“不敏感”是指价值网络无法判断复杂的情况,除非情况简洁,否则只能输出50%左右的胜率。价值网络可以正确判断简洁的棋盘(没有大吵大闹)。

使用这个策略网络和价值网络,我还实现了 MCTS 算法(树节点的评估仅由价值网络完成)。由于价值网络不准确,MCTS 恐怕在 MCTS 的时间还没到之前就容易陷入坏棋。为了更好地微调 MCTS 的超参数,以弥补价值网络不准确带来的不良影响,我有两个问题要问:

  1. 节点选择由 完成arg max (p_value + lambda * p_policy/visit_cnt)。微调参数有lambda帮助吗?
  2. 直觉上,我希望 MCTS 尽可能地探索。节点扩容阶段,设置扩容条件expand a leaf once it is visited a very small number of times, like 3有用吗?我应该使用什么扩展方法?

编辑:第二个问题是关于典型“选择、扩展、评估、备份”MCTS 算法的“扩展”阶段。我认为通过尽快扩展,MCTS 可以更深入地探索,并提供更准确的值近似值。我将参数设置nhow many times a leaf node is visited before it is expanded. 我想直观地知道,n大小n会影响 MCTS 的性能。

4

1 回答 1

0
  1. 节点选择由 完成arg max (p_value + lambda * p_policy/visit_cnt)。微调参数有lambda帮助吗?

让我们首先尝试对该公式中的所有术语的作用有一个很好的理解:

  • p_value:通过该节点的迭代结束时所有评估的平均值。这是我们目前根据价值网络在部署结束时的评估对这个节点有多好的估计。
  • p_policy/visit_cntp_policy对于根据您的策略网络看起来不错的节点将很高,对于根据您的策略网络看起来很糟糕的节点将很低。visit_cnt对于我们已经经常访问的节点,将是高的,对于我们尚未经常访问的节点,将是低的。这个完整的术语使我们最初“倾向于”策略网络,但随着时间的推移远离策略网络(因为根据策略网络良好的节点将具有较高的访问次数)。
  • lambda:决定上述两点的第一项和第二项之间的平衡的参数。如果lambda高,我们将更多地依赖策略网络给我们的信息,而不是价值网络给我们的信息。如果lambda较低,我们将更快地开始依赖早期 MCTS 迭代 + 价值网络评估提供给我们的信息,并减少对策略网络的依赖。

在您的问题文本中,您表示您认为政策网络是不错的,而价值网络并没有真正提供信息。因此,如果是这种情况,我会尝试使用高值lambda:如果您认为策略网络比价值网络提供更多信息,那么您将希望更多地依赖策略网络而不是价值网络,所以您会想要一个高lambda

  1. 直觉上,我希望 MCTS 尽可能地探索。在节点扩展阶段,将扩展条件设置为扩展一个叶子一次访问的次数非常少,比如 3 有帮助吗?我应该使用什么扩展方法?

扩展阶段在经典 MCTS 实现中通常相当有限(例如,每次迭代通常只扩展单个节点)的唯一原因是内存问题。如果你扩展得太频繁,你的树就会长得太快,你的内存就会用完。

在这些 AlphaGo 风格的设置(混合深度学习 + MCTS)中,您通常在这些网络中使用更多的计算时间,因此与没有任何深度学习的原始、纯 MCTS 算法相比,MCTS 迭代次数要少得多(但通常质量更高/更多信息的迭代,这弥补了较低的迭代次数)。这种较低的迭代次数显着降低了由于过度扩张而导致内存不足的风险,因此我怀疑您可以负担得起更积极的扩张。扩展过多唯一可能的负面影响是您的 RAM 用完,并且您会很容易注意到何时发生这种情况,因为您的程序会崩溃。

于 2018-01-27T14:25:27.913 回答