2016年3月那场 AlphaGo 与李世石的对局,我到现在都记得当时的弹幕如何从“这棋也能下?”变成“原来这棋真的能下”。AlphaGo 执白落下的第37手是棋盘左上角一个出人意料的“五路肩冲”,职业棋手当时普遍觉得这是坏棋,可 AlphaGo 就这么赢了。多年后,AlphaGo 核心作者 David Silver 在一场分享里说了一句让我印象极深的话:十年了,LLM 还是没有学到那盘棋局里“神之一手”的精华。
这句话让我这个常年做 LLM 应用落地的人坐不住了。今天写这篇文章,我想从模型架构、训练方式和工程落地三个角度,认认真真拆一下:为什么“下一个 token 预测”这件事,至今难以复现 AlphaGo 那种“破局感”,以及这对我们这些做智能体、做可靠性系统、做模型评估的人到底意味着什么。这篇文章不打算写教科书式的原理,更多是把我踩过的坑、实验过的方法、读过的论文消化之后重新讲一遍。
1. 先从第37手说起:什么是 AlphaGo 的“神之一手”
1.1 那手棋不是“灵感”,而是被搜索出来的反直觉最优解
很多人把第37手理解成 AlphaGo 忽然有了创造力,这是不对的。回到那个对局:AlphaGo 执白,李世石执黑,双方在开局阶段走了几十手,局面看起来还在常规框架里。AlphaGo 的第37手没有按人类的定式去“肩冲”在常见位置,而是落在一个五路高位上。观战室里几乎所有职业棋手的第一反应都是“怪手”,甚至有人觉得 AlphaGo 出 bug 了。
可事实恰恰相反,AlphaGo 不是拍脑袋想出这一步,而是在蒙特卡洛树搜索里反复推演过后续几十手的变化。对这步棋,当时李世石和众多解说的“直觉判断”是它不符合棋理;AlphaGo 的“全局胜率判断”是它让白棋的长期胜率上升。两边都在判断,区别在于:人类依赖的是积攒了几十年的棋谱经验和形状直觉,AlphaGo 依赖的是把每个候选点展开后逐步回溯的胜率估计。
真正让我后背发凉的,不是这一步棋本身,而是它背后的计算逻辑:AlphaGo 把“下棋”看成了一个可以无限展开、可以回溯、可以评估的过程,而人类通常把“下棋”看成一个需要凭着经验和形做出快速反应的决策。第37手之所以被称为“神之一手”,是因为它跳出了人类经验那个分布区间;但对 AlphaGo 来说,它只是搜索树里被评估出来的一个正常节点。
1.2 人类把所有意外都叫“神之一手”,AlphaGo 却把它做成了日常
AlphaGo 核心作者这几年的观点其实很一致:如果一件事只能靠“灵感爆发”完成,那它就没有被真正掌握。AlphaGo 不是靠灵光一现赢棋的,它靠的是机制,是策略网络、价值网络和搜索三者的协作,使“反常规决策”成为系统每天都会做的事。
对比一下今天的 LLM,就会发现一个扎心的相似性:人类棋手受限于“棋谱”,习惯了在人类常见的落子频率分布里做选择;今天的 LLM 受限于“互联网文本”,学会了在人类常见的词汇组合分布里做选择。人类看到第37手会惊讶,是因为那超出了人类棋谱的经验范围;而 LLM 面对真正需要跳出训练分布才能解决的问题时,同样会退缩到“最常见的回答”里。
有一次我在一个数学推理问题上测试一个大模型,模型给出的答案很流畅,但结果完全算错了。流利度很高,逻辑链条很完整,每一步看起来都“像那么回事”,可最终结果就是错的。那一刻我突然理解 David Silver 的话:LLM 还没学会 AlphaGo 的“神之一手”,不是因为它不够聪明,而是因为它没有一套机制,能在大脑里先做几十次“试错搜索”,再选出真正的破局答案。
2. AlphaGo 真正的内核:策略网络、价值网络与搜索三件套
2.1 策略网络负责“直觉”,价值网络负责“判断”
我们先把 AlphaGo 的老底翻出来。2016 年那版 AlphaGo 有两套核心网络:策略网络和价值网络。策略网络要做的事非常直接:看到当前棋盘状态,输出每个可落子点的概率分布,哪些点值得优先考虑。你可以把策略网络理解成一个“快速阅读器”,它不负责想得很深,只负责快速筛选出候选路线。
价值网络则完全不同。它不看具体招式,而是看当前整个局面,输出一个 0 到 1 之间的实数,表示“这个局面最终获胜的概率有多大”。策略网络负责“哪里值得想”,价值网络负责“这个局面向不向好”。
这里有一个对 LLM 极其重要的教训:策略网络和价值网络是分开训练的,职责也完全不同。下围棋时,你不能只靠“感觉哪手棋更好”来赢棋,你还需要一个能对最终胜负给出冷静判断的评估器。反观今天的 LLM,生成回答的能力很强,但判断自身回答到底好不好的能力,基本上是从人类偏好标注里学来的,并没有一个独立的、稳定的“价值网络”挂在旁边。
2.2 蒙特卡洛树搜索:把“直觉”和“判断”串成一个可回退的循环
策略网络给出候选点,价值网络给局面打分,那这两者怎么衔接?靠的就是蒙特卡洛树搜索——MCTS。用大白话说,MCTS 把棋盘上的各种可能走法看成一棵树,从根节点开始,反复执行四步:
- 选择:从当前节点往下挑一个最有潜力的分支;
- 扩展:走到一个没探索过的局面时,把新落子点挂到树上;
- 评估:用价值网络或者快速走子,判断这个新局面的好坏;
- 回退:把评估结果沿路径传回去,更新每个节点的胜率估计。
这四步循环几十次、几百次之后,树里每条路径的胜率越来越准,最后选取胜率最高的落子点。AlphaGo 第37手能成为神来之笔,不是因为策略网络自己想出来的,而是因为 MCTS 在那个节点上展开了大量后续变化,发现这条路线的长期胜率很高。
这个机制最重要的特质是:它可以后悔。它可以在搜索过程中发现一个分支不好,然后回头走另一条路。它不需要一次决策定生死,而是通过反复演练来逼近最优解。这种“可回退”的决策方式,在今天的 LLM 推理里几乎是缺失的。
2.3 AlphaGo Zero 的版本才是真正的“自我进化”
到了 AlphaGo Zero,DeepMind 把架构进一步简化了:策略网络和价值网络合并到一个网络里,两个输出头,一个输出下一手概率,一个输出当前局面胜率。同时彻底去掉了人类棋谱学习,完全靠自我对弈从零开始训练。
这版架构更接近人类棋手所说的“棋感”:同一个神经网络,既负责快速直觉,也负责最终胜负判断,中间再用搜索把它们衔接起来。AlphaGo Zero 拥有的是一种持续自校正的循环:先下,再评,再复盘,再改进。它不迷信任何人类棋谱,只相信搜索之后验证过的结果。
我把 AlphaGo 和主流 LLM 的核心差异做了一张表,后面几节会反复用:
| 维度 | AlphaGo Zero | 当前主流 LLM |
|---|---|---|
| 训练目标 | 最大化对局终局的胜率 | 最大化下一个 token 的预测概率 |
| 训练信号 | 自我对弈产生的真实胜负 | 人类互联网文本、偏好标注 |
| 推理方式 | MCTS 多步搜索、回溯评估 | 自回归一次采样 |
| 是否有价值网络 | 有,专门预测终局胜率 | 无稳定独立的价值网络 |
| 能否回退重来 | 能,搜索会剪掉差的分支 | 基本不能,生成完就结束 |
| 对“分布外”的处理 | 探索到新路线后验证它 | 倾向于回到训练分布的平均答案 |
这个表格不是贬低 LLM,而是帮我们看清:LLM 现在最擅长的,是从已有文本分布里快速生成一个“看起来合理”的序列;AlphaGo 最擅长的,是在未知决策空间里搜索出一条“被验证过”的最优路径。两者本质上不是同一种智能。
3. 现在的 LLM 到底缺了哪几个关键零件
3.1 下一个 token 预测,本质是在拟合人类文本的平均分布
我们先把 LLM 的训练目标摊开看。预训练阶段,模型做的事情就是根据前文预测下一个词的概率分布,然后通过梯度下降不断降低预测误差。这意味着,模型在训练时学到的,是“人类在类似上下文中通常会说什么”,而不是“在真实世界里怎么做才能得出正确答案”。
这带来一个直接后果:LLM 天然偏向训练数据中的众数答案。你给它一个开放问题,它给出的回答大概率是所有人写过的同类回答的“平均数”,是那个最不冒尖、最常见、最近似人类常见说法的答案。
这跟 AlphaGo 用胜率做优化目标完全不同。AlphaGo 不看“人类通常怎么下”,只看“怎么下才能赢”。当你只有一个预测下一个词的分类器,而没有“最终结果对不对”的验证信号时,模型就不可能形成真正的“破局”能力。它更像一个看过无数棋谱、能模仿各路棋风的棋手,但少了“亲自在棋盘上验证一手棋到底能不能赢”的闭环。
我见过很多团队花大量时间收集高质量数据微调模型,希望把模型调得更“聪明”。但只要你还在用“预测下一个词”这种目标函数,微调本质上还是在把模型推向一个更精准的“文本分布拟合器”。你可以让它更像某个领域的专家,却很难让它产生 AlphaGo 式的探索与验证行为。
3.2 缺少价值网络:LLM 只会“给答案”,不擅长“判断答案值不值得信”
AlphaGo 的价值网络给它提供了一套不依赖人类棋感的判断标准:终局胜率。无论你这手棋看起来多怪,只要价值网络和搜索判断它能提高胜率,它就敢下。反过来,一条路线就算看起来很符合人类棋理,只要胜率不高,也会被剪掉。
LLM 没有这个机制。它的训练过程中即使有 RLHF,使用的奖励模型也是从人类偏好标注里学出来的,往往只能对整段回答打一个粗糙的分,而且这个分经常不知道到底错在哪一步。更要命的是,在推理阶段,大多数应用中我们直接把 LLM 的生成结果当作最终结果,根本没机会对它做一次“终局验证”。
这就是 LLM 幻觉的根源之一:模型缺少一个稳定的内部判官。它不知道自己刚生成的段落里暗藏了一个事实性错误,因为它没有能力把自己生成的文本拉回真实世界做交叉验证。它就像一个下棋只靠直觉、从来不复盘收官阶段的棋手,开局风生水起,中盘露出破绽,终局一败涂地。
3.3 缺少搜索:自回归一次采样,没有“回退重来”的出口
AlphaGo 下棋时,会展开数百次模拟,发现某个分支不对就放弃它,回到上层节点换一个分支继续探索。这种“回退”能力是决策质量的保证。而 LLM 生成文本时,是自回归式逐 token 生成的,一旦生成了前面的内容,后面就只能顺着走。遇到中间出现逻辑错误,模型没有能力回到错误节点重新生成,只能在错误基础上硬着头皮继续编。
有人会说,beam search 不也是在多个候选里做选择吗?但 beam search 本质上还是从左到右的搜索,它只在固定窗口里保留高分候选,不存在 AlphaGo 那种“展开一条完整路线再回溯修正”的机制。还有人会提到“重新生成一次”,但那只是随机采样后再跑一遍,并不是在一个决策树上做系统的广度优先或深度优先搜索。
我在做智能体工作流时踩过一个很典型的坑:让 LLM 写一段 JSON 配置,模型第一次生成结果里有一个字段名拼错了,整个解析失败。我最初的处理方法是让它重新生成一次,结果第二次第三个字段又错了。后来我改成了“解析失败时,把错误信息直接告诉模型,让它只修复那一个字段”,成功率才上去。这说明什么?说明 LLM 需要外部环境给它反馈,它才具备“后悔”和“修正”的能力。它自己内部没有这个回退机制。
4. 已经有人尝试把 AlphaGo 的公式还给 LLM
4.1 搜索型推理:从思维树到推理时计算
近两年有不少研究在尝试把 AlphaGo 的搜索机制移植到 LLM 上,最典型的就是 ToT,Tree of Thoughts。它的思路是:把一个复杂问题拆成多个中间步骤,每个步骤生成若干个候选,再用广度优先或深度优先的方式搜索路径,遇到明显走不通的分支就剪掉,最后选出一条最优路径。
另一个更接近 MCTS 的方向是 LATS,语言智能体树搜索。LATS 把 LLM 当成策略网络,让它生成多个候选动作,再让环境给出反馈,把反馈当成价值信号,再用蒙特卡洛树搜索的原理把候选动作组织成一棵树,反复探索、回溯、选择最优动作。这个架构跟 AlphaGo 已经非常像了。
而 OpenAI 的 o1 系列和 DeepSeek R1 这类推理模型,实际上也在做类似的事:它们用强化学习训练模型,在生成答案的过程中不断产生中间思考步骤,并通过内部奖励信号学会在“思考路径”上自我修正。你可以把这种隐式思考过程理解成 LLM 自己学着去执行一个更长的搜索流程。
我自己的实测感受是:这类模型在数学推理和编程任务上,确实比普通模型强很多,尤其是在测试时计算投入充足的场景里。它们开始表现出一些 AlphaGo 的特质,会自我质疑、会往回修正、会在多条候选路径中选择更稳妥的方案。但要说明的是,它们仍然没有完全做到 AlphaGo 那样“生成-评估-搜索”的显式闭环,更多时候还是靠训练阶段隐式习得的搜索习惯。
4.2 用强化学习重建价值信号:把“生成”和“验证”绑成闭环
过去一年让我最兴奋的方向,是把验证器引入训练和推理流程,让模型不再只凭概率生成答案。典型的做法是为数学题、代码题准备一套可执行的验证器:模型生成答案之后,系统去执行单元测试、去核对符号推理的中间步骤,然后把对错反馈给模型,让模型改进。
这里有一个关键差异:AlphaGo 的价值信号来自“终局胜负”,是真实且确定性的;而 LLM 在很多应用场景里,很难拿到真实且确定性的反馈。你让模型写一篇总结,谁来给它打分?你让模型规划一次旅行,什么算“赢”?正因为价值信号不明确,我们才需要人为构造验证器。
我在实践中比较推荐的组合是:代码类任务交给单元测试,数据类任务交给规则校验,数学类任务交给符号验证器或者独立模型交叉验证。只有把“生成答案”和“判断答案”之间的那条路修通,LLM 才可能在一次推理循环里发现自己的问题然后修正,而不只是被动地赌一次运气。
4.3 过程监督与 LLM-as-judge:别让同一个模型又当运动员又当裁判
现在很多人会直接用 LLM-as-judge,用模型给模型打分。这个思路有可取之处,但有一个致命问题:如果你用同一个模型生成答案,再用同一个模型打分,它很可能因为偏向自己的表达风格而给出虚高评价,这不是机制层面的闭环。
AlphaGo 的价值网络虽然也是模型,但它监督的目标是外部世界的真实胜负结果,而不是“自己觉得舒服”。所以,更可靠的工程做法是把生成模型和评估模型分开:生成器专注提出候选方案,评判器基于一套独立标准做判断。我见过不少团队喜欢让一个模型既写代码又审查代码,结果漏洞一个都没看出来,因为深度相同的模型在用几乎相同的模式犯错。
另外,针对智能体的安全性,现在有个热门话题叫 AgentPoison,大致是说攻击者可以往智能体的记忆库或知识库里注入恶意样本,诱导模型在检索时被骗。这恰恰暴露了 LLM 缺少 AlphaGo 那种“终局验证”的问题:AlphaGo 就算看到一手奇怪的棋,也会先展开搜索再判断优劣;而 LLM 一旦通过检索命中了一段毒化文本,往往就直接采信并写进回答里。
5. 落地建议:如何在自己的 LLM 项目里注入 AlphaGo 的基因
5.1 把“生成一次”改成“生成-评审-重跑”的循环
第一个工程建议最直接:不要接受 LLM 的第一次输出,除非这个问题足够简单。把它改造成一个循环,哪怕只是三层结构:
- 第一轮:让生成器输出候选答案;
- 第二轮:让一个独立的评审模型或规则校验器检查答案,指出问题和原因;
- 第三轮:把检查结果喂回生成器,让它修改并重新生成。
这个改动非常小,但效果立竿见影。我在一个合同信息抽取项目里,直接把单次抽取改成“抽取-校验-重抽”的循环,字段级别的准确率提升了差不多十二个百分点。原因很简单:模型第一次抽取时偶尔会漏掉某个字段,但当你把“缺了哪个字段、应该长什么样”明确告诉它之后,它修正起来非常稳定。
如果你想要更深一层的效果,可以参考 AlphaGo 的思路,在循环里设置一个“搜索预算”:同一道题,预算允许的情况下让模型尝试多轮候选,每一轮保留有价值的中间结果,最后综合选择一个整体最优的答案。
5.2 给智能体加“状态验证器”,而不是盲目信任记忆和工具
做智能体系统的朋友应该深有体会:LLM 只要多接几个工具、多几轮上下文,出错的概率指数级上升。工具返回的结果可能格式不对,记忆里可能藏着检索到的垃圾信息,上一轮的中间状态可能已经污染了后续判断。
AlphaGo 给我们的解法是:每一步决策都要有评估点,而不是靠一个概率网络一路走到底。落到智能体工程里,就是给每个关键步骤加状态验证器。模型调用工具前,先验证一下输入参数是否合法;工具返回后,验证一下结果是否符合预期;进入下一轮之前,再确认一下历史上下文里有没有自相矛盾或明显错误的信息。
这个思路也适用于我们常说的智能体容错控制。你不可能指望 LLM 永远不出错,但你可以通过外部验证器,把错误控制在局部范围内,避免它沿着错误上下文一路蔓延。有了这道验证防线,即使模型犯了错,系统也能及时发现、回退、重试,而不是把错误结果交付给用户。
5.3 用失败复盘做训练数据和评测集,模拟 LLM 的自我对抗演练
AlphaGo 之所以能不断进化,是因为它一直在自我对弈,反复用输棋的教训修正策略。LLM 也可以借用这个思路,只不过它的“对弈”对象是历史失败案例。具体做法有两个层面:
第一,把线上真实发生的失败案例收集起来,清洗后作为数据增强注入微调。模型答错了一道题,下一步不是简单地在同样的题上重新训练,而是把“当时的错误答案、错误原因、修正过程”一起整理成样本,让模型看到完整的校正路径。
第二,构建对抗评测集。很多团队把测试集固定下来测试模型,这当然必要,但你还需要一组持续更新的对抗样本,专门挑模型容易犯错的知识点来攻击它。就像红队测试那样,不要只测模型擅长的,要专门测它不擅长、容易忽略的边界。这个思路在评测大模型能力时尤其重要,它能让你更早地暴露出模型“纸面很强、实际翻车”的问题。
6. 这才是“神之一手”的精髓:机制,不是灵感
我把 AlphaGo 那件事想了很多遍,最后得到的感悟是:AlphaGo 的真正贡献,不是下出了某一步惊世骇俗的棋,而是证明了“反直觉、反分布的选择”可以通过机制被稳定地生产出来。人类把第37手叫神之一手,是因为我们默认这种事靠天才、靠直觉、靠偶然;AlphaGo 告诉我们,这种事靠搜索、评估和回退就能做到。
LLM 到现在还没学到这一点,不是技术实力不够,而是架构定位不同。它天生是一个文本分布模拟器,不是一个决策问题求解器。但好消息也很明显:我们已经看到很多系统层面的努力,把验证器、搜索、强化学习这些 AlphaGo 的“零件”一个个装回到 LLM 周围。用不了太久,也许我们真的能看到 LLM 在众多真实任务里,稳定地找到自己的“第37手”。到那个时候,它不只是更会说话,而是真的更会思考了。