全景解读 LLM 后训练技术
前两天一个朋友找我,说他正琢磨怎么把预训练模型调成真正的助手,问我从哪下手最合适。我说你别急着翻论文,我先给你讲个故事——我第一次拿LLaMA3-8B基座模型,特别虔诚地问它“今天是星期几”,你猜怎么着?它给我写了三篇关于时间哲学的论文,洋洋洒洒,引经据典,但就是不说今天是星期二!😤
你说气不气。这就像你问装修师傅这墙刷什么颜色,他给你讲了一遍涂料化学发展史。基座模型就是这个德性——什么都知道点,但根本不好好说话!
这就是后训练要干的事。别被“Post-training”这个词唬住。说白了,预训练给你一个毛坯房,后训练就是精装修——刷墙、布线、定制家具,一步步把房子变成能住人的家。我折腾了小半年,把后训练从SFT到Agentic RL这条线全踩了一遍,今天就跟你说说哪些坑值得摔,哪些坑可以绕过。
SFT:以为最简单,结果翻车最惨
刚开始我心里想得特简单:找点高质量的问答对,搞个监督微调不就行了?于是花了小两周精心标注了500条人机对话,在LLaMA3-8B上跑了3个epoch,loss降到0.15,我差点觉得自己已经是调参大师了。
结果呢?模型确实学会回答问题了,但你让它写长文本试试——前两句还像人话,第三句就开始跑偏,到第五句完全放飞自我,逻辑飞得连它自己都追不上。
这坑有个专业名字叫“暴露偏差”。训练的时候模型用的是我的完美token历史,一到了推理,就得靠它自己生成的token历史——错一步,步步错,像多米诺骨牌一样。我专门拿测试集测过:同一个prompt,前50个token准确率87%,到150个token就掉到了31%。从87%到31%啊!这落差让人想摔键盘。
所以SFT只能算“热身”,别指望它解决所有问题。但我也不建议直接跳过它。一个纯基座模型上来就搞RL,训练时间和资源消耗至少翻3倍,还特别容易学到一些诡异的东西——你知道的,模型有时候比你想象中更会钻空子。
RLHF:理想是马斯克,现实是拖拉机
后来我挑战经典RLHF路线——先训练一个Reward Model,然后用PPO优化策略。看论文的时候我信心满满,觉得整个框架特别优雅。结果一上手,全是坑。
第一个坑是奖励模型。我用了一个开源的7B Reward Model,在Anthropic的偏好数据上训练过,看起来挺靠谱。但在我的领域——法律问答——它打分完全不准!模型写“直接引用法条”的回答它给高分,用户更喜欢“用大白话解释”它反而给低分。好吧,那就自己训一个。我花两周收集了2000对对比数据,训出来的RM在验证集上准确率才62%。62%的准确率,虽然比随机好一点,但离实用还差得远——跟猜硬币正反面比,也就强了那么一丝。
然后是PPO的训练稳定性。这个算法要同时维护四个组件:策略模型、参考模型、价值模型、奖励模型。我用了trlx库,batch_size设8,KL惩罚设0.04,跑了一整晚。结果奖励曲线一直在震荡,最后干脆崩了——模型开始输出“超级超级安全”的无意义内容,就是为了获取高奖励。后来查资料才知道可能跟advantage估计的方差有关,把GAE lambda从0.95调到0.9,再加学习率衰减,代码改了一堆才勉强收敛。
说实话,PPO不是不好,但你要有足够的工程师盯着它。小团队一上来就搞PPO,我劝你三思。你看,理论很丰满,工程很骨感,这句话放在PPO上再贴切不过。
DPO:看着像假游戏,玩起来真香
当我第一次看到DPO的论文,心里满是问号:“这不就是把RL目标硬转成一个分类损失吗?这能行?”抱着试试看的心态跑了一遍,我必须承认——真香!
我用同样的2000对偏好数据,分别跑了DPO和PPO。你猜怎么着?DPO只用一张A100跑了40分钟,PPO用两张A100跑了6个小时还没完全收敛。但到了最终评测,两个模型在500条测试prompt上做人工盲评,DPO的胜率甚至还稍微高了一点点!
DPO没有显式的奖励模型,也没有价值网络,直接把偏好对当成分类数据来优化。超参数少得可怜——我就设了beta=0.1,跑了两个epoch,完事。当时我的心态是:这东西太简单了,一定有问题!
后来还真让我发现了它的天花板。DPO只在你已有的数据上优化,不做在线探索。如果你的偏好数据覆盖的场景有限,模型学到的边界就固定了。而PPO因为是在线采样,能发现一些你数据里没出现过的新行为。举个例子,代码生成任务上,PPO模型有时候会想出全新的解题思路,DPO基本上只会照搬训练集里的风格。
所以我的判断是:如果你的偏好数据质量高、覆盖广,DPO是性价比之王;如果场景开放,需要模型有探索能力,还是得上在线RL。没有万能药,只有适不适合。
GRPO:在数学题上,它让我重新相信 RL
真正让我对后训练改观的,是GRPO。它的思路极其巧妙——不要价值模型,靠同一个prompt下多组回答的相对分数来估计优势,完美绕开了PPO最让人头疼的工程问题。
我拿GSM8K数学题测试了一下。基座模型是Qwen2.5-7B,先SFT了1000条解题过程,然后分别跑DPO和GRPO。DPO对这个任务提升不大,准确率从55%涨到62%。GRPO搞了一下午,直接跳到了78%!关键就是分组评分制——同一个问题让模型生成8个解答,得分最高的当正例,最低的当负例,直接算出优势,完全不需要额外训练一个价值网络。
我也踩了个坑:group size设4的时候效果不明显;一加到8,提升就非常明显;但再升到16,收益开始递减,训练时间却翻倍。最后我就定8了,性价比最高。
GRPO特别适合那种“答案能自动判对错”的场景——数学、编程、逻辑推理。如果你的任务需要人工评判,它就不太适用了。而且它有个隐含假设:同一个prompt下的多个回答要有足够多样性。如果模型已经过拟合,所有回答大差不差,那分组打分也没什么意义。
RLVR 和 Agentic RL:我还在踩,但已经闻到味道
RLVR其实就是GRPO的变体——用可验证的规则打分,完全不用奖励模型。我在一个代码修复任务上试了一下,把规则定义成“编译是否通过+测试用例通过率”,效果比人工标注的偏好数据好得多。最爽的是奖励全自动,可以任意采样大量数据。不过规则设计本身也很费功夫——太简单会被模型钻空子,太复杂又容易引入误判,真的是进退两难。
说到这儿,你可能会问:那我到底该怎么搞?
我不会给你一个公式,因为后训练这件事,没有银弹。SFT、DPO、PPO、GRPO,每个技术都有自己的擅长的场景和绕不开的坑。真正重要的是——你得自己动手去踩一踩。因为只有亲自摔过,你才知道什么组合最适合你的任务。
后训练不是魔棒,是精装修。每一面墙,每一根线,都得你亲自盯着。踩坑无数之后,你才会真正明白——
“没有完美的算法,只有慢慢变好的模型。” 🚀
读者评论 5