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 的高效推理已经就位。评论区告诉我你想先啃哪个。

相关新闻

最新新闻

【8月最新版】10款实测超好用的AI写小说神器(内含工具优缺点对比图)

【8月最新版】10款实测超好用的AI写小说神器(内含工具优缺点对比图)

作为一个全职码字五年的老作者,我太懂大家深夜盯着空白文档的绝望了。 脑子里明明有宏大世界观,可一敲键盘就卡文,尤其是网文黄金前三章,改了十几版还是被编辑拒签。很多新人经常私信问我新手如何开始写小说,或者求一…

2026/8/6 22:40:47
OpenClaw AI平台安全风险与防御实战解析

OpenClaw AI平台安全风险与防御实战解析

1. OpenClaw安全风险全景分析OpenClaw作为新兴的AI自动化平台,在提升工作效率的同时也面临着多重安全挑战。根据实际部署经验,我将从技术架构层面剖析主要风险点:1.1 黑客攻击的三大渗透路径API接口漏洞:OpenClaw的RESTful API若未…

2026/8/6 22:40:47
拒绝卡文断更!2026最新10款国内主流AI写小说工具深度横评(内含实操经验分享)

拒绝卡文断更!2026最新10款国内主流AI写小说工具深度横评(内含实操经验分享)

作为全职写小说的作者,这几年我每天都在思考如何保持稳定更新。 卡文是工作常态,有时候坐在电脑前一整天也写不出前三章的剧情。现在很多同行都在尝试使用ai写小说,我也测试了不少写小说软件。为了帮大家节省筛选的时间,我花了一…

2026/8/6 22:40:47
操作系统笔记-1.4 操作系统的体系结构(上)

操作系统笔记-1.4 操作系统的体系结构(上)

王道操作系统,视频链接:1.4 操作系统的体系结构(上) 操作系统的体系结构 操作系统的体系结构分为:大内核、微内核、分层结构、模块化、外核 考试常考的点为大内核(也称宏内核)、微内核。其他三…

2026/8/6 22:40:47
3种方法让AI帮你把任何图片变成可编辑的PSD分层文件

3种方法让AI帮你把任何图片变成可编辑的PSD分层文件

3种方法让AI帮你把任何图片变成可编辑的PSD分层文件 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 你是否曾经遇到过这样的情况:在网上看到一…

2026/8/6 22:40:47
NestJS微服务限流方案:throttler模块在RPC通信中的应用

NestJS微服务限流方案:throttler模块在RPC通信中的应用

NestJS微服务限流方案:throttler模块在RPC通信中的应用 【免费下载链接】throttler A rate limiting module for NestJS to work with Fastify, Express, GQL, Websockets, and RPC 🧭 项目地址: https://gitcode.com/gh_mirrors/th/throttler 在…

2026/8/6 22:35:47