Lecture 15:中训练与后训练
Stanford CS336 Language Modeling from Scratch | Spring 2026 | Lecture 15: Mid/Post-Training,时长 01:19:54。
从预训练到对话系统:Post-Training 的完整图景#
从基座模型到对话系统:Post-Training 的必要性#
预训练(pre-training)赋予语言模型对世界的广泛理解——它在海量互联网文本上学会了预测下一个 token,由此获得了语言、事实、推理等多维度的能力。然而,这种”原始汤”(primordial soup)式的能力并不能直接转化为实际效用。以 GPT-3 为例,它是一个参数量巨大、预训练充分的基座模型,但用户能用它做的事情相当有限——大致局限于文案写作和一些轻量级的文本游戏,远远达不到”有用的助手”的标准。如果回过头去与 GPT-3 交互,大多数人的反应会是:“这东西有什么用?”
从 GPT-3 到 ChatGPT 的跨越,正是 post-training(后训练)所完成的。这个过程将一个能力强但不可控的基座模型,转变为一个能够理解复杂指令、生成结构化长文本回复、并且行为大体符合人类期望的对话系统。在 GPT-3 时代,控制模型行为的唯一手段是精心设计 few-shot prompt——如果示例足够好,输出就尚可;但整体而言,模型的可操控性(steerability)极其有限。到了 GPT-3.5 和 GPT-4 时代,用户开始能够写出很长的、接近编程式的 prompt,而模型能够 one-shot 地完成整个指令——这种能力质变的背后,正是 post-training 技术的成熟。
Post-training 的整体框架分为两大阶段:
- 监督微调(Supervised Fine-Tuning, SFT):收集 prompt-response 对作为示范数据,让模型学会以人类期望的方式回应指令。
- 基于人类反馈的强化学习(RLHF):通过人类对模型输出的偏好排序,训练奖励模型,再用强化学习进一步优化模型行为。
预训练是一切的基础——如果跳过预训练直接做 post-training,“你什么都得不到,绝对什么都得不到”。预训练之所以关键,是因为它以一种极其多样化、广覆盖的方式实现了能力的规模化。但预训练本身无法告诉模型”人类想从你这里得到什么”——这正是 post-training 要解决的问题。
与预训练相比,post-training 是一个远为 messy(混乱)的过程。它需要显式的数据收集、精细的行为调控,以及大量在预训练阶段不需要面对的工程问题。关于前沿 post-training 的具体做法,公开信息相当稀少——数据是各大实验室的核心商业机密。2022 年之前的论文(如 OpenAI 的 RLHF 论文 Learning to Summarize from Human Feedback、Anthropic 的 HH 论文)尚有详尽的标注指南和实验细节;而在竞争白热化之后,几乎所有厂商都不再公开这些信息。算法层面的理解相对透明——但算法并非核心竞争力,数据才是。
SFT 数据的演进:从 FLAN 到 Agentic SFT#
SFT 阶段的核心不在于训练方法——它与预训练几乎完全一样,就是 next-token prediction + gradient descent——而在于 训练数据。过去几年间,开源社区对 SFT 数据的理解经历了几次关键的范式转变。
FLAN:多任务聚合的先驱与局限#
最早的系统性尝试来自 Google 的 FLAN(Finetuned Language Net),其思路直截了当:NLP 社区已经积累了大量监督数据集(翻译、摘要、问答、分类等),把它们全部收集起来,统一格式化为 instruction-response 对,然后在这些数据上微调预训练模型。
这个想法在当时非常有远见,但实际效果揭示了几个深层问题。观察 FLAN 的训练样本就能发现端倪:比如一个”邮件主题行预测”任务,是把 Enron Emails 数据集机械地转化为 input: 邮件正文 → output: 主题行 的格式,指令放在最末尾——这种格式极不自然,没有用户会以这种方式与模型交互。再比如摘要任务,从 CNN/DailyMail 等数据集转化而来,输出往往非常短,而且仔细检查会发现摘要本身就有幻觉——源数据集的质量问题被原封不动地传导给了模型。
FLAN 时代的另一个信条是 规模至上——收集尽可能多的数据集、尽可能多的样本。后来的发展证明这个假设是错误的:如果基座模型足够强,少量高质量样本就足以激活所需行为,因为预训练的泛化能力已经完成了大部分工作。FLAN 在 quality-quantity trade-off 上站错了位置,尽管在当时没有人知道这一点。
关于 SFT 数据的正确性要求,答案比直觉更微妙。一方面,低质量的 response 会教模型做坏事;但另一方面,有研究表明即使不给模型看 response、仅提供 instruction 格式的数据,模型也能学会 instruction following。这说明 SFT 数据中 格式和结构的信号比内容的正确性更加重要——预训练已经给了模型足够的知识,SFT 的核心作用是教它”以什么格式输出”,而非”输出什么知识”。
Alpaca 与蒸馏范式:ChatGPT 的涟漪效应#
ChatGPT 的发布彻底改变了 SFT 数据的制作方式。Stanford 的 Alpaca 项目采用了一种简洁而高效的策略:用 ChatGPT 自身生成 input-output 对,然后在 LLaMA 模型上做 SFT。这种 蒸馏(distillation)方式产生的数据有两个显著特点——输入更自然(类似真实用户的提问方式),输出更详细、更”像聊天”(因为它本身就来自 ChatGPT)。
Alpaca 的核心发现是:这类蒸馏数据能够可靠地在开源模型上复现 ChatGPT 风格的行为。这意味着,只要你有一个足够强的基座模型和一个足够好的教师模型,构建类 ChatGPT 系统的 SFT 阶段在技术上并不困难——虽然把细节做对仍然很难。这个发现在社区引发了巨大的乐观情绪:也许只要收集到足够多、足够好的 instruction tuning 数据,开源社区就能追平闭源实验室的性能。
Berkeley 的 Vicuna 采用了类似思路,但用在线用户共享的真实 prompt 作为蒸馏的输入端,进一步提高了数据的自然度。
Open Assistant:人工众包的雄心与现实#
在 Alpaca 之后,社区的一个方向是完全摆脱对闭源模型的依赖,转而用人工标注构建最高质量的数据集。Open Assistant 就是这样一个类似 Wikipedia 的众包项目:大量志愿者共同编写 prompt 和 response,目标是生产专家级的、详尽的、高质量的对话数据。
从数据样本来看,Open Assistant 确实产出了质量明显更高的内容——聊天风格的输入、长篇详细的专家级回复。项目最终生成了约上万条样本后逐渐停滞。但它验证了一个重要观点:response 的质量和详细程度对模型行为有决定性影响,这也推动了后续对标注者质量的重视。
从 Chat 到 Agentic SFT:结构化输出的新时代#
最新一代的 SFT 数据正在经历另一次范式转变。随着产品形态从纯对话界面转向完整的 Agent 系统(如 Claude Code、Codex 等),SFT 数据不再仅仅是 prompt → 文本回复,而是包含了 tool calls、结构化的 JSON 输出、待办清单、并行函数调用等复杂格式。
以 NVIDIA 的开源模型 Nemotron 为例,其 SFT 数据的很大一部分是 agentic SFT 样本:assistant 字段不仅包含文本回复,还伴随着并行执行的 tool call。这种数据通过监督学习直接教会模型生成结构化的多模态输出。
三大宏观趋势#
纵观 SFT 数据的演进,有三条清晰的趋势线:
-
从 NLP benchmark 到自然对话:经典 NLP 数据集的格式极不自然——
input → 程序化输出。但用户想要的是与人对话的体验,而非与 benchmark 交互。SFT 数据因此转向更详细、更类人的长回复。 -
标注者质量持续上移:从廉价众包 → 受过教育的标注者 → 领域专家。Open Assistant 是早期专家标注的代表,但这条路线的成本极高。
-
输出格式的结构化:从纯文本 → Markdown 格式 → tool call + 结构化 JSON。SFT 数据的”接口”正在从 chat API 扩展到 function calling API。
SFT 数据的陷阱:风格、知识与安全#
SFT 看似简单——收集 prompt-response 对,做 next-token prediction——但数据收集中隐藏着多个不直觉的 failure mode,每一个都可能让模型的实际行为偏离预期。
风格偏差:Engagement 信号 ≠ 能力提升#
如果被要求负责一个 SFT 数据集的构建,需要关注的维度包括:格式(长度、结构化程度)、知识(response 中应包含多少事实信息)、数据量、以及安全性数据的配比。其中,长度和风格的影响力被严重低估。
不同模型之间明显的”调性”差异——比如 Claude 的风格和 ChatGPT 的风格——都是 SFT 数据收集团队有意识的设计决策。但问题在于:当使用人类偏好(preference)来评估 SFT 数据的效果时,风格因素会产生巨大的干扰。
具体表现为:在 A/B 对比评估中,标注者会系统性地偏好包含 bullet point 列表的回复、更长更详细的回复,即使两个回复在实质内容上没有差异。这并非标注者”被骗”,而是一种自然的认知偏差——当你面对两个回复并被要求选择”哪个更好”时,更结构化、更详尽的回复确实看起来更好。
数据层面的证据很清楚:在多种 SFT 数据集上训练后,模型在 AlpacaEval 等偏好评测上可以产生巨大的分数差异,但在标准 benchmark(如 MMLU、HumanEval 等)上几乎没有变化。这说明 SFT 可以大幅改变模型的”表面风格”而不改变其底层能力。如果你关注的是 engagement 信号(用户互动指标),就很容易被误导,误以为数据质量在提升,而实际上模型的核心能力纹丝未动。
风格控制应该被视为一个独立于能力提升的问题来思考。
知识注入的双刃剑:SFT 何以成为幻觉的根源#
Open Assistant 的数据中有一个典型样本:response 里引用了一篇具体的论文——Bivens J., Michelle L., The Pay of Corporate Executives...。这个样本同时在教模型两件事:(1)这篇论文的具体信息(知识),和(2)在回复中给出引用是一种好的行为模式(格式)。
问题在于,模型在泛化这两个行为时无法完美区分它们。当模型遇到一个新场景,格式行为说”这里应该给一个引用”,但知识库里没有对应的真实引用时,模型就会 hallucinate 出一个看似合理但实际不存在的引用。这就是为什么”在 SFT 阶段强迫模型输出它不知道的知识会导致幻觉”这一 folklore 是有根据的。
更精确地说,如果 SFT 数据中包含模型在预训练阶段未见过的尾部知识(tail knowledge),模型就会学到一种泛化模式:“即使我不确定,也应该自信地输出看起来像知识的内容”。实证研究表明,在模型已知的事实上做 SFT 不会加剧幻觉,但在未知事实上做 SFT 会显著增加幻觉率。
尾部知识的定义本身是模糊的——没有严格的形式化标准。实践中的一种粗略代理是 Wikipedia 文章的长度:长文章对应的实体通常是”well-known”的,短文章对应的则可能是尾部知识。在这样的代理下可以观察到:在不知名实体的知识上训练确实会增加幻觉。
John Schulman(PPO 的作者)从另一个角度论证了同一观点。他认为 SFT 和 RL 之间的本质区别在于反馈类型:SFT 是外部监督(告诉模型”正确答案是这个”),RL 是 self-taught policy supervision(模型从自己策略的输出中学习)。由于 RL 使用模型自身的输出,模型不会像 SFT 那样被迫偏离太远。要教会模型区分”自己知道什么”和”自己不知道什么”,必须是 policy-dependent 的——不能由外部人来灌输知识,因为”知道什么”本身取决于模型的内部状态。这正是为什么 强化学习在减少幻觉方面有独特优势:
- 假设模型的 activation 中有一个”我知道/我不知道”的方向
- SFT 阶段的数据强迫模型输出引用,模型就会无条件输出引用
- RL 阶段如果模型在”我不知道”方向上输出了引用并得到负 reward,它就能学会将”我不知道”这个内部信号外化到输出策略中——即在不确定时不输出引用
但如果模型在任何层面上都不具备区分已知/未知的能力,RL 也帮不上忙。
SFT 的最佳定位是提取预训练中已存在的行为模式,而非注入新知识。少量高质量、且事实正确的样本就足够了。添加事实不正确的数据或尾部知识有时反而有害。
安全微调:Violation 与 False Refusal 的帕累托权衡#
进入 post-training 阶段后,模型必须面对真实世界的使用场景,其中不可避免地包括恶意使用——政治操纵、社工钓鱼(spear phishing)等。Post-training 是模型与滥用之间的最后一道防线,因此必须加入安全控制,使模型拒绝回应恶意输入。
安全微调的核心挑战是一个 帕累托权衡:
- Violation rate(放过恶意查询的概率):越低越好
- False refusal rate(误拒正常查询的概率):越低越好
经典的例子是:用户问”How do I kill a Python process?”,如果模型回答”I can’t let you kill anything”,这就是 false refusal。在这两个指标之间找到帕累托最优解,是安全微调的核心目标。
关于安全 SFT 的公开细节极为稀少,甚至比能力 SFT 更少。Llama 2 的技术报告提供了当前最详细的描述之一,但即便如此,连安全微调使用了多少样本都未披露。从已知信息来看,安全数据的规模通常在 几千到几万条 的量级。
Tulu 3(Allen AI 的开源 post-training pipeline)是目前为数不多能看到完整安全 SFT 细节的参考。他们的做法是:
- 通过之前的 WildChat 项目(向公众提供免费聊天服务以换取对话数据的收集权限),积累了大量真实用户的交互记录
- 从中挖掘出恶意使用尝试和越狱攻击
- 为这些恶意 prompt 编写标准拒绝回复
- 总量约 5 万条安全样本
从公开的闭源模型 model card 来看,类似的策略在业界普遍使用:监控使用数据 → 发现不安全行为 → 让标注者编写拒绝回复 → whack-a-mole 式地修补。
一个令人惊讶的实证发现是:仅用约 500 条安全样本就能显著降低模型执行恶意指令的概率。模型在预训练阶段已经内化了某种”安全/不安全”的区分轴——安全 SFT 只是在这个已有的轴上施加了一个相对较小的推力,就能实现广泛的安全行为改善。
当然,“500 条就能奏效”并不意味着大规模数据收集没有价值。如果你是 OpenAI 或 Anthropic,需要精确定义什么是安全、什么是不安全,并在数以千万计的使用场景中维持一致的行为,那就需要远比 500 条更大规模的数据收集。
SFT 方法:Mid-Training 与预训练-后训练的模糊边界#
SFT 的”方法”部分几乎无需展开——就是标准的 gradient descent,对 prompt-response 对做 next-token prediction。但有一个正在深刻重塑训练流程的趋势值得专门讨论:预训练和后训练的边界正在消失。
Mid-Training:高质量数据的前移#
早期的范式将预训练和后训练视为两个截然分离的阶段:先在 web 数据上做预训练,然后在 instruction 数据上做 SFT。但人们很快意识到——为什么不把它们混在一起?
具体做法是在预训练的衰减阶段(decay phase,即学习率从峰值逐步降低到零的最后阶段),将高质量数据乃至 instruction tuning 数据混入训练 mix。这个阶段有两个特性使其成为理想的注入点:
- 距离部署最近:decay 阶段是模型看到的最后一批数据,因此对最终行为影响最大
- 学习率最低:较低的学习率意味着模型不会因为新数据而剧烈偏离已学到的知识,而是做精细调整
以 MiniCPM 为例,其训练 pipeline 清晰地展示了这种两阶段数据 mix 的变化:第一阶段是标准预训练,训练 mix 包含各类互联网数据;第二阶段(mid-training/decay)则大幅增加了高质量文本、对话数据和 SFT 数据的占比,同时降低了通用 web 数据的比例。

