快手 大模型算法 一面

1. 自我介绍

2. 为什么要用 DPO,你的 DPO 数据从哪里来

DPO 主要用来做偏好对齐,让模型在两个候选答案中更倾向于选择符合业务偏好的回答,而不是只学会复现标准答案。SFT 解决的是“会不会做”,DPO 更偏向解决“更喜欢哪种做法”。数据一般不是直接从线上拿一问一答就能用,而是先用上一版 checkpoint 对同一批 prompt 做多候选采样,再经过规则、模型评审和人工复核构造 chosen/rejected。这里不用商业 API 蒸馏正反样本,是因为不同模型的输出分布和本地模型不一致,直接蒸馏会让偏好边界偏到外部模型的风格上,最后 DPO 学到的是别人的分布,不一定能提升当前模型。

def build_dpo_pair(prompt, candidates, judge_fn):
    scored = [(judge_fn(prompt, c), c) for c in candidates]
    scored.sort(key=lambda x: x[0], reverse=True)
    return {
        "prompt": prompt,
        "chosen": scored[0][1],
        "rejected": scored[-1][1]
    }

3. DPO 为什么常配合 rejection sampling,而不是直接拿随机负样本训练

随机负样本很多时候太弱,模型很容易区分,但学不到真正细粒度的偏好边界。Rejection sampling 的作用是从当前模型或上一版模型的候选输出里筛掉不合格样本,把质量差异相对接近但偏好明确的样本保留下来。这样的 chosen/rejected 更接近模型真实会犯的错,对 DPO 更有价值。如果正负样本都来自商业 API,或者和当前模型分布差太远,训练容易变成风格迁移,而不是偏好优化。

4. 为什么说 DPO 数据最好来自上一版 checkpoint 的采样分布

因为 DPO 的优化假设里,模型需要在自身可能生成的候选空间里调整偏好。如果 rejected 完全来自另一个强模型或另一个风格体系,它可能不是当前模型真实会生成的坏答案,优化信号就会变弱。上一版 checkpoint 采样出来的候选更贴近当前模型的错误模式,DPO 才能真正修正它的偏好。实际训练时还会控制采样温度、候选数量和过滤规则,避免数据太简单或者全是噪声。

5. DPO 的核心公式是什么,里面的 πθ 和 πref 分别代表什么

DPO 的核心思想是让当前策略模型 πθ 相比参考模型 πref,更偏向 chosen 而不是 rejected。常见损失可以写成:

其中 yw 是 chosen,yl 是 rejected,πθ 是当前要训练的模型,πref 通常是 SFT 后冻结的参考模型。β 控制偏好优化强度。它不是简单让 chosen 概率变大,而是要求当前模型相对参考模型,在 chosen/rejected 的概率差上产生更符合偏好的变化。

import torch
import torch.nn.functional as F

def dpo_loss(pi_logp_w, pi_logp_l, ref_logp_w, ref_logp_l, beta=0.1):
    pi_logratios = pi_logp_w - pi_logp_l
    ref_logratios = ref_logp_w - ref_logp_l
    logits = beta * (pi_logratios - ref_logratios)
    return -F.logsigmoid(logits).mean()

6. DPO 中 beta 参数过大或过小会发生什么

beta 可以理解为偏好约束强度。太小的时候,chosen 和 rejected 的差异信号被压得很弱,训练会变慢,甚至看不到明显偏好提升;太大的时候,模型会过度追求偏好对里的差异,容易偏离 SFT 分布,出现格式不稳、长度漂移和泛化下降。实际使用中不会只看训练 loss,还会看 win rate、拒答准确率、长度分布和业务验证集表现。很多 DPO 翻车,不是公式错,而是 beta、数据质量和参考模型没配好。

7. GRPO 的公式讲一下,实际使用时 pi_theta 和 pi_old 怎么处理

GRPO 是一种基于组内相对优势的强化学习优化方法。对同一个问题采样多个回答,得到一组 reward,然后用组内均值和方差归一化得到 advantage,再更新当前策略。它常见形式会包含重要性比率:

