ml: 按运行手册审查修订——头分目录不互相覆盖(ml/runs/<CFG>、selected_ckpt/CKPT);统一 $PYTHON(Windows Git Bash 可跑);gen 按实测样本/任务自动补量;R10 改终态判据(≥5k 样本/s≈60k 步≤3.5h);m5 纯策略/仿真安全层双口径;无老师题定长 6 s 口径;APG 展开随批时长、端点+中点铰链、余量 3 mm(投影同步);挖错池只用本轮;门禁加 R7;bench 加 R8 对抗集与刹停率、--nc-n/--route-n/--r8-n;新增 check_r2 与 acceptance;export 默认 fp32;出题分块防 OOM;val 为空保护
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="generator" content="pandoc" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
||||
<title>Transformer 避障运动策略:最终方案</title>
|
||||
<title>Transformer 轨迹拟合训练方案</title>
|
||||
<style>
|
||||
html {
|
||||
color: #1a1a1a;
|
||||
@@ -252,7 +252,7 @@
|
||||
</head>
|
||||
<body>
|
||||
<header id="title-block-header">
|
||||
<h1 class="title">Transformer 避障运动策略:最终方案</h1>
|
||||
<h1 class="title">Transformer 轨迹拟合训练方案</h1>
|
||||
</header>
|
||||
<nav id="TOC" role="doc-toc">
|
||||
<ul>
|
||||
@@ -613,8 +613,9 @@ K=8,二者共用骨干,切换约 1 天</td>
|
||||
<tr class="odd">
|
||||
<td>训练余量</td>
|
||||
<td>越大越不易被认证拒绝</td>
|
||||
<td>越大行程越长、贴柱越难</td>
|
||||
<td><strong>5 mm</strong></td>
|
||||
<td>越大行程越长、贴柱越难;高于老师轨迹自身间隙(实测最小间隙 p50 4.4 /
|
||||
p90 5.9 mm)会与 BC 标签对抗</td>
|
||||
<td><strong>3 mm</strong>(≈ 老师 p10),APG 碰撞项与运行时投影共用</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>关节噪声增广 σ</td>
|
||||
@@ -1230,18 +1231,19 @@ s),统计到达率、用时 ≤ 老师 × 1.3
|
||||
<h3 id="71-主力apg-可微微调">7.1 主力:APG 可微微调</h3>
|
||||
<pre><code>for 每个 batch(随机采样 q0 和目标,不需要老师):
|
||||
q = q0
|
||||
for t in 0..H-1 (H = 60 次推理 × 3 步 = 180 步 ≈ 3.6 s;长任务分段截断反传):
|
||||
for t in 0..H-1 (H = 本批老师时长 p90 × 1.2,60–150 次推理 × 3 步 ≈ 3.6–9 s;无老师题按 6 s;每 10 次推理截断反传):
|
||||
chunk = π(obs(q, 目标, 前缀), z) # 每条展开固定一个噪声 z
|
||||
Δq = chunk[0:3] # 与部署一致
|
||||
q = clamp(q + Δq)
|
||||
累计 L_col(q), L_smooth(Δq)
|
||||
L = w_tgt·L_target(q_H) + w_col·ΣL_col + w_smooth·ΣL_smooth (+ w_len·行程) + w_bc·L_BC
|
||||
L = w_tgt·Σ_段末 L_target(q) + w_col·ΣL_col + w_smooth·ΣL_smooth (+ w_len·行程) + w_bc·L_BC
|
||||
反传,梯度裁剪 ≤ 1.0,lr 1e-4</code></pre>
|
||||
<ul>
|
||||
<li>碰撞项 L_col = Σ ReLU(margin − 胶囊距离),margin =
|
||||
<code>margin_mm</code> + 训练余量 5
|
||||
mm(覆盖安全层认证的保守量);含臂×立柱、臂×台架、臂×臂(非相邻段)。</li>
|
||||
<li>到达项:位置误差² + λ_rot·‖R − R*‖_F²。</li>
|
||||
<li>碰撞项 L_col = Σ ReLU(margin − 胶囊距离),margin = 训练余量 3
|
||||
mm(间隙已扣除 <code>margin_mm</code>);每步端点 +
|
||||
中点;含臂×立柱、臂×台架、臂×臂(非相邻段)。</li>
|
||||
<li>到达项:每个截断段末的位置误差² + λ_rot·‖R −
|
||||
R*‖_F²;不做到达即停,段末项在整条展开上持续给出接近梯度。</li>
|
||||
<li>平滑项:速度² + 加速度²。</li>
|
||||
<li>BC 锚定项:保留预训练损失,防止多模态被压缩;每轮监控左右比例。</li>
|
||||
<li>采样分布同 §4.3,B/C/D 类提到 60%,其中贴柱类 40%。</li>
|
||||
@@ -1311,8 +1313,9 @@ ms,否则放 Web Worker 与推理流水线并行。</li>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td><code>traj_policy.onnx</code>(fp16,约 9.8 MB)+
|
||||
<code>traj_policy.meta.json</code>(指纹 / 特征版本 / TCP)</td>
|
||||
<td><code>traj_policy.onnx</code>(fp32,约 20 MB;wasm / CPU 后端上
|
||||
fp16 不保证更快)+ <code>traj_policy.meta.json</code>(指纹 / 特征版本 /
|
||||
TCP)</td>
|
||||
<td>PRM 路网、IK 候选大表</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
@@ -1464,6 +1467,11 @@ rt)</td>
|
||||
</table>
|
||||
<p>说明:30 例全对时,失败率的 95% 置信上界约 9.5%;扩展集 1000 例 0
|
||||
失败时约 0.3%,因此以扩展集作为 30/30 的统计支撑。</p>
|
||||
<p>口径:本表全部按部署形态(<code>tests/policy_bench.cjs</code>,与浏览器同一份运行时)或
|
||||
held-out 闭环仿真(开仿真安全层)测量,由
|
||||
<code>ml/eval/acceptance.py</code> 汇总;M5
|
||||
门禁与挖错用的是关安全层的纯策略口径,二者互不替代。挖错题与门禁集没有老师参考,到达按定长
|
||||
6 s 判,「到达用时」「关节行程」两项只在有老师参考的任务上统计。</p>
|
||||
<hr />
|
||||
<h2 id="10-当前存在的问题与风险">10. 当前存在的问题与风险</h2>
|
||||
<h3 id="101-只能靠实测消除的风险按里程碑顺序">10.1
|
||||
@@ -1489,7 +1497,9 @@ rt)</td>
|
||||
<tr class="even">
|
||||
<td>R2</td>
|
||||
<td>时间律仍有不可观测成分,闭环起不了步</td>
|
||||
<td>近邻样本标签方差 < 10% 步长;起步失败率 = 0</td>
|
||||
<td>近邻样本标签方差 < 10%
|
||||
步长(<code>ml/eval/check_r2.py</code>);起步失败率 = 0(闭环
|
||||
<code>start_fail</code>)</td>
|
||||
<td>进一步把剩余路程估计加入输入</td>
|
||||
<td>M1 / M5</td>
|
||||
</tr>
|
||||
@@ -1497,7 +1507,7 @@ rt)</td>
|
||||
<td>R3</td>
|
||||
<td>距离认证过于保守,贴柱处拒绝率高,影响 30/30</td>
|
||||
<td>near_column 上认证拒绝率统计;离线 10⁵ 段 0.01° 审计漏检 = 0</td>
|
||||
<td>训练余量提高到 3–6 mm,接受行程变长;收紧杠杆界(按位形分区)</td>
|
||||
<td>训练余量提高到 4–6 mm,接受行程变长;收紧杠杆界(按位形分区)</td>
|
||||
<td>M2 / M7</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
@@ -1524,14 +1534,17 @@ rt)</td>
|
||||
<tr class="odd">
|
||||
<td>R7</td>
|
||||
<td>APG 压缩多模态或拉长路径(ELMP 中路径 +23%)</td>
|
||||
<td>每轮左右比例与行程门禁</td>
|
||||
<td>每轮门禁:B/C 类左右绕行比例变化 ≤ 5 个百分点、行程中位数比 ≤
|
||||
1.05(<code>ml/mining/gate.py</code>)</td>
|
||||
<td>加大 BC 锚定权重;行程项</td>
|
||||
<td>M6</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>R8</td>
|
||||
<td>卡死换向活锁</td>
|
||||
<td>50 个"两侧都要绕远"对抗用例 3 s 内恢复 ≥ 95%,活锁 = 0</td>
|
||||
<td>50 个"两侧都要绕远"对抗用例(J1 起终差 ≥
|
||||
140°、终点贴立柱,部署运行时)首次换向锁后 3 s 内到达 ≥ 95%,活锁 =
|
||||
0(<code>tests/policy_bench.cjs</code> r8)</td>
|
||||
<td>子目标改为离散绕行锚点分类</td>
|
||||
<td>M6 / M7</td>
|
||||
</tr>
|
||||
@@ -1545,8 +1558,10 @@ rt)</td>
|
||||
<tr class="even">
|
||||
<td>R10</td>
|
||||
<td>训练耗时估计偏差</td>
|
||||
<td>2000 步吞吐 ≥ 2 万样本/s</td>
|
||||
<td>降 epoch 或增大 batch</td>
|
||||
<td>60000 步 ≤ 3.5 h,即 2000 步测速 ≥ 5000 样本/s(3090 实测 6.2 k/s ≈
|
||||
2.8 h)</td>
|
||||
<td>FK 损失胶囊数 96 → 48;仍不够则步数降到 40000(MeanFlow JVP
|
||||
受算力限制,增大 batch 无效)</td>
|
||||
<td>M5</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
+13
-11
@@ -55,7 +55,7 @@
|
||||
| 挖错循环中 E2 错题请老师补路径 | 解决可微代价绕不出的局部极小 | 量小、离线 | **上** |
|
||||
| 老师:PRM 路网 A* vs `solveDyn` | A*:确定性,同类任务左右选择一致,且是路网上的最短;`solveDyn` 覆盖更全 | A*:受路网分辨率限制,个别任务失败 | **A* 为主老师**,失败的任务用 `solveDyn`(固定种子)补 |
|
||||
| 推理后端:WebGPU vs wasm | WebGPU 大模型快 | 本模型约 4M 参数,WebGPU 每次调度 33–67 μs × 150–300 次,调度开销反而大 | **wasm-SIMD 多线程**;M4 实测若 WebGPU P99 更低再换 |
|
||||
| 训练余量 | 越大越不易被认证拒绝 | 越大行程越长、贴柱越难 | **5 mm** |
|
||||
| 训练余量 | 越大越不易被认证拒绝 | 越大行程越长、贴柱越难;高于老师轨迹自身间隙(实测最小间隙 p50 4.4 / p90 5.9 mm)会与 BC 标签对抗 | **3 mm**(≈ 老师 p10),APG 碰撞项与运行时投影共用 |
|
||||
| 关节噪声增广 σ | 覆盖偏离状态 | 过大产生无意义状态 | **1°** |
|
||||
| 局部牛顿精修 | 末端精度到 < 1 mm | 无 | **上**,同样过安全层 |
|
||||
|
||||
@@ -311,17 +311,17 @@ L = MeanFlow 损失 1.0
|
||||
```
|
||||
for 每个 batch(随机采样 q0 和目标,不需要老师):
|
||||
q = q0
|
||||
for t in 0..H-1 (H = 60 次推理 × 3 步 = 180 步 ≈ 3.6 s;长任务分段截断反传):
|
||||
for t in 0..H-1 (H = 本批老师时长 p90 × 1.2,60–150 次推理 × 3 步 ≈ 3.6–9 s;无老师题按 6 s;每 10 次推理截断反传):
|
||||
chunk = π(obs(q, 目标, 前缀), z) # 每条展开固定一个噪声 z
|
||||
Δq = chunk[0:3] # 与部署一致
|
||||
q = clamp(q + Δq)
|
||||
累计 L_col(q), L_smooth(Δq)
|
||||
L = w_tgt·L_target(q_H) + w_col·ΣL_col + w_smooth·ΣL_smooth (+ w_len·行程) + w_bc·L_BC
|
||||
L = w_tgt·Σ_段末 L_target(q) + w_col·ΣL_col + w_smooth·ΣL_smooth (+ w_len·行程) + w_bc·L_BC
|
||||
反传,梯度裁剪 ≤ 1.0,lr 1e-4
|
||||
```
|
||||
|
||||
- 碰撞项 L_col = Σ ReLU(margin − 胶囊距离),margin = `margin_mm` + 训练余量 5 mm(覆盖安全层认证的保守量);含臂×立柱、臂×台架、臂×臂(非相邻段)。
|
||||
- 到达项:位置误差² + λ_rot·‖R − R*‖_F²。
|
||||
- 碰撞项 L_col = Σ ReLU(margin − 胶囊距离),margin = 训练余量 3 mm(间隙已扣除 `margin_mm`);每步端点 + 中点;含臂×立柱、臂×台架、臂×臂(非相邻段)。
|
||||
- 到达项:每个截断段末的位置误差² + λ_rot·‖R − R*‖_F²;不做到达即停,段末项在整条展开上持续给出接近梯度。
|
||||
- 平滑项:速度² + 加速度²。
|
||||
- BC 锚定项:保留预训练损失,防止多模态被压缩;每轮监控左右比例。
|
||||
- 采样分布同 §4.3,B/C/D 类提到 60%,其中贴柱类 40%。
|
||||
@@ -374,7 +374,7 @@ for 每个 batch(随机采样 q0 和目标,不需要老师):
|
||||
|
||||
| 有 | 没有 |
|
||||
|---|---|
|
||||
| `traj_policy.onnx`(fp16,约 9.8 MB)+ `traj_policy.meta.json`(指纹 / 特征版本 / TCP) | PRM 路网、IK 候选大表 |
|
||||
| `traj_policy.onnx`(fp32,约 20 MB;wasm / CPU 后端上 fp16 不保证更快)+ `traj_policy.meta.json`(指纹 / 特征版本 / TCP) | PRM 路网、IK 候选大表 |
|
||||
| 胶囊距离与认证(`collideFree`、包围球预筛、`pair2d`) | `solveDyn` / `routeRT` / RRT / A* |
|
||||
| `fk` / `orient`、局部牛顿精修 `solveTo` 单步 | 全量 IK 枚举 |
|
||||
|
||||
@@ -431,6 +431,8 @@ for 每个 batch(随机采样 q0 和目标,不需要老师):
|
||||
|
||||
说明:30 例全对时,失败率的 95% 置信上界约 9.5%;扩展集 1000 例 0 失败时约 0.3%,因此以扩展集作为 30/30 的统计支撑。
|
||||
|
||||
口径:本表全部按部署形态(`tests/policy_bench.cjs`,与浏览器同一份运行时)或 held-out 闭环仿真(开仿真安全层)测量,由 `ml/eval/acceptance.py` 汇总;M5 门禁与挖错用的是关安全层的纯策略口径,二者互不替代。挖错题与门禁集没有老师参考,到达按定长 6 s 判,「到达用时」「关节行程」两项只在有老师参考的任务上统计。
|
||||
|
||||
---
|
||||
|
||||
## 10. 当前存在的问题与风险
|
||||
@@ -440,15 +442,15 @@ for 每个 batch(随机采样 q0 和目标,不需要老师):
|
||||
| # | 风险 | 门禁(不过不进下一步) | 回退 | 何时测 |
|
||||
|---|---|---|---|---|
|
||||
| R1 | 老师在相邻任务上左右绕行跳变,标签自相矛盾 | 起终点扰动 ±5 mm 的邻居任务同伦类一致率 ≥ 90% | 对 A* 边代价加左右偏好项,强制同区域选同侧 | M1 |
|
||||
| R2 | 时间律仍有不可观测成分,闭环起不了步 | 近邻样本标签方差 < 10% 步长;起步失败率 = 0 | 进一步把剩余路程估计加入输入 | M1 / M5 |
|
||||
| R3 | 距离认证过于保守,贴柱处拒绝率高,影响 30/30 | near_column 上认证拒绝率统计;离线 10⁵ 段 0.01° 审计漏检 = 0 | 训练余量提高到 3–6 mm,接受行程变长;收紧杠杆界(按位形分区) | M2 / M7 |
|
||||
| R2 | 时间律仍有不可观测成分,闭环起不了步 | 近邻样本标签方差 < 10% 步长(`ml/eval/check_r2.py`);起步失败率 = 0(闭环 `start_fail`) | 进一步把剩余路程估计加入输入 | M1 / M5 |
|
||||
| R3 | 距离认证过于保守,贴柱处拒绝率高,影响 30/30 | near_column 上认证拒绝率统计;离线 10⁵ 段 0.01° 审计漏检 = 0 | 训练余量提高到 4–6 mm,接受行程变长;收紧杠杆界(按位形分区) | M2 / M7 |
|
||||
| R4 | 浏览器推理延迟 | M4 后立即导出 ONNX,wasm-SIMD 多线程测 batch=8 P99 < 15 ms | 减小模型(d=128,约 1.8M 参数);同时测 WebGPU,更快则换 | **M4(最大不确定项)** |
|
||||
| R5 | MeanFlow 头在 6 轴、位姿目标下穿柱或训练不稳 | near_column 穿柱率(关安全层)≤ 2%;损失不发散 | 同骨干换 WTA K=8 头 | M5 |
|
||||
| R6 | 位姿目标的多 IK 分支带来额外多峰 | 不同肘/腕分支子集到达率 ≥ 主集 − 2 个百分点 | 加目标分支标志 | M5 |
|
||||
| R7 | APG 压缩多模态或拉长路径(ELMP 中路径 +23%) | 每轮左右比例与行程门禁 | 加大 BC 锚定权重;行程项 | M6 |
|
||||
| R8 | 卡死换向活锁 | 50 个"两侧都要绕远"对抗用例 3 s 内恢复 ≥ 95%,活锁 = 0 | 子目标改为离散绕行锚点分类 | M6 / M7 |
|
||||
| R7 | APG 压缩多模态或拉长路径(ELMP 中路径 +23%) | 每轮门禁:B/C 类左右绕行比例变化 ≤ 5 个百分点、行程中位数比 ≤ 1.05(`ml/mining/gate.py`) | 加大 BC 锚定权重;行程项 | M6 |
|
||||
| R8 | 卡死换向活锁 | 50 个"两侧都要绕远"对抗用例(J1 起终差 ≥ 140°、终点贴立柱,部署运行时)首次换向锁后 3 s 内到达 ≥ 95%,活锁 = 0(`tests/policy_bench.cjs` r8) | 子目标改为离散绕行锚点分类 | M6 / M7 |
|
||||
| R9 | 安全层贴柱时耗时超标 | near_column 全程 P99 < 5 ms | Web Worker 流水线;提交步数降到 2 | M7 |
|
||||
| R10 | 训练耗时估计偏差 | 2000 步吞吐 ≥ 2 万样本/s | 降 epoch 或增大 batch | M5 |
|
||||
| R10 | 训练耗时估计偏差 | 60000 步 ≤ 3.5 h,即 2000 步测速 ≥ 5000 样本/s(3090 实测 6.2 k/s ≈ 2.8 h) | FK 损失胶囊数 96 → 48;仍不够则步数降到 40000(MeanFlow JVP 受算力限制,增大 batch 无效) | M5 |
|
||||
|
||||
### 10.2 已知缺陷
|
||||
|
||||
|
||||
Reference in New Issue
Block a user