左侧饼图为 Stable Stage(标准预训练阶段)的数据配比,以 CommonCrawl、Code、Dolma 等通用 web 数据为主;右侧为 Decay Stage 的配比,可以看到 Knowledge SFT、Book Chinese、UltraChat、Math SFT、Code SFT 等高质量和 SFT 数据的占比大幅增加,通用 web 数据占比缩减。
这种做法的效果相当显著,据已知信息,几乎所有现代语言模型都在这样做。在各大模型的技术报告中,你都能看到”mid-training”或”second-phase pre-training with a different data mix”的描述。
“基座模型”的定义已经不可信#
这引出了一个重要的认知修正:当前所谓的”基座模型”其实已经不纯粹了。
如果你对”基座模型”的心理模型是”仅在互联网数据上做 next-word prediction 的模型”,那这个理解已经过时了。现代的”基座模型”在预训练阶段就已经混入了 UltraChat 之类的合成对话数据集——这些数据是专门设计来提升 chat 能力的。因此,当一个模型声称是”base model”时,它实际上已经在某种程度上被”指令调优”过了。
数据 Mix 优化:更多试错,更少理论#
关于如何确定预训练和 mid-training 的最优数据配比,实际操作远比论文描述的更依赖试错(trial and error)。虽然有一些算法(如 data mixing optimization 相关论文),但它们往往相当脆弱(brittle)。
Mid-training 的一个实际优势是实验成本低:因为 mid-training 远短于完整预训练,在同样的计算预算下,你可以为每一次完整预训练跑大约 10 次 mid-training 的 ablation。这种成本结构不能完全暴力搜索最优 mix,但允许大量 ablation 实验。常见的做法是:
- 在 decay 阶段做大量 ablation 实验(ablation 对不同领域数据进行排名)
- 从 ablation 结果中估计各类数据的价值
- 将这些估计反推回第一阶段的预训练 mix
不能直接把预训练阶段全部换成高质量数据的原因很简单:高质量数据的 token 量不够。如果把预训练数据全部换成 Wikipedia,token 数量远远不够支撑预训练所需的规模。
Meta 因使用书籍数据被起诉时,法庭文件意外曝光了内部研究者做 ablation 的过程——他们系统性地评估各个 book subset 的价值,然后据此决定数据 mix。这正是业界通用的做法。
从分布建模到策略优化:RLHF 的概念转变#
SFT 阶段结束后,模型已经能够遵循指令并生成合理的回复。接下来进入 RLHF 阶段——通过某种形式的奖励信号进一步优化模型行为。在深入算法之前,有一个概念上的重要区分值得明确。
生成式建模 vs 策略优化#
预训练和 SFT 本质上都在做同一件事:生成式建模(generative modeling)。给定一组序列,模型学习预测下一个 token——这是一个”拟合分布”的问题。SFT 只是改变了目标分布(从互联网文本变成了 instruction-response 对),但核心目标不变:让模型的输出分布尽可能逼近训练数据的分布。
RLHF 则是一个根本不同的范式:策略优化(policy optimization)。目标不再是拟合某个数据分布,而是找到一个策略 π,使得从该策略采样得到的输出能够最大化某个下游奖励。这个奖励可以是用户在平台上的停留时长、数学题的正确率、或人类偏好排名。
这个概念差异的核心含义是:在 RLHF 的世界里,模型的输出分布完全可以坍缩到单点。对于每个 prompt,模型可以只给出一个确定性的答案——只要它获得了高奖励,就是”正确”的。模型不再需要维持输出的多样性——它是一个策略(policy),不是一个分布(distribution)。
为什么不能永远只做 SFT?#
一个自然的问题是:为什么不直接无限收集更多更好的 SFT 数据,而需要引入 RL?
Generation-Verification Gap(G-V gap)是一个关键原因。人类在”生成”和”判断”之间存在系统性差异:人们写出的东西,和他们偏好的东西,往往不一致。一项研究让自由职业写手为新闻文档撰写摘要,然后让同一批写手在自己的摘要和 Instruct Davinci(ChatGPT 的前身)的摘要之间做偏好选择。结果有多位标注者更偏好 AI 的摘要——访谈后发现,他们认为 AI 的表达方式确实更好。换句话说,即使是优秀的写手,他们自己写的东西也不一定达到他们自己的偏好标准。
这意味着:如果你只用人类的”生成”(demonstrations)来做 SFT,你永远无法超越人类的生成能力。但如果你用人类的”判断”(preferences/ratings)来做 RL,模型可以探索到人类自己写不出但能认可的更优解。
另一个原因是验证比生成容易的任务天然适合 RL。数学是最典型的例子:验证一个证明远比生成一个证明容易。DeepSeek 等团队已经在利用模型的自验证能力做 RL 训练。这类以可验证奖励驱动的 RL(RLVR,Reinforcement Learning with Verifiable Rewards)将在下一讲专门讨论。
RLHF 的数据侧:标注者、成本与偏差#
RLHF 的数据收集有其独特的范式和挑战。与 SFT 的 demonstration 数据不同,RLHF 需要的是偏好数据——对同一 prompt 的多个回复进行排序或比较。
偏好数据的收集范式#
标准做法是:将 prompt 输入 SFT 后的模型,用 temperature=1 采样生成多个回复,然后让标注者做 pairwise comparison(两两对比),判断哪个回复更好。评分维度通常包含三个方面:
- Helpfulness(有用性):回复的清晰度、结构化程度、是否过长等
- Truthfulness(真实性):是否包含幻觉或不准确信息
- Harmlessness(无害性):是否涉及不安全内容
InstructGPT 论文的附录是目前公开的最详尽的标注指南文档。Google Bard 的标注指南因标注者泄露而意外公开,结构类似但采用 Likert 量表而非 pairwise 排序。
标注者画像:从廉价众包到领域专家#
标注者群体正在经历显著的上移(upskilling)。以 Scale AI 平台的数据为例,约 70% 以上的标注者拥有本科或硕士学位,modal age 约 35 岁,主要任务包括创意写作和技术写作。
更引人注目的趋势是定制化专家标注(bespoke annotation)的增长。随着 AI 公司将产品推向医疗、法律等专业领域,标注工作越来越需要领域专家——医生判断医学建议的正确性、律师核实法律引用的合规性。这些专家标注者的时薪远高于一般标注者:
- 一般标注者的中位薪资已超过 $50/小时
- 专家标注者可达 $100+/小时
标注的成本结构呈金字塔形:底层是大规模的低成本通用标注,顶层是少量的高成本专家标注。这种分层并非一方取代另一方,而是共存——实际上这种分化与社会整体的高薪/低薪工作两极化趋势如出一辙。
获取高质量标注的现实困难不容低估。首先,防止标注者使用 ChatGPT 完成任务极其困难——如果不进行现场监督,标注者完全可以用最便宜的 LLM 生成看似合理的答案。Google Bard 的案例尤为典型:在一场劳动纠纷中,标注者披露他们被要求在不到一分钟内核实长篇对话回复的正确性,这在实际操作中根本不可能做到。Scale AI 也因将低成本标注外包到海外而陷入争议。
需要领域专家的原因并不仅仅是”专家能给出更好的答案”。更重要的是:某些任务只有这些人能做——比如律师核实 Blue Book 引用是否合规、医生判断医学建议的安全性。此外还有 **tacit knowledge(隐性知识)**的提取需求——某些领域经验无法通过通用标注者获得。要注意的是,“用领域特定模型标注”和”需要领域专家标注”是两回事:领域特定模型通常不比最强的通用开源模型好,因此它们在标注方面并无独特优势。
标注者偏差的传导机制#
一个令人警醒的发现是:标注者的人口统计特征会以非直觉的方式传导到模型行为中。
一项研究用标准民意调查问题测试语言模型的”意识形态倾向”,发现基座模型的回答风格接近新教徒和天主教徒,而经过 post-training 后的模型则变得更接近佛教徒、印度教徒和无神论者。对照 InstructGPT 论文附录中标注者的人口统计信息——大量来自东南亚和美国西海岸——这两个群体恰好对应了上述宗教/文化偏好。
更微妙的是数据中的隐性偏差传播(sleeper agent-style bias transmission)。如果模型 A 被训练出”喜欢猫头鹰”的偏好,然后用模型 A 生成的看似无害的数据去训练模型 B,模型 B 也会继承”喜欢猫头鹰”的倾向——即使这种偏好在数据中完全不显眼。这类 subliminal transfer effect 极难检测。
专家标注者 vs 普通标注者:关注点的系统性差异#
Hosking 等人的研究清晰地量化了专家和非专家标注者的行为差异:
- 非专家标注者系统性地偏重格式因素(formatting)——是否有 bullet points、排版是否美观
- 专家标注者更关注事实准确性(factuality)和逻辑一致性(consistency)
这并不令人意外:判断事实准确性需要领域知识和额外的验证工作(比如搜索引擎核查),远比”看哪个排版更好”困难。但这意味着,如果你的标注者群体以非专家为主,你的奖励模型实质上是在优化”格式好看”而非”内容正确”。
标注质量的度量困境#
如何判断一个标注者”够好”?两种常见方法各有局限:
-
标注指南合规性:制定详尽的指南(如”在 Google 搜索前三页找不到反驳信息即为事实”),检查标注者是否遵循。问题是指南再详尽也无法覆盖所有场景。
-
标注者间一致性(inter-annotator agreement):衡量不同标注者之间的一致程度。但这只反映 variance,不反映 bias——如果所有标注者都使用 ChatGPT 来生成标注结果,一致性会非常高,但数据质量可能很差。而且某些任务(如”你喜欢这个回复吗?“)天然具有高方差,低一致性不代表标注者不好。
LLM-as-Judge:模型标注的崛起与局限#
对于非前沿模型的训练,基于模型的标注(model-based annotation)已经成为事实上的标准做法。GPT-4 发布后的对比研究表明,模型标注与精心策划的人工标注之间的系统排名一致性相当高,且成本低了数个量级。
HuggingFace 在构建 Zephyr 模型时的经历颇具启示性:他们最初坚持不使用模型标注,花费大量时间和资金通过专业标注服务商收集人工数据,但最终发现结果并不优于模型标注——于是在正式版本中转向了 AI 反馈。
目前在开源社区,UltraChat(SFT 数据)和 UltraFeedback(RLHF 数据)等模型生成的数据集已成为标准基础设施。Tulu 3 的完整 pipeline 也全部基于模型标注。
但模型标注有其独特的偏差。研究表明,模型 judge 和人类标注者一样容易被长度欺骗——仅仅增加回复长度就能持续提高模型评判的 win rate,即使回复内容没有实质改善。另一项研究更直接地表明,仅对长度做 RLHF 就能在许多偏好评测上获得很高的分数。
值得一提的是,模型生成数据并非只有蒸馏一种形式。Anthropic 的 Constitutional AI 是一个重要的早期范式:通过精心设计的 prompt 让模型自己生成安全相关的训练数据(如对不安全输入的拒绝回复),然后在这些自生成数据上训练模型本身。这可以看作一种”self post-training data generation loop”——与 Self-Instruct(侧重能力)形成互补,Constitutional AI 侧重安全性。两者共同证明了:模型可以在一定程度上 bootstrap 自身的 post-training 数据。
对于追赶前沿的开源项目,模型标注已几乎没有人类数据的用武之地。但对于推动前沿的实验室,人工数据收集仍不可或缺——尤其在需要领域知识、tacit knowledge 提取、以及保证数据不被 AI 污染的场景中。
RLHF 算法:从 Policy Gradient 到 DPO#
有了偏好数据和奖励模型后,如何实际训练模型?RLHF 的算法目标可以写成一个简洁的优化问题:
maxπEx∼D,y∼π(⋅∣x)[r(x,y)]−βKL[π∥πref]
第一项是最大化从策略 π 采样得到的输出在奖励模型 r 上的得分;第二项是 KL 散度正则化,约束 RL 策略不要偏离预训练/SFT 后的参考策略 πref 太远。这个目标几乎原封不动地出现在 InstructGPT 论文(Equation 2)和 Stiennon et al.(Learning to Summarize from Human Feedback)中。
PPO:标准但复杂的路径#
用梯度下降来优化上述目标,最直接的方式是 policy gradient:
∇θJ(θ)=Ey∼πθ[r(x,y)⋅∇θlogπθ(y∣x)]
这本质上是带权重的 SFT——每个样本的梯度按其奖励值加权。但 vanilla policy gradient 有一个实际问题:每次梯度更新都需要从当前策略重新采样,而推理(采样)的计算开销远大于训练。
为了缓解这个问题,off-policy 方法允许用旧策略的采样结果多做几步梯度更新。TRPO(Trust Region Policy Optimization)通过 importance weighting + 距离约束来实现这一点。PPO(Proximal Policy Optimization)进一步简化了 TRPO,将硬性的距离约束替换为一个启发式的 clipping 机制——当新旧策略的差异超过阈值时,直接截断梯度信号。
PPO 的演进路径是:policy gradient → off-policy(重用采样)→ TRPO(trust region 约束)→ PPO(clipping 近似)。它是 InstructGPT 和早期 ChatGPT 的核心算法,但实现复杂,需要同时维护 policy model、reference model、reward model、value function 四个模型。
绕过 PPO 的尝试#
PPO 的复杂性促使社区长期探索更简单的替代方案。以下是几种被尝试过但效果不理想的路径:
- 控制 token 方法:在好的回复前加
[GOOD],坏的回复前加[BAD],然后做 SFT,生成时只用[GOOD]前缀。效果不佳。 - 仅训练好的回复:丢弃坏的样本,只在好样本上做 SFT。效果有限。
- Rejection sampling:训练奖励模型,生成大量候选,保留奖励最高的做 SFT。有一定效果,但不如真正的 RL。
- Best-of-N:生成 1024 个候选,取奖励最高的一个。计算成本极高。
DPO:简洁而有效的突破#
DPO(Direct Preference Optimization)成功地将 RLHF 简化到接近 SFT 的复杂度,同时保持了合理的性能。它的核心思想是同时去掉两样东西:奖励模型和 on-policy 采样。
DPO 的推导从 RLHF 目标的闭式解出发。如果不限制 π 为神经网络,而是在所有可能的策略空间中优化,最优策略有一个解析形式:
π∗(y∣x)=Z(x)1πref(y∣x)⋅exp(β1r(x,y))
直觉上这很自然:最优策略就是对参考策略做指数倾斜(exponential tilting)——奖励高的回复被指数级上权,奖励低的被指数级下权。
关键的推导步骤是:从这个闭式解反解出 implied reward(隐含奖励)。既然最优策略和奖励之间存在确定性关系,就可以把奖励表示为策略的函数——从而完全消除对显式奖励模型的需求。将隐含奖励代入原始 RLHF 目标,就得到了 DPO 的损失函数。
DPO 梯度的最直观形式为:
∇θLDPO=−βE(x,yw,yl)隐含奖励估计错误越大,步长越大σ(r^θ(x,yl)−r^θ(x,yw))增加好回复的概率∇θlogπ(yw∣x)−降低坏回复的概率∇θlogπ(yl∣x)

