ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

强化学习训练看板指标全解析:从reward到KL的实战指南

强化学习训练看板指标全解析:从reward到KL的实战指南 1. 为什么需要一份“看得懂”的 RL 训练看板做强化学习训练的人大概都有过这种体验模型跑起来了终端里刷出一堆数字loss 在跳、reward 在涨、KL 在飘但你盯着屏幕看了半天心里只有一个念头——这玩意儿到底是在变好还是在崩更尴尬的是当你把训练曲线截图发到群里求助别人问的第一句话往往是“你这个 entropy 是 policy entropy 还是 action entropy”而你只能回一句“我也不知道看板上就这么写的”。MiMo-v2.6 的 RL 训练看板要解决的恰恰就是这个“看不懂”的问题。它不是简单地把 TensorBoard 的默认面板搬过来而是围绕强化学习训练过程中真正需要关注的信号重新组织了一套指标体系和术语口径。换句话说它试图回答的不是“训练在发生什么”而是“训练在往哪个方向走以及我该不该现在动手干预”。这篇文章适合三类人第一类是刚开始接触 RL 训练、被各种指标缩写绕晕的工程师第二类是已经在跑 RL 但看板用得比较粗糙、想搞清楚每个数字背后含义的从业者第三类是需要给团队搭建统一训练监控规范的技术负责人。我会把看板上常见的指标逐个拆开讲清楚它的定义、计算方式、正常范围以及最关键的——当它异常时你该往哪个方向排查。需要提前说明的是RL 训练看板和普通的监督学习看板有本质区别。监督学习里 loss 下降基本就代表模型在变好指标之间的关系相对简单。但 RL 训练是一个多目标博弈的过程policy 在变、value function 在变、采样分布也在变几个指标之间会互相拉扯。所以看板设计的核心不是“展示更多数字”而是“让指标之间的因果关系变得可读”。这也是 MiMo-v2.6 这套看板在指标定义上花了大量心思的原因。2. 奖励类指标从 raw reward 到 advantage 的完整链路2.1 raw reward 与 shaped reward 的区别看板上最显眼的通常是 reward 曲线但很多人没注意到它其实分两条raw reward 和 shaped reward。raw reward 是环境直接给出的原始奖励不做任何加工shaped reward 则是经过奖励塑形reward shaping之后、真正参与训练的信号。为什么要区分这两者因为奖励塑形是 RL 里最容易出问题的地方。你可能加了一个“鼓励模型输出更短”的惩罚项结果 shaped reward 一路涨但 raw reward 反而在跌——这说明模型学会了钻塑形项的空子而不是真的把任务做好了。如果看板只显示一条 reward 曲线这种“作弊”行为你根本发现不了。MiMo-v2.6 看板把这两条曲线放在同一个坐标系里用不同颜色区分并且默认把 raw reward 画得更粗。这个设计细节很实用当两条曲线走势一致时说明塑形项和真实目标是对齐的当它们出现明显背离就是该检查奖励函数的时候了。2.2 reward 的滑动平均窗口怎么选看板上的 reward 曲线几乎都会做平滑处理否则原始信号抖动太厉害根本看不出趋势。但平滑窗口smoothing window选多大是个有讲究的事。窗口太小比如 10 步曲线还是抖趋势看不出来窗口太大比如 1000 步曲线过于平滑会掩盖掉一些重要的短期波动比如某次策略更新导致的性能骤降。我的经验是训练早期用较小的窗口20-50训练稳定后用较大的窗口100-200。MiMo-v2.6 看板支持在界面上动态调整平滑窗口不用改代码重新跑这一点比很多自建看板方便。还有一个容易被忽略的点平滑后的曲线会滞后于真实值。如果你看到平滑 reward 开始下降实际下降可能已经发生了一段时间。所以在做“是否回滚 checkpoint”这类决策时最好同时看一眼未平滑的原始曲线。2.3 advantage 的均值与方差意味着什么advantage 是 RL 训练的核心信号它衡量的是“某个动作比平均水平好多少”。看板上通常会显示 advantage 的均值和方差两条线。均值接近 0 是正常的因为 advantage 本质上是一个相对量理论上应该在 0 附近波动。如果均值持续偏离 0 很远说明你的 baseline通常是 value function估计有系统性偏差。方差则反映了信号的“信息量”方差太小说明所有动作的 advantage 都差不多策略没有学习方向方差太大说明信号噪声过强训练会不稳定。一个实用的判断标准advantage 方差应该在一个数量级内波动如果它突然放大 10 倍以上通常意味着 value function 崩了或者奖励尺度变了。这时候先别急着调学习率去检查 value loss 和 reward 的分布。2.4 奖励归一化对指标的影响很多 RL 实现会对 reward 做归一化normalization比如减去 running mean、除以 running std。这个操作会让看板上的 reward 曲线变得“好看”但也可能掩盖真实问题。归一化之后reward 的绝对值失去了意义你只能看相对趋势。而且如果 running statistics 更新得太快会导致早期训练的信号被过度压缩。MiMo-v2.6 看板的一个贴心设计是同时显示归一化前后的 reward让你能判断归一化是否在“帮倒忙”。我踩过的坑是有一次 reward 归一化把稀疏奖励压得几乎为 0模型完全学不动但看板上归一化后的曲线看起来还挺平稳差点没发现。3. 策略类指标entropy、KL 与 clip fraction 的三角关系3.1 policy entropy 下降太快是危险信号entropy 衡量的是策略的“随机性”或“探索程度”。训练初期 entropy 高说明模型还在广泛尝试不同动作随着训练推进entropy 逐渐下降说明策略在收敛到某些高奖励动作上。但 entropy 下降的速度很关键。健康的训练里entropy 应该是缓慢、平滑地下降。如果它断崖式下跌说明策略过早地坍缩到了某个局部最优探索能力丧失后面很难再爬出来。反过来如果 entropy 一直居高不下说明模型根本没在学可能学习率太小或者奖励信号太弱。MiMo-v2.6 看板会把 entropy 和 reward 画在一起方便你观察两者的关系。理想情况下reward 上升的同时 entropy 温和下降如果 reward 涨了但 entropy 几乎没动说明模型可能只是记住了几个固定动作泛化能力堪忧。3.2 KL divergence 的两种口径policy KL 与 ref KLKL 散度在看板上通常有两条一条是当前策略与旧策略之间的 KLpolicy KL另一条是当前策略与参考策略之间的 KLref KL。这两个 KL 的含义完全不同混用会导致误判。policy KL 衡量的是单次更新中策略变化了多少它直接关系到训练的稳定性。在 PPO 这类算法里policy KL 会被 clip 机制约束在一个范围内比如 0.01-0.05。如果它持续超过阈值说明每次更新步子太大需要降低学习率或者增大 clip 范围。ref KL 衡量的是当前策略偏离初始参考策略的程度它更多是一个“正则化”指标。在 RLHF 场景里ref KL 太大意味着模型已经偏离了原始行为太远可能会损失通用能力。看板上这两个 KL 必须分开显示用不同颜色和不同坐标轴否则你根本分不清是更新太猛还是偏离太远。3.3 clip fraction 高说明什么clip fraction 是 PPO 特有的指标表示有多少比例的样本在更新时被 clip 机制截断了。它的正常范围通常在 0.1-0.3 之间。clip fraction 过高比如超过 0.5说明大部分样本的更新幅度都超出了允许范围策略在剧烈变化训练很可能不稳定。这时候要么降低学习率要么检查 advantage 的尺度是不是太大了。clip fraction 过低接近 0说明更新幅度太小训练效率低可以考虑适当提高学习率。这里有个经验clip fraction 和 policy KL 往往同向变化但 clip fraction 对异常更敏感。当你看到 clip fraction 突然飙升通常 policy KL 也会跟着涨但反过来不一定。所以我把 clip fraction 当作“预警指标”它一异常就去看 KL 和 advantage。3.4 三个指标的联动排查表把 entropy、KL、clip fraction 放在一起看能快速定位大部分策略层面的问题。下面这张表是我在实际训练中总结的排查对照entropy 趋势policy KLclip fraction可能原因建议动作快速下降偏高偏高学习率过大策略坍缩降学习率增大 entropy 系数缓慢下降正常正常健康训练继续观察几乎不变偏低偏低学习率过小或奖励信号弱提学习率检查奖励尺度上升偏高偏高奖励噪声大策略在乱试检查 reward 分布增大 batch震荡震荡震荡batch 太小或数据分布不稳增大 batch size检查采样这张表不是万能公式但能帮你把排查范围从“所有可能”缩小到“两三个方向”省下大量瞎调参的时间。4. 价值函数与优化类指标value loss、grad norm 与学习率4.1 value loss 不降反升的几种情况value function 负责估计状态价值它的 loss 反映了估计的准确程度。正常情况下 value loss 应该逐渐下降并趋于平稳。但 RL 训练里 value loss 上升是很常见的原因有好几种需要区分对待。第一种是奖励尺度变化。如果你在训练中途调整了奖励函数value function 需要重新适应新的尺度loss 会暂时上升。这种情况不用慌观察几百步看它是否回落。第二种是策略变化太快。value function 是在拟合旧策略下的回报如果策略更新太猛value function 就追不上loss 会持续上升。这时候要回头去看 policy KL 和 clip fraction。第三种是value function 容量不足。如果模型太小或者网络结构不合适它根本拟合不了复杂的价值分布loss 会卡在一个较高的水平下不去。这种情况需要调整网络结构而不是调学习率。MiMo-v2.6 看板会把 value loss 和 policy loss 分开显示并且用不同的纵轴刻度。因为这两个 loss 的量级往往差很多放在同一个轴上会导致其中一个被压成一条直线什么都看不出来。4.2 gradient norm 的合理范围与裁剪gradient norm 是梯度范数它反映了每次更新的梯度大小。这个指标主要用于判断是否需要梯度裁剪gradient clipping。如果 gradient norm 经常超过裁剪阈值说明梯度爆炸的风险较高训练不稳定。但也不能一味地调大裁剪阈值因为裁剪本身会改变更新方向。合理的做法是观察 gradient norm 的分布把裁剪阈值设在 95 分位左右这样既能防止极端情况又不会频繁干预正常更新。看板上通常会显示 gradient norm 的原始值和裁剪后的值。如果两者差异很大说明裁剪在频繁生效需要检查学习率或者网络初始化。4.3 学习率调度与指标的关系学习率是 RL 训练里最敏感的的超参数之一。看板上一般会显示当前学习率曲线方便你对照其他指标的变化。常见的调度策略是 warmup decay训练初期用较小的学习率预热然后逐渐升高再慢慢衰减。warmup 阶段如果太短早期梯度噪声大会导致训练不稳decay 阶段如果太快模型可能还没收敛就失去了学习能力。我的经验是把学习率曲线和 entropy、KL 放在一起看。如果学习率下降后 entropy 还在快速下降说明策略坍缩不是学习率导致的而是奖励函数或者数据分布的问题。这种交叉验证能避免“头痛医头”。5. 看板实操从打开面板到定位问题的完整流程5.1 训练启动前该确认哪些指标已接入很多人是训练跑起来之后才打开看板这时候如果发现某个关键指标没记录就只能重启训练。所以启动前花两分钟确认指标接入情况能省下几小时的返工。MiMo-v2.6 看板的指标接入清单大致包括rewardraw 和 shaped、advantage 均值方差、policy entropy、policy KL、ref KL、clip fraction、value loss、policy loss、gradient norm、学习率、以及吞吐类指标samples per second、update time。建议在配置文件里逐项确认尤其是 ref KL 这种容易被漏掉的。5.2 前 100 步该盯什么训练刚启动的前 100 步是最容易出问题的阶段这时候指标波动大但也能最早暴露配置错误。我通常按这个顺序看先看 reward 有没有在动如果 100 步过去 reward 完全没变化大概率是奖励函数写错了或者环境没接对再看 entropy如果它一开始就接近 0说明策略初始化有问题然后看 policy KL如果它一上来就爆表说明学习率太大或者 advantage 尺度不对。前 100 步不用追求指标好看重点是确认“训练在正常运转”。这个阶段发现问题改配置重启的成本最低。5.3 中期训练的异常模式识别训练跑到中期比如几万步之后指标会进入一个相对稳定的区间。这时候要关注的是“异常模式”而不是单个指标的绝对值。常见的异常模式有三种第一种是“缓慢劣化”reward 缓慢下降、entropy 缓慢上升通常是过拟合或者数据分布漂移第二种是“周期性震荡”指标呈现明显的周期性波动通常是 batch 采样或者数据 shuffle 的问题第三种是“突然崩盘”某个指标断崖式变化通常是数值不稳定或者梯度爆炸。识别出模式之后再去看对应的指标组合比盲目调参高效得多。5.4 用看板做回滚决策的判断依据什么时候该回滚到之前的 checkpoint是 RL 训练里最难的决定之一。看板能提供几个关键依据如果 reward 连续下降超过某个阈值比如 10%且 entropy 和 KL 同时异常说明训练已经跑偏回滚是合理的。如果只是 reward 短期波动但 entropy 和 KL 都正常那可能只是噪声再观察一段时间。还有一个实用技巧在训练过程中定期保存 checkpoint并在看板上标记这些时间点。这样当你想回滚时能直接看到每个 checkpoint 对应的指标状态而不是凭感觉选一个。6. 术语口径统一团队协作中最容易踩的坑6.1 同名不同义的指标缩写RL 领域有很多缩写在不同代码库里的含义不一样。比如“KL”可能指 policy KL也可能指 ref KL“entropy”可能是 policy entropy也可能是 action distribution entropy“loss”可能是 policy loss也可能是 total loss。团队协作时如果不统一口径会出现“我说 KL 涨了你说 KL 没涨”这种扯皮。MiMo-v2.6 看板的做法是在每个指标旁边加一个 tooltip写明它的完整定义和计算方式。这个设计看起来简单但能省下大量沟通成本。6.2 指标计算频率与聚合方式另一个容易踩的坑是指标的计算频率和聚合方式。有的指标是每个 batch 算一次有的是每个 epoch 算一次有的是取平均有的是取最后一个值。如果不统一看板上的曲线根本没法对比。建议在团队内约定一套标准所有指标按 update step 聚合取该 step 内所有样本的均值。这样不同实验之间的曲线可以直接对比。MiMo-v2.6 看板默认采用这套口径但如果你的训练代码里指标计算方式不同需要在接入时做转换。6.3 看板截图沟通时的信息完整性用看板截图沟通时最容易犯的错误是只截一条曲线。别人看不到坐标轴范围、平滑窗口、以及相关指标的状态根本无法判断问题。我的习惯是截图时至少包含 reward、entropy、KL 三条曲线并保留坐标轴和图例。如果是排查特定问题再把相关指标比如 value loss、grad norm一起截上。这样对方能快速理解上下文而不是反复问“你这个 reward 是 raw 还是 shaped”。7. 我在实际使用中总结的几条经验第一条经验是关于指标数量的。刚开始用看板时很容易陷入“指标越多越好”的误区把所有能记录的都画上去结果面板密密麻麻反而看不出重点。后来我固定了一套“核心六指标”raw reward、policy entropy、policy KL、clip fraction、value loss、gradient norm。这六个指标能覆盖 80% 的异常情况其他的按需查看。第二条经验是关于平滑窗口的。我现在的做法是看板上同时保留原始曲线和一条平滑曲线原始曲线用浅色平滑曲线用深色。这样既能看趋势又不会错过短期异常。MiMo-v2.6 看板支持这种双层显示比单纯调平滑参数灵活。第三条经验是关于告警阈值的。不要一开始就设一堆告警那样会被误报淹没。我的做法是先跑几次正常训练记录各指标的分布范围然后只对“超出历史范围 3 个标准差”的情况设告警。这样告警一响基本就是真有问题。第四条经验是关于看板刷新频率的。训练早期可以设高一点比如 10 秒方便快速发现问题训练稳定后可以调低比如 60 秒减少对训练进程的干扰。这个细节看起来小但在长时间训练里能省下不少资源。最后说一个我踩过的坑有一次训练看起来一切正常reward 稳步上升但最后评估时发现模型完全没学会任务。回头查看板才发现我一直在看 shaped reward而 raw reward 其实早就跌到谷底了。从那以后我养成了一个习惯——每次看 reward 曲线先确认自己看的是哪一条。这个习惯听起来很基础但真的能避免大问题。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进