Skip to content

AlphaGo 与蒙特卡洛树搜索

本页速览 围棋为何"不可搜索";MCTS 四步与 UCB1;策略网络+价值网络如何"用学习置换算力";AlphaZero 的纯自对弈与通用性;搜索与学习的互补原理。

AlphaGo 与蒙特卡洛树搜索 ​

一句话定位:这一页讲清楚 AlphaGo 是怎么把"不可搜索"的围棋攻下来的——MCTS 的四步结构、UCB1 公式、策略网络+价值网络如何"用学习置换算力",以及 AlphaZero/MuZero 把"搜索×学习"推到极致的路径。它是强化学习演进简史里"深度 RL 三巨头"的第二个,也是理解基于模型的 RL的最佳入口。

一、围棋为什么"不可搜索" ​

1. 两个数字 ​

先看国际象棋与围棋的数量级差距:

维度国际象棋围棋
棋盘8×8=64 格19×19=361 格
平均分支因子(每步合法选择数)约 35约 250
状态空间(可达局面数)约 10^43约 10^170
棋局长度约 80 手约 200 手以上
搜索树总规模(粗略)35^80 ≈ 10^123250^200 ≈ 10^478

两个结论:

  • 穷举不行:10^170 远大于宇宙原子数(约 10^80),"把所有局面都算一遍"在物理上不可能。
  • 传统博弈搜索的杀手锏被废掉:国际象棋的 Deep Blue 依赖的是高效的静态评估函数 + 深度 α-β 剪枝搜索。但围棋的评估函数极难写好——"这一局部谁占优"没有可靠的局部判据;α-β 的剪枝又依赖"至少有一个走法能快速分出胜负"的棋盘结构,而围棋的局面评估是全局的、模糊的。

1997 年 Deep Blue 击败卡斯帕罗夫后,"下一个 AI 里程碑"指向围棋,但主流判断是"还要等 10 年"。AlphaGo 之所以在 2016 年就做到了,靠的不是更强的暴力搜索,而是用神经网络给搜索"指路"——这正是本页的主题。

2. 一个可感知的困难:劫与全局 ​

围棋的难度还体现在"局部正确 ≠ 全局正确":一个局部看似吃亏的交换可能换来全局的先手;打劫(ko)涉及全盘劫材的清算。搜索必须看到非常深远的全局后果,而评估函数无法给出中间局面的可靠分数——这就把"评估"和"搜索"两个环节同时卡死了。

二、传统 MCTS:四步结构与 UCB1 ​

1. 蒙特卡洛树搜索的四步 ​

AlphaGo 之前,围棋最强的程序(2015 年左右)基于 MCTS(Monte Carlo Tree Search)。MCTS 的思路是"把随机模拟当评估函数":与其写出静态评估函数,不如从当前局面随机下到终局,用胜负结果做评估。它每轮迭代做四步:

text
                选择(Selection)        扩展(Expansion)      模拟(Simulation)     回传(Backpropagation)
  ┌────────┐    沿树自上而下选         在叶节点生成           从新节点随机下         把模拟结果沿路径
  │ 根节点 │ ──► 最有前景的子节点 ──► 新子节点 ──────────► 到终局(rollout)──► 回传更新每个节点
  └────────┘     (UCB1 策略)           (添加一步棋)         (得到胜负 z)         的均值与访问数
  • 选择:从根节点开始,用 UCB1 公式在各层挑选"值得探索"的子节点,一直走到叶节点。
  • 扩展:在叶节点加入一个合法的落子作为新子节点。
  • 模拟:从新子节点出发,用快速随机策略(rollout policy)快速下到终局,得到胜负 z ∈ {+1, −1}。
  • 回传:把 z 沿访问路径回传,更新每个被访问节点的平均胜率与访问次数。

2. UCB1:乐观面对不确定性 ​

