27届大模型面试准备(七十三):大模型强化学习对齐工程实战——RLHF、PPO 与 GRPO 的训练流水线

27届大模型面试准备(七十三):大模型强化学习对齐工程实战------RLHF、PPO 与 GRPO 的训练流水线

引言

前面把后训练(A16)、对齐税(A48)、多模态训练(A40)、工具调用训练(A42)都铺开了。本篇把"对齐"里最硬核、也是面试官最爱追问的一段单独拎出来讲透:基于强化学习的对齐训练。它和上一篇高频八股(A52)、指令遵循(A48)是一条线,但更偏工程实现------奖励模型怎么训、PPO 为什么要有 critic、GRPO 怎么把 critic 省掉、DPO 又怎么绕过奖励模型直接做偏好。

这部分对准备华为多模态 LLM 岗尤其关键:你的 4MRAG 完全可以接一层 RL 来联合优化"检索决策 + 生成质量",而 GRPO 正是你简历里已经写过、面试必被深挖的能力点。本篇给可落地的训练流水线与代码骨架。

前文链接:A52 高频八股秒答、A48 指令遵循与对齐税、A16 后训练、A42 工具调用训练。

复制代码
  对齐训练三段式(以 RLHF 为例)
  ┌────────────┐   ┌────────────┐   ┌──────────────────────┐
  │  SFT 模型   │──▶│ 奖励模型 RM │──▶│   强化学习策略优化      │
  │ (policy π0) │   │ (打分器)    │   │  PPO / GRPO / DPO     │
  └────────────┘   └────────────┘   └──────────────────────┘
       │                                   │
       │             偏好数据               ▼
       └────(prompt, chosen, rejected)──▶ 更新 π → π*
                (pairwise 标注)

  DPO 短路版:跳过 RM,直接用偏好对优化策略
  SFT → DPO(preference pairs) → π*    (无显式 reward model)

表:三种主流对齐算法对比

方法 是否需要 RM 是否需要 critic 采样开销 稳定性 适用场景
RLHF-PPO 是(value net) 高(在线采样) 中(易崩) 强对齐、复杂奖励
GRPO 否(group 基线) 中(组内采样) 推理/数学/工具调用
DPO 否(隐式) 低(离线) 快速对齐、数据充足

一、为什么 SFT 不够,必须上 RL

SFT 只在"示范分布"上做最大似然,模型学到的是"像答案",不一定学到"人类真正偏好"。同一 prompt 可能有多个合理回答,有的更简洁、更安全、更会推理。RL 的作用是把"好回答"的相对优势通过奖励信号放大。

核心矛盾:奖励从哪来?一条路是训一个奖励模型 RM 去拟合人类偏好(RLHF),另一条路是直接用偏好对构造一个"隐式奖励"做分类式优化(DPO)。

二、奖励模型(RM)训练

RM 本质是一个回归头:输入 (prompt, response),输出标量分数。训练用 Bradley-Terry 成对偏好模型:

P(chosen > rejected | x) = σ(r_θ(x, y_c) − r_θ(x, y_r))

对应损失是 pairwise ranking loss:

复制代码
import torch, torch.nn as nn

def rm_pairwise_loss(rm, x, y_c, y_r):
    # rm: 输入拼接序列输出最后一帧标量分;y_c=被选, y_r=被拒
    s_c = rm(x, y_c)          # [B]
    s_r = rm(x, y_r)          # [B]
    # 越大越好 => 希望 s_c - s_r 尽可能大
    loss = -torch.nn.functional.logsigmoid(s_c - s_r).mean()
    return loss

# 工程要点:
# 1) RM 与 policy 同源初始化(同底座),只换 head;
# 2) 偏好标注要做去重与质量过滤,避免标注噪声主导梯度;
# 3) 训练目标含长度正则:r_θ 对超长回答天然偏高,需减 λ·|y| 或做长度归一。

RM 训好后,它就是 RL 阶段的"环境奖励函数"。常见坑:RM 过拟合标注者偏好、被 reward hacking(模型生成 RM 高分的套路文本而非真优质回答)。

三、PPO 实战

PPO 是 actor-critic 结构:actor=策略 π,critic=价值网络 V 估计期望回报,ref=冻结的 SFT 参考策略用于 KL 约束(防止策略跑太偏)。单步损失:

复制代码
def ppo_loss(logp_new, logp_old, adv, value, returns, clip=0.2, c1=0.5, c2=0.01):
    ratio = (logp_new - logp_old).exp()
    surr1 = ratio * adv
    surr2 = torch.clamp(ratio, 1-clip, 1+clip) * adv
    policy_loss = -torch.min(surr1, surr2).mean()      # clip 防更新过猛
    value_loss  = c1 * (value - returns).pow(2).mean()
    ent = -logp_new.exp().mul(logp_new).sum(-1).mean()  # 鼓励探索
    return policy_loss + value_loss - c2 * ent

# 流程(每个 rollout):
# 1) 用 π 对 prompt 采样 response;
# 2) RM 给 response 打分 r;KL = log π - log ref,reward = r - β·KL;
# 3) GAE 算 advantage A,V 学 returns;
# 4) 多轮小批量更新 actor+critic。

PPO 的痛点:要同时加载 actor、ref、critic、RM 四份权重,显存与采样开销都大,训练易不稳定(reward 漂移、KL 爆炸)。

四、GRPO:把 critic 省掉

GRPO(Group Relative Policy Optimization)对同一个 prompt 采样一组 G 个回答,用组内奖励的均值做基线,advantage = (r_i − mean(r)) / std(r),无需独立 value 网络。这正是你做 4MRAG/推理对齐时最划算的方案。

