首页 › programming › 教AI下棋:一场程序员的复仇

教AI下棋:一场程序员的复仇——Sebastian Lague《Coding Adventure: Chess》深度解读

概述

在YouTube的编程可视化赛道里,Sebastian Lague是一个特别的存在:他用Unity把抽象的算法拍成了“纪录片”。2024年10月上线的《Coding Adventure: Chess》(编程历险:国际象棋)是他播放量最高的作品之一,也是近年少有的、把“极小极大搜索+Alpha-Beta剪枝”这条经典AI路线从头到尾亲手走一遍的高口碑视频。它的价值不在“教你下棋”,而在于完整示范了一个AI是怎么被造出来的:先被机器人羞辱,然后从走法生成写到评估函数,再被剪枝救活、被地平线效应反咬,最后复仇成功——又在真正的顶级引擎面前认清自己。这条视频相当于半部《博弈搜索简史》的活教材,值得逐帧拆开来看。

视频基本信息

项目 内容
视频标题 Coding Adventure: Chess(编程历险:国际象棋)
频道 Sebastian Lague
发布时间 2024年10月(据频道页面)
播放数据 数百万次播放,为该频道头部作品(据频道页面,未实时核验)
频道规模 百万级订阅(据频道页面)
技术栈 C# / Unity,项目代码已在GitHub开源

注:本文数据以频道公开页面为准,因引用时点不同,实时数字请以页面显示为准。

核心主张拆解:一部五幕剧的造AI实录

视频的叙事结构非常古典:复仇故事的皮,算法教学的骨。按剧情推进可以拆成五个要点。

第一幕:耻辱开局与“脏活”地基。 视频开场,Seb在线上和一个机器人下棋被彻底击溃,于是立誓要亲手造一个AI去复仇。他做的第一件事却完全不是“智能”——而是走法生成(move generation):把棋盘表示成数据结构,枚举每一种合法走法。国际象棋的规则细节多到离谱:王车易位不能穿过被攻击的格子、吃过路兵只在特定一回合有效、兵升变要分四种选择、被牵制的子不能乱动。Seb用很长的篇幅演示这些边角案例,传递了视频的第一个底层观点:任何智能系统的最大成本,往往在“智能”开始之前——把世界规则无歧义地写进代码。这一段对所有程序员都是熟悉的痛:真正的bug从来不在主逻辑,而在没人想到的例外里。

第二幕:极小极大——替对手着想。 走法能生成了,怎么选?Seb引入极小极大(Minimax):你走一步,假设对手会走出对他最有利、也就是对你最不利的一步;你在这个假设下再选对自己最好的。搜索树就这样一层层展开,他用可视化展示了分支的恐怖——国际象棋每个局面平均约35种走法,往后看4层就是约150万个局面,看6层就是天文数字。这里的论证方式值得注意:他没有报一堆术语,而是让“树在屏幕上疯长”这个画面替他完成论证,这正是该频道封神的原因。

第三幕:评估函数——给局面打分。 树不可能无限展开,搜到限制深度就必须回答“这个局面谁占优”。Seb实现了一个经典两层结构:子力价值(兵1分、马象约3分、车5分、后9分)加上位置修正。视频里最漂亮的段落在这里:他把每类棋子的“位置偏好”做成热力图铺在棋盘上——马喜欢站在中央、兵在中路吃香、开局时王要缩在后排、残局时王反而要往前走。这些热力图本质上是把几百年的人类棋理(控制中心、王的安全)编码成了数字表格。观众第一次直观看到:所谓“棋感”,可以是一张查表用的矩阵。

第四幕:Alpha-Beta剪枝与走法排序。 纯极小极大太烧算力,Seb引入Alpha-Beta剪枝,并用一个极干净的直觉讲清它:如果某条变化里我已经能让对手没有好棋可下,就没必要继续考察这条线里的其他可能——对手根本不会让你走到那。配合可视化可以看到,剪枝前后搜索的节点数差了数量级。他还补了关键一刀:剪枝效率高度依赖走法排序——先考察最像好棋的走法(比如吃子),剪枝就又快又狠;乱序考察则几乎退化为暴力搜索。这一段是全视频信息密度最高的部分,也是绝大多数入门教程讲不清楚的部分。

