Lecture 8 · 后训练数据 I:指令、偏好与 AI 反馈 · Post-training Data I: Instructions, Preferences & AI Feedback

Training Data for AI · Lecture 08。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应 Maps to:Stanford CS525 Winter 2026 Training Data for AI,2/2 客座讲座 Data for LMs: post-training(Etash Guha,61 页 slides,Posttraining: From Chatbots to Reasoning to Agents)的前半部分(“聊天机器人时代”);2/4 学生报告里的 Tulu 3(Simran Nayak)。阅读:FLAN、InstructGPT、Constitutional AI、Self-Instruct、Alpaca、UltraFeedback、Tulu 3。 依据说明:Guha 的 slides 分三个时代:聊天机器人(FLAN、InstructGPT、RLHF、Constitutional AI、DPO、合成数据)、推理(o1、DeepSeek-R1、开放复现)、智能体(SWE-Bench、OpenThoughts-Agent)。本讲覆盖第一个时代,后两个在第 9 讲。Tulu 3 依据学生报告的 slides(29 页)和论文摘要。各论文的关键数字核对过摘要;Self-Instruct 的 175 条种子任务和 ROUGE-L 阈值、DPO 的推导、LIMA 和 Gudibande et al. 是我根据论文正文补充的。第 8 节”统一的视角”和第 9 节”延伸与前沿”是我补充的。 配套代码 Code:code/lecture08/(numpy;3 个脚本 + 1 个模块;每个几秒钟) 预计阅读时间:2.5 小时(含运行代码)


0. 本讲导航 · How to read this lecture

0.1 学习目标 Learning goals

  1. 说明预训练模型和助手的区别,以及后训练数据的三种形式:示范(SFT)、比较(偏好)、奖励(强化学习)。
  2. 解释 FLAN 的发现:把很多任务写成指令来微调,模型能在没见过的任务上零样本完成——任务的多样性是关键。
  3. 讲清楚 InstructGPT 的三阶段数据和 RLHF 的目标(含 KL 惩罚),以及”1.3B 的 InstructGPT 胜过 175B 的 GPT-3”说明了什么。
  4. 理解用模型生成指令数据(Self-Instruct、Alpaca)的做法和局限(模式坍缩、模仿更弱的老师)。
  5. 理解 AI 反馈(UltraFeedback、Constitutional AI)的好处和代价,奖励模型为什么会被”钻空子”,以及 DPO 怎样绕开奖励模型。
  6. 了解一个完全开放的后训练配方(Tulu 3)在数据上做了哪些选择、发现了什么。

0.2 先修与本讲范围 Prerequisites & scope

默认你已经会 Assumed本讲不展开 Not covered
第 6–7 讲:预训练数据、语言模型是”预测下一个 token”推理轨迹、可验证奖励的强化学习、智能体数据(第 9 讲)
逻辑回归、交叉熵PPO 的细节;强化学习的一般理论
评测数据的污染(第 14 讲);安全与隐私(第 18 讲)

0.3 本讲地图 Map

§1  从"续写"到"助手":后训练数据是什么
§2  FLAN:把任务写成指令                                              ← 代码 01 演示 1
§3  InstructGPT 与 RLHF:示范、比较、强化学习                          ← 代码 01 演示 2;代码 03 演示 1–2
§4  让模型自己生成指令:Self-Instruct、Alpaca;少而精 vs 多而杂        ← 代码 02 演示 1–2;代码 01 演示 3
§5  AI 反馈:UltraFeedback、DPO、Constitutional AI                      ← 代码 03
§6  完全开放的配方:Tulu 3                                            ← 代码 02 演示 3
§7  怎样评测聊天模型
§8  一个统一的视角
§9  延伸与前沿
§10–14  小结、常见误区、练习、延伸阅读、下一讲预告

0.4 关于数字

论文的数字来自 slides 和论文摘要。代码的数字来自两个合成世界:

  • 指令世界(instruct_world.py):12 个任务簇 × 4 种任务;每条指令是一个向量 = 所有指令共有的”这是一条指令”方向 + 任务簇的方向 + 任务的特点 + 措辞噪声。学生模型 = “去不去回答”(一个逻辑回归)ד做得对不对”(每种任务一个能力值,来自预训练,大模型高)。一个重要的设定:指令微调主要改变”去不去回答”,对能力只做小幅修改(往示范的正确率挪一小步)——这是把”表面对齐假说”直接写进了模型,代码 01 演示 3 和代码 02 演示 2 的结论依赖它。
  • 回答世界(代码 03 里):每个回答有对不对、有没有帮助、凑字数的程度、长度;人和 AI 评委比较两个回答;奖励模型只能看到嘈杂的”表面迹象”。

代码固定了随机种子,同一台机器上重复运行输出逐字相同。


1. 从”续写”到”助手”

1.1 预训练模型不听指令

预训练的目标是预测下一个 token,模型学会了语法、事实、推理的模式——但它的本能是续写,不是回答。给 GPT-3 一句”把这句话翻译成法语:……”,它可能接着写更多的翻译题,或者写一段关于翻译的文章。

