RLHF-PPO 封面
返回上一级

RLHF-PPO

2026.07.25
68
📂 Research
# RL

LLM 中 RL 对应的内容

  • LLM 的 Policy:LLM 本身。给定上下文 Prompt,决定生成序列 yy 的概率。

  • LLM 的 Actionata_t,即 tt 时刻 LLM 生成的 token(也可以将一个 sequence 或 segment 看作 action)。

  • LLM 的 Statests_t,即原始 Prompt 与迄今生成的所有 token 的组合:

    st=(x,a1:t1).s_t=(x,a_{1:t-1}).
  • LLM 的 Transition Dynamics:确定性的,

    st+1=concat(st,at).s_{t+1}=\operatorname{concat}(s_t,a_t).
  • LLM 的 Reward:可以是 token-level、sequence-level 或 segment-level。在 RLHF 中,生成完整序列后,通常由 Reward Model 给出一个标量奖励。


广义优势估计 GAE(Generalized Advantage Estimation)

传统的优势函数估计通常采用单步 TD Error(时序差分误差)或者蒙特卡洛方法来计算回报。GAE 用于减少策略梯度算法中的方差,同时保持较低偏差,从而提高算法的样本效率和收敛速度。

优势函数的定义为

Aπ(st,at)=Qπ(st,at)Vπ(st).A^\pi(s_t,a_t)=Q^\pi(s_t,a_t)-V^\pi(s_t).

单步 TD Error 为

δt=rt+γV(st+1)V(st),\delta_t=r_t+\gamma V(s_{t+1})-V(s_t),

它可以作为优势函数的单步估计。需要注意,δt\delta_t 并不恒等于真实的 Aπ(st,at)A^\pi(s_t,a_t);当 VV 能准确估计 VπV^\pi 时,它才是较准确的优势估计。

根据多步时序差分的思想:

A^t(1)=δt=V(st)+rt+γV(st+1),A^t(2)=δt+γδt+1=V(st)+rt+γrt+1+γ2V(st+2),A^t(3)=δt+γδt+1+γ2δt+2=V(st)+rt+γrt+1+γ2rt+2+γ3V(st+3), A^t(k)=i=0k1γiδt+i=V(st)+rt+γrt+1++γk1rt+k1+γkV(st+k).\begin{aligned} \hat A_t^{(1)} &=\delta_t =-V(s_t)+r_t+\gamma V(s_{t+1}),\\ \hat A_t^{(2)} &=\delta_t+\gamma\delta_{t+1}\\ &=-V(s_t)+r_t+\gamma r_{t+1}+\gamma^2V(s_{t+2}),\\ \hat A_t^{(3)} &=\delta_t+\gamma\delta_{t+1}+\gamma^2\delta_{t+2}\\ &=-V(s_t)+r_t+\gamma r_{t+1} +\gamma^2r_{t+2}+\gamma^3V(s_{t+3}),\\ &\ \dots\\ \hat A_t^{(k)} &=\sum_{i=0}^{k-1}\gamma^i\delta_{t+i}\\ &=-V(s_t)+r_t+\gamma r_{t+1}+\dots +\gamma^{k-1}r_{t+k-1}+\gamma^kV(s_{t+k}). \end{aligned}

上述 A^t(1)\hat A_t^{(1)} 就是在 Actor-Critic 中常用的单步优势函数估计。单步估计通常方差较小,但估计准确度可能不如多步时序差分估计。

GAE 将这些不同步数的优势估计进行指数加权平均:

