强化学习训练曲线怎么看:Reward、Loss、Entropy 与 KL 的实用诊断笔记

写在前面

做强化学习实验时,很容易陷入一种状态:

TensorBoard / WandB 里曲线很多,但不知道哪条最重要;reward 抖得很厉害,也不知道算不算正常;loss 没有下降,又担心是不是训练坏了。

这篇笔记想整理一个更实用的问题:

看到 reward、episode length、loss、entropy、KL、value loss、FPS 这些曲线时,怎么快速判断训练是在变好、没学到东西,还是已经崩了?

这不是严格的理论推导,更像是我以后看实验时用的一份检查表。

一句话结论

强化学习曲线不能只看某一条线,尤其不能只看 loss。更靠谱的方式是组合判断:

效果指标:eval reward / success rate 是否变好
行为指标:episode length / reset reason 是否合理
策略指标:entropy / KL / clip fraction 是否稳定
价值函数:value loss / explained variance 是否崩坏
系统指标:FPS / SPS 是否正常

如果这些信号方向一致,才比较能说明实验真的在变好。

0. 先接受一个事实:RL 曲线天然很吵

强化学习不像监督学习那样,loss 平滑下降通常就说明模型在学习。RL 里面经常出现:

  • reward 抖动很大;
  • loss 不一定单调下降;
  • policy 变好时,value loss 反而可能短时间变大;
  • episode length 变长不一定是好事;
  • 一个 seed 跑成功,不代表算法稳定;
  • train reward 很高,不代表 eval 也好。

所以看 RL 曲线时,重点不是问:

这条 loss 有没有下降?

而是问:

agent 的行为是不是真的变好了?训练是否稳定?这个结果是否可复现?

1. 最应该先看的几条曲线

如果 dashboard 里曲线很多,我会优先按这个顺序看:

  1. eval reward / success rate:最终任务效果有没有变好。
  2. train reward:训练过程中是不是在学。
  3. episode length:是在活得更久、完成得更快,还是更快失败。
  4. entropy / action std:策略是否还有探索,是否过早收敛。
  5. KL / clip fraction:PPO 更新是否过猛或过弱。
  6. value loss / explained variance:critic 是否靠谱。
  7. FPS / SPS:训练系统有没有卡住。
  8. 多个 seed 的均值和方差:结果是否稳定。
  9. 视频 / 轨迹:曲线看不清时,行为最真实。

2. Reward 曲线怎么看

Reward 是最直观的指标,但也是最容易误导人的指标。

好的迹象

如果 reward 曲线满足下面几点,通常说明训练在正常学习:

  • 长期趋势向上;
  • eval reward 也跟着上升;
  • 多个 seed 都能上升;
  • 后期波动范围逐渐变小;
  • 最终能稳定在较高水平。

注意这里说的是趋势,不是单个最高点。RL 中短时间冲到一个高 reward,然后马上掉下来,并不一定代表策略真的变强。

Reward 一直不动

如果 reward 长时间没有明显变化,常见原因包括:

  • 奖励太稀疏;
  • exploration 不够;
  • learning rate 太低,几乎没更新;
  • learning rate 太高,策略乱跳;
  • action scale 不对;
  • observation 有 bug;
  • reward 没有正确返回;
  • reset / done 逻辑写错。

我会优先排查这些东西:

  • 随机策略的 reward 分布是否正常;
  • agent 输出的 action 是否长期接近常数;
  • reward 是否长期为 0、NaN 或固定值;
  • observation 里有没有 NaN / inf;
  • done mask 是否和环境终止逻辑一致。

Reward 先升后崩

这种情况很常见:一开始看起来学得不错,后面突然掉下去。

可能原因:

  • policy update 太激进;
  • learning rate 太高;
  • PPO 的 KL 或 clip fraction 控制不住;
  • value function 崩了;
  • reward hacking;
  • off-policy 算法里 replay buffer 分布变坏。

如果是 PPO,我会马上去看:

  • KL 有没有突然升高;
  • clip fraction 是否长期偏大;
  • value loss 是否爆炸;
  • gradient norm 是否异常。

