1996 个字词
10 分钟
大模型中的强化学习
首次发布: 2025-08-25
... 次访问

引言#

大模型的预训练(next-token prediction)在形式上可以看作一种行为克隆(Behavioral Cloning, BC)—— 给定输入 xx(上下文),最大化正确输出 yy 的似然。

LBC=E(x,y)D[logP(yx)]\mathcal{L}_{BC} = -\mathbb{E}_{(x,y) \sim D} [\log P(y|x)]

其中,DD 是训练数据集,xx 是输入,yy 是目标输出。通过最小化该损失,模型学到语言建模与世界知识。

为了提升模型在下游任务中的可用性与对齐能力,还需要后训练(post-training)。后训练常见两条主线:

  • 监督微调(SFT):用高质量示范数据,让模型学会指令遵循与回答风格。
  • 偏好对齐(preference alignment):让模型在“多个候选回答”里更倾向人类偏好的那个。

SFT 目标函数仍是最大似然:

LSFT=E(x,y)DSFT[logP(yx)]\mathcal{L}_{SFT} = -\mathbb{E}_{(x,y) \sim D_{SFT}} [\log P(y|x)]

工程上常见的完整链路是:

  1. 预训练 → base 模型
  2. SFT → 参考/起点策略 πref\pi_{\mathrm{ref}}
  3. 学偏好(训练奖励模型 RM,或直接用偏好优化)
  4. 用 RL(PPO/GRPO 等)进一步对齐

为什么使用 RL 做后训练#

  • 验证比生成更便宜:人类更容易判断“哪个更好”,而不是写出最优答案
  • 目标更贴近真实需求:很多指标不可微/不可监督(有用性、安全性、工具成功率、通过率等)
  • 序列决策与延迟回报:回答是一个 trajectory,奖励往往在末端给出(典型 credit assignment 问题)
  • 探索与超越示范:不只拟合示范分布,而是围绕奖励探索更优策略

一句话总结:SFT 在拟合 P(yx)P(y|x),而 RL 允许你显式优化你真正关心的 R(x,y)R(x,y)

RL-LLM 建模#

状态、动作与确定性转移#

强化学习问题可以抽象为 MDP。对 LLM 来说,这个 MDP 很“干净”:状态就是已生成的 token 序列,动作是下一个 token。

初始状态 s0s_0 可视为一个确定性的 Dirac 分布:输入 prompt 就是初始状态(实现中通常有 <BOS>):

s0=<BOS>prompt.s_0 = \text{<BOS>} \oplus \mathrm{prompt}.

模型是自回归策略:

atπθ(atst),st+1=stat.a_t \sim \pi_\theta(a_t\mid s_t),\quad s_{t+1} = s_t \oplus a_t.

对应的确定性动力学为

p(st+1st,at)=δ(st+1=stat).p(s_{t+1}\mid s_t,a_t)=\delta(s_{t+1}=s_t\oplus a_t).

当模型输出 <EOS> 或达到最大长度,该幕结束。

将一次生成过程记作轨迹 τ=(s0,a1,,aT)\tau=(s_0,a_1,\dots,a_T)。策略的序列概率可分解为

πθ(as0)=t=1Tπθ(atst),st=s0a1:t1.\pi_\theta(\mathbf{a}|s_0)=\prod_{t=1}^{T}\pi_\theta(a_t|s_t),\quad s_t=s_0\oplus \mathbf{a}_{1:t-1}.

回报与目标#

最一般地,回报是逐步奖励之和:

R(τ)=t=1Tγt1rt.R(\tau)=\sum_{t=1}^{T}\gamma^{t-1} r_t.

训练目标为

J(θ)=Es0D,  τπθ(s0)[R(τ)].J(\theta)=\mathbb{E}_{s_0\sim D,\;\tau\sim\pi_\theta(\cdot\mid s_0)}[R(\tau)].

在 LLM 对齐里,rtr_t 往往是末端奖励(例如 RM 打分、验证器通过/不通过),也可能是过程奖励(例如 PRM 给每一步 reasoning 打分)。

KL 正则:让 RL 不“跑偏”#

直接最大化奖励容易导致奖励过优化(reward hacking),因此常引入参考策略 πref\pi_{\mathrm{ref}} 做 KL 约束。

常见写法是无约束正则化目标:

maxθ  E[R(τ)]βE[DKL(πθ(s)πref(s))].\max_\theta\;\mathbb{E}[R(\tau)]-\beta\,\mathbb{E}\left[D_{\mathrm{KL}}\big(\pi_\theta(\cdot|s)\,\|\,\pi_{\mathrm{ref}}(\cdot|s)\big)\right].

实现中常用“采样 KL”的逐 token 近似:

KLsample(τ)t=1T(logπθ(atst)logπref(atst)).\mathrm{KL}_{\mathrm{sample}}(\tau)\approx\sum_{t=1}^{T}\left(\log\pi_\theta(a_t|s_t)-\log\pi_{\mathrm{ref}}(a_t|s_t)\right).

