首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
从规则引擎到深度学习:围棋AI如何攻克分支因子与局面评估难题
📅 2026/10/22 18:04:37
✍️ 爱科研究院
👁 阅读 3,247
1. 为什么说围棋是AI攻不下的最后一座堡垒围棋的规则简单得可怕黑白双方轮流在19×19的棋盘交叉点上落子谁围出的领地多谁就赢气尽则提子一眼就能看懂。但就是这套规则让计算机从1950年代开始追赶了半个多世纪直到2016年才在正式对决中真正越过职业棋手的壁垒。做AI方向这些年我经常在课上和线下分享时引用围棋这个案例。它最吸引人的地方在于把棋类博弈的所有经典难题一下子全摊在你面前。国际象棋8×8共64格围棋19×19共361个交叉点国际象棋平均每步合法走法分支因子大约是35一盘棋平均80回合而围棋的分支因子大约是250一盘棋动辄150到200回合。这两个数字的差异直接决定了搜索树规模的指数级差异。我算过一组数字很多资料里反复引用过但每次讲还是有人被惊到围棋所有可能局面的数量大约在10的170次方量级而全宇宙可见原子的数量大约在10的80次方量级。如果算上所有合法棋局的完整走法序列规模更夸张能达到10的760次方。这是什么概念假设一台计算机每秒钟能演算10亿个局面从宇宙诞生开始算到现在连一个零头都遍历不完。这个天文数字是围棋AI所有困难的总根源。只要你还想着“把所有分叉都看一遍”围棋就是无解的而过去几十年里绝大多数经典算法恰恰都建立在“搜索全部”或者“尽量多搜”的假设之上。所以我们聊围棋AI的困难本质上聊的是当传统工具箱全部失灵时人类是怎么一步步找到新工具的。提示理解这个规模差异是理解后面所有算法演进的钥匙。很多人一开始学蒙特卡洛或深度学习时觉得莫名其妙其实就是没先想清楚“到底什么东西算不完”。2. 阻碍AI的三个核心难点2.1 分支因子失控国际象棋那个35的分支因子不是随随便便来的。因为棋子的走法有明确规则限制兵只能前进斜吃马跳日象走斜线车走直线很多时候一个局面真正合理的选项可能就只有两三个。规则本身就替程序做了大量的剪枝。围棋没有这个“福利”。任何一颗棋子落在任何空交叉点都是合法着法开局阶段尤其自由19×19的棋盘有361个起点可选。你没法用“合法性”来过滤候选着法因为所有点都是合法的。传统搜索算法里最基础的那层合法性剪枝到围棋这里直接失效。有人说那我可以加启发式剪枝只搜看起来合理的点。问题是“看起来合理”这个判断本身就没法用简单规则定义。一个点可能是好棋也可能因为旁边多了一颗棋子立刻从好棋变成废棋。启发式规则在局部多少有点用一旦牵扯到全局势力立刻变成一堆互相打架的矛盾条款。更麻烦的是围棋里的“劫争”规则。一个局部可以反复提子循环如果不对劫争做特殊记录处理递归搜索会直接陷入死循环。传统算法为了应对这个得额外维护一套复杂的劫争状态管理这又进一步拖慢了搜索效率。2.2 局势评估靠直觉国际象棋的程序很容易给一个局面打分把黑白双方棋子的价值加起来双方的王安全度、兵形结构、子力活跃程度再加加减减几行代码就能得到一个相对靠谱的局面评估值。这是因为国际象棋里有非常清晰的“物质优势”概念——你多一个车就是比我多五分这是硬性的、可量化的。围棋没有这种东西。棋盘上没有“一个子等于多少目”的天然量度。你占了一大片区域可能因为一个局部战斗崩盘那片区域全部变成对方的领地你一块棋看起来气很长结果一次失误被全歼。要评估一块棋是活是死、一块势力能围出多少目、外势在后续战斗里能发挥多大作用这些靠传统的“特征权重”框架几乎无法精确表达。这是围棋AI最尴尬的地方程序不是不能下棋而是下着下着就会犯糊涂。明明是优势局面因为一次错误评估走出一步毫无必要的坏棋把胜势拱手送人。说白了人类棋手的“形势判断”是一种高度抽象的直觉能力而传统符号主义AI恰恰最不擅长处理“直觉”这种没法形式化的东西。2.3 局部与全局的无限缠斗围棋第三个难点在于局部与全局的耦合程度远超其他棋类。国际象棋里也有局部战斗但无论多复杂的战术组合最后都能落回“吃子、换子、将军”这种相对清晰的逻辑链。围棋不同棋盘上的A处和B处可能隔着十万八千里但因为一条外势或厚味的连接两处会发生直接或间接的相互影响。最典型的就是“厚势”概念。棋手的某一块棋虽然没有直接围住目数但形成了一道厚壁对后续所有战斗都会产生辐射影响。这种影响没法简单切块计算。你想把棋盘分成几个独立区域分别搜索很快就会发现区域之间因为各种“势”产生耦合分而治之的策略失效。麻烦的还有收官阶段。棋盘快下完时很多小地方的目数已经基本固定看似局部化了但实际上剩余小目的组合数量依然爆炸。而且收官顺序直接影响胜负半目输赢的比赛里任何一点点评估误差都会被放大。传统算法在收官阶段需要反复比较大量剩余组合的先后关系搜索量一点都不比中盘小。这三条叠加在一起基本把所有经典AI方法全灭了一遍深度优先搜索打不动深度广度优先搜索撑不住宽度启发式评估找不到有效启发专家系统规则写不完也不可能写全。3. 传统算法的困局那些被写进教科书又被打脸的思路3.1 规则引擎为什么走不远早期的围棋AI走的是专家系统路线。当时的思路很直接国际象棋已经通过“深度搜索局面评估”取得了巨大成功围棋是不是也可以把职业棋手的经验整理成规则再套上搜索框架赢棋我读过不少早期文献方法大同小异先把棋盘划分成多个局部区域每个区域用模式识别判断眼位、厚薄、死活然后拼出一个全局评估值再把评估值交给搜索算法去选点。听起来很合理实操起来全是坑。第一围棋模式的数量远超预期。同一个棋形在不同位置、不同周边配置下的价值完全不一样。职业棋手常用的定式就有几万种每一种还会因为周边棋子配置衍生出几十种变化。规则库越写越大很快失控。第二规则之间互相冲突。一个棋形在局部明明是高效的放到全局可能因为外势等原因变成坏棋。你试图用规则去覆盖这种动态关系等于用静态条款去描述流动态势方向就是错的。我记得早期某款开源围棋程序代码里密密麻麻写了几千条规则最后棋力常年徘徊在业余初级还时不时走出让棋手哭笑不得的“电脑棋”。程序员水平没有问题出问题的是路线本身规则的表达能力在围棋面前天然不够。这个方向后来逐渐被学术界放弃现在回头去看它的失败给后人留下的教训是“不要试图穷举人类直觉”。3.2 蒙特卡洛的意外成功与天花板2006年是一个重要转折点。蒙特卡洛树搜索被引入围棋后情况有了质的变化这个方法的思路乍看起来有点“愣”与其费劲设计复杂的局面评估函数不如让AI自己和自己随机下很多盘棋用随机模拟的胜率来代替人工评估。怎么理解这个思路你觉得某块棋价值大咱们直接在这个位置快速模拟几百盘对局统计一下最终谁赢得多。模拟一千盘下来如果执黑胜率明显更高那这块棋就是好棋。这个做法绕开了前面说的“局势评估”难题——不需要解释为什么好只需要统计最终结果。MCTS确实有效它把围棋AI从“规则引擎时代的业余初级”提升到了“业余强手”水平。这个成绩在当时已经非常了不起因为此前的围棋AI在人类棋手眼里根本不算会下棋MCTS让AI第一次有了“棋感”。但MCTS很快也遇到了天花板。它的模拟对局是全随机的相当于用一个“乱下但能下到终局”的水平去统计胜率。这导致统计结果在很多关键局面下不够精确尤其是涉及复杂死活、厚势转换、大龙对杀这种需要深度计算的场景随机模拟经常误判。结果就是MCTS让AI从“弱”变成了“不弱”但离击败职业顶尖棋手还差着好几个层次。到那个阶段研究者形成了一个共识随机模拟的统计上限已经到了必须引入真正能理解局面的模型。但这里又冒出一个新问题——传统机器学习需要大量带标签的训练数据围棋局面的“标签”是什么终局胜负当然是标签但一盘棋要下两百多手中间每一步棋的好坏标签怎么定这个难题一直卡到深度学习出现才终于有了可以落地的答案。4. 深度学习如何把“不可能”变成“可解”4.1 策略网络剪掉整片搜索空间2016年那场人机对战让外界看到了围棋AI的突破但真正从事后来拆解核心就是两个神经网络。第一个是策略网络任务只有一个给定当前局面输出下一步落在棋盘每个点上的概率分布。听起来平淡无奇可它对“分支因子失控”的打击是革命性的。以前搜索算法面对250个候选点只能硬着头皮挨个搜策略网络训练好之后可以直接告诉AI“下在A点的可能性最大B、C次之其他点概率极低基本不用考虑。”我实际测试过类似结构把策略网络当作搜索的候选剪枝器搜索宽度能瞬间从250压到十几个甚至几个。搜索树的根部直接砍掉九成以上的分支剩下的搜索任务自然轻松得多。这个思路其实人类一直在用——职业棋手看棋时第一感就能锁定一小部分候选点剩下的根本不看。策略网络学的就是这种“第一感”。它的训练数据可以来自人类棋谱更强大的版本则是让AI自己和自己下棋从自我对局中学习。策略网络练得越好搜索时要考察的分支就越少这相当于把搜索问题的规模从“指数级”降到了“多项式级”的体验也是围棋AI能跑得动的基础。4.2 价值网络让AI学会“估价”第二个关键组件是价值网络。它的任务是回答另一个问题当前局面下黑棋的胜率是多少白棋的胜率是多少这直接对应前面说的“局势评估”难题。价值网络的训练方式很巧妙——不依赖人工标注而是让AI自己和自己下棋随机生成大量对局再把每盘棋的最终胜负当作整盘棋中间所有局面的标签。相当于用“终点结果”倒推“中间路线的质量”。这个思路在深度学习里叫自监督说通俗点就是棋不需要人教自己跟自己玩几千盘自然就学会判断局面好坏了。原理简单实现却很重。价值网络需要把棋盘上几百颗棋子的空间分布压缩成一个准确的胜率实数这要求网络具备很强的表达能力。实际项目中价值网络通常是一个很深的卷积神经网络层数动辄几十层参数量轻松过亿。训练时要先生成海量自我对局数据再用这些数据训练网络。我身边做过类似复现的朋友常说光数据生成这一步就要让高端GPU集群连续跑上好几周。价值网络出现后MCTS里最耗时的“随机模拟到底”这个环节被替换掉了不需要真的下完一盘棋直接让价值网络看一眼当前局面就能给出一个评估结果回传作为搜索节点的统计信号。这个替换极大减少了搜索开销也让整个系统有机会在更长时间内进行更深入的搜索。4.3 AlphaGo架构三个组件如何配合外界提到AlphaGo总喜欢一句话带过“深度学习加蒙特卡洛树搜索。”但真正理解这个架构必须看清楚三个组件是怎么拧在一起的。搜索过程的起点是当前局面。AI会围绕当前局面展开一棵搜索树每到一个节点先用策略网络生成候选着法和各自先验概率然后进入MCTS的模拟环节。每模拟一次节点的访问次数就会更新。关键点在于最终选择走哪一手用的不是简单的模拟胜率而是要把策略网络给的先验概率和MCTS统计的访问次数联合计算。大致公式是综合分数 先验概率 / (1 当前访问次数) 探索系数。这样既尊重策略网络的知识又保留了MCTS通过反复访问得到的验证信息。价值网络参与的环节更有意思。在模拟对局中不需要把棋真的下到终局而是在模拟的某个节点上直接调用价值网络让网络估算当前局面的胜率把这个估算结果作为模拟结果回传给搜索树。这一步就把之前MCTS里“随机模拟两百手直到终局”的高开销操作压缩成了“看一眼就算完事”的低开销操作。用我实际跑项目的感觉来说策略网络决定AI“会不会下棋”价值网络决定AI“下得好不好”MCTS负责把两者结合起来通过反复推演寻找稳定可靠的落子。三者的配合有点像一位经验丰富的棋手策略网络一个冷静的形势判断师价值网络加上一台反复验算的分析引擎MCTS。缺任何一个都达不到击败顶尖职业棋手的水平。5. 落地复现中会遇到的实际困难以类AlphaGo项目为例很多人看完论文以为困难已经被彻底解决到自己动手复现一个简化版围棋AI时才发现困难只是换了一个形态出现。如果你想自己上手做类似项目下面这些坑几乎躲不掉。5.1 数据与算力门槛最直接的障碍是算力和数据。AlphaGo原始训练消耗的资源可以去看公开论文我只说实际体验即使只在9路棋盘上做一个极简版本也需要好几块GPU连续训练数天才能看到明显的棋力提升。一旦从9路升到19路棋盘自我对局的样本量至少要达到百万盘级别效果才可能显现。有人问能不能用公开的人类棋谱替代自我对局可以但效果明显差一截。公开棋谱质量虽高数量有限撑死几十万盘深度模型很容易就把棋谱背过拟合了。只有自我对局才能持续生成新样本让AI不断发现自己的弱点并修正。我每次线下分享都会强调围棋AI训练里训练数据的数量决定棋力下限自我对局机制的完善程度决定棋力上限。5.2 参数调优与过拟合第二个隐蔽困难是参数调优。策略网络和价值网络分工明确但训练时耦合非常深。我在实验里踩过的坑是策略网络收敛过快价值网络跟不上结果AI中盘阶段“会下”但“选不准”经常走出局部看起来很好、全局却明显落后的棋。解决这类问题通常要把两个网络的损失权重和学习率拉开让价值网络训练得慢一点、稳一点同时给策略网络增加探索噪声防止它过早收敛到局部最优。这套操作听起来有点玄学但在论文里极少写明完全得靠大量实验去摸。很多团队复现效果差不是模型有问题而是参数组合不对。5.3 评估与踩坑还有一个容易被忽略的点怎么判断AI的棋力真的提升了。直接找人类棋手对局成本高、效率低跟开源围棋AI对战又容易踩到“同源棋风”的坑——如果两个模型训练数据来源类似评估结果会失真。我自己常用的方法是构造一组固定测试棋谱覆盖不同类型的开局和局面让AI逐个复盘记录“决策一致率”和最终胜负变化。这样可以在不消耗大量算力的情况下快速判断训练方向是否正确。要特别提醒的是围棋AI训练里存在大量“假性提升”。某段时期输赢波动很大很容易让人误判为有效进展。应该盯住较长周期内的平均胜率而不是单盘棋的输赢。我在迭代过程中吃过这个亏只看单局结果调参浪费了差不多一周时间才发现是噪声干扰。注意训练类AlphaGo项目时建议把“评估集固定化”——测试棋谱一旦定下来就不要再变否则你无法分辨棋力提升到底是真实进步还是测试集变化造成的。6. 现在围棋AI还难吗换个角度看困难到今天围棋AI早就可以轻松战胜人类顶尖棋手不少职业棋手已经习惯用AI辅助训练。但要说“困难完全消失了”我不认同。过去那些理论层面的困难确实被解决了——搜索规模不再是不可逾越的障碍局面评估也找到了深度学习解法。可新的困难出现在工程层面和应用层面训练顶级围棋AI所需的算力、数据量、工程复杂度依然高得吓人不是普通个人开发者能轻松复现的围棋AI的强建立在大量自我对局之上跨到其他棋类或真实世界博弈场景时泛化能力依然存在明显局限。这几年也有人在研究小样本围棋AI想用更少的自我对局做出接近的效果但到目前为止还没有出现能颠覆现有范式的方案。在我看来围棋AI的“困难”其实没有被消灭只是换了一身马甲——从算法理论问题变成了工程成本、数据效率、泛化能力和项目落地问题。从这个角度讲理解围棋AI“难在哪里”对任何一个想进入AI领域的人都有特殊价值。因为它逼着你直面搜索空间、局面评估、自监督学习这些核心概念而不是停留在调包调参的表层。我带新人做项目时也总喜欢拿围棋当第一个实战任务把一个看上去不可能的难题拆解成可以一步步攻克的模块这种能力迁移到任何AI项目里都是通用的。我个人体会最深的一点是围棋AI的困难从来不是某一道算不过来的数学题而是“把模糊直觉变成可计算函数”的那道鸿沟。跨过它靠的不是什么神秘魔法而是对问题的拆解、对工具的合理组合以及大量耐心细致的实验验证。如果你正在准备动手复现一个类似项目希望这篇文章能帮你少走几步弯路——等你自己跑通一套简化版围棋AI的时候回头再看这些困难会特别有成就感。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/22 18:04:37
Linux C开发实战:环境搭建、编译链接、内存并发与调试技巧
2026/10/22 18:04:37
数学建模A题:论文与代码如何互为证据?
2026/10/22 18:04:36
多Agent自动编排开源Skill实测:一句话组队干活
2026/10/22 22:41:59
多态的基本认识和了解
2026/10/22 22:31:57
【Pytorch】Anaconda: 新建环境出现No module named ‘pip._internal.main‘
2026/10/22 22:31:57
【Tensorflow实战系列】Tensorflow:动态库的使用(头文件提取,Makefile链接动态库)
2026/10/22 22:31:57
PJ85718DM与PIC18F85J10协同的HVAC远程温度采集方案
2026/10/22 22:31:57
【CUDA】CUDA: (八) 使用 CUDA C/C++ 加速计算的基础 (NVIDIA 课程 Part one)
2026/10/22 22:31:57
【Pytorch】Pytorch: Automatic Differentitation (二)
2026/10/22 0:01:24
电商智能运营体系从0到1:架构设计、落地步骤与避坑指南
2026/10/22 0:01:24
压缩空气储能与热网热惯性联合优化调度:热电联产系统建模与求解
2026/10/22 0:01:24
若依框架AI代码生成不稳定?用Agent Skill三层结构+五步法搞定
2026/10/21 19:05:16
OpenResearch实战:Claude Code、Codex、OpenCode、Cursor 工作流搭建与故障排查
2026/10/22 17:15:21
知识管理核弹:用Obsidian构建第二大脑的工程化方案(TaoToken 统一 Key 接入版)
2026/10/21 19:05:04
金融AI落地指南:从调研报告到技术选型与工程实践
2026/10/22 5:06:15
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/22 2:07:18
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/21 19:01:08
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)