系列目录 · 上一篇:训练环境 · 下一篇:PPO 与奖励

训练参数应围绕三个问题选择:一次收集多少有效经验、每批经验更新网络多少次、策略是在什么难度下学习。把环境数和迭代数一起放大,只会让错误更快、更贵地重复。

1. 先把配置分成三层

层次 代表参数 改变的内容
环境与物理 地形、物理步长、质量、指令、随机化 策略正在解决的问题
学习器 网络、PPO clip、学习率、熵、GAE 如何从数据更新策略
运行管理 并行环境数、迭代数、日志、保存间隔 采样规模、资源与可追溯性

源码中的 MicroduckRlCfg 位于行走任务配置末尾。CLI 覆盖适合一次实验的规模调整;任务级的奖励、事件和课程改动应保存在独立配置或代码提交中。

2. 固定版本的官方行走配方

下表是源码事实,不代表对所有任务都最优:

参数 值 用途
actor/critic 隐层 512, 256, 128 两个网络各自的表达能力
激活 ELU 网络非线性
观测归一化 开启 调整不同量纲输入的尺度
初始动作标准差 1.0 初期探索强度
rollout 长度 24 每次更新前每环境采样步数
learning epochs 5 每批采样数据复用轮数
mini-batches 4 每轮数据划分数
learning rate 1e-3,adaptive 更新步长及自适应策略
clip parameter 0.2 PPO 概率比裁剪范围
entropy coefficient 0.01 鼓励探索
gamma/lambda 0.99 / 0.95 折扣与 GAE 平滑
desired KL 0.01 自适应更新尺度的参考
max grad norm 1.0 梯度裁剪
保存间隔 250 官方配置的检查点间隔
max iterations 50,000 配置中的上限;实际入门运行应显式覆盖

官方配置的 experiment_name 是 velocity,run_name 也是 velocity。这些值与社区 Isaac 项目的日志目录不同。实际运行仍以终端输出及保存的 params/agent.yaml 为准。

3. 用采样量理解环境数

设并行环境数为 N,每环境 rollout 步数为 T,则每次更新收集 B=N×T 条转移。在没有额外截断或特殊采样器的普通路径下:

N T B 4 个 mini-batch 时每批大小
64 24 1,536 384
256 24 6,144 1,536
1,024 24 24,576 6,144
4,096 24 98,304 24,576

5 个 epoch、4 个 mini-batch,意味着每次采样后执行约 20 个 mini-batch 更新步骤,而不是把 B 乘 20 当作新增环境经验。

50 Hz 控制下,单个环境的 24 步覆盖 0.48 秒。增加环境数提高同一更新中并行样本的数量;增加 T 则延长每条采样片段,并改变时间相关性与优势估计条件。两者不应视为相同旋钮。

例如 256 环境、4,000 次更新约对应 2,457.6 万条转移。这个数帮助核对采样预算,不能直接推算 T4 上要几小时,也不能与不同 reset 分布的实验等价比较。

4. 先让最小训练闭环结束

安装环境的方法见已有启动指南。在官方训练仓库根目录,先运行:

rtk proxy uv run train Mjlab-Velocity-Flat-MicroDuck \
  --env.scene.num-envs 64 \
  --agent.max-iterations 5 \
  --agent.save-interval 1 \
  --agent.logger tensorboard \
  --agent.run-name smoke

这组参数是小规模检查方案,本文没有执行。它应检查初始化、PPO 更新、数值稳定性、配置保存和检查点重载。若显存不足,先查看其他进程,再缩小环境数;不要同时重写网络、奖励和物理参数。

第一次结束后,检查当前运行目录中的 model_*.pt、参数文件和事件日志;不要套用第三方项目的 model_final.pt 或自定义摘要名称。

5. 再扩大资源,最后延长实验

在小规模闭环通过后,可以按显存与实际吞吐逐步尝试 256、512、1024 个环境。以下是一个待验证的正式运行示例:

rtk proxy uv run train Mjlab-Velocity-Flat-MicroDuck \
  --env.scene.num-envs 256 \
  --agent.max-iterations 4000 \
  --agent.logger tensorboard \
  --agent.run-name baseline256

不要一次把“环境更多”“训练更久”“速度更快”“扰动更大”全打开。若策略失败,四种改变会混在一起,无法判断原因。先在同一任务配置下测显存峰值和每迭代耗时,再决定采样规模。

6. 随机化参数是任务的一部分

固定版本中,行走工厂包含以下设置:

项目 当前配置的例子
速度指令 vx ±0.4 m/s、vy ±0.3 m/s、yaw ±1.0 rad/s
原地转向 单独分配 15% 的环境指令桶
质量与惯量 联合缩放至基准的 0.95–1.05
BAM 摩擦尺度 0.9–1.1
编码器偏置 每关节约 ±0.015 rad
推扰间隔 3–6 秒
基座重心 从较小范围开始,随课程扩大

这些值只是该配方的假设。若实物更换电池、外壳、脚垫或舵机,应先量化差异再调整范围。过宽的随机化可能让训练总在解决不可能的平衡问题;完全关闭又会让策略过度依赖名义模型。

7. 课程用什么“时钟”推进

官方课程常使用 env.common_step_counter,即向量环境的控制步计数。对于每次更新采样 24 步的配置,500 次迭代大致对应 500×24 个向量环境步,而不是再乘环境数。

这意味着改变 num_steps_per_env 会影响按固定 step 阈值编写的课程落在哪一次迭代。改变环境数则改变相同课程阶段已经见过的总样本量。比较实验时,应同时记录课程阶段与样本量。

行走配置逐步增加站立指令比例,并把动作变化惩罚从较弱值分阶段加强。它不是任意时间连续插值;课程函数按阶段更新 manager 中实际生效的配置。

续训还会涉及计数器恢复。加载另一个任务的检查点用于新任务探索,与接着原实验跑不是一回事;应阅读官方 --init-checkpoint 和 warm-start 语义,不能只换 experiment_name 就以为课程从零开始。

8. 如何读日志并决定改哪个参数

现象 先检查 再考虑的调整
KL 突增、行为迅速变坏 是否有 NaN、配置切换或异常样本 学习率、更新轮数
探索过早消失 动作标准差、熵与任务信号 熵系数、初始探索
一直抖动但不移动 速度项、动作尺度、接触和限位 奖励分配;不只降低学习率
总奖励上升却总趴着 分项奖励是否给了静态捷径 奖励设计与门控
在课程边界退步 该阶段改变了什么 推迟或细化课程阶段
显存溢出 环境数、地形复杂度与其他进程 缩小规模或简化非关键地形

每次只改变能回答当前假设的一组参数。为配置取有含义的运行名,保存实际配置文件,而不是只保留一条命令历史。

9. 建立最小实验记录

至少记录代码提交、依赖锁文件、机器人模型哈希、随机种子、任务名、命令、配置、检查点编号和回放条件。比较基线与改进版时,尽量保持相同评估指令、起始状态和扰动集合,并使用多个种子了解波动。

训练中也要定期回放早期、中期和最新检查点。最后一个检查点不一定行为最好;选择标准应包括跟踪误差、跌倒、停止表现、动作变化与可解释的视频观察。下一篇会解释为什么这些指标不能只压缩成一个总奖励。