选择阶段的核心是 UCB1(Auer et al., 2002)——多臂老虎机问题的"乐观面对不确定性"原则的树形版本(通常写作 UCT,Upper Confidence bounds applied to Trees,Kocsis & Szepesvári, 2006):

text
UCB1(s, a) = Q(s, a) + c · √( ln N(s) / N(s, a) )

Q(s,a)  = 节点 s 下走 a 后的平均回报(胜率)
N(s)    = 父节点 s 的总访问次数
N(s,a)  = 子节点 (s,a) 的访问次数
c       = 探索常数(AlphaGo 用 c≈5)

直觉:第一项是利用(选胜率高的),第二项是探索(访问少的子节点 UCB 值大)。当 N(s,a) 很小时,第二项很大,鼓励"多试试没怎么走过的路";随着访问增多,第二项衰减,让选择收敛到高胜率动作。UCB1 在概念上完整属于探索与利用的框架,它与多臂老虎机的数学联系见多臂老虎机页。

3. 2015 年前:围棋程序的苦战 ​

在 AlphaGo 之前,围棋程序的最高水平有一个清晰的坐标系:

时间程序/事件水平
1997Deep Blue 击败卡斯帕罗夫围棋 AI 连业余水平都谈不上
2008 起Zen、Fuego 等用 MCTS 的围棋程序约业余 1–3 段
2015–2016Zen、Crazy Stone在让四子的条件下勉强能赢职业棋手(依田纪基九段)
2016.3AlphaGo 首次正式对局分先 4:1 击败世界冠军李世石

“让四子”意味着人类职业棋手先摆四颗子、几乎锁死胜负。从“让四子都不稳”到“分先击败世界冠军”,AlphaGo 把围棋 AI 的水平抬升了整整一个段位级的差距——这是纯算力 MCTS 无法跨越的鸿沟,只有“搜索×学习”能做到。

WARNING

传统 MCTS 的瓶颈在模拟步:随机 rollout 到终局要下完一整盘棋(数百手),评估噪声巨大,且随机走子完全无视围棋的局部死活。AlphaGo 之前最强程序的围棋水平约为业余 3–5 段,远不够挑战职业棋手。要让 MCTS 变强,必须给它的"选择"和"模拟"装上大脑。

三、AlphaGo:用学习置换算力 ​

AlphaGo(Silver et al., 2016, Nature)把"学习"注入 MCTS 的两个环节:用策略网络教选择步"该往哪想",用价值网络替代随机 rollout 的模拟步。它分四步训练。

1. 三段训练流水线 ​

text
第 1 段  SL 策略网络 p_σ     第 2 段  RL 策略网络 p_ρ    第 3 段  价值网络 v_θ
┌─────────────────────┐   ┌─────────────────────┐   ┌─────────────────────┐
│ 监督学习:            │   │ 策略梯度强化:       │   │ 回归学习胜率:        │
│ 输入=19×19×48特征平面 │   │ 以 SL 网络为初始     │   │ 用 RL 网络自对弈产生  │
│ 输出=361 个落子概率    │──►│ 与自身/历史版本对弈   │──►│ 3000 万局面,回归     │
│ 数据=KGS 约 3000 万局 │   │ 用 RL 信号微调        │   │ 输入局面 → 输出胜率    │
│ 面(人类棋谱)        │   │ (胜过 SL 网络 ~80%)  │   │ (取代 rollout)      │
└─────────────────────┘   └─────────────────────┘   └─────────────────────┘
网络学什么数据用途
SL 策略网络 p_σP(落子位置 | 局面),13 层 CNN,约 2800 万参数人类 KGS 棋谱约 3000 万局面MCTS 选择步的先验,模仿人类"第一感"
快走子 rollout 策略 p_π极简的线性+特征策略,约 24 万参数,快 1000 倍人类棋谱 + 模式库训练中生成局面、辅助模拟
RL 策略网络 p_ρ从 p_σ 出发,用策略梯度与自对弈强化自对弈(含历史版本池)训练价值网络、最终系统的主力先验
价值网络 v_θV(局面) ≈ 当前局面最终胜率RL 网络自对弈的 3000 万局面替代随机 rollout,给搜索一个"好评估"

