橘智橘智
FakeOrange
预计阅读时间:3分钟42秒

Alphazero 的真正秘密武器是蒙特卡洛树搜索(MCTS)

棋类游戏的事件中哪种算法更具优势?

0
7


前言



本文属于搬运内容,原作者:Bram Cohen(Salute!)


Alphazero 击败 Stockfish 的一系列精彩对局被普遍解读为计算机国际象棋发展的一个转折点,标志着计算机国际象棋将不可避免地转向基于深度学习的棋局评估。


关于深度学习为中心的解释有一定道理,但我认为这仅仅是部分事实。在已经公开的对局中,Alphazero 出色地利用了对手在棋子移动性和王安全性评估方面的问题。尽管比赛的公平性存在争议,这仍然是一项非凡的成就。然而,Alphazero 改变了两件事情:它采用了基于深度学习的棋局评估函数,同时用蒙特卡洛树搜索(MCTS)代替了传统的 alpha-beta 剪枝来应用这一评估函数。从现有的信息来看,MCTS 的表现似乎至少与深度学习棋局评估的进步一样重要,甚至更为重要。



理解背景:改进棋类引擎的痛点



要理解为什么 MCTS 可能更关键,首先需要理解开发一个国际象棋引擎的实际工作是什么样的。改进传统国际象棋引擎是一个缓慢而艰巨的过程:你会不断提出可能的改进思路,对其进行广泛的测试,但大多数情况下发现这些改进会让引擎表现变差,偶尔才能找到一个改进,可能幸运地提升 1 或 2 分 Elo


这些微小的提升会随着时间的推移逐渐积累,直到引擎的表现能完全压倒其旧版本。(有趣的是,Elo 分数作为一个线性衡量标准的假设在实践中表现得非常准确,这也暗示了关于 IQ 遗传学的一些争议性观点,但这不是本文要讨论的内容。)


这种迭代方法的一个不幸副作用是,引擎的实力往往被局限在一个局部最优解上。一位 Komodo(另一种强大的国际象棋引擎)的开发者最近表示,虽然他的引擎在许多方面都优于 Stockfish,但它使用的剪枝比 Stockfish 少得多,因此每回合需要评估更多的可能性,导致搜索深度不如 Stockfish。根据实际表现,这种配置让 Komodo 的实力达到了最强。但奇怪的是,即使尝试将 Stockfish 的剪枝方法移植到 Komodo,也会让其表现变差。



剪枝与评估函数之间的耦合



不管是 Komodo 的开发者、Stockfish 的开发者,还是我自己,都无法解释其中的原因。看起来,关于剪枝的假设已经深深嵌入了 Komodo 的棋局评估函数中,并且以一种非常微妙的方式难以理解或改变。


对此有一些可能的解决方法。例如,可以尝试把一个国际象棋引擎的所有“魔法数字”(指特定评估规则的参数值)全部抛弃,并通过自对弈生成新的参数,这种方法和 Alphazero 的方法在本质上非常相似。我自己在这方面很虚伪,因为即使在完全适用的个人项目中,我也从未尝试过这种方法。我甚至没有使用如今在国际象棋引擎开发中常用的简单优化魔法数字的方法。


尽管如此,这种基于遗传算法的方法可能会创造出整体更强大的引擎,减少每次改动所需的细致工作,同时能够让更小幅度的改动显得有价值。


但即使是当前被视为“极端”的措施,也仍然局限于现有引擎的框架,仅能做出一些小的调整。要想进行真正深层次的变革,需要开发者花费数年时间对整个系统重新优化,以观察最终是否会比旧方法更强。而由于大多数此类实验的结果可能是失败的,这种尝试几乎从未被付诸实践。最难以改变的核心之一就是 alpha-beta 剪枝