实际使用时,πold 通常是采样时的旧策略。很多工程实现里一轮 rollout 后旧策略比例近似为 1,真正优化时主要用 advantage 和 KL 约束控制模型别跑太远。最后落地经常不是完全照论文每个细节做,而是用优势分数加 KL 散度做稳定优化。

def normalize_advantage(rewards, eps=1e-6):
    r = torch.tensor(rewards, dtype=torch.float32)
    return (r - r.mean()) / (r.std() + eps)

8. GRPO 和 DPO 的区别是什么

DPO 依赖成对偏好数据,优化的是 chosen 相对 rejected 的概率差;GRPO 更依赖同一个 prompt 下多候选的 reward,通过组内相对优势来更新策略。DPO 工程更轻,适合已有偏好对的场景;GRPO 更适合数学、代码、推理这类可以打分或验证的任务。DPO 的关键是 pair 质量,GRPO 的关键是 reward 设计和采样质量。两者不是谁替代谁,而是适用阶段不同:SFT 后可以先 DPO 稳偏好,再用 GRPO 针对可验证任务继续提升。

9. 为什么 GRPO 里经常要做组内归一化 advantage

组内归一化是为了消掉不同 prompt 之间 reward 标尺不一致的问题。比如一道题 reward 普遍很低,另一道题普遍很高,如果直接混在一起训练,会让 reward 绝对值影响更新,而不是让模型学会“同一道题里哪个答案更好”。组内归一化后,模型关注的是同一个问题下候选答案的相对优劣。这样训练更稳定,也更适合多候选采样场景。

10. 为什么文档类 RAG 不一定要按固定长度分段

文档类 RAG 最怕的是把一个完整语义单元切碎。固定长度切分虽然简单,但会把标题、定义、表格、条款和上下文关系切断,导致召回片段看起来相关却证据不完整。实际业务里更常用按标题层级、段落、条款编号、页面结构或元数据切分。比如药品说明书、合同、制度文档这类内容,本身就有天然结构,直接按结构切会比固定 to

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

AI-Agent面试实战专栏 文章被收录于专栏

本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.

全部评论
快手的看着可以
点赞 回复 分享
发布于 04-23 23:36 北京

相关推荐

05-11 10:12
已编辑
蚌埠坦克学院 Java
📍面试公司:快手🕐面试时间:03/13💻面试岗位:java❓面试问题1. 可以做个简单的自我介绍。2. 问毕业时间3. 问实习地点4. 以后预期是在北京工作吗?5. 你比较熟悉的是哪个项目?6. 列一下你比较熟悉的一个项目的表名、索引、设计用意。7. 为什么这两个表要分开?8. 有没有可能没有user表的时候有user_info表?9. 这两表的数据怎么生成的?从哪来的?10. 注册的时候会怎么做?操作两个表吗?11. 他可以不可以不绑定微信号?12. 那他可以不可以不填nickname和name?13. 所以你这个user_info表其实不能脱离user表存在,是不是?14. 那种表在数据库设计里面它叫什么?15. E-R两个字还记得吗?是什么的缩写?16. 你的user表为什么需要有个ID字段?17. 为什么不可以让user_info表里面有一个字段是user的ID?关联关系为什么反过来?18. 两个表互相关联是最好的吗?你觉得哪种方式最好?19. 那还需要ID这个字段吗?为什么选这种方案而不选你原来的设计?20. 你的方案怎么选择?为什么选某一种?在什么场景下选?21. 向量召回中,embedding是用什么做的?22. 关键字加向量语义的混合是怎么混合的?23. 搜索结果里面用哪个?24. 你们会去干预排序算法吗?排序的分值?25. 这个RAG检索底座是作为给大模型智能排错的一个工具使用的吗?26. 从0到1构建以及增量更新,耗时大概什么量级?27. 简易数据库是公司的项目还是学校的课程设计?28. 说说PG SQL和MySQL的区别?29. 可重复读隔离级别是怎么实现的?30. 算法题:把二叉树用字符串存储,再写方法解回二叉树。(手撕)🙌面试感想感谢快手给我双非一次机会,虽然我也没把握住🥲,答得很烂,数据库理论什么的完全没准备,而且简直是死抓着数据库理论追着我杀啊。算法不是hot100但是不难,力扣原题。最后毫不意外的挂了。
查看30道真题和解析
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务