ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

大模型后训练全解析:从SFT到RL的数据配比与实战避坑指南

大模型后训练全解析:从SFT到RL的数据配比与实战避坑指南 1. 从预训练到后训练一条分界线的由来1.1 预训练到底解决了什么问题又留下了什么坑如果把大模型比作一个刚招进公司的高学历应届生那**Pre-Training预训练**就是他从小学到大学整整十六年的通识教育。这个阶段做的事情本质上是让模型在海量无标注文本上学会一件事给定前文预测下一个词。听起来简单到有点无聊但就是这么一个目标函数逼着模型把语法、常识、逻辑、世界知识全部压缩进参数里。我经常跟团队里新来的同学打一个比方预训练出来的基座模型就像一个读完了整个图书馆但从来没跟人说过话的人。你问他问题他不会好好回答你他只会顺着你的话往下编。你输入中国的首都是他接北京这没问题但你输入帮我写一封辞职信他可能给你接出一篇关于辞职信格式的百科条目而不是真的帮你写一封。这就是基座模型最典型的状态——它具备能力但不具备意图对齐。预训练阶段有几个绕不开的特征理解了这些才能理解后训练为什么必须存在数据规模极大动辄几万亿token靠的是互联网爬取、书籍、代码等混合语料。最近热搜里那个regmix: data mixture as regression for language model pre-training讲的就是怎么用回归的方法去调配预训练数据的混合比例。这件事之所以重要是因为数据配比直接决定了模型的能力偏向——代码数据多了模型会写代码中文数据少了中文就拉胯。算力消耗极高一次完整的预训练少则几十张卡跑几周多则上万张卡跑几个月。这不是普通团队能玩的游戏。目标单一只有预测下一个词这一个目标没有人类偏好、没有指令遵循、没有安全对齐。所以预训练留下的坑非常明确模型有能力但不听话、不安全、不好用。你没法直接把它塞进产品里给用户用因为它可能一本正经地胡说八道可能输出有害内容可能完全无视你的指令格式。填补这个坑的就是后训练。1.2 Post-Training的边界它到底包含哪些环节很多人把Post-Training和Fine-Tuning划等号这是个常见的误解。严格来说Post-Training是一个阶段Fine-Tuning是这个阶段里的一种手段。后训练的范畴要宽得多它至少包含以下几类工作环节核心目标典型方法数据形态SFT监督微调让模型学会遵循指令指令-回答对高质量标注对话RL强化学习让模型对齐人类偏好RLHF、DPO、GRPO偏好对比数据安全对齐拒绝有害请求红队数据拒答训练安全/不安全样本能力增强补足特定能力领域微调、继续预训练领域语料格式对齐输出结构化内容模板化SFTJSON/XML样本这张表里SFT和RL是绝对的核心也是热搜词里反复出现的两个。SFT解决的是能不能听懂话RL解决的是做得好不好、符不符合人类喜好。两者是递进关系不是替代关系。我见过不少团队一上来就想跳过SFT直接做RL结果训练极其不稳定因为基座模型连基本的指令格式都输出不对奖励模型根本没法给出有意义的信号。这个顺序不能乱。1.3 为什么这个阶段突然变得这么重要过去两年行业里有一个明显的趋势预训练的红利在边际递减后训练的价值在快速放大。原因有几个第一预训练的成本已经高到只有少数玩家能承受而效果提升却越来越不明显。你多花一倍算力做预训练可能只换来几个点的benchmark提升。但同样的算力投到后训练上模型在真实对话场景里的可用性可能翻倍。第二用户对模型的要求从能回答问题变成了好用、听话、安全。这些全是后训练要解决的问题。一个基座模型再强如果不会遵循指令在产品里就是废的。第三后训练的技术门槛相对可控。你不需要上万张卡几十张卡配合好的数据和方法就能把一个开源基座调教得相当能打。这让大量中小团队有了入场机会。所以现在行业里流传一句话预训练决定模型的上限后训练决定模型的下限。而上限往往用不到下限却天天被用户感知。2. SFT后训练的第一道工序也是最容易被低估的一道2.1 SFT的本质用少量高质量数据撬动模型行为SFTSupervised Fine-Tuning的原理说起来特别朴素拿一批指令-回答的配对数据继续用预训练那套预测下一个词的目标去训练模型只不过这次只计算回答部分的loss指令部分不参与。就这么简单的一个操作能让基座模型从续写机器变成对话助手。但简单不代表容易。SFT最核心的难点不在算法而在数据。我个人的经验是SFT的效果七分靠数据两分靠超参一分靠模型规模。你拿一万条精心构造的数据效果往往好过十万条随便爬来的数据。为什么因为SFT本质上是在教模型一种行为模式而不是在教它知识。知识预训练阶段已经学过了SFT要做的是告诉模型当用户这样问你的时候你应该这样回答。这是一种条件反射的训练样本的质量和一致性比数量重要得多。我踩过的一个典型坑早期做SFT的时候为了凑数据量把不同来源、不同风格的对话混在一起训练。结果模型学出来一个精神分裂的输出风格——有时候很正式有时候很口语有时候还带表情符号。后来把数据风格统一之后效果立刻稳定了。SFT数据最忌讳的就是风格不一致。2.2 SFT数据构造的实操要点构造SFT数据我总结下来有几个关键维度需要把控第一指令的多样性。如果你的数据全是请帮我写一段代码模型就只会写代码。你需要覆盖问答、创作、总结、翻译、推理、角色扮演等各种任务类型。多样性不够模型泛化能力就差。第二回答的质量。这里有个反直觉的点回答不是越长越好。很多团队喜欢用GPT-4生成那种又长又全的回答结果模型学会了啰嗦。实际上好的SFT回答应该是信息密度高、直接切题、该长则长该短则短。我一般会要求标注数据里简单问题用一两句话回答复杂问题才展开。第三格式的规范性。如果你的产品需要模型输出JSON那SFT数据里就必须有大量JSON格式的样本。模型对格式的学习非常依赖示范。你不在数据里教它它就不会。第四难度的梯度。全是简单问题模型学不到复杂推理全是难题模型又容易过拟合。合理的做法是简单、中等、困难按一定比例混合比如3:5:2。下面是一个SFT数据样本的结构示例我用JSON格式展示方便理解{ instruction: 把下面这句话翻译成英文今天天气很好。, input: , output: The weather is nice today., system: 你是一个专业的翻译助手只输出翻译结果不要解释。 }注意这里的system字段它定义了模型的角色和行为边界。system prompt的设计是SFT里非常容易被忽视的一环。好的system prompt能让模型在不同场景下切换行为模式而不需要为每个场景单独训一个模型。2.3 SFT的训练配置与常见陷阱训练配置这块我直接给一套经过验证的起点参数你可以在此基础上调参数推荐值说明学习率1e-5 ~ 2e-5比预训练小一到两个数量级批次大小根据显存尽量大配合梯度累积训练轮数2 ~ 3 epoch超过3轮极易过拟合学习率调度cosine warmupwarmup比例5%左右权重衰减0.1常规设置截断长度2048 ~ 4096根据数据长度分布定这里重点说几个坑坑一epoch太多。SFT数据量通常不大跑太多轮模型会把训练数据背下来表现为在训练集上完美在测试集上崩坏。我一般跑2到3轮就停看验证集loss开始上升就立刻停。坑二学习率太大。有人觉得SFT数据少想用大学习率快速收敛。结果模型把预训练学的东西全忘了这叫灾难性遗忘。SFT的学习率一定要小宁可慢一点。坑三只训回答不训指令。有些实现会把指令部分的loss也mask掉这本身没错但如果你的数据里指令格式差异很大模型可能学不会正确解析指令。我的做法是保留指令部分的loss但给一个较小的权重。坑四忽略padding的影响。批次内不同样本长度差异大时padding会引入大量无效计算还可能影响loss计算。用packing技术把多条短样本拼成一条长样本能显著提升训练效率。提示SFT阶段不要追求benchmark分数要追求真实场景的可用性。我见过太多团队SFT之后benchmark涨了但实际对话体验反而变差原因就是数据分布和真实场景不匹配。3. RL从能听懂到做得好的关键一跃3.1 为什么SFT之后还需要RLSFT教会了模型遵循指令但SFT有个根本性的局限它只能模仿不能超越。SFT数据里的回答是什么水平模型学出来就是什么水平顶多接近很难超过。而且SFT是逐token的监督它不关心整个回答的整体质量。RL强化学习解决的就是这个问题。它的思路是不给模型标准答案而是给模型一个奖励信号让模型自己去探索什么样的回答能拿到高分。这样模型就有可能生成出比训练数据更好的回答。打个比方SFT像是老师手把手教学生做题每道题都给标准答案RL像是老师只告诉学生这道题你得了80分让学生自己琢磨怎么改进。后者显然更有潜力突破老师的水平上限。热搜词里的RL和sft并列出现恰恰说明现在行业的主流做法就是SFT打底 RL拔高这个组合拳。3.2 RLHF、DPO、GRPO三代方法的演进逻辑RL这条路行业里已经迭代了好几代方法理解它们的演进逻辑比记住名字重要得多。第一代RLHF基于人类反馈的强化学习。经典流程是三步先训一个奖励模型Reward Model让它学会给回答打分然后用这个奖励模型作为信号用PPO算法去优化策略模型。这套方法效果好但极其复杂——要同时维护策略模型、奖励模型、参考模型、价值模型四个模型显存和工程复杂度都很高。第二代DPO直接偏好优化。DPO的洞察很巧妙既然RLHF的目标是让模型偏向人类喜欢的回答那能不能跳过奖励模型直接用偏好数据来优化答案是能。DPO用一对好回答/坏回答的数据直接构造一个损失函数来优化模型。它把RL问题转化成了类似SFT的监督问题工程上简单太多效果也不差。DPO一出大量团队从RLHF转向了DPO。第三代GRPO组相对策略优化。GRPO是近两年比较火的方法它的改进点在于去掉了价值模型。传统PPO需要一个价值模型来估计基线GRPO改成对同一个问题采样一组回答用这组回答的平均奖励作为基线。这样又省了一个模型训练更稳定。对于数学、代码这类有明确对错的任务GRPO效果尤其好。这三代方法的演进主线非常清晰不断做减法降低工程复杂度同时保持甚至提升效果。这个趋势对中小团队是极大的利好。3.3 RL实操奖励信号从哪来RL最核心的问题永远是奖励从哪来。奖励信号的质量直接决定RL的成败。目前主流的奖励来源有三类第一类人类偏好数据训出的奖励模型。这是RLHF的标准做法。你需要收集大量回答A比回答B好的对比数据训一个奖励模型。难点在于数据标注成本高且标注者之间的一致性难以保证。第二类规则化的奖励。对于数学题、代码题答案对错是明确的可以直接用规则判断。比如数学题比对最终答案代码题跑单元测试。这类奖励信号最干净但只适用于有明确对错的任务。第三类模型评判LLM-as-a-Judge。用一个强模型去给弱模型的回答打分。成本低、速度快但存在偏见问题——比如评判模型可能偏好更长的回答。我个人的经验是混合使用多种奖励信号效果最好。比如做代码模型的RL可以用单元测试通过率作为主奖励再用一个奖励模型评估代码可读性作为辅助奖励。多信号融合能避免模型钻单一奖励的空子。这里有个经典的坑叫奖励黑客Reward Hacking模型会找到奖励函数的漏洞用奇怪的方式拿高分但实际质量很差。比如奖励模型偏好长回答模型就学会把所有回答都写得很长很啰嗦。解决办法是定期用人工评估校准奖励模型发现异常立刻调整。3.4 RL训练不稳定的排查思路RL训练比SFT难搞得多不稳定是常态。我整理了一个排查表遇到问题可以按这个顺序查现象可能原因排查方向奖励不涨奖励信号太弱或矛盾检查奖励模型质量奖励暴涨但质量下降奖励黑客人工评估样本输出重复退化KL惩罚太弱增大KL系数训练崩溃学习率太大降低学习率输出长度异常长度偏见奖励中加长度惩罚其中KL惩罚是RL里特别重要的一个概念。它约束模型不要偏离SFT后的模型太远。没有KL约束模型会为了拿高分而输出乱七八糟的东西。KL系数太小模型跑偏太大模型学不动。这个值需要反复调。提示RL训练一定要保存checkpoint并且每个checkpoint都做人工评估。不要只看奖励曲线奖励曲线好看不代表模型真的好用。4. 数据配比被热搜词点名的隐藏关键4.1 regmix带来的启示数据混合是门科学热搜里那个regmix: data mixture as regression for language model pre-training虽然讲的是预训练阶段的数据配比但它背后的思想对整个后训练同样适用数据混合比例是可以被建模和优化的而不是靠拍脑袋。传统做法是人工试配比比如代码数据占30%中文数据占40%英文数据占30%然后训一版看效果不行再调。这种试错法成本极高因为每次训练都要烧算力。regmix的思路是把不同配比和对应的模型效果建立回归关系用小规模实验去预测大规模训练的最优配比。这个思路迁移到后训练上就是用少量实验去找到SFT数据、RL数据、安全数据的最优混合比例。比如你可以先在小模型上跑几组不同配比观察哪组在验证集上表现最好再把这个配比用到正式训练上。4.2 后训练各阶段的数据配比经验基于我自己的实践分享几组后训练阶段的数据配比经验值供参考SFT阶段的数据配比通用对话40%领域任务如代码、数学30%安全拒答10%格式对齐10%角色扮演/创意10%RL阶段的偏好数据配比有用性偏好50%无害性偏好30%诚实性偏好20%这些比例不是金科玉律但可以作为起点。核心原则是安全数据不能太少否则模型容易被越狱但也不能太多否则模型会变得过度保守什么都不敢答。这个平衡点需要根据产品定位来调。4.3 数据质量比配比更底层配比是宏观问题质量是微观问题。再好的配比如果单条数据质量差整体效果也上不去。我判断一条SFT数据是否合格会看几个点指令是否清晰无歧义模糊的指令会让模型学到模糊的行为。回答是否准确错误的知识会被模型学进去后患无穷。格式是否规范标点、换行、大小写都要统一。是否有害任何有害内容都必须剔除哪怕只有一条。我一般会做三轮数据清洗第一轮用规则过滤明显问题长度、乱码、重复第二轮用模型打分筛掉低质量样本第三轮人工抽检。三轮下来数据量可能只剩原来的60%但效果往往比不洗好得多。5. 后训练的未来几个正在发生的趋势5.1 从重RL到重数据的重心转移早期大家拼的是RL算法谁能把PPO调稳谁就厉害。但现在算法越来越标准化DPO、GRPO这些方法开源实现满地都是算法本身不再是壁垒。壁垒重新回到了数据上。未来的竞争是谁能持续产出高质量、多样化、覆盖长尾场景的偏好数据。这需要一套完整的数据飞轮产品上线收集真实用户反馈反馈转化成偏好数据数据反哺模型训练模型更新后再上线。这个飞轮转得越快模型迭代越快。5.2 合成数据的双刃剑合成数据是绕不开的话题。用强模型生成SFT数据、用强模型做奖励评判已经是行业标配。但合成数据有个隐患模型崩溃。如果一代代模型都用上一代模型生成的数据训练多样性会逐渐丧失最终模型会退化。我的建议是合成数据可以用但一定要混入真实数据并且要有多样性控制机制。比如用不同的强模型生成数据用不同的prompt模板避免数据同质化。5.3 后训练与推理的融合现在有个新趋势是把后训练和推理时计算结合起来。比如训练模型学会思考——在给出最终答案前先输出一段推理过程。这本质上是用后训练去塑造模型的推理行为然后在推理时让模型多花算力去思考。这类方法对数据的要求又不一样了你需要的不只是问题-答案对还需要问题-推理过程-答案三元组。推理过程的质量直接决定模型思考能力的天花板。5.4 小模型的后训练红利最后说一个对中小团队特别友好的趋势小模型的后训练红利。一个7B的基座模型经过精心后训练在很多垂直场景下能打平甚至超过未经过后训练的大模型。这意味着你不需要巨量算力做预训练只需要把后训练做扎实就能做出可用的产品。我自己实测过一个7B模型在特定领域做完整SFTDPO之后在该领域的表现能超过通用大模型。这就是后训练的价值——它让能力可以被精准地注入到需要的地方。6. 一些踩坑之后的真心话做后训练这两年踩的坑比走的路还多。最后分享几条我觉得最值钱的经验都是真金白银换来的。第一条不要迷信benchmark。我见过太多模型在MMLU、GSM8K上分数很高但实际对话一塌糊涂。benchmark只能反映模型在特定任务上的能力反映不了真实体验。一定要建自己的评估集用真实场景的问题去测。第二条SFT和RL的顺序不能乱但可以迭代。不是做完SFT就再也不碰了。实践中经常是SFT→RL→发现某些能力退化→补SFT数据→再RL。这是一个循环不是一条直线。第三条数据标注的投入永远不亏。与其花时间调算法不如花时间把数据标注规范做好、把标注员培训好。数据质量提升带来的收益远超算法微调。第四条小步快跑频繁评估。不要一次训很久再看结果。每训几百步就评估一次发现问题立刻停。RL训练尤其如此跑偏了要及时拉回来。第五条保留所有中间产物。数据版本、模型checkpoint、训练配置、评估结果全部要存档。后训练是个反复试错的过程你永远不知道哪个版本会在什么时候派上用场。这个领域变化太快今天的最佳实践可能明天就过时了。但有些东西是不变的对数据的敬畏、对评估的重视、对真实场景的尊重。把这些守住方法怎么变都不慌。
返回列表