davidwdw's picture
Upload B1K model checkpoints, training recipes, and evaluation artifacts (part 4)
4a2a6e4 verified
|
Raw History Blame Contribute Delete
11.1 kB

Task 00:Human / Codegen / Mix 运行行为诊断

分析对象为 2026-09-20 在 eai 完成的 60 次 rollout:public_test 实例 301–320,各模型各一次,seed=0。此次仅离线分析已有记录,没有重新运行模拟器或改动原评测代码。

目前最强的诊断线索是:Codegen 与 Mix 较早进入后续 stage,频繁触发推理包装器的阶段回退和夹爪恢复规则,并出现更多未完成任务的运动。训练数据的时序差异、Mix 的人类样本曝光减半,是可能促成这种行为的因素。日志还不足以证明唯一根因,也不能直接认定生成数据质量差。

前一次成绩应解释为 checkpoint 与当前推理包装器组合的系统性能。强制恢复规则既可能扰乱有效动作,也可能是模型已经偏离正确轨迹后的反应;因果方向需要消融验证。

2026-09-21 补充:已按用户授权在 g10 只读核验三个实验的原始代码,相关文件与 checkpoint 源码清单匹配。五段相对时间标签、原始推理恢复规则均确认;三组使用同一标签算法。推理 stage 由模型预测与投票更新,不按经过时间自动推进,轨迹时长差异本身不能证明阶段语义冲突或误判。详见 原始源码核验。

1. 已确认的运行差异

指标 Human Codegen Mix 50:50
成功 8/20 1/20 1/20
首次进入 stage 2 的步数中位数 680 200¹ 240
曾进入 stage 4 的回合数 4 13 12
包装器强制 stage 4→2 次数 11 117 130
记录到整段动作被规则改写的次数 2 245 257
动作改写占模型预测块比例 0.08% 7.90% 8.30%
夹爪预测跨度过大、关闭动作压缩的预测块比例 12.88% 42.83% 22.60%

¹ Codegen 只有 19/20 个回合进入过 stage 2;实例 304 始终停在 stage 0。stage 是包装器的内部条件变量,不是任务的真实完成度。预测块每 20 个模拟器步更新一次。以上计数去除了 warmup,按 reset 分成 20 个非空回合,并用每回合最后记录步数与官方结果核对。

控制运行时长后,差距仍然存在。三模型共同失败的 11 个实例是 301、302、305、309、310、311、314、316、317、318、319;这些回合全部运行 3225 步:

共同失败实例的平均累计路程 Human Codegen Mix
底盘 1.07 m 1.89 m 1.11 m
左手末端 3.33 m 11.09 m 8.02 m
右手末端 4.32 m 8.28 m 5.47 m

Codegen 和 Mix 的左手末端路程分别约为 Human 的 3.33、2.41 倍。Mix 的底盘路程接近 Human,但左手路程明显增加。此指标是世界坐标系下末端累计位移,包含底盘/躯干贡献;不能单凭路程认定关节抖动、碰撞或按钮定位误差。

2. 包装器具体做了什么

当前 apply_eval_tricks=True,继承上游 server 的默认设置。task 00 的规则包括:

  • 到达 stage 4,无条件将内部 stage 改回 2,清空阶段投票历史;下一次推理会使用修改后的 stage 条件。
  • stage ≥2 时,如果一只夹爪完全关闭、另一只没有处于中间开度,会触发开夹爪恢复。stage 0/1 也有禁止夹爪闭合的通用规则。
  • 恢复并非只改一个夹爪数值:代码用 np.tile(state, ...) 替换整段 30 步预测,再把相关夹爪设为打开。关节目标变为当前姿态;底盘分量继承当前速度。
  • 修改后的动作还会被用于下一轮 rolling inpainting 的保留动作,干预可能影响后续预测。
  • 夹爪预测动作跨度超过 0.2 时,26→20 的动作压缩被关闭。这是预测跨度检查,不是实际夹爪抖动测量;日志中的 mean/max 实际对应左右夹爪跨度,不能照字面当均值/最大值。

代码证据:task00 恢复规则、通用夹爪恢复、规则应用与 inpainting。

3. 代表性回合:存在不同失败模式

实例 303:阶段反复回退。 Human 在 1611 步成功,没有阶段强制回退或动作覆盖。Codegen 首次到 stage 4 只需 460 步,此后回退 7 次,左手路程 17.37 m;Mix 同样在 460 步到 stage 4,回退 17 次,左手路程 11.03 m。两者最终超时。Human 左手路程为 3.25 m。这与“阶段条件循环、持续运动却未打开收音机”的模式一致。

实例 304:大量动作覆盖、少量位移。 Human 1118 步成功。Codegen 整回合停在 stage 0,被覆盖 77 个动作块;Mix 到了 stage 3,被覆盖 79 个动作块。两者均失败,左手累计路程分别只有 2.12 m、1.48 m。这里的失败与实例 303 不同,更像被频繁恢复动作打断,而非一直大范围运动。Mix 的实例 320 也有 77 次覆盖、左手路程 1.91 m,Human 则 995 步成功。

