面灵AI→

MiniMax 后训练一面:SFT/RL 数据与 GRPO 细节

轮次
一面
时间
2026-10
来源
牛客网

《面试题目》

  1. 自我介绍,重点讲销售多智能体项目的后训练相关经历。
  2. 实习中数据合成的 pipeline 是怎么设计的?从原始数据到训练数据经过哪些处理?
  3. 有没有采买过外部数据?采买的数据质量怎么把控?怎么筛选?
  4. 数据质量差的时候你有哪些清洗和筛选的方法?能举一个具体的例子吗?
  5. SFT 的作用是什么?为什么通常先做 SFT 再做 RL?能不能反过来?
  6. 能不能跳过 SFT 直接做 RL?会有什么问题?你试过吗?
  7. 你认为大模型和 Agent 的区别和联系是什么?在训练层面有什么不同?
  8. Skill 和 Tool 的区别是什么?模型怎么知道有哪些 Skill 可以调用?
  9. 模型调用 Skill 需要专门训练吗?还是靠 Prompt 就能解决?
  10. 记忆模块是怎么实现的?长期记忆和短期记忆分别怎么存储和检索?
  11. DPO 的优缺点是什么?为什么现在 GRPO 更流行?你项目里用哪个?
  12. PPO 和 GRPO 的核心区别是什么?分别在什么场景下用?为什么?
  13. GRPO 的损失函数怎么写?和 PPO 比省掉了什么?省掉之后有什么影响?
  14. 重要性采样的作用是什么?在 off-policy 里怎么用?公式写一下。
  15. on-policy 和 off-policy 的区别是什么?你项目里是哪种?
  16. RL 训练中 reward hacking 怎么发现?怎么解决?你遇到过吗?
  17. 训练不稳定、loss 震荡怎么排查?从哪些方向入手?
  18. SFT 时 loss 不降怎么办?从数据、模型、超参三个方向分别说。
  19. SFT 数据中指令和输入字段重叠怎么处理?会有什么影响?
  20. 模型效果怎么评估?评测集怎么构建?多少条?覆盖哪些场景?
  21. 人工评测和自动评测怎么结合?同模型评测同模型有什么问题?
  22. 你怎么判断一个后训练方案是否有效?有没有量化指标?
  23. 如果 RL 训练后期效果下降,有哪些优化方向?你试过哪个?
  24. DAPO 为什么不需要 KL 惩罚?它怎么维持稳定性?原理是什么?
  25. 前向 KL 和反向 KL 散度有什么区别?分别适用什么场景?
  26. 梯度累积的原理是什么?工程上要注意什么?batch size 怎么设?
  27. 梯度检查点是什么技术?主要解决什么问题?会牺牲什么?
  28. 大模型推理时同一输入输出差异大,哪些超参可以降低随机性?
  29. 你多模态 RAG 项目里,图文是怎么对齐的?检索效果怎么样?
  30. 多模态 RAG 和纯文本 RAG 比,难点在哪里?你怎么解决的?
  31. 反问:团队现在更偏 SFT 还是 RL?
  32. 手撕:岛屿数量,要求写 DFS 和 BFS 两种解法。

《参考解析》

数据 pipeline 是后训练面试的第一性话题,要讲成一条可复现的链路。 从原始数据到训练数据大致经过:采集(业务日志、开源数据集、采买)、去重(精确哈希去重加 MinHash/SimHash 这类近似去重,防止同一内容换个模板重复出现)、质量过滤、清洗、格式化成指令与回复结构、按域配比采样、最后做评测集隔离。过滤手段分两层:规则层看长度、语言、重复率、乱码、模板化程度、敏感信息;模型层用质量分类器或强模型打分做排序与截断。采买数据的把控重点是「先小样评估再批量」——抽样跑质量分类器加人工复核,确认格式与合规后再入库,入库后与自有数据走同一套过滤,并且一定要和评测集比对去重,否则采买数据污染评测会让所有结论失效。质量差的具体例子要能随口给出:同一回复重复拼接、答案与问题不匹配、few-shot 示例被当成真实样本、长思维链灌水、以及多轮数据里角色错位。

SFT 与 RL 的先后顺序,根因是「RL 的探索需要先有合法动作」。 SFT 本质是行为克隆,让模型学会输出格式、指令跟随与基本的推理范式,把策略推到「有一定概率产出合规回答」的位置;RL 再在此基础上按奖励优化偏好或正确性。反过来先 RL 不是绝对不行,一些工作用可验证奖励直接从基座冷启动,但需要更强的奖励塑形、更大的采样量与更多的工程调参,且容易收敛到刷奖励的捷径。跳过 SFT 直接 RL 的典型症状是:输出格式不合规导致奖励算不出来(大量样本被丢弃、有效 batch 变小)、训练早期就 reward hacking、以及收敛慢。回答时可以主动区分「格式与行为」由 SFT 负责、「偏好与正确性」由 RL 负责这条分工线,再把「大模型与 Agent 在训练层面的差别」接上去——Agent 引入了多步交互与环境反馈,训练信号从单轮回答的对错变成轨迹级的成败,带来信用分配问题与更长的 rollout 成本。

