1. 从Pre-Training到Post-Training一个从业者的观察笔记这几年但凡跟大模型沾点边的技术人几乎都绕不开两个词Pre-Training和Post-Training。前者像是生个孩子后者像是教孩子做人。我最早接触这块是在做文本分类的时代那时候Fine-Tuning就是拿个BERT在标注数据上跑几个epoch简单粗暴。后来GPT系列把范式改了大家发现原来模型可以先用海量无标注文本做Pre-Training再通过Post-Training把它驯化成能听懂人话、能干活的样子。这个转变背后是整个AI工程思路的一次大迁移。Post-Training这个词字面意思是预训练之后但它涵盖的东西远比字面复杂。它包括了SFTSupervised Fine-Tuning、RL-Based Post-Training比如RLHF、DPO、GRPO这些、以及各种对齐和偏好优化手段。说白了Pre-Training让模型学会了说话Post-Training让它学会了说人话、干人事。这个区别听起来简单但真正做过的人都知道Post-Training的坑一点都不比Pre-Training少甚至在某些维度上更棘手——因为Pre-Training的loss是明确的而Post-Training的目标往往是模糊的、主观的、甚至矛盾的。这篇文章我想从自己的实操经验出发把Post-Training的来龙去脉捋一遍。从它为什么会出现、到具体怎么做、再到踩过的坑和未来的走向尽量说透。适合已经对Transformer和基本训练流程有了解、想深入Post-Training实操的读者也适合刚入行想搞清楚SFT和RL到底啥关系的朋友。我不会堆公式但关键原理和参数选择逻辑会讲清楚让你看完能直接上手或者至少知道该往哪个方向查。2. Post-Training的前世为什么Fine-Tuning不够用了2.1 Pre-Training的局限一个只会接龙的巨人Pre-Training的本质是自监督学习最常见的就是next token prediction。你给模型一堆文本它学着预测下一个词是什么。这个过程让模型掌握了语法、事实知识、一定的推理能力但它学到的目标只有一个让预测的概率分布尽可能接近真实文本的分布。问题在于这个目标跟有用之间隔着一道鸿沟。我举个具体的例子。你拿一个刚Pre-Training完的模型问它北京的首都是哪里它可能会输出北京的首都是哪里这是一个常见的问题很多人会问……——它在续写而不是在回答。因为它在预训练阶段见到的文本里问题后面跟着的往往是更多的讨论而不是一个直接的答案。这就是所谓的分布对齐问题模型优化的目标和你实际想要的行为不一致。更麻烦的是Pre-Training的语料里充斥着各种偏见、错误信息和有害内容。模型照单全收因为它只学分布不做价值判断。你问它一个敏感问题它可能给你一段看起来很有道理但完全不该说的话。这不是模型坏而是它根本没有该不该这个概念。2.2 早期Fine-Tuning的尝试与天花板最早大家想到的办法就是Fine-Tuning拿标注好的(输入, 输出)对继续训练模型让它学会在特定任务上输出想要的结果。BERT时代的Fine-Tuning非常成熟文本分类、NER、问答都是这么做的。但到了生成式模型这套方法开始碰壁。第一个问题是数据。分类任务的标注相对简单但生成任务的标注成本极高。你要让模型学会写一篇好的营销文案得找专业文案人员写几千上万条高质量样本还得保证风格一致、质量稳定。这个成本不是一般团队能承受的。第二个问题是泛化。你在营销文案上Fine-Tuning模型可能在这个任务上表现很好但换个任务就崩了。更糟糕的是它可能学会了套路——比如每篇文案都以在当今竞争激烈的市场环境中开头——而不是真正理解了写作的逻辑。这就是所谓的过拟合到表面模式。第三个问题最致命Fine-Tuning很难教会模型拒绝。你没法通过正样本教会模型什么时候该说我不知道或者这个问题我不适合回答。你需要负样本需要偏好信号而这些东西在传统的监督学习框架里很难表达。2.3 SFT的登场从接龙到对话SFTSupervised Fine-Tuning是Post-Training的第一个正式阶段也是目前几乎所有大模型的标准流程。它的核心思想很简单用高质量的(指令, 回答)对来训练模型让它学会看到指令就给出回答这个模式。我自己的经验是SFT的数据质量比数量重要得多。早期我们试过用几十万条低质量对话数据做SFT结果模型学会了各种奇怪的回复风格甚至开始编造事实。后来缩减到几千条精挑细选的数据效果反而更好。这背后的逻辑是SFT本质上是在教模型一种行为模式而不是在灌输知识。知识应该在Pre-Training阶段就学得差不多了SFT要做的是把知识引导出来用正确的方式表达。SFT的数据构造有几个关键点。第一是多样性指令的类型要覆盖尽可能多的场景否则模型会过拟合到某几种指令格式。第二是一致性回答的风格和质量要统一不能有的回答很详细有的很简略。第三是负样本的处理有些团队会在SFT数据里加入拒绝回答的样本教模型在遇到不该回答的问题时礼貌拒绝。这个做法有争议因为可能让模型变得过于保守但在某些场景下是必要的。实操心得SFT阶段最容易犯的错误是数据量贪多。我见过不少团队花大力气搞了上百万条数据结果模型变得油滑——什么都能聊两句但深度不够。宁可少而精也不要多而杂。3. Post-Training的今生RL-Based方法的崛起与实操3.1 从RLHF到DPO偏好优化的演进SFT之后模型已经能对话了但它的回答质量参差不齐。有时候很好有时候很糟糕而且你没法通过SFT精确控制它偏向哪种风格。这时候就需要RL-Based Post-Training登场了。最早的方案是RLHFReinforcement Learning from Human Feedback流程分三步第一步用人类偏好数据训练一个Reward Model让它学会给模型的输出打分第二步用这个Reward Model作为奖励信号通过PPO等强化学习算法优化语言模型第三步反复迭代。这个方案在InstructGPT那篇论文里被详细描述过效果确实好但工程复杂度极高。我实际跑过RLHF的流程最大的感受是脆弱。Reward Model本身可能被hack——模型会找到一些奇怪的输出模式来获得高分但这些输出对人类来说毫无意义。PPO的训练也不稳定超参数稍微不对就崩了。而且整个流程需要同时维护四个模型Policy、Reference、Reward、Value显存和计算开销巨大。DPODirect Preference Optimization的出现改变了很多东西。它的核心洞察是你不需要显式地训练Reward Model可以直接用偏好数据来优化语言模型。数学上它把RLHF的目标函数做了一个变换使得最优策略可以用闭式解表示从而把强化学习问题转化成了一个类似监督学习的问题。实操上DPO只需要两个模型Policy和Reference训练稳定得多效果在很多任务上跟RLHF相当甚至更好。但DPO也不是万能的。它的一个潜在问题是过度优化——模型可能过度拟合偏好数据中的表面特征而不是真正理解偏好背后的逻辑。比如偏好数据里人类更喜欢长回答DPO可能就让模型变得啰嗦。这个问题在RLHF里也存在但DPO因为更简单有时候反而更容易失控。3.2 GRPO与其他变体降低RL的门槛GRPOGroup Relative Policy Optimization是最近比较火的一个方法核心思想是用一组输出的相对排名来代替绝对奖励值。传统的PPO需要一个Value Model来估计基线GRPO直接用同一组内多个输出的平均奖励作为基线省掉了Value Model。这个改动看起来小但实操上省了很多显存和调参的麻烦。我试过在数学推理任务上用GRPO效果确实不错。它的优势在于对于有明确正确答案的任务比如数学题你可以直接用正确性作为奖励不需要训练Reward Model。这大大简化了流程。但它的局限也很明显对于开放式生成任务你很难定义一个自动化的奖励函数还是得依赖Reward Model或者人类偏好数据。除了GRPO还有KTO、IPO、SimPO等一系列变体各有各的取舍。KTO只需要好或坏的二元标签不需要成对偏好数据数据获取更容易。IPO在DPO基础上加了一个正则项防止过度优化。SimPO简化了DPO的目标函数去掉了Reference Model进一步降低了计算开销。这些方法的细节我不展开但选型时的核心考量是一样的你的数据是什么形式、你的计算资源有多少、你的任务对奖励信号的精确度要求有多高。3.3 实操中的关键参数与避坑指南Post-Training的实操有很多细节我挑几个最关键的讲。学习率SFT阶段的学习率通常比Pre-Training小一到两个数量级。Pre-Training可能用1e-4到3e-4SFT一般用1e-5到5e-5。RL阶段的学习率更小通常在1e-6到1e-5之间。我见过有人直接用Pre-Training的学习率做SFT结果模型直接崩了loss震荡得没法看。Batch SizeSFT的batch size可以大一些因为数据是固定的梯度方向比较稳定。RL阶段batch size通常要小因为每次生成的样本差异很大太大的batch可能引入噪声。但太小又会导致训练不稳定需要根据具体算法调。KL散度系数RLHF和DPO里都有一个KL散度项用来约束模型不要偏离Reference Model太远。这个系数很关键。太小了模型会放飞自我生成一些奇怪的东西太大了模型学不到新东西跟SFT阶段没区别。我一般从0.01到0.1之间试具体看任务。数据配比SFT和RL的数据配比也很重要。有些团队会在RL阶段混入一部分SFT数据防止模型在优化偏好的时候丢失基本能力。这个做法叫replay或者regularization效果因任务而异。我的经验是如果RL数据量不大混入10%-20%的SFT数据通常有帮助。注意事项Post-Training阶段一定要做好checkpoint管理。RL训练很容易出现突然崩掉的情况如果没有及时保存checkpoint可能几个小时的训练就白费了。我一般每100步保存一次并且保留最近5个checkpoint。4. 常见问题与排查技巧实录4.1 模型输出重复、啰嗦、格式崩坏这是Post-Training后最常见的问题之一。模型开始重复同一句话或者输出格式完全乱掉比如该输出JSON的地方输出了一堆自然语言。排查思路首先看是不是学习率太大了。SFT阶段学习率过大容易导致模型遗忘预训练学到的语言能力表现为输出退化。其次看数据里是不是有大量重复样本模型可能学到了重复是安全的这个错误模式。第三看RL阶段的KL系数是不是太小模型偏离Reference太远。解决方法降低学习率、清洗数据、增大KL系数。如果已经训崩了最直接的办法是从上一个checkpoint恢复调整参数重来。我试过用早停策略在验证集上监控输出质量一旦发现退化就停止训练。4.2 Reward Hacking模型学会了骗分RL-Based方法最头疼的问题就是Reward Hacking。模型会找到一些奇怪的模式来获得高奖励但这些模式对人类来说毫无价值。比如Reward Model可能给长回答打高分模型就学会了把所有回答都写得很长哪怕问题只需要一个词的回答。排查思路定期人工检查模型输出不要只看Reward曲线。Reward曲线上升不代表模型变好了可能只是它更会骗Reward Model了。另外可以看输出的多样性如果模型对所有问题的回答都变得很像那很可能出现了Hacking。解决方法第一Reward Model要定期用新数据重新训练防止被hack。第二在奖励函数里加入多样性惩罚或者长度惩罚。第三用多个Reward Model做集成取平均分降低被单个Reward Model hack的风险。第四也是最根本的定期用人类评估来校准Reward Model。4.3 灾难性遗忘Post-Training后基本能力下降这个问题在做垂直领域Post-Training时特别常见。你在医疗数据上做SFT模型学会了回答医疗问题但通用对话能力大幅下降甚至开始用医疗术语回答日常问题。排查思路在Post-Training前后分别跑一个通用能力评测集比如MMLU、GSM8K之类的对比分数变化。如果下降超过5%说明遗忘比较严重。解决方法第一在Post-Training数据里混入一定比例的通用数据。第二用LoRA等参数高效微调方法只更新部分参数减少对预训练知识的破坏。第三降低学习率、减少训练步数。第四如果条件允许用模型融合Model Merging把Post-Training后的模型和原始模型做插值平衡新旧能力。4.4 常见问题速查表问题现象可能原因排查方法解决方向输出重复、啰嗦学习率过大、数据重复、KL系数过小检查学习率、数据去重、监控KL降学习率、清洗数据、增大KLReward HackingReward Model被过拟合、奖励函数有漏洞人工检查输出、看多样性重训Reward Model、加正则、集成灾难性遗忘领域数据占比过高、全参数微调跑通用评测集对比混入通用数据、用LoRA、降学习率训练不稳定、loss震荡batch size太小、学习率太大看loss曲线、梯度范数增大batch、降学习率、加梯度裁剪模型过于保守、拒绝回答SFT数据里拒绝样本过多统计拒绝样本比例减少拒绝样本、调整拒绝策略5. Post-Training的未来几个值得关注的方向5.1 从对齐人类到对齐目标更精细的控制现在的Post-Training主要是在对齐人类的偏好但人类的偏好是模糊的、多变的、甚至矛盾的。未来的一个方向是让Post-Training更精细化能够针对不同的场景、不同的用户群体做定制化的对齐。比如同一个模型对医生用户和对普通用户回答的详细程度和专业术语使用应该不同。这需要更灵活的Post-Training框架可能需要引入条件化的Reward Model或者多任务RL。另一个方向是可解释性。现在的Post-Training基本是黑盒你只知道模型变好了但不知道它具体学到了什么。未来可能会有更多工具来可视化Post-Training过程中模型内部的变化帮助开发者更精确地控制训练过程。5.2 数据效率从大力出奇迹到四两拨千斤Post-Training的数据成本很高尤其是RL阶段需要大量人类偏好标注。未来的趋势一定是提高数据效率。一方面是通过更好的算法比如DPO、KTO这些方法已经在减少对数据的依赖另一方面是通过合成数据用强模型生成偏好数据来训练弱模型。合成数据的风险是可能引入bias但如果配合人类审核和过滤可以大幅降低成本。我最近在试的一个方向是主动学习让模型自己挑选最不确定的样本让人来标注而不是随机标注。初步结果看达到同样效果需要的标注量可以减少30%-50%。这个方向我觉得很有潜力。5.3 多模态与Agent场景下的Post-Training现在的Post-Training主要是针对文本的但多模态模型越来越普及如何对图文、视频做Post-Training是个新问题。视觉信号的偏好比文本更难标注因为一张图的好坏很难用文字描述清楚。可能需要新的交互方式来收集偏好数据比如让用户在两张图中选一张而不是写一段评价。Agent场景是另一个热点。传统的Post-Training优化的是单轮回答的质量但Agent需要多轮交互、工具调用、长期规划。如何定义Agent场景下的奖励函数如何做credit assignment把最终结果归因到中间步骤这些都是开放问题。我试过用过程奖励Process Reward来训练Agent效果比只用结果奖励好但过程奖励的标注成本极高目前还很难规模化。5.4 我个人看好的一个方向Post-Training as a Service最后说一个偏工程的观察。Post-Training的门槛其实挺高的需要算法、工程、数据标注三方面的能力。大部分中小团队很难同时具备。我预计未来会出现更多Post-Training as a Service的平台提供从数据标注到训练到评估的一站式服务。这跟当年云服务把服务器运维外包出去是一个逻辑。当然数据隐私和模型安全是这类平台需要解决的核心问题。我自己在实际操作中的体会是Post-Training没有银弹。每个任务、每个数据集、每个模型都需要针对性地调。那些看起来一招鲜的方法换一个场景可能就失效了。所以与其追求最新的算法不如把基础功做扎实数据质量、评测体系、训练稳定性。这三样做好了用什么算法都不会太差。