有两种办法让它完成任务:

  • 少样本(few-shot):在提示里先给几个例子(“cat → chat,dog → chien,hello → ?”),模型通过上下文学习照着做。有效,但费 token,而且很依赖例子的选择。
  • 零样本(zero-shot):只给指令。这需要模型从指令本身理解要做什么——预训练模型做得很差,指令微调过的模型擅长这个。

1.2 后训练数据的三种形式

形式数据长什么样教会模型什么代表工作
示范(SFT)(提示, 理想的回答)回答的格式、风格、“去回答”的意愿FLAN、InstructGPT 的 SFT、Alpaca
比较(偏好)(提示, 好的回答, 差的回答)什么样的回答更好InstructGPT 的 RM、UltraFeedback、DPO
奖励(强化学习)提示 + 一个打分的函数(奖励模型或验证器)在打分上越来越高RLHF(PPO)、RLAIF、RLVR(第 9 讲)

和预训练数据相比,后训练数据量小得多(几万到几百万条,而不是几万亿 token),每一条都更贵(人写的示范、人做的比较),也更”有意图”——它直接编码了”我们想要什么样的助手”。

1.3 三个时代(Guha 的框架)

  • 2021–22,聊天机器人:FLAN、InstructGPT、RLHF——本讲;
  • 2023–24,推理:o1、DeepSeek-R1、思维链——第 9 讲;
  • 2025 起,智能体:SWE-Bench、OpenHands——第 9 讲。

2. FLAN:把任务写成指令

2.1 做法

FLAN(Wei et al. 2021,Finetuned Language Models Are Zero-Shot Learners)的想法很简单:NLP 领域有大量现成的有标注数据集(翻译、问答、摘要、情感分析、自然语言推理……),把每个数据集的样本用自然语言指令的模板改写(“这段影评是正面还是负面的?”),然后在这些”指令化”的数据上微调一个预训练模型。Guha 的 slides:62 个 NLP 数据集、12 个任务簇;论文摘要:60 多个用指令模板改写的 NLP 任务,137B 参数的模型。

评测的关键:为了检验”零样本泛化”,每次评测一个任务簇时,训练里去掉整个簇——模型从没见过这一类任务。

2.2 结果和消融

FLAN 在 25 个评测任务里的 20 个上零样本胜过 175B 的 GPT-3 的零样本(Guha 的 slides 说在很多任务上甚至胜过 GPT-3 的少样本)。摘要列出了三个关键因素:

  1. 微调用的数据集(任务簇)的数量:越多,留出的任务上越好;
  2. 模型规模:在他们的实验里,指令微调对足够大的模型才有帮助,小模型在留出的任务上反而可能变差;
  3. 自然语言指令:只用任务的输入、不写指令来微调,效果明显更差。

2.3 在指令世界里

代码 01 演示 1:示范总数固定为 2000 条,训练用的任务簇数从 1 增加到 9,在 3 个从没见过的任务簇上评测(5 组随机选簇的平均):

训练数据去回答小模型·答对大模型·答对
基础模型(不微调)0.1820.0760.139
1 个任务簇0.1940.0810.146
2 个任务簇0.3420.1400.257
4 个任务簇0.4570.1870.345
9 个任务簇0.5370.2180.403
9 个任务簇,不写成指令0.2690.1070.201

机制:只看过少数几类任务,模型学到的”这是一条指令”混杂着这几类任务各自的特点;任务越多样,它越能抓住所有指令共有的东西,举一反三到没见过的任务上。不写成指令(去掉所有指令共有的方向),模型学会了做这 9 类任务,却没学会”听指令”这件事本身。

能力和意愿是两回事:两种尺寸”去回答”的比例相同(这个世界里它只取决于指令数据),大模型答对得多——指令微调主要改变的是意愿和格式,能力来自预训练。(FLAN 关于”小模型反而变差”的发现,这个世界没有模拟。)


3. InstructGPT 与 RLHF

3.1 三阶段的数据

InstructGPT(Ouyang et al. 2022)是 ChatGPT 的前身。它的数据分三步:

  1. 示范:标注员写的提示和 OpenAI API 上用户提交的提示;标注员为它们写理想的回答。用这些(约 1.3 万条,Guha 的 slides)对 GPT-3 做监督微调(SFT)。
  2. 比较:对同一个提示,模型生成几个回答,标注员给它们排序;用这些比较(约 3.3 万对)训练一个奖励模型(RM)——输入一个回答,输出一个分数。
  3. 强化学习:用 PPO 优化模型,让它的回答在奖励模型上得分更高。

约 40 位标注员。数量不大,但每一条都很贵——这是 Self-Instruct、UltraFeedback 想解决的问题。

3.2 SFT 和 RL 的细节(Guha 的 slides)

SFT:把 (提示, 回答) 拼成一个序列(例如 [INST] 提示 [/INST] 回答),用交叉熵训练,只在回答的 token 上算损失(提示部分不算),通常 1–3 个 epoch、学习率 1e-5 到 5e-5。

RL 的循环:从数据集抽一个提示 → 当前的模型(“策略”)生成回答 → 奖励模型打分 → 更新策略,让高分回答的概率变大。PPO 的目标:

max⁡π Ey∼π[r(x,y)]−β KL(π ∥ π原始)\max_{\pi}\ \mathbb{E}_{y \sim \pi}\big[r(x, y)\big] - \beta\,\mathrm{KL}\big(\pi \,\|\, \pi_{\text{原始}}\big)

