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 训练中)。
This commit is contained in:
1 parent
85bf68f505
commit
b73628b2e5
1 file changed
+96
@@ -0,0 +1,96 @@
|
||||
# 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 变换)
|
||||
Reference in new issue
Block a user