A^tGAE=(1λ)(A^t(1)+λA^t(2)+λ2A^t(3)+)=(1λ)(δt+λ(δt+γδt+1)+λ2(δt+γδt+1+γ2δt+2)+)=(1λ)(δt(1+λ+λ2+)+γδt+1(λ+λ2+λ3+)+)=l=0(γλ)lδt+l.\begin{aligned} \hat A_t^{\mathrm{GAE}} &=(1-\lambda) \left( \hat A_t^{(1)} +\lambda\hat A_t^{(2)} +\lambda^2\hat A_t^{(3)} +\dots \right)\\ &=(1-\lambda) \left( \delta_t +\lambda(\delta_t+\gamma\delta_{t+1}) +\lambda^2(\delta_t+\gamma\delta_{t+1} +\gamma^2\delta_{t+2}) +\dots \right)\\ &=(1-\lambda) \left( \delta_t(1+\lambda+\lambda^2+\dots) +\gamma\delta_{t+1}(\lambda+\lambda^2+\lambda^3+\dots) +\dots \right)\\ &=\sum_{l=0}^{\infty}(\gamma\lambda)^l\delta_{t+l}. \end{aligned}

其中,λ[0,1]\lambda\in[0,1] 是 GAE 中额外引入的超参数。

λ=0\lambda=0 时,只看一步 TD Error:

A^tGAE=δt=rt+γV(st+1)V(st).\hat A_t^{\mathrm{GAE}} =\delta_t =r_t+\gamma V(s_{t+1})-V(s_t).

此时通常方差较小,但更加依赖 Critic 对 V(st)V(s_t) 的估计是否准确。

λ=1\lambda=1 时:

A^tGAE=l=0γlδt+l=(l=0γlrt+l)V(st).\begin{aligned} \hat A_t^{\mathrm{GAE}} &=\sum_{l=0}^{\infty}\gamma^l\delta_{t+l}\\ &=\left(\sum_{l=0}^{\infty}\gamma^lr_{t+l}\right)-V(s_t). \end{aligned}

这等价于 Monte Carlo Return 减去 V(st)V(s_t),通常偏差较小,但方差较大。

在实际的有限长度 response 中,上面的无穷求和会在终止 token 处截断。


Bradley–Terry 模型

通常采用人类偏好数据(Preference Data)训练 Reward Model。

对于两个个体 i,ji,j,假设它们各自有一个正的能力值 Pi,PjP_i,P_j,那么 ii 战胜 jj 的概率是

P(i>j)=PiPi+Pj.P(i>j)=\frac{P_i}{P_i+P_j}.

令模型输出的 reward 分数分别为 ri,rjr_i,r_j,并令

Pi=eri,Pj=erj,P_i=e^{r_i},\qquad P_j=e^{r_j},

P(i>j)=erieri+erj=11+e(rirj)=σ(rirj).\begin{aligned} P(i>j) &=\frac{e^{r_i}}{e^{r_i}+e^{r_j}}\\ &=\frac{1}{1+e^{-(r_i-r_j)}}\\ &=\sigma(r_i-r_j). \end{aligned}

当判断回答 AA 优于回答 BB 时,通过最大化对数似然,使模型逐渐拉开两个回答的 reward 分差。

对于普通的 pairwise preference data,Reward Model 的 loss 为

LRM(θ)=E(x,yw,yl)D[logσ(rθ(x,yw)rθ(x,yl))],\mathcal L_{\mathrm{RM}}(\theta) =-\mathbb E_{(x,y_w,y_l)\sim D} \left[ \log\sigma \left( r_\theta(x,y_w)-r_\theta(x,y_l) \right) \right],

其中 ywy_w 是优秀回答,yly_l 是相对较差的回答。

如果同一个 prompt 有 kk 个 response,并使用全部两两比较,那么共有 (k2)\binom{k}{2} 个 response pair。此时可以在同一个 prompt 内对所有 pair 的 loss 取平均:

LRM(θ)=1(k2)(yw,yl)logσ(rθ(x,yw)rθ(x,yl)).\mathcal L_{\mathrm{RM}}(\theta) =-\frac{1}{\binom{k}{2}} \sum_{(y_w,y_l)} \log\sigma \left( r_\theta(x,y_w)-r_\theta(x,y_l) \right).

RLHF + PPO

Actor Model