KL 惩罚让模型不要离原来的模型太远:保持连贯、避免模式坍缩、减少对奖励模型的”钻空子”。β\beta 越大越保守。

3.3 结果

在人工评测里,1.3B 参数的 InstructGPT 的回答比 175B 的 GPT-3 更受欢迎——参数少了 100 倍。InstructGPT 更真实、更少有毒,在公开的 NLP 数据集上几乎没有退步;但它”仍然会犯简单的错误”。2022 年 11 月,同样的技术用在 GPT-3.5 上,支持多轮对话——ChatGPT 两个月有了 1 亿用户。RLHF 被证明能在生产中规模化,聊天成了大模型的主要界面。

代码 01 演示 2:

模型平均效用胜过大模型(基础)
小模型(基础)0.1210.477
大模型(基础)0.1590.500
小模型 + 指令微调0.6150.736
大模型 + 指令微调0.7810.806

(效用:没去回答 0,回答了但错 0.3,回答且对 1。)大模型”会”得多,但大多数时候在续写;对齐解锁了能力,但不创造能力。

3.4 奖励模型:从比较里学分数

奖励模型的标准形式是 Bradley–Terry 模型:

P(A 比 B 好)=σ(r(A)−r(B)),P(\text{A 比 B 好}) = \sigma\big(r(A) - r(B)\big),

用比较数据做逻辑回归。代码 03 演示 1:单条人工比较和”真正更好的那个”一致的比例是 85%(InstructGPT 报告的标注员之间的一致率约 73%);用 1000 到 25.6 万对比较训练线性奖励模型,准确率在 1000 对时就基本到顶了(约 0.737–0.740)——它的上限由它能看到什么决定:它看得到”看起来对不对”这样的表面迹象,看不到真正的对错。更多的比较消除的是标签的噪声,消除不了”看不见”。

3.5 奖励模型会被”钻空子”

奖励模型只是”人的偏好”的一个代理。优化压力越大,代理和真正目标之间的缝隙被利用得越彻底(Goodhart 定律)。

代码 03 演示 2:从 nn 个回答里挑奖励模型分数最高的(best-of-n,一种最简单的”优化”):

nn人标 RM·效用人标 RM·长度AI 标 RM·效用AI 标 RM·长度完美 RM·效用
10.8984720.8984720.898
41.4993851.0736091.783
161.7523441.1737292.150
641.8673161.1418212.335
2561.9392941.1498722.416

用”偏爱长回答”的 AI 评委的标签训练的奖励模型,在 n=16n = 16 之后不再变好、略有下降,挑出的回答越来越长——它在奖励”长”,而最长的回答往往是凑字数的。人标的奖励模型一直在进步,但离”完美的奖励模型”越来越远。强化学习的优化压力比 best-of-n 还大,这就是 KL 惩罚存在的原因。


4. 让模型自己生成指令

4.1 Self-Instruct

人写的数据很贵(InstructGPT:40 位标注员,数百万美元的标注成本)。能不能让模型自己生成? Self-Instruct(Wang et al. 2022):

  1. 从 175 条人写的种子任务出发;
  2. 每次给模型看几条已有的指令当例子(6 条种子 + 2 条已生成的),让它写一条新指令;
  3. 生成这条指令的输入和输出;
  4. 过滤:去掉和已有指令太像的(ROUGE-L ≥ 0.7)和无效的;
  5. 用生成的数据(约 5.2 万条)微调模型自己——“从自己的生成里自举”。

结果:在 Super-NaturalInstructions 上比原始 GPT-3 绝对提高 33%,和 InstructGPT-001 相当;在专家写的新任务上的人工评测里,和 InstructGPT-001 还差 5%。

4.2 Alpaca

Stanford 的 Alpaca(2023)照此用更强的老师(text-davinci-003)生成了 5.2 万条指令数据,微调 LLaMA 7B,花费不到 600 美元。它的意义在于证明了”用强模型生成数据、微调开源小模型”这条路——此后大量的开源聊天模型都是这样来的。

4.3 在指令世界里

代码 02 演示 1:从 8 条种子(只覆盖 2 个任务簇)出发生成 1500 条,在从没生成过的 3 个任务簇上评测:

学生的训练数据种子簇的占比留出簇·去回答留出簇·答对普通文本·误答
(不微调)—0.1820.0760.182
只用 8 条种子1.000.3450.1390.213
Self-Instruct,不过滤0.850.3970.1620.058
Self-Instruct,去掉太像的0.680.5380.2190.076
同样多条人写的(9 个簇均匀)0.220.5850.2380.084

生成的数据确实有用;但老师主要在模仿上下文里的例子,生成的指令严重偏向种子所在的簇(模式坍缩)。“去掉太像的”过滤器把这个偏向降下来,留出簇上的表现明显提高——更多样的指令教会了更通用的”听指令”(和 FLAN 同一个机制)。合成数据的瓶颈在多样性。

4.4 老师的水平,以及”模仿的虚假承诺”

代码 02 演示 2:同样的生成过程,换不同水平的老师:

