面灵AI→

大厂推荐算法面经 10 问(同题重复投稿):后训练 RL 复习清单

时间
2026-10
来源
牛客网

《面试题目》

  1. 你知道 DPO 的损失函数公式吗?
  2. GRPO、PPO 与 DPO 的区别是什么?
  3. GRPO / PPO 是 on-policy 还是 off-policy 的?DPO 呢?
  4. DAPO 对 GRPO 的改进有哪些?
  5. GSPO 对 GRPO 的改进有哪些?
  6. 比较一下 process reward 和 outcome reward。
  7. 强化学习训练时遇到 reward 上升、但 validation 时效果下降,有哪些解决思路?
  8. VeRL 框架是同步的还是异步的?具体的训练流程是什么?
  9. 了解 RL 的训推不一致问题吗?训推不一致的产生原因是什么?
  10. 你认为未来 SFT 阶段和 RL 阶段,哪个更重要?

《参考解析》

这份题单的分布很清晰,可以按四块复习。 第一块是算法族(第 1–3 题):DPO 的公式与推导、PPO / GRPO / DPO 的取舍、三者的 on-policy 归属;第二块是 GRPO 的两条改进线(第 4–5 题):DAPO 走工程强化、GSPO 走粒度对齐;第三块是奖励设计与训练不稳定(第 6–7 题):过程奖励与结果奖励怎么选,reward 和验证集背离怎么查;第四块是工程与判断(第 8–10 题):VeRL 的训练流程、训推不一致的成因、SFT 与 RL 的长期分工。按这四块准备,比逐题背答案有效。

算法族的答题主线是「用多少工程复杂度换多少效果」。 DPO 的损失是对偏好对的二元分类:−E[log σ(β·log(π_θ(y_w|x)/π_ref(y_w|x)) − β·log(π_θ(y_l|x)/π_ref(y_l|x)))],它来自「带 KL 约束的 RLHF 目标有闭式最优解,反解出隐式奖励 r = β·log(π_θ/π_ref)」这一步重参数化,所以不需要奖励模型也不需要在训练中采样;β 控制离参考模型的远近,数据必须来自参考策略附近才成立。PPO 保留了 critic 与奖励模型,用 GAE 估优势、裁剪代理目标加 KL 约束,最稳但最贵。GRPO 用「同题采一组、组内奖励标准化」替代 critic,省掉一个同规模的价值模型,是当前推理 RL 的主流。on-policy 的判据是「训练时是否需要当前策略现场生成数据」:PPO 与 GRPO 需要(PPO 属于 near on-policy,靠裁剪与 KL 控制偏离),DPO 全程在固定数据集上做监督式优化,属于 off-policy。

GRPO 的两条改进线要能分开讲。 DAPO 的四点是工程性的:Clip-Higher 把裁剪上下界解耦并抬高上界以缓解熵坍缩;Dynamic Sampling 丢掉组内全对或全错的无效样本(归一化后优势恒为 0)并补采,提升有效 batch;Token-level loss 把序列级归一化改成 token 级归一化,消除长回答被过度加权的长度偏置;Overlong reward shaping 对被截断的超长回答给软惩罚而不是按错处理。GSPO 只改一处但更本质:把逐 token 的重要性比值换成序列级的长度归一化比值 s(θ) = (π_θ(o|x)/π_old(o|x))^{1/|o|},再在序列粒度上裁剪 —— 理由是奖励本来就是给整条回答的,优化单位应与奖励单位对齐,这样在长序列和 MoE 模型上(单 token 比值容易剧烈漂移)稳定得多,代价是梯度信号更粗。

奖励设计的取舍是「信号密度对标注成本」。 结果奖励(ORM)只看最终答案对错,可由规则或验证器自动判分,成本近乎为零,但信号稀疏、信用分配粗,模型容易学会凑格式碰答案;过程奖励(PRM)逐步给分,信号稠密、样本效率高,适合做推理时的搜索与重排,但标注昂贵(人工或强模型打分)、步级标签可能互相矛盾、同样会被 hack 成「写看起来严谨的步骤」。落地上的常见组合是用 ORM 做在线 RL 的主奖励、用 PRM 做推理期的过程筛选;只有 ORM 时靠难例筛选、格式约束与长度控制缓解稀疏问题。

reward 上升而验证集变差,先怀疑测量与长度,再怀疑奖励被利用。 四类归因:奖励被策略找到漏洞(reward hacking)——用与训练分布不同的留出评测集、奖励模型集成、KL 与熵正则、按验证集早停;过拟合训练题集——持续刷新 prompt 池并保证训练验证不重叠;长度与截断漂移——RL 训练常让回答变长,训练侧按完整回答给奖励而验证侧被 max_tokens 截断,于是出现「reward 涨、pass@1 跌」的假象,先看截断率与平均长度曲线;工程与口径不一致——rollout 与训练引擎算出的 logprob 不同、或评测协议(temperature、采样条数、pass@1 还是 pass@k)被改动。排查顺序建议是「先确认口径有没有变、再看长度与截断、再看奖励与真实能力的相关性、最后才调超参」,并且训练时同时监控 KL、熵、长度、裁剪比例与验证集分数,只看 reward 一定会被骗。

VeRL 以同步为主,异步是用来掩盖 rollout 空转的。 同步流程是:driver 分配 prompt → rollout worker(vLLM / SGLang)用当前权重生成 → 算奖励、参考模型 logprob 与优势(PPO 还要 critic)→ actor(FSDP 或 Megatron 后端)更新 → 权重同步回推理引擎,进入下一轮。它是严格 on-policy、没有陈旧度,但生成与训练串行、GPU 利用率低;异步或 partial rollout 让两者重叠,用稍旧的数据做更新并靠重要性采样纠正,吞吐换稳定性。答题时把训练后端、推理后端与「同步为默认、异步可选」讲清,别把某个版本的行为说成绝对。训推不一致则是同一份权重在两个引擎上概率不同:精度与归约顺序(FP8 / INT8 对 bf16 累加)、算子实现(不同 FlashAttention 版本与融合 kernel)、并行切分导致的浮点差异、MoE 路由判定分叉、以及权重同步滞后;后果是重要性比值在更新起点就不等于 1,梯度有偏、熵坍缩。缓解办法是 old_logprob 一律用训练引擎重算、两端对齐精度与算子、同步权重并校验、比值截断(TIS)或改用对单 token 比值不敏感的 GSPO。

SFT 与 RL 的分工:SFT 定形式与对齐,RL 提能力,中期 RL 更关键。 SFT 不可替代的地方是冷启动(输出格式、工具调用协议、安全边界)以及没有可验证奖励的领域(写作、对话风格、业务知识);瓶颈是只能模仿、无法超越数据里出现过的解法。RL 的价值在于用可验证奖励优化「说不清但能判对错」的目标,随着验证器覆盖的任务变多而持续扩展,这正是 RLVR 在数学与代码上能给出 SFT 给不了提升的原因。趋势上 SFT 会退化成精选数据的冷启动步骤,能力增长的主力转向 RL,中间夹着拒绝采样微调这类折中;边界仍然是「有验证器的领域 RL 主导,没有验证器的领域 SFT 仍是主力」。