Skip to content

AlphaGo:策略网络、价值网络与树搜索

WARNING

🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。

上一章用神经网络逼近 Qπ。围棋的动作空间约 250 手、局面约 10170,单靠一次前向传播选子仍然太莽。AlphaGo 的答案是:网络负责「感觉」,蒙特卡洛树搜索(MCTS)负责「想清楚」。 后面的 PPO / GRPO / RLHF 都在优化「感觉」;这一章先把「感觉 + 搜索」讲透。

前置:深度强化学习 的策略梯度与 Actor-Critic。

AlphaGo 三件套:监督学习策略、自我对弈强化学习、价值网络,再交给 MCTS

图解说明:三条网各管一件事——模仿、会赢、估胜率;对局时真正下棋的是右边的 MCTS。


一、为什么围棋不能只靠一张网

Atari 上 DQN 可以「看像素 → 选键」。围棋不行,原因很具体:

  1. 分支因子大:每步合法落子经常超过 200,穷举几步就爆炸。
  2. 奖励极稀疏:终局才知道输赢,r{+1,1},中间 200 手几乎没有即时反馈。
  3. 「看起来好」≠「算完真好」:人类也是先凭棋感缩小候选,再在局部算清。

所以 AlphaGo 把问题拆成两层:

谁来做输出
棋感深度网络先验 π(as)、局面价值 v(s)
计算MCTS访问次数 N(s,a),对局时按访问选子

网络提出候选并评估叶子;树在这张「缩小后的地图」上把计算预算砸在关键变化上。


二、2016 年那一版:三条网,再加搜索

Silver 等人发表在 Nature 的 AlphaGo(对阵李世石的那套)不是一张网打天下,而是三条网 + 快速走子 + MCTS

2.1 监督学习策略 pσ(SL policy)

用人类对局 (s,a) 做分类:

Δσσlogpσ(as)

它学的是「职业棋手会下哪」。这不是最优策略,但足够给 MCTS 一个靠谱的先验,让搜索别在明显的废棋上浪费模拟。

2.2 强化学习策略 pρ(RL policy)

pσ 出发,用自我对弈做策略梯度(和 s20 的 REINFORCE 是同一类东西):

ρJE[ρlogpρ(atst)G]

G 是终局胜负。对手是 pρ 自己的旧拷贝,避免策略对着一个固定靶子过拟合。产出的 pρpσ 更会赢,但仍是「一步棋的分布」,不是完整变化图。

2.3 价值网络 vθ

在自我对弈产生的局面上回归胜率:

vθ(s)E[zs]

z 是以该局面为起点、双方都用强策略下完的结果。价值网让 MCTS 不必每次都滚到终局——叶子上一次前向,就能得到「这盘大概率谁赢」。

原始 AlphaGo 的叶子评估还混了一点快速走子策略 pπ 的随机滚出,和 vθ 加权。直觉:网络看全局形势,滚出抓战术过招。

自我对弈产生数据:旧策略当对手,终局胜负回标每一手

图解说明:对手是自己的旧拷贝,终局 z 沿整盘回传,和 s20 的 REINFORCE 同一类梯度。


三、MCTS:把计算预算花在刀刃上

对局时真正下棋的不是「网络 argmax」,而是一棵从当前局面长出来的搜索树。每条边存:

  • N(s,a):访问次数
  • W(s,a):累计价值
  • Q(s,a)=W/N:平均价值
  • P(s,a):策略网给出的先验

一次模拟四步,循环几千次:

选择 Selection     从根沿树走,直到叶子
扩展 Expansion     用策略网展开合法手,写入 P
评估 Evaluation    价值网(+ 可选滚出)给叶子打分 v
回传 Backup        把 v 加到路径上每一条边的 W、N

3.1 怎么选边:PUCT

AlphaGo 用的选择规则是 PUCT(PUCB 的变体):

at=argmaxa(Q(s,a)+cpuctP(s,a)bN(s,b)1+N(s,a))

两项分工非常清楚:

  • Q利用——目前算下来赢面高的手。
  • 后一项:探索——先验 P 大、但还没被访问够的手,会被加成抬起来。

访问越多,Q 越可信,探索项衰减。这就是「先听棋感,再把算力堆到真正有争议的分叉」。