调参方向通常是:

  • 降低 learning rate;
  • 减小 clip range;
  • 减少 update epochs;
  • 增大 batch size;
  • 加 target KL early stopping;
  • 检查 advantage / reward normalization。

Train reward 高,但 eval reward 低

这通常说明训练环境里的表现不能直接泛化到评估环境。

可能原因:

  • train / eval 环境 wrapper 不一致;
  • eval 时没有关闭探索噪声;
  • 训练环境初始状态太单一;
  • 策略 overfit 到某些随机种子;
  • reward 被训练环境里的某个漏洞 hack 了。

排查建议:

  • eval 使用 deterministic policy;
  • 检查 train/eval 配置是否完全一致;
  • 多个 seed、多种初始状态评估;
  • 录视频看策略到底在做什么。

3. Episode length 怎么看

Episode length 不能孤立看,要结合任务类型。

越长越好型任务

比如 CartPole、机器人不摔倒、生存类任务。episode length 变长一般是好事,说明 agent 活得更久。

好的组合是:

episode length 上升 + reward 上升 + reset 变少

但如果 episode length 上升,reward 不升,就要小心:agent 可能只是学会了拖时间,而不是完成任务。

越短越好型任务

比如导航、到达目标、抓取成功后结束。这类任务里,episode length 下降可能是好事,也可能是坏事。

好的组合是:

success rate 上升 + episode length 下降

坏的组合是:

success rate 下降 + episode length 下降

后者通常说明 agent 更快失败了。

固定 horizon 任务

很多 RL 环境有最大步数限制。如果 episode length 总是等于 max steps,不一定说明策略好,也可能是它一直没完成任务,只是拖到了时间上限。

这时要结合:

  • success rate;
  • final distance;
  • command tracking error;
  • reset reason;
  • task completion bonus。

4. Loss 曲线怎么看

RL 里的 loss 和监督学习里的 loss 很不一样。监督学习里 loss 下降通常是好事,但 RL 里不能这样简单判断。

Policy loss

Policy loss 反映的是策略更新方向和幅度。它可能是负数,也不需要单调下降。

单独看 policy loss 意义有限,更应该和 reward、KL、entropy 一起看。

危险信号:

  • policy loss 突然爆炸;
  • policy loss 长期接近 0,同时 reward 也不变;
  • policy loss 异常时 KL 也异常。

可能解释:

  • 爆炸:学习率过大,或者 advantage scale 有问题;
  • 接近 0:advantage 太小、梯度太弱,或者策略基本不更新。

Value loss

Value loss 表示 critic / value function 预测回报的误差。

比较健康的状态是:

  • 初期较大;
  • 后期逐渐稳定;
  • 没有持续爆炸;
  • reward 改变时,value 能逐渐跟上。

危险信号:

  • value loss 持续爆炸;
  • value estimate 极端大或极端小;
  • reward 变好,但 value 一直乱跳;
  • explained variance 长期接近 0 或为负。

常见原因:

  • reward scale 太大;
  • bootstrap / done mask 写错;
  • value learning rate 太高;
  • value loss coefficient 不合适;
  • reward normalization 缺失。

5. Entropy:看策略是不是过早变“自信”

Entropy 可以粗略理解为策略的随机程度。

比较理想的状态是:

训练初期 entropy 较高,方便探索;
随着策略学会任务,entropy 慢慢下降。

危险信号有两个方向。

Entropy 很快掉到接近 0

说明策略很快变得确定,可能过早收敛到局部最优。

如果同时 reward 没有升高,那就很像:

agent 学到了一个错误但很自信的行为

调参方向:

  • 增加 entropy coefficient;
  • 降低 learning rate;
  • 增加环境随机化;
  • 改 reward shaping;
  • 检查 action scale 和 action mask。

Entropy 一直很高

说明策略一直很随机,可能没有真正学会稳定行为。

如果 reward 也不升,可能需要:

  • 降低 entropy coefficient;
  • 延长训练;
  • 检查 reward 是否太弱;
  • 检查 observation 是否足够表达任务状态。

6. PPO 里特别重要的曲线