老师老师的能力学生·全部答对学生·能力(大)学生·能力(小)
弱老师(和学生一样的小模型)0.4320.3150.7450.432
大模型当老师0.7680.3320.7670.454
很强的老师(95% 正确)0.9500.3440.7800.467

(学生自己的能力:小模型 0.432,大模型 0.768。)比学生强的老师把学生的能力拉高一些;比学生弱的老师把它拉低(大模型学生跟着小模型老师学,能力从 0.768 降到 0.745)。但不管老师多强,学生的能力都只挪了一小步——这是这个世界的设定(§0.4)。Gudibande et al.(2023,The False Promise of Imitating Proprietary LLMs)在真实模型上发现了类似的现象:用 ChatGPT 的输出微调的开源模型学会了它的风格,人工评测时看起来很像,但在事实性、推理等需要能力的评测上几乎没有缩小差距。

4.5 少而精 vs 多而杂

LIMA(Zhou et al. 2023)只用 1000 条精心挑选的示范微调 65B 的 LLaMA,效果和用大得多的数据训练的模型相当。他们提出表面对齐假说:模型的知识和能力几乎都来自预训练,对齐只是教它用什么格式和风格说话,所以少量高质量的示范就够了。

代码 01 演示 3(大模型):

示范数据见过的·答对没见过的·答对见过的·能力
(基础模型)0.1400.1390.770
1000 条精选(95% 正确,9 个簇均匀)0.7140.3920.776
5 万条嘈杂(55% 正确,9 个簇均匀)0.6440.4220.704
5 万条精选,但只覆盖 2 个簇0.3630.0470.783
5 万条精选(95% 正确,9 个簇均匀)0.7550.4250.824
  • 1000 条精选已经接近 5 万条精选的效果——学会”听指令”不需要很多数据;
  • 5 万条嘈杂的示范把能力从 0.770 拉低到 0.704(模仿一个更弱的老师);
  • 只覆盖 2 个簇的 5 万条示范,在没见过的任务上比不微调还差(0.047 vs 0.139):它学到的”该回答”几乎只认这两类任务。

后训练数据的三角:质量、多样性、数量。在这个世界里,前两者比数量重要得多。


5. AI 反馈

5.1 UltraFeedback:用 GPT-4 代替人来比较

UltraFeedback(Cui et al. 2023):约 6.4 万个提示(来自 ShareGPT、UltraChat、Evol-Instruct、FLAN、TruthfulQA 等),每个提示由不同的模型生成 4 个回答,让 GPT-4 按帮助性、诚实、指令遵循、真实性等维度打分;摘要的说法是”25 万段对话上超过 100 万条 GPT-4 反馈”。没有人工标注员。它训练出了 Zephyr、Notus 等开源模型。这是”离线”的偏好数据:预先收集好,不需要在线的强化学习循环。

AI 反馈的取舍:便宜、一致、可扩展;代价是评委自己的偏好被写进了奖励里。代码 03 演示 1:偏爱长回答的 AI 评委训练出的奖励模型学到了”长 = 好”,准确率明显更低,而且不随数据增多而改善——系统偏差不会因为数据多而消失。

5.2 DPO:不要奖励模型

RLHF 的管线是 SFT → 奖励模型 → PPO → 最终模型,复杂、昂贵、不稳定。DPO(Direct Preference Optimization,Rafailov et al. 2023)发现可以跳过奖励模型。推导的关键一步:KL 正则的目标

max⁡π Ey∼π[r(y)]−β KL(π ∥ πref)\max_\pi\ \mathbb{E}_{y\sim\pi}[r(y)] - \beta\,\mathrm{KL}(\pi \,\|\, \pi_{\text{ref}})

有一个解析解:

π∗(y)∝πref(y) er(y)/β.\pi^{*}(y) \propto \pi_{\text{ref}}(y)\, e^{r(y)/\beta} .

反过来,奖励可以用策略表示:r(y)=βlog⁡π∗(y)πref(y)+常数r(y) = \beta \log \frac{\pi^*(y)}{\pi_{\text{ref}}(y)} + \text{常数}。把它代入 Bradley–Terry 模型,常数抵消,就得到一个直接在偏好对上训练策略的损失:

−log⁡σ ⁣(βlog⁡π(yw)πref(yw)−βlog⁡π(yl)πref(yl))-\log \sigma\!\left(\beta \log\frac{\pi(y_w)}{\pi_{\text{ref}}(y_w)} - \beta \log\frac{\pi(y_l)}{\pi_{\text{ref}}(y_l)}\right)

其中 ywy_w 是被偏好的回答,yly_l 是不被偏好的。数据格式:(提示, 被选中的回答, 被拒绝的回答)。管线变成 SFT → DPO → 最终模型:更简单、更稳定、不需要奖励模型。代码 03 演示 3 直接用了这个解析解来”训练”模型(练习 1 看 β\beta 的作用)。

5.3 Constitutional AI

Constitutional AI(Bai et al. 2022,Anthropic)想解决的问题:用人工的无害性标签训练出的助手常常回避——对任何敏感的问题都只说”我不能帮你”。它的做法分两个阶段:

  1. 监督阶段:让模型对有害的提示(红队提示)生成回答,再让它按一组原则批评自己的回答、然后修改;用修改后的回答微调模型。
  2. 强化学习阶段:让微调后的模型生成成对的回答,让模型按原则判断哪个更好;用这些 AI 偏好训练偏好模型,再做强化学习——RLAIF(从 AI 反馈的强化学习)。

