聊聊在大模型RLHF中的PPO算法的奖励
本文探讨了在RLHF训练大模型时,PPO算法中奖励信号的关键作用及其传递机制。核心要点包括:1)PPO使用截断替代目标函数,通过概率比率和优势估计优化策略;2)采用广义优势估计(GAE)将序列级奖励(如0/1)转化为token级奖励,具体方法是将全部奖励放在最后一个有效token上;3)GAE通过反向递推将最终奖励信号传播到整个序列,利用价值函数差异和信用分配机制,使中间token即使即时奖励为0
在对大模型做后训练的 RLHF 时,最经典、最常使用的 RL 算法当属 PPO,而在所有 RL 算法中,奖励至关重要的,因为其是模型优化的唯一反馈信号。那么在将强化学习应用到大模型的训练过程中,奖励信号是如何起作用的,序列级别的奖励是如何转化为 token 级别的奖励的等等,接下来就聊聊这些问题。
PPO算法目标
一般来说,在 PPO 中,最终的训练目标为最大化如下函数(截断替代目标函数 Clipped Surrogate Objective):
LCLIP(θ)=E[min(rt(θ)At,clip(rt(θ),1−ϵ,1+ϵ)At)] L^{CLIP}(\theta) = \mathbb{E} \left[ \min \left( r_t(\theta) A_t, \text{clip}\left(r_t(\theta), 1-\epsilon, 1+\epsilon\right) A_t \right) \right] LCLIP(θ)=E[min(rt(θ)At,clip(rt(θ),1−ϵ,1+ϵ)At)]
其中:
- 概率比率 rt(θ)=πθ(at∣st)πθold(at∣st)r_t(\theta) = \dfrac{\pi_\theta(a_t \mid s_t)}{\pi_{\theta_{\text{old}}}(a_t \mid s_t)}rt(θ)=πθold(at∣st)πθ(at∣st):
- πθ(at∣st)\pi_\theta(a_t \mid s_t)πθ(at∣st) 是新策略在状态 sts_tst 下选择动作 ata_tat 的概率。
- πθold(at∣st)\pi_{\theta_{\text{old}}}(a_t \mid s_t)πθold(at∣st) 是旧策略(上一次更新的策略)在相同状态下选择动作 ata_tat 的概率。
- rt(θ)r_t(\theta)rt(θ) 反映了新策略相对于旧策略对动作选择概率的变化。
- 优势(Advantage)AtA_tAt:
- 表示在状态 sts_tst 下采取动作 ata_tat 相对于平均水平的优势程度。
- 平均水平就是 V(st)V(s_t)V(st),在状态 sts_tst 下采取动作 ata_tat 后的水平就是 Q(st,at)Q(s_t,a_t)Q(st,at)
- 那么 At=Q(st,at)−V(st)A_t = Q(s_t, a_t) - V(s_t)At=Q(st,at)−V(st)
- 裁剪函数 clip(rt(θ),1−ϵ,1+ϵ)\text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)clip(rt(θ),1−ϵ,1+ϵ):
- 如果 rtr_trt 落在区间 [1−ϵ,1+ϵ][1-\epsilon, 1+\epsilon][1−ϵ,1+ϵ] 之外,则截断项会截断目标函数。
- 一般 ϵ\epsilonϵ 的值为 0.1~0.3。
广义优势估计(GAE)
从上面的描述中可以看到,优化目标函数中需要做的一件事情就是优势 AtA_tAt 的计算,这样才知道当前选择的动作(在大模型中则是 token) 是比之前好还是比之前差,而我们无法从公式定义中直接计算优势的值,所以,目前通常的做法都是采用广义优势估计这种方法,GAE 通过使用以下递推公式从序列末尾向前计算优势:
δt=rt+γV(st+1)−V(st) \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) δt=rt+γV(st+1)−V(st)
At=δt+γλAt+1 A_t = \delta_t + \gamma \lambda A_{t+1} At=δt+γλAt+1
其中:
- δt\delta_tδt 是时间步 ttt 的 TD error(时间差分误差)
- rtr_trt 是 token ttt 的即时奖励
- V(st)V(s_t)V(st) 是 critic 对状态 sts_tst 的价值估计
- γ\gammaγ 是折扣因子
- λ\lambdaλ 是 GAE 的混合参数(控制偏差-方差权衡)
可以看到,在 GAE 的计算过程中,需要用到每一时间步的即时奖励 rtr_trt,但是,在使用 RLHF PPO 算法训练大模型的过程中,只有在大模型完成输出、序列完整生成后,才能够使用奖励模型或者基于规则的奖励函数给出一个标量奖励(比如数学任务中,根据模型输出的答案是否与标准答案完全匹配来确定奖励为 0 或 1)。所以,回到一开始提到的问题:如何从一个最终的 0/1 奖励(episode-level reward),得到 token 级别的奖励(token-level reward)?
奖励的设置与传递
之前一直对上述问题很疑惑,后面查阅了相关资料,看了一些 RL 框架的源码实现后,才发现方法很简单。标准做法是:将全部奖励放在最后一个有效 token 上,其余为 0。这是目前绝大多数 LLM 强化学习框架(包括 TRL、OpenAI 的 InstructGPT、Anthropic 的 RLHF 实现等)采用的方法。而
GAE 在处理中间 token 的奖励时方式非常巧妙,它通过递推机制将最终的奖励信号有效地传播到整个序列的每个 token 上。
具体处理过程
1. 初始条件
- 从序列末尾开始:AT=0A_T = 0AT=0(序列结束后无未来优势)
- 通常 V(sT)=0V(s_{T}) = 0V(sT)=0(episode 结束)
2. 反向递推
- 从 t=T−1t = T-1t=T−1 到 t=0t = 0t=0,逐步计算每个位置的优势
- 即使中间 token 的 rt=0r_t = 0rt=0,但通过 δt\delta_tδt 和递推关系,优势仍能向前传播
具体例子
假设序列长度为 4,只有最后一个 token 有奖励:
Token: t0 t1 t2 t3
Reward: 0 0 0 1
Value: 0.2 0.3 0.5 0.8
设 γ=1\gamma = 1γ=1, λ=1\lambda = 1λ=1,计算如下:
Step 1: t = 3 (最后一步)
- δ3=r3+γ⋅0−V(s3)=1−0.8=0.2\delta_3 = r_3 + \gamma \cdot 0 - V(s_3) = 1 - 0.8 = 0.2δ3=r3+γ⋅0−V(s3)=1−0.8=0.2
- A3=δ3+γλ⋅0=0.2A_3 = \delta_3 + \gamma\lambda \cdot 0 = 0.2A3=δ3+γλ⋅0=0.2
Step 2: t = 2
- δ2=0+1⋅0.8−0.5=0.3\delta_2 = 0 + 1 \cdot 0.8 - 0.5 = 0.3δ2=0+1⋅0.8−0.5=0.3
- A2=0.3+1⋅1⋅0.2=0.5A_2 = 0.3 + 1 \cdot 1 \cdot 0.2 = 0.5A2=0.3+1⋅1⋅0.2=0.5
Step 3: t = 1
- δ1=0+1⋅0.5−0.3=0.2\delta_1 = 0 + 1 \cdot 0.5 - 0.3 = 0.2δ1=0+1⋅0.5−0.3=0.2
- A1=0.2+1⋅1⋅0.5=0.7A_1 = 0.2 + 1 \cdot 1 \cdot 0.5 = 0.7A1=0.2+1⋅1⋅0.5=0.7
Step 4: t = 0
- δ0=0+1⋅0.3−0.2=0.1\delta_0 = 0 + 1 \cdot 0.3 - 0.2 = 0.1δ0=0+1⋅0.3−0.2=0.1
- A0=0.1+1⋅1⋅0.7=0.8A_0 = 0.1 + 1 \cdot 1 \cdot 0.7 = 0.8A0=0.1+1⋅1⋅0.7=0.8
结果:
A = [0.8, 0.7, 0.5, 0.2]
✅ 尽管中间 token 的即时奖励都是 0,但它们都获得了非零的优势值!
为什么这样有效?
1. 价值函数作为"桥梁"
- Critic 的价值估计 V(st)V(s_t)V(st) 反映了从状态 ttt 开始的预期回报
- 即使 rt=0r_t = 0rt=0,如果 V(st+1)>V(st)V(s_{t+1}) > V(s_t)V(st+1)>V(st),就会产生正的 δt\delta_tδt
- 这让模型知道"虽然当前没获得奖励,但正在走向一个好状态"
2. 信用分配机制
- 最终的奖励 RRR 通过价值函数的差异被"分解"到每个步骤
- 每个 token 的优势反映了它对最终成功贡献的程度
3. λ\lambdaλ 参数的调节作用
- λ=0\lambda = 0λ=0:只考虑一步(TD(0)),信用分配最短
- λ=1\lambda = 1λ=1:考虑整个未来(MC),信用分配最远
- 0<λ<10 < \lambda < 10<λ<1:平衡偏差和方差
在 LLM 训练中的意义
模型在生成第一个 token 时,虽然没看到 reward,但如果它走向了一个“高价值”的回答路径(critic 给高 V),那么:
- 后续的 δ\deltaδ 会累积
- GAE 会把优势分配回早期 token
因此,策略梯度更新会鼓励那些“通向正确答案”的早期决策(比如选择正确的解题思路、格式等)
λ\lambdaλ 对传播距离的影响
如果 λ=0.95\lambda = 0.95λ=0.95,γ=0.99\gamma = 0.99γ=0.99,那么:
- 10步前的奖励权重约为 (0.95×0.99)10≈0.6(0.95 \times 0.99)^{10} \approx 0.6(0.95×0.99)10≈0.6
- 20步前的权重约为 0.360.360.36
- 仍然能有效影响较远的 token
总结
GAE 处理中间 token 奖励的核心机制是:
- 利用价值函数的差异:即使 rt=0r_t = 0rt=0,V(st+1)−V(st)V(s_{t+1}) - V(s_t)V(st+1)−V(st) 仍能提供信号
- 递推传播:通过 At=δt+γλAt+1A_t = \delta_t + \gamma\lambda A_{t+1}At=δt+γλAt+1 将最终奖励向前传递
- 自动信用分配:不需要人为设计中间奖励,GAE 自动完成
- 灵活性:通过 λ\lambdaλ 参数控制传播距离和方差
这种机制使得即使只有最终奖励,LLM 的每个生成步骤也能获得有意义的梯度信号,从而学习到好的推理策略。
更多推荐


所有评论(0)