207 lines
16 KiB
Markdown
207 lines
16 KiB
Markdown
# 探索日志:Transformer 机械臂闭环控制
|
||
|
||
长期锚点:`docs/Transformer轨迹拟合训练方案.md` §9.2(部署形态 = 策略 + 安全层)。
|
||
验收口径(§9.2):实际执行碰撞 = 0;held-out 可达任务到达率 ≥ 98%;到达用时 ≤ 老师 ×1.3;关节行程 ≤ 现有规划器 ×1.10;冷启动 < 10 ms;每次推理 + 安全认证 P99 < 20 ms;刹停发生率 < 2% 的推理周期;策略单独(关安全层)碰撞率 < 3%。
|
||
|
||
评测约定:val 任务、部署节奏(r = 3 重规划、1 段采样、K=8);「纯策略」= 关安全层;「部署」= 开安全层。时延:桌面 RTX 3090 上 `sample_k(B=64, K=8)` 墙钟均值(均值,非 P99);浏览器 ONNX P99 以 §9.2 R4 的独立测量为准。
|
||
|
||
## 轮次 0:基线(2026-10-18,main)
|
||
|
||
- **假设**:模型开环已拟合老师(末端 ~6 mm),闭环失败另有原因。
|
||
- **判据**:reach = 0 且碰撞 ≈ 100% 即失败;需同时报告碰撞 / 到达 / 精度 / 时延。
|
||
- **配方**:`ml/runs/base/last.pt`(step 14000,旧配方、act_scale=1.0),n=256。
|
||
- **对照**:老师回放 reach 1.0 / 碰撞 0;H1_oracle(老师提线走 rollout)reach 1.0、碰撞 0、轨迹偏差 p99 4.6e-4°。
|
||
- **指标**:到达 **0%**;碰撞 **99.6%**;精度 ol_fk 5.98 mm / ol_best 2.92 mm / ol_div 0.655,2 s 误差比 0.755;时延未测。
|
||
- **结论**:仿真/滚动无误,失败在策略输出。闭环对每步残差极敏感(老师动作加 σ=0.05×STEP 即 reach 1.0→0.218)。
|
||
|
||
## 轮次 1:数据规模能否救闭环(main,负结论)
|
||
|
||
- **假设**:训练数据不足导致分布外状态无覆盖。
|
||
- **判据**:若闭环状态到训练集最近邻距离大,且密度缩放无法在误差尺度内缩小差距,则加大同类数据无效。
|
||
- **配方**:191 万老师状态最近邻分析;6 维密度缩放 d∝N^(−1/6)。
|
||
- **对照**:起点(老师分布内)最近邻。
|
||
- **指标**:闭环状态最近邻 p50 **21.5°**(起点 13.2°);数据翻 4 倍仅降 ~21%,与 0.02° 误差尺度差三个量级。
|
||
- **结论**:加大同类老师数据无效;需要「不同的数据」(闭环状态标注)。
|
||
- **下一步**:DAgger 或状态扰动数据。
|
||
|
||
## 轮次 2:合成扰动状态微调(main,负结论)
|
||
|
||
- **假设**:偏移 1.5° 状态的老师标注可补足闭环状态覆盖。
|
||
- **判据**:若 success 仍 0 或开环精度退化,则配方不成立。
|
||
- **配方**:2000 个扰动起点(σ 混合 0.5/1/2/4°)→ 老师重规划(2000/2000 到达)→ 36k 样本 → 从 base/last.pt 微调 3000 步(lr 3e-4 / 1e-4 两轮)。
|
||
- **对照**:base/last.pt。
|
||
- **指标**:碰撞 99.6%→**48.4% / 60.4%**;到达仍 **0%**;开环 6→**15.3 / 16.4 mm**(退化 2.5×);ratio2s 0.927/0.893。
|
||
- **结论**:只学会了「保守避撞」,开环精度被带偏,success 仍 0;此配方不成立。
|
||
- **下一步**:改训练标签(绝对目标)或真实 DAgger。
|
||
|
||
## 轮次 3:绝对目标参数化(exp: `feat/abs-target`,负结论)
|
||
|
||
- **假设**:模型从当前状态外推增量(判别 ρ=1.54),改为绝对目标标签可让输出指向参考位置。
|
||
- **判据**:一步采样开环误差需回到 <10 mm,闭环 success > 0;否则参数化不可行。
|
||
- **配方**:`ABS_TARGET=1` 重打主数据(201 万样本,Y=16 步绝对目标/180),train/rollout/ckpt 适配;从零训练 9950 步(p_neq 预热 5000)。过程中修复前缀噪声增广把 eps 直接加到绝对目标(≈18° 污染)的 bug。
|
||
- **对照**:base/last.pt(ol_fk 5.98 mm、reach 0%)。
|
||
- **指标**:一步采样动作误差 **31°**(4/8 段 2.3°/2.8°);ol_fk 4000/6000/8000 步 = 74.6/140.4/139.0 mm;闭环 **0% / 100%**(1 段与 4 段皆然);时延未测。
|
||
- **结论**:绝对目标的一步流匹配在 MeanFlow 头上学不动(过预热后 5000 步无下降趋势);此配方不成立。分支已推送远端 `217a70b`(本地分支可删,远端保留可复现)。
|
||
- **下一步**:回归增量口径,上真实 DAgger。
|
||
|
||
## 轮次 4:真实 DAgger 1 轮(main,部分有效)
|
||
|
||
- **假设**:策略自己走到的状态(离训练集 21.5°)+ 老师重标注,可让模型学会在偏移状态上行动。
|
||
- **判据**:reach 是否从 0 抬头;同时看碰撞、开环精度、时延。
|
||
- **配方**:`ACT_SCALE=1.0 DAG_ROUNDS=1 DAG_N=2000 bash ml/dagger/run.sh base ml/runs/base/last.pt`(采集 2000 题 → 老师重规划 → 打包 → 微调 15000 步,lr 3e-4;主数据 + DAgger 混合)。
|
||
- **对照**:base/last.pt。
|
||
- **指标**:碰撞 99.6%→**40.2%**(8000 步 36.9%,10000 步 58.8%);到达 **0%**,仅微调 12000 步时出现 **0.4%(2/512)**;开环退化 6→**15.7 mm**;ratio2s 0.87–0.92;时延未测。
|
||
- **结论**:DAgger 数据确实教会避撞,但微调把主分布带偏(开环退化),到达仍近 0;单独 DAgger 不是终点。
|
||
- **下一步**:在 DAgger 模型上加目标反馈(模型前馈 + DLS 反馈)。
|
||
|
||
## 轮次 5:模型前馈 + DLS 目标反馈(exp: `feat/fb-mix`,历史最佳)
|
||
|
||
- **假设**:模型擅长开环轨迹/避撞,但不指向目标;把 DLS 朝目标的反馈叠加到候选动作上,可把「走偏」拉回目标。
|
||
- **判据**:部署口径(+安全层)reach 显著 > 0 且碰撞 < 3%(§9.2 策略单独碰撞线)、刹停可控;否则不成立。
|
||
- **配方**:`closed_loop.rollout(fb_gain=...)`:`inc += fb_gain · DLS(qe→T,R, n=1)`(加在所有候选上,安全层评估带反馈的候选)。模型 `ml/runs/base_dag1/best.pt`(DAgger 轮 4 的 best,12000 步)。n=128,val。
|
||
- **对照**:base/last.pt + 同反馈;DAgger 模型 + 无反馈。
|
||
- **指标(n=128)**:
|
||
|
||
| 配置 | 到达 | 碰撞 | 精度 ratio2s | 刹停/题 | 时延 |
|
||
|---|---|---|---|---|---|
|
||
| DAgger 模型, gain 0 | 0% | 44.5% | 0.873 | 0 | — |
|
||
| DAgger 模型, gain 1.0, 关安全层 | 29.7% | 73.4% | 0.370 | 0 | — |
|
||
| **DAgger 模型, gain 1.0, 开安全层** | **20.3%** | **2.3%** | **0.480** | **21.9** | **12.58 ms/次**(B=64,K=8,桌面 3090) |
|
||
| base 模型, gain 1.0, 关安全层 | 0% | 94.5% | 0.554 | 0 | — |
|
||
|
||
(另测 n=32 复核:gain 1.0 + safety → reach 25.0%、碰撞 6.2%、ratio2s 0.588。)
|
||
|
||
- **结论**:**反馈混合是首个把到达率从 0 拉到 20%+ 的机理**;安全层把碰撞从 73% 压到 2.3%(部署口径),代价是刹停 21.9 次/题(远超 §9.2 的 <2%/周期)。精度 ratio2s 0.48(2 s 时误差缩一半),时延 12.58 ms/次接近 §9.2 的 20 ms(推理+认证)门槛。
|
||
- **与历史最佳/基线对比**:reach 0→20.3%、碰撞 99.6→2.3%、ratio2s 0.755→0.480;开环精度仍退化(DAgger 微调导致 15.7 mm vs 基线 5.98 mm)。
|
||
- **漂移检查**:main = 70654e4(无新提交);工作区仅用户个人 html 未跟踪;数据口径 act_scale=1.0 与 ckpt 一致;`feat/abs-target` 已推送远端;本次实验在独立分支 `feat/fb-mix`。
|
||
- **下一步**:扫更大 gain(1.2–2.0)与增益衰减;目标是把刹停次数降下来、到达率再提升,并测 ONNX/浏览器时延。
|
||
|
||
## 轮次 6:反馈增益扩展扫描(exp: `feat/fb-mix`,小幅进展)
|
||
|
||
- **假设**:更大增益能把到达率继续推高。
|
||
- **判据**:reach 显著高于 20.3%(>25%)且碰撞 ≤3%、刹停不失控。
|
||
- **配方**:`rollout(fb_gain∈{1.2,1.5,2.0}, safety=True)`,模型同轮次 5,n=128。
|
||
- **对照**:轮次 5(gain 1.0:reach 20.3% / 碰撞 2.3% / ratio2s 0.480 / 刹停 21.9)。
|
||
- **指标**:
|
||
|
||
| gain | 到达 | 碰撞 | ratio2s | 刹停/题 | 墙钟/题 |
|
||
|---|---|---|---|---|---|
|
||
| 1.2 | **23.4%** | 1.6% | **0.454** | 31.4 | 973 ms |
|
||
| 1.5 | 21.9% | 2.3% | 0.498 | 43.0 | 1151 ms |
|
||
| 2.0 | 23.4% | 0.8% | 0.530 | 57.6 | 1100 ms |
|
||
|
||
- **结论**:到达率封顶在 ~23%,增益再大只增刹停(31→58 次/题)。当前瓶颈从「到不了目标」变成「安全层频繁刹停 + 近目标过冲」。
|
||
- **下一步**:距离衰减增益(远离目标全增益、贴近目标减弱)+ 刹停兜底;目标 reach > 30% 且刹停显著下降。
|
||
|
||
## 轮次 7:距离衰减增益 + 刹停兜底(exp: `feat/fb-mix`,负结论)
|
||
|
||
- **假设**:贴近目标减弱反馈可减少过冲/刹停;安全层全拒时用「半速朝目标一步」(单点安全认证)可减少原地停滞。
|
||
- **判据**:reach > 23.4%(轮次 6)且碰撞 ≤3%、刹停下降。
|
||
- **配方**:`fb_scale=100`(>100 mm 全增益,近目标最低 0.2 倍);`fb_fallback=0.5`(全拒时半速 DLS 一步,认证 `qe+fb1` 单点无碰)。n=128,safety=True。
|
||
- **对照**:轮次 6(gain 1.2、无衰减、无兜底:23.4% / 1.6% / 0.454 / 31.4 / 973 ms)。
|
||
- **指标**:
|
||
|
||
| 配置 | 到达 | 碰撞 | ratio2s | 刹停/题 | 墙钟/题 |
|
||
|---|---|---|---|---|---|
|
||
| decay + fallback (gain 1.2) | 7.0% | 57.8% | 0.506 | 45.1 | 1166 ms |
|
||
| decay only (gain 1.2) | 9.4% | 1.6% | 0.454 | 29.6 | 1106 ms |
|
||
| no-decay + fallback (gain 1.2) | 21.1% | 57.8% | 0.506 | 46.8 | 1063 ms |
|
||
| gain 1.0 + decay + fallback | 4.7% | 55.5% | 0.515 | 37.2 | 939 ms |
|
||
|
||
- **结论**:两个改动都失败。① 衰减使接近目标时的收敛变慢,到达从 23.4% 掉到 9.4%;② 兜底绕过安全层的多候选选择,碰撞从 1.6% 拉到 **57.8%**(仅单点认证、且执行 3 步同向动作,危险),必须清除。保留参数但默认关闭(`fb_scale=0, fb_fallback=0`),历史最佳配置(轮次 6)可复现。
|
||
- **过程 bug(自造)**:衰减代码曾用变量名 `g` 覆盖 rollout 的随机数生成器,导致 `randn` 报错;改名 `gdec` 后正常——记录以免误判为模型问题。
|
||
- **下一步**:DAgger 第 2 轮——采集时加入 fb_gain + safety,让训练分布 = 部署分布(1 轮,15000 步微调,约 1 小时)。按目标要求先向用户确认。
|
||
|
||
## 轮次 8:部署分布 DAgger 第 2 轮(exp: `exp/dagger-deploy`,边际改善)
|
||
|
||
- **假设**:第 1 轮 DAgger 用纯策略轨迹采集,与部署分布(反馈 + 安全层)不一致;用部署分布采集可让模型学到刹停/反馈下的正确动作。
|
||
- **判据**:部署口径 reach > 23.4%(轮次 6)或刹停显著下降且到达不降。
|
||
- **配方**:`ml.dagger.collect --fb_gain 1.2 --safety 1`(2000 题 → 637 起点,部署分布)→ 老师重规划 → 打包 → 从 `base_dag1/best.pt` 微调 15000 步(配置 base_dag2,lr 3e-4)。
|
||
- **对照**:base_dag1/best.pt(轮次 6 历史最佳);纯策略 eval 见训练日志。
|
||
- **指标(部署口径,n=128,safety=True)**:
|
||
|
||
| 模型 | gain | 到达 | 碰撞 | ratio2s | 刹停/题 | 墙钟/题 |
|
||
|---|---|---|---|---|---|---|
|
||
| dag2 best | 1.0 | 21.9% | 1.6% | 0.485 | **18.9** | **905 ms** |
|
||
| dag2 best | 1.2 | 22.7% | 1.6% | 0.491 | 25.9 | 922 ms |
|
||
| dag1 best | 1.0 | 20.3% | 2.3% | 0.480 | 21.9 | 944 ms |
|
||
| dag1 best(轮次 6) | 1.2 | **23.4%** | 1.6% | **0.454** | 31.4 | 953 ms |
|
||
|
||
- **结论**:部署分布 DAgger 把刹停降 18–40%、时延降 ~31 ms,但到达率未突破 23% 平台(-0.7 pp),属边际权衡改善;历史最佳到达仍是 dag1+gain1.2(23.4%)。
|
||
- **下一步**:试每步重规划(replan='empty',让反馈逐步生效)与安全层候选 K=16(减少全拒刹停)。
|
||
|
||
## 轮次 9:每步重规划 / K=16 安全候选(exp: `exp/dagger-deploy`,新历史最佳)
|
||
|
||
- **假设**:反馈混合是逐步修正的,每 3 步重规划会滞后;每步重规划(replan='empty')让反馈逐步生效。K=16 给安全层更多候选、减少全拒。
|
||
- **判据**:部署口径 reach > 23.4% 且碰撞 ≤1.6%、刹停/时延不恶化。
|
||
- **配方**:dag2 best;`replan='empty'`(每次 r=0 规划);`K=16`。n=128,safety=True。
|
||
- **对照**:轮次 8(dag2+gain1.2:22.7% / 1.6% / 0.491 / 25.9 / 922 ms)。
|
||
- **指标**:
|
||
|
||
| 配置 | 到达 | 碰撞 | ratio2s | 刹停/题 | 墙钟/题 |
|
||
|---|---|---|---|---|---|
|
||
| **gain1.2 + replan=empty** | **26.6%** | **0.8%** | **0.453** | **20.6** | **845 ms** |
|
||
| gain1.2 + K=16 | 21.1% | 1.6% | 0.451 | 19.4 | 1629 ms |
|
||
| gain1.0 + K=16 | 21.9% | 4.7% | 0.506 | 14.6 | 1588 ms |
|
||
|
||
- **结论**:**每步重规划全面改善**(到达 +3.9 pp、碰撞 1.6→0.8%、刹停 25.9→20.6、时延 922→845 ms),成为**新历史最佳**。K=16 无收益且时延翻倍(1629 ms),淘汰。
|
||
- **下一步**:每步重规划下重扫增益(0.8/1.0/1.5/2.0),找新最优。
|
||
|
||
## 轮次 10:每步重规划下的增益重扫(exp: `exp/dagger-deploy`,新历史最佳)
|
||
|
||
- **假设**:反馈每步生效后,最优增益会上移。
|
||
- **判据**:reach > 26.6%(轮次 9)且碰撞 ≤1.6%;同时比较刹停/时延。
|
||
- **配方**:dag2 best,`replan='empty'`,gain ∈ {0.8, 1.0, 1.2, 1.5, 2.0},safety=True,n=128。
|
||
- **对照**:轮次 9(gain 1.2:26.6% / 0.8% / 0.453 / 20.6 / 845 ms)。
|
||
- **指标**:
|
||
|
||
| gain | 到达 | 碰撞 | ratio2s | 刹停/题 | 墙钟/题 |
|
||
|---|---|---|---|---|---|
|
||
| 0.8 | 21.9% | 2.3% | 0.505 | 11.3 | 801 ms |
|
||
| 1.0 | 22.7% | **0.0%** | 0.489 | 15.2 | 810 ms |
|
||
| 1.2 | 26.6% | 0.8% | 0.453 | 20.6 | 845 ms |
|
||
| **1.5** | **28.9%** | 0.8% | **0.411** | 28.5 | 844 ms |
|
||
| 2.0 | 28.9% | 0.8% | 0.414 | 44.9 | 914 ms |
|
||
|
||
- **结论**:到达在 gain 1.5 封顶(28.9%),2.0 无收益且刹停翻倍(44.9)。**按到达优先/碰撞 ≤3%:历史最佳 = gain 1.5 + 每步重规划(28.9% / 0.8% / 0.411 / 28.5 / 844 ms)**;按碰撞优先:gain 1.0(22.7% / 0.0% / 0.489 / 15.2 / 810 ms)。n=128 的差异约 3–4 题,需 n=256 复核。
|
||
- **下一步**:n=256 复核 gain 1.0 / 1.2 / 1.5;若平台稳定,再决定是否 DAgger 第 3 轮(采集用新部署配置)。
|
||
|
||
## 轮次 11:n=256 复核(发现前 128 题偏难)
|
||
|
||
- **假设**:轮次 10 的 n=128 差异含样本偏差,需扩大样本复核。
|
||
- **判据**:reach 排名与轮次 10 一致、碰撞 ≤3%;若差异大则以 n=256 为准。
|
||
- **配方**:dag2 best,`replan='empty'`,safety=True,gain ∈ {1.0, 1.2, 1.5},n=256。
|
||
- **对照**:轮次 10(n=128:22.7/26.6/28.9%)。
|
||
- **指标**:
|
||
|
||
| gain | n=128 到达 | **n=256 到达** | 碰撞 | ratio2s | 刹停/题 | 墙钟/题 |
|
||
|---|---|---|---|---|---|---|
|
||
| 1.0 | 22.7% | **31.6%** | 0.8% | 0.428 | 15.0 | 748 ms |
|
||
| 1.2 | 26.6% | **34.8%** | 1.2% | 0.392 | 18.6 | 752 ms |
|
||
| 1.5 | 28.9% | **36.7%** | 1.6% | 0.323 | 27.4 | 760 ms |
|
||
|
||
- **结论**:前 128 题显著偏难;n=256 上 **gain 1.5 + 每步重规划 = 到达 36.7% / 碰撞 1.6% / ratio2s 0.323 / 刹停 27.4 / 760 ms**(新历史最佳)。gain 1.0 更保守(31.6% / 碰撞 0.8% / 刹停 15.0)。排名与 n=128 一致(1.5 > 1.2 > 1.0)。
|
||
- **下一步**:n=512 复核 gain 1.2/1.5;随后评估 DAgger 第 3 轮(部署分布采集)与监控页回写。
|
||
|
||
## 轮次 12:n=512 复核(稳定结论)
|
||
|
||
- **假设**:n=256 的 34.8–36.7% 需在更大样本上确认。
|
||
- **判据**:reach 与 n=256 差异 <5 pp、碰撞 ≤3%。
|
||
- **配方**:dag2 best,`replan='empty'`,safety=True,gain ∈ {1.2, 1.5},n=512。
|
||
- **对照**:轮次 11(n=256:34.8 / 36.7%)。
|
||
- **指标**:
|
||
|
||
| gain | n=256 到达 | **n=512 到达** | 碰撞 | ratio2s | 刹停/题 | 墙钟/题 |
|
||
|---|---|---|---|---|---|---|
|
||
| 1.2 | 34.8% | **32.6%** | 1.0% | 0.435 | 18.6 | 722 ms |
|
||
| 1.5 | 36.7% | **33.4%** | 1.0% | 0.399 | 28.1 | 738 ms |
|
||
|
||
- **结论**:n=512 稳定在 **33% 左右**(n=256 略乐观);**历史最佳(n=512,部署口径)= gain 1.5 + 每步重规划:到达 33.4% / 碰撞 1.0% / ratio2s 0.399 / 刹停 28.1 / 738 ms**。保守版 gain 1.2:32.6% / 1.0% / 0.435 / 18.6 / 722 ms(刹停少 1/3)。
|
||
- **监控页回写**:`ml/monitor.py` 新增 `/api/explore`(读 docs/探索日志.md),`ml/monitor.html` 新增「闭环探索日志」卡片;Edge headless 截图确认渲染正常(http://127.0.0.1:8100)。
|
||
- **下一步**:候选选择器(consist/value/first)与 K=4 在反馈+每步重规划下是否影响到达/刹停。
|
||
|
||
## 轮次统计
|
||
|
||
- 连续无实质进展轮数:0(轮次 5 出现实质进展:reach 0→20.3%)。
|
||
- 历史最佳(部署口径):轮次 5,`ml/runs/base_dag1/best.pt` + `fb_gain=1.0` + safety:reach 20.3%、碰撞 2.3%、ratio2s 0.480、brakes 21.9/题、时延 12.58 ms/次(B=64,K=8)。
|