实例 312:规则不是全部解释。 Mix 383 步成功,Human 1825 步成功;Codegen 没有强制 stage 回退或动作覆盖,仍超时,左手路程 12.48 m。Codegen 实例 307、Mix 实例 308 也在没有上述两种干预时失败。关闭恢复规则不保证解决全部问题。

Codegen 唯一成功的实例 306 反而有一次 stage 回退;因此也不能把“触发规则”直接判为失败原因。

三个典型实例的阶段轨迹

4. 为什么生成训练数据可能产生这种行为

训练实现将一条 episode 按相对时间均分为五段:stage=floor(timestamp*30/(episode_length/5)),截断到 0–4。它没有把阶段对齐到“接近收音机、对准按钮、接触、按下”等物理事件。

Human 平均轨迹长度为 429928/200 = 2149.64 帧,71.65 秒;Codegen 为 148475/259 = 573.26 帧,19.11 秒,前者约为后者的 3.75 倍。生成轨迹较短本身不是问题,但两种策略的动作顺序和相对进度语义可能不同。同一个 stage 编号不能自动视为跨来源等价。

实际 rollout 中,Codegen/Mix 进入 stage 2 的中位时刻也明显更早。这支持“学到的阶段/动作时序不同”的解释,但没有真实阶段标注,不能据此证明每次阶段预测都错误。包装器又给 stage 4 附加“退回 stage 2”的硬规则,使时序标签与语义控制规则之间的不匹配成为优先排查项。

本机归档源码:阶段标签计算。训练配方也明确说明两源 stage 未做语义对齐:Mix README。

5. 为什么加入一半 Human 没有保住 Human 的表现

Mix 不是两个专家投票,也不是 Human 模型推理结果的一半。它是从相同 meta checkpoint 重新训练的单一网络,共享动作输出和 stage 条件;source ID 只用于统计,不输入模型。

在同样 15000 次更新内,Human 单训看到 192 万个人类窗口,4.529 次等效遍历;Mix 只看到 96 万个人类窗口,2.265 次遍历,另有 96 万个生成窗口。人类数据数量保持 200 条 episode,不等于人类学习预算保持不变。混合还引入了不同的躯干动作分布和未对齐的时间阶段标签,存在相互干扰的可能。

最后 40 个日志点(step 14000–14975)的训练损失均值:

模型/分量 总损失 动作损失
Human 单训 0.028630 0.017478
Codegen 单训 0.002748 0.002098
Mix 总体 0.025060 0.016168
Mix 中 Human 分量 0.042023 0.027113
Mix 中 Codegen 分量 0.008095 0.005223

Mix 总损失低于 Human 单训,是两种来源损失的平均;其 Human 分量并没有同样低。由于 dimension 6 的归一化不同,不能把跨模型损失差直接当作严格的退化度量,但这些数字不支持“总 loss 较低,所以已保住人类能力”的推断。

Codegen 单训有 13.646 次等效数据遍历,约为 Human 的三倍,末段训练 loss 很低。这证明它对自己的训练目标拟合较好,不证明闭环泛化较好;没有验证损失或早期 checkpoint 的仿真成绩,不能直接宣布过拟合。Mix 的训练 stage 准确率约 99.83%,也不能代表仿真偏离示范后的状态识别可靠。

6. 排除项、证据边界与下一步

已确认三个模型读取各自 checkpoint 的 normalization;这些 JSON 的数值内容与各自训练资产一致。Codegen/Mix 的文件序列化格式不同,但解析后的值相等。只有 dimension 6 的常规归一化统计发生来源相关变化;相关噪声矩阵保留一致。没有发现误用 Human normalizer 的证据。

全部失败均有官方超时结果,而非缺失记录或模型 NaN 被当失败。policy log 末尾的 ConnectionClosedError 发生在最终回合结束后的连接关闭,不是中途推理崩溃。完整运行核验见 audit.json。

原评测未保存逐帧 RGB、逐步动作/关节状态或物体接触轨迹。现有数据不能判断具体是否按错按钮、碰倒物体、抓握失败、视觉错位或某个关节持续偏移。评测还使用了兼容 Gemma 和 CPU inpainting 线性求解适配;参数形状完整并不能证明与原始推理数值行为完全相同。

优先验证顺序:

  1. 先在相同模型、相同实例与 seed 下,分别关闭 task00 的 stage 4→2 回退、夹爪整段动作覆盖,以及两者同时关闭。保持动作压缩/夹爪跨度检查、inpainting、normalizer、采样步数等其他参数固定;直接切换 apply_eval_tricks=False 会同时改变多项机制,无法定位原因。
  2. 优先记录 303(阶段循环)、304/320(动作覆盖)、312(无上述干预仍失败)的 RGB、预测前后 action、stage logits、规则触发、末端与收音机按钮距离。再对确定的推理配置做全部 20 实例测试。
  3. 若问题仍在,再研究跨来源阶段语义对齐、保留相同人类窗口预算的混合训练,并使用独立验证实例选择 checkpoint。20 个 public_test 已被用于诊断,不宜反复调参后再把其结果作为无偏泛化成绩。

这些是待验证实验,本次没有运行消融,也没有修改已有模型或推理服务。

所有 60 回合行为统计见 per_instance.csv,原始阶段转换见 transitions.json,复算脚本为 analyze_runs.py。