Files
blackbird/docs/reports/actpred_fixed_range_weighted_experiment_20260814.md
T
qing b73628b2e5 docs: actpred 模型 C 实验报告——固定范围归一化+逐列加权的闭环发散根因
teacher forcing val 0.000394 三方最优,但闭环 overall_mse 19843、
error_growth 13.4 首次发散。根因:spk.F 尺度放大(1 归一化单位
=5000Hz)与 w=0.2 放松叠加 exposure bias,自预测反馈滚雪球。
排除保留位列失控与推理端实现 bug。加权方案部分有效(hand 类
episode 2.2-2.8× 优于模型 B),需叠加 R1-B rollout(模型 D 训练中)。
2026-08-14 13:19:09 +00:00

5.0 KiB
Raw Blame History

actpred 模型 C 实验报告:固定范围归一化 + 逐列加权

文档类型:实验报告 模块:actpred 作者:自动生成 日期:2026-08-14 前置实验:pybot_actpred_dataset_training_eval_20260814.md(模型 A/B) 开发方案:actpred_action_norm_weighting_plan_20260814.md(本实验为其步骤 4) 后续实验:模型 D(fixed_range + 加权 + R1-B rollout),训练中


1. 实验设置

按开发方案步骤 4 训练对照模型 C:固定物理范围归一化 + 默认逐列权重。

项 值
normalize_mode fixed_range([0,1] min-max,action_norm.py 常量表)
column_weights 默认:舵机 1.0 / spk 0.2 / 保留位 0.0
数据 / 种子 / 增强 与模型 A/B 相同(763/41 样本,seed 42,ColorJitter)
epochs / patience 100 / 15
checkpoint actpred/checkpoints/recorded_run_fixed/

2. 训练结果(teacher forcing 口径)

  • 34 epochs 触发 early stopping
  • best val_loss = 0.000394(epoch 21)——三方最优(A: 19.02 原始量纲、B: 0.0288)
  • train loss 收敛至 ~0.0004-0.0008

teacher forcing 口径下,方案目标完全达成:loss 数值稳定(<0.001)、保留位列剔除、spk 列仍保留梯度(w=0.2)。

3. 闭环评估(R4)——目标失败

指标 模型 A(raw) 模型 B(zscore) 模型 C(fixed+加权)
overall_mse 6446.7 2445.4 19843.5
error_growth 0.005 0.082 13.43(发散)
smoothness_ratio 0.147 1.047 3.19
oob_rate(物理界) — 28.1% 100%

teacher forcing 指标与闭环行为完全背离:C 的训练/验证 loss 最好,闭环却首次出现发散(error_growth 13.4 > 1)。

3.1 逐 episode 闭环 mean_mse

Episode A B C C 相对 B
0000 stand 25.5 134.0 52882.2 395× 恶化
0001 jump 20.5 221.1 35228.6 159× 恶化
0002 left-hand 21252.2 6849.7 2420.3 2.8× 改善
0003 left-turn 276.0 641.0 3630.5 5.7× 恶化
0004 lie-down 35.2 46.9 470.8 10× 恶化
0005 rght-hand 21340.0 8022.9 3691.2 2.2× 改善
0007 stdd 49.8 115.9 47180.4 407× 恶化
0008 t0 644.5 553.3 3927.6 7.1× 恶化
0009-0012 tilt-* 29.8-34.2 59.6-751.7 45111-46268 61-775× 恶化

C 在 hand 类 episode(spk.F 大跨度)上三方最优(2.2-2.8× 优于 B),证明加权确实教好了频率跟踪;但其余 episode 全部严重发散。

4. 根因分析

4.1 逐列预测定位(episode_0000,76 步闭环滚动)

列 预测范围 真值 判定
col 7 s8 舵机 1.6 → 159.0 0 舵机漂移 159°
col 10 spk.F 27.6 → 1080.2 10 频率漂移 1080Hz
col 11 spk.delay -9.8 → 12.6 10 负时延越界
col 12-17 保留位 ±0.18 0 正常(排除权重 0 列失控假设)

4.2 发散机制(尺度放大 + exposure bias)

  1. 尺度放大:fixed_range 下 1 个归一化单位 = spk.F 5000Hz 原始量(z-score 下各列单位方差,单位误差对应原始量级相当)。spk.F 归一化空间漂移 ±0.2 → 原始 ±1000Hz
  2. 权重放松:w=0.2 使训练对 spk.F 施加 1/5 压力,配合 28 倍尺度放大,spk.F 成为闭环最脆弱列
  3. 反馈滚雪球:漂移后的 spk.F 回写历史 → 注意力被污染 → 舵机列(col 7)跟漂 → 误差逐轮放大(episode 内 growth 3.6-430×)
  4. teacher forcing 掩盖一切:训练/验证喂真值历史,上述回路从未出现,故 val loss 0.000394 最优而闭环最差

4.3 直接诱因确认

  • 保留位列(权重 0)预测值正常(±0.18)——排除"零权重列无梯度失控"假设
  • 推理端归一/反归一逻辑正确(predict.py fixed_range 分支逐行核对)——排除实现 bug
  • denormalize_action 不 clamp("保留模型外推能力"的设计决策)放大了越界值的回传,为次要因素

5. 结论

  1. 逐列加权方案部分有效:spk.F 跟踪达到三方最优(hand 类 2.2-2.8× 优于 B),方案目标"频率也要跟踪"达成
  2. 方案不完整:缩放方式(fixed_range)与列权重正交解耦后,暴露了尺度放大 × exposure bias 的叠加风险——单步 teacher forcing 训练无法抵御闭环反馈
  3. 教训:teacher forcing val loss 不能作为方案验收指标,必须过 R4 闭环评估;本实验正是 R4 的价值证明

6. 后续

  • 模型 D(训练中):fixed_range + 加权 + R1-B rollout(rollout_len=4, ss_prob=0.5),让模型在训练期面对自预测反馈,直击 exposure bias
  • 若 D 闭环仍不稳,备选路线(已在讨论中评估):
    • denormalize_action 输出 clamp 到物理界(快速缓解)
    • one-hot 离散化 + CE(对数分箱 + 软标签):消除尺度放大、内置物理界、NPU 友好;代价是序数信息与数据需求
    • spk.F 对数尺度(z-score 前 log 变换)