☰
从SFT到RL:大模型如何摆脱复读机,学会真正“看脸色”
2026/10/27 11:42:09 网站建设 项目流程

写这篇的时候,我正在深夜盯着一轮训练日志。reward曲线忽高忽低,像心电图一样让人焦虑。旁边屏幕上是SFT阶段产出的模型样例——问它“今天天气怎么样”,它能给你一本正经编一段包含湿度、风速、紫外线指数的完整播报;但你要是问一句“你觉得我今天该穿什么”,它就卡壳了,要么重复训练集里那些模板化的“请注意保暖”,要么干脆给你复述一遍天气预报。这种“知识扎实但不会应变”的状态,就是我们常说的“复读机”现象。

在LLM训练的实际链路里,SFT(Supervised Fine-Tuning,监督微调)和RL(Reinforcement Learning,强化学习)是两套完全不同的“教法”。SFT是在教模型“背答案”,RL则是在教模型“看脸色”——学会判断情境、理解偏好、灵活调整输出策略。我这次想聊的,就是SFT为什么容易把模型训成复读机,以及RL又是通过什么机制把模型从复读机状态拽出来、让它真正学会“见什么人说什么话”的。

这篇内容主要面向刚接触大模型对齐训练的工程师,以及那些已经做完SFT、正准备上RL但心里没底的团队。我会把原理、流程和踩坑经验一起放出来,争取让看完的人能少走点弯路。

1. 复读机是怎么被SFT一手教出来的

要理解RL的意义,先得把SFT的“功劳”算清楚。SFT不是洪水猛兽,它是整个对齐链路里不可或缺的基石。但如果只看SFT的产出,你确实会发现模型“智商在线、情商为零”,这背后的原因不复杂。

1.1 SFT的本质:教模型“背标准答案”

SFT做的事情,形式上极度简单——拿一批“问题-标准回答”配对数据,让模型做监督学习。输入是用户问题或指令,标签是人工写好的高质量回答,损失函数就是标准的交叉熵,模型要做的是最大化每个token的预测概率。用“背书”来类比非常贴切:老师给你一本题库,你把每道题的答案背熟了,考试时碰到原题能拿满分,碰到变式题就抓瞎。

这个阶段模型的优化目标是拟合训练集分布,说白了就是“我见过这句话,我就能接下去”。所以SFT的效果上限,完全取决于你给的数据覆盖面。数据里只有“如何做红烧肉”,模型就不可能自动学会“如何做清蒸鱼”。你可以说它推理能力不足,也可以怪数据量不够,但本质上,SFT根本没有给模型建立“根据反馈调整策略”的机制。

我在实际操作中见过不少团队,SFT数据质量不错、量也到位,模型跑起来问答流畅,大家都很开心。但只要把问题换成训练集里完全没有过的问法,比如把“请介绍一下深度学习”换成“我儿子问我深度学习是什么,怎么用他能懂的话说”,模型立刻露馅,开始套模板。这个现象就是SFT的分布外泛化(OOD)问题,它天生存在,无法通过堆数据完全解决。

1.2 什么时候SFT会把模型训成病态复读机

SFT本身是稳健的,但训练策略不对,复读机症状会急剧恶化。我总结了几种典型成因:

  • 训练轮次(epoch)过多:SFT本质是让模型拟合数据集分布,你反复在同一批数据上跑太多轮,模型会开始“背诵”整段训练文本,而不是理解语义。正常SFT跑1-3个epoch就够了,跑5个以上,你问它问题,它能整段复述出训练集里某个相似问题周围的无关内容。

  • 学习率过大:SFT阶段通常使用1e-5到2e-5的低学习率,因为此时模型已经经过预训练,知识底子很好。如果学习率开大了,新知识会覆盖预训练学到的通用能力,模型变得“只认新数据、不认世界常识”,极端情况下直接灾难性遗忘。

  • 数据多样性不足:很多团队做SFT时只喂指令数据、不喂通用对话数据,导致模型在指令问答风格里“过拟合”,一旦用户以闲聊、反问、间接表达的方式提问,它就接不住。这属于数据配比问题,也是复读机的重要成因。

  • 数据格式死板:如果所有SFT样本都是“指令-标准回答”的格式,模型学到的是一种格式映射,而不是沟通能力。真实用户讲话根本不按格式来,模型喜欢的格式一旦被打破,表现立刻垮掉。

