27届大模型面试准备(十六):后训练全攻略——SFT、RLHF、DPO、PPO 一次讲透

发布时间:2026/9/24 4:20:28

27届大模型面试准备(十六):后训练全攻略——SFT、RLHF、DPO、PPO 一次讲透 27届大模型面试准备十六后训练全攻略——SFT、RLHF、DPO、PPO 一次讲透上一篇《高效推理全攻略》讲的是怎么让模型推理又快又省属于部署侧。这一篇回到训练侧把预训练之后的所有事——也就是后训练Post-Training——一次性讲透。覆盖 SFT、Reward Model、RLHFPPO、DPO 四条主线外加一条工程副线数据配方、课程学习、拒绝采样。每节都给原理 → 数学/算法骨架 → 代码片段 → 面试速答 高频追问。配合《LoRA/PEFT》候选 A18一起看刚好串成对齐怎么做、怎么省显存做。一、先理清预训练和后训练的职责边界很多面试者把二者混为一谈第一句就露怯。一句话区分预训练Pre-training在海量无标注语料上做 next-token prediction给模型通识知识和语言流畅度。此时模型像一本读过的百科全书但不会按你的指令办事。后训练Post-training在预训练之后用指令 / 对话 / 偏好数据把模型对齐alignment到人类想要的回答方式。包括 SFT、RLHF、DPO、安全对齐等。预训练 后训练 ┌───────────────────────┐ ┌──────────────────────────────┐ │ 8B~万亿 token 语料 │ │ SFT(指令) → RM(偏好) │ │ next-token 预测 │──▶│ → RLHF(PPO) / DPO(直接偏好) │ │ 产出: 基座模型 base │ │ 产出: 对话模型 chat / instruct │ └───────────────────────┘ └──────────────────────────────┘ 通识 流畅 有用 无害 听指令面试常问为什么不直接用预训练模型上线 答案是base 模型只会续写不会对话——你给它请写一首诗它可能接着写请写一首诗的步骤如下。SFT 就是把续写者变成对话者。二、SFT后训练的第一块基石2.1 SFT 在做什么SFTSupervised Fine-Tuning监督微调用指令-回答配对数据继续做 next-token prediction但数据从网页语料换成高质量对话/任务样本。目标函数和预训练一致只是数据分布变了预训练损失: L_pt -Σ log P(x_t | x_t) # x 是网页文本 SFT 损失: L_sft -Σ log P(a_t | a_t, q) # q 是指令, a 是理想回答注意通常只在answer 部分算 lossinstruction/prompt 部分 mask 掉label 置 -100否则模型会学怎么复述问题而不是怎么回答。2.2 一个最小 SFT 数据样本{instruction:把下面这句话翻译成英文今天天气真好。,input:,output:The weather is really nice today.}多轮对话则组织成 messages 列表{messages:[{role:system,content:你是一个严谨的翻译助手。},{role:user,content:把今天天气真好翻译成英文。},{role:assistant,content:The weather is really nice today.}]}2.3 SFT 质量的三个关键点维度常见错误正确做法数据量认为越多越好堆几百万条噪声几万条高质量远胜几百万条低质质量 数量多样性单一任务全是翻译覆盖推理/创作/代码/安全拒答等多题型格式混入系统 prompt 噪声prompt 部分 mask 掉 loss只训回答用 HuggingFace TRL 跑 SFT 的最小骨架fromtrlimportSFTTrainer,SFTConfigfromdatasetsimportload_datasetdatasetload_dataset(json,data_filessft_data.jsonl)[train]trainerSFTTrainer(modelQwen/Qwen2.5-7B,argsSFTConfig(per_device_train_batch_size4,max_seq_length2048,num_train_epochs3,learning_rate2e-5,packingTrue,# 把短样本拼接到一条提升吞吐),train_datasetdataset,)trainer.train()面试速答SFT 为什么只用 answer 算 loss因为 instruction 是已知条件模型在推理时已经知道我们要优化的是给定问题后生成好回答的概率prompt 部分的预测不需要学。高频追问1. packing 和 padding 的区别packing 把多条样本拼接避免浪费padding 用 0 补齐到相同长度浪费算力。2. SFT 学习率一般比预训练大还是小更大如 1e-5~3e-5因为数据少、要快速适配指令分布。3. 全量 SFT 和 LoRA-SFT 怎么选数据少/防灾难性遗忘选 LoRA要深度改变行为选全量。三、Reward ModelRLHF 的裁判RLHF 需要一个人来打分这个人就是 Reward ModelRM。它把回答质量映射成一个标量分数。3.1 RM 的训练数据成对偏好RM 不用绝对分数而用成对比较数据人类标注回答 A 比回答 B 好{chosen:北京是中国的首都。,rejected:北京是美国的一个城市。}3.2 RM 的损失函数Bradley-Terry 模型把 RM 记作 r(x, y)希望 chosen 分数高于 rejectedL_RM -E[ log σ( r(x, y_chosen) - r(x, y_rejected) ) ]σ 是 sigmoid。直观差距越大、符号越对损失越小。RM 通常就是基座模型 一个回归头把 hidden 压成 1 维。# RM 头取最后一个 token 的 hidden 投射到标量classRewardModel(nn.Module):def__init__(self,base):self.basebaseself.value_headnn.Linear(base.config.hidden_size,1)defforward(self,input_ids,attention_mask):outself.base(input_ids,attention_mask).last_hidden_state# 取每个序列最后一个非 pad tokenscoresself.value_head(out[:,-1,:])returnscores.squeeze(-1)面试速答为什么用成对比较而不是绝对打分因为人类对绝对分数标定很不一致但对哪个更好的相对判断稳定得多标注成本低、信噪比高。高频追问1. RM 过优化reward hacking是什么模型找到骗 RM 拿高分的捷径比如啰嗦、拍马屁而非真正变好。2. 怎么缓解加 KL 惩罚、定期用新模型数据重训 RM、做 RM 集成。四、RLHF 的核心PPO 算法PPOProximal Policy Optimization是 RLHF 经典算法。把生成回答看成强化学习策略 π 是待训练的语言模型奖励来自 RM约束是不偏离原始 SFT 模型太远防崩。4.1 总目标L_PPO E[ r_t(θ) * A_t ] - β * KL( π_θ(y|x) || π_ref(y|x) ) 其中: r_t(θ) π_θ(y_t|y_t, x) / π_old(y_t|y_t, x) # 概率比 A_t 来自 GAE 的优势估计由 RM 打分驱动 KL 项 防止模型跑太偏β 是系数4.2 PPO 四件套┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ Actor (π) │ │ Critic (V) │ │ Reward(RM) │ │ Reference │ │ 待更新策略 │ │ 价值估计 │ │ 打分裁判 │ │ 初始锚点 │ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ │ 生成 y │ 估 V │ 打 r │ 算 KL 锚 └────────────────┴─────── 共同计算 PPO loss ────────┘4.3 TRL 跑 PPO 的最小骨架fromtrlimportPPOTrainer,PPOConfig,AutoModelForCausalLMWithValueHeadfromtransformersimportAutoTokenizermodelAutoModelForCausalLMWithValueHead.from_pretrained(sft-model)ref_modelAutoModelForCausalLMWithValueHead.from_pretrained(sft-model)tokenizerAutoTokenizer.from_pretrained(sft-model)configPPOConfig(batch_size16,learning_rate1e-6,kl_penaltykl,init_kl_coef0.02)ppoPPOTrainer(config,model,ref_model,tokenizer)forbatchindataloader:querytokenizer(batch[prompt],return_tensorspt)responsemodel.generate(**query,max_new_tokens128)rewardrm_score(query,response)# RM 打分statsppo.step(query[input_ids],response,reward)面试速答RLHF 里 KL 惩罚的作用防止策略为了骗 RM 而偏离 SFT 模型太远导致语言崩坏满嘴乱码。它是有用和不像人话之间的安全绳。高频追问1. Critic 和 RM 的区别RM 给整句打分外部裁判Critic 预估每步价值内部基线降低方差。2. 为什么 PPO 比普通 policy gradient 稳用了 clip 把概率比限制在一定范围避免一步更新过猛。五、DPO绕开 RM 和 PPO 的直接偏好优化PPO 又贵又脆要四个模型同时在线。2023 年提出的 DPODirect Preference Optimization证明在 KL 约束下最优策略和 RM 有闭式关系于是可以直接在偏好数据上用分类损失训不需要显式 RM、不需要 RL 循环。5.1 DPO 损失L_DPO -E[ log σ( β * ( log π_θ(y_w|x)/π_ref(y_w|x) - log π_θ(y_l|x)/π_ref(y_l|x) ) ) ] y_w chosen, y_l rejected关键点它把奖励差隐式编码进策略比里β 控制偏离 ref 的强度。5.2 DPO vs PPO 对比维度PPO/RLHFDPO需要 RM是单独训练否隐式在线采样需要rollout不需要离线显存/算力高4 模型低2 模型训练稳定性较脆超参敏感较稳动态探索强弱依赖静态数据5.3 TRL 跑 DPO 的最小骨架fromtrlimportDPOTrainer,DPOConfigdpoDPOTrainer(modelsft-model,ref_modelsft-model,# 固定参考argsDPOConfig(beta0.1,learning_rate5e-6,per_device_train_batch_size4),train_datasetpref_dataset,# 含 chosen / rejected 字段)dpo.train()面试速答DPO 为什么不需要 reward model因为 Bradley-Terry KL 约束下最优策略的奖励可以写成策略比 ref 的对数概率差这个量在训练时直接可算于是 RM 被消掉了。高频追问1. DPO 的弱点数据静态模型只能从已有 chosen/rejected 学缺乏 PPO 的在线探索容易被数据分布限制。2. β 太大或太小会怎样太大→几乎不更新贴近 ref太小→可能过拟合偏好、语言退化。3. 线上该选哪个资源紧/求稳选 DPO要最强效果且有 RL 工程能力选 PPO。六、工程副线数据配方与课程学习面试高阶题常考后训练怎么排兵布阵这里给一个可落地配方阶段1 SFT(通用指令) —— 让模型学会按指令办事 阶段2 SFT(领域/硬任务) —— 注入代码、数学、安全拒答等硬能力 阶段3 DPO / RLHF(偏好) —— 对齐风格、无害、有用 阶段4 安全对齐 红蓝对抗 —— 专门修越狱、补拒答课程学习curriculum先易后难、先广后专。常见坑灾难性遗忘后训练把预训练知识冲掉。缓解混入少量预训练续写数据replay、用 LoRA 而非全量。长度崩坏RL 阶段模型学会越长分越高。缓解RM 加长度惩罚、KL 约束。分布漂移偏好数据来自少数标注员模型被窄化。缓解多源标注、定期重采。面试速答为什么后训练要分阶段而不是一把梭不同阶段目标冲突通用性 vs 专业性 vs 偏好一把梭会让梯度互相打架分阶段能让每阶段专注一类能力且便于单独 debug。七、面试速答 高频追问清单汇总速答 TOP 81. 预训练给知识后训练给对齐指令遵循 偏好。2. SFT 只在 answer 算 lossprompt 部分 mask。3. RM 用成对比较训练输出标量奖励。4. PPO 四件套Actor / Critic / Reward / ReferenceKL 防崩。5. DPO 用偏好数据直接训隐式消去 RM。6. DPO 省算力但缺在线探索PPO 效果好但脆。7. β 控制偏离 ref 的强度。8. 后训练分阶段是为避免目标冲突与遗忘。追问清单- 为什么 RM 用 Bradley-Terry 而不是 MSE- reward hacking 有哪些典型表现怎么发现- 多轮对话的 RLHF 怎么处理- DPO 的隐式奖励公式推导一遍。- 全量微调 vs LoRA 在后训练各阶段怎么搭配八、下一篇预告后训练讲完对齐怎么做下一篇候选 A17可以深入分布式训练 DeepSpeed / FSDP / Megatron——把训练一个大模型的工程底座讲明白或者 A18 的LoRA/QLoRA/PEFT 省显存全家桶。如果你更想听推理侧A15 的高效推理已经就位。评论区告诉我你想先啃哪个。
延伸阅读

