在上一篇文章中,我们介绍了 Stockfish 的基本原理。
简单来说,Stockfish 像一位极其严谨、速度惊人的计算大师:它会在棋盘上展开庞大的搜索树,利用 Alpha-Beta 剪枝、局面评估、走法排序、置换表、残局库等方法,在有限时间内尽可能找到最优走法。
但 2017 年,DeepMind 提出了另一种完全不同的路线:AlphaZero。
它不是从人类大师棋谱中模仿,也不是依赖大量人工设计的局面特征,而是从零开始,只知道规则,然后通过不断和自己对弈,逐渐学会如何下棋。DeepMind 的论文中明确指出,AlphaZero 在国际象棋、将棋和围棋中都采用了同一种通用强化学习算法,并且除了游戏规则之外,不使用额外领域知识。
论文:Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm
传统引擎:先搜索,再评估
传统引擎大致做两件事:
第一,搜索未来的变化。
从当前局面出发,它会尝试不同走法,继续推演对方回应,再继续推演自己的下一步,就像展开一棵巨大的“走法树”。
第二,评估叶子局面。
由于不可能一直算到将死,所以引擎会在某个深度停下来,对当前局面打分。以前这类评估函数依赖大量人工设计特征,比如子力价值、王安全、兵型、空间、机动性等;现代 Stockfish 使用 NNUE 神经网络评估,但整体搜索框架仍然延续 Alpha-Beta 搜索传统。
AlphaZero:先形成直觉,再重点搜索
AlphaZero 的核心由两个部分组成:
第一部分:神经网络
这个神经网络输入当前棋盘局面,输出:
- Policy 策略头:告诉程序“哪些走法看起来更有希望”;
- Value 价值头:告诉程序“这个局面对当前一方大概是好是坏”。
第二部分:蒙特卡洛树搜索MCTS
MCTS 会从当前局面出发,一次次模拟未来变化。但它不是像 Alpha-Beta 那样追求极大极小值,而是根据神经网络给出的先验概率和局面价值,逐渐把搜索集中到更有希望的分支上。
最后,AlphaZero 不一定选择神经网络一开始最喜欢的走法,而是选择在搜索过程中被访问次数最多、综合表现最好的走法。
AlphaZero 是怎么从零开始学会下棋的?
AlphaZero 的训练过程可以分成四步
第一步:随机初始化
一开始,神经网络的参数是随机的。这时 AlphaZero 完全不会下棋。它对局面的判断、对走法的偏好,都很混乱。
就像一个刚知道规则的新手,只知道马走日、象走斜线、王不能被将军,但完全不知道什么是中心、王翼进攻、弃子补偿、弱格和残局转换。
第二步:自己和自己下棋
AlphaZero 让当前版本的自己和自己对弈。
每一步棋,它不是直接随便走,而是先用 MCTS 搜索。搜索过程中,神经网络会提供直觉,MCTS 会提供修正。
这就像一个新手虽然棋感很差,但每一步都允许自己认真分析很多可能性。虽然一开始分析也不准,但总比完全随机要好一点。
第三步:从结果中学习
一盘棋结束后,结果只有三种:
赢:+1和:0输:-1
AlphaZero 会回头看这盘棋中的每个局面,调整神经网络:
如果当时它判断“这个局面很好”,但最后输了,那说明判断错了,要修正。
如果 MCTS 搜索后认为某个走法更可靠,而神经网络一开始没看好它,那说明神经网络的策略也要修正。
第四步:不断循环
新的神经网络变强一点后,再用它继续自我对弈。
然后再学习,再对弈,再学习。
当前棋力 → 自我对弈 → 搜索改进 → 学习结果 → 棋力提升 → 更强的自我对弈
这就是 AlphaZero 的核心飞轮。
Leela Chess Zero:开源世界的 AlphaZero 路线
AlphaZero 本身并没有作为公开引擎发布。普通棋友无法下载一个官方 AlphaZero,然后在电脑上直接运行。
但开源社区很快开始尝试复现 AlphaZero 的思想,其中最著名的项目就是:Leela Chess Zero,简称 Lc0。
https://lczero.org/
https://github.com/glinscott/leela-chess
它大致沿用了 AlphaZero 的核心思想:
使用神经网络评估局面; 使用策略输出指导搜索; 使用 MCTS/PUCT 进行选择; 通过大量训练形成棋力; 由社区共同开发、训练和改进。
与 Stockfish 相比,Lc0 通常更依赖 GPU,因为较大的神经网络评估更适合在 GPU 上并行计算。你可以像使用 Stockfish 一样,把 Lc0 接入常见国际象棋 GUI 中,然后让它分析棋局或进行引擎对局。
在 Lichess 上和 Leela 对弈
棋友们也可以直接在 Lichess 上挑战 Leela 相关机器人。
Lichess 上有一个全强度机器人账号:@LeelaChess
https://lichess.org/@/LeelaChess
它接受 UltraBullet、Bullet、Blitz 和 Rapid 等时间控制的挑战。

当然,完整强度的 Leela 对普通棋友来说可能太强了。
所以可以挑战一些“让子”版本:@LeelaKnightOdds(Leela少马)、@LeelaRookOdds(Leela少车)、@LeelaQueenOdds(Leela少后)、@LeelaQueenForKnight(Leela少后、人类少马)等等

此外,还可以在@LeelaPieceOdds选择包含后、马、象、车等的不同让子组合

夜雨聆风