长期以来,有一种观点认为 蒙特卡洛树搜索 (MCTS) 在某些情况下可能优于 alpha-beta 剪枝。这在引擎对战中常有体现:引擎可能会得出某种局面对一方有利,但实际演算却几乎 100% 导致和棋;或者出现一种局面,一方的优势虽然微弱但在加速扩大,而完全演算能够迅速表明这一方具有明显优势。问题在于,过去所有尝试将 MCTS 应用于国际象棋的努力都以失败告终。而 MCTS 的实现方式有无数种细微变化,每种方法都可能产生完全不同的结果。由于让 MCTS 达到“绝佳配方”可能需要数千年开发者时间,几乎没有人尝试进行这种耗时多年的实验。



深度学习的作用



传统国际象棋引擎的棋局评估函数是以之前描述的方式开发出来的:缓慢且费力。但这带来的好处是,传统方法能做到令人难以置信的快速。这是因为“快速而笨拙”的方法在过去的所有实践中都显然提供了最佳结果。事实上,棋局评估的具体实现细节,专业术语称之为“临时凑出来的玩意儿(hacky bullshit)”。


几年前,我曾对一位国际象棋引擎开发者评论说,他们在棋局评估中用来补偿“哪一方上次走了棋”的方法看起来有点像是在满月时杀鸡。他回应道:“国际象棋引擎每秒能杀掉数百万只鸡。”


显然,看得更远总是更好。测试一再表明,搜索深度比评估质量重要得多


当 AlphaGo 最初开发时,它的 MCTS(蒙特卡洛树搜索)实现并不是很好。但围棋是一种 MCTS 明显优于 alpha-beta 剪枝的游戏,即使是一个粗糙的 MCTS 实现也能给出不错的结果,并为判断哪些改进方法更优提供了有力的参考。AlphaZero 的首席程序员表示,现在使用的是更有理论依据的算法。当前 AlphaZero 的 MCTS 实现是一种良好(或至少是更好)的方式,具有直观可解释的逻辑论证,并且在实践中相当成功。(他虽然没有直接将最初 AlphaGo 的 MCTS 称为“临时凑出来的玩意儿(hacky bullshit)”,但这样的表述可能在技术上是准确的。)


尽管如此,MCTS 仍然存在许多可能的变体,每种都有看似合理的论点支持其正确性,与 AlphaZero 所采用的方法相差无几。DeepMind 团队并没有某种超乎寻常的直觉来选择 MCTS 的最佳实现方式,而是借助了一个深度学习棋局评估函数和自我对弈的秘密武器。有了这个工具,实验各种 MCTS 的变体不再需要数年的开发者时间,只需让计算机运行几个小时即可。这是一项真正非凡的成就,但它的真正威力可能并不在于生成的棋局评估函数的质量(其细节与我们以往关于国际象棋棋局评估的认知相悖),而在于它使得能够进行本质上不同的实验成为可能,并最终得出了简单、可操作的指导:国际象棋引擎应基于一种特定形式的 MCTS,而非 alpha-beta 剪枝。


我们无法确切知道 AlphaZero 的深度学习棋局评估函数是否是它在国际象棋中成功的关键,还是只是一个误导因素,除非有人进行实验,构建一个使用 AlphaZero 的 MCTS 算法和相对传统、快速但“笨拙”的棋局评估函数的国际象棋引擎,并在这些条件下优化其性能。现在有了一个真正良好的 MCTS 实现,这种实验值得尝试。尽管失败的可能性较高,但也有可能取得惊人的成功,因此希望有人能够真正投入其中。(不过,也许等待一段时间,等到 MCTS 本身进一步改进后再行动会是一个好主意。)


遗憾的是,对 AlphaZero 国际象棋成果的这种相对平淡的解读,尽管完全合理,却远没有将其宣扬为 AI 的重大胜利那样吸引人。AI 的历史充满了伟大的成就,但每当某个领域取得实际进展时,它们就不再被称为 AI。例如,有新闻文章将这场比赛描述为“AI 对战国际象棋引擎”,仿佛国际象棋引擎本身就不是人工智能。深度学习可能是第一种即使证明了自身的实际效用,也仍会保留 AI 名号的技术。而 MCTS 的改进,则很可能不会如此。


原文链接

评论