在对大模型做后训练的 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(atst)πθ(atst)
    • πθ(at∣st)\pi_\theta(a_t \mid s_t)πθ(atst) 是新策略在状态 sts_tst 下选择动作 ata_tat 的概率。
    • πθold(at∣st)\pi_{\theta_{\text{old}}}(a_t \mid s_t)πθold(atst) 是旧策略(上一次更新的策略)在相同状态下选择动作 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=T1t=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+γ0V(s3)=10.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+10.80.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+110.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+10.50.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+110.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+10.30.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+110.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)100.6
  • 20步前的权重约为 0.360.360.36
  • 仍然能有效影响较远的 token

总结

GAE 处理中间 token 奖励的核心机制是:

  1. 利用价值函数的差异:即使 rt=0r_t = 0rt=0V(st+1)−V(st)V(s_{t+1}) - V(s_t)V(st+1)V(st) 仍能提供信号
  2. 递推传播:通过 At=δt+γλAt+1A_t = \delta_t + \gamma\lambda A_{t+1}At=δt+γλAt+1 将最终奖励向前传递
  3. 自动信用分配:不需要人为设计中间奖励,GAE 自动完成
  4. 灵活性:通过 λ\lambdaλ 参数控制传播距离和方差

这种机制使得即使只有最终奖励,LLM 的每个生成步骤也能获得有意义的梯度信号,从而学习到好的推理策略。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