在这条路径上,FlyA 已经达到天凤十段、安定段位天凤位水平。本文讲的不是它有多强,而是它为什么这样选——在每一个分岔路口,我们放弃了什么,保留了什么,以及我们认为什么才是真正重要的设计判断。
引子:麻将 AI 的两条主流路径
麻将 AI 在学界与工业界长期存在两条主流思路。
第一条是在离线阶段就引入价值加权。 它在让模型学习人类牌谱的同时,用某种形式的对局结果——终局顺位、点差、或者学习得到的期望收益——回头给牌谱里的动作重新打分。DQN / CQL 式的离线强化,以及 AWR、IQL 这类更温和的加权变体,都属于这一类。它们共享一个假设:既然最终要优化胜率,不如趁着离线训练就把"什么是好的"这件事告诉模型。这条路线最纯粹的形态是全部训练都在已有牌谱上完成,不进入自对弈,价值信号完全来自对离线数据的回溯。
第二条是在线结果导向强化。 它从一个训练好的基座出发,让模型进入自对弈,用对局最终收益作为策略梯度的信号源,持续放大赢的动作、抑制输的动作。典型流程是先用人类牌谱做监督学习,再进入自对弈强化,中间用一个全局收益预测器把"这一局到底算好还是坏"折算出来,有的系统还会在对局时做运行时策略调整。PPO 系的自对弈强化也属于这一类。
现实中的系统往往两条都沾:先在人类牌谱上做离线加权,再接上在线自对弈继续提升。这是目前最成熟的工程组合,也正因为成熟,它把两条路各自的问题都一并继承了下来。
FlyA 两条都试过。
我们训过离线加权版本,也按主流方案的样子把"离线打底 + 在线自对弈"完整走完了一遍。结果的前半段相当漂亮:自对弈大幅超越了离线 baseline,段位与收益都有明显提升。但在剥削测试里——让一个专门针对目标模型弱点的对手来打——无论加权基座,还是自对弈之后大幅变强的版本,弱点照样能被稳定找到。段位上去了,可被针对这件事却没有变。
这让我们意识到,撞上的不是一个需要继续调的数字,而是一个需要更换的目标。而换目标这件事,一旦想透,就会发现它顺带否掉了整条流水线。
于是有了第三条路:我们不再在"离线打底 + 在线增强"这条流水线上换算法,而是把训练线整个拆开。
一支是忠实模仿:严格学习人类高手的策略分布,不做任何形式的价值加权,也不在后面接任何结果导向的增强。它保持纯粹,并因为纯粹而有了别的模型替代不了的用处。
另一支是无憾路线:追求强度的那一支不再从模仿基座出发,而是用无憾算法从零开始自对弈——这就是 ZERO。它以纳什均衡为方向、以可剥削性为尺度,不把"赢更多"当作目标,而把"留下更少可被利用的弱点"直接写进训练目标里。
一、模仿这一支:忠实是唯一的要求
模仿这一支要回答的第一个问题是:在这种局面下,高水平的人类玩家会怎样选择?
不是"应该怎样选才能赢更多"。这两个问题看起来只差一步,但这一步的差距是根本性的。
离线加权的麻烦在于信号本身。从一手弃牌到终局顺位之间,隔着几十手对手动作、几十次摸牌、若干次庄家连风的变化。用这么嘈杂的信号去反推一手的好坏,神经网络很容易把一些本来无关的特征抓出来,当成"成功原因"。
一次冒险立直恰好和了,一次合理守备恰好放铳——这些都不该改写训练信号。但离线加权恰恰做了这件事:它让一局的结局,回头去修改模型对"当时那手该怎么打"的理解。噪声和捷径被一起烤进基座,而且一旦烤进去,后续的在线增强很难再把它们拿出来。
FlyA 的模仿路线不这样做。主策略只学一件事:在给定可观测信息下,人类高手的条件策略分布——各个合法动作分别有多大可能被选择。它不看这一手的终局收益,不看顺位,不看点差,不看任何形式的回溯价值信号。
这个看起来"退回去"的决定其实很关键。把离线主策略约束在纯行为学习上,等于主动放弃了用噪声信号塑造动作的诱惑。而且真正重要的从来不是"高手最常打什么",而是"高手在相近条件下如何分配他们的选择"——这个分布本身就是长期经验的表达,应该被完整保留,而不是被单局胜负反复修改。
先学清楚人类怎么打,再换一条路线研究怎样打得更好。让这一阶段保持纯粹,才能得到一个真正承载人类经验的策略基座。
数据纯度:从动机层识别 AI
但忠实模仿有一个前提——数据本身必须忠实。
今天的在线牌谱已经不再是纯粹的人类记录。开源模型可以被任何人部署,AI 复盘服务的建议正在实际影响人类的选择,历史上也留下了若干研究性 AI 的对局。这些痕迹一旦混进训练集,模型学到的就不再是"人类怎么打",而是"人类和各种 AI 的混合体怎么打"——这条路线赖以成立的纯度,从根基上就被破坏了。
麻烦的是,这件事没法靠逐手对照来解决。一个 AI 的弃牌单独看起来通常都很合理,甚至比人类更合理。差异不在单手,而在分配选择的方式上。
FlyA 因此设计了一套不在动作层、而在动机层工作的识别算法。它不去检查某一手是否吻合某个已知模型的输出,而是识别不同系统在相似局面下留下的系统性指纹——人类策略分布与 AI 策略分布之间那些微妙但持续的差异。每一种 AI 在训练中都长出了自己的决策动机结构,这种结构会在足够多的对局里留下可被捕捉的痕迹。
我们用超过一千个账号、数十万张牌谱构建了带标注的测试集,其中混入了已知的多个开源与商用麻将 AI 系统的对局记录,覆盖目前主流的几种训练范式。实验结果是:这些系统的特征无一例外被精准捕捉并筛除,同时人类账号没有被成批误伤。剔除被识别的账号之后,我们确保进入训练的数据集是干净的。
你要忠实模仿的,是人类的策略分布,不是已经被别的 AI 拟合过的策略分布。
二、让模型像理解语言一样理解麻将
学什么之外,还有一个更基础的问题:模型看到的世界是什么样子,以及它被允许用什么方式去理解这个世界。
这一节讲三件事——决策过程里应该有什么,输入层应该给什么,训练时应该额外要求什么。它们不属于某一条训练线,而是两条线共用的地基。
2.1 决策里应该有一个中间层
麻将 AI 常见的做法是把决策当成一个映射问题:喂进一个观测张量(OBS),输出一组合法动作上的概率分布,一步到位。模型看见一个压平的状态,产生一个 mask 后的权重向量,决策就结束了。
FlyA 的主干是 Transformer + MoE 架构。把牌局 token 化、用注意力建模上下文,并不是我们独有的选择,这个路子已经有人走过。真正的分歧不在骨干用什么,而在决策过程里是否存在一个中间层:模型是从状态直接跳到动作,还是先形成对局面的理解与倾向,再把倾向翻译成动作。
手牌、牌河、行动历史与局况被组织为 token,通过可学习的向量嵌入映射进连续表示空间。注意力层逐步整合上下文——同样一张弃牌,出现在不同巡目、不同弃牌顺序、不同分数条件下,可能意味着完全不同的事情。多头自注意力在不同的表示子空间里并行学习信息关联,捕捉跨巡目、跨玩家与跨事件的依赖。
在这之上,FlyA 让潜在表征承载决策倾向,再由一个动作"翻译器"结合当前的合法动作约束,把倾向转化为具体动作的概率。同一种防守倾向,在不同牌局里可以对应完全不同的弃牌;同一个弃牌动作,也可能由完全不同的局面判断所支持。这个中间层是我们认为最重要的东西:它让"为什么这样打"和"具体打什么"变成两件可以分开观察的事。
如果借用"思维链"的说法,可以把这个过程理解为一条在向量空间里展开的思路:嵌入形成基础表示,注意力交互建立上下文联系,潜在表征承载决策倾向,策略输出完成动作映射。这只是一个帮助理解的比喻——它描述的是同一次前向计算内部的组织方式,不对应语言模型那种可以逐段读出来的显式推理过程。模型不是看见状态就反射性地给出反应,但它也不会在推理时"想更久"。
当决策过程本身有了结构,模型才有空间在这个结构里,长出人类棋手复盘时才隐约触及的那些认识。
2.2 参数分工和混合策略是两件事
FlyA 用 MoE(Mixture of Experts,混合专家)组织参数模块之间的协作。从功能视角看,决策可以概括为"阅读—组织—翻译":阅读局面提取上下文关系,组织信息形成潜在倾向,再把倾向翻译成动作分布。这些职责的计算量和性质并不相同,让不同参数子空间形成互补的表达能力,是我们采用 MoE 的理由。
需要说清楚的是,这是一种功能视角的描述,不是说训练出来的每个专家真的会挂上"阅读""翻译"这样的标签。路由是学出来的,语义分工是否干净、边界落在哪里,都不是设计时能直接规定的事。
更需要说清楚的是另一件事:专家参与计算的权重,和最终动作被选择的概率,是两种完全不同的量。 模型内部可以调用多种能力,最终仍然只输出一个统一的条件策略分布;某个动作获得较高概率,并不意味着有相应比例的专家在"投票"支持它。
MoE 提供的是参数分工,混合策略提供的是行为表达。前者帮助模型组织能力,后者让进攻、防守与其他选择能够以适合当前信息的比例共存。它们在 FlyA 中协同工作,但采用 MoE 本身不构成任何关于策略性质的保证——把架构选择当成博弈性质的证明,是一种相当常见的误读。
2.3 先验当工具用:算事实,不算价值
这里有一个类比。现代大语言模型要做数学计算时,会去调用计算器——确定性的计算不需要浪费神经网络的梯度,确定性工具天然比学习更适合干这件事。没有人要求语言模型通过梯度下降学会乘法表。
FlyA 在麻将上采用同一种逻辑。一个模型在决策前,应该能够直接看见规则允许它看的所有事实:每张牌还剩几张、当前能否立直、当前是否处于振听、立直后是否被锁摸切、不同和牌路线的距离、各种时点性规则是否生效……这些都是规则本身就能直接回答的事情。
FlyA 把这一层事实组织成一个统一的输入层(内部称为 RO,Rule Oracle)喂进模型。它的设计姿态很明确:
- 只提供事实,不提供价值预判。 它不会告诉模型"这张牌值不值得打",只告诉模型"打这张牌在规则上是合法的,以及与规则直接相关的各种标记"
- 尽可能消除需要模型重新发现的信息。 哪些牌已经从自家视角消失、振听状态、立直后的动作空间收缩,这些都是规则一看就知道的事,没必要让模型自己从上下文里猜
- 所有价值判断都留给神经网络自己做
这和一些系统的方向是相反的。业内有一类常见做法,是把某种单人期望值预计算——各路线的进张数、期望点数、听牌步数,乃至由专门的单人麻将求解器枚举出来的期望收益——也当作输入特征喂给模型。最纯粹的形态是让显式的期望值计算直接参与决策,更常见的形态则是把这类预计算结果当特征回喂神经网络,让它在已经算好的价值之上做微调。
FlyA 不走这条路。原因不是"这些数算得不准",恰恰相反,它们往往算得很准。问题在于任何形式的预消化价值都会在训练中悄悄成为天花板:模型越依赖预消化信号,就越少真正理解牌局的结构。当你把期望值算好喂给它,它就不必再去发现这些路线之间的权衡了——它会学会读你的答案,而不是学会自己思考。
规则负责算确定性事实,神经网络负责做价值判断。这条边界我们希望划得尽可能清楚:梯度应该花在真正需要判断的地方,既不浪费在重新发现那些本来确定的事实上,也不偷懒去抄一个已经算好的价值信号。
2.4 辅助头:隐式塑形
光靠纯行为克隆,模型学到的是"像人一样打"。要让它有机会"打得比人更好",需要在表征层面多做一件事——让它学会思考人类打麻将时该思考的那些维度,但又不通过结果奖励去做这件事。
FlyA 的模型在预测主策略的同时,还被要求预测一组与麻将有关的事实性判断:对手是否听牌、自家未来几巡的路线走向、一手的近程风险、终局名次概率等等。这些辅助头只在训练期作为辅助损失存在,从不参与推理时的动作选择。它们的作用是告诉共享骨干:"这些是打麻将该关心的维度。"
辅助头的梯度流经共享表征,让骨干同时学会动作选择与局面理解之间的联系。对手状态的预测要求网络重视行动历史,路线判断要求网络关注手牌结构,风险判断则需要把二者放进同一语境里理解。这些任务互相补充,让模型掌握可以迁移到新局面的关联,而不是记住特定牌型的应对。
这就是"隐式塑形"的含义:训练信号完全不碰"这手好不好",但模型内部会因为承担了更多事实性任务,自己长出对局面更深的理解结构。 辅助头塞进表征的是维度,不是答案。
三、我们完整走过了那条主流路线
引子里提到的那次撞墙,值得展开讲。因为正是它决定了后面所有的选择。
FlyA 系列里确实存在离线加权版本,也确实存在在忠实模仿基座之上做 PPO 自对弈强化的版本。这不是为了凑对照组而做的敷衍实验——我们按照主流方案该有的样子把它训完了:离线阶段先得到一个 baseline,再接上在线自对弈继续提升。
前半段的结果相当漂亮。自对弈强化大幅超越了离线 baseline,段位指标、对局收益、各类常规评测都有明显提升。从这些数字看,"离线打底 + 在线增强"是一条完全成立的路,我们没有任何理由怀疑它的有效性。
问题出在后半段。
我们设计了剥削测试:让一个专门针对目标模型弱点的对手与它对弈,看它能不能抵抗系统性的针对。结果是——无论离线加权版本,还是接了自对弈之后大幅变强的版本,都仍然能被找到弱点。 自对弈把段位推高了,却没有把这些弱点抹掉;针对性的对手依然能稳定地占到便宜。
这件事让我们停下来重新想了一遍。
我们不打算把它说成"PPO 不行"或者"离线加权不行"。调参空间很大,熵正则、对手多样性、种群自对弈都可能让这个数字变好看一些,我们也没有把所有可能性穷尽。但有一点是清楚的:在这条路线上,模型变强和模型变得难以被针对,并不是同一件事。 我们投入的所有提升都流向了前者,而后者几乎没有被这套训练目标碰到过。
原因不在工程里,在目标里。纯结果导向的目标,奖励的是"这局赢了"之后回溯到的所有动作,而不是"这手在策略上合理"这件事本身。 当模型被奖励去赢,它就会找到赢的捷径;而捷径,恰恰是对手最容易学会利用的东西。投机性的立直、边界局面的过度进攻、短期追分——这些在段位指标上表现为"敢打",在剥削测试里表现为"可以被读出来"。段位越高,有时候这些模式还越集中、越容易被读。
如果想要的是"让对手无从下手",那就必须把它直接写进训练目标里,而不是指望它作为"赢得更多"的副产品自己出现。
而在非完美信息博弈里,明确朝这个方向去的目标只有一类:最小化长期遗憾,逼近纳什均衡策略。 这不是我们发明的方向,是这个问题本身在理论上被指出来的方向——一个理论上最有可能逼近最优解的方向。
换目标还带来一个连带后果,当时并不显然:这条流水线本身也一起被否掉了。 一旦训练目标变成"降低可剥削性","先用人类牌谱打个底、再在上面做增强"这个安排就不再自动成立——它的价值是建立在"起点越强、终点越强"这个假设上的,而这个假设只对结果导向的目标有效。后面第 4.4 节会讲清楚为什么。
它们各有各的用处
说到这里需要把话讲清楚:走不通的是"把结果加权当终点"这件事,不是模仿和强化本身。这两类模型在 FlyA 系列里都不是废棋,而且各有一份别的模型替代不了的用处。
忠实模仿模型的价值在于"像"。 它不追求打得更好,只追求诚实还原人类高手在各种局面下的策略偏好——哪些牌他们通常会打,哪些机会他们通常会放弃,什么条件下他们才会转攻。正因为不掺任何结果加权,它给出的分布是可以被信任的人类经验读数。对初学者来说,这比一个更强但风格陌生的模型有用得多:它回答的是"高手在这里通常怎么想",而不是"理论上最优解是什么"。一个能说人话的老师,有时候比一个更强的对手更有价值。
基于模仿基座的自对弈强化模型,价值在于"不一样"。 这是我们后来才意识到的一件事:从同一个人类基座出发,改变自对弈的奖励结构、对手构成与训练节奏,可以相当轻松地把模型推向不同的风格极端——更激进的、更保守的、更偏速攻的、更偏防守的。人类策略里本来就并存着这些倾向,结果导向的强化只是把其中某一支放大了而已。
这件事的意义在于:它让我们拥有了一批风格各异、而且都足够强的真实对手。
这恰恰是检验无憾模型最需要的东西。可剥削性不是对着一个固定对手测出来的,它需要多样化的针对性压力——激进的对手、保守的对手、专门读你的对手。如果一个模型只在某一类对手面前表现稳定,那只说明它没有真正降低可剥削性,只是恰好和那类对手互补。
于是这些模型的位置就清楚了:模仿模型是人类经验的读数,也是一条独立成立的训练线;强化模型是风格多样的陪练与标尺;而它们共同构成的对手池,最终成为无憾模型"面对什么样的对手都不容易被占到便宜"这个结论的验证环境。没有它们,这个结论就只是一句自述。
它们各自成立,但都不在无憾路线的上游。真正的第三条路,从换掉目标、也从拆开流水线开始。
四、CHR:走向无憾与更低的可剥削性
到这里,问题已经变得很具体:怎么把"让对手无从下手"写进训练目标。
这一节讲 FlyA 的回答,以及这个回答的边界在哪里。
4.1 理论锚点,以及它的边界
非完美信息博弈里有一个被广泛接受的结果:纳什均衡是这样一种策略组合——在其中,没有任何一方能够仅靠单方面改变自己的策略而获得更高的期望收益。 对于两人零和博弈,极小极大定理进一步保证:均衡策略在最坏情况下最优,也就是说,无论对手怎么打,它都不会被剥削。
朝这个方向走的理论道路同样清楚:最小化长期遗憾。 在两人零和博弈里,当双方的平均遗憾都收敛到零时,时间平均策略收敛到纳什均衡。这是定理,不是设计选择。
但这里必须把话说清楚,因为这正是很多讨论含糊过去的地方:四人麻将不在这个定理的适用范围里。 参与者超过两人时,遗憾最小化动力学收敛到的是一类更弱的均衡概念,并不保证收敛到纳什均衡;多人博弈的纳什均衡通常也不唯一,更没有两人零和那种"打均衡策略就不会吃亏"的最坏情况保证。
我们不假装这个保证存在。FlyA 把纳什均衡当作方向,而不是当作证书——它回答"我们朝哪走",不回答"我们已经到了"。真正落地的尺子是可剥削性:给定一个训练好的模型,让一个专门针对它的对手来打,看它能被占到多少便宜。这个数字可以测量,可以在不同模型之间比较,也可以随训练推进反复检查——而前面那些风格各异的模仿与强化模型,正是让这把尺子量得准的原因。
目标不是"赢更多局",而是"留下更少可被利用的弱点"。 这个目标在四人麻将里没有数学证书,但它有一把秤。我们宁愿要一把秤,也不要一张过度解释的证书。
4.2 不展开没发生过的分支
遗憾最小化的经典实现依赖反事实推理:在决策点上展开"如果当时选了别的会怎样"的分支,逐一评估,在整棵树上累积遗憾。这条路理论上很有力,也并不必然意味着穷举——现代的采样式变体已经把成本压下来很多,而且这种遍历发生在训练过程中,不是每一手棋的临场搜索。
即便如此,麻将依然让它代价高昂:隐藏信息、四个参与者、随机摸牌带来的分支因子,让任何形式的分支展开都要付出巨大成本;而算得更细的那一部分,未必就是决定胜负的那一部分。
FlyA 的立场是:不去展开没有发生过的分支。沿着当前策略把牌局真正打下去,看真实发生了什么,从中学习。
这不只是算力上的妥协,它同时是一个判断。假想分支自带假设——关于对手会怎么应对、关于后面会摸到什么、关于局面会怎样展开——每一个假设都在往信号里掺噪声。而关于一个策略好不好,最可靠的证据来自你真正跟着它走下去时发生的事情。
按当前策略持续对弈,记录真实发生的事实——手牌如何发展,风险何时兑现,终局收获如何——再让积累下来的经验去修正策略,新策略又成为下一轮对弈的起点。学习发生在这个循环里,不发生在每一手的临场推演里。
4.3 CHR:后见事实遗憾记账
CHR(Contextual Hindsight Regret,基于上下文的后见事实遗憾)是 FlyA 的核心强化学习算法。
人类棋手复盘时大致做三件事:识别当时的意图,把局面归进某一类熟悉的场景,回忆这一类场景加上这一类意图在过去通常走向什么结果。CHR 是这件事的神经网络化表达——它让模型把自己的决策按"决策族 × 上下文 × 潜在意图"归档,用已经发生的后见事实长期记账,并从中沉淀出一条克制的遗憾值标尺。
所谓"后见事实",指的是一次对弈继续进行之后真正发生过什么:模型当时怎样选择,手牌如何发展,风险何时兑现,最终得到怎样的结果。它们的价值在于确定——不是推测某条分支会怎样,而是记录这条路走完之后是什么样子。
这里有一个自然的问题:遗憾本来是"没选的那个"和"选了的那个"之间的比较,如果账本只记真实发生的事,用来比较的那一边从哪里来?
答案是:来自同一个格子里其他真实对局的样本。 相近的上下文、相近的意图,在成千上万次对弈里被不同的选择走过,这些真实经历互相构成了彼此的参照。账本记录的是事实,遗憾则是在这些事实之上形成的估计——我们不去想象一条没走过的路,但我们会去看别的对局里那条路真的走成了什么样。 事实和估计的这条界线,我们看得很重。
这套系统还有几个关键立场,它们共同决定了 CHR 既不是一个变相的价值函数,也不是一个隐藏的奖励塑形器:
- 记的是后见事实,不是学习得到的预测值。 账本里的每一格,存放的都是那类情境下真实发生过什么,不是模型认为"应该发生什么"
- 意图维度是发现出来的,不是指定的。 模型在训练中自己决定要把动作按哪些潜在动机分组;这些意图的语义,是在训练结束后通过回放大量实战局面、从模型行为中读出来的,而不是训练前写死的
- 账本带置信度。 一个格子里样本足够多时,它的后见事实平均结果才被当作数据;样本不足时会回退到更宽的先验,回退强度随样本数平滑变化。这是对神经网络过度外推的一次刻意纠偏
- 它不在运行时说话。 推理时动作由模型当前的策略产生,CHR 不以任何形式介入动作选择。它的作用发生在训练中——等训练结束,它留下的是模型看局面的方式,而不是一个可调用的裁判
最后一点还带来一个诚实的说明:遗憾理论谈的是长期的平均策略,而实际对局中打出来的是当前这一版策略。两者之间有距离,这是所有深度遗憾方法共同面对的问题,我们也不例外。我们能做的是让这个距离持续被测量——这也正是可剥削性那把秤真正的用处。
CHR 还有一个副作用:它让模型内部变得更容易被观察。因为每一个决策都同时落在"决策族 / 上下文 / 意图 / 后见事实"几组坐标上,训练者可以回过头去看,某一类局面里哪些意图被反复调用、哪些结果更稳定、哪些决策族出现了异常偏移。这不是给模型塞进人类规则,而是给人一个看模型怎么想的窗口。
一句话:CHR 让神经网络在训练中沉淀经验,但既不把经验变成奖励,也不把经验变成动作。它改变的是模型"怎么理解世界",不是"该选什么动作"。
4.4 ZERO:从零起步
换掉目标之后,下一个约束就浮上来了——而它指向的不是"再加一个阶段",而是"要不要那个起点"。
遗憾驱动的训练靠的是"在相近情境里,不同选择分别真的走成了什么样"。这意味着一种打法要被公正地评判,它首先得被足够多地尝试过。而初始策略决定了什么容易被尝试——这一点在结果导向的训练里无关紧要,因为那套目标本来只关心赢不赢;但在遗憾驱动的训练里,它直接决定了账本的哪些格子有样本、哪些格子永远是空的。
忠实模仿得到的基座承载了人类经验的丰富性,但它同时带着人类经验的边界。人类策略已经塑造了模型的探索分布,决定了哪些机会更容易被采样到。如果一种打法在人类牌谱里极少出现,初始策略也很少尝试它,那么它对应的格子就长期缺乏样本,模型可能需要很久才能认识到它的价值——甚至永远不会去认识。人类没走过的路,不该因为人类没走过就被判定为不值得走。
这就是"从人类基座出发、再在上面做增强"这个安排失效的地方。在结果导向的目标下,更强的起点确实意味着更快的提升;但在遗憾驱动的目标下,起点同时决定了模型能看见多少种可能,而看不见的东西是无法被评判的。起点的强度是个优势,起点的偏好是个约束——前一条路线只会享受到优势,后一条路线还要承担约束。
FlyA 的 ZERO 路线因此选择把这层限制彻底移除。它不是接在模仿基座之后的一个阶段,而是一条独立的训练线:从零开始自对弈,不以人类动作分布作为策略起点,让模型直接从规则与对局经验中建立自己的麻将认识。规则事实层仍然准确地提供世界,网络仍然需要理解局面,但"人类通常怎样打"不再预先决定模型更容易尝试什么。
ZERO 与 CHR 构成 FlyA 的主线:持续自对弈,后见事实积累,遗憾驱动修正,新策略再进入下一轮对弈。反复被低估的机会获得更多尝试,长期被高估的倾向逐渐收缩,策略在这种往复中持续调整。
这条路线给模型留下了最大的自由:人类习惯采用的打法需要接受检验,人类极少采用的打法也有机会凭自身的效果获得位置。它不预设答案,只提供一个让策略在真实对弈中持续修正的框架。
它能走到哪里,是一个需要用时间来回答的问题。我们不打算提前替它给出结论。
五、让神经网络长到超越人类
把前面的选择放在一起,FlyA 的设计路径就清晰了:
- 不走离线价值加权——在模型学会看世界之前注入价值判断,噪声和捷径会一起烤进基座
- 模仿这一支严格忠实于人类行为分布——用从动机层识别 AI 的算法清洗数据,确保它吃的是纯人类策略
- 在决策过程里保留一个中间层——先形成对局面的理解与倾向,再把倾向翻译成动作,而不是从状态直接跳到动作
- 把先验当工具用——确定性事实交给确定性工具,梯度只花在真正需要判断的地方,绝不替模型算好价值再喂回去
- 用辅助头做隐式塑形——把该想的维度压进表征,不把答案压进动作
- 完整走过主流路线,并接受它给出的答案——自对弈确实大幅超越离线 baseline,但弱点照样能被找到;模型变强和模型难以被针对,不是同一件事
- 撞上天花板后换目标,而不是继续调参——想要"无从下手",就得把它写进训练目标里
- 换目标之后拆掉流水线——忠实模仿与追求强度成为两条各自纯粹的训练线,而不是一条产线的前后两段
- 不否定模仿与强化本身——模仿模型是可信的人类经验读数,强化模型是风格各异的陪练,它们共同组成了检验可剥削性的对手池
- 用 CHR 沉淀后见事实经验——改变模型看局面的方式,不当奖励,不当裁判
- 用 ZERO 从零起步——不展开没发生过的分支,也不让人类没走过的路因为没人走过就被判定为不值得走
- 以可剥削性为尺,以纳什均衡为向——不拿一张四人博弈里本来不存在的证书,去替代一把真实可测的秤
这十二点指向同一件事:给神经网络一个足够大、但不被代替思考的空间,让它自己长到有可能超越人类的地方。
FlyA 没有选最容易让模型"打得好"的路径。它选的是最有可能让模型长得超过人类的路径。这是一种更慢、更需要耐心、也更需要克制自己"不走捷径"的选择。但它留下了空间——让神经网络长出它本来可以拥有的策略,而不是被迫在人类或启发式预设的框架里,把棋打得漂亮。
FlyA 的设计哲学是:把忠实模仿与追求强度拆成两条各自纯粹的训练线。模仿这一支严格学习人类策略分布,用辅助头和基于上下文的后见事实记账做隐式塑形,绝不做任何形式的结果导向加权。主流的"离线打底 + 在线结果导向增强"我们完整走过,它带来了成绩,却没有带来更低的可剥削性——于是我们换掉了目标,也拆掉了那条流水线:追求强度的那一支改为用无憾算法从零开始自对弈,以纳什均衡为方向、以可剥削性为尺度。用这套组合,在不依赖巨大集群、也不牺牲理解深度的前提下,让神经网络有机会长出超越人类的麻将策略。
FlyAgent