人只提供了一份原则清单(“宪法”),例如”选择最不有害的回答”、“选择最有帮助、同时诚实的回答”——没有一条人工的有害性标签。结果是一个无害但不回避的助手:它会处理有害的请求,解释自己为什么反对。论文还发现思维链式的推理能提高 AI 判断的质量和透明度。

代码 03 演示 3(对有害请求的三种回答:照做、回避式拒绝、解释原因并给出安全的替代):

偏好数据照做回避式拒绝解释并给替代真正效用
(基础模型)0.550.350.10−1.11
只看”有没有帮助”的人工比较1.000.000.00−2.00
只看”无不无害”的人工比较0.001.000.00−0.20
Constitutional AI 的原则0.000.240.76+0.41

对只看无害性的标注员来说,“我不能帮你”最保险;按原则(先无害,再在无害的回答里选更有帮助、会解释的)比较,模型学会了解释原因。注意:这个演示里”原则”是我们写进打分函数的——AI 反馈的好坏取决于原则写得好不好、AI 能不能可靠地执行它们。


6. 完全开放的配方:Tulu 3

6.1 为什么重要

学生报告的开场:闭源模型有先进的多阶段后训练、数百万条数据,但透明度很低;Tulu 3 之前的开源后训练配方更简单、数据有限、往往过时,能力落后。Tulu 3(Lambert et al. 2024,Allen AI + 华盛顿大学)是一个完全开放的后训练配方:数据、模型、训练代码、评测框架全部公开;在 Llama 3.1 的 8B、70B、405B 基础模型上,结果超过了 Llama 3.1、Qwen 2.5、Mistral 的 instruct 版本,甚至超过了 GPT-4o-mini 和 Claude 3.5 Haiku。

6.2 四个阶段

  1. 数据整理:
    • 提示来自公开数据集,兼顾多样性(WildChat、Open Assistant 这样的真实用户对话,让模型适应不常见的输入、避免遗忘)和目标能力(复杂推理、编程、精确的指令遵循、拒绝与安全;例如 OpenMathInstruct、TableGPT),并注意数据来源和许可;
    • 合成数据:生成多样、高质量的数据并不容易(语言模型容易模式坍缩)。Tulu 3 用人设驱动的方法:以 Persona Hub 的约 25 万个人设为条件,针对目标能力生成——约 22 万道数学题、3.5 万道编程题、3 万条精确指令遵循;用 GPT-4o 和 Claude 3.5 生成;
    • 去污染:用 8-gram 匹配;一条训练样本和一条测试样本的 token 重叠超过 50% 算”显著重叠”;如果一个训练集有显著重叠的样本超过开发 / 未见评测集的 2%,就判为污染,删掉整个数据集或者相关的样本。
  2. SFT:约 94 万条指令-回答对,针对落后于最强模型的能力精心混合。8B 模型在 32 张 H100 上训练 6 小时,70B 在 64 张 H100 上训练 50 小时。
  3. DPO:约 35 万条偏好对,混合了在策略(on-policy,SFT 模型自己的生成)和离策略的数据;用长度归一化的 DPO。
  4. RLVR(可验证奖励的强化学习):在答案能被确定性地检查的任务上(GSM8K、MATH、IFEval 的约束),答对才给奖励。

6.3 发现

SFT:

  • 去掉多样的真实对话(WildChat),大多数评测指标都下降;
  • 人设驱动的合成数据提升了目标能力;
  • 数据越多越好,但用到完整混合的约 75% 之后收益递减;
  • 安全数据提升了安全指标,而不损害一般表现;
  • 对话模板的细节也有一点影响。

DPO:

  • 增加不同提示的数量能提升效果;
  • 用同样来源的新提示,比重复使用 SFT 阶段的提示略好;
  • 加入在策略的数据(SFT 模型自己的生成)能提升效果;
  • 当评委时,GPT-4o 略好于 Llama 405B 和 GPT-4 Turbo;
  • 长度归一化的 DPO 好于原始的 DPO 和 SimPO;
  • 他们最好的偏好数据混合好于 UltraFeedback。

RLVR(8B):GSM8K 84.3% → 87.6%,MATH 42.0% → 43.7%,IFEval 81.1% → 82.4%。价值模型用一个通用奖励模型初始化效果最好,但训练时只用可验证的奖励。

没有成功的尝试:在线 DPO(不断用当前模型生成新的偏好数据)在 GSM8K 和 MATH 上没有提升甚至变差;拒绝采样(生成 n 个回答、用奖励模型挑最好的再训练)只有很小的提升。

评测:Tulu 3 区分”开发评测集”(训练时用来做决定)和”未见评测集”(只在最后用一次)。发现:很多模型在 IFEval 上过拟合了;Tulu 3 在未见的评测上泛化得不错。这和第 1 讲”测试集反复使用”的问题是同一回事。

6.4 在指令世界里:人设

代码 02 演示 3:以随机人设为条件生成(每个人设关心 3 种任务),vs 模仿上下文例子生成:

生成方式N = 30N = 100N = 300最多的簇占比
模仿上下文例子(Self-Instruct)10 种任务18 种任务29 种任务0.44
以随机人设为条件26 种任务33 种任务36 种任务0.14

用 300 条生成的数据训练小模型,留出簇上的答对率:模仿上下文 0.136,人设驱动 0.246。人设是一个廉价的多样性来源:给语言模型一个具体的角色,能把它推到分布的不同角落。


7. 怎样评测聊天模型

FLAN、Super-NaturalInstructions 这样的任务有标准答案;“一个好的聊天助手”没有。常用的办法是两两比较的胜率(AlpacaEval、MT-Bench):模型回答一组测试提示,和参照模型(例如 GPT-4)的回答比较,由人或 LLM 评委判断哪个更好,胜率 = 被偏好的比例。Guha 的 slides 列了一组 AlpacaEval 的胜率(2024):GPT-4 Turbo 50.0%、Claude 3 Opus 40.5%、Llama 3 70B 34.4%、GPT-3.5 9.0%、Alpaca 7B 5.9%。

问题和 §5.1 一样:LLM 评委有偏差——最明显的是偏爱长回答。AlpacaEval 后来推出了”长度控制”的版本来校正这一点。用 LLM 评委评测、再用同一类 LLM 评委的偏好训练模型,偏差会被放大(代码 03 演示 2)。第 14 讲会系统地讨论评测数据。


8. 一个统一的视角(补充)

把这一讲放在一起,后训练数据的演变是信号来源的演变:

信号例子好处代价
现成的任务数据FLAN便宜、量大、有标准答案格式单一、不像真实的用户请求
人写的示范和比较InstructGPT最接近”人想要什么”贵、慢、有噪声(一致率约 73%)
模型生成的示范Self-Instruct、Alpaca、Tulu 3 的人设数据便宜、可以定向补能力模式坍缩、学生上限受老师限制
AI 的比较UltraFeedback、Constitutional AI便宜、一致、可以写成原则评委的偏差被写进奖励
可验证的结果RLVR(Tulu 3;第 9 讲)没有”钻空子”的评委(如果验证器可靠)只适用于答案能检查的任务

和预训练一样,三个维度反复出现:质量(示范对不对)、多样性(覆盖多少种任务和请求)、数量。和预训练不同的是:后训练的数据直接编码了价值判断——“有帮助”、“无害”、“诚实”由谁定义、怎样权衡,都写在数据里。


9. 延伸与前沿 · Beyond the original lecture

本节是我补充的。

  • 在策略 vs 离策略的偏好数据。Tulu 3 发现加入模型自己的生成有帮助;理论上,DPO 的推导假设偏好数据来自参考策略附近,离得太远的数据会让优化失真。后续的很多方法(迭代 DPO、在线 RL)都在处理这个问题。
  • 奖励模型的扩展律。Gao et al.(2022)系统地研究了”对奖励模型过度优化”:真实的奖励随优化强度先升后降,奖励模型越大、数据越多,转折点来得越晚。
  • 偏好数据里的价值观。谁来标注、按什么标准,直接决定了模型的价值取向;Constitutional AI 把标准写成了可读的原则,是让这个选择更透明的一种尝试(第 19 讲)。
  • 从后训练到推理。Tulu 3 的 RLVR 只用了最简单的可验证任务;第 9 讲的 DeepSeek-R1 把同样的思路推到了数学、代码的长推理上,并发现模型能”自己学会思考”。

10. 小结 · Summary

  1. 后训练数据有三种形式:示范(SFT)、比较(偏好)、奖励(RL);量小、贵、直接编码”我们想要什么样的助手”。
  2. FLAN:把 60 多个 NLP 数据集写成指令微调 137B 模型,零样本在 25 个任务里的 20 个上胜过 GPT-3;任务簇越多、写成自然语言指令,泛化越好。
  3. InstructGPT:约 1.3 万条示范 + 3.3 万对比较 + PPO(带 KL 惩罚);1.3B 的 InstructGPT 胜过 175B 的 GPT-3——对齐解锁能力,不创造能力。
  4. 合成指令数据:Self-Instruct(175 条种子 → 5.2 万条,+33%)、Alpaca(不到 600 美元);瓶颈是多样性(模式坍缩),学生的能力受老师限制。LIMA:1000 条精选示范就够——“表面对齐假说”。
  5. AI 反馈:UltraFeedback(GPT-4 打分)、Constitutional AI(原则 + RLAIF,无害而不回避);便宜可扩展,但评委的偏差会被写进奖励;奖励模型会被”钻空子”。
  6. DPO:KL 正则 RL 的解析解 π∗∝πrefer/β\pi^* \propto \pi_{\text{ref}} e^{r/\beta} 让偏好可以直接训练策略。
  7. Tulu 3:完全开放的四阶段配方(数据整理 → SFT 94 万条 → DPO 35 万对 → RLVR);多样的真实对话、人设驱动的合成数据、在策略的偏好数据、去污染、开发 / 未见评测的区分。

