第 06 课 · 看懂训练曲线:reward、ep_len 与失败的训练
这一课解决什么问题:训练跑起来之后,TensorBoard 里几十条曲线,先看哪几条? reward 涨了是不是就等于学会走了? 这一课用本项目的真实实验数据(expC/expD)教你从曲线判断"练没练成"。
前置:第 05 课。有一个产生过日志的训练目录最好。
1. 优先看哪几个指标
训练参数指南第 7.3 节给了一张优先级表,精选如下:
| 指标 | 回答的问题 | 期望趋势 |
|---|---|---|
| episode length (ep_len) | 是否经常早早摔倒 | 上升后稳定 |
| velocity tracking | 是否真跟上命令 | reward 上升、error 下降 |
air_time_mean |
是否真的迈步 | 脱离零附近,但不是越大越好 |
| upright / tilt | 躯干是否稳定 | 稳定,不靠大幅前倾作弊 |
| action std / entropy | 是否仍在探索 | 逐步下降,不能突然塌缩 |
| penalty 各项 | 惩罚符号是否正确 | 每一项贡献应始终 ≤ 0 |
最后一条最容易被忽略:项目里有两类惩罚函数,一类需要负权重、一类自取负需要正权重,看名字不可靠,看日志里每项惩罚贡献是否 ≤ 0 才可靠。符号接错,惩罚会变奖励,曲线全线骗人。
2. reward 涨 ≠ 学会走
两种典型骗术。其一是上面说的惩罚符号接反。其二是"涨了,但涨的不是走路":本项目 2026-09-05 的 lesson-01,5 次迭代里 mean_reward 从 -0.0614 涨到 0.0950,但摔倒率仍接近 1.0、yaw 转向误差反而从 0.1374 升到 0.1716。reward 上升只证明"网络在被更新",不证明"步态在形成"。当天日志的正确结论是两句:流程通过;步态尚未开始到可评价的程度。
3. ep_len 说明什么:expC/expD 的真实故事
**ep_len(平均每集活多少步)回答的是"摔不摔",不是"走不走"。**看本项目自己的两段数据:
- expC(CPU、64 环境,从 100 迭代续训到 2199 迭代,约 85 分钟):reward 0.80 → 12.77(16 倍),摔倒终止从约 2.0 降到 1.00,ep_len 51 → 315 步(约 6.3 秒),最终 checkpoint 回放 240 步零摔倒。结论:站稳了——但回放是"重心转移式碎步",不是大步走。
- expD-m4-512(512 环境,从 expC 的 2198 迭代续训):ep_len 315 → 744,站得更稳了;但
air_time_mean卡在 0.04 秒,始终没有真正的迈步——日志备注写的是"站稳但步态未成(air_time_mean 卡 0.04s,shuffle 局部最优)",状态标记 superseded(被后续取代)。
这就是本课最重要的一课:ep_len 涨到 744,鸭子活得很健康,但它选择原地小幅挪脚蹭分——"不摔"和"会走"是两个优化目标。air_time_mean 长期贴着 0.04 秒,说明脚几乎不离地。为什么? 指南第 7.1 节的假设:脚离地时间奖励的门槛设在 0.125 秒,策略从来没迈出过够高的步,就永远收不到抬脚的正反馈。后来的 expE 把门槛降到 0.04 让奖励可见,等 air_time_mean 起来后再收紧回去——这是用曲线诊断出的改进。
4. 「训练没成」和「导出没成」怎么区分
流程顺序帮你天然分开这两件事:回放(play)发生在导出之前,直接加载 checkpoint。
- checkpoint 回放就摔、步态不对 → 训练没成,导出救不了它,回去加训练量或改配方;
- 回放正常、换成导出的 ONNX 后行为不对 → 才查导出:是不是没走官方脚本(它会把 observation 归一化层写进 ONNX 图,手工转的 checkpoint ≠ 官方部署件)、输入是不是 [1, 61]、输出 [1, 14]。
所以呢:每次判断"我训练失败了",先问一句——你回放的是 checkpoint 还是 ONNX? 两者的失败原因完全不同。
动手练习(20 分钟)
cd microduck_rl && uv run tensorboard --logdir logs/rsl_rl --port 6006
浏览器开 http://localhost:6006,从你自己 lesson-01 的曲线里找出三个数:mean_reward 起点和终点、摔倒终止率、ep_len。然后仿照第 3 节写两句结论——一句关于流程,一句关于步态,不许合并。
自查清单
- [ ] 我能按优先级说出至少 4 个该盯的指标和各自的期望趋势
- [ ] 我能说出 reward 上涨的两种"骗术"
- [ ] 我能讲出 expD"ep_len 315 → 744 但步态没成"说明了什么
- [ ] 我能区分"训练没成"和"导出没成"的不同症状
全部打勾,进入第 07 课:排错方法论。
下一课预告
第 07 课是阶段 B 的最后一课:一套固定的五步排错流程,拿本项目三个真实踩坑案例走一遍。阶段 B 完结后,下一阶段进入硬件。
延伸资源
- 训练参数指南第 7 节(指标表与 A/B 方法的出处):
microduck-replica/docs/训练参数调整与新动作开发指南.md - expC 完整预注册与结果:
microduck-replica/rl-series/experiments/expC-cpu2000/README.md - 实验数据总表:
docs/microduck-30day/experiments/experiment-log.csv与microduck-replica/构建日志.md