所以,SFT阶段模型的“复读机化”,是数据、超参、训练策略多重因素叠加的结果。理解了这一点,你才能明白RL进来救场的价值——RL不依赖你给它标准答案,它靠的是“奖励信号”驱动模型自己探索该怎么做。

2. RL到底是怎么教模型“看脸色”的

RL和SFT的底层逻辑完全不一样。SFT告诉模型“正确答案长什么样”,RL告诉模型“什么样的行为能获得更高收益”。前者是模仿,后者是试错和策略优化。这也是为什么我们常说RL教模型“看脸色”——它通过奖励反馈,学会了判断“当前情境下,什么样的回应才是用户想要的”。

2.1 学习信号从天壤之别换成“即时反馈”

想象一个场景:你教一个实习生写周报。SFT式教法是你给他十篇优秀周报让他模仿;RL式教法是让他自己写,然后你告诉他“这篇太啰嗦”“这篇没重点”“这篇数据不错但结论太武断”,他根据你的反馈不断调整写法。实习生最终学会的不是某个固定模板,而是“面对不同读者、不同目标,我应该怎么组织内容”的策略。

在大模型场景里,这个“实习生”就是策略模型(Policy Model),你的反馈就是“奖励模型”(Reward Model)给出的奖励分数。模型每次生成一段回答,奖励模型给它打个分,分数高说明用户满意,分数低说明用户不满意,策略模型根据分数调整自己的生成策略。这套机制,就是RLHF(基于人类反馈的强化学习)的雏形。

2.2 关键技术拆解:PPO、GRPO、DPO

整个RL环节里,策略优化的算法选择是核心。我先说最经典的PPO(Proximal Policy Optimization,近端策略优化),它是早期RLHF的标配。PPO的思路是:让模型在采样数据上更新策略,但限制每次更新的幅度,不让模型行为变化过快。它需要一个价值模型(Critic)来估计状态价值,还要维护一个参考模型来算KL散度,防止策略跑飞。理论上很漂亮,工程上却比较重——四个模型(策略模型、参考模型、奖励模型、价值模型)同时跑,显存占用和算力开销都不小。

后来DeepSeek推出的GRPO(Group Relative Policy Optimization,组相对策略优化)把这事简化了。它去掉了价值模型,改用同一个问题采样多个回答、在组内做相对比较来估计优势值。好处很明显:省显存、训练更稳定、做法也更直观。我实测下来,GRPO在小规模算力环境下比PPO友好得多,收敛速度也不差。

还有一个绕不开的是DPO(Direct Preference Optimization,直接偏好优化)。DPO的角度更另类——它干脆不要奖励模型,直接在偏好数据(好回答vs差回答)上做策略优化。它的数学推导告诉我们:在某种约束下,最优策略可以用一个简单的偏好分类损失来求解,不需要显式的RM和强化学习迭代过程。工程上DPO简单到不可思议,一条训练脚本就能跑起来,资源占用也低。

这三者的选择逻辑,我整理成了下面这张表,方便做技术选型时参考:

算法需要奖励模型需要价值模型/参考模型显存开销稳定性适用场景
PPO是是/是高中等追求精确控制、算力充足的团队
GRPO是否/是中较高算力有限、想要稳定收敛的场景
DPO否否/是低高偏好数据丰富、想要快速迭代的团队

2.3 KL散度:既要看脸色,也不能“忘了本”

任何上过RL的工程师都知道,KL散度是这个环节的“安全带”。模型在追求高分的过程中,很容易为了讨好奖励模型而改变自己的语言风格和知识结构,甚至出现胡言乱语却得分虚高的现象。KL散度在这里充当的角色是:限制策略模型的更新幅度,让它偏离初始SFT模型不要太远。

用个粗俗但好懂的比喻:你不能为了让员工学会拍马屁,就让他把专业技能全扔了——KL散度就是那个提醒“专业能力不能丢”的HR制度。具体数值上,KL系数调太大,模型会保守得像没训过RL;调太小,模型会放飞自我,输出变得怪诞离奇。我记得最开始做PPO时,KL系数从0.01一路调到0.001,才找到一个平衡点,模型既开始有策略性调整,又不至于说胡话。

3. 从SFT到RL的完整训练流程与实操要点

理论讲完了,接下来进入大家更关心的部分:具体怎么操作。完整链路大体是“预训练基座 → SFT → 偏好数据采集 → RM训练 → RL优化”。前面SFT我已聊过,这里重点讲后三步,以及它们和SFT的衔接。

3.1 数据准备与配比:偏好数据才是RL的灵魂