复制代码
def grpo_advantage(rewards):            # rewards: [G] 组内 G 个采样
    mean = rewards.mean(); std = rewards.std() + 1e-6
    return (rewards - mean) / std       # 组内相对优势

def grpo_loss(logp_new, logp_ref, adv, clip=0.2, beta=0.04):
    ratio = (logp_new - logp_ref).exp()
    surr = torch.min(ratio * adv, torch.clamp(ratio, 1-clip, 1+clip) * adv)
    kl = (logp_ref - logp_new).mean()    # 相对参考策略的 KL
    return -surr.mean() + beta * kl      # 组内基线替代 critic

# 与 4MRAG 结合示例:
# prompt = 多模态问题;组内采样 G 条"检索子图集合 + 生成"轨迹;
# reward = 答案正确性(LLM-judge) + 检索效率惩罚 - 幻觉惩罚;
# GRPO 直接优化"何时检索、检索哪几个模态、如何融合",无需训 critic。

GRPO 显存省一半(无 critic),训练更稳,特别适合可验证奖励(数学、代码、检索准确率)场景。DeepSeek-R1 系列即采用 GRPO 类方法做推理对齐。

五、DPO:绕过奖励模型的离线优化

DPO 证明:在最优奖励假设下,偏好数据可以直接推出策略更新,无需显式 RM 与在线采样。

复制代码
def dpo_loss(pi_logp_yc, pi_logp_yr, ref_logp_yc, ref_logp_yr, beta=0.1):
    # yc=chosen, yr=rejected;对比策略与参考策略的对数概率差
    pi_diff  = pi_logp_yc  - pi_logp_yr
    ref_diff = ref_logp_yc - ref_logp_yr
    logits = beta * (pi_diff - ref_diff)
    return -torch.nn.functional.logsigmoid(logits).mean()

# 训练只用 (prompt, chosen, rejected) 三元组,离线、稳、省显存。
# 代价:分布外泛化弱于在线 RL,复杂奖励难表达(奖励被隐式锁死在偏好对里)。

六、工程坑与对策

  • reward hacking:模型钻 RM 空子生成高分套路。对策:KL 约束 + 奖励裁剪 + 在线正则 + 周期性 RM 重训。
  • 长度偏置:RM 偏好长回答。对策:长度归一、长度惩罚项、长度解耦奖励。
  • 训练崩塌:PPO 易因大 batch/高 LR 崩。对策:小 LR、clip、早停、回滚到最近稳定 ckpt。
  • 偏好数据质量:标注噪声直接污染 RM。对策:多标注者一致率过滤、难例挖掘。
  • 多模态对齐:视觉偏好更难标注。对策:用可验证信号(答案匹配、检测框 IoU)做辅助奖励,减少纯主观 RM。

面试速答

  • RLHF 三段式是什么?SFT 得到初始策略 → 训奖励模型拟合人类偏好 → 用 PPO 在 RM 奖励下优化策略,并以 KL 约束参考策略防跑偏。
  • 为什么 GRPO 比 PPO 省显存?GRPO 用同一 prompt 的组内采样均值做基线,去掉了独立 critic(value) 网络,少一份权重与一份前向。
  • DPO 为什么稳?它把对齐转成离线分类损失,不需要在线采样、不需要 RM 推理、不需要 critic,分布偏移更小。
  • reward hacking 怎么防?KL 惩罚约束策略偏离、奖励裁剪、周期性重训 RM、引入可验证奖励。

高频追问清单

  • PPO 的 GAE λ 怎么调,对 advantage 估计偏差与方差的权衡?
  • GRPO 组大小 G 取多少合适,太小/太大分别有什么问题?
  • 4MRAG 接 RL 时,奖励函数怎么设计才能同时鼓励"检索准"和"生成对"?
  • 多模态偏好数据怎么构造,纯文本 RM 能给图像回答打分吗?
  • 在线 RL 和 DPO 在分布外泛化上为什么有差距,什么时候必须上在线?
  • KL 系数 β 过大过小分别会怎样,怎么自适应?
相关推荐
tachibana22 小时前
微调和 RAG 各自的优劣势是什么?
人工智能·ai·大模型·llm·agent
thesky1234565 小时前
27届大模型面试准备(七十二):大模型流式推理服务与长连接工程——SSE、背压与首包优化
大模型·sse·长连接·背压·流式推理·首包优化·ttft
deepseek236 小时前
Kimi K3 开放日拆解:2.8T MoE 的 896 专家稀疏路由、KDA 混合注意力与 Infra 三件套
大模型·ai agent·moe
xcLeigh7 小时前
提示词模板库:建立你的专属Prompt兵器库
人工智能·大模型·prompt·提示词
猫先生Mr.Mao8 小时前
大模型之Attention Is All You Need详解:Transformer如何用注意力重写序列建模
深度学习·大模型·transformer·注意力机制·论文解读
thesky1234568 小时前
27届大模型面试准备(七十四):大模型长上下文推理与服务化工程——分块 Prefill、KV 卸载与 Ring Attention
大模型·服务化·chunked prefill·长上下文推理·kv卸载·ring attention·序列并行
寻道码路8 小时前
大模型工程化实战(七):JSON Schema 强约束——模型吐的 json 不合规?schema 校验不通过,重试、兜底、降级一条龙
大模型·agent·rag·json schema·ai工程化·llmops`
KeepSeek9 小时前
大模型推理优化面试题
大模型
deepseek239 小时前
Claude Fable 5.1 深度拆解:推理强度、缓存降价,Agent 工作流成本如何省 45%
大模型·claude·ai agent