据我了解,引擎现在可以分为四类:使用Alpha-beta(AB)的引擎+使用蒙特卡洛树搜索(MCTS)的引擎,使用手写功能的引擎+使用神经网络的引擎评估。最强大的两个引擎是Leela和Stockfish。Leela使用MCTS + NN,而Stockfish使用AB +手写。
为什么这两种组合?为什么不使用NN + AB或MCTS +手写?如果MCTS比AB更好,为什么Komodo MCTS不比Komodo AB更强大?如果AB比MCTS更好,那么Leela为什么不使用AB呢?
据我了解,引擎现在可以分为四类:使用Alpha-beta(AB)的引擎+使用蒙特卡洛树搜索(MCTS)的引擎,使用手写功能的引擎+使用神经网络的引擎评估。最强大的两个引擎是Leela和Stockfish。Leela使用MCTS + NN,而Stockfish使用AB +手写。
为什么这两种组合?为什么不使用NN + AB或MCTS +手写?如果MCTS比AB更好,为什么Komodo MCTS不比Komodo AB更强大?如果AB比MCTS更好,那么Leela为什么不使用AB呢?
Answers:
神经网络的运行要比手工评估功能慢得多。在TCEC超级决赛中,Leela Chess Zero运行在两个具有专用张量核的GPU上,每秒可以搜索约6万个位置。相比之下,Stockfish在我PC上的单个内核上,每秒搜索超过200万个职位。
尽管现代引擎拥有大量的技术来切断不必要的分支,但alpha-beta树搜索仍然是一种蛮力技术,需要搜索大量位置才能确定良好的动作。
相比之下,MCTS的选择性要高得多,并且只会将其搜索树扩展到最有前途的举措,这使它可以充分利用有限数量的可搜索节点。
基于alpha-beta搜索的引擎评估功能的关键要求之一是,它必须具有良好的最坏情况行为。这是因为评估中的任何大错误(无论多么罕见)都可以很容易地传播到根源,并导致进行极其错误的动作。
由于其复杂性,神经网络很容易过度拟合,只能与用于训练它们的数据一样好。例如,在TCEC第14季超级决赛的第80场比赛中,前进47 Lc0显然没有受到Stockfish的额外皇后的困扰,他的位置为酷+0.77,而Stockfish(和大多数其他引擎)的得分为+8.31。一个流行的解释是,Lc0可能没有在其训练组合中进行过很多具有多个皇后的游戏。
因此,神经网络的最坏情况行为不佳,因此在alpha beta搜索中可能表现不佳。相比之下,MCTS可以通过将分配给一个位置的不正确分数与分配给搜索附近位置的合理分数进行平均来抵消它。
所有强大的alpha-beta引擎都使用一种称为“ 静态搜索”的技术,该技术是在叶子节点上应用的一种受限形式的alpha-beta搜索,以确认其手工制作的评估功能只能在“安静”位置(没有待处理的捕获或检查)很好地工作。 。
例如,在皇后交换的上半场之后,手工制作的评估函数可能会告诉您,刚取走皇后的那一侧已完全丢失,而神经网络可能能够理解女王将很快被重新夺回。
由于缺少静态搜索,这使得手工评估功能同样不适用于MCTS,从而导致手工功能在许多时间上的执行效果很差(尽管Komodo 12 MCTS仍然通过使用简短的alpha-beta搜索来克服此限制,从而获得静态位置和因此允许其手工评估返回合理的分数)