我正在大致根据早期版本的AlphaGo(AlphaGo Fan或AlphaGo Lee)的架构实现Go游戏程序,例如使用策略网络,价值网络和蒙特卡罗树搜索(MCTS)。目前,我已经培训了一个体面的政策网络和一个不敏感的价值网络,我没有快速推出的政策。通过"不敏感"我的意思是,价值网络无法判断复杂情况,只有输出50%左右的赢率,除非情况简明扼要。价值网络可以正确判断简洁的董事会(没有大的斗争)。
使用此策略网络和价值网络,我还实施了MCTS算法(树节点的评估仅由价值网络完成)。由于价值网络不准确,我担心MCTS在MCTS时间到来之前容易陷入不良行为。为了更好地微调MCTS的超参数以弥补不准确的价值网络带来的不良影响,我有两个问题要问:
arg max (p_value + lambda * p_policy/visit_cnt)
完成。是否微调参数lambda
帮助? expand a leaf once it is visited a very small number of times, like 3
是否有帮助?我应该使用什么扩展方法? 编辑:第二个问题是关于'扩展'典型的选择,扩展,评估,备份阶段' MCTS算法。我认为,尽快扩展,MCTS可以更深入地探索,并提供更准确的值近似值。我将参数n
设置为how many times a leaf node is visited before it is expanded
。我想直观地知道,大n
和小n
会影响MCTS的性能。
答案 0 :(得分:0)
- 节点选择由
醇>arg max (p_value + lambda * p_policy/visit_cnt)
完成。是否微调参数lambda
帮助?
让我们首先尝试深入了解该公式中的所有术语:
p_value
:通过此节点的迭代结束时所有评估的平均值。根据推出结束时价值网络的评估结果,这是我们目前对该节点有多好的估计。p_policy/visit_cnt
:p_policy
对于根据您的策略网络看起来不错的节点而言会很高,而根据您的策略网络看起来很差的节点会很低。 visit_cnt
对于我们已经经常访问过的节点来说会很高,而对于我们还没有经常访问过的节点来说会很低。这个完整的术语使我们最初倾向于“倾向于”#39;'策略网络,但随着时间的推移离开策略网络(因为根据策略网络的好节点将具有高访问次数)。lambda
:确定上述两点第一和第二项之间平衡的参数。如果lambda
很高,我们将更多地依赖于政策网络为我们提供的信息,而不是更多地依赖于价值网络为我们提供的信息。如果lambda
较低,我们会更快地开始依赖早期MCTS迭代+价值网络评估提供给我们的信息,并减少对政策网络的依赖。在您的问题文本中,您已经声明您认为政策网络是合适的,而价值网络并不是真正的信息。因此,如果是这种情况,我会尝试使用lambda
的高值:如果您认为政策网络比价值网络更具信息性,那么您会想要比价值网络更依赖于政策网络,因此您需要一个高lambda
。
- 直观地说,我希望MCTS能够进一步探索。在节点扩展阶段,一旦访问次数很少,设置扩展条件为扩展叶子,如3帮助?我应该使用什么扩展方法?
醇>
扩展阶段在经典MCTS实现中经常相当有限的唯一原因(例如,通常每次迭代只扩展一个节点)是内存问题;如果你经常扩展,你的树会变得太快,你的内存就会耗尽。
在这些AlphaGo风格的设置(混合深度学习+ MCTS)中,您经常在这些网络中使用更多的计算时间,因此比没有任何深度学习的原始纯MCTS算法获得更少的MCTS迭代(但通常更高质量/更多信息的迭代,弥补了较低的迭代次数)。这种较低的迭代次数显着降低了由于过度热情扩展而导致内存不足的风险,因此我怀疑您可以更积极地扩展。扩展太多的唯一可能的负面影响是你的RAM耗尽,当你发生这种情况时你会很容易注意到,因为你的程序会崩溃。