写在前面
做强化学习实验时,很容易陷入一种状态:
TensorBoard / WandB 里曲线很多,但不知道哪条最重要;reward 抖得很厉害,也不知道算不算正常;loss 没有下降,又担心是不是训练坏了。
这篇笔记想整理一个更实用的问题:
看到 reward、episode length、loss、entropy、KL、value loss、FPS 这些曲线时,怎么快速判断训练是在变好、没学到东西,还是已经崩了?
这不是严格的理论推导,更像是我以后看实验时用的一份检查表。
一句话结论
强化学习曲线不能只看某一条线,尤其不能只看 loss。更靠谱的方式是组合判断:
效果指标:eval reward / success rate 是否变好 |
如果这些信号方向一致,才比较能说明实验真的在变好。
0. 先接受一个事实:RL 曲线天然很吵
强化学习不像监督学习那样,loss 平滑下降通常就说明模型在学习。RL 里面经常出现:
- reward 抖动很大;
- loss 不一定单调下降;
- policy 变好时,value loss 反而可能短时间变大;
- episode length 变长不一定是好事;
- 一个 seed 跑成功,不代表算法稳定;
- train reward 很高,不代表 eval 也好。
所以看 RL 曲线时,重点不是问:
这条 loss 有没有下降?
而是问:
agent 的行为是不是真的变好了?训练是否稳定?这个结果是否可复现?
1. 最应该先看的几条曲线
如果 dashboard 里曲线很多,我会优先按这个顺序看:
- eval reward / success rate:最终任务效果有没有变好。
- train reward:训练过程中是不是在学。
- episode length:是在活得更久、完成得更快,还是更快失败。
- entropy / action std:策略是否还有探索,是否过早收敛。
- KL / clip fraction:PPO 更新是否过猛或过弱。
- value loss / explained variance:critic 是否靠谱。
- FPS / SPS:训练系统有没有卡住。
- 多个 seed 的均值和方差:结果是否稳定。
- 视频 / 轨迹:曲线看不清时,行为最真实。
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 很快掉到接近 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,说明策略确实学到了有效行为。 |
或者:
reward 基本不动,entropy 很快下降,episode length 也没有改善。 |
总结
看强化学习训练曲线时,不要只盯着 reward 的最高点,也不要用监督学习的直觉去理解 loss。
我觉得更靠谱的判断顺序是:
任务效果是否提升 |
RL 曲线的核心不是“漂亮”,而是:策略真的变强,并且训练过程可复现、可解释、可继续优化。