第 10 章 训练工程、评测与迁移¶
前九章讲的是算法在优化什么。落到工程上还有三个问题:训练怎么调、结论怎么量、策略怎么上机。三者互相牵制——评测口径不定,调参就没有方向;训练预算不记,结论就无法比较;契约不一致,仿真里再好的策略也接不上真机。
1. 训练配方:从默认值出发¶
一次训练涉及的参数可以分四组:算法超参(裁剪、熵系数、GAE 的 \(\lambda\))、优化器(学习率、批大小、梯度裁剪)、环境(并行数、回合上限、动作重复步数)、网络(宽度、深度、激活、是否共享主干)。四组一起扫是不现实的,正确顺序是固定三组、只动一组。
起点应当取实现作者给的默认值——它们是作者在基准任务上调过的,离"能用"不远。改动的优先级依次是学习率、并行环境数、批大小,最后才是算法超参。每次只改一项,并记录改动前后的完整配置;配置快照随 checkpoint 保存,这一点在 isaac-note 第 5 章「RL 训练流水线」里已有对应做法。
预算要写进结论:总样本数等于并行环境数乘以每环境步数,墙钟时间约等于总样本数除以吞吐。只报"训了多久"没有意义——换一台机器、换一个并行数,数字就不可比。显存上限与并行数的关系见 isaac-note 第 4 章「物理管线与向量化仿真」。
2. 多 seed 与区间口径¶
强化学习的训练曲线方差很大:同一套超参、同一个任务,换一个随机种子,收敛速度可能差一个量级。单 seed 的曲线只能当示意,不能当结论。
可操作的口径是 3–5 个种子,报告均值与区间:
\(n\) 小的时候用 \(t\) 分位数而不是 1.96,这是小样本常被忽略的一处。训练不稳定、分布明显偏斜时,改报中位数与四分位距更诚实。
成功率是另一种量:它是比例,区间要用比例的方法(Wilson 或 Clopper-Pearson),不能套上面的正态近似,尤其在 0 与 1 附近。口径与抓取统计一致,见 manipulation-note 第 10 章「案例与排障」。
| 指标 | 定义 | 报告方式 |
|---|---|---|
| 回合回报 | 每回合折扣或未折扣回报之和 | 均值 ± 标准误,注明折扣 |
| 成功率 | 满足判据的回合占比 | 比例 + 区间,注明判据与回合数 |
| 完成步数 | 达成目标的步数 | 中位数 + 四分位距 |
| 样本效率 | 达到目标指标所需环境步数 | 曲线或阈值交叉点 |
| 墙钟时间 | 训练到该指标的实际耗时 | 注明硬件与并行数 |
判据:先定口径再调参
调参前先固定种子数、评估回合数、成功判据与初始状态分布。口径一变,之前所有曲线都要重跑,横向比较也失去意义。
3. 监控与诊断¶
训练期要看的量分两类:结果量(回合回报、回合长度、成功率)与诊断量(策略熵、近似 KL、价值损失、裁剪触发比例、解释方差、梯度范数)。结果量判断"有没有学起来",诊断量判断"为什么没学起来"。
常见的症状与成因:
| 症状 | 可能原因 | 先查什么 |
|---|---|---|
| 回报长期不涨 | 奖励尺度、探索不足、观测缺信息 | 熵是否塌缩、随机策略的回报基线 |
| 回报先涨后崩 | 学习率过大、裁剪失效、价值发散 | KL、价值损失、梯度范数 |
| 价值损失不降 | 回报尺度大、网络容量不足、折扣不一致 | 回报分布、价值目标计算 |
| 裁剪触发比例接近 1 | 复用轮数过多、策略更新过猛 | 每批复用轮数、学习率 |
| 成功率与回报不同向 | 奖励与任务判据不一致 | 奖励项与终止条件 |
诊断量要按批记录,而不是按 epoch 平均后只留一条曲线;平均值会把偶发的尖峰抹平,而尖峰往往就是崩掉的起点。
4. reward hacking 的识别¶
奖励被钻空子(reward hacking)指策略优化了奖励函数,却没有完成任务。它的根源在第 4 章「马尔可夫决策过程与价值」:奖励是任务的一个代理,代理与真实目标之间的缝隙就是空子。
机器人上常见的三种形态:
- 用抖动换精度:位置误差奖励只看末端位置,策略用高频抖动"蹭"到目标附近,机构磨损与噪声都被忽略。
- 绕过约束:奖励鼓励快速接近目标,策略直接穿过本应避开的区域,因为碰撞只被写成软惩罚。
- 利用仿真漏洞:穿模、无限摩擦、传感器取值越界,仿真里成立、真机上不存在。
识别靠独立判据,不靠奖励曲线:回报上升而成功率不升,几乎一定是奖励漏了约束;行为视频里出现高频抖动或不合理路径,说明奖励的某一项被过度利用。对策有三条——把硬约束写成终止或可行性检查、给动作加平滑与能量惩罚、让评测判据与奖励完全分离。
坑:拿训练奖励当评测指标
训练奖励是优化目标,评测指标是任务判据,两者必须独立实现。用同一个函数既训练又评测,等于让策略给自己打分,reward hacking 永远不会被发现。
5. 消融与预算¶
一个方法有效,需要证明"是哪一部分在起作用"。做法是单因素消融:在固定种子与预算下,去掉或替换一个组件,其余不变,比较区间是否重叠。
- 组件消融:去掉动作分块、去掉熵项、去掉目标网络,看指标变化。
- 数据消融:减少示范数量、降低数据质量,画指标随数据量的曲线。
- 规模消融:改变并行环境数或网络宽度,看样本效率与墙钟时间如何分离。
消融的预算是硬约束。每个配置至少 3 个种子,10 个配置就是 30 次训练;在开始之前先算总样本数与机时,否则做到一半没有预算收尾。论文里的消融表往往省略了这部分成本,工程上不能省。
6. 基准与任务库¶
公开基准提供两样东西:可比的任务定义与可复现的评测口径。常用的四类:
| 基准 | 内容 | 适用与边界 |
|---|---|---|
| Gymnasium | 环境接口与经典控制任务 | 接口标准;任务简单,只用于验证算法实现 |
| MuJoCo Playground | MuJoCo 上的连续控制与机器人任务集 | 适合快速验证;与真机仍有差距 |
| ManiSkill | 操作类任务与大规模并行环境 | 操作任务评测;资产与传感器配置随版本 |
| D4RL | 离线 RL 数据集(多种数据质量) | 离线算法对照;数据质量定义决定结论 |
基准的结论只在同一版本、同一评测协议下可比。报告里至少要写清:环境版本、任务名、评估回合数、初始状态分布、是否用动作重复步数。缺一项,数字就无法与别人的结果对齐。
7. 迁移三件套与部署回路¶
仿真里训练好的策略要上真机,要处理三类差距,通称迁移三件套:延迟(观测到动作生效的滞后)、感知噪声(相机与编码器的噪声模型)、系统辨识(质量、摩擦、传动刚度的偏差)。三者都可以在训练期随机化,具体做法见 isaac-note 第 9 章「Sim-to-Real 与 ROS 2 桥接」。
比算法更容易出错的是契约。部署前逐项比对:
- 观测:维度顺序、单位、坐标系、是否含历史帧;归一化统计量必须与训练时同一份(第 2 章「监督学习的最小闭环」的保存方式)。
- 动作:绝对还是增量、关节顺序、限幅位置、控制频率;训练时的限幅要在部署侧原样保留。
- 时序:策略频率、控制器频率、时间戳来源;用仿真时钟还是系统时钟要明确。
flowchart LR
train["训练<br/>记录配置与种子"] --> eval["评估<br/>固定判据与回合数"]
eval --> exp["导出<br/>ONNX / TorchScript"]
exp --> contract["契约比对<br/>观测、动作、归一化"]
contract --> sandbox["沙箱验证<br/>限幅、急停、回放"]
sandbox --> deploy["上线<br/>日志与监控"]
deploy -->|"失败样本回采"| train
部署回路本身要有兜底:动作限幅、速度上限、看门狗与急停,都不能依赖策略自己遵守。策略失效时退到安全控制器,这条回退路径要单独测过。推理时延与量化属于部署侧的通用问题,见 camera-note 第 10 章「感知工程与部署」;控制环的时序问题见 control-note 第 1 章「采样与保持的相位代价」。
最后一条经验:训练收敛不等于策略可用。收敛只说明优化目标被压下去了;可用还要过评测口径、契约比对与沙箱验证三关。三关中任何一关没过,训练曲线再漂亮也没有意义。
8. 要点¶
- 训练参数分四组,固定三组只动一组;起点用实现作者的默认值,改动优先学习率与并行数。
- 预算要写成总样本数与墙钟时间,并注明硬件与并行数;配置快照随 checkpoint 保存。
- 单 seed 不作结论;报告 3–5 个种子的均值与 \(t\) 区间,成功率用比例区间,偏斜时用中位数与四分位距。
- 结果量判断有没有学起来,诊断量判断为什么没学起来;诊断量按批记录,别只留平均值。
- reward hacking 用独立判据识别:回报升而成功率不升、行为异常、仿真漏洞;对策是硬约束、平滑惩罚与评测分离。
- 消融是单因素的,每个配置至少 3 个种子,开始前先算预算;基准结论只在同版本同协议下可比。
- 迁移处理延迟、噪声与系统辨识;部署前比对观测、动作与时序契约,并保留限幅、看门狗与回退路径。
参考文献与延伸阅读¶
- Henderson, P., Islam, R., Bachman, P., Pineau, J., Precup, D., & Meger, D. Deep Reinforcement Learning That Matters. AAAI, 2018. arXiv
- Agarwal, R., Schwarzer, M., Castro, P. S., Courville, A. C., & Bellemare, M. G. Deep Reinforcement Learning at the Edge of the Statistical Precipice. NeurIPS, 2021. arXiv
- Fu, J., Kumar, A., Nachum, O., Tucker, G., & Levine, S. D4RL: Datasets for Deep Data-Driven Reinforcement Learning. arXiv:2004.07219, 2020. arXiv
- Tobin, J., Fong, R., Ray, A., et al. Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World. IROS, 2017. arXiv
- Zhao, W., Queralta, J. P., & Westerlund, T. Sim-to-Real Transfer in Deep Reinforcement Learning for Robotics: A Survey. SSCI, 2020. arXiv