数字例(demo 井字棋,均匀先验 P=1/9c=1.5)。 根访问 N=8,某未走格子 N=0Q=0:探索项 1.5198/10.47。已走 4 次且 Q=0.2 的格:探索项 1.5198/50.094,PUCT 0.29。未访问格分数更高——必须先探。demo.pyC_PUCT=1.5,叶子随机滚出,无神经网络。

逐步推导:PUCT 与四步 MCTS(点击展开)

选择:从根沿 argmaxaPUCT 走到未扩展叶子。扩展:加孩子,先验 P 来自策略网(Zero 里同一塔的 π 头)。评估:价值网 v 或随机滚出。回传:路径上 NN+1WW+vQ=W/N

PUCT 的 N/(1+N):分母让访问多的边探索项下降;分子随父节点总访问涨,鼓励在「这步很热」时仍去看冷门兄弟。对局取 argmaxN 而不是 argmaxQ,因为 N 是搜索算力的积分。Zero 损失 (zv)2+KL(πMCTSπθ):让网去模仿树改进过的分布,并用终局赢输当 v 的标签。

3.2 对局时怎么落子

搜索结束后,根节点按访问次数采样(训练自我对弈时还加温度;正式比赛常取 argmaxN)。访问次数比瞬时 Q 更稳:被反复算过的变化,才值得真下。

MCTS 一轮:选择、扩展、评估、回传

图解说明:四步循环几千次。对局按根上的 N 落子,而不是网络瞬时 argmax


四、AlphaGo Zero:烧掉人类棋谱

2017 年的 AlphaGo Zero 把三条网收成一张双头网:同一个塔,一头 π,一头 v。训练信号全部来自自我对弈:

  • MCTS 改进后的落子分布 πMCTS 当策略标签;
  • 终局 z 当价值标签。

损失函数可以写成:

=(zv)2πMCTSlogp+cθ2

要点不是「更炫的架构」,而是:搜索既是对局引擎,也是策略改进算子。 网络提出先验 → MCTS 把它炼成更好的 πMCTS → 网络再去拟合这个更好的分布。人类棋谱从必要变成可选。

后面 MuZero 又把「规则已知」放松成「隐式环境模型」,那是世界模型路径上的故事,见 MuZero


五、和后面几章怎么接

把 AlphaGo 拆成三块积木,后面可以原样拎走:

积木AlphaGo 里后面谁用
策略梯度 / 自我对弈pρPPO 把「更新别迈太大」做稳
价值基线vθ 降方差、给叶子打分PPO 的 Critic;GRPO 则用组内相对分数代替 Critic
搜索MCTS对局可以搜;LLM 对齐通常不搜整棵树,但「先验 + 评估」的分工还在

下一节不要跳去 RLHF。先把 PPO 的裁剪目标和 GAE 讲完,再看 DeepSeek 的 GRPO,最后才把这些优化器接到大模型上。

从棋感网络到对局:MCTS 把先验炼成访问次数

图解说明:Zero 用 πMCTS 当训练标签——搜索既是引擎,也是策略改进算子。


六、本节小结

概念一句话
棋感 vs 计算网络给先验和价值;MCTS 把有限模拟砸在关键变化上
SL 策略模仿人类落子,给搜索当靠谱的 P(s,a)
RL 策略自我对弈 + 策略梯度,学会赢而不是模仿
价值网络叶子上估计胜率,少做完整滚出
PUCTQ 负责利用,P/N 负责探索
AlphaGo Zero一张双头网,用 MCTS 改进后的 π 当训练目标

📥 Code

FileViewDownload
demo.pyOpenDownload
exercise.pyOpenDownload

参考

  1. Silver, D., et al. (2016). Mastering the game of Go with deep neural networks and tree search. Nature. [doi:10.1038/nature16961]
  2. Silver, D., et al. (2017). Mastering the game of Go without human knowledge. Nature. (AlphaGo Zero) [doi:10.1038/nature24270]
  3. Kocsis, L. & Szepesvári, C. (2006). Bandit based Monte-Carlo Planning. ECML. (UCT)
  4. Rosin, C. D. (2011). Multi-armed bandits with episode context. Annals of Mathematics and Artificial Intelligence. (PUCB / PUCT 先验)