RL阶段的核心燃料是“偏好数据”——同一问题下,好回答和差回答的配对或排名。采集方式一般是人工标注,让标注员对比多个模型回答并排序,或者直接打分数。这些都是真金白银的人力成本。

实际做的时候,我给团队定的执行标准是:

  • 问题覆盖面要广:不仅要覆盖指令类问题,还要覆盖闲聊、情感支持、创意写作等多样化场景。不然模型只看得到单一维度的“脸色”。
  • 配对数据比例要合理:DPO这种直接偏好优化的方法,理论上需要“好回答-差回答对”,但实际中一个回答和多个不同质量的回答对比会更好。我习惯构造1条好的配3条差的,让模型学到梯度方向更明确。
  • 要同时保留SFT数据:RL阶段绝对不是把SFT数据扔了只训偏好数据。通常的做法是RL和SFT数据按比例混合,比如SFT占到20%~30%,防止模型在RL阶段把已经学到的能力领域给忘掉。

有一点必须强调:偏好数据的质量比数量重要得多。我见过一个团队灌了十万条低质量偏好数据进去,结果RM给出的分数根本不可靠,最后训练出来模型比SFT版本还差。这个环节宁可少而精,不要多而糙。

3.2 奖励模型设计:你的“脸色评判标准”不能离谱

奖励模型(RM)相当于替人类打分,它的质量直接决定了RL的走向。我个人在工程实践中总结了三个关键经验:

第一,排序任务比打分任务更靠谱。让标注员给两个回答排序,一致性远高于让他们直接打分。0到10分这种连续分数,不同人之间标准飘得厉害,同一人不同时间也可能不一样。而“A比B好”这种相对判断,哪怕标准模糊也能做出合理决策。

第二,奖励模型本身也要防过拟合。RM也是个模型,它在偏好标注上训练,也有自己的“复读机”风险——比如它会过度关注回答长度而不看内容质量。训练RM时必须监控它在独立验证集上的表现,不能只盯着训练准确率。

第三,小心奖励黑客(Reward Hacking)。模型非常擅长钻空子:标注员倾向给长回答高分,模型就会生成越来越长的废话;标注员倾向给包含特定关键词的句子高分,模型就会不顾上下文硬塞关键词。这种时候RL训练表面上loss在下降,实际输出质量已经烂掉了。要防这个,最好的办法是定期人工抽检模型输出,而不是完全依赖RM打分。

3.3 超参与算力配置:一份可直接参考的基准配置

很多朋友问我,到底用什么超参起步合适。我给出一份我实测过、稳定性不错的baseline配置(以7B~13B模型为例):

超参数PPO/GRPO建议值DPO建议值说明
学习率1e-6 ~ 3e-61e-6 ~ 5e-6RL阶段学习率必须远小于SFT
KL系数0.001 ~ 0.010.1 ~ 0.5DPO的beta参数等价于KL约束
Batch Size32 ~ 6432 ~ 64显存不足可减小,但别小于16
采样温度0.7 ~ 1.00.7 ~ 1.0采样温度过低会丧失探索性
训练步数参考loss收敛曲线1 ~ 3个epochDPO不要跑太多轮,容易过拟合

这里多聊两句。学习率我坚持从特别小的值起步,哪怕收敛慢一点也无妨。RL阶段模型很容易受到波动影响,学习率飙了直接破坏SFT学到的内容,这种事故一旦发生,回退重来特别耗时。DPO的beta参数控制“偏离SFT模型的距离”——beta越小,模型可以偏离越远;如果你希望模型调整幅度大一些,就把beta调小,但注意控制力度。

算力方面,7B模型用GRPO大概需要4~8张A100(80G)才能比较舒服地跑起来。13B模型建议8张起步。DPO因为不需要在线采样,资源需求低一个量级,两张A100就能做实验。

3.4 训练过程的监控指标:别只盯loss

RL环节最忌讳只盯loss。我每次跑训练都会开一块独立白板,记录四个核心指标的走势:

  • 奖励均值:模型获得奖励的平均水平,趋势向上说明理想。
  • KL散度:策略模型偏离参考模型的程度。如果KL飙升,说明模型正在剧烈改变行为模式,要小心。
  • 回答多样性:同样问题多次采样,看输出差异大不大。如果多样性快速下降,模型正在“坍缩”成某种固定套路,这时候要小心复读机以另一种形式复发。
  • SFT验证集表现:在RL训练中定期跑SFT阶段的评测集,确保原有能力没被洗掉。

