小型神经网络对决通用决策模型:一场卡牌AI的失败模式启示录

自建248k参数神经MCTS与通用模型Jev打成48比52,失败模式的互补比比分更有价值
一位开发者用一年时间从零构建了浏览器版炉石风格卡牌游戏及其AI系统,核心是一个248k参数的动作价值网络,结合MCTS进行决策。他将这个专用神经网络与通用决策模型Jev进行100场镜像对局,结果以52比48微弱胜出,但两者首选动作仅63%一致。通过反事实评估器对分歧点的深度解剖,暴露出两种截然互补的失败模式:神经网络在19个可斩杀局面中一次都未识别出致命一击,系统性低估即时打脸压力;Jev则在21个回合中提前结束、留下大量可用资源,不擅判断多动作回合的收尾时机。作者将神经网络的缺陷归因于输入特征的结构性不对称——棋盘表示极为丰富而动作特征仅15个,导致模型偏向学习"铺场是安全的"这类易学规律,而非"此刻可以一击致命"这类需要跨特征推断的战术信号。
一位以Drupal和Web开发为主业的开发者,用一年时间自建了一款浏览器版《炉石传说》风格卡牌游戏,并把它当作理解游戏AI机制的学习项目。他没有依赖成熟的机器学习框架,而是刻意保持依赖最小化,从状态表示、合法动作生成、MCTS搜索到神经网络评估逐一手工实现。这个过程本身已经足够硬核,但真正有价值的部分出现在他把自建的小型神经网络和一个通用决策模型 Jev 放在同一张牌桌上对弈之后——两者的失败模式,比最终比分更能说明问题。
一个248k参数的神经MCTS智能体
这套自建系统的核心是一个全连接的动作价值网络,结构为 1857 → 128 → 64 → 32 → 16 → 1,隐藏层使用 ReLU,输出层为线性,约有 248,705 个可训练参数。它估计的是状态-动作对的 Q(s,a) 值。
1857 个输入中,有 1842 个状态特征和 15 个动作特征。状态部分包含通用游戏特征、英雄身份向量、两个 768 维的棋盘嵌入(board embedding),以及经过哈希处理的手牌表示。值得关注的是,嵌入生成器与这个 248k 参数的打分器是分离的——也就是说,网络拥有一套极其丰富的棋盘表示,但描述候选动作本身的显式特征只有 15 个。这个不对称,后面会成为解释其行为偏差的关键。
训练策略也经历了演进。作者最初让网络对抗一个手写的启发式棋盘评估器,目的是给网络一个相对稳定的学习目标,快速拿到可用基线。当智能体不再随机行动、基本价值估计看起来合理后,他切换到自我对弈(self-play),让网络从自身版本生成的对局中学习,而不是继续模仿启发式规则。这个转变正是他最感兴趣的地方:从「网络能否逼近我手写的评估器」迈向「网络能否通过自我对弈自我提升」。
**MCTS(蒙特卡洛树搜索)**是一种基于随机采样的决策算法,广泛用于棋类和卡牌游戏AI。它的核心循环分四步:选择(从根节点按某种策略向下遍历)、扩展(在叶节点添加新子节点)、模拟(从新节点出发随机或启发式地走到终局,即"rollout")、回传(将模拟结果沿路径反向更新统计值)。当神经网络介入时,它通常扮演两个角色:用"价值头"替代耗时的随机rollout来估计局面胜率,以及用"策略头"输出各动作的先验概率来引导树的扩展方向,从而大幅提升搜索效率。AlphaGo/AlphaZero正是这一范式的标志性实现。本文的系统只使用了动作价值网络(Q值估计)而非完整的策略+价值双头结构,这也是作者后续提及"神经先验"与"均匀先验"对比的背景所在。
让通用模型公平上桌
对比的另一方是 Jev,一个通过 OpenRouter 暴露的通用决策模型。核心问题很朴素:一个通用模型,能否与专为这款游戏打造的小型神经网络掰手腕?
为了让比较有意义,作者重构了引擎,使合法动作生成成为规范化、独立于 MCTS 的模块。每个决策都被表示为一个有限的合法动作集合——打出一张牌、攻击某个特定目标、使用英雄技能、组合出牌与英雄技能,或结束回合。Jev 只接收玩家可见的序列化状态加上合法动作 ID,必须从中选一个。它自己做出每一个真实决策,包括攻击和选取目标,并且看不到对手的隐藏信息。这一设计保证了两者面对的是同一层抽象。
随后是 100 场镜像对局:双方使用相同卡组、固定随机种子、交换先后手。结果几乎是平局——Jev 48 胜,Neural-MCTS 52 胜。但真正引人注意的是,两者的首选动作只有约 63% 的时间一致。分歧比比分更值得挖掘。
将大语言模型(LLM)用于游戏决策时,一个核心工程问题是动作空间的结构化表示。原生LLM的输出是自由文本,而游戏引擎需要精确的动作ID;如果不加约束,模型可能输出幻觉动作(非法牌、不存在的目标)或格式错误。作者的解决方案——将合法动作枚举为有限集合并通过序列化状态传递——是目前学界和工业界的主流做法,有时也称为"constrained decoding"或"action masking"。这一设计同时解决了公平性问题:神经网络的输入是特征向量,Jev的输入是自然语言序列化的状态,两者面对的合法动作集合完全相同,消除了"神经网络因为见过更多非法动作而受惩"这类混淆变量。
用反事实评估器解剖分歧
为了理解那 37% 的分歧到底谁对谁错,作者构建了一个反事实评估器(counterfactual evaluator)。对每一个分歧点,他重建精确的决策状态,克隆两份,一份施加 Jev 的动作、一份施加神经策略的动作,然后从两个结果局面出发运行更深的无引导 MCTS。
最新一轮分析使用了 500 个分歧局面,分层覆盖全部 100 场对局,每次 10,000 次 MCTS 迭代,rollout 深度 20,重复三次,且不施加任何神经策略引导。整体反事实结果仍然接近,但战术层面的拆解暴露出两种截然不同的失败模式。
神经网络:系统性低估打脸压力
最强的信号出现在「打脸压力 vs 发展场面」的取舍上。有 105 个局面里,Jev 选择打脸动作而神经网络选择发展场面。深度 MCTS 在其中 92 个局面偏好 Jev,只有 3 个偏好神经网络,10 个平局。在更具体的子集中——Jev 攻击敌方英雄而神经网络选择铺场——共 63 个局面,深度 MCTS 以 53 比 1 偏好 Jev,9 个平局。
反向对比同样有趣:有 27 个局面 Jev 攻击敌方随从而神经网络打脸,深度 MCTS 在 25 个局面偏好神经网络。这说明问题并非评估器泛泛地偏向 Jev,而是神经策略系统性地过少选择打脸压力。
斩杀意识的结果更为强烈。500 个分歧局面中,有 19 个存在立即可执行的合法斩杀(lethal)。Jev 选中斩杀 16 次,神经网络选中 0 次,另有 3 次两者都没选。这虽是原始神经推荐、未必是完整 MCTS 搜索后的最终动作,但强烈暗示:斩杀压力在网络的表示或训练目标中不够显著。
作者的假设是:网络相对于「立即实现的伤害」,过度高估了「未来的场面发展」。它拥有极其丰富的棋盘表示,而只有 15 个显式特征描述候选动作。这让「场面属性更多就是好」这类概念极易学到,而「对手 6 血、我已有 7 点攻击力可用,该停止发展直接击杀」这类关系只能被间接推断。
Jev:不知道回合什么时候该结束
Jev 几乎有着相反的弱点。有 21 个局面 Jev 选择结束回合,而这 21 个局面里全都还有其他合法动作可用——16 个仍有可打的牌,5 个仍有合法攻击,剩余法力值中位数为 5。深度 MCTS 在全部 21 个局面都偏好神经网络的替代方案。
独立的英雄技能选择也暴露出类似的序列化问题。当 Jev 选择使用英雄技能、而神经网络选择铺场随从时,深度 MCTS 在 29 个局面中 29 次偏好神经网络。
于是整幅图景异常清晰:神经网络偏向发展、低估即时打脸;Jev 更擅长战术侵略性,却拙于判断一个多动作回合究竟何时才算真正结束。这两种弱点恰好互补,最终产生了 48–52 的近乎平局。
反事实评估(counterfactual evaluation)的思路来自因果推断:为了衡量某个决策的真实质量,需要在同一初始状态下构造"如果选了另一个动作会怎样"的对照分支,而不是仅依赖实际对局的最终结果。在游戏AI中,这通常通过从分歧节点分叉出两条独立模拟路径来实现。本文的关键设计是使用无引导MCTS(即均匀先验、不带神经网络偏置的纯蒙特卡洛搜索)作为裁判,目的是让评估本身不受任何一方模型的策略偏见影响——如果用神经网络自身去评估自身的动作,结论将循环自证。这种方法的代价是计算量极大(每个分歧点需要独立运行数千次迭代),但换来的是相对中立的第三方视角,使"谁的动作在深层搜索下更优"这一问题有了可操作的答案。
一个连自评估器都被暴露的实验
这次实验还顺带暴露了作者自己评估器的缺陷:非终局启发式偶尔会给出超过真实终局胜利的分数。他因此调整了价值刻度,让终局结果严格占据主导地位——这是一个容易被忽略、却会污染整个训练目标的细节。
接下来的计划很有条理:在把网络做大之前,先检查神经特征和训练目标;如有必要再加入更显式的战术信号;然后在相同搜索预算下,比较使用均匀先验、神经先验和 Jev 派生先验的 MCTS。作者尤其感兴趣的是根节点专属的 Jev 引导——由 Jev 对合法动作提供一次先验,之后由本地 MCTS 完成真正的搜索。
他抛给社区的问题也颇具启发:打脸信号的缺失,究竟更像是表示问题(representation problem)、训练目标问题(training-target problem),还是两者兼有?是否应该加入 isLethal、immediateFaceDamage、remainingAttack 这样的显式特征,还是保持表示的原始性、迫使网络自行推断?
比分之外的价值
这个项目最初只是为了自学游戏 AI 系统如何运作,但最有意思的结论是:当两个智能体强度足够接近时,它们的战略失败模式比记分板更有信息量。一个拥有丰富表示却缺乏动作显式信号的小网络,会自然地滑向「铺场是安全的」这种局部最优;一个通用模型虽有敏锐的战术直觉,却在多步动作的收尾序列上暴露短板。
对任何在做决策系统的人来说,这里的启示超越了卡牌游戏:模型能学到什么,很大程度上取决于你给了它多少显式的、与目标直接相关的特征,以及训练目标是否让「真正重要的结果」占据主导。项目代码开源于 GitHub(seutje/wow-legends),也可在线试玩——想对战 Jev 的话,需要自备 OpenRouter 密钥。
相关推荐

腾讯WorkBuddy实测:AI Agent如何碾压传统聊天助手
腾讯WorkBuddy实测对比豆包:AI Agent如何直接操作电脑完成PPT转PDF、文件归档等任务。从安装门槛、国内生态、价格、插件市场四方面分析WorkBuddy优势,并给出AI Agent选择建议。

奥特曼称个人PC囤RAM“相当糟糕”,数据中心利用率更高
OpenAI CEO萨姆·奥特曼在Reddit引发热议的表态中称,个人PC配备大量RAM是“相当糟糕”的资源利用方式,数据中心凭借集中调度能实现更高内存利用率。本文解析这一观点背后的技术逻辑与行业信号。

付费5美元教AI说话:一场关于AI训练本质的社会实验
一位开发者搭建了运行真实语言模型的「假AI实验室」,用户支付5美元即可教模型一句话。这个社会实验揭示了AI训练中数据成本、用户参与和话语权的深层关系。