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