11. 常见误区 · Common pitfalls

  1. “指令微调让模型变聪明了。” 主要改变的是意愿和格式;能力来自预训练(LIMA、代码 01 演示 2–3)。
  2. “示范越多越好。” 嘈杂的示范会把能力拉低;覆盖窄的示范会伤害泛化(代码 01 演示 3)。
  3. “用最强的模型生成数据,学生就能追上它。” 学生学到风格,不一定学到能力(Gudibande et al.)。
  4. “奖励模型的分数越高,回答越好。” 优化压力大了,奖励模型会被钻空子(代码 03 演示 2)。
  5. “AI 反馈和人的反馈差不多。” AI 评委有系统偏差(偏爱长回答等),数据多了也不会消失。
  6. “无害就是拒绝。” 只奖励无害会训练出回避的助手;Constitutional AI 的目标是无害而不回避。
  7. “DPO 不需要偏好数据的质量。” DPO 绕开的是奖励模型,不是数据:偏好对的来源(在策略 / 离策略)、长度偏差同样重要。
  8. “在 IFEval 上分数高就是会听指令。” Tulu 3 发现很多模型在 IFEval 上过拟合了——要有未见过的评测。

12. 练习 · Exercises

练习 1(KL 正则的最优解) 一个模型对有害请求的三种回答的初始概率是 πref=(0.55,0.35,0.10)\pi_{\text{ref}} = (0.55, 0.35, 0.10)(照做、回避、解释),奖励模型给的分数是 r=(−1,0.5,1)r = (-1, 0.5, 1)。(a) 用 π∗∝πrefer/β\pi^* \propto \pi_{\text{ref}} e^{r/\beta} 算 β=0.25,0.5,1,2,10\beta = 0.25, 0.5, 1, 2, 10 时的最优策略。(b) β\beta 越小会怎样?越大会怎样?(c) 为什么 β=0.5\beta = 0.5 时”回避”仍然是最常见的回答,尽管”解释”的奖励更高?

参考答案

(a) β=0.25\beta = 0.25:(0.001, 0.321, 0.678);β=0.5\beta = 0.5:(0.042, 0.539, 0.419);β=1\beta = 1:(0.192, 0.549, 0.259);β=2\beta = 2:(0.352, 0.474, 0.174);β=10\beta = 10:(0.510, 0.377, 0.113)。

(b) β→0\beta \to 0:完全按奖励选,只剩奖励最高的那种回答(KL 很大,1.26)——如果奖励模型有偏差,偏差会被完全放大。β→∞\beta \to \infty:几乎不动,保持原来的模型(KL ≈ 0.003)。β\beta 是”相信奖励模型多少”和”相信原来的模型多少”之间的旋钮。

(c) 因为初始概率差得多:0.35⋅e1≈0.950.35 \cdot e^{1} \approx 0.95 vs 0.10⋅e2≈0.740.10 \cdot e^{2} \approx 0.74。KL 正则让模型”尽量少改”——一个原来很少出现的行为,需要足够大的奖励优势(或足够小的 β\beta)才能成为主流。这也是为什么 Constitutional AI 先做一轮 SFT(用修改后的回答),把”解释”的初始概率提上来。

练习 2(Bradley–Terry 和标签噪声) 代码 03 里,人的标签是 P(A 更好)=σ(Δu/0.35)P(\text{A 更好}) = \sigma(\Delta u / 0.35)。(a) 两个回答的真正效用差 Δu=0.35\Delta u = 0.35 时,标注员选对的概率是多少?Δu=0.1\Delta u = 0.1 呢?(b) 如果你想用多个标注员投票把 Δu=0.1\Delta u = 0.1 的这对比较判对的概率提高到 90%,大约要几个人?(c) 这对设计比较数据有什么启示?

参考答案

(a) σ(1)≈0.731\sigma(1) \approx 0.731;σ(0.1/0.35)=σ(0.286)≈0.571\sigma(0.1/0.35) = \sigma(0.286) \approx 0.571。

(b) 每人正确的概率 p=0.571p = 0.571,多数投票正确的概率随人数 kk 增加:近似地,需要 kk 使 (p−0.5)k/p(1−p)≈1.28(p - 0.5)\sqrt{k}/\sqrt{p(1-p)} \approx 1.28(正态近似的 90% 分位),k≈1.28×0.495/0.071≈8.9\sqrt{k} \approx 1.28 \times 0.495 / 0.071 \approx 8.9,k≈80k \approx 80 人。

(c) 差别很小的比较几乎是噪声,花很多人力也很难判准;与其在难以区分的对上反复标注,不如让候选回答之间差别更大(例如来自不同的模型、不同的采样温度——UltraFeedback 用 4 个不同的模型生成回答),或者只用一个人标、靠大量不同的提示来平均(奖励模型从大量嘈杂的比较里学方向,代码 03 演示 1)。

练习 3(少而精,但不多样) 代码 01 演示 3 里,1000 条精选示范(9 个簇均匀)在没见过的任务上是 0.392。如果这 1000 条只覆盖 2 个簇呢?先预测,再看在代码副本里运行的结果。

参考答案(实际运行结果)

1000 条精选、只覆盖 2 个簇:见过的任务(9 个簇)上 0.340,没见过的任务上 0.049——比不微调(0.139)还差,和”5 万条精选、只覆盖 2 个簇”(0.047)几乎一样。精选解决了质量,解决不了多样性;而在泛化到新任务这件事上,多样性才是瓶颈。LIMA 的 1000 条示范之所以有效,一个重要原因是它们被刻意挑选成覆盖多种多样的请求。