如果用的是 PPO,除了 reward 和 loss,我会特别看 KL、clip fraction 和 explained variance。

KL divergence

KL 表示新旧策略之间的差异。它可以帮助判断 policy update 是太大还是太小。

常见判断:

  • KL 突然很大:更新太激进,容易崩;
  • KL 长期接近 0:更新太保守,学得很慢;
  • KL 很大但 reward 不升:策略在乱变。

调参方向:

  • KL 太大:降低 learning rate,减小 clip range,减少 epoch,增大 batch size;
  • KL 太小:适当提高 learning rate,增加 epoch,或检查 advantage 是否正常。

Clip fraction

Clip fraction 表示 PPO 中有多少样本被 clip 了。

粗略理解:

  • 长期接近 0:更新可能太小;
  • 长期很高:更新可能太猛,大量样本被限制。

如果 clip fraction 很高,同时 reward 还不稳定,我会优先降低 learning rate 或减少 update epochs。

Explained variance

Explained variance 用来看 value function 对 return 的解释能力。

一般来说:

  • 越接近 1 越好;
  • 长期接近 0,说明 critic 没学好;
  • 为负,说明 critic 可能比常数 baseline 还差。

如果 explained variance 很差,而 value loss 也很乱,说明 critic 可能是当前瓶颈。

7. Off-policy 算法看什么

如果是 DQN、DDPG、TD3、SAC 这类 off-policy 算法,还要关注 replay buffer 和 Q function。

Q loss / critic loss

危险信号:

  • critic loss 爆炸;
  • Q value 越来越离谱;
  • reward 没升,但 Q value 很高;
  • target Q 和 current Q 差距越来越大。

可能原因:

  • Q overestimation;
  • target network 更新太快;
  • reward scale 有问题;
  • replay buffer 数据质量差;
  • bootstrapping 逻辑有 bug。

SAC 的 alpha / temperature

SAC 里还要看 alpha,也就是 entropy temperature。

  • alpha 太高:策略可能过随机;
  • alpha 太低:探索可能不足;
  • alpha 剧烈波动:reward scale 或 entropy target 可能不合适。

Replay buffer

可以检查:

  • buffer size 是否正常增长;
  • reward 分布是否合理;
  • done 比例是否异常;
  • observation/action 是否有 NaN;
  • sampling 是否覆盖足够多样的数据。

8. Perf / FPS / SPS 怎么看

训练曲线不只是算法指标,也要看系统性能。

常见指标包括:

  • FPS / SPS:每秒环境步数;
  • samples per second;
  • environment time;
  • learner update time;
  • GPU utilization;
  • CPU utilization。

FPS 越跑越低

可能原因:

  • 内存泄漏;
  • 日志或视频保存太频繁;
  • replay buffer 变大后采样变慢;
  • environment reset 泄漏资源;
  • 多进程 worker 卡住。

GPU 很闲,CPU 很满

说明瓶颈可能在环境模拟或数据预处理。

优化方向:

  • 增加 vectorized env 数量;
  • 减少 Python 端开销;
  • 并行采样;
  • 简化 observation preprocessing。

GPU 很满,但 FPS 低

说明模型或 learner update 太重。

优化方向:

  • 减小模型;
  • 调整 batch size;
  • 减少 update epochs;
  • 使用混合精度;
  • profile learner。

9. 常见曲线组合诊断

下面这些组合,是我以后看实验时最想快速识别的。

reward 不升 + entropy 快速下降

判断:探索不足,策略过早收敛。

优先尝试:

  • 提高 entropy coefficient;
  • 降低 learning rate;
  • 增加 reward shaping;
  • 增加随机初始化;
  • 检查 action scale。

reward 上升后突然崩 + KL 暴涨

判断:policy update 太激进。

优先尝试:

  • 降低 learning rate;
  • 减小 PPO clip range;
  • 加 target KL early stopping;
  • 减少 update epochs;
  • 增大 batch size。

reward 不升 + value loss 爆炸

判断:critic 可能学坏了,并且影响 actor。

优先尝试:

  • 检查 reward scale;
  • 开 reward/value normalization;
  • 降低 critic learning rate;
  • 检查 done mask;
  • 使用 gradient clipping。

