强化学习训练技巧总结
1. LLM 专用技巧
1.1 EOS Token 奖励预测
在使用 GPT 架构作为奖励模型(Reward Model)的基础架构时,有两种预测对话奖励值的方式:
- 对所有 Token 的预测 Reward 取平均。
- 在最后一个 Token(即 EOS Token)上预测 Reward。
推荐使用方式 2,因为对于 GPT 这类自回归模型,只有 EOS Token 的输出能够"看到"完整的句子,从而给出整体评价。Anthropic 的相关论文也采用了这种方式。
1.2 基于采样温度的 Logits 缩放
在计算响应序列的对数概率时,模型首先生成响应词元的原始 logits,随后通过采样温度(Sampling Temperature)对 logits 进行缩放:
logits /= self.temperature补充说明:实验中发现,若取消该缩放操作,KL 散度上升速度会超出预期,导致模型性能显著下降。
1.3 Token Level KL 散度惩罚
计算 RL 模型与 SFT 模型响应分布的逐词元 KL 散度,并将其作为惩罚项加入奖励函数。具体公式如下:
其中
1.4 广义优势估计(GAE)
使用 GAE(Generalized Advantage Estimation,一种 TD(
1.5 添加 SFT 损失
在 PPO 中结合监督式下一词元预测损失与 KL 散度,以保留 SFT 模型的预训练能力。
2. PPO 专用技巧
2.1 模型初始化
训练 LLM 时需初始化两个模型——Actor 模型和 Critic 模型。Actor 模型通常基于 SFT 模型初始化,Critic 模型基于奖励模型初始化。
2.2 限制训练轮数
策略网络训练时限制 epoch 数为 1,防止模型偏离旧策略分布。
2.3 折现因子
折现因子
2.4 小批量更新
在训练阶段,PPO 对大小为
2.5 Adam 学习率
Actor 模型的 Adam 学习率约为 SFT 模型的
2.6 价值函数损失截断
PPO 对价值函数进行截断,损失函数定义为:
2.7 奖励归一化与截断
在 RLHF 训练中,Reward Normalization 对训练稳定性非常重要。由于奖励值是通过模型学习得到的中间层输出(输出范围可能很大),不像游戏环境中那样规则。
为避免奖励分布不均衡,采用 Z-score 归一化:
其中
2.8 奖励白化(Whitening)
具体实现如下:
def whiten(values, shift_mean=True):
mean, var = torch.mean(values), torch.var(values, unbiased=False)
whitened = (values - mean) * torch.rsqrt(var + 1e-8)
if not shift_mean:
whitened += mean
return whitened在每个小批次中,使用 whiten(rewards, shift_mean=False) 对奖励进行白化(不平移均值),并使用 whiten(advantages) 对优势值进行白化。
2.9 优势归一化
Advantage Normalization 是 PPO 训练中常用的稳定训练技术。在使用 DeepSpeed 等 DDP 训练框架时,应对全局样本进行 Advantage Normalization,而非仅对单个 DDP 进程的本地样本做归一化。
在价值网络训练中,对优势值进行 Z-score 归一化以抑制异常值影响。
2.10 自适应 KL 散度系数
KL 散度惩罚系数
class AdaptiveKLController:
def __init__(self, init_kl_coef, hparams):
self.value = init_kl_coef
self.hparams = hparams
def update(self, current, n_steps):
target = self.hparams.target
proportional_error = np.clip(current / target - 1, -0.2, 0.2)
mult = 1 + proportional_error * n_steps / self.hparams.horizon
self.value *= multOpenAI 在 sentiment 和 descriptiveness 任务中使用的参数为:init_kl_coef=0.15、hparams.target=6、hparams.horizon=10000。
3. 创新策略
3.1 冷启动
DeepSeek-R1 在冷启动 SFT 阶段比较克制,仅使用了几千条数据。核心动机是避免在冷启动阶段过度模仿,从而保证 RL 阶段探索时的多样性。
3.2 采样策略
Kimi k1.5 的报告中介绍了两种实用的 Prompt 采样策略:
课程采样(Curriculum Sampling):模型在训练初期,在高难度问题上进行大量探索可能导致效率低下。从简单任务开始逐步过渡到更具挑战性的任务,有助于提升训练效率和稳定性。此策略可利用数据准备阶段中各 Prompt 的难度信息。
优先级采样(Prioritized Sampling):通过跟踪每个问题
的成功率 ,采样概率与 成比例。成功率越低的问题获得越高的采样概率,将算力更合理地分配到模型表现尚不好的问题上,进一步提升训练效率。
3.3 优化策略
关于优化算法的选择,许多工作在 RLHF 过程中舍弃了 Value/Critic Model,并基于类 REINFORCE 算法在优势估计方面进行了各种改进。GRPO 可视为其中一种。近期有研究指出,舍去 GRPO 中的 Reference Model 改为对梯度进行裁剪也能正常收敛——对于显存紧张的场景是一种候选思路,但是否影响大规模训练时的稳定性仍需进一步验证。
3.4 初始训练阶段冻结 Actor 参数
在训练初期冻结 Actor 参数,避免策略更新导致响应分布偏移,确保 Critic 模型学习到准确的优势估计。
3.5 奖励基线
引入参考基线消除绝对奖励值的波动影响:
其中
3.6 PPO 结合拒绝采样微调
从模型中采样