DEEP 185 · 第十六辑 · 小白基础课 · LEARN NOTES

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

解读 185 · TensorBoard 逐指标

解读对象:概念课 · 以 docs/microduck-30day/experiments/experiment-log.csv 与 docs/microduck-30day/assets/day-01-lesson-01/summary.md 为教材
需要的前置:零基础可读;训练命令怎么跑见解读 186

训练时每隔几步,框架就把一批数字写进 event 文件;tensorboard --logdir logs/rsl_rl 把它们画成曲线。本篇不教开面板,只回答:几十条曲线里先看哪几条,以及它们怎么骗你。这只鸭子两次真实训练,正好是一正一反两个故事。

mean_reward:涨了,不等于学会走

Train/mean_reward 是"平均每集拿多少分",最显眼,也最容易骗人。2026-09-05 的冒烟测试(lesson-01,8 环境 5 迭代,纯流程验证)生成了 summary.md,开头两行是机器从 event 文件算出的,不是手填的:

| `Train/mean_reward` | -0.061442 | 0.094974 | 0.156416 | 4 |
| `Train/mean_episode_length` | 32.500000 | 35.708332 | 3.208332 | 4 |

reward 从 -0.0614 涨到 0.0950,看着像在进步;可同一张表里 Episode_Termination/fell_over(摔倒终止率)从 0 涨到 1.0,yaw 转向误差反而从 0.1374 升到 0.1716(docs/course/06-看懂训练曲线.md)。就像学生把卷子写满了不等于答对了——reward 上升只证明"网络在被更新",不证明"步态在形成"。当天日志的结论因此写成两句:流程通过;步态尚未开始。

ep_len:回答"摔不摔",不回答"走不走"

ep_len(mean_episode_length)是平均每集活多少步,它涨说明摔得少了。本项目 expC 里 ep_len 51 → 315 步(约 6.3 秒),最终 checkpoint 回放 240 步零摔倒——站稳了。接着 expD 用 512 环境续训,实验总表 experiment-log.csv 里这一行是它的判决书:

expD-m4-512,2026-09-07,Mjlab-Velocity-Flat-MicroDuck,cpu,512,24,12500->,microduck-replica/upstream/microduck_rl/logs/rsl_rl/velocity/2026-09-07_00-06-08_expD-m4-512,model_12500.pt,,superseded,512env续训自expC/2198;ep_len 315->744站稳但步态未成(air_time_mean卡0.04s,shuffle局部最优)

ep_len 315 → 744,鸭子活得很健康;但 air_time_mean(脚离地时间)卡死在 0.04 秒——脚几乎不离地,靠原地小幅挪脚蹭分。"不摔"和"会走"是两个优化目标。

用曲线改配方:expE 的门槛手术

看懂曲线的回报是能开出药方。训练参数指南的假设是:脚离地奖励的门槛设在 0.125 秒,策略从没迈出过够高的步,就永远收不到抬脚的正反馈。于是总表下一行 expE 把 threshold_min 0.125->0.04 让步态奖励可见;air_time_mean>0.10后收紧回0.125——先降低门槛让奖励"看得见",起来了再收紧。这就是逐指标读日志的完整闭环:发现卡住的指标 → 提出假设 → 改一个量 → 用下一条曲线验收。

你带走的收获

延伸

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