Actor Model 通常由经过 SFT 的 Base Model 初始化,参数在之后的 PPO 训练中更新。

输入一批 prompts,Actor 输出对应的 responses。随后使用 prompt 和 response 重新计算每个 response token 的 log probability,并计算 PPO loss。

定义 PPO 的概率比率:

ρt(θ)=πθ(atst)πold(atst).\rho_t(\theta) =\frac{\pi_\theta(a_t\mid s_t)} {\pi_{\mathrm{old}}(a_t\mid s_t)}.

Actor loss 为

LActor=Et[min(ρt(θ)A^t,clip(ρt(θ),1ϵ,1+ϵ)A^t)].\mathcal L_{\mathrm{Actor}} =-\mathbb E_t \left[ \min\left( \rho_t(\theta)\hat A_t,\, \operatorname{clip} \left( \rho_t(\theta),1-\epsilon,1+\epsilon \right)\hat A_t \right) \right].

其中:

  • πθ\pi_\theta 是正在更新的 Actor;
  • πold\pi_{\mathrm{old}} 是生成当前这批 response 时的旧策略;
  • A^t\hat A_t 是 token-level 优势估计;
  • ϵ\epsilon 是 PPO 的 clip range,通常取一个较小的值,比如0.2

计算的是 token-level 优势函数,因此每一个有效输出 token 处都会计算 loss。Prompt token 和 padding token 通常会通过 mask 排除。

Reward Model

Reward Model 使用人类偏好数据训练,并在 PPO 阶段保持冻结。它通常对完整的 prompt-response 输出一个标量奖励 r(x,y)r(x,y)

在 PPO 的 token-level reward 中,一般把这个 sequence-level 分数加到最后一个有效 response token 对应的 reward 上。这里并不是说 Reward Model 只评价最后一个 token,而是把整句回答的分数放在终止位置,后续再通过 GAE 将奖励向前传播。

Reward Model 常在预训练模型或 SFT Model 的基础上添加一个标量 Value Head(或 Reward Head)进行训练。

Reward Model 的训练 loss 为

LReward=E(x,yw,yl)D[log(σ(r(x,yw)r(x,yl)))].\mathcal L_{\mathrm{Reward}} =-\mathbb E_{(x,y_w,y_l)\sim D} \left[ \log \left( \sigma \left( r(x,y_w)-r(x,y_l) \right) \right) \right].

其中 x,yw,ylx,y_w,y_l 分别表示 prompt、chosen response 和 rejected response。Sigmoid 函数为

σ(z)=11+exp(z).\sigma(z)=\frac{1}{1+\exp(-z)}.

因此

σ(r(x,yw)r(x,yl))=exp(r(x,yw))exp(r(x,yw))+exp(r(x,yl)),\sigma\left(r(x,y_w)-r(x,y_l)\right) = \frac{ \exp(r(x,y_w)) }{ \exp(r(x,y_w))+\exp(r(x,y_l)) },

最终可以写为

LReward=E(x,yw,yl)D[logexp(r(x,yw))exp(r(x,yw))+exp(r(x,yl))].\mathcal L_{\mathrm{Reward}} =-\mathbb E_{(x,y_w,y_l)\sim D} \left[ \log \frac{ \exp(r(x,y_w)) }{ \exp(r(x,y_w))+\exp(r(x,y_l)) } \right].

Reference Model

Reference Model 通常是参数冻结的 SFT Model,用来产生 token-level 的 KL 约束项,防止训练后的策略偏离 SFT 模型太远。

对应的优化目标为

maxπExDEyπ(yx)[r(x,y)βlogπ(yx)πref(yx)].\max_\pi \mathbb E_{x\sim\mathcal D} \mathbb E_{y\sim\pi(y\mid x)} \left[ r(x,y) -\beta \log \frac{\pi(y\mid x)} {\pi_{\mathrm{ref}}(y\mid x)} \right].

可以将新的 sequence-level reward 写成

