核心结论(金字塔顶端)

AlphaZero 和 OpenAI Five(Dota 2)之所以能超越人类,不是因为发明了全新的强化学习算法,而是因为它们各自用极具针对性的工程与设计,攻克了强化学习在复杂博弈中的三道共性难关:

  1. 数据从哪来? —— 没有人类标注,如何生成训练数据
  2. 训练如何稳定? —— 自我对弈带来的"非平稳性"与"灾难性遗忘"
  3. 规模如何上去? —— 状态空间与计算量的指数级膨胀

接下来的每一节,我都会先讲清楚"遇到了什么问题",再讲"用了什么方法",最后给出可考证的事实证据(论文/官方博客数据)。

📌 本文所有关键数字与机制均引用自原始论文与官方资料,文末附完整引用清单。


第一道关:数据从哪来?—— 自我对弈(Self-Play)

问题:没有人类标注,强化学习如何获得训练信号?

监督学习需要 (输入, 标签) 的配对数据。但在棋类和复杂即时战略游戏里,“正确的下一步"根本不存在客观标准——下棋没有标准答案,只有"最终赢没赢"这个延迟信号。

更深的问题是:即使有人类高手的棋谱,那也只是人类的局部最优。AlphaZero 之前的 AlphaGo 先用人类棋谱做监督学习预训练,再自我对弈。但 DeepMind 想知道一个更激进的问题:

能否完全不依赖任何人类知识,从零开始(tabula rasa)学会超越人类的策略?

解决方案:自我对弈 + 神经网络引导搜索

AlphaZero 的解法——自我对弈(Self-Play)策略迭代:

  1. 用当前神经网络 + 蒙特卡洛树搜索(MCTS) 自己和自己下棋,生成对局数据
  2. 神经网络有两个输出头:策略头(下一步走法概率)和价值头(局面胜率评估)
  3. MCTS 不是暴力穷举,而是用网络的预测来有方向地搜索,把搜索结果作为"更优的标签"反哺训练网络
  4. 网络变强 → 自我对弈质量更高 → 训练数据更好 → 网络更强……形成正向循环

关键洞见是:MCTS 扮演的是"策略改进算子"的角色——网络的原始预测经过搜索被"打磨"得更准,这些打磨后的走法成为新一轮训练的目标 1

OpenAI Five 的解法——大规模自我对弈:

Dota 2 无法用 MCTS(状态空间太大、连续动作、信息不完全),所以 OpenAI Five 走了另一条路:纯粹的策略梯度方法 + 海量自我对弈。它不搜索、不规划,直接用神经网络输出动作,通过 PPO 算法在赢/输的最终反馈上学习。它的训练强度极其惊人:

OpenAI Five 每天自我对弈的量,相当于人类玩家 约 180 年的游戏时长;整个训练累计了约 45,000 年的 Dota 2 游戏经验 2 3

事实证据

  • AlphaZero:2017 年 12 月发表于 Science。论文显示,它从零开始,在国际象棋上仅训练 4 小时(约 30 万步)就超越了当时最强的国际象棋引擎 Stockfish;在将棋(Shogi)上仅 2 小时 4 5
  • AlphaZero 对 Stockfish 的 100 局评测赛:28 胜、72 和、0 负 6
  • OpenAI Five:官方页面明确说明训练使用 256 块 GPU + 128,000 个 CPU 核心,运行 PPO 算法,每 2 秒处理约 200 万帧 2 7

第二道关:训练如何稳定?—— 非平稳性与灾难性遗忘

问题:自己在和自己下棋,数据分布一直在变

这是自我对弈最隐蔽、也最致命的难题。在监督学习里,数据集是固定的;但在自我对弈中,生成数据的"对手”(也就是网络自身)每一轮都在变。这带来两个严重后果:

后果一:非平稳性(Non-stationarity)。 训练数据是由"当前版本的网络"生成的,网络一更新,数据分布立刻跟着变。用学术语言说,这是一个非平稳的数据流问题——网络在追一个不断移动的靶子 8