TIP

AlphaGo 的每个网络都不是凭空发明的:SL 网络是监督学习(用人类棋谱);RL 网络是策略梯度方法的直接应用;价值网络回归的就是价值学习里的状态价值 V。AlphaGo 的真正创新是"怎么把这些网络接进搜索",而不是网络本身。

2. 推理时的搜索:PUCT ​

推理时,AlphaGo 的 MCTS 每轮模拟做三件事:

  1. 选择:不再用纯 UCB1,而是用策略网络先验引导的 PUCT:
text
a* = argmax_a [ Q(s,a) + c · P(s,a) · √N(s)/(1+N(s,a)) ]

P(s,a) = 策略网络给出的先验概率
(策略网络告诉搜索:"人类/我学会的棋感里,这些位置值得想")
  1. 扩展:在叶节点把局面喂给策略网络,得到 361 个落子先验,建立新子节点。
  2. 评估:到达叶节点后,不再随机 rollout 到终局,而是用价值网络直接打分,并与 rollout 结果混合:
text
V_mix = (1 − λ)·v_θ(s) + λ·z_rollout      (AlphaGo 论文中 λ≈0.5)

这一混合理由:价值网络快但可能有系统性偏差;rollout 慢但无偏(打到终局是真的)。两者互补,训练早期尤其有用。最终搜索通过大量模拟收敛到"带先验的加权多数票",得出落子。

3. 算力账:学习到底省了什么 ​

环节纯搜索(Deep Blue 思路)AlphaGo 思路
评估函数手工编写,难以覆盖围棋价值网络从数据中学,泛化到未见局面
模拟深度每步都下到终局,代价高价值网络一步打分,模拟变快
搜索宽度靠剪枝,靠算力策略网络先验把注意力集中在少数候选点
本质算力换深度学习换算力:把"会下棋"编译进网络参数

2016 年 3 月,AlphaGo 在首尔五番棋以 4:1 击败世界冠军李世石(Lee Sedol)。2017 年 5 月,AlphaGo Master 在乌镇 3:0 击败柯洁。两代系统用的分布式算力不同,但方法论一脉相承。

4. 输入表示:48 个特征平面 ​

围棋棋盘是 19×19=361 个点,AlphaGo 的每个网络输入是 48 个 19×19 的特征平面,把“局面”编码成网络能吃的张量。特征大致分七类:

特征类别内容作用
棋子颜色黑子/白子/空点的二元平面棋盘基本状态
气每个棋串的气数(1–4 及以上)死活与紧气的关键
劫劫争位置标记规则相关
合法着法当前是否可落子防止非法输出
历史最近 8 步的局面快照捕捉动态、规则(劫、自补)
常量平面全 0 / 全 1、当前执棋方让网络知道“轮到谁”

为什么这重要:48 个特征平面是“围棋领域知识的最小编码”——它没有告诉网络策略,只给了网络“看懂棋盘”所需的规则与历史。SL 策略网络用这 48 个平面学出人类棋感,价值网络用同一表示学胜率回归。这个“表示工程”思想对任何领域都适用:把规则的必须信息喂进去,把策略留给学习。

5. 分布式算力配置 ​

AlphaGo 有两个版本,算力配置差异很大:

版本算力训练结果
AlphaGo 分布式版(2016)约 1202 CPU + 176 GPU多机并行 MCTS击败李世石
AlphaGo Zero(2017)64 台 TPU 自对弈 + 4 台 TPU 训练约 490 万局自对弈(72 小时)击败 AlphaGo Master(柯洁版)
AlphaZero(2017 底)同 Zero 架构,多棋种围棋约 70 万局(约 9 小时)超越 Zero击败 Stockfish/Elmo