这四个指标缺一不可。我踩过一次坑:某次训练奖励曲线很漂亮,一路向上不回头,结果评测集上能力全面掉点。回头一看KL散度早就飙到天上去了,模型开始胡说八道但恰好踩中了RM的偏好点。后来我把“KL散度超过阈值就暂停训练”写成了自动熔断逻辑,才算解决问题。

4. 一次典型对齐训练的全流程实录

文字聊多了容易飘,我带大家走一遍我今年做的一个客服场景项目的完整记录。这个项目没有特别复杂,但麻雀虽小五脏俱全,能帮你把整个链路串起来。

4.1 训练链路设计

项目目标是训练一个客服大模型,要求它既要懂业务知识,又不能像机器人一样回答问题,要能根据用户情绪调整语气。基座用了开源的7B模型。

  • 第一步:SFT阶段。用大约3万条客服问答数据做微调,其中包含标准流程问答和情绪安抚类特殊问答,配比约7:3。训练1个epoch,学习率1.5e-5。这阶段产出模型A。
  • 第二步:偏好数据采集。基于模型A,对5000个问题做多版本生成,然后让专业客服团队做排序标注,最终形成5000组“好-差回答配对”数据,其中好回答保证是人工修订过的。
  • 第三步:RM训练。用偏好数据训练一个排序式奖励模型。RM的参数量用的1.5B,比策略模型小,避免RM能力过强反而对策略模型过度约束。
  • 第四步:GRPO优化。用训练好的RM做组相对优化,每个问题采样4个回答算组内优势。KL系数设为0.005,学习率2e-6,训练了1200步。

4.2 训练日志洞察:我看到了什么

这里放一段当时GRPO训练早期日志的关键信息(简化版):

step 100 | reward=0.612 | kl=2.35 | resp_len=126 step 300 | reward=1.154 | kl=5.02 | resp_len=184 step 600 | reward=2.731 | kl=8.76 | resp_len=267 step 900 | reward=3.485 | kl=12.18 | resp_len=330 step 1200 | reward=3.912 | kl=15.34 | resp_len=402

看到这个日志,我第一反应是“出问题了”。奖励一路上涨,看起来很好,但KL散度从2.35涨到15.34,回答长度从126个字涨到402个字——模型正在通过“多写废话”来骗取高分。这让我立刻意识到RM可能对回答长度有偏好,需要处理。

4.3 应对:给RM做“瘦身手术”

我做了两件事。首先,检查RM训练数据里的长度分布,发现标注员确实更偏好长回答,RM继承了这种偏置。解决方法是重新调整标注策略,明确要求“长度不是质量,内容才是”;同时把单条回答超400字的样本标记为“差回答”,人为消除长度偏置。

其次,加大KL惩罚力度,把KL系数从0.005调到0.02,让模型不敢偏离SFT模型太远。这之后,日志开始健康起来:奖励涨得慢但稳定,KL维持在8~10之间,回答长度也稳定在220~250字区间。

最终上线效果对比:

指标SFT模型ARL训练后模型
业务问答准确率86%89%
情绪安抚满意度(人工打分)3.2/54.4/5
回答平均长度(字)152236
模板化回答占比38%12%

需要说明的是,准确率提升不算夸张,但“模板化回答占比”从38%降到12%才是RL真正的功劳。模型终于学会了根据用户情绪“看脸色”调整语气,而不再千篇一律甩流程。

5. 避坑指南:RL训练里我踩过的五组坑

这章节是全文的精华所在。很多坑不是试错试出来的,是烧了大量算力和时间才领悟的,我希望你直接跳过。

5.1 奖励黑客(Reward Hacking):模型比你想的更会钻空子

上面那个案例已经展示了最典型的reward hacking形式。我再补充一个更隐蔽的例子:我们的RM训练数据里有一条“如果用户表达困惑,回答中应包含确认性问题”的标注偏好,结果模型学会了在回答最后强行加一句“我这样解释您清楚了吗”,哪怕用户根本没困惑。表面上奖励分数提升了,实际这种回答极其生硬。

避坑心得:无论你的RM训练得多好,都要保留人工抽检机制,定期点开模型的生成结果看。不要只看reward曲线,它能骗你。

5.2 KL系数和生成温度是孪生兄弟

很多人不知道,RL阶段的生成温度和KL系数是有联动关系的。如果你采样温度设得低(比如0.3),模型每次生成都差不多,KL散度会偏小;反过来,温度高了模型探索性强了,KL自然会变大。这意味着你不能单独调KL系数,你每次改生成温度,都得重新审视KL惩罚强度。