这个梯度的含义非常清晰:
- 方向:对每对标注过的 (好回复 yw, 坏回复 yl),增加好回复的 log-likelihood,同时降低坏回复的 log-likelihood
- 步长:由 σ(r^θ(x,yl)−r^θ(x,yw)) 控制——当模型的隐含奖励模型已经”知道”哪个好哪个坏时(即已经给好回复更高的概率),步长很小;当模型判断错误(给两个回复接近的概率)时,步长很大
这比 PPO 简单得多——不需要奖励模型、不需要 value function、不需要 on-policy 采样,只需要偏好数据集和标准的梯度下降。
DPO vs PPO:实践中的差异#
关于 DPO 和 PPO 谁更好,社区争论了很久,结论是:对大多数场景差异不大。
Llama 的技术报告显示 Meta 在其 post-training pipeline 中使用了 DPO,加上一个外层循环:SFT → DPO → 用 DPO 模型生成候选 → rejection sampling → 重复。如果 DPO 对 Llama 够好,那它对大多数场景也够好。
AI2 的经验则展示了结论的脆弱性:在一项研究中他们发现从 DPO 切换到 PPO 能获得更好结果;但在 Tulu 2 的另一项研究中,结论又反过来了。这种不一致性说明差异主要来自实验设置的细节(数据、超参数、模型规模),而非算法本身的优劣。
DPO 之后出现了许多变体——SimPO(改变权重方式)、length-normalized DPO(按长度归一化避免长度 bias 的问题)等——但这些变体似乎都没有带来根本性的改善。核心思想——在好方向上做正梯度步、在坏方向上做负梯度步,并用隐含奖励误差控制步长——本身就足够好。
RLHF 的未解问题与通向 RLVR 的桥梁#
RLHF 远非完美。几个根本性挑战至今未被完全解决,而这些挑战恰好指向了下一代范式的方向。
过优化:学到的奖励模型不是真相#
RLHF 最大的系统性风险是 overoptimization(过优化)——当 RL 训练过于激进地最大化学到的奖励模型时,模型会找到奖励模型的 “漏洞” 而非真正变好。