后果二:灾难性遗忘(Catastrophic Forgetting)。 神经网络用分布式表示存储知识,新学到的策略会覆盖旧的、甚至已经掌握得很好的策略。RL 智能体常常出现"昨天还会的招式,今天突然忘了"的现象 9

在 AlphaZero 早期自我对弈阶段,这个问题尤其明显:网络权重随机初始化时,早期对局质量极差,和棋率从约 17% 迅速攀升到约 35%——网络还没真正学会"如何赢" 10

解决方案

AlphaZero 的解法 —— 滑动窗口经验回放(Sliding-Window Replay Buffer):

这是稳定训练的关键设计。AlphaZero 保留最近约 50 万局(对应一个时间窗口)的自我对弈数据,每次训练时从整个窗口里均匀采样小批量,而不是只用最新数据 11 8

这个机制的作用是时间平滑:

  • 不只用最新数据 → 避免被当前版本的偏见主导
  • 丢弃过老的数据 → 避免用"远古弱版本"生成的数据污染训练

窗口大小是工程上的精妙权衡:太大则数据陈旧,太小则失去平滑效果、训练不稳。

OpenAI Five 的解法 —— 多重稳定化设计:

OpenAI Five 面对 Dota 2 这种长达 4.5 万年的训练量,稳定性的挑战更艰巨。它用了几个相互配合的手段:

  1. PPO 的截断代理目标(CPPO Surrogate Objective):PPO 不直接用原始策略梯度,而是用一个"代理损失",把重要性采样比率截断在一个范围内,等价于隐式约束策略更新的步长(类似信任域),保证大规模训练不会一步迈太大而崩溃 7

  2. 零和奖励塑形(Zero-Sum Reward Shaping):论文明确写道——

    “我们通过从每个英雄的奖励中减去敌方英雄奖励的平均值,来确保所有奖励都是零和的。” 7

    这一步极其关键。它防止两个智能体集体"刷分"——比如双方都在安全区域闷头发育,虽然每个英雄的金币/经验都在涨(局部奖励为正),但这对"赢下比赛"毫无帮助。零和化后,一方的收益必然是另一方的损失,优化目标被牢牢锁定在"击败对手"上。

  3. 稠密奖励替代稀疏信号:Dota 一局约 30~45 分钟,如果只在终局给一个 +1/-1 的奖励,信号太稀疏,信用分配(credit assignment)几乎不可能。OpenAI Five 设计了基于金币、经验、击杀、推塔、肉山等频繁事件的塑形奖励,给智能体密集反馈,大大加速学习 12

事实证据

  • AlphaZero 的滑动窗口回放缓冲区机制,在原始论文(Silver et al., 2017)及 ELF OpenGo 的复现研究中有详细描述 11 8
  • OpenAI Five 论文(arXiv:1912.06680,共 66 页)专门用章节论述了 PPO、奖励塑形与零和化的设计 7
  • 灾难性遗忘与持续学习的理论背景,见 IBM 与 NeurIPS 相关综述 9 13

第三道关:规模如何上去?—— 计算与复杂度的指数级挑战

问题:状态空间大得无法穷举

这是博弈 AI 最直观的挑战。先看几个让人头皮发麻的数字:

游戏状态空间规模(数量级)
国际象棋$\approx 10^{47}$
围棋$\approx 10^{170}$
Dota 2连续状态 + 连续动作 + 部分可观测,无法用计数衡量

传统的极小极大搜索(Minimax + Alpha-Beta 剪枝)在象棋上还能勉强应付,但围棋的分支因子太大,暴力搜索彻底失效。而 Dota 2 更甚——它没有"离散状态"可言:英雄位置是连续坐标、装备组合是组合爆炸、而且受"战争迷雾"影响,玩家看不到对手的全部信息(部分可观测)。

解决方案

AlphaZero 的解法 —— 用神经网络压缩价值判断,用 MCTS 做智能搜索:

AlphaZero 放弃了"穷举到底再评估"的传统思路,转而用神经网络直接评估局面——给一个棋盘,网络立刻输出"这个局面有多好"和"下一步该走哪"。MCTS 只做有限深度(典型为几十次模拟)的搜索,用网络的预测来引导搜索方向。

