Happy-LLM 学习笔记 05:LLM 的能力从哪里来,Pretrain、SFT、RLHF 各负责什么
读大模型训练流程时,我以前会把 Pretrain、SFT、RLHF 都笼统理解成“继续训练模型”。看完 Happy-LLM 第四章后,才真正把三者拆开:它们虽然都在更新参数,但解决的不是同一个问题。Pretrain 主要建立知识和语言能力,SFT 教模型理解并执行指令,RLHF 再把输出往人类偏好的方向推。把这条分工想清楚,比记住一堆训练名词更重要。
Pretrain:先让模型拥有可调用的能力
主流 LLM 通常用 Decoder-Only 架构做因果语言建模,也就是根据上文预测下一个 token。任务形式看起来简单,真正困难的是规模:参数量、训练 token、数据清洗和分布式算力都会把工程复杂度放大。
预训练阶段最像“广泛阅读”。模型从海量文本中学习语言规律、事实关联和一定的推理模式,后续表现出来的大部分知识都以参数形式在这一阶段形成。但数据多不等于数据好。网页去噪、质量筛选、去重和不同领域的数据配比,会直接影响模型最终擅长什么、在哪些地方容易产生偏差。教程里提到 SlimPajama 的例子也提醒我:更干净的 627B token 数据,可能比更大但噪声更多的 1T 数据更有效。
不过,只做完 Pretrain 的模型更像一个读过很多书、却没学会答题规范的学生。它擅长续写文本,不一定知道用户是在提问,更不一定会稳定地按照要求给出答案。这就是 SFT 要补上的部分。
SFT:把“会续写”变成“会按指令办事”
SFT 使用指令和期望回复组成的有监督数据,让模型学习通用的指令遵循能力。训练目标本质上仍是预测下一个 token,只是数据被组织成了明确的对话格式,通常只让回答部分参与 loss 计算。
我以前以为多轮对话是预训练后自然出现的能力,实际上它很依赖 SFT 阶段的数据组织。如果训练样本包含连续的用户与助手轮次,模型才会学会利用历史消息维持上下文;如果数据只有单轮问答,即使基座知识很多,多轮表现也未必稳定。
这也说明 SFT 的重点不是再次灌入海量知识,而是建立“怎么使用已有能力”的接口。任务覆盖范围、回答质量、格式一致性和数据配比,往往比盲目堆数量更关键。工程上如果模型知道答案却总是不按模板输出、不会调用工具或忽略角色要求,优先检查 SFT 数据通常比重新做预训练更合理。
RLHF:模型能回答之后,再学习什么回答更好
仅靠 SFT,模型可以学会模仿标准答案,但“有用、诚实、安全”很难完全写成唯一标签。对同一个问题,多个答案可能都正确,却在表达、风险和帮助程度上有明显差异。RLHF 的作用,就是把这种人类偏好变成可优化的训练信号。
经典流程先收集同一 prompt 下的多个回答,让标注者做 chosen 与 rejected 的排序,再训练奖励模型拟合这种偏好。随后 PPO 使用奖励模型给生成结果打分,并更新策略模型。训练中还要保留参考模型,限制新策略不要偏离 SFT 模型太远,否则为了追求奖励,模型可能丢掉原本的语言能力。
这一阶段的门槛很高。经典 PPO 流程会同时涉及 Actor、Reference、Reward、Critic 四个模型,显存和训练稳定性压力都远高于 SFT。DPO 则把偏好学习改写成更直接的监督目标,不再单独训练奖励模型和运行完整强化学习,因此成为更容易落地的方案。
我现在怎么判断该用哪一层
我会先按问题类型做判断:缺少通用知识和基础能力,根源更接近 Pretrain;理解不了指令、输出格式不稳定或不会多轮交互,重点看 SFT;答案基本正确,但风格、安全性和人类偏好不稳定,再考虑 DPO 或 RLHF。
当然,业务知识更新快时未必应该重新训练,RAG 往往比把新知识硬塞进参数更经济。三阶段训练路线真正给我的启发不是“每一步都必须自己做”,而是先判断缺的是知识、行为协议还是价值偏好,再选择成本匹配的手段。这样看模型效果问题,定位会比一句“再微调一下”清楚得多。
参考项目:https://github.com/datawhalechina/happy-llm
在线阅读:https://datawhalechina.github.io/happy-llm/

浙公网安备 33010602011771号