LESSON 06 · 阶段 B · 软件与仿真 · LEARN NOTES

收进学习手册 · 2026-09-11 · duck.whatled.com

第 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(平均每集活多少步)回答的是"摔不摔",不是"走不走"。**看本项目自己的两段数据:

这就是本课最重要的一课:ep_len 涨到 744,鸭子活得很健康,但它选择原地小幅挪脚蹭分——"不摔"和"会走"是两个优化目标。air_time_mean 长期贴着 0.04 秒,说明脚几乎不离地。为什么? 指南第 7.1 节的假设:脚离地时间奖励的门槛设在 0.125 秒,策略从来没迈出过够高的步,就永远收不到抬脚的正反馈。后来的 expE 把门槛降到 0.04 让奖励可见,等 air_time_mean 起来后再收紧回去——这是用曲线诊断出的改进。

4. 「训练没成」和「导出没成」怎么区分

流程顺序帮你天然分开这两件事:回放(play)发生在导出之前,直接加载 checkpoint。

所以呢:每次判断"我训练失败了",先问一句——你回放的是 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 节写两句结论——一句关于流程,一句关于步态,不许合并。

自查清单

全部打勾,进入第 07 课:排错方法论。

下一课预告

第 07 课是阶段 B 的最后一课:一套固定的五步排错流程,拿本项目三个真实踩坑案例走一遍。阶段 B 完结后,下一阶段进入硬件。

延伸资源

什么鸭 WHATDUCK · 复刻学习笔记 ← 全部手册 · 首页