结果令人震撼:Stockfish 每秒搜索约 7000 万个局面,而 AlphaZero 每秒只搜索约 8 万个局面——但 AlphaZero 赢了。 它靠的不是算力碾压,而是"看一眼就知道好坏"的直觉式评估 14

OpenAI Five 的解法 —— 不搜索,直接靠规模和算力"暴力"学习:

Dota 2 的复杂性使得 MCTS 完全不可行(无法枚举、信息不完全)。OpenAI Five 的选择非常"简单粗暴":完全放弃搜索,纯靠自我对弈的规模堆出能力

它的训练配置是当时 RL 史上最大规模的工程实践之一 2 15:

  • 256 块 NVIDIA Tesla P100 GPU(部署在 Google Cloud)
  • 128,000 个 CPU 核心(用于跑大量并行的 Dota 实例)
  • 连续训练约 10 个月
  • 分布式系统 Rapid 框架,处理海量 rollout 的调度

但"暴力"并不等于"无脑" —— OpenAI Five 同时做了大量的简化来让问题变得可学,这些简化恰恰是工程智慧的体现:

  • 限制英雄池:只训练约 17 个英雄,每局从池中随机抽取 5 个组队。OpenAI 估算,支持全部英雄只需多约 20% 的训练量,但英雄间的技能/物品交互使组合爆炸,在时间线上不现实 7
  • 早期为镜像对局(mirror match):两边用相同阵容,简化对称性,后期才放开独立选秀。
  • “投降"机制:让明显劣势的对局提前结束,避免浪费算力在已无悬念的局面上(类似 curriculum 的效果,但并非手工设计课程)。

⚠️ 一个重要的诚实声明:OpenAI Five 论文明确指出,它并没有手工设计课程(curriculum)。原文写得很清楚——“这些机制并非为了构建完美课程而逐步引入”。难度梯度主要来自自我对弈的对手采样(智能体面对的是不同历史版本的自己),自然形成自适应难度曲线 7

事实证据

  • AlphaZero 推理仅需 1 台机器 + 4 块 TPU;对战时 Stockfish 使用 64 线程,但搜索量是 AlphaZero 的近千倍却落败 16
  • OpenAI Five 的硬件配置(256 GPU + 128k CPU)与 10 个月训练时长,见官方页面与论文 2 7
  • 关于英雄池限制与简化条件,论文 arXiv:1912.06680 有专节论述。

延伸:AlphaStar 把"部分可观测 + 多智能体"推到极致

如果想理解 RL 在复杂游戏上的"终极挑战”,DeepMind 的 AlphaStar(星际争霸 2)值得一提。它面对的难点比 Dota 更棘手 17 18:

  • 部分可观测:战争迷雾下看不到对手
  • 随机性:游戏内有随机元素
  • 多智能体:每方控制大量单位
  • 非传递性策略循环:石头剪刀布式的相克关系(策略 A 克 B,B 克 C,C 克 A),容易导致自我对弈陷入局部最优

AlphaStar 的核心创新是 “联盟训练”(League Training):不是单一的智能体自我对弈,而是维护一个多样化的智能体群体——主智能体、联盟利用者(league exploiters)、主利用者(main exploiters)三类,它们专门去"钻"彼此策略的漏洞,从而主动制造策略多样性,打破非传递性带来的循环死锁 17。最终 AlphaStar 达到了**大师级(Grandmaster)**水平,位列人类玩家前 0.2%。


金字塔收束:三个项目的横向对比

回到金字塔顶端,用一个表格把三道难关与破局之法浓缩起来:

维度AlphaZero(棋类)OpenAI Five(Dota 2)AlphaStar(星际 2)
数据来源自我对弈 + MCTS大规模纯自我对弈联盟自我对弈(多智能体群体)
核心算法MCTS + 策略价值网络PPO(策略梯度)离策略多智能体 RL
稳定性方案滑动窗口回放缓冲区PPO 截断 + 零和奖励塑形 + 稠密奖励联盟利用者打破循环
规模方案神经网络压缩评估,4 TPU 推理256 GPU + 128k CPU,10 个月大规模分布式 + 策略多样化
代表成果4 小时超越 Stockfish(28-0-72)TI8 击败职业选手大师级(前 0.2%)

