AI围棋为何难:从搜索空间到全局耦合的深度解析
发布时间:2026/10/22 18:06:46 锦皓数字建站

我最近在整理人机对战相关的系列内容写到 AI 围棋的时候卡了很久。围棋在大众语境里的标签一向不少“人类智慧的最后堡垒”“顶级棋手最后的尊严”这类说法到处都是但真正让我反复琢磨的其实是一个更朴素的问题为什么同样是棋盘上的决策问题国际象棋的那套 AI 做法搬到围棋上几乎使不上劲这篇文章我想把“AI 围棋的困难”从头拆一遍。不是为了劝退而是想把困难本身讲明白——它到底难在哪、为什么难、以及这些困难曾经怎样把整个领域逼到换了一套做事方式。如果你也对棋类 AI 感兴趣或者好奇人工智能为什么在其他游戏里风生水起、在围棋上却走了这么多年弯路这篇内容应该能给你一个比较完整的答案。1. 棋盘只有 361 个点为什么搜索空间大到难以置信1.1 规则极简分支因子却接近 250先看围棋的规则。19 条横线、19 条竖线交叉出 361 个点黑白两方轮流落子终局时比较双方围到的地盘大小。规则条文加起来不超过几页纸在各类棋牌游戏里算得上极简。但规则简洁从来不代表求解简单恰恰相反越是规则简单的棋AI 越难找到突破口。问题首先出在“分支因子”上。分支因子指的是每个局面平均有多少种合法落子选择。国际象棋从标准开局出发平均每个局面大约有 30 到 35 个合法招法中国象棋也差不多在 40 上下。而围棋呢只要棋盘上还有空点任何空点几乎都是合法落子点。开局阶段棋盘上有 361 个可落子的位置即便排除掉少数完全无理的极端着法平均分支因子也高达 200 到 250 左右。你可能觉得200 和 35 不也就是几倍的差距吗但搜索树的规模是随深度指数增长的。每多思考一手棋多出来的分支量就是乘以分支因子。国际象棋搜索到 10 层大约是 35 的 10 次方而围棋搜到 10 层就是 200 的 10 次方。这之间的差距不是几倍而是几十个数量级。换句话说就算给国际象棋 AI 和围棋 AI 同样多的计算时间前者能轻松搜完的思路深度后者连第一层都还没摸到边。这里顺便解释一个初学者常有的误解既然分支因子高那我减少候选点行不行比如开局只看星位、小目、三三等高价值点位是不是就能把分支压下来想法是对的但执行起来很危险。因为“哪些点值得考虑”本身就是一个需要判断力的问题而这个判断力恰恰是 AI 当时最缺的东西。为了减少搜索而做候选点筛选等于把评估问题的难度又推回到了前面。1.2 合法局面数足以撑爆任何穷举存储很多文章喜欢用“状态空间”“博弈树规模”来形容棋类复杂度。这个表述听起来抽象但落到围棋上数字是真正震撼的。先做一道简单的估算19×19 棋盘有 361 个交叉点每个交叉点可能是空、黑子、白子三种状态。那么所有可能的位置组合就是 3 的 361 次方数量级大约在 10 的 172 次方。当然这里面包含了大量非法局面比如同色棋子连成一片却没气的状态、双方同时违反禁着规则的状态。把这些非法情况过滤掉之后合法的局面总数大约还在 10 的 170 次方。10 的 170 次方是什么概念物理学界对可见宇宙中原子总数的主流估算大约是 10 的 78 次方到 10 的 82 次方。围棋的合法局面数比整个可见宇宙的原子总数还高出上百个数量级。至于整棵博弈树——也就是从第一手到终局的所有可能对局路径——更是高达 10 的 360 次方左右。这串数字直接把一种经典的 AI 思路判了死刑穷举存储。有人会天真地想那我把所有合法局面都存进数据库下棋时直接查表不就行了答案是完全不行。就算把整个宇宙的原子都做成硬盘也装不下围棋局面的零头。更关键的是存储只是第一步你还要在存储之上建立局面之间的胜负关系搜索那个复杂度只会更高。所以围棋 AI 的困难从来不是一个工程优化问题而是数学意义上、复杂度意义上的根本壁垒。为了更直观我把几类常见棋类游戏的状态空间做进一张表里棋类平均分支因子合法局面量级博弈树复杂度量级井字棋约 4约 10 的 3 次方约 10 的 5 次方国际象棋约 35约 10 的 46 次方约 10 的 123 次方中国象棋约 40约 10 的 48 次方约 10 的 150 次方围棋约 250约 10 的 170 次方约 10 的 360 次方这张表看完你应该能直观感受到围棋和国际象棋之间的巨大断层。国际象棋虽然状态空间也不小但按当时的硬件水平配合剪枝算法还有勉强一战的余地。围棋是直接跳出了人类可想象的存储极限。1.3 没有将死围棋缺少清晰的终局里程碑搜索类算法有一个隐含偏好它喜欢存在“目标节点”的问题。国际象棋里这个目标节点就是“将死”。你所有的搜索方向都可以指向一个明确的终局状态——对方的王无路可走。哪怕对方的王在棋盘上不断移动只要它还没被将死你仍然可以朝着削弱它防守的方向搜索。但围棋没有这种目标。你落子的目的不是把某个目标棋子逼到绝路而是尽可能多地围出地盘。问题在于“围地盘”的边界在哪终局到底在什么时候发生这是一个高度依赖棋手判断的问题。双方认为边界已经明确、不会再发生大的战斗时棋局就结束了。可这个“认为”恰恰是围棋里最难形式化的部分之一。正因为缺少明确的终局里程碑搜索算法在围棋上无从画出一条通往终点的路径。国际象棋可以倒着推为了将死对方我需要制造什么局面为了制造这个局面我需要如何调动子力每一步搜索都有方向感。围棋里也有方向感但方向感来自棋手对厚势、弱棋、潜力等全局要素的模糊认知而这些东西无法像“将死”一样被精确定义成搜索的终点。于是传统搜索在围棋上的第一个困境就出现了搜索树的规模大得离谱而你还不知道朝哪个方向搜才算有意义的尝试。2. 评估函数这道坎你无法给一个围棋局面贴上数字标签2.1 国际象棋可以给棋子打分围棋用什么打分博弈类 AI 的主流框架是“搜索 评估”。搜索负责枚举候选变化评估函数负责在树上的每个节点回答一个问题当前局面到底是黑好还是白好、好多少。国际象棋的 AI 之所以能用这个框架取得巨大成功是因为它有一个天然的评估抓手——物质价值。国际象棋的棋子有明显的等级差后大约值 9 分、车 5 分、马和象各 3 分、兵 1 分。你吃掉对方一个车自己和对方的物质差直接拉开 5 分这个判断几乎是全局有效的。在此基础上再叠加上王的安全性、兵型结构、子力活动空间等修正项一个评估函数就可以大致衡量双方优劣。围棋没有这种天然的计分单位。棋盘开局是没有子的所有棋子都是临时放置上去的每一手棋只增加一个子但也可能同时改变了周围十几个子的价值。你要怎么给一个正在形成的势力范围打分怎么给一块只有两气、随时可能被攻杀的孤棋打分怎么给一处还未定型但未来可成 50 目大空的模样本打分如果你用“当前围到的目数”来打分那你会得到一个极度短视的评估因为厚势型局面在早期几乎不显示为真实目数大量好处都藏在“未来潜力”里。可“未来潜力”又如何放进一个静态评估函数2.2 势与地两种形态之间的动态转化更麻烦的是围棋里存在两类看似对立的要素势与地。地是已经确定的围空直观、可度量势是外势、厚势不直接产生目数却能影响未来所有战斗。势和地之间没有固定兑换率。一块强大的外势在正确运用下可以通过攻击转化为大面积实地一块看似辉煌的模样如果被对方成功侵消可能最后只剩几目残空。这种勰态性直接摧毁了“用静态数值评估局面”的简单想法。早期有大量围棋 AI 采用“当前实空 潜在实空”的加权和来做评估把明显成空的地方算成确定目把一些大场估算出潜力值。听起来合理实践起来一团糟。因为“潜在实空”的权究竟是多少取决于周围其他棋子的位置取决于当前战斗的焦点甚至取决于棋手自己对战斗倾向的偏好。你在函数里把这个权设对了 A 局面在 B 局面就一定会错调好了 BC 又坏了。我见过不少业余棋手用早期围棋软件下棋经常出现一种荒诞感AI 在局部明明已经落后很多但它的评估函数依然认为局面五五开原因就是它把自己那一堆不算实的厚势按照规则惯性估算成了巨空。2.3 厚、味道与劫材这些概念天然抵抗数值化学棋的时候老师常会说“这块棋很厚”、“这步棋味道不好”、“这里留着一个劫材”。这类词在一些非棋手听来像玄学但它们恰恰是围棋评估里最重要的信息。我试着用大白话解释一下这些概念。厚指的是一块棋形状完整、眼位丰富、即使被对手从多个方向进攻也能从容应对薄指棋形散乱、气紧、随时可能被分断或被杀。味道指的是某个局部残留的破绽数量与可利用程度。一个棋形如果味道差对方未来随时可以在这里制造手段而这些手段会牵动全局的劫争与应接。劫材就更抽象了它是指一处棋形能够被用来“找劫”的价值不是你棋盘上任何固定位置的静态属性而是由全盘几十处棋形的潜在损失决定的。我很难想象早期开发者是如何试图把这些概念塞进数值评估函数的。你想给“厚”加分加多少加多了就会高估模样加少了又低估外势的威慑力。你想给“味道”扣分扣多少扣多了棋盘上有味道的地方到处都是分数变成噪音扣少了它又不能反映那些真正危险的劫材潜力。把国际象棋那种“物质 位置修正”的成熟评估方案拿来直接套用到围棋上结果就是在国际象棋里行之有效的评估模式到了围棋几乎每一个因子都找不到可靠的定义。围棋 AI 的困难在评估这一环是最本质的。3. 古典 AI 在围棋上的挣扎搜索加规则的破产3.1 搜索树方法在国际象棋有效的套路为何失灵我们现在说起棋类 AI多少会觉得“下棋不是 AI 应该轻松解决的事情吗”。但那是现代深度学习带来的错觉。早年的棋类 AI 走的是“启发式搜索 手工知识”的传统路线国际象棋的成功几乎让所有人都认为只要规则定得够细、剪枝做得够好围棋也迟早能被拿下。真实情况是传统搜索算法在围棋上遭遇了双重危机。第一重危机在上面已经说过搜索规模太大。第二重危机则是评估不可靠。这两个问题叠加起来造成了一个很尴尬的局面。如果说搜索是在探路评估是指明方向那围棋 AI 就是一个看不见方向但还在拼命探路的人。你探得再远其实都是在原地兜圈子。国际象棋用评估函数给每个局面打个 0 到 10 的分数虽然不完美但基本可信围棋的评估函数经常是错得离谱那么搜得越深错误积累越严重。当时很多研究者做过一个对比实验让国际象棋程序和围棋程序各自向前计算一定深度然后检查它们对局面的判断准确性。国际象棋的程序即使估算浅排名靠前的候选着法里也总有几个是正常棋手会考虑的围棋程序列出的候选着法经常让人哭笑不得——一些职业棋手看都不会看一眼的点却被 AI 放在第一位。这不是编程者水平低而是整个评估框架错了。3.2 模式匹配规则的早期程序只能在入门级徘徊深度学习方法普及之前围棋 AI 还有个流派依靠“手工规则 模式匹配”。开发者们把棋理总结成成百上千条规则靠近边角的价值更高、拆二可以关联、打入时优先考虑托退、遇到对方外势要限制其展开等。这些规则在局部定式里还算可靠但一放到全局就漏洞百出。原因很简单围棋的棋理高度依赖情境。同样一步“拆二”放在己方厚势旁边是稳健连接放在对方厚势边上可能就是送上门让对方攻击同样一个“点角定式”在局部是正常应对但如果全局其他地方有一个更大的大场点角可能只是浪费时间。人类棋手在运用棋理时靠的是对全局态势的理解而不是机械地套用“拆二总不会错”这样的规则。早期围棋 AI 在规则套用时缺乏这种全局感知能力于是经常出现背着一堆局部正确定式却在全局布局上把棋下得支离破碎。我看过一些早期围棋 AI 的对局记录最直观的感受是它每一个局部单拎出来都有模有样但整体上就像一盘散沙。它不知道什么时候该弃子不知道什么时候该脱先也不知道一块厚势到底该用它去压迫还是该果断舍弃。这种系统在十几年前的真实水平大概也就是“学过规则但没下过棋”的程度连刚入门的业余棋手都能轻松击败它。3.3 蒙特卡洛模拟的进步与它的天花板事情出现转机是在“蒙特卡洛方法”被引入围棋 AI 之后。这个方法的想法非常直接与其费尽心思设计评估函数不如直接让程序在候选局面后面随机落子模拟出大量完整对局用统计胜率来评估当前局面的好坏。这个做法有一个巨大优势它完全不需要人工设计评估函数。理论上只要模拟得够多随机对局的结果就能近似反映出候选点的优劣。这比手工规则强多了也确实让围棋 AI 的水平上了一个台阶从入门级勉强提升到中级业余水平。不过蒙特卡洛方法很快也撞到了天花板。第一随机落子会让模拟结果充满噪音。围棋是高度依赖于全盘配合的游戏随机乱下的棋根本体现不出“厚势压制”“形状效率”这类需要深度理解才能发挥作用的要素。第二为了压过噪音你不得不进行海量对局模拟计算成本高得惊人。每一次新增候选点都要重新模拟几十万局算力很快就撑不住了。第三用蒙特卡洛方法处理劫争时尤其痛苦因为劫争的胜负取决于全盘劫材的分布随机模拟里劫材经常被忽略导致评估严重失真。所以即便走到了蒙特卡洛这一步围棋 AI 离人类高手的距离仍然非常大。“困难”二字一直是压在围棋 AI 身上的巨石。4. 全局纠缠才是真正的组合爆炸局部最优从来不是真最优4.1 征子一枚边角的棋子能决定另一片战场的生死讨论到前面我们已经谈了两个层面的困难搜索规模过大、没有可靠的评估函数。但还有一个更深层、也更容易被忽视的困难围棋的全局耦合性。举个例子围棋里有一项基础技术叫“征子”。当你连续从斜线方向追杀对方棋子对方每逃一步你就在它前进的路线上拦一步直到把它逼到棋盘边缘无路可逃。这个追杀过程看起来是纯粹的局部直线计算每一步都是必然应对。但征子有一个决定性的前提逃跑方斜线上的关键交叉点上不能有任何可以接应的棋子。这个棋子可能远在棋盘的另一角——看起来毫不相关的位置却会彻底破坏整个追杀路线导致被追杀方借势反打。所以棋手在判断一步棋能不能“征”时不只是盯着局部棋盘而是要在脑海里扫过整盘棋的每一个角落寻找是否有任何一颗棋子会成为逃跑方的援兵。我在自己做围棋 AI 相关的数据实验时也碰到过这种情况一个模型在局部判断“可以吃”只要棋盘远端加一个无关棋子整条追杀线就作废了。而这种细微关联遍布在整个棋盘上。一个局部思路再正确也可能因为全局任何一个位置的因素而完全反转。这种全盘耦合让任何试图把围棋拆成独立子问题、逐个求解的策略都面临巨大的组合爆炸风险。4.2 劫争背后的劫材池需要盘算全盘的价值总量再看看劫争。劫争是围棋里一种特殊的反复提子规则造成的纠缠局面。棋盘上出现劫争时双方不能立刻提回同一位置必须在别处下一手棋等待对手应棋之后才有机会把劫提回来。这“别处的一手”就是“找劫材”意思是你在别处制造一个足够大的威胁逼对方不得不应然后你趁这个机会回头打赢劫。那么问题来了你全盘到底有多少个“足够大的劫材”每一个劫材的价值多大对方如果不应这个劫材你能不能靠这个位置反杀或占大便宜要回答这些问题你必须对全盘所有棋形进行一次价值排序。这已经不是一个局部问题而是一个全局资源的统计算账。在 AI 的实现里这种全盘劫材统计很难用简单的搜索完成因为你每找一个劫材就等于启动了另一条完全不同的搜索分支如果劫材又引发了新的劫材交换整个搜索树就会以指数级别扩张。我见过一些使用现代方法训练的围棋 AI在普通局面下应对出色但一旦进入复杂的劫争阶段胜率曲线会出现明显的摆动甚至出现前后矛盾的评价一会儿觉得这一方大优一会儿觉得那一方大劣。原因就是在劫争这个高度依赖全盘统筹的领域评估函数需要同时评估几十个分布在棋盘各处的劫材剩余价值。这个问题没有彻底解决只是被庞大的网络参数暂时压住了。4.3 每一步落子都在重新定义所有棋子的价值真正的围棋老手有一句话我印象很深“你在棋盘任何地方下一手棋等于给全世界所有棋子都重新标了一次价。”这句话初听夸张细想是事实。你在上边压一手可能让左下角原本活得很舒服的一块棋变薄了你在中腹飞一些可能让右边原本有机会成空的地方多了味道你随便在某个欠点拍一手原本以后不是特别重要的劫材位置就变得重要了。这种“落子即重估”的特性让围棋 AI 的任何静态快照式评估都显得先天不足。国际象棋里你布置一个兵链它的价值是相对稳定的周围棋子的价值不会因为你在远端走了一步而瞬间改变。围棋完全相反。每一步棋都会牵动全局的势力消长、劫材增减、厚薄转换。如果你用一套基于当前局面的数值模型来评估它比变化本身滞后了半拍。这也是为什么后来深度学习价值网络能够突飞猛进的一个重要原因它不再是机械地计算当前静态要素而是试图通过大量对局学习“整个局面的动态潜力”。但即便如此它也只是把“全局耦合”带来的组合爆炸问题从搜索端转移到了学习端。问题本身没有消失它只是从“搜索树的规模”变成了“需要多少训练数据才能覆盖足够多的耦合模式”。4.4 为什么通用生成式模型也难下围棋这几年生成式模型火起来以后身边不少朋友开玩笑说以后让大模型学了棋谱不就能下棋了吗实际上这条路远没有想象中顺利。围棋的全局耦合让任何基于“语言理解”的模式都容易出问题模型可以记住大量定式和局部手筋但它并不知道这步棋放在当前全盘态势里是否成立。棋手之间交流时会说“这里要脱先”“那里要弃子”这些判断依赖的是“全盘价值的整体排序”而不是从棋谱文本里学到的局部序列规律。我也留意过一些用 Transformer 架构直接生成围棋着法的社区项目效果很好的一些案例大多是在定式阶段或者局部死活题上。一旦进入没有标准模板的开放布局模型就开始迷茫下出一些从局部看“像人下的棋”、但从全局看缺乏连贯性的招法。说白了围棋的“难”不只是数据量不够而是它的正确决策无法脱离全局语境孤立存在这对所有依靠输入输出映射的模型都构成了根本挑战。5. 深度时代困难没有消失只是换了藏身之处5.1 价值网络本质上还是在做评估只是换了一种暴力近似现阶段的围棋 AI 已经比古典时代强了太多但把话说明白一点它没有真正消除“评估难题”只是用高容量神经网络把评估难题改造成了一个大规模学习任务。你不再需要手写“厚势值几目”的规则而是让网络在几百万局对弈里自己学会“什么样的局面有未来潜力”以及“什么样的局面只是一时虚势”。这当然是一个巨大的进步。但你要意识到价值网络本身仍然是一个近似的静态映射。它接收一个局面输出一个胜率数字这个数字的背后依然是对“厚、味道、劫材、潜力”这些要素的综合评判只是参数变成了数百万个浮点数而已。围棋的困难并没有消失它只是被压缩进了训练数据和网络权重里。5.2 我观察到的一些失败模式胜率模型也会“误判厚势”我在实际接触一些自对弈训练的围棋模型时见过不少很有意思的失败模式。最典型的一种是“过度自信型厚势”模型在某个中盘局面下把胜率标得很高因为它认为己方拥有一块巨大的外势但它没有注意到这块外势的关键点已经被对方预先埋下了两颗可以破坏结构的棋子。等对方真正出手时外势瞬间变成薄棋胜率又急剧下降。这种反复体现在同一个模型上本质上就是它在训练中把“外势大”和“形势好”过度关联了。另一个常见的失败模式出现在劫争阶段。模型倾向于在它“见过更多类似局面”的中盘阶段走出强硬动作但进入劫争一打起来它往往会连续选择一些无关痛痒的劣质劫材导致大劫失败。这其实还是全盘劫材统筹能力不足。这些现象说明即使有了这么强大的神经网络围棋全局组合爆炸形成的评估困难依然会在特定情境下重新浮出水面。5.3 围棋剩下的困难可解释性、泛化能力与意义如果要我现在总结围棋 AI 还剩下什么困难我不会说“它还不能赢人类高手”——在很多衡量标准上它已经做到了。真正的困难在另外三个方向。第一是可解释性。当前的模型可以告诉你“这个局面胜率 78%”但解释不了为什么。它不能告诉你这 78% 里有多少来自厚势、多少来自劫材优势、多少来自对方棋形的味道不好。人类棋手复盘时可以指出“这里过于贪空”“那里应该保留劫材”但模型不能。第二是泛化能力。一个在常规规则下训练出来的围棋 AI如果改变贴目规则、甚至把棋盘改成 21 路它往往需要重新训练很久才能适应。它掌握的围棋知识是跟特定棋盘大小、特定规则高度耦合的迁移能力远不如人类棋手。第三是意义层面。围棋 AI 能算出胜率最高的点但它不知道“为什么这一步重要”。当棋局不再单纯以胜负为标准而要考虑棋型的优雅、避免争议的劫争、照顾对手的势力范围时它就更难以给出令人满意的回答。这些困难不会因为模型的参数量继续变大而凭空消失。它们指向一个更底层的命题围棋 AI 要从“能够获胜”走向“能够解释全局结构”还需要跨过一条很长的路。我在整理这个系列内容时最深的体会是围棋的“困难”不是一个可以被简单克服的技术障碍它像一面镜子照出了搜索式 AI、规则式 AI、统计式 AI 各自的边界。每个阶段看似解决了旧的困难其实只是把困难推到了新的形式里。也许这正是围棋作为人工智能试验场最迷人的地方——它逼着研究者想清楚自己到底是在“搜索答案”还是在“理解问题”。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。