跳转到内容

超参数、稳定性与调试清单

RL 调试的顺序:环境是否正确 → 奖励尺度 → 观测归一化 → 优势/回报计算 → 学习率与裁剪 → 网络初始化。本章给出一份可执行的清单、应监控的诊断量(熵、KL、解释方差、梯度范数),以及常见症状对应的原因。

RL 实验失败的原因中,工程 bug 与实现细节远多于算法错误(→ 第十一卷导读)。调试的原则是顺序:从环境到算法,一层层排除——先在最简单的环境上验证实现,再上复杂任务。

按顺序检查(Andy Jones "Debugging RL, Without the Agonizing Pain" 的扩展版):

1. 环境是否正确

  • 手动 rollout 若干回合,肉眼检查观测、奖励、终止;
  • terminated 与 truncated 是否区分(→ 环境接口与模拟器);
  • 随机策略的回报是否与手算一致。

2. 奖励尺度

  • 奖励的数量级是否适配学习率(奖励 ±1000 配 lr 3e-4 几乎必炸);
  • 奖励裁剪/缩放是否被记录(预处理是结果的一部分)。

3. 观测归一化

  • 观测的尺度是否归一(像素除 255、状态用 RunningMeanStd);
  • 归一化的统计量是否只在训练集上估计(离线设定)。

4. 优势/回报计算

  • GAE 的递推方向(从后往前)与 γλ\gamma\lambda 的组合是否正确;
  • 解释方差是否正常(见诊断量);
  • 优势归一化的位置(batch 级还是全局)。

5. 学习率与裁剪

  • PPO 的 clip 范围、KL 目标是否触发(KL 持续超目标 = 学习率过大);
  • 学习率退火是否启用。

6. 网络初始化

  • 策略头的初始化(正交、小尺度——初始策略接近均匀);
  • 价值头的初始化(大尺度没问题)。
诊断量健康范围异常的含义
回报(episode return)持续上升平坦 = 探索不足或奖励 bug
熵(策略熵)缓慢下降骤降 = 过早收敛/探索坍缩;上升 = 学不动
KL(每批的平均 KL)小幅震荡持续超目标 = 学习率过大
解释方差0.5–0.95接近 0 或负 = 价值网络没学到
梯度范数稳定尖峰 = 数值不稳定/爆炸
回合长度随任务骤变 = 行为剧变(崩溃或突破)
  • 回报前期上升后期崩溃:学习率过大 / clip 太松 / 价值网络失准(GAE 的偏差爆炸);
  • 回报完全不涨:奖励 bug / 探索不足(熵骤降)/ 观测未归一;
  • 多种子方差巨大:实现细节未固定 / 种子数太少 / 超参在任务边缘;
  • 熵骤降到 0:探索坍缩(加熵奖励、放宽 clip-higher、检查奖励的长度偏差);
  • 解释方差为负:价值网络初始化错误 / 目标计算 bug / 奖励尺度问题;
  • 离线训练发散:致命三要素(→ 致命三要素),加保守正则。

这份清单与评估协议与可复现性是一体两面:前者是"单个实验怎么调",后者是"一组实验怎么报"。两者的共同前提:RL 的结论只有建立在排除了 bug 的实现上才可信。

  • 先在最简单的环境(CartPole)上验证实现
  • 解释方差接近 0 或负值说明价值网络没学到
  • 熵坍缩过快是最常见的失败模式