总结与启示

强化学习在 AlphaZero 和 OpenAI Five 上的突破,本质上不是某个"神来之笔"的算法,而是一系列相互咬合的工程与算法决策:

  1. 没有数据? 用自我对弈自己造,把"延迟的胜负信号"变成可优化的目标。
  2. 训练不稳? 用回放缓冲区平滑非平稳性、用 PPO 约束更新步长、用零和奖励锁定真正的优化目标。
  3. 规模爆炸? 用神经网络压缩估值(AlphaZero)、用算力与简化工程(OpenAI Five)、用群体多样性对抗策略循环(AlphaStar)。

这些经验早已走出游戏,渗透到机器人控制、推荐系统、大模型对齐(RLHF)等领域。理解了它们如何"撞墙"又如何"破局",你也就握住了现代强化学习的核心脉络。

下一篇,我会继续写策略梯度与 PPO 的细节,把 OpenAI Five 背后那个"截断代理目标"讲透。

Happy learning! 🚀


参考文献与引用


  1. Surag Nair, A Simple AlphaZero Tutorial, https://suragnair.github.io/posts/alphazero.html ↩︎

  2. OpenAI, OpenAI Five, https://openai.com/index/openai-five/ ↩︎ ↩︎ ↩︎ ↩︎

  3. Wikipedia, OpenAI Five, https://en.wikipedia.org/wiki/OpenAI_Five ↩︎

  4. Silver, D. et al., A general reinforcement learning algorithm that masters chess, shogi, and Go through self-play, Science (2018). ↩︎

  5. DeepMind, AlphaZero: Shedding new light on the chess, shogi, and Go, https://deepmind.google/blog/alphazero-shedding-new-light-on-chess-shogi-and-go/ ↩︎

  6. Chess.com, Google’s AlphaZero Destroys Stockfish In 100-Game Match, https://www.chess.com/news/view/google-s-alphazero-destroys-stockfish-in-100-game-match ↩︎

  7. Berner, C. et al., Dota 2 with Large Scale Deep Reinforcement Learning, arXiv:1912.06680 (2019). https://arxiv.org/abs/1912.06680 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  8. Tian, Y. et al., ELF OpenGo: An Analysis and Open Reimplementation of AlphaZero, ICML 2019. https://yuandong-tian.com/reproducibility.pdf ↩︎ ↩︎ ↩︎

  9. IBM, What is Catastrophic Forgetting?, https://www.ibm.com/think/topics/catastrophic-forgetting ↩︎ ↩︎

  10. AI StackExchange, AlphaZero chess: high portion of draws during first rounds of self-play, https://ai.stackexchange.com/questions/43517 ↩︎

  11. Silver, D. et al., Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm, arXiv:1712.01815 (2017). https://arxiv.org/abs/1712.01815 ↩︎ ↩︎

  12. OpenAI Blog, OpenAI Five (reward shaping discussion), https://openai.com/index/openai-five/ ↩︎

  13. Experience Replay for Continual Learning, NeurIPS. http://papers.neurips.cc/paper/8327-experience-replay-for-continual-learning.pdf ↩︎

  14. ReberLab, AlphaZero Beats Chess In 4 Hours, https://www.reberlab.psych.northwestern.edu/2017/12/12/alphazero-beats-chess-in-4-hours/ ↩︎

  15. Alignment Forum, How OpenAI Five Distributed Their Training Computation, https://www.alignmentforum.org/posts/6tikKda9LBzrkLfBJ/ ↩︎

  16. Chess StackExchange, Hardware used in AlphaZero vs Stockfish match, https://chess.stackexchange.com/questions/19366 ↩︎

  17. DeepMind, AlphaStar: Grandmaster Level in StarCraft II Using Multi-agent Reinforcement Learning, https://deepmind.google/blog/alphastar-grandmaster-level-in-starcraft-ii-using-multi-agent-reinforcement-learning/ ↩︎ ↩︎

  18. AlphaStar Unplugged: Large-Scale Offline Reinforcement Learning, arXiv:2308.03526. https://arxiv.org/abs/2308.03526 ↩︎