全解析:从SFT、RLHF到DPO的实战指南)
1. 从“预训练红利见顶”说起Post-Training到底在解决什么问题如果你这两年一直在跟大模型打交道大概率会有一种很明显的体感Base Model 越来越像“毛坯房”。预训练阶段把海量语料灌进去模型确实学会了语言的统计规律能续写、能补全、能做一些零星的推理但你真拿它去干活会发现它经常“不听话”——要么答非所问要么一本正经地胡说要么根本不理你的指令格式。这就是 Post-Training后训练要解决的核心问题。它不是一个单一技术而是一整套在预训练完成之后、面向“可用性”和“对齐”的加工流程。你可以把它理解成毛坯房交付之后的硬装加软装水电改造SFT、家具布置RLHF/RLAIF、最后再做个全屋保洁和验收评测与安全对齐。我先把结论摆在这Post-Training 的本质是把一个“会说话的概率机器”改造成一个“能按人类意图办事的助手”。它解决的不是知识有没有的问题而是知识怎么用、什么时候用、以什么姿态用的问题。适合读这篇内容的人包括正在做模型微调的算法同学、负责把大模型落地到业务里的工程同学以及想搞清楚“为什么同一个底座不同产品体验差这么多”的产品和运营同学。接下来我会按“前世—今生—未来”这条线把 Post-Training 的来龙去脉、关键技术、实操细节和我自己踩过的坑尽量讲透。2. 前世Post-Training 是怎么从“微调”里长出来的2.1 早期微调时代全参数微调与“一个任务一个模型”在 Post-Training 这个词流行之前大家管这件事叫 Fine-tuning微调。最早的做法非常朴素拿一个预训练好的底座准备一批带标签的任务数据然后全参数微调——把模型里所有参数都更新一遍。那个阶段有几个典型特征。第一任务非常窄做情感分类就只做情感分类做问答就只做问答一个任务一个模型模型之间互不干扰。第二数据量要求高动辄几万到几十万条标注样本标注成本是最大的瓶颈。第三训练成本高全参数微调对显存和算力的要求让很多团队根本玩不起。我印象很深的是早期做文本分类的时候大家还会争论“到底是微调好还是用特征工程传统模型好”。现在回头看那个争论的答案很明确当数据量足够、任务足够单一时微调确实能带来明显提升但它的天花板也很明显——模型只会做你教它的那一件事。2.2 指令微调的转折点从“补全”到“对话”真正的转折点是指令微调Instruction Tuning的出现。研究者发现如果把大量“指令-回答”配对的数据喂给模型模型会逐渐学会“理解指令”这件事本身而不是只记住某个具体任务。这个发现的意义在于它让一个模型可以同时处理多种任务。你不再需要为每个任务单独训练一个模型只要在指令数据里覆盖到模型就能泛化过去。这也是今天所有对话式大模型的基础。指令微调的数据构造有几个关键点我按经验排个序多样性比数量更重要任务类型、指令措辞、回答风格都要覆盖否则模型会过拟合到某一种模板。质量比规模更关键一条高质量、逻辑清晰的回答价值远高于十条敷衍的样本。格式要统一但表达要自然训练时的 prompt 模板要稳定但指令本身的表达要尽量口语化、多样化。提示很多新手一上来就堆数据量结果模型学会了“模板腔”回答千篇一律。指令微调阶段数据的“人味”比“量”重要得多。2.3 RLHF 的登场让模型学会“人类更喜欢什么”指令微调解决了“会不会做”的问题但没解决“做得好不好”的问题。同一个问题模型可以给出十个都算正确的回答但人类明显会更偏好其中某一个——更简洁、更礼貌、更符合常识、更少废话。RLHF基于人类反馈的强化学习就是冲着这个来的。它的流程大致分三步收集偏好数据给模型同一个 prompt 的多个回答让人类标注员排序哪个更好、哪个更差。训练奖励模型Reward Model用这些偏好数据训练一个“打分器”让它学会预测人类会给哪个回答打高分。用强化学习优化策略模型让模型生成回答奖励模型打分再用 PPO 之类的算法更新模型参数让它越来越倾向于生成高分回答。这套流程在 2022 年前后彻底改变了行业格局。它让模型从“能答”变成了“答得让人舒服”。但 RLHF 也有它的问题奖励模型会被“钻空子”模型会学会讨好奖励模型而不是真正变好这就是所谓的 reward hacking。而且人类标注成本极高流程复杂稳定性差训崩是家常便饭。3. 今生当前 Post-Training 的主流技术栈与实操拆解3.1 SFT、RM、RLHF、DPO四条腿走路今天的 Post-Training基本是围绕四条技术路线展开的。我把它们的定位和适用场景整理成一张表方便你对照技术核心作用数据需求训练成本典型问题SFT监督微调教会模型指令跟随指令-回答对中容易过拟合、模板化RM奖励模型学习人类偏好打分偏好排序数据中高偏好偏差、被钻空子RLHFPPO用奖励信号优化策略偏好数据在线采样极高不稳定、调参难DPO直接偏好优化跳过奖励模型直接优化偏好对中对数据质量敏感DPO 这两年被讨论得特别多原因很直接它把 RLHF 里最麻烦的“训练奖励模型强化学习”两步压缩成了一步类似监督学习的优化。你只需要准备好“好回答”和“坏回答”的配对数据就能直接优化模型。实测下来DPO 在多数场景下能达到接近 RLHF 的效果但工程复杂度低了一个数量级。不过 DPO 也不是银弹。它对数据质量极其敏感如果偏好对里“好”和“坏”的差距不明显模型学不到有效信号。而且 DPO 容易出现“概率塌缩”也就是模型对好回答的概率提升但整体输出多样性下降。3.2 数据工程Post-Training 里最脏最累但最值钱的活我做了这么多轮后训练最深的体会是Post-Training 的胜负七成在数据三成在算法。算法框架就那么几套开源实现满地都是但数据构造是真正拉开差距的地方。数据工程要关注几个维度来源多样性人工标注、模型生成、真实业务日志、公开数据集各有优劣。人工标注质量高但贵模型生成便宜但容易有幻觉业务日志真实但噪声大。难度分层简单样本、中等样本、困难样本要合理配比。全是简单样本模型学不到东西全是困难样本模型容易学偏。去重与清洗重复样本会让模型过拟合低质样本会污染模型。我一般会用语义相似度做去重再人工抽检清洗。格式规范prompt 模板、回答长度、特殊 token 的使用都要在数据阶段统一好否则训练时各种报错。注意数据配比没有万能公式。我的经验是先用小规模数据做消融实验找到适合当前底座和任务的配比再放大规模。盲目照搬别人的配比大概率翻车。3.3 训练稳定性那些文档里不会写的坑Post-Training 的训练稳定性是另一个让人头秃的地方。我列几个高频问题Loss 突然飙升常见于学习率过大、batch size 太小、数据里有异常样本。排查顺序是先看数据再看超参。模型输出退化训练几轮之后模型开始重复、胡言乱语通常是过拟合或者 KL 散度约束太松。奖励模型过拟合奖励模型在验证集上表现很好但一上强化学习就崩说明它学到的不是真实偏好而是数据里的捷径。我的应对策略是小步快跑频繁评测。每训练一小段就存 checkpoint用固定评测集测一遍发现异常立刻回滚。不要等训完再看那时候已经晚了。4. 未来Post-Training 会往哪走4.1 从“对齐人类”到“对齐多元目标”现在的 Post-Training 主要对齐的是“人类偏好”但人类偏好本身是多元的、矛盾的。未来一个明显趋势是多目标对齐同一个模型要能根据不同场景、不同用户、不同约束动态调整自己的行为。这意味着 Post-Training 不再是训练一个固定策略而是训练一个“可调节的策略空间”。比如通过条件控制、提示控制、或者轻量级的适配器让模型在不同目标之间切换。这对数据构造和训练方法都提出了新要求。4.2 合成数据与自我进化人工标注的成本天花板很明显所以合成数据会成为主流。用强模型生成数据、用规则和模型双重过滤、再用弱模型学习这套“蒸馏自举”的流程已经在很多团队跑通了。更进一步的是自我进化模型自己生成候选回答自己打分自己筛选自己训练。这个闭环一旦跑通Post-Training 的成本会大幅下降。但风险也很明显——模型会放大自己的偏见陷入“自我确认”的循环。所以外部的、独立的评测和约束反而会变得更重要。4.3 评测与安全Post-Training 的“质检环节”Post-Training 做得再好没有靠谱的评测就是盲人摸象。未来的评测会从“单一指标”走向“多维画像”能力维度、安全维度、风格维度、成本维度都要有对应的评测集和方法。安全对齐尤其关键。模型能力越强越需要确保它在边界内行事。这不是靠一句“请遵守规则”能解决的而是要在数据、训练、推理各个阶段都埋入约束。我个人的判断是安全对齐会从 Post-Training 的一个子模块逐渐变成贯穿全流程的基础设施。5. 常见问题与排查技巧实录5.1 SFT 之后模型变“傻”了怎么办这是最常见的问题。原因通常有三个数据质量差、学习率过大、训练轮数过多。我的排查顺序是先看数据随机抽 50 条人工读一遍看有没有明显错误、重复、格式混乱。再看学习率SFT 的学习率一般要比预训练小一到两个数量级。最后看轮数很多任务 1-3 轮就够了训太多必然过拟合。5.2 DPO 训练后模型输出变短、变单调DPO 的典型副作用。解决办法是在偏好数据里保留一定比例的“长而好”的样本同时在 loss 里加长度惩罚或者多样性正则。另外DPO 的 beta 参数很关键太小约束不够太大模型学不动一般从 0.1 开始调。5.3 奖励模型和人工评测不一致说明奖励模型过拟合了。检查两点一是偏好数据里有没有明显的标注噪声二是奖励模型的容量是不是太大。奖励模型不需要太强它只需要在“好”和“坏”之间做出区分太强反而会记住噪声。5.4 训练成本压不下来优先考虑 LoRA 这类参数高效微调方法。实测下来在很多指令跟随任务上LoRA 能达到全参数微调 90% 以上的效果但显存和训练时间大幅下降。如果效果不够再考虑全参数微调。6. 我个人的一些实操体会Post-Training 这件事越做越觉得它像一门“手艺”而不是“科学”。算法框架是公开的但数据怎么配、超参怎么调、什么时候停全靠经验和手感。我踩过最大的坑是早期迷信“数据越多越好”结果模型训出来一股浓浓的“标注腔”回答又长又空。后来才明白Post-Training 的目标不是让模型知道更多而是让模型更懂人。数据要精、要真、要有温度模型才能学会好好说话。另一个体会是评测要前置。不要等训练完再想怎么评而是在构造数据的时候就想清楚“我怎么知道它变好了”。评测集和训练集要严格隔离否则你看到的提升都是假的。最后分享一个小技巧如果你资源有限优先把 SFT 做扎实。SFT 做得好很多场景下根本不需要上 RLHF 或 DPO。后训练不是越复杂越好而是越贴合业务越好。