r(x,y)βKLreward.r(x,y)-\beta\,\mathrm{KL}_{\mathrm{reward}}.

因为

logπ(yx)πref(yx)=t=1Tlogπ(atst)πref(atst),\log \frac{\pi(y\mid x)} {\pi_{\mathrm{ref}}(y\mid x)} = \sum_{t=1}^{T} \log \frac{ \pi(a_t\mid s_t) }{ \pi_{\mathrm{ref}}(a_t\mid s_t) },

所以新的 token-level reward 可以表示成

rt={βlogπ(atst)πref(atst),tT,r(x,y)βlogπ(atst)πref(atst),t=T.r_t= \begin{cases} -\beta \log\dfrac{ \pi(a_t\mid s_t) }{ \pi_{\mathrm{ref}}(a_t\mid s_t) }, &t\ne T,\\[10pt] r(x,y) -\beta \log\dfrac{ \pi(a_t\mid s_t) }{ \pi_{\mathrm{ref}}(a_t\mid s_t) }, &t=T. \end{cases}

其中 TT 表示终止位置,也就是 response 的最后一个有效 token。也可以简写为

r(st,at)=1[t=T]r(x,y)βlogπ(atst)πref(atst).r(s_t,a_t) = \mathbf 1[t=T]\,r(x,y) -\beta \log \frac{ \pi(a_t\mid s_t) }{ \pi_{\mathrm{ref}}(a_t\mid s_t) }.

更严格地说,单个 token 上的 log-ratio 是对 KL 的采样估计;对策略采样的 action 取期望后才得到 KL divergence。

Critic Model

Critic Model 用于预测状态 sts_t 的期望未来总收益:

Vt=Vϕ(st).V_t=V_\phi(s_t).

Critic 的初始化方式有很多种,例如与 Actor 共享部分参数,或者从 Reward Model 初始化。Value Head 通常是一个简单的线性层,用于将模型的 hidden state 映射成单一的 value。

如果使用单步 TD target,可以写成

ytTD=rt+γV(st+1),y_t^{\mathrm{TD}} =r_t+\gamma V(s_{t+1}),

对应的单步 TD loss 为

LCriticTD=(ytTDV(st))2.\mathcal L_{\mathrm{Critic}}^{\mathrm{TD}} = \left( y_t^{\mathrm{TD}}-V(s_t) \right)^2.

在 PPO 中,实际更常使用 GAE 计算 advantage,再用

returnst=A^t+Vold(st)\mathrm{returns}_t =\hat A_t+V_{\mathrm{old}}(s_t)

构造 Critic 的训练目标。因此 Critic loss 为

LCritic=Et[(returnstVϕ(st))2].\mathcal L_{\mathrm{Critic}} = \mathbb E_t \left[ \left( \mathrm{returns}_t-V_\phi(s_t) \right)^2 \right].

GAE 与 Critic 输出之间的关系可以概括为:

δt=rt+γVold(st+1)Vold(st),A^t=δt+γλA^t+1,returnst=A^t+Vold(st).\begin{aligned} \delta_t &=r_t+\gamma V_{\mathrm{old}}(s_{t+1}) -V_{\mathrm{old}}(s_t),\\ \hat A_t &=\delta_t+\gamma\lambda\hat A_{t+1},\\ \mathrm{returns}_t &=\hat A_t+V_{\mathrm{old}}(s_t). \end{aligned}

其中:

  • Critic 的旧输出 VoldV_{\mathrm{old}} 参与计算 GAE;
  • GAE 得到的 A^t\hat A_t 用来训练 Actor;
  • A^t+Vold(st)\hat A_t+V_{\mathrm{old}}(s_t) 得到的 returns 用来训练 Critic。

在 RLHF 中,Actor 负责提升模型生成符合人类偏好内容的能力;Reward Model 负责量化完整回答的人类偏好;Critic 则负责预测当前策略下的未来期望回报,为 Actor 的更新提供低方差的优势估计。