我习惯的做法是:固定生成温度为0.9,然后只调KL系数,把探索范围控制住。这样变量少,排障时思路更清晰。

5.3 DPO不香吗?为什么还要折腾PPO

DPO确实省资源、跑得快,但它也有明显的缺陷。它的学习信号完全来自静态偏好数据,没有在线探索的过程。说白了,模型只能在“给定的好vs坏”之间调整,无法探索数据集中不存在的、但也许更好的策略。PPO/GRPO这类在线方法,却能通过生成-评分-更新的闭环,发现人类标注员都没想过的好策略。

经验是:数据质量很高、任务偏简单时用DPO,又稳又省;任务复杂、需要激进探索时,老老实实上GRPO。

5.4 奖励模型和策略模型的大小配比要合理

刚入门的团队常犯一个错误——把RM做得很大,或者直接用强模型当RM。RM太强,打分过于严格,策略模型怎么生成都拿不到高分,最终学不动;RM太弱,又区分不出回答好坏,给不出有效梯度。我用下来比较靠谱的配比是RM参数量是策略模型的1/4到1/8。7B策略模型,配0.5B~1.5B的RM就够。

5.5 SFT阶段不要拼到最后精益求精

有人习惯把SFT阶段的数据调得极其完美、训练到收敛极致,再开始RL。但我的建议是,SFT合格就好,不必花时间“死磕”。因为RL阶段本身会继续调优策略,SFT阶段留下的小瑕疵RL会帮你修正;反过来,SFT阶段过度优化反而让模型行为模式固化,RL探索空间变小。

6. 再往深一层:RL之后,模型还要学什么

RL教模型“看脸色”,本质上是把静态的内容匹配升级成了动态的策略响应。但这只是对齐大模型能力的其中一个维度。从我的观察看,RL技术栈还在快速演进,很多玩法已经开始和别的领域交叉。

6.1 从RLHF走向RLVR:用规则代替人工奖励

现在越来越热的RLVR(Rule-Based Verifiable Rewards,基于规则可验证奖励),核心想法是:某些任务的正确性可以用规则自动判断,不需要人工偏好数据。比如数学题的最终答案是否正确、代码是否能编译运行、数据库查询结果是否匹配。这种“程序化奖励”结合模型探索,已经催生了像DeepSeek-R1这类推理能力大幅提升的模型。

我觉得这个方向在工具调用、代码生成领域潜力极大。你不需要大量标注数据,只需要定义好“什么是对的”,模型自己去试,试出来就是真能力。

6.2 Agent场景下的RL:看脸色升级为看行动结果

在大模型Agent应用中,RL的“奖励”不再只是文本层面的优劣,而是行为后果的好坏——调用工具是否成功、任务是否圆满完成、用户是否最终满意。这时候模型要学的不仅是“说什么话”,更是“做什么决策”。这种RL已经开始从文本生成领域外溢到决策智能领域。

6.3 多模态大模型的RL:更复杂的“脸色”维度

当模型能看图、能听声,RL的反馈就不只是文本质量了,还包括跨模态的思想对齐。比如根据图片内容生成合适文字描述,或者根据用户语音情绪调节文字回复风格。这些场景里,奖励模型需要融合多模态信息,难度上升一个量级,但这恰恰是未来几年的核心战场。

写到最后,分享几条个人体会

SFT和RL的关系,我用一句话总结就是:SFT给模型装上了“知识骨架”,RL让模型学会了“如何把这身骨架用活”。复读机不是终点,也不是失败,它更像是一个必要的过渡态。没有SFT阶段扎实的知识底子,RL再厉害也教不会一个空壳去“看脸色”。

在实际项目里,我最深的一点体会是:做RL不要迷信花哨的新算法,也不要被柳暗花明的benchmark数据迷惑。回到任务本质,想清楚“我的用户到底需要模型懂什么”,然后让反馈信号精准地围绕这个目标运转。奖励模型是你意志的延伸,KL散度是你对保守程度的标尺,采样温度和步数是你的实验手感。这些东西都磨合顺了,训练出来的模型自然既有能力,又有眼力见。

最后再分享一个小技巧:每次RL训练结束后,不要只和SFT模型比指标,要和上一版RL模型比。我习惯保留每一轮训练的策略模型,在验证集上做PK,选胜率更高的那版。这个朴素的办法,帮我挡住过好几次“先涨后崩”的经典翻车现场。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询