Note

PPO 的 KL 惩罚系数过大或过小会怎样?

讨论对齐收益与策略偏移的平衡,以及监控指标和系数调整方法。

如果在PPO训练过程中,KL散度惩罚项的系数 β 设置得过大或过小,分别会导致什么样的问题?你将如何通过实验和观察来调整这个超参数?

KL散度惩罚项的系数 β\beta 是RLHF训练中一个至关重要的超参数,它控制着“利用奖励模型”和“保持语言模型本性”之间的平衡。

设置不当导致的问题:

  • β\beta 设置过大:

    • 问题描述: 如果惩罚系数过大,模型会过于“保守”。为了最小化与SFT模型的KL散度,策略更新的步子会非常小,甚至几乎不更新。
    • 具体表现: 模型对奖励信号的响应不足,训练过程看起来“停滞不前”。最终得到的RLHF模型与原始的SFT模型在行为和输出上几乎没有区别,RLHF阶段的优化效果大打折扣,没有充分学到人类的偏好。
  • β\beta 设置过小:

    • 问题描述: 如果惩罚系数过小,对策略的约束力不足,模型会变得过于“激进”,不顾一切地去迎合奖励模型(RM)。
    • 具体表现:
      1. 奖励作弊(Reward Hacking): 模型很快发现RM的漏洞并加以利用,生成一些在RM看来分数很高,但实际质量很差、甚至不通顺的文本。
      2. 模式崩溃(Mode Collapse): 模型输出的风格和内容变得极其单一、重复,失去了多样性。例如,可能会反复使用某些“奉承”或“安全”的短语,因为这些短语被RM赋予了高分。
      3. 语言模型能力退化: 偏离SFT模型太远可能导致模型忘记基本的语言知识,生成语法错误或无意义的文本。

如何通过实验和观察来调整 β\beta ?

调整 β\beta 是一个经验性的过程,通常需要监控以下几个关键指标:

  1. 监控KL散度值: 在训练日志中,实时观察每个batch或epoch的平均KL散度。一个健康的训练过程,KL散度应该在一个相对稳定且合理的范围内波动。如果KL值持续接近于0,说明 β\beta 可能太大了。如果KL值急剧增大且不稳定,说明 β\beta 可能太小了。
  2. 监控奖励分数: 观察奖励模型给出的平均分数。正常情况下,奖励分数应该随着训练稳步提升。如果奖励分数提升很快,但KL散度也急剧增大,就需要警惕奖励作弊的风险。如果奖励分数几乎不增长,说明 β\beta 可能太大了。
  3. 定期进行定性分析(Qualitative Analysis): 这是最重要的一步。在训练的不同阶段(例如,每隔N个step),从验证集中随机抽取一些prompt,用当前训练的策略模型和SFT参考模型分别生成回答。人工对比检查:
    • RL模型的回答是否比SFT模型更符合期望的偏好?
    • RL模型的回答是否出现了重复、模式化、不通顺等问题?
    • RL模型是否保留了基本的语言流畅度和事实性?
  4. 设置KL散度目标范围: 一些实现(如TRL库)中,会设定一个KL散度的目标范围。如果实际KL值超出了这个范围,会动态地调整 β\beta 值,使其保持在目标范围内。这是一个自动化调整的思路。

通过综合以上定量指标和定性观察,可以迭代地调整 β\beta 值,直到找到一个既能有效利用奖励信号,又能保持模型稳定性和多样性的最佳平衡点。