并把 KL 惩罚并入奖励做 shaping:

ildert=rtβ(logπθ(atst)logπref(atst)).ilde r_t = r_t - \beta\left(\log\pi_\theta(a_t|s_t)-\log\pi_{\mathrm{ref}}(a_t|s_t)\right).

长度偏置(实践里很常见)#

当奖励只在末端给出时,回答长度会显著影响优化:

  • 模型可能为了“覆盖更多得分点”而变得啰嗦
  • 或者为了避免犯错而过早 <EOS>

常见处理:长度归一化、对 <EOS> 的额外奖励/惩罚、或在 RM 中显式惩罚冗长/跑题。

奖励模型#

奖励函数/奖励模型决定了“对齐到底对齐什么”。常见类别:

  • RLVR(验证奖励):数学/编程题用 verifier 直接判对错(0/1 或更细粒度)。优点是客观,缺点是稀疏与可投机。
  • PRM/过程奖励:给 reasoning 中间步骤打分,缓解稀疏奖励与 credit assignment。
  • RLHF(人类偏好):人类在多候选里做比较,训练 RM 或直接偏好优化。
  • RLAIF(AI 偏好):用强模型代替人类偏好标注,规模大但可能引入偏差。
  • GRM(生成式反馈):用生成式 LLM 给反馈/评分,本质是一种可扩展的自动评估信号。

稀疏奖励问题很关键:奖励往往只能在序列结束时给出,这会导致智能体更容易修改末尾而忽视中间推理过程。这也是 PRM 被提出的重要动机。

RLHF 奖励模型(RM)的经典训练:Bradley–Terry#

偏好数据通常是 (x,y+,y)(x,y^+,y^-):同一 prompt xx 下,人类更喜欢 y+y^+ 胜过 yy^-

令奖励模型输出标量分数 rϕ(x,y)r_\phi(x,y),用 Bradley–Terry(BT)定义偏好概率:

P(y+yx)=σ(rϕ(x,y+)rϕ(x,y)).P(y^+\succ y^-\mid x)=\sigma\big(r_\phi(x,y^+)-r_\phi(x,y^-)\big).

最大似然训练对应的损失为

LRM(ϕ)=E[logσ(rϕ(x,y+)rϕ(x,y))].\mathcal{L}_{\mathrm{RM}}(\phi)=-\mathbb{E}\left[\log\sigma\big(r_\phi(x,y^+)-r_\phi(x,y^-)\big)\right].

训练好 RM 后,常用 R(x,y)=rϕ(x,y)R(x,y)=r_\phi(x,y) 作为末端奖励(再加 KL shaping)。

奖励模型的常见坑#

  • reward hacking:策略学会利用 RM 的漏洞(模板、重复、虚假自信)
  • 分布偏移:RL 采样把策略推到 RM 训练分布外,RM 可靠性下降
  • 尺度漂移:RM 分数尺度变化会导致训练不稳定(需要归一化与 KL 控制)
  • 多目标冲突:有用性/安全性/简洁性等可能互相矛盾,单一标量奖励难以表达

具体的 RL 算法#

REINFORCE(策略梯度基础)#

对数导数技巧给出

θJ(θ)=Eτπθ[R(τ)θlogπθ(τ)].\nabla_\theta J(\theta)=\mathbb{E}_{\tau\sim\pi_\theta}\left[R(\tau)\nabla_\theta\log\pi_\theta(\tau)\right].

logπθ(τ)=t=1Tlogπθ(atst),\log\pi_\theta(\tau)=\sum_{t=1}^{T}\log\pi_\theta(a_t|s_t),

所以实现上就是对每个 token 的 logprob 做加权。

为了降低方差,引入 baseline b(st)b(s_t)(常取 value model V(st)V(s_t)):

θJ(θ)1Gi=1Gt=1Ti(G^i,tb(si,t))θlogπθ(ai,tsi,t).\nabla_\theta J(\theta)\approx \frac{1}{G}\sum_{i=1}^{G}\sum_{t=1}^{T_i}\big(\hat G_{i,t}-b(s_{i,t})\big)\,\nabla_\theta\log\pi_\theta(a_{i,t}|s_{i,t}).

其中 G^i,t\hat G_{i,t} 是从 tt 时刻往后的折扣回报。

Actor-Critic(PPO/RLHF 的常见基座)#

工业里更常用 Actor-Critic:训练一个 value model Vψ(st)V_\psi(s_t) 预测回报,并构造优势

At=G^tVψ(st).A_t = \hat G_t - V_\psi(s_t).

优势可以用 GAE(Generalized Advantage Estimation)平衡偏差与方差。

PPO(RLHF 最常见的在线 RL)#

PPO 维护采样时的旧策略 πold\pi_{\mathrm{old}},通过 clipping 限制更新幅度。序列级 ratio 可写为