第五幕:地平线效应与复仇局。 上线后AI立刻闹出笑话:它在搜索深度截止的前一步大度送掉皇后——因为它“看不到”截止之后的吃子链条。Seb借这个翻车讲解了地平线效应(horizon effect),并用静态搜索(quiescence search)补漏:在固定深度搜完后,继续把所有正在进行的吃子交换搜到平静为止。修复之后才是复仇局:他挑战当初羞辱自己的机器人并获胜,随后向更高难度的对手发起挑战,胜负链条清晰地展示了搜索深度、评估质量与棋力之间的正相关。

知识与理论溯源:这条视频背后站着谁

视频里的每一个模块,都能追溯到真实的学术脉络,这也是它经得起“深读”的原因。

博弈论根基:冯·诺依曼(1928)。 极小极大的思想源头是冯·诺依曼1928年的极小极大定理(Zur Theorie der Gesellschaftsspiele),它证明了零和完全信息博弈中存在理性最优策略。极小极大搜索不是启发式技巧,而是有数学定理背书的“理性”定义——视频里“假设对手最强”的直觉,对应的是严格的博弈论结论。

奠基论文:香农(1950)。 Claude Shannon在1950年发表《Programming a Computer for Playing Chess》,第一次系统提出:用评估函数给局面打分、以搜索树组织决策,并区分了“暴力宽搜”的A型策略与“选择性深搜”的B型策略。今天所有引擎都是这两种思路的混血。他还给出了著名的香农数:国际象棋博弈树复杂度约10^120,远超宇宙原子数——这正是“必须剪枝”的根本理由。

第一个下棋的程序:图灵的Turochamp。 1948年前后,图灵与同事设计了Turochamp走棋程序,但当时没有机器能运行它,图灵是用手在纸上模拟执行它下棋的(相关论述见其1953年文章《Digital Computers Applied to Games》)。Seb视频里的“手搓AI”,隔了七十五年和这位祖师爷遥遥相望。

剪枝的数学化:Knuth与Moore(1975)。 Alpha-Beta剪枝由多人独立发现(麦卡锡在1950年代即已知晓),1975年Knuth与Moore的论文《An Analysis of Alpha-Beta Pruning》给出了严格分析:在走法排序理想时,有效分支因子从b降到约√b,同样算力约等于看得深一倍——这是视频第四幕的理论底牌。

1997年,深蓝。 IBM的深蓝击败世界冠军卡斯帕罗夫,靠的正是视频里这套路线的工业级形态:专用硬件上每秒评估约两亿个局面(项目主导者为冯·hsiung Hsu,Feng-hsiung Hsu)。Seb的手搓AI与深蓝之间没有原理差异,只有工程密度差异——这一点对观众的理解框架非常重要。

2020年之后:NNUE与AlphaZero。 视频结尾的“顶级机器人碾压人类”实际上对应着最新一代技术:开源引擎Stockfish在2020年引入NNUE(由将棋研究者Nasu Yu于2018年提出、可高效增量更新的小型神经网络来当评估函数),棋力暴涨;DeepMind的AlphaZero则用蒙特卡洛树搜索+深度网络+自我对弈,在2017年底击败Stockfish 8(100盘快棋28胜72和0负,见Silver等人2018年发表于Science的论文)。它们分别回答了视频留下的两个问题:手写评估表的上限在哪(NNUE用学出来的评估函数取代了热力图),以及暴力搜索的边界在哪(AlphaZero证明了评估本身也可以靠搜索自学)。

批判性审查:哪些站得住,哪些被简化

站得住的部分。 极小极大的最优性(在评估完美的前提下)与Alpha-Beta的等价性都有严格证明,视频的算法叙述在数学上完全正确;走法生成、静态搜索、走法排序这些工程重点的选择也精准——它们确实是业余实现与强引擎之间的真实分水岭。