练习 4(Self-Instruct 的模式坍缩) 代码 02 演示 3 里,模仿上下文例子生成的 300 条指令只覆盖 29 种任务,最多的簇占 44%。(a) 用”每一步以概率 ε=0.15\varepsilon = 0.15 想出一种随机的新任务、否则模仿一个上下文例子”解释为什么覆盖得慢。(b) Self-Instruct 的”去掉太像的”过滤器和 Tulu 3 的人设,分别从哪个环节增加了多样性?(c) 你还能想到什么办法?

参考答案

(a) 只有约 15% 的生成是”探索”,其余 85% 都在复制池子里已有的任务——而池子里种子任务占多数(上下文的 8 条里 6 条是种子)。所以生成的分布被种子”锁住”,新任务只能以每步约 0.15 × (没见过的任务的比例) 的速度慢慢加进来。

(b) 过滤器在接受环节:太像的生成被扔掉,相当于压低了”模仿”的权重(但它浪费了大量生成,代码里阈值太严时甚至凑不够数)。人设在生成环节:直接改变了老师”想写什么”的分布,从源头上更均匀。

(c) 例如:按任务类型 / 话题做分层抽样再生成(Tulu 3 针对目标能力分别生成);用真实用户的提示做种子(WildChat);在生成后按嵌入聚类、对稀少的簇上采样;让老师在每一步看到”已经有哪些类型、还缺什么”。

练习 5(设计) 你要为一个编程助手收集偏好数据。列出:(a) 用人工比较、AI 比较、可验证的信号(单元测试)各自适合标注什么;(b) 每种信号可能有的偏差;(c) 你会怎样检测奖励模型被钻空子。

参考答案(要点)

(a) 单元测试:代码能不能跑、结果对不对(最可靠,但只覆盖有测试的部分);AI 比较:代码风格、可读性、注释、解释是否清楚(便宜、量大);人工比较:对真实开发者最重要但难以形式化的东西(是否理解了需求、是否过度设计、安全隐患),以及校准 AI 评委。

(b) 单元测试:测试不全时,“通过测试”不等于”正确”(第 9 讲 SWE-smith 的演示);AI 评委:偏爱长代码、多注释、自己熟悉的写法;人工:标注员水平不一,偏爱看起来专业的代码,对难题的判断噪声很大。

(c) 留一个”金标准”评测(人工仔细检查或更完整的测试)定期抽查;监控回答长度、注释比例、测试覆盖的”可疑”变化;对比”奖励模型分数上升”和”金标准分数”的走势(Gao et al. 的过度优化曲线);在强化学习里用 KL 惩罚并调 β\beta。


13. 延伸阅读 · Further reading

原课阅读

  • Wei et al., Finetuned Language Models Are Zero-Shot Learners(FLAN,2021):arXiv:2109.01652。
  • Ouyang et al., Training language models to follow instructions with human feedback(InstructGPT,2022):arXiv:2203.02155。
  • Bai et al., Constitutional AI: Harmlessness from AI Feedback(2022):arXiv:2212.08073。
  • Wang et al., Self-Instruct: Aligning Language Models with Self-Generated Instructions(2022):arXiv:2212.10560。
  • Taori et al., Alpaca: A Strong, Replicable Instruction-Following Model(Stanford CRFM 博客,2023)。
  • Cui et al., UltraFeedback: Boosting Language Models with High-quality Feedback(2023):arXiv:2310.01377。
  • Lambert et al., Tulu 3: Pushing Frontiers in Open Language Model Post-Training(2024):arXiv:2411.15124。

本讲补充

  • Rafailov et al., Direct Preference Optimization: Your Language Model is Secretly a Reward Model(2023)。
  • Zhou et al., LIMA: Less Is More for Alignment(2023)。
  • Gudibande et al., The False Promise of Imitating Proprietary LLMs(2023)。
  • Gao et al., Scaling Laws for Reward Model Overoptimization(2022)。
  • Ge et al., Scaling Synthetic Data Creation with 1,000,000,000 Personas(Persona Hub,2024)。

和本目录其他课程的联系


14. 下一讲预告 · Next lecture

聊天机器人在复杂任务上碰到了天花板:数学竞赛、编程竞赛、博士水平的科学题、多步规划。答案是让模型先思考、再回答——而思考的数据从哪里来?

第 9 讲:后训练数据 II——推理轨迹、智能体数据与强化学习环境。 OpenAI o1 和 DeepSeek-R1:用可验证的奖励做强化学习,模型自己学会了长推理;开放的复现走两条路——强化学习和蒸馏推理轨迹(s1 的 1000 条精选、OpenThoughts 的上千次消融:问题来源、老师选择、过滤、每题几个答案);Llama-Nemotron、OLMo 3 的开放推理模型;智能体的数据:SWE-Bench、SWE-Gym 的真实代码仓库任务,SWE-smith 自动合成任务环境。代码会造一个可验证的推理任务世界,研究 GRPO 的”难度过滤”、老师的选择,并真的用 Python 的语法树给一个小代码库注入 bug、用测试来验证——亲手做一个迷你的 SWE-smith。

← 返回课程目录