πθ(as0)πold(as0)=exp(t=1T(logπθ(atst)logπold(atst))).\frac{\pi_\theta(\mathbf{a}|s_0)}{\pi_{\mathrm{old}}(\mathbf{a}|s_0)}=\exp\left(\sum_{t=1}^{T}\big(\log\pi_\theta(a_t|s_t)-\log\pi_{\mathrm{old}}(a_t|s_t)\big)\right).

实践中常用 token 级 PPO(每个 token 一个 ratio),更稳定且并行友好。原始 PPO surrogate 仍可写为

J(θ)=E[min(r(θ)A,  clip(r(θ),1ϵ,1+ϵ)A)].J(\theta)=\mathbb{E}\left[\min\left(r(\theta)A,\;\mathrm{clip}(r(\theta),1-\epsilon,1+\epsilon)A\right)\right].

完整训练一般还包含:

  • value loss(拟合 VψV_\psi,常带 value clipping)
  • entropy bonus(避免过早塌缩)
  • KL penalty / early stop(把策略限制在 πref\pi_{\mathrm{ref}} 附近)

GRPO(Group Relative Policy Optimization)#

GRPO 可以理解为“没有 critic 的相对优势策略优化”:对同一 prompt 采样一组回答(大小 GG),组内归一化得到相对优势 AiA_i,再用策略梯度更新。

组内优势一个常见构造是

Ai=RiμRσR+ϵ,μR=1Gj=1GRj.A_i=\frac{R_i-\mu_R}{\sigma_R+\epsilon},\quad \mu_R=\frac{1}{G}\sum_{j=1}^{G}R_j.

然后用

LGRPO=E[i=1Gt=1TiAilogπθ(ai,tsi,t)]+βE[KL]\mathcal{L}_{\mathrm{GRPO}}=-\mathbb{E}\left[\sum_{i=1}^{G}\sum_{t=1}^{T_i}A_i\log\pi_\theta(a_{i,t}|s_{i,t})\right]+\beta\,\mathbb{E}[\mathrm{KL}]

来更新策略。直觉是:同一个 prompt 里“相对更好”的回答被提升概率,“相对更差”的被压低。

DPO(Direct Preference Optimization,修正公式)#

DPO 是直接用偏好数据优化策略的方法之一,避免了在线采样与训练 RM。

给定 (x,y+,y)(x,y^+,y^-),定义

Δθ=logπθ(y+x)logπθ(yx),Δref=logπref(y+x)logπref(yx).\Delta_\theta=\log\pi_\theta(y^+|x)-\log\pi_\theta(y^-|x),\quad \Delta_{\mathrm{ref}}=\log\pi_{\mathrm{ref}}(y^+|x)-\log\pi_{\mathrm{ref}}(y^-|x).

经典 DPO loss 为

LDPO(θ)=E[logσ(β(ΔθΔref))].\mathcal{L}_{\mathrm{DPO}}(\theta)=-\mathbb{E}\left[\log\sigma\left(\beta(\Delta_\theta-\Delta_{\mathrm{ref}})\right)\right].

这里 β\beta 控制偏好强度(也可理解为温度/正则强度)。

工程实践:训练时常见关键细节#

1) Online RL(PPO/GRPO)的数据流#

一个标准循环:

  1. 从 prompt 数据集采样一批 xx
  2. 用当前策略采样回答 yy(通常每个 prompt 采样多条)
  3. 计算奖励:RM/验证器/规则/工具成功率等
  4. 计算参考模型 logprob(得到 KL shaping)
  5. 构造优势:critic(PPO)或组内相对优势(GRPO)
  6. 反向传播更新 actor(以及可选的 critic/value model)

2) KL controller(非常实用)#

固定 β\beta 常常不稳。常见做法是设定目标 KL(例如每 token KL 在某范围),动态调节 β\beta

  • KL 过大:增大 β\beta
  • KL 过小:减小 β\beta

3) Reward/Advantage 归一化#

  • reward scale 直接决定梯度尺度,通常做 running mean/std 归一化
  • advantage 常做 batch 标准化(均值 0 方差 1)提升稳定性

4) 监控指标(不监控基本必炸)#

  • 平均 reward、reward 方差
  • 平均 KL / 每 token KL
  • 回答长度分布(是否越来越啰嗦/越来越短)
  • 拒答率、安全触发率
  • 离线任务集:正确率、事实性、毒性

5) 常见失败模式#

  • “刷格式/刷模板”:RM 偏好被投机
  • “啰嗦”:为了覆盖得分点而变长
  • “自信胡编”:用看起来像的内容骗过偏好模型
  • “过拟合验证器”:RLVR 场景下出现投机取巧
大模型中的强化学习
https://adalovelemon.github.io/blog/posts/content/coursenotes/reinforcementlearning/llmrl/rl4llm/
Author
Ada Lovelemon
Published at
2025-08-25

留言板