被简化的部分有三处,值得读者留意。 其一,视频的评估函数呈现为“几张热力表”,但现实中纯手工评估的引擎天花板很低,现代强引擎的评估函数是数百万参数的神经网络(NNUE),热力图只是教学脚手架,不是现代答案本身。其二,“搜得越深越强”大体成立但有边际递减,且必须搭配静态搜索、置换表、迭代加深等一整套工程补丁才能兑现——视频对后两者着墨很少或未涉及,直接照搬视频代码到实战会撞墙。其三,视频结尾“AI超越人类”的叙事容易让观众以为AlphaZero全面碾压了当时最强的Stockfish,但那场对决的对局条件(时间控制、Stockfish版本与配置)在当年存在争议,社区对“公平性”有过长期讨论;更稳妥的说法是:AlphaZero证明了新范式的上限,而此后长期霸榜的,反而是把两种范式杂交的Stockfish。

叙事层面的提醒。 “AI像人一样思考”是所有棋类AI视频的默认修辞,但引擎从不“理解”棋:它是搜索+评估的暴力美学(哪怕是AlphaZero,也只是把人类直觉换成了网络输出的概率分布)。理解这一点,反而更能体会视频的价值——它展示的不是智能的模拟,而是不需要模拟智能也能达到智能效果的工程路径。

认知提升与实用启示

第一,“树+评估函数”是通用解题框架。 凡是能表述成“轮流做选择、结果可打分”的问题,都可以套用这套架构:路径规划、编译器优化搜索、超参数调优、游戏数值平衡,乃至产品的A/B策略枚举。遇到难题时先问一句:它的搜索树长什么样?每层的选择是什么?叶子节点怎么打分?这三个问题想清楚,方案往往就浮现了。

第二,评估函数就是你系统的价值观。 Seb的热力图演示了一个朴素真理:搜索算法只负责挖得深,决定挖向哪的是评估函数——你打分的标准错了,算力越足偏得越远。工程与生活同理:优化指标选错,执行力越强结果越糟(这正是古德哈特定律的算法版本)。而NNUE的启示是:当手写规则到达瓶颈,换个思路——让数据自己学出评估函数。

第三,先看好棋,剪枝才狠。 Alpha-Beta的效率取决于走法排序,这个结论可以平移到日常:同样的八小时,先验证“最可能成立的假设”、先处理“最可能出结果的分支”,产出会数量级不同。乱序努力,等价于退化为暴力搜索。

视频论证结构图

flowchart TD
    A["被机器人羞辱<br/>立誓亲手造一个AI"] --> B["走法生成<br/>易错却是一切的地基"]
    B --> C["极小极大搜索<br/>替对手设想最强回应"]
    C --> D["分支爆炸<br/>每层约35种走法"]
    D --> E["评估函数<br/>子力价值加位置热图"]
    E --> F["Alpha-Beta剪枝<br/>砍掉不必看的分支"]
    F --> G["走法排序<br/>先看好棋剪得更狠"]
    G --> H["地平线效应<br/>截止前一步送掉皇后"]
    H --> I["静态搜索补漏<br/>把吃子链条搜到平静"]
    I --> J["复仇成功<br/>顶级引擎前仍是婴儿"]
    J --> K["现代续章<br/>NNUE与AlphaZero登场"]

延伸阅读

  1. SebLague/Chess-Coding-Adventure — 视频同款项目的开源代码仓库,可以对照视频逐模块阅读C#实现
  2. Computer chess - Wikipedia — 从图灵Turochamp到NNUE的计算机国际象棋全史条目

参考来源

  1. Sebastian Lague - YouTube — 视频发布频道,《Coding Adventure: Chess》(2024年10月)可见于其Coding Adventure系列
  2. SebLague/Chess-Coding-Adventure (GitHub) — 视频项目官方开源代码
  3. AlphaZero - Wikipedia — AlphaZero与Stockfish 8对决数据及争议记录
  4. Deep Blue versus Garry Kasparov - Wikipedia — 1997年人机大战始末
  5. A general reinforcement learning algorithm that masters chess, shogi and Go through self-play (Science, 2018) — Silver等人关于AlphaZero的正式论文

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入