更多相关文章

2026/9/19 23:18:40

APK安装器:在Windows电脑上轻松安装安卓应用的终极指南

APK安装器:在Windows电脑上轻松安装安卓应用的终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想在Windows电脑上直接运行安卓应用&…

2026/9/19 23:18:44

终极窗口分辨率自定义工具:5分钟学会SRWE实时窗口编辑技巧

终极窗口分辨率自定义工具:5分钟学会SRWE实时窗口编辑技巧 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否曾为游戏分辨率限制而烦恼?是否需要在不同设备上测试显示效果却要反复重…

2026/9/21 5:55:53

graphql-cost-analysis配置详解:从入门到精通的参数设置指南

graphql-cost-analysis配置详解:从入门到精通的参数设置指南 【免费下载链接】graphql-cost-analysis A Graphql query cost analyzer. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-cost-analysis graphql-cost-analysis是一款强大的GraphQL查询成…

2026/9/24 4:15:33

电赛E题硬件设计核心:多传感器接入与信号完整性实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:15:33

WorkBuddy 全栈开发实战:AI Agent 如何实现从零到上线

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:15:32

降压变电所电气设计课程实践:从负荷计算到设备校验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:15:32

给判断模型装上身体:Jev 接入硬件的两条路,与 VLA 画过的地图

一个纯文本、无视觉的商业 API,正在被人接进控制回路。它凭什么接上、接在哪一层、错了会怎样——这三个问题恰好落在计算、信息、误差三种结构上。而机器人界已经提前三年把答案的草稿写好了,写在 VLA(Vision-Language-Action)的…

2026/9/24 4:15:32

Monero epee 可移植存储(Portable Storage)二进制格式完全解析

区块链金融科技 【免费下载链接】monero Monero: the secure, private, untraceable cryptocurrency 项目地址: https://gitcode.com/gh_mirrors/mo/monero 点击查看 免费下载 导读 本文基于 Monero 仓库中的 docs/PORTABLE_STORAGE.md 系统讲解 epee 库的可移植存…

2026/9/24 4:10:32

FreeMaster Recorder嵌入式实时数据捕获原理与实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/24 0:00:21

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:21

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:21

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码