Note
RLHF 为什么使用 PPO?KL 惩罚起什么作用?
整理 PPO 的稳定性考虑、与其他算法的比较及 KL 约束的作用。
在RLHF的第三阶段,PPO是最主流的强化学习算法。为什么选择PPO,而不是其他更简单的策略梯度算法(如REINFORCE)或者Q-learning系算法?PPO中的KL散度惩罚项起到了什么关键作用?
在RLHF的第三阶段选择PPO(近端策略优化)作为主流算法是基于其在大型语言模型这种复杂环境下,对训练稳定性、样本效率和实现简易性之间做出的良好权衡。
为什么不选择其他算法?
-
vs. REINFORCE (简单策略梯度):
- REINFORCE算法以其 高方差(high variance) 而闻名。它直接使用蒙特卡洛采样得到的整个序列的奖励来更新策略,这会导致梯度估计非常不稳定,尤其是在LLM这种动作空间巨大、奖励信号稀疏的环境中。训练过程会非常震荡,难以收敛。PPO通过引入价值函数作为基线(baseline)和使用优势函数(advantage function),显著降低了方差,使得训练更稳定。
-
vs. Q-learning系算法 (如DQN):
- DQN等基于价值的算法主要是为离散(discrete)且低维的动作空间设计的。它们需要为每个状态下的每个可能动作计算一个Q值。对于LLM来说,动作空间是整个词汇表在每个时间步的组合,这是一个极其巨大的、组合性的空间。直接应用Q-learning来计算每个词的Q值是不可行的。而PPO作为一种策略梯度方法,直接在策略空间进行优化,天然地适用于这种连续或巨大的动作空间。
PPO中KL散度惩罚项的关键作用:
PPO的目标函数中包含一个非常关键的KL散度惩罚项:
其中 是当前正在优化的策略, 是第一阶段训练好的初始SFT策略, 是一个超参数。这个KL散度项起到了 “信任区域” 或 “正则化” 的作用,其关键目的有两个:
- 防止策略崩溃(Policy Collapse): 奖励模型(RM)是不完美的,总会存在一些漏洞。如果没有KL惩罚项,RL策略会不顾一切地寻找RM的漏洞来“作弊”以获得最高分,这常常导致生成的文本毫无意义、充满重复或攻击性内容,即所谓的“模式崩溃”。KL惩罚项通过约束新策略不能与初始的、表现尚可的SFT策略偏离太远,从而将优化限制在一个“安全”的区域内,保留了SFT模型良好的语言特性。
- 保证探索效率和多样性: 保持与SFT模型的相近度,意味着模型不会过早地收敛到某个奖励高但质量差的局部最优解。它鼓励模型在已经学会的、有意义的语言分布附近进行探索,而不是跳到一个完全陌生的、可能导致奖励模型失效的区域。这有助于维持生成文本的多样性和可读性。