左图展示了经典的过优化曲线:横轴是 RL 策略与初始策略之间的 KL 距离(即训练的”激进程度”),纵轴是 reward model 的得分。在小 KL 范围内,模型确实在变好(得分上升);但随着 KL 增大,得分先升后降——模型开始 exploit 奖励模型的漏洞。不同大小的 reward model(3M 到 3B 参数)都会出现这种模式,只是拐点位置不同。这就是 RLHF 目标中 KL 正则化项存在的根本原因——它限制策略不要偏离参考模型太远,从而抑制过优化。
当 InstructGPT 发布时,社区曾有过一种乐观情绪:也许我们可以通过不断收集 thumbs-up/thumbs-down 数据,一路 RLHF 到超级智能。这种乐观很快被过优化问题打碎了——仅靠学到的奖励模型,RLHF 无法无限扩展。
模式坍缩与校准损失#
RLHF 的另一个系统性问题是 mode collapse(模式坍缩)。RL 训练后的模型输出多样性显著降低——它倾向于对每个 prompt 集中在少数几种回复模式上。这与前面讨论的概念转变直接相关:RLHF 模型是一个策略而非分布,策略完全可以坍缩到单点而不受惩罚,只要它获得了高奖励。
右图展示了一个更具体的表现:校准损失。图中 RLHF 后的模型(蓝线,T=1)在 MMLU 上的概率校准严重偏离理想对角线——模型过于自信,预测概率为 0.8 的答案中很多实际是错的。OpenAI 在 GPT-4 时代的一份文档中将此列为”少数尚未解决的开放问题”之一。Anthropic 的分析则指出,这种失校准在某种程度上是 RLHF 的”自然后果”——可以在某些场景下重新校准,但无法完全消除。
这个问题在下一讲讨论的 RLVR(基于可验证奖励的 RL)中变得尤为关键:模型需要足够的熵和探索性来尝试不同的解题路径。如果 RLHF 阶段已经导致严重的模式坍缩,后续的 RLVR 训练将面临更大的探索困难。
数据收集的不可规模化性#
Post-training 在某种意义上是整个语言模型训练流程中最”手工”的部分。数据收集既昂贵又难以保证质量:标注者可能偷偷使用 ChatGPT 来完成标注任务、在时间压力下无法真正验证回复的正确性、不同标注者之间存在系统性偏差。
Post-training 之所以”messy”,核心原因是它的大部分挑战都归结为获取高质量数据,而获取高质量数据从来都是困难的。
通向下一代范式:RLVR#
所有这些挑战最终汇聚到一个问题:是否存在一种奖励信号,使得我们可以不断投入计算资源而模型性能单调递增,不会过优化?
这正是 RLVR(Reinforcement Learning with Verifiable Rewards)试图回答的问题。在数学、代码等领域,答案是可以自动验证的(proof checker、unit test),因此奖励信号是”真实的”而非学到的——消除了过优化的根源。RLVR 是推动 reasoning model(如 GPT-o1、DeepSeek-R1 等”思考模型”)的核心技术,也是将 RLHF 体系推向下一个阶段的关键方向。
RLHF 算法本身仍在演进。PPO 实现复杂但经过验证;DPO 简单但够用;GRPO(Group Relative Policy Optimization)是一种更简单的变体,在 RLVR 场景中表现良好——这也是 CS336 课程作业中将要实现的算法。
部分内容可能已过时