train reward 高 + eval reward 低

判断:泛化或评估设置有问题。

优先尝试:

  • 检查 train/eval wrapper;
  • eval 使用 deterministic policy;
  • 多 seed、多初始状态评估;
  • 录视频看行为;
  • 避免只看训练环境奖励。

episode length 变短 + reward 变低

判断:agent 更快失败。

优先尝试:

  • 看 termination reason;
  • 检查是否学到提前结束;
  • 增加失败惩罚;
  • 检查 reset 条件是否太敏感。

episode length 变长 + reward 不变

判断:agent 可能只是在拖延,没有完成目标。

优先尝试:

  • 单独记录 success rate;
  • 记录 distance-to-goal;
  • 单独记录 completion bonus;
  • 看视频确认行为。

多个 seed 方差巨大

判断:算法不稳定,单次成功不可靠。

优先尝试:

  • 至少跑 3 到 5 个 seed;
  • 降低 learning rate;
  • 增大 batch size;
  • 调整 reward scale;
  • 检查初始化和环境随机性。

10. 建议记录的最小指标集

通用指标

  • train episode reward mean / median / std;
  • eval episode reward mean / median / std;
  • success rate;
  • episode length;
  • total environment steps;
  • wall-clock time;
  • FPS / SPS;
  • learning rate;
  • gradient norm;
  • action mean / std / min / max;
  • observation mean / std / min / max;
  • reward mean / std / min / max;
  • termination reason。

PPO / A2C 类

  • policy loss;
  • value loss;
  • entropy;
  • KL divergence;
  • clip fraction;
  • explained variance;
  • advantage mean / std;
  • return mean / std。

SAC / TD3 / DDPG / DQN 类

  • actor loss;
  • critic / Q loss;
  • Q value mean / max / min;
  • target Q;
  • replay buffer size;
  • alpha / temperature;
  • TD error。

11. 我以后可以怎么写实验结论

看完曲线后,可以用这种方式写实验记录。

这次实验 reward 在前 X steps 明显上升,eval success rate 从 A 提升到 B,说明策略确实学到了有效行为。
但后期 KL 和 clip fraction 偏高,同时 reward 有回落,说明 PPO 更新可能过激。
value loss 没有爆炸,critic 暂时不是主要问题。
下一步建议降低 learning rate 或 clip range,并增加 target KL early stopping。

或者:

reward 基本不动,entropy 很快下降,episode length 也没有改善。
这说明 agent 可能过早收敛到无效策略,主要问题是探索不足或奖励太稀疏。
下一步建议增加 entropy bonus、检查 action scale,并加入更密集的 reward shaping。

总结

看强化学习训练曲线时,不要只盯着 reward 的最高点,也不要用监督学习的直觉去理解 loss。

我觉得更靠谱的判断顺序是:

任务效果是否提升

行为是否真的变好

policy 更新是否稳定

critic 是否崩坏

探索是否足够

多个 seed 是否一致

系统性能是否正常

RL 曲线的核心不是“漂亮”,而是:策略真的变强,并且训练过程可复现、可解释、可继续优化。

algorithms axis-angle bode calibration chrome cmake cmakelists cnn colcon conan control cpp cpu d435i data_struct db design-pattern dots economics eigen factory-pattern fcpx figure finance forge fov gazebo gdb git gnu ibus interest isaac gym isaaclab kdl latex launch learning-notes legged locomotion legged-robot life linux mac math matlab matrix memory mlp money motor moveit mpc network ocs2 ode operator optimal algorithm optimal-control perf performance personal-finance ppo profiling python qos realsense reinforcement learning rnn robot robotics ros ros2 rtb security shell simulation stl thread tools twist ubuntu uml unitree urdf vae valgrind vcxsrv velocity vim web wifi work wsl 中文输入 交叉编译 依赖管理 分支管理 四足机器人 实验诊断 强化学习 机器人视觉 构建系统 深度学习 深度相机 点云 版本控制 神经网络 训练曲线 输入法 配置类
知识共享许可协议