# 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 由模型预测与投票更新,不按经过时间自动推进,轨迹时长差异本身不能证明阶段语义冲突或误判。详见 [原始源码核验](/home/eai/code/training_models/evaluation/behavior_analysis/stage_verification.md)。 ## 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 恢复规则](/home/eai/code/training_models/evaluation/behavior-1k-solution/src/b1k/shared/correction_rules.py:79)、[通用夹爪恢复](/home/eai/code/training_models/evaluation/behavior-1k-solution/src/b1k/shared/correction_rules.py:150)、[规则应用与 inpainting](/home/eai/code/training_models/evaluation/behavior-1k-solution/src/b1k/shared/eval_b1k_wrapper.py:228)。 ## 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 回退;因此也不能把“触发规则”直接判为失败原因。 ![三个典型实例的阶段轨迹](/home/eai/code/training_models/evaluation/behavior_analysis/stage_timelines.png) ## 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”的硬规则,使时序标签与语义控制规则之间的不匹配成为优先排查项。 本机归档源码:[阶段标签计算](/home/eai/Documents/Codex/2026-09-18/b1k-chat-part1-b1k-gui-jsonl/work/source/src/b1k/transforms.py:184)。训练配方也明确说明两源 stage 未做语义对齐:[Mix README](/home/eai/code/training_models/b1k_sft/mix_h50_c50/README.md)。 ## 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](/home/eai/code/training_models/evaluation/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](/home/eai/code/training_models/evaluation/behavior_analysis/per_instance.csv),原始阶段转换见 [transitions.json](/home/eai/code/training_models/evaluation/behavior_analysis/transitions.json),复算脚本为 [analyze_runs.py](/home/eai/code/training_models/evaluation/behavior_analysis/analyze_runs.py)。