AlphaZero四小时超过Stockfish,三棋共用同一套自对弈算法

Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm

David Silver, Thomas Hubert, Julian Schrittwieser, Ioannis Antonoglou, Matthew Lai, Arthur Guez, Marc Lanctot, Laurent Sifre, Dharshan Kumaran, Thore Graepel, Timothy Lillicrap, Karen Simonyan, Demis Hassabis

cs.AI, cs.LG

2017-12-06

DeepMind把AlphaGo Zero收成一套通用算法AlphaZero,只给规则、从随机初始化自对弈。国际象棋4小时超过Stockfish且100局零败,将棋不到2小时超过Elmo。

这篇在解决什么

计算机国际象棋研究了几十年,最强程序几乎都走同一条路:人类大师手搓评估特征,再配上高度特化的 alpha-beta 搜索。2016 年 TCEC 冠军 Stockfish 就是这个范式的顶点,开局库、残局库、静止搜索、空着裁剪、历史启发,每一层都嵌着棋规知识。将棋更难,棋盘更大,吃掉的子可以打入任意空格,当时 CSA 冠军 Elmo 才刚开始稳定赢人类。

这些引擎换一个游戏就要重写。DeepMind 前一年的 AlphaGo Zero 已经在围棋上证明:深度网络加自对弈,不读人类棋谱也能超人类。但围棋规则平移不变、旋转对称,天然贴合卷积网络;国际象棋和将棋规则随位置变化、有远程子力、还有和棋。真正要回答的是,那套从零学的算法能不能在几乎不改超参的前提下,覆盖这三类完全不同的完全信息博弈。

方法

AlphaZero 把棋盘状态送进一个深度网络 \(f\theta(s)\),同时吐出两个头:走子先验 \(\mathbf{p}\),和局面价值 \(v\)。\(v\) 估的是期望结果,输记 -1、和记 0、赢记 +1,不再假设只有胜负。搜索用通用的蒙特卡洛树搜索(MCTS):每步从根走到叶,按访问少、先验高、价值高来选边,用网络评估叶子再回传,最后把根节点的访问分布 \(\boldsymbol{\pi}\) 当作更强的策略标签。

训练是纯自对弈。双方每步都跑 MCTS,终局 \(z\) 出来后,损失是价值均方误差加策略交叉熵,外加 L2 正则:

\[l = (z-v)^2 - \boldsymbol{\pi}^\top\log\mathbf{p} + c\|\theta\|^2\]

相对 AlphaGo Zero,四处改动是为了去掉围棋特化。价值目标改成期望结果,才能处理和棋。不做 8 种对称增广,MCTS 里也不随机旋转棋盘。不再等一轮打完、胜率超过 55% 才换「最强玩家」,单一网络持续更新,自对弈永远用最新参数。三款游戏共用同一套超参,唯一例外是根节点 Dirichlet 噪声,按典型合法走子数缩放:象棋 0.3、将棋 0.15、围棋 0.03。

输入只编码规则允许的信息。象棋是 \(8\times8\times119\) 的平面栈(8 步历史,加上王车易位、重复局面、50 步规则),策略头 \(8\times8\times73\),对应 4672 个候选走法。将棋输入 362 个平面,策略 \(9\times9\times139\)。围棋沿用 AlphaGo Zero 的 \(19\times19+1\)。非法走子概率置零再归一。训练时每次 MCTS 固定 800 次模拟。

结果

算力不小:5000 块第一代 TPU 生成自对弈,64 块第二代 TPU 训练网络。每款游戏独立训 70 万步,batch 4096。象棋 9 小时打了 4400 万局,将棋 12 小时 2400 万局,围棋 34 小时 2100 万局。

对照时间点按 1 秒/步的 Elo 曲线来读。象棋 4 小时(30 万步)超过 Stockfish 8,将棋不到 2 小时(11 万步)超过 Elmo,围棋 8 小时(16.5 万步)超过 AlphaGo Lee。注脚写得很清楚:AlphaGo Master 和 Zero 后来又训了大约 100 倍时长,这里没有复现那一档。

正式对抗是 1 分钟/步、各 100 局。AlphaZero 和旧版 AlphaGo Zero 用 1 台机器 4 块 TPU;Stockfish 8 与 Elmo 开 64 线程、1GB 哈希。

对阵
AlphaZero 执白 vs Stockfish25250
AlphaZero 执黑 vs Stockfish3470
AlphaZero 执白 vs Elmo4325
AlphaZero 执黑 vs Elmo4703
AlphaZero 执白 vs AG0(3 天版)3119
AlphaZero 执黑 vs AG0(3 天版)2921

合计对 Stockfish 28 胜 72 和 0 负;对 Elmo 90 胜 2 和 8 负;对训了 3 天的 AlphaGo Zero 60 胜 40 负。

搜索量差三个数量级。象棋每秒只看 8 万个局面,Stockfish 看 7000 万;将棋 4 万对 Elmo 的 3500 万。MCTS 用网络把搜索压到少数有希望的变化上。思考时间拉长时,Elo 升得比两个 alpha-beta 引擎更陡。

12 个最常见人类开局(365chess 上出现超过 10 万次的那些)在自对弈里都被独立发现。从这些开局起手再打 Stockfish,执白合计 242 胜 353 和 5 负(40.3% / 58.8% / 0.8%),执黑 48 胜 533 和 19 负(8.0% / 88.8% / 3.2%)。

为什么重要

这是 2017 年把「通用自对弈 + 深度网络 + MCTS」从围棋搬到经典博弈的那篇预印本。后来 MuZero、棋类引擎的 NNUE、几乎所有现代棋类 AI,都沿着这条路走。

对要做规划的人,可复述的机制很短:网络给先验和价值,MCTS 把这俩变成更好的 \(\boldsymbol{\pi}\),再用 \(\boldsymbol{\pi}\) 和终局 \(z\) 训练网络。不需要人类评估函数,也不需要 alpha-beta 那一抽屉启发式。

它不是免费午餐。5000 块 TPU 的自对弈规模,绝大多数实验室复现不了。「除了规则什么都不给」这句话要按 Methods 的清单读:棋盘网格结构、合法走子、终局判定、典型游戏长度截断,这些都喂进去了。换到规则难编码的环境,这套还要再改。

局限与存疑

论文自己写了三点。传统象棋程序那套增强一样都没用,其中一部分很可能还能再抬 Elo;AlphaGo Zero 的完整训练时长这里没有对齐;高水平象棋和棋多,Elo 尺度会被压扁。

对局设置后来争议很大。Stockfish 8 只给 1GB 哈希,在 2017 年的引擎对抗里偏小;开局库和残局库怎么处理,正文没有写清;64 线程 CPU 对 4 TPU 也不是同一类硬件。100 局能分出强弱,但分不出碾压幅度对应的精确 Elo。后续 Science 正式版加了更多对局和时间控制,数字和这篇预印本不完全一样。

价值头用均方误差拟合 \(\{-1,0,+1\}\),在和棋率极高的象棋残局里,信号会稀。论文没有单独报告残局精度。

术语

原文与代码

社区讨论

相关论文

全部论文解读