摘要

0212–0215 一连串模仿学习实验都卡在同一个地方:模型无法精确模仿基线 AI 的落点,补数据(0215)甚至让对战更差。本实验换一个学习目标:不再问“教师会走哪一格”,而是问“在这个局面,把基线的动作换成另一个候选,之后双方都按基线下到终局,结果会好多少”。这种“如果当时换一步会怎样”的比较叫反事实(counterfactual)比较,得到的差值叫终局优势(terminal advantage)。

数据阶段通过:96 个根局面全部完成,906 个续玩分支产生 206 个标签(46 正 / 44 负 / 116 零),非零差覆盖全部 24 个训练来源。但训练后的策略(ADV)在 8 个开发来源上 0 胜 16 负;同场未训练、只套同样决策包装的对照(WARM)7 胜 9 负。ADV 相对基线和相对 WARM 都是 −.4375,0 个来源改善。失败关闭,36 个保留槽未开。

要回答的问题

在 2v2 小课程(每方两个兵种、无英雄,20 回合未分胜负双方判负)里,用终局得分差训练一个“该不该偏离基线”的小模型,能否让基线 AI(记作 F,即 Fair:只用玩家可见信息的搜索 AI)在整局中更强?

方法

标签怎么来。 对一个公开局面(称为“根”),取最多 4 个候选动作:F 自己的选择、F 启发分最高的另一个移动、最高的攻击/单位技能、最高的等待/跳过(某类不存在就缺省)。每个候选执行一次,然后双方都用 F 下到终局。为了减少运气影响,每个根固定 3 个“假想随机未来”(不同随机种子),候选与 F 动作在同一世界里用相同的随机起点。根方胜 +1、负 −1、双输也 −1。标签 = 3 个世界里“候选终局得分 − F 终局得分”的平均,范围 [−2, 2]。这是“只改一次、之后照基线”的条件估计,不是最优价值。

模型怎么学。 复用 0214 的分层网络和全部公开输入,从冻结的 0214 权重初始化、重置优化器。模型对完整合法菜单打分,取候选与 F 动作的分数差去回归标签(均方误差),零差标签同样参与。

线上怎么用。 每次决策先算 F 动作和同样的候选;若本方本回合还没用过改选额度、且最佳预测差严格大于 +0.5,就执行该候选,否则照 F 走。只有成功执行才消耗额度,每回合重置。线上不做续玩搜索。+0.5 是冻结的工程阈值,不是校准过的胜率差。

设置(冻结的条件)

  • 来源(一个固定的初始布局和随机种子):从扩大布局池中排除 84 个旧组后剩 110 组,按冻结顺序取 24 个训练 + 8 个开发全新来源。
  • 根选择:每个训练来源打一局 F/F,每方取最早一个至少有 2 个候选的决策,以及第 3 回合后最早的另一个;最多 96 根、1152 条分支。
  • 信号准入:96 个预定槽里至少 72 根完整;至少 20 个非零标签覆盖至少 8 个来源。
  • 训练:一次,最多 8 epoch 或 400 次更新 / 10 分钟。
  • 开发门槛:每来源 1 局 F/F + 新策略执蓝/执红各 1 局。要求来源均分(新策略 − F)≥ +.10、至少 2 个来源改善、至少 2 个来源实际发生改选、≥ 95% 已知终局、零正确性故障。
  • 本地补充对照:同 8 个来源上再跑 16 局 WARM(冻结 0214 权重 + 同样候选、阈值和每回合额度),用来区分“新目标训练的作用”和“包装本身的作用”。
  • 预算:数据 30 分钟、训练 10 分钟、开发 15 分钟、条件保留 15 分钟。

结果

单次运行 874.205842 秒,无重试、无实现故障;数据与核验 799.177857 秒,初始化与训练 5.822075 秒(8 epoch / 32 次更新)。

阶段 记录数 普通终局 20 回合双输 结果
24 训练 F/F 24 19 5 作为根来源
完整根分支 906 781 125 根方 399 胜 507 负(负含 125 双输)
同场 WARM 16 16 0 7 胜 9 负,66 次成功改选
开发 F/F + ADV 24 20 4 ADV 0 胜 16 负(含 3 双输),51 次改选
原保留 36 槽 — — 全部未开始

开发 F/F 双方平均得分 .4375,WARM 同为 .4375,ADV 为 0。ADV−F = −.4375,ADV−WARM = −.4375;两种比较都是 0 个来源改善、7 个退化、1 个持平。8 个来源都有实际改选,40 局评测全部终局且正确性通过,但得分门槛失败。

正确性:970 条新记录、30,636 个真实转移和公开输入全部核验;96 个根初态与源轨迹前缀、288 个假想世界状态另外绑定通过。全部记录已导入回放界面;检查中发现回放把兵种容量误显示为存活数,随后在实验 0421 修复了显示,比赛成绩不变。

失败与负结果

  • 有信号却退化:这不是“标签全是零”或“没执行更新”,失败发生在部署后的完整对局。
  • 906 个分支来自 96 个根,不能算作 906 个独立来源。
  • 测试阶段一项旧 CUDA 确定性测试因缺少环境变量失败,补上后通过;若干 UI 脚本错误只修测试,不重跑实验。

局限

以下解释都尚未验证:训练时“只改一次”与部署时“每回合都可能改一次”的分布差;稀疏目标的回归困难;从 BC 权重初始化带来的初始分数差。当前结果不能选定单一根因。结论只限于这个 2v2 课程和 F 对手。

结论与下一步

终局优势标签本身有区分度,但学出来的“改选”在完整对局里非常有害——同样的包装不训练反而与基线持平。按协议关闭 0216,不调阈值、不加训、不补数据。下一步实验 0217 冻结权重、零训练,只比较“整局只改一次”与“每回合改一次”,检验重复改选是否就是损失来源。