DPO、PPO、GRPO 的对比要落到「优势怎么估、要不要 critic」。 DPO 把偏好优化解析成对偏好对的分类损失,直接优化策略,不需要奖励模型与在线采样,稳定、便宜、易复现;代价是只吃离线偏好对、没有探索,容易过拟合并偏向偏好数据里出现过的风格,对「需要多次采样加验证」的任务无能为力。PPO 需要额外的价值网络估计优势,训练成本与显存都高,超参(KL 系数、clip 范围、GAE 参数)敏感,但优势估计的方差更小、适合奖励稠密的场景。GRPO 去掉 critic,用同一个 prompt 采样一组回答、以组内奖励的归一化值当优势(相对基线),省掉价值网络与一份显存,在奖励可验证(数学、代码)的任务上又稳又省。损失函数上,GRPO 的目标仍是 PPO 的 clip 形式,只是把优势换成组内 z-score,并保留与参考模型的 KL 惩罚项;追问会到「组内奖励全相同怎么办」——此时优势为 0、没有梯度,所以要过滤掉全对与全错的组(动态采样)。DAPO 去掉 KL 惩罚后能稳,靠的是几处配套改动:clip-higher 放宽上界鼓励探索、token 级损失(而不是样本级平均,避免长回答被稀释)、动态采样过滤无梯度的组、以及不过度依赖 KL 的软约束——本质是控制策略偏移的方式从「KL 惩罚」换成了「裁剪 + 数据筛选」。

重要性采样、on/off-policy 与 KL 方向这几个理论点是连着考的。 重要性采样的作用是让「用旧策略采的数据」能估计「新策略的梯度」,权重是 π_new/π_old,也就是 PPO 里的 ratio;它的方差随策略偏移指数增长,所以需要裁剪或截断来抑制。on-policy 指采样策略与待优化策略一致(数据用完即弃),off-policy 则可以复用历史数据,效率高但需要修正分布偏差。前向 KL(KL(p‖q))是 mode-covering,倾向于覆盖目标分布的所有模式,反向 KL(KL(q‖p))是 mode-seeking,让 q 贴近 p 的某个高概率模式;RLHF 里通常最小化策略与参考模型的反向 KL(或作为惩罚项)以抑制退化,而变分推断里常讨论两者的选择。这些题答的时候最好把公式写在纸上,再补一句「实际训练用的是采样估计,所以有偏、要靠 baseline 与裁剪降方差」。

训练不稳定的排查要分层,并且用「先怀疑数据」的顺序。 loss 震荡的常见原因按概率排序:有效 batch 太小、学习率过大、数据噪声或标签错、序列长度截断不一致;对策对应是加大 batch 或梯度累积、降学习率并拉长 warmup、开梯度裁剪、清洗数据。loss 不降则要分数据、模型、超参三路查:数据侧先看格式与 mask(把指令和输入字段重叠的部分一起算 loss,会让模型学会复读问题;只对回复段算 loss 是常规做法),再看标签是否错位;模型侧看初始化、精度(bf16 累加误差、loss scale)、以及是否加载对了权重;超参侧看学习率量级、优化器配置、权重衰减。RL 后期掉点通常是策略漂移过度或奖励被刷:对策是降低学习率、加强 KL 约束、过滤掉噪声大的样本组、或回滚到中间 checkpoint 重新调参。梯度累积的要点是 loss 要按累积步数正确缩放(否则等效学习率变了)、与分布式梯度同步的时机要对齐;梯度检查点是用计算换显存(前向不保存全部激活,反向重算),能显著降低显存占用,代价是约 20%~30% 的额外算力。推理时降低随机性就是调温度、top-p、top-k 与随机种子,并说明贪心解码与采样的取舍。

评测和「方案是否有效」的答案是同一件事:固定的评测集加统计上的显著。 评测集要分域构建(能力域、难例、边界、安全),条数按用途定——快速回归集几十到几百条、模型选型集上千条,另外保留公开基准做横向可比,且与训练数据严格去重。人工与自动评测结合的正确姿势是:确定性任务(数学答案、代码单测、结构化输出)用规则或执行判定;开放任务用强模型评审加少量人工校准,但要清楚同模型自评的偏差(自我偏好、位置偏差、长度偏好),需要换模型评、双向随机化位置、并抽查一致性。量化指标按目标定:正确率与通过率、格式合规率、平均输出长度与 token、以及业务侧指标。判断一个后训练方案是否有效,要有对照组(同数据同算力的 baseline)、多次采样降低方差、以及跨多个评测集的同向改善——只看单次样例或单一 benchmark 的提升最容易自欺。多模态 RAG 的追问落点是图文对齐方式(对比学习式的双塔对齐、还是用多模态大模型统一编码)、检索粒度(图块与文本块怎么混排、跨模态打分怎么归一化),难点在于跨模态语义鸿沟、图片信息密度高导致切片困难、以及评测缺乏标准数据,解法通常是分层索引加多模态重排,并用人工标注的小评测集做验证。

手撕岛屿数量,两种写法都要能一次写对。 DFS 用递归最简洁:遍历网格,遇到陆地就计数加一并对该格做深度优先淹没(原地改成水或标记 visited);缺点是递归深度受网格规模限制,超大网格会栈溢出,工程上改成显式栈或 BFS。BFS 用队列加 visited(或原地标记),逐层扩展,不会有栈深问题。两者时间与空间都是 O(mn)。常见追问是并查集解法(适合「动态增加陆地、随时查询岛屿数」的变体)、最大岛屿面积(淹没时累加面积)、以及多源 BFS 类的变体题,核心都是「遍历加连通分量」这一套模板。