注意:Zero 用更少的训练数据(70 万局)超越了用人类棋谱+3000 万局面训练的 AlphaGo。这再次说明“搜索×学习”的自举能力:搜索出的高质量对局,比人类历史棋谱更“纯”地表达了下棋规律。

四、AlphaZero:去掉人类棋谱 ​

AlphaGo 仍依赖人类棋谱做 SL 预训练。AlphaZero(Silver et al., 2017)证明这一依赖可以去掉:

text
AlphaZero 的单网络(f_θ:局面 → (落子概率 p, 价值 v))

自对弈循环:
  当前网络自己与自己下(每步用 MCTS+自身做搜索)
  ──► 收集局面 (s, 搜索概率 π_t, 最终胜负 z)
  ──► 目标:策略 p_θ 逼近 π_t(监督自对弈结果)
  ──►       价值 v_θ 逼近 z
  ──► 更新 θ,重复

关键点:

  • 无人类棋谱、无人类规则之外的知识,仅给规则与胜负。
  • 策略目标不是"模仿人类",而是模仿自己搜索的结果——搜索教网络,网络加速搜索,两者螺旋上升。这就是"搜索×学习"闭环最纯粹的形式。
  • 单个网络同时输出策略与价值,共享特征提取层。
  • AlphaZero 同一套代码与超参同时学会国际象棋、将棋、围棋,并在 24 小时内击败当时的顶级程序 Stockfish 与 Elmo。围棋上约 9 小时/70 万局自对弈就超越了此前所有版本。

4. AlphaZero 训练循环:最小伪代码 ​

python
# AlphaZero 训练循环(伪代码,含中文注释)
net = init_network()                      # 单网络:局面 → (策略 p, 价值 v)
replay = ReplayBuffer(capacity=500_000)  # 自对弈局面缓存
best = net                               # 对手用"历史最佳版本"(保持多样性)

for iteration in range(2000):
    # 自对弈:用带 MCTS 的当前网络生成对局
    for game in range(parallel_games):
        state = env.reset()
        while not env.done(state):
            π = MCTS_search(state, net)      # 用网络引导的搜索得到动作分布
            state, z = env.step(π)          # 按 π 采样落子
            replay.add(state, π)            # 存 (局面, 搜索分布)
    # 训练:用 (局面 → 搜索分布 π, 最终胜负 z) 监督网络
    for _ in range(train_steps):
        s, π_target, z = replay.sample(128)
        p, v = net(s)
        loss = CE_loss(p, π_target) + (v - z) ** 2   # 策略+价值联合损失
        gradient_update(net, loss)
    # 定期用"最新网络 vs 历史最佳"对弈,胜者成为新的 best
    if evaluate(net, best) > 0.55:
        best = net

三个容易读漏的细节:

  1. 搜索分布 π 是"软标签":网络学的是"MCTS 搜索认为该怎么走",而不是胜负本身。这保证了"学习紧贴搜索"。
  2. 对手是历史最佳而非最新:最新网络容易"自我固化"(只会在一种风格里打转);和历史版本对弈保持了探索多样性——这是 AlphaZero 对 AlphaGo Zero 的关键改进之一。
  3. 联合损失:策略交叉熵 + 价值 MSE 一起反传,共享特征提取层——这是"一个网络干两件事"的工程实现。

INFO

AlphaGo Zero(2017 年 10 月 Nature)先用 19×19 版本证明了"从零开始",AlphaZero(2017 年 12 月 arXiv)把它推广到多棋种通用。两者区别是:Zero 用随机开局增强多样性,AlphaZero 用历史版本池做对手(与 AlphaGo 的 RL 网络一致)。本页把它们统称"AlphaZero 家族"。

五、MuZero:把环境也学出来 ​

AlphaZero 的前提是"知道全部规则"(转移和奖励都是确定的、免费的)。MuZero(Schrittwieser et al., 2020, Nature)把这个前提也去掉:

text
AlphaZero:  真实环境(规则)→ 搜索 → 行动
MuZero:     学出来的隐表示 s_t ──► 动态模型 g(s,a)→s'  ──► 预测 f→(p,v)
            在"学会的世界模型"里搜索,不接触真实环境
  • MuZero 只在隐空间学习"动态"(下一隐状态)与"预测"(策略与价值),在学到的世界模型里跑 MCTS。
  • 它用同一套方法玩 Atari、围棋、国际象棋、将棋——在 Atari 上达到当时 SOTA,在围棋上达到 AlphaZero 水平。
  • 它的意义是**"搜索×学习"对"环境未知"任务的推广**:只要能从数据中学出一个够好的模型,就能在模型里搜索。这正是基于模型的 RL页的主题,也是机器人、自动驾驶等领域对 MuZero 兴趣的来源。

2. MuZero 的工程细节与后续变体 ​

MuZero 的工程实现有几个值得细看的点:

组件学什么为什么必要
表示函数 h(s_t)真实观测 → 隐状态隐空间比原始观测更可预测
动态函数 g(s, a)隐状态 → 下一隐状态 + 即时奖励学出来的"规则"
预测函数 f(s)隐状态 → (策略 p, 价值 v)供 MCTS 使用的先验与评估
MCTS 在隐空间运行用 g 展开、用 f 评估不接触真实环境

关键设计:MuZero 的奖励也在隐空间里学出来(g 输出即时奖励预测),并在 MCTS 中累加——所以它连"奖励函数"都不需要知道,只需要最终的分数信号(如游戏得分)。这让它能应用到"规则未知"的场景。

后续变体(前沿脉络):

  • Sample-Efficient MuZero:用更少交互学出同水平模型,主打数据效率;
  • MuZero Unplugged:把 MuZero 扩展到纯离线数据(离线 RL 与搜索的结合);
  • AlphaZero 的简化版(如 EfficientZero):加入自监督一致性损失,进一步压训练量。

这些工作统一指向一个判断:"学环境 + 在环境里搜索"是 2020 年代最有希望突破数据效率瓶颈的路线之一。追踪其最新进展见前沿进展页。

六、"搜索×学习"的一般原理 ​

把 AlphaGo 家族抽象出来,可以得到三个可迁移的互补原理:

原理具体表现工程含义
学习加速搜索策略先验把搜索聚焦到少数候选,价值网络替代昂贵模拟凡是"评估贵/候选多"的决策问题,先学一个引导器
搜索纠正学习搜索胜出者的分布被用作训练目标(AlphaZero 的 π_t)学习器不必模仿人类,可模仿"更强的自身"
完美模型是放大器规则精确 + 模拟便宜时,搜索几乎无上限有仿真器的问题里,RL+搜索的上限远高于纯学习

适用边界也很清晰:

  • 需要精确可回放的模型(规则、仿真器)。现实中大多数 RL 任务的模型有误差,想象偏差会放大错误(见基于模型的 RL的"模型误差陷阱")。
  • 需要可枚举的动作。AlphaGo 的动作就是 361 个交叉点;连续动作空间(机器人关节、自动驾驶转向)没有天然的"树上分支",MCTS 需要额外的连续化处理。

WARNING

不要被 AlphaGo 的"神迹"误导成"RL 已解决决策问题"。AlphaGo 的成功建立在三个得天独厚的条件上:完美的规则模型、毫秒级的模拟器、极其密集的胜负信号。真实世界(机器人、交易、医疗)三者往往一个都不占。要理解这种落差,对比机器人控制与 Sim2Real和金融交易中的 RL。

七、把 MCTS 用在自己的任务:工程决策清单 ​

如果你想把“搜索×学习”用到自己的问题(调度、游戏 AI、规划),一张决策清单帮你判断值不值:

决策点检查问题若答案是“是”
模型环境规则/仿真器是否精确、可重置才谈得上在“树”里搜索
动作动作是否可枚举(离散/可离散化)否则 MCTS 需要连续化扩展
模拟评估一次动作的代价是否可控太贵就学价值网络替代模拟
先验是否已有“哪个动作更可能好”的信号有就训练策略网络做先验
数据是否能量产自对弈/仿真样本否则“搜索×学习”缺燃料

两个最常见的失败模式:

  1. 动作不可枚举硬上 MCTS:连续控制直接用树搜索需要处理无限分支,AlphaGo 的 UCB 公式直接失效——这正是机器人/自动驾驶很少用 MCTS 的原因之一(见机器人控制与 Sim2Real)。
  2. 模型误差被搜索放大:搜索“看 1000 步”的前提是每一步的转移都正确;模型有一点偏差,搜索越深错得越离谱——这就是基于模型的 RL页“想象偏差”陷阱的 MCTS 形态。

给工程师的三句话 ​

  • 有精确模拟器 + 离散动作 + 可定义胜负,MCTS×学习是无敌组合(游戏、数学证明、形式化规划)。
  • 模型不准时,搜索的深度是负债不是资产——宁可用短视的策略学,也不要用幻觉里的深搜。
  • UCB1 的先验来自哪里决定了上限:AlphaGo 用策略网络,工业调度可以用任意打分器,关键是“先验要明显好于均匀随机”。

八、启示与局限 ​

1. 启示 ​

  • 表示工程 > 暴力算力:AlphaGo 没有发明新的搜索算法,而是把"知识"放进了网络的先验与评估里,让既有搜索算法从"下盲棋"变成"有棋感的搜索"。到 2024 年 AlphaProof/AlphaGeometry 用"符号引擎+RL"解决数学题时,仍是同一范式的延伸(见科研与生物医药中的 RL)。
  • 自对弈是数据引擎:AlphaZero 证明了"无人类数据的自我对弈"能产生超越人类的知识。这是 RL 相对监督学习最独特的优势——交互产生数据。
  • 评估"创造"了知识:价值网络把一个无法直接计算的目标(最终胜负)压缩成了可求导的函数,这是深度 RL 的通用引擎。

2. 局限 ​

  • 无法直接迁移到不完美信息博弈:AlphaGo 假设双方完全可见。扑克、隐藏信息游戏需要不同的方法(CFR 家族),这也解释多智能体强化学习页里"非平稳"的困难。
  • 一次只解决一个任务:AlphaZero 通用的是"框架",不是"一个模型玩所有游戏"(MuZero 也只是在单一游戏上训练后测试)。
  • 学习代价高:AlphaGo 分布式系统使用上千 CPU+GPU;AlphaGo Zero 用 64 台 TPU 自对弈。普通团队复现成本极高。

延伸阅读 ​

参考资料 ​

  • Silver, D., et al. (2016). Mastering the game of Go with deep neural networks and tree search. Nature, 529(7587), 484–489.
  • Silver, D., et al. (2017). Mastering the game of Go without human knowledge. Nature, 550(7676), 354–359.
  • Silver, D., et al. (2018). Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm. arXiv:1712.01815.(AlphaZero)
  • Schrittwieser, J., et al. (2020). Mastering Atari, Go, Chess and Shogi by Planning with a Learned Model. Nature, 588(7839), 604–609.(MuZero;arXiv:1911.08265)
  • Kocsis, L., & Szepesvári, C. (2006). Bandit Based Monte-Carlo Planning. ECML 2006.(UCT)
  • Auer, P., Cesa-Bianchi, N., & Fischer, P. (2002). Finite-time Analysis of the Multiarmed Bandit Problem. Machine Learning, 47, 235–256.(UCB1)
  • Browne, C., et al. (2012). A Survey of Monte Carlo Tree Search Methods. IEEE Transactions on Computational Intelligence and AI in Games, 4(1), 1–43.
  • Sutton, R. S., & Barto, A. G. (2018). Reinforcement Learning: An Introduction (2nd ed.). MIT Press.(MCTS 与自对弈见第 16 章与相关章节)