第 1 讲:课程导论——为什么要从人类偏好中学习?

Machine Learning from Human Preferences · Lecture 01。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

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

本篇目录

对应:Stanford CS329H Fall 2026 Lecture 1(9/23 Course introduction & motivation,Sanmi Koyejo 主讲)。Fall 2026 的幻灯片编写时尚未公开,本讲依据课程教材 Machine Learning from Human Preferences(Truong、Haupt、Koyejo)的导论、第 1 章 1.1–1.3 节和教材配套的导论幻灯片,并补充了原始论文。 配套代码:code/lecture01/(只用 Python 标准库,每个文件约 1 秒跑完) 预计阅读时间:3~4 小时(含运行代码)


0. 本讲导航

0.1 学完本讲,你应该能够

  1. 用一句话说出这门课研究什么,并举出至少五个”从人的偏好里学习”的应用领域,说出每个领域里”偏好数据”长什么样。
  2. 说出三个从偏好中学习的动机:目标写不出来、比较比打分可靠、评判比创作容易;并能说清比较的代价(丢掉强度信息)。
  3. 写出 Bradley–Terry 模型 P(a≻b)=σ(sa−sb)P(a \succ b) = \sigma(s_a - s_b),解释它和”效用 + 噪声”的关系,以及为什么只有分数的差值有意义。
  4. 画出大语言模型对齐的流程(预训练 → 监督微调 → 偏好数据 → 奖励模型 → RLHF / DPO),写出奖励模型的损失、KL 约束的目标和它的解析解。
  5. 解释”奖励过度优化”:为什么代理奖励一路上升,真实质量却先升后降;为什么换成 DPO 也解决不了数据里的偏差。
  6. 说出从偏好中学习的六个挑战,以及它们分别由课程的哪个单元处理。
  7. 说出这个领域的几条历史源头(心理测量、经济学、统计与体育、信息检索与强化学习)。
  8. 说出这门课的考核方式,解释什么是”预分析计划”、为什么要先写它。

0.2 先修知识

知识点用在哪里最低要求
Python 基础全部代码会读函数、循环、字典;不熟的语法代码注释里会讲
概率基础第 2、3 节随机变量、期望、条件概率、独立;累积分布函数(CDF)的概念
指数与对数第 3 节知道 exe^x、log⁡x\log x 的基本性质;σ(x)=1/(1+e−x)\sigma(x) = 1/(1+e^{-x}) 第 3.4 节会讲
机器学习基础第 3 节知道”损失函数""梯度下降""过拟合”是什么意思(CS229 或 CS224N 第 1~3 讲的程度)
语言模型第 3 节知道语言模型是”根据前文预测下一个词”(CS224N 第 5、9 讲;不了解也能读懂本讲)

0.3 本讲地图

第1节  这门课在学什么:为"被人使用的系统"做优化;偏好数据无处不在
第2节  为什么要从偏好中学习:三个动机                          ← 代码 01
第3节  贯穿全课的例子:大语言模型的对齐;一个 1952 年的公式      ← 代码 02、03
第4节  难在哪里:六个挑战                                      ← 代码 04
第5节  一段简短的历史
第6节  课程地图:五个单元
第7节  课程安排与考核:项目、测验、口试;预分析计划
第8–12节 小结、与考核的关系、练习、延伸阅读、下一讲预告

0.4 本讲的玩具世界:一个”写作助手”

要研究”从人的偏好里学到的东西靠不靠得住”,我们必须确切地知道三件事:每个选项”真正”有多好;每个人的判断被什么带偏了;不同的人口味有什么不同。用真实的标注数据,这三件事一件都说不清——真实世界里只有一堆人的意见,没有标准答案。

所以代码 toy_world.py 造了一个小世界:一个写作助手收到提示词”请向编程初学者解释:什么是递归?“,有 8 个候选回答:

回答描述真实质量字数详细程度花哨程度
A简洁准确:一句话定义 + 阶乘例子 + 提醒”必须有基例”0.901600.200.0
B详尽教程:定义、套娃比喻、阶乘与斐波那契、调用栈图示、常见错误0.844800.950.0
C比喻生动:用”排队问前面的人”讲递归,再配一个小例子0.802600.500.2
D表面功夫:先夸问题问得好,满屏标题、表情和加粗,内容正确但空泛0.509500.701.0
E注水长文:同一个定义换着说法重复三遍,堆满术语0.308200.750.3
F只有代码:贴一段代码,一句解释都没有0.38800.050.0
G自信但有错:基例写错(会无限递归),语气却十分笃定0.223000.450.1
H答非所问:讲成了 for 循环(迭代)0.102400.400.1

“真实质量”相当于一位细心的专家给的分,是只有模拟实验才有的上帝视角:算法不许偷看,只能拿来评估。

扮演”人”的是一群模拟标注员。每个人心里对每个回答有一个效用(utility,可以理解为”喜欢的程度”):

效用=6×真实质量+b长度⋅log⁡字数200⏟长度偏差+b花哨⋅花哨程度⏟格式偏差+t⋅(详细程度−0.5)⏟口味\text{效用} = 6 \times \text{真实质量} + \underbrace{b_{\text{长度}} \cdot \log\frac{\text{字数}}{200}}_{\text{长度偏差}} + \underbrace{b_{\text{花哨}} \cdot \text{花哨程度}}_{\text{格式偏差}} + \underbrace{t \cdot (\text{详细程度} - 0.5)}_{\text{口味}}
  • 专家:只看真实质量,b长度=b花哨=t=0b_{\text{长度}} = b_{\text{花哨}} = t = 0。
  • 众包标注员:平均来说喜欢长回答(b长度≈0.8b_{\text{长度}} \approx 0.8)、喜欢花哨的格式(b花哨≈2b_{\text{花哨}} \approx 2),口味 tt 因人而异。
  • 第 4.6 节还会用到两群口味相反的人:简洁派(t=−4t = -4)和详尽派(t=+4t = +4)。注意:口味不同不是偏差,是合理的差异。

标注员做二选一时,不是每次都选效用高的那个,而是按一个概率选择——这个概率公式就是第 3.4 节的 Bradley–Terry 模型。

关于本讲的数字:讲义里有两类数字,请注意区分。

  • 论文和报道里的真实数字(例如”13 亿参数的 InstructGPT 比 1750 亿参数的 GPT-3 更受欢迎”),会注明出处。
  • 模拟实验的数字(例如”奖励过度优化时真实质量从 0.684 跌到 0.500”),都来自 01~04 号代码的实际输出(固定随机种子,你运行会得到同样的结果,在 Python 3.9 和 3.13 上逐字相同)。偏差的大小是我们设定的参数,它们说明的是机制,不代表任何真实的标注员或模型。

1. 这门课在学什么

1.1 一句话:为”被人使用的系统”做优化

CS329H 的课程描述只有两句话,大意是:

研究怎样优化被人使用的系统的机制。它的技术和概念基础分散在心理测量学、离散选择、强化学习、信息检索和规范理论里,这门课把它们放在一起讲。

“被人使用的系统”无处不在:推荐系统给你推视频,搜索引擎给你排网页,聊天助手回答你的问题,外骨骼帮病人走路。它们有一个共同的难处:系统好不好,最终只能由人来判断,而人往往说不清”好”的定义。

传统的机器学习默认目标是已知的:分类有标签、回归有数值、游戏有分数。这门课处理的是另一种情况:

传统机器学习:     写下目标(损失 / 奖励) ──► 优化模型
从偏好中学习:     人的选择、比较、点击、投票 ──► 学出"人想要什么" ──► 优化模型
                                             (这一步本身就是一个统计问题)

中间那一步——从人的行为里把”人想要什么”学出来——就是这门课的主题。它看起来只是”多了一步”,实际上带来了一连串问题:人是有噪声的;不同的人想要不同的东西;人的行为不一定反映他的偏好;问人很贵;很多人的偏好未必能合成一个。这些问题分别构成了课程的五个单元(第 6 节)。

1.2 一个让人吃惊的结果:小 100 倍的模型赢了

2022 年,OpenAI 发表了 InstructGPT 的论文(Ouyang 等,Training language models to follow instructions with human feedback)。论文摘要里有一句话,可能是近几年机器学习里被引用最多的结论之一:

在人工评估中,13 亿参数的 InstructGPT 的输出,比 1750 亿参数的 GPT-3 的输出更受欢迎,尽管参数少了 100 多倍。

InstructGPT 和 GPT-3 用的是同一类模型,区别只在于 InstructGPT 多做了一步:用人类的偏好数据训练。标注员拿到同一个提示词的几个回答,把它们从好到坏排序;然后用这些排序训练一个”奖励模型”,再用强化学习让语言模型去追求高奖励。几个月后发布的 ChatGPT 用的也是这套方法。

这件事说明了两点:

  1. “会预测下一个词”和”对人有帮助”是两回事。GPT-3 读过海量的文本,知识很多,但它的训练目标是”续写”,而不是”帮你回答问题”(第 3.1 节)。
  2. 人的偏好是一种非常高效的训练信号。InstructGPT 训练奖励模型用的提示词只有 3 万多个(每个提示词配 4~9 个回答的排序),和预训练的几千亿个词相比微不足道,却改变了模型的行为。

但这个成功也带来了这门课要认真对待的问题:偏好数据是谁标的?标注员之间意见一致吗?模型学到的是”真正的好”,还是标注员的某些习惯?第 3.5、4.5 节会看到,这些问题的答案并不总是让人放心。

1.3 偏好数据无处不在

语言模型对齐只是最新、最显眼的例子。教材第 1 章开头列出了很多领域,它们收集的数据形式不同,但本质上都是”人在几个选项之间做了选择”:

领域观察到的行为数据形式想学出什么
推荐系统(Netflix、Spotify)点击、购买、评分、观看时长、跳过接受 / 拒绝;从展示的几个里选一个用户对内容的喜好
搜索引擎在结果列表里点了第 3 条,跳过了第 1、2 条“点击的 ≻ 跳过的”(Joachims 2002)网页和查询的相关性
机器人人看两段机器人动作的录像,说哪段更好两两比较人心里的”好动作”奖励函数
语言模型对齐标注员比较同一个提示词的几个回答两两比较、排序奖励模型
体育与游戏(国际象棋)谁赢了谁两两比较选手的实力(Elo 等级分)
选举、评审、民意调查选票上的排序、论文评审的打分排序、打分群体的偏好(第五单元)
医疗病人在几种治疗方案之间的选择多选一病人看重什么(疗效、副作用、费用)
度量获取专家比较两个分类器的混淆矩阵两两比较专家心里的评价指标(Hiranandani 等 2019)

1.4 共同的数学结构

表里的数据形式五花八门,但它们共享一个结构:

每个选项有一个看不见的效用(utility)ss;人在选项之间做选择时,倾向于选效用高的,但不是每次都选;效用差得越多,选高的那个的概率越大。

这个结构最常用的数学形式,就是 Bradley–Terry 模型:

P(a≻b)=σ(sa−sb)=11+e−(sa−sb)P(a \succ b) = \sigma(s_a - s_b) = \frac{1}{1 + e^{-(s_a - s_b)}}

(a≻ba \succ b 读作”aa 胜过 bb“或”aa 比 bb 更受偏好”。)国际象棋的 Elo 等级分、Chatbot Arena 的模型排行榜、RLHF 的奖励模型、DPO 的损失函数,背后都是这个公式。第 3.4 节和代码 02 会用模拟看清它从哪里来;第 2~5 讲会把它彻底讲透。

1.5 这门课和其他课的关系

  • 如果你学过 CS234(强化学习)第 9 讲或 CS336(从零构建语言模型)第 15、16 讲,你已经见过 RLHF 和 DPO 的算法。那些课侧重”怎么训练”;这门课侧重偏好本身:人的选择怎样建模(第一单元),数据要多少、怎么问(第二、三单元),学到的东西什么时候可信(第四单元),很多人的偏好怎样合起来(第五单元)。
  • 这门课会用到经济学(离散选择、社会选择、机制设计)、心理学(心理测量、行为偏差)和统计学(实验设计、贝叶斯推断)的工具。不要求你预先学过,遇到时从零讲起。

2. 为什么要从偏好中学习

2.1 动机一:目标很难写下来

直觉。设想你要训练一个”讲笑话”的模型。损失函数怎么写?“包含双关语加 1 分”?“有出人意料的结尾加 2 分”?你很快会发现,任何你能写下来的规则,都能被一个一点也不好笑的笑话满足。“有帮助的回答""自然的机器人动作""好的摘要”都是这样:人一看就知道好不好,却说不出”好”的定义。

例子。代码 01_why_learn_from_preferences.py 的演示 1 用三条”看起来合理”的规则给 8 个回答排序,再和真实质量比较(肯德尔 τ\tau:两个排名的一致程度,1 表示完全一致,0 表示几乎无关):

规则τ\tau排名(从高到低)第一名的真实质量
规则 1:越长越好0.00D > E > B > G > C > H > A > FD = 0.50
规则 2:关键词越多越好0.07E > D > B > G > A > C > F > HE = 0.30
规则 3:讲究的组合规则(有代码 +2,每个关键词 +1,花哨 −3,长度适中 +1)0.11B > E > G > A > D > H > C > FB = 0.84
(真实质量)1.00A > B > C > D > F > E > G > HA = 0.90

规则 3 是一个工程师认真想过的规则,它的第一名(B)也确实不错,但整体排名和真实质量几乎无关:它把注水的 E 排第二,把”自信但有错”的 G 排在最好的 A 前面。原因是它看不见内容对不对、是不是答非所问——而这恰恰是”有没有帮助”里最重要的部分。

为什么这很危险:古德哈特定律。更要紧的是,规则不只是用来”评价”,还会被用来”优化”。如果我们训练模型去生成规则分数最高的回答,模型会被推向规则的第一名——也就是规则和真实目标偏离最大的地方。经济学家 Goodhart(1975)观察到,一个统计指标一旦被当作政策目标,它和原本想衡量的东西之间的关系就会瓦解;人类学家 Strathern 把它总结成一句流传很广的话:

当一个指标变成目标,它就不再是一个好指标。

管理学里也有一篇经典文章叫《奖励 A 却指望得到 B 的愚蠢》(Kerr 1975)。在机器学习里,这种现象叫规格博弈(specification gaming)或奖励黑客(reward hacking):模型完美地优化了你写下的目标,却不是你想要的东西。

所以:既然写不出”好”的定义,不如换一个方向——让人直接告诉我们”哪个更好”,再从这些判断里学出一个目标。第 3.5 节会看到,这样学出来的目标同样会被古德哈特定律咬一口,但至少它比手写的规则接近得多。

2.2 动机二:为什么是”比较”,而不是”打分”?

直觉。既然要问人,为什么不直接请人给每个回答打 1~10 分?打分看起来信息更多(不但知道谁好,还知道好多少),收集起来也更方便(读一个回答就能打一个分)。

问题在于:每个人的尺子不一样。有人严格,好回答也只给 6 分;有人宽松,一般的回答也给 8 分;有人爱打极端分,有人分数都挤在 5~7 分之间;同一个人在一次标注中还会越打越松。把不同尺子量出来的分数直接平均,结果的一部分反映的是”运气:谁给你打的分”。

一个公式说清楚为什么比较能解决这个问题。把标注员 ii 给回答 jj 的打分写成

打分ij=ai⏟宽严+bi⏟尺度⋅uj+噪声ij\text{打分}_{ij} = \underbrace{a_i}_{\text{宽严}} + \underbrace{b_i}_{\text{尺度}} \cdot u_j + \text{噪声}_{ij}

其中 uju_j 是回答 jj 的真实效用,aia_i 是这个人的”零点”(严格的人 aia_i 小),bi>0b_i > 0 是他的”单位”。同一个人给两个回答打分,相减:

打分ij−打分ik=bi (uj−uk)+(噪声ij−噪声ik)\text{打分}_{ij} - \text{打分}_{ik} = b_i \, (u_j - u_k) + (\text{噪声}_{ij} - \text{噪声}_{ik})

宽严 aia_i 消掉了;尺度 bib_i 只放大或缩小差值,不改变正负号。所以只要问”jj 和 kk 哪个好”,答案就不受这两者影响。第 4 讲会看到,这正是 Rasch 模型里”用户参数在成对比较中抵消”的严格形式。

例子。代码 01 的演示 3 先看两个标注员:一个严格(宽严 −2、尺度 0.6),一个宽松(宽严 +2、尺度 1.4),读同样的 3 个回答:

严格的标注员:A= 5分  C= 4分  F= 2分    排序:A > C > F
宽松的标注员:A=10分  C=10分  F= 5分    排序:C > A > F

分数差得很远,排序基本一致。还有两个细节值得注意:宽松的人把 A 和 C 都打了 10 分——碰到了量表的上限,分数再也分不出谁好;两人对 A、C 的先后判断不同,是因为 A、C 本来就接近,读一遍时的随机感受决定了谁在前(这是噪声,不是尺子的问题,第 3.4 节)。

然后做一个完整的模拟:16 个标注员,每人随机分到 3 个回答,读一遍,既打分又排序(两种数据来自同一次阅读,信息来源完全相同)。用三种方法估计 8 个回答的好坏,和真实质量比较排名一致性(400 次重复的平均 τ\tau):

设置宽严的标准差尺度范围① 直接平均分② 每人先标准化③ 比较(BT 模型)
所有人尺子一样01.00.8480.7570.754
尺子有点乱10.6~1.40.8120.7670.761
尺子很乱20.4~1.60.7310.7510.757
尺子非常乱30.3~1.70.6370.7460.771

这张表比”比较总是更好”的口号诚实得多:

  • 尺子一样时,直接平均分最好。分数里有”好多少”的信息(9 分和 6 分差得多,7 分和 6 分差得少),比较只知道”谁更好”,把这部分信息丢掉了。比较不是免费的午餐。
  • 尺子一乱,平均分迅速变差,而比较几乎不受影响(四行的数字很接近)。尺子乱到一定程度以后,比较就反超了。
  • “每人先标准化”(减去自己的平均分、除以自己的标准差)也能消掉宽严和尺度,在这个模拟里和比较差不多。但它要求每人打足够多的分、分到的回答好坏搭配均匀;而且挡不住同一个人在一次标注中尺子慢慢漂移——并排放着比较则不受影响。

真实的尺子乱不乱? 非常乱。这正是心理学家 Thurstone 在 1927 年提出”比较判断法”(law of comparative judgment)的原因:人很难给一个刺激打一个绝对的分数,却很擅长说出两个刺激里哪个更强。今天的大规模偏好数据也大多是比较:

  • InstructGPT:请标注员把同一个提示词的 4~9 个回答排序,再拆成两两比较(排 KK 个回答得到 (K2)\binom{K}{2} 对)。代码 01 的演示 3 就是这样做的。
  • Llama 2(Touvron 等 2023):两两比较,同时标注”好多少”(明显更好、更好、稍好、差不多)——这是想把一部分强度信息找回来。
  • Chatbot Arena:用户向两个匿名模型提同一个问题,投票选更好的那个。

比较的其他代价也要记住:MM 个选项有 (M2)\binom{M}{2} 对,选项一多,不可能每对都问;比较只能告诉你相对好坏,告诉不了”两个都很差”(这需要第 2 讲的”外部选项”)。

2.3 动机三:评判比创作容易

直觉。你不会画画,但你能看出两幅画哪幅更好;你写不出获奖小说,但你能分辨哪本书更好看。判断通常比创造容易得多。计算机科学里有一个类比:验证一个解对不对(NP)往往比找到这个解容易得多。

这对训练模型意味着什么?最直接的训练方法是模仿:请人写出好的回答,让模型学着写(监督微调,SFT)。但模仿有一个天花板:模型最多学到示范者的水平。如果改成”模型写几个回答,人挑最好的”,人只需要会判断,挑出来的回答就可能超过人自己写的水平。

例子。代码 01 的演示 2:标注员自己写回答,质量平均 0.549(服从 N(0.55,0.122)N(0.55, 0.12^2));模型生成的回答平均更差(N(0.45,0.182)N(0.45, 0.18^2)),但更多样。让模型生成 nn 个回答,请一位评委挑最好的(4000 次重复的平均真实质量):

nn完美评委细心的评委(识货程度 6)粗心的评委(识货程度 2)
10.4470.4470.447
20.5510.5170.480
40.6360.5650.498
80.7050.5940.507
160.7690.6170.512
320.8230.6270.510
  • n=4n = 4 时,细心的评委挑出的回答(0.565)就超过了标注员自己写的平均水平(0.549)。评委不需要会写好回答,只需要能分辨好坏。
  • “识货程度”决定了天花板:细心的评委判断两个质量差 0.2 的回答,正确率是 σ(6×0.2)≈0.77\sigma(6 \times 0.2) \approx 0.77;粗心的评委很快就到顶了,甚至到不了人自己写的水平。
  • 完美评委那一列可以用一个统计学的结论核对:nn 个独立正态随机数的最大值,期望大约是”平均值 + 标准差 × cnc_n”,cnc_n 分别是 0.56(n=2n=2)、1.03(n=4n=4)、1.42(n=8n=8)、1.77(n=16n=16)、2.07(n=32n=32)。例如 0.45+0.18×1.77≈0.770.45 + 0.18 \times 1.77 \approx 0.77,和表里一致。

这种”生成 nn 个、挑最好的”方法叫 Best-of-nn,本身就是一种实用的对齐方法。RLHF 更进一步:把评委的判断学成一个奖励模型,再训练模型直接生成评委喜欢的回答,省去每次生成 nn 个的开销(第 3.3 节)。

真实的证据。Stiennon 等(2020,Learning to summarize from human feedback)用人类偏好训练摘要模型,得到的摘要在人工评估中比数据集里人写的参考摘要更受欢迎。这正是”评判比创作容易”在真实系统上的体现。

2.4 动机四:把价值放进系统

有些目标不是”写不出来”,而是本来就该由人决定。Askell 等(2021)把对 AI 助手的期望总结为 HHH:有帮助(helpful)、无害(harmless)、诚实(honest)。什么算”有害”?帮用户写一封措辞强硬的投诉信算不算?讨论药物的副作用算不算?这些问题没有可以从数据里”发现”的标准答案,只有不同的人、不同的社区、不同的文化给出的不同判断。

教材导论幻灯片把”为什么要用人的反馈”总结成四条:

  1. 捕捉难以形式化的偏好(例如幽默感)——第 2.1 节;
  2. 纳入利益相关者的价值(有帮助、公平、安全)——本节;
  3. 评估能力超过建模能力的时候——第 2.3 节;
  4. 纠正模型的错误——第 2.5 节。

2.5 反馈去哪里:数据、损失、参数

人的反馈进入系统的方式不只一种。教材导论幻灯片引用了一个分类(Chen 等 2023,Perspectives on Incorporating Expert Feedback into Model Updates):

更新什么反馈的作用例子
数据集修改、增补数据改正标签、增加样本、弱监督、合成数据;RLHF 的偏好数据
损失函数改变”什么是好”加入约束、公平性要求、可解释性要求;奖励模型本身就是一个学出来的损失
参数空间直接改模型模型编辑、写死的规则、手动调整权重

这门课主要研究第一、二类:反馈先变成数据(比较、选择),再从数据里学出一个目标(效用、奖励),最后用这个目标优化系统。

2.6 小结:什么时候该从偏好中学习?

适合不太需要
“好”说不清,但人一看就知道(帮助性、美感、自然度)有明确、可自动检查的目标(数学题的答案、代码能否通过测试——CS336 第 16 讲的”可验证奖励”)
人的评分尺子不一致、比较更可靠有可靠的客观测量
判断比示范容易,想超过示范者的水平示范数据已经足够好、足够多
目标涉及价值判断,需要由用户或社会决定目标是纯技术性的(延迟、吞吐量)

即使在”不太需要”的一栏,偏好往往也会以别的方式回来:可验证的奖励只覆盖”对不对”,“好不好读、是否礼貌”还是要靠人。


3. 贯穿全课的例子:大语言模型的对齐

3.1 预训练:会续写,不会帮忙

语言模型 πθ\pi_\theta 的预训练目标是让训练文本出现的概率最大,等价于最小化交叉熵:

Lpretrain(θ)=−Ex∼D[∑t=1Tlog⁡πθ(xt∣x<t)]\mathcal{L}_{\text{pretrain}}(\theta) = -\mathbb{E}_{x \sim \mathcal{D}} \left[ \sum_{t=1}^{T} \log \pi_\theta(x_t \mid x_{<t}) \right]

教材特别指出,对数损失是一个严格恰当评分规则(strictly proper scoring rule):模型只有如实报告它认为的概率,期望得分才最高。所以预训练出来的模型是一个校准得不错的”续写机”:给它一段话,它告诉你下一个词可能是什么。

但”续写”和”帮忙”是两回事。给一个只做过预训练的模型输入”请向初学者解释什么是递归?“,它可能续写出”请向初学者解释什么是循环?请向初学者解释什么是指针?……”——因为在网上的文本里,一个问题后面经常跟着另一个问题(例如一份习题清单)。预测得准,不等于对人有用。

3.2 监督微调:模仿示范

第一步改进是监督微调(SFT):请人写出”理想的回答”,用同样的交叉熵损失在这些示范上继续训练。模型学会了”问题后面应该跟着回答”的格式。

但正如第 2.3 节所说,模仿有天花板,而且示范很贵(写一个好回答比判断两个回答哪个好难得多)。我们的玩具世界里,参考策略 πref\pi_{\text{ref}} 就扮演”只做过监督微调的模型”:它最常生成的是答非所问的 H(20%)、有错的 G(18%),平均真实质量只有 0.401(代码 03 演示 1)。

3.3 RLHF 的三步

Christiano 等(2017)最早系统地提出了 RLHF:他们让人比较两段机器人动作的录像片段,用这些比较训练奖励模型,再用强化学习训练机器人。OpenAI 的博客记录了一个例子:只用了大约 900 次人类比较(不到一小时的人力),就教会了一个模拟机器人做后空翻——“后空翻”这个目标几乎不可能手写成奖励函数。之后 Ziegler 等(2019)、Stiennon 等(2020)把它用到语言模型上,Ouyang 等(2022)的 InstructGPT 把它做成了标准流程:

第 1 步:收集偏好。对提示词 xx,从当前模型采样两个(或几个)回答,请标注员选出更好的:得到三元组 (x,yw,yl)(x, y_w, y_l),ywy_w 是被选中的(win),yly_l 是没被选中的(lose)。

第 2 步:训练奖励模型。奖励模型 rϕ(x,y)r_\phi(x, y) 给每个回答打一个分。假设偏好服从 Bradley–Terry 模型 P(yw≻yl∣x)=σ(rϕ(x,yw)−rϕ(x,yl))P(y_w \succ y_l \mid x) = \sigma(r_\phi(x, y_w) - r_\phi(x, y_l)),用最大似然训练:

LRM(ϕ)=−E(x,yw,yl)[log⁡σ(rϕ(x,yw)−rϕ(x,yl))]\mathcal{L}_{\text{RM}}(\phi) = -\mathbb{E}_{(x, y_w, y_l)} \left[ \log \sigma\big(r_\phi(x, y_w) - r_\phi(x, y_l)\big) \right]

直觉:奖励模型要给被选中的回答打更高的分;如果它给 ywy_w 的分反而更低,σ(⋅)\sigma(\cdot) 很小,−log⁡σ(⋅)-\log\sigma(\cdot) 很大,梯度就把 rϕ(x,yw)r_\phi(x, y_w) 往上推、把 rϕ(x,yl)r_\phi(x, y_l) 往下压。

第 3 步:优化策略。调整语言模型 πθ\pi_\theta,让它生成高奖励的回答,同时不要离原来的模型 πref\pi_{\text{ref}} 太远:

max⁡π  Ex, y∼π(⋅∣x)[r(x,y)]−β KL(π(⋅∣x) ∥ πref(⋅∣x))\max_{\pi} \; \mathbb{E}_{x, \, y \sim \pi(\cdot \mid x)} \big[ r(x, y) \big] - \beta \, \mathrm{KL}\big(\pi(\cdot \mid x) \,\|\, \pi_{\text{ref}}(\cdot \mid x)\big)

其中 KL 散度 KL(π∥πref)=∑yπ(y)log⁡π(y)πref(y)\mathrm{KL}(\pi \| \pi_{\text{ref}}) = \sum_y \pi(y) \log \frac{\pi(y)}{\pi_{\text{ref}}(y)} 衡量”新模型离原来的模型有多远”,β>0\beta > 0 控制奖励和距离之间的权衡。为什么要这个 KL 项?第 3.5 节的实验会给出最直观的回答。

这个问题有一个漂亮的解析解(第 8 讲推导):

π∗(y∣x)=1Z(x) πref(y∣x) exp⁡ ⁣(r(x,y)β)\pi^*(y \mid x) = \frac{1}{Z(x)} \, \pi_{\text{ref}}(y \mid x) \, \exp\!\left( \frac{r(x, y)}{\beta} \right)

即:在原来的概率上乘一个”放大系数” er/βe^{r/\beta} 再归一化。奖励高 1 分的回答,概率多乘 e1/βe^{1/\beta} 倍。β→∞\beta \to \infty 时 π∗=πref\pi^* = \pi_{\text{ref}}(不优化);β→0\beta \to 0 时 π∗\pi^* 只剩奖励最高的那个回答。真实的语言模型有天文数字种可能的回答,没法直接算这个公式,所以要用 PPO 等强化学习算法去逼近它;我们的玩具世界只有 8 个回答,可以直接算。

3.4 一个 1952 年的公式

上面第 2 步的假设——P(yw≻yl)=σ(r(yw)−r(yl))P(y_w \succ y_l) = \sigma(r(y_w) - r(y_l))——就是统计学家 Bradley 和 Terry 在 1952 年发表的成对比较模型(数学家 Zermelo 在 1929 年为国际象棋锦标赛排名提出过同一个模型)。教材第 1 章开门见山地问:为什么这个假设是合理的?它什么时候会失效? 这是整个第一单元要回答的问题。本讲先用代码 02_one_formula_bradley_terry.py 建立直觉。

人是不一致的(演示 1)。让专家在 A 和 C 之间选 20 次,结果是选 A 15 次、选 C 5 次。再让专家对 A、B、C 两两各比一次,重复 20000 次,有 23.5% 的情况出现了循环(A > B、B > C、C > A)。如果人的偏好是确定的,这些都不可能发生。所以合理的模型应该说”A 胜过 C 的概率是 pp”。

随机效用:σ 从哪里来(演示 2)。设想每次读一个回答,感受 = 效用 + 随机噪声,二选一时选感受大的那个。如果噪声是独立的 Gumbel 分布(一种”最大值”分布,CDF 为 e−e−xe^{-e^{-x}}),两个噪声之差恰好服从逻辑斯蒂分布,于是

P(a≻b)=P(sa+εa>sb+εb)=σ(sa−sb)P(a \succ b) = P(s_a + \varepsilon_a > s_b + \varepsilon_b) = \sigma(s_a - s_b)

模拟的结果和 σ\sigma 完全吻合(例如效用差 Δ=1\Delta = 1 时模拟 0.731,σ(1)=0.731\sigma(1) = 0.731)。把噪声换成相同方差的正态分布(这叫 probit 模型,就是 Thurstone 1927 年用的),曲线几乎一样(Δ=1\Delta = 1 时 0.709)。对二选一来说噪声的形状不太重要;选 Gumbel 主要是因为公式简洁,并且能自然推广到多选一。

从两个到多个(演示 3)。同样的模型,多选一时给出 softmax:P(选 j∣S)=esj/∑k∈SeskP(\text{选 } j \mid S) = e^{s_j} / \sum_{k \in S} e^{s_k}(Luce 1959 的选择公理);给整个排序的概率时给出 Plackett–Luce 模型(一个一个地挑:先从全部里挑第一名,再从剩下的里挑第二名……)。模拟和公式吻合(4 选 1 时 A 的比例:模拟 0.591,softmax 0.594;排序 A > C > F:模拟 0.580,公式 0.581)。

更重要的是参数个数。一个”完全任意”的随机偏好要给 M!M! 种排序各指定一个概率:

选项数 MM任意随机偏好(M!−1M! - 1 个参数)BT / softmax(M−1M - 1 个参数)
4233
840,3197
103,628,7999
20约 2.4×10182.4 \times 10^{18}19

BT 模型把参数从天文数字降到每个选项一个。代价是一个很强的假设——无关选项独立性(IIA):aa 和 bb 之间的相对偏好,不受旁边还有没有 cc 影响。第 3 讲会证明”IIA ⇔ Gumbel 噪声 ⇔ softmax”,并看到 IIA 什么时候失效(“红色公交车 / 蓝色公交车”问题)。

只有差值有意义(演示 4)。给所有分数加 100,任何两者的胜率都不变;效用和噪声一起放大 2 倍,选择比例也不变(三选一的比例 0.663 / 0.295 / 0.042 变成 0.659 / 0.300 / 0.041,差别只是模拟误差);只放大效用不放大噪声,选择就变得更”坚决”(0.828 / 0.169 / 0.003)。所以:

  • 分数要固定一个”零点”才有唯一解(例如让平均分为 0)。第 9 讲会看到,DPO 里的参考模型 πref\pi_{\text{ref}} 扮演的正是这个零点的角色。
  • 效用的”单位”由噪声决定:分数差 1 的意思是”比噪声大一个单位”,胜率约 73%。

统计学把”不同的参数给出完全相同的数据分布”叫做不可识别(第 4 讲)。

3.5 RLHF 的缩影:奖励过度优化

现在把第 3.3 节的三步搬到玩具世界里(代码 03_rlhf_in_miniature.py)。

第 1、2 步(演示 2)。从 πref\pi_{\text{ref}} 采样回答对,请 40 个众包标注员比较 4000 次,用 BT 模型拟合奖励模型;作为对照,也请专家比较 4000 次。众包的选择和专家的偏好一致的比例是 77.0%。拟合出的奖励(平均值固定为 0):

回答真实质量众包奖励专家奖励
D 表面功夫0.502.03−0.07
B 详尽教程0.841.691.76
C 比喻生动0.801.371.63
A 简洁准确0.901.322.11
E 注水长文0.30−0.13−1.04
G 自信但有错0.22−1.68−1.52
F 只有代码0.38−2.01−0.51
H 答非所问0.10−2.58−2.36

众包奖励模型的第一名是表面功夫的 D。注意:奖励模型没有学错——它准确地学到了数据里的偏好;问题在于数据里的偏好(喜欢长的、花哨的)和我们想要的东西(真实质量)不一样。77% 的一致率看起来也不低(InstructGPT 报告的标注员之间的一致率约为 73%):偏好数据天然有噪声,这本身不是问题;有方向性的偏差才是问题。

第 3 步(演示 3)。用解析解 πβ(y)∝πref(y) er(y)/β\pi_\beta(y) \propto \pi_{\text{ref}}(y) \, e^{r(y)/\beta},从 β=∞\beta = \infty(不优化)一路调到 β=0.03\beta = 0.03(使劲优化):

β\betaKL众包奖励(代理)真实质量(用众包奖励优化)最常生成真实质量(用专家奖励优化)
∞0.00−0.700.401H 20%0.401
40.090.010.500E 17%0.511
20.320.640.588C 20%0.624
10.821.340.679D 27%0.777
0.51.301.690.684D 43%0.856
0.251.831.880.605D 69%0.879
0.12.652.020.512D 96%0.898
0.032.812.030.500D 100%0.900
用众包奖励优化时的真实质量(从不优化到使劲优化):
  β =     ∞  ████████████████                         0.401
  β =     2  ████████████████████████                 0.588
  β =     1  ███████████████████████████              0.679
  β =   0.5  ███████████████████████████              0.684   ← 最高点
  β =  0.25  ████████████████████████                 0.605
  β =  0.03  ████████████████████                     0.500   ← 全部押在 D 上

这就是奖励过度优化(reward overoptimization):

  • 代理奖励一路上升,真实质量先升后降。刚开始,优化把概率从 H、G 这些很差的回答挪到 A、B、C、D 上——奖励和质量一起提高;继续使劲,概率越来越集中到奖励最高的 D 上——奖励还在涨,质量却在跌。
  • Gao、Schulman、Hilton(2023,Scaling Laws for Reward Model Overoptimization)在真实的大模型上系统地测到了同样形状的曲线:用一个”金标准”奖励模型代替人,训练”代理”奖励模型,再优化策略。代理分数单调上升,金标准分数先升后降,而且奖励模型越小、数据越少,掉头越早。
  • 同样的流程,用专家数据就没有这个问题:真实质量单调上升到 0.900。差别只在数据。
  • KL 约束是一根”缰绳”:不让策略离 πref\pi_{\text{ref}} 太远,也就不会走到奖励模型最不可信的地方。但缰绳放多长,只看奖励模型自己的分数是判断不了的(它总说”越优化越好”),必须用独立的、更可靠的评估(例如一小批专家判断)来选 β\beta。

玩具世界的边界:这里过度优化只有一个来源——标注员有偏差。真实系统还有第二个来源:策略能生成任意文字,会找到奖励模型从没见过的奇怪回答(分布外),奖励模型在那里错得更离谱。第 8、14 讲会讨论两者。

少量干净的数据 vs 大量有偏差的数据(演示 5,β=0.1\beta = 0.1,每格重复 20 次):众包 4000 条 → 0.551;众包 400 条 → 0.664;专家 400 条 → 0.878;专家 100 条 → 0.853。有方向性偏差的数据,再多也没用(数据越多,奖励模型越”确信” D 最好,所以 4000 条反而比 400 条差);没有偏差的数据,100 条就够把策略推向好回答。怎样用有限的预算问最有用的问题(第 7、10 讲),怎样识别和校正偏差(第 14、15 讲),是这门课的核心问题。

3.6 DPO:跳过奖励模型

RLHF 的第 3 步要跑强化学习,工程上很复杂。Rafailov 等(2023,Direct Preference Optimization)注意到:既然最优策略有解析解 π∗∝πref er/β\pi^* \propto \pi_{\text{ref}} \, e^{r/\beta},就可以把它反过来写成 r(x,y)=βlog⁡π∗(y∣x)πref(y∣x)+βlog⁡Z(x)r(x, y) = \beta \log \frac{\pi^*(y \mid x)}{\pi_{\text{ref}}(y \mid x)} + \beta \log Z(x),代进奖励模型的 BT 损失。βlog⁡Z(x)\beta \log Z(x) 在两个回答的差值里消掉了,于是得到一个直接训练策略的损失:

LDPO(θ)=−E(x,yw,yl)[log⁡σ ⁣(βlog⁡πθ(yw∣x)πref(yw∣x)−βlog⁡πθ(yl∣x)πref(yl∣x))]\mathcal{L}_{\text{DPO}}(\theta) = -\mathbb{E}_{(x, y_w, y_l)} \left[ \log \sigma\!\left( \beta \log \frac{\pi_\theta(y_w \mid x)}{\pi_{\text{ref}}(y_w \mid x)} - \beta \log \frac{\pi_\theta(y_l \mid x)}{\pi_{\text{ref}}(y_l \mid x)} \right) \right]

它看起来像一个分类损失,不需要单独的奖励模型,也不需要强化学习。βlog⁡πθπref\beta \log \frac{\pi_\theta}{\pi_{\text{ref}}} 叫做隐式奖励。

代码 03 的演示 4 在同样的 4000 条众包比较上做 DPO(β=1\beta = 1),得到的策略和 RLHF 的完全相同(两者的差别小于 10−1210^{-12},只是浮点误差),隐式奖励和众包奖励模型逐个相等——也就是说,DPO 心里也有一个奖励模型,只是没有单独写出来,它同样把 D 排第一。

结论:换算法修不好数据里的偏差。要修,得从数据(谁来标、怎么问)、模型(把偏差建模进去,第 14 讲的”风格控制”)、评估(用独立的金标准选 β\beta)入手。第 9 讲会详细推导 DPO,并讨论它和 RLHF 在真实系统里不等价的地方(离线数据、有限的模型容量)。

3.7 排行榜也是偏好学习:迷你 Chatbot Arena

最后一个例子不训练模型,而是评估模型。Chatbot Arena(Chiang 等 2024,现名 LMArena)让用户向两个匿名模型提同一个问题,投票选更好的那个,再用 BT 模型把投票变成排行榜,用自助法(bootstrap)给出置信区间。

代码 02 的演示 5 模拟了这件事:6 个虚构的模型,真实 Elo 分数分别是 1250、1230、1180、1100、1050、1000(Elo 的约定:分数差 400 对应 10 倍的胜率比,即 P=1/(1+10−Δ/400)P = 1/(1 + 10^{-\Delta/400}),等价于 BT 模型的 σ(Δ⋅ln⁡10/400)\sigma(\Delta \cdot \ln 10 / 400))。前两名只差 20 分,第一名赢第二名的概率只有 0.529。

投票数估计的前两名(真实 1250 / 1230)95% 区间的宽度(第一名)重抽样中第一名估计正确的比例
3001248 / 1220约 180 分72%
3,0001227 / 1230(顺序颠倒)约 60 分40%
30,0001254 / 1233约 20 分100%
  • 区间大约按 1/投票数1/\sqrt{\text{投票数}} 缩小:投票多 10 倍,区间窄到约 1/3。
  • 300 张投票时,第五名 Ember 甚至被估计得比第六名还低;3000 张时,其余名次都对了,但相差 20 分的前两名分不清。排行榜上只差十几分、区间又重叠的两个模型,应该看成并列。
  • 第 5 讲讲怎样拟合(最大似然、Elo 在线更新),第 7 讲讲下一场该安排谁和谁对战才能最快分清名次,第 14 讲讲”风格控制”:用户的投票也会被长度和格式带偏,排行榜需要把它校正掉。

4. 难在哪里:六个挑战

第 3 节的流程看起来很顺:收集比较 → 拟合 BT → 优化。但每一步都藏着问题。这一节把它们列出来,每个挑战对应课程的一个(或几个)单元。

4.1 人是有噪声的、不一致的 → 第一单元(第 2~4 讲)

同一个人、同一对回答,问两次答案可能不同;三个选项之间会出现循环(第 3.4 节)。我们需要概率模型来描述”有噪声的人”:随机效用模型、IIA、它们成立和失效的条件。

4.2 偏好因人而异,但有结构 → 第 4 讲

有人喜欢简洁,有人喜欢详尽。如果每个人都完全不同,就没法从别人的数据里学到你的偏好;好在偏好通常有结构——喜欢科幻片的人往往也喜欢某类游戏。因子模型用少量的”隐藏维度”同时描述人和选项(Netflix Prize 的矩阵分解就是这个思路),这也是”个性化”的基础。

4.3 标注很贵:该问什么?→ 第 7、10 讲

人的时间有限,比较的组合却多得数不完。哪些比较信息量最大?直觉是:两个选项越难分高下,比较一次学到的越多(五五开的比较信息量最大,一边倒的比较几乎没有信息)。第 7 讲用 Fisher 信息把这个直觉变成算法,第 10 讲把它用到大语言模型和机器人上。

4.4 学偏好是为了做决定 → 第 11~13 讲

推荐系统不只是要”学会”你喜欢什么,还要现在就给你推荐一个。推荐你已知喜欢的(利用),还是推荐一个新东西看看你喜不喜欢(探索)?这是多臂老虎机问题。如果每次只能问”这两个哪个好”,就成了对决老虎机。第 11 讲还会讨论一个更根本的问题:一个不确定人想要什么的机器,应该怎样行动(协助博弈)。

4.5 行为不等于偏好 → 第 14~15 讲

我们观察到的是行为(点击、投票、选择),想学的是偏好。两者之间隔着很多东西:

  • 长度和格式偏差:标注员倾向于选更长、格式更丰富的回答。Singhal 等(2023,A Long Way to Go)发现,RLHF 带来的奖励提高有很大一部分可以用”回答变长了”来解释。这就是第 3.5 节的 D。
  • 讨好(sycophancy):Sharma 等(2023)发现,人和奖励模型有时会偏好”附和用户观点、写得令人信服”的错误回答,而不是正确的回答。
  • 位置偏差:搜索结果里排在前面的更容易被点击,不管它是否更相关(Joachims 等 2005)。
  • 有限理性:人会疲劳、会被锚定、会被选项的摆放方式影响(第 15 讲)。

教材第 4 章把这叫做反演问题:从行为反推偏好时,必须对”人是怎样做选择的”做假设,假设错了,学到的偏好就错了。

4.6 谁的偏好?→ 第 16~17 讲

第 3.5 节的分歧来自偏差:众包错了,专家对了。但并不是所有分歧都是偏差。代码 04_whose_preferences.py 看了三种情况:

两群口味相反的人(演示 1)。用户里 60% 是简洁派、40% 是详尽派,两群人都识货,只是口味不同:

系统给出简洁派的效用详尽派的效用加权平均最差的一群
A(简洁准确)6.604.205.644.20
C(比喻生动)4.804.804.804.80
B(详尽教程)3.246.844.683.24
个性化(各给所爱)6.606.846.706.60

把两群人的比较混在一起拟合一个奖励模型,排名是 A > C > B:多数人的口味胜出,少数人最喜欢的 B 排在后面。系统该给哪个?按加权平均(功利主义)给 A;按”照顾最差的那群人”(罗尔斯式)给折中的 C;最好的办法是个性化。这些不是技术问题,而是价值选择。

而且,混合数据不再服从 BT 模型。如果存在一组分数 ss,必须有 logit P(A≻B)=(sA−sC)+(sC−sB)=logit P(A≻C)+logit P(C≻B)\mathrm{logit}\,P(A \succ B) = (s_A - s_C) + (s_C - s_B) = \mathrm{logit}\,P(A \succ C) + \mathrm{logit}\,P(C \succ B),但真实的混合数据给出 0.43 vs 0.82,差得很远;BT 的预测在几对上都偏了(例如 P(A≻B)P(A \succ B) 真实 0.607,BT 预测 0.687)。第 3 讲会证明:每群人各自满足 IIA,混在一起就不满足了。

标注员不等于用户(演示 2)。被雇来标注的人里 85% 是简洁派,真正的用户里只有 35%。用标注员的数据学出的奖励模型选 A,而随机找一个用户,他更喜欢 B 的概率是 61.8%。真实的例子:Santurkar 等(2023,Whose Opinions Do Language Models Reflect?)用美国的民意调查题目测试语言模型,发现模型的”观点”和很多人群差别很大,经过人类反馈微调的模型更偏向某些特定人群。

孔多塞悖论(演示 3)。三群人各占三分之一,偏好分别是 A > B > C、B > C > A、C > A > B。每群人都很”理性”,但多数人认为 A 胜 B(群体胜率 0.636)、B 胜 C(0.636)、C 胜 A(0.636)——群体的偏好是一个循环。BT 模型只能给每个选项一个分数,表示不了循环;它能做的最好的事,是给三个选项几乎一样的分数(A +0.022、B −0.021、C −0.002),把每一对都预测成五五开,平均对数似然 −0.693,和瞎猜一样。

这不是 BT 模型的缺陷:第 16 讲的 Arrow 不可能定理证明,没有任何把个人排名合成群体排名的规则能同时满足几条看起来都很合理的要求。“对齐到人类的偏好”里的”人类”是复数。

4.7 伦理:标注数据的人

教材导论幻灯片专门提醒了一件容易被忽略的事:偏好数据是人生产的。

  • 劳动条件:大量标注工作外包给低收入地区的工人。《时代》周刊 2023 年 1 月报道,为 OpenAI 标注有害内容的肯尼亚外包工人时薪不到 2 美元。
  • 心理影响:标注暴力、仇恨、色情内容的工人会受到心理伤害。
  • 雇佣关系不清:很多标注员是零工,没有稳定的劳动保障。
  • 谁的声音被听到:标注员的人口构成决定了模型学到的是谁的偏好(第 4.6 节)。

这些问题不会因为技术进步自动消失(越来越多的反馈来自 AI 本身,例如 Constitutional AI、RLAIF,但 AI 的”偏好”又是从哪里来的?)。它们会在第 17 讲再次出现。


5. 一段简短的历史

从偏好中学习不是机器学习的发明。它的数学工具来自四条不同的传统,直到最近才在 RLHF 里汇合:

年份人物 / 系统贡献传统
1785孔多塞发现多数决可能产生循环(孔多塞悖论)社会选择
1927Thurstone比较判断法:人对刺激的感受 = 平均值 + 正态噪声(probit)心理测量
1929Zermelo用(后来被称为 BT 的)模型给国际象棋锦标赛排名统计
1951Arrow不可能定理(1972 年获诺贝尔经济学奖)社会选择
1952Bradley & Terry成对比较模型 σ(sa−sb)\sigma(s_a - s_b)统计
1959Luce选择公理(IIA)与多选一的 softmax心理学
1960Rasch项目反应理论的 Rasch 模型(考试与测量)心理测量
1960 / 1970Elo等级分系统被美国国际象棋联合会、国际棋联采用体育
1974McFadden条件 logit 模型;离散选择计量经济学(2000 年获诺贝尔经济学奖)经济学
1975Plackett排序的概率模型(Plackett–Luce)统计
2002Joachims把搜索点击解释成成对偏好,用来训练排序信息检索
2006–2009Netflix Prize矩阵分解成为推荐系统的标准方法推荐系统
2008Knox & Stone(TAMER)用人的实时评价训练智能体强化学习
2009Yue & Joachims对决老虎机信息检索 / 在线学习
2017Christiano 等从人类偏好中做深度强化学习(RLHF)强化学习
2020Stiennon 等用人类反馈训练摘要模型,超过人写的参考摘要语言模型
2022Ouyang 等(InstructGPT)、Bai 等(Anthropic HH)RLHF 成为大语言模型的标准流程语言模型
2023Rafailov 等(DPO)跳过奖励模型,直接从偏好训练策略语言模型
2024Chiang 等(Chatbot Arena)用众包投票 + BT 给大模型排名评估

有一个小故事很能说明这些”老”模型的威力。McFadden 在 1970 年代用他的 logit 模型预测旧金山湾区捷运(BART)建成后的乘客比例。据他在诺贝尔奖演讲中的回忆,模型预测的乘客比例约 6.3%,实际是 6.2%,而官方的工程预测是 15% 左右。一个关于”人怎样在几个选项之间做选择”的简单概率模型,比复杂的工程预测准确得多——这和今天用 BT 模型训练奖励模型,是同一个思想。


6. 课程地图:五个单元

教材和课程按”偏好学习的流水线”组织成五个单元:

  人的选择 ──►  ① 基础:怎样用概率模型描述?      (BT、随机效用、IIA、因子模型)
              │
              ▼
           ② 学习:怎样从数据里估计?            (最大似然、贝叶斯、微调、实验设计、RLHF、DPO)
              │
              ▼
           ③ 行动:该问什么?该做什么?          (主动获取、协助博弈、老虎机、对决老虎机)
              │
              ▼
           ④ 反演:行为真的反映偏好吗?          (风格偏差、代理指标、有限理性)
              │
              ▼
           ⑤ 聚合:很多人的偏好怎样合起来?      (社会选择、不可能定理、公平、信息聚合)
单元讲次回答的问题本讲里的伏笔
① 基础1–4偏好数据长什么样,怎样建模第 3.4 节:σ、softmax、只有差值可识别
② 学习5–9怎样估计,怎样训练语言模型第 3.3、3.5、3.6 节:奖励模型、KL、DPO
③ 行动10–13问什么、做什么第 3.7 节:下一场该安排谁对战
④ 反演14–15行为 ≠ 偏好第 3.5 节的 D;第 4.5 节
⑤ 聚合16–17谁的偏好第 4.6 节:口味、标注员、孔多塞
总结18一个项目从头到尾怎么做第 7 节:预分析计划

教材建议的阅读路线:想做应用的人读第 13 章;有离散选择背景的人略读第 1 章、细读第 23 章;偏机器学习的人读第 24 章;关心社会影响的人读第 1、4、5 章。**第 1 章(本课第 14 讲)是所有路线的必读部分**。


7. 课程安排与考核

7.1 课程安排

Fall 2026 学期每周一、三下午上课,共 18 次课(9/23 – 11/30,感恩节那一周停课)。每次课的主题见 SYLLABUS.md。

7.2 考核方式

部分比例说明
期末项目50%预分析计划(项目分的 30%,11/4 截止,3~4 页);论文(60%,12/3 截止,最多 8 页);代码(10%,“研究质量,而不是生产质量”)
笔试测验30%三次 15 分钟的闭卷测验,各 10%(约 8 道选择题 + 3 道简答题),分别在第 6、12、17 次课
口试20%两次 12 分钟的口试,各 10%,分别在第 46 周、第 79 周

这门课没有传统的编程作业,而是把精力放在一个研究项目上;测验和口试检查你是否真正理解了概念(口试尤其难”背答案”:考官会追问”为什么”)。

7.3 什么是”预分析计划”?为什么要先写它?

项目的第一个交付物叫预分析计划(pre-analysis plan),这在机器学习课里不多见,它来自经济学和心理学。

动机:做数据分析时,研究者有大量的”自由选择”——用哪个指标、去掉哪些样本、控制哪些变量、看哪个子群体。如果先看了数据再做这些选择,很容易(甚至是无意识地)挑出”结果最好看”的那个组合。统计学家 Gelman 和 Loken(2013)把这叫做分岔小径的花园(garden of forking paths):即使每一步都看似合理,最后报告的结果也可能只是噪声。心理学的”可重复性危机”在很大程度上就源于此。

做法:在看到结果之前,先写下并”冻结”你的计划:

  • 研究问题和假设(你预期会看到什么,为什么);
  • 数据从哪里来、怎样收集、样本量多大(以及为什么这么大);
  • 主要指标是什么、怎样计算、用什么统计检验;
  • 哪些是事先计划的分析,哪些是探索性的分析(两者都可以做,但要分开报告);
  • 什么样的结果会让你认为假设不成立。

和这门课的关系:偏好学习的实验特别容易掉进分岔小径——第 2.2 节的表格里,“比较是否优于打分”取决于尺子有多乱;如果只报告对自己有利的那一行,结论就完全反了。本讲的代码坚持”所有设置都报告、和预期不一样的结果也写出来”,就是这个原则的小型练习。经济学里常引用的文章有 Olken(2015,Promises and Perils of Pre-Analysis Plans);Nosek 等(2018)讨论了”预注册”在科学中的作用。

7.4 怎样使用这份讲义

  • 每一讲都按”直觉 → 背景 → 动机 → 为什么 → 细节 → 例子”的顺序写,先读直觉和例子,再读公式。
  • 每一讲的代码都能独立运行,演示后面打印了”观察”。建议一边看输出,一边对照讲义里的表格。
  • 讲义末尾的练习分为概念题、计算题、推导题、动手改代码和开放题;参考答案折叠在后面,先自己想再展开。

8. 小结

  1. 这门课研究怎样从人的选择、比较和行为里学出”人想要什么”,再用它优化给人用的系统。偏好数据出现在推荐、搜索、机器人、语言模型、体育、选举等各个领域,它们共享一个数学结构:看不见的效用 + 有噪声的选择。
  2. 三个动机:目标写不出来(手写规则的第一名往往是它错得最离谱的地方——古德哈特定律);比较对”每个人的尺子不同”不敏感(代价是丢掉强度信息:尺子一致时打分反而更好);评判比创作容易(Best-of-nn 能超过标注员自己的水平)。
  3. 一个公式:Bradley–Terry 模型 P(a≻b)=σ(sa−sb)P(a \succ b) = \sigma(s_a - s_b),来自”效用 + Gumbel 噪声”;推广到多选一是 softmax,推广到排序是 Plackett–Luce;参数从 M!−1M! - 1 降到 M−1M - 1,代价是 IIA 假设;只有差值可识别,单位由噪声决定。
  4. 一个例子:语言模型对齐。预训练会续写不会帮忙;监督微调有模仿的天花板;RLHF = 收集比较 + BT 奖励模型 + KL 约束的优化(解析解 π∗∝πrefer/β\pi^* \propto \pi_{\text{ref}} e^{r/\beta});DPO 把三步合成一步,但和 RLHF 优化的是同一个目标。
  5. 奖励过度优化:奖励模型忠实地学到了标注员的偏差;使劲优化时,代理奖励一路上升,真实质量先升后降(玩具世界里从 0.401 升到 0.684,再跌回 0.500)。KL 约束是缰绳,但缰绳的长短要用独立的金标准来定。换算法(DPO)修不好数据里的偏差。
  6. 六个挑战:噪声与不一致、异质性、标注成本、探索与利用、行为 ≠ 偏好、谁的偏好;它们对应课程的五个单元。混合人群会破坏 BT 模型,群体偏好可能是循环的(孔多塞悖论)。
  7. 历史:心理测量(Thurstone、Rasch)、经济学(Luce、McFadden、Arrow)、统计与体育(Zermelo、Bradley–Terry、Elo)、信息检索与强化学习(Joachims、Christiano)四条传统在 RLHF 里汇合。

9. 与测验、口试和项目的关系

  • 测验与口试:本讲的概念(BT 公式与它的含义、为什么比较、古德哈特定律、KL 约束的作用、DPO 和 RLHF 的关系、孔多塞悖论)是后面所有讲次的基础,口试很可能追问”为什么”,例如”为什么 BT 的分数只有差值有意义?""为什么 DPO 不能解决长度偏差?“。练习 1~6 就是按这种口吻出的。
  • 期末项目:选题时可以从第 4 节的六个挑战出发,问自己”我的项目在解决哪一个”。写预分析计划时,参考第 7.3 节的清单,特别是”主要指标""样本量”和”什么结果会推翻假设”三项;本讲的代码展示了怎样用一个有上帝视角的模拟先检验方法,这是做方法类项目的好起点。

10. 练习

练习 1(概念)。下面每个场景里,数据是哪种形式(两两比较 / 从集合中选一个 / 排序 / 接受或拒绝)?“选项”和”效用”分别是什么? (a) 用户在搜索结果的前 5 条里点了第 3 条;(b) 国际象棋比赛的结果;(c) 约会软件上向左或向右滑;(d) 选民在选票上把 4 位候选人排序;(e) 标注员在两个聊天回答中选了一个。

参考答案

(a) 可以看成”从集合中选一个”(选项:5 个网页;效用:相关性);Joachims(2002)把它解释成”第 3 条 ≻ 第 1、2 条”的两两比较——因为用户很可能看过但跳过了排在前面的结果。注意位置偏差:排在后面的结果可能根本没被看到(第 4.5 节)。 (b) 两两比较(选项:棋手;效用:实力,即 Elo 分数)。 (c) 接受 / 拒绝(选项:对方的资料;效用:吸引力,而且因人而异——第 4 讲的因子模型)。也可以看成”和一个外部选项(不选任何人)比较”。 (d) 排序(Plackett–Luce 模型;第五单元讨论怎样把很多人的排序合起来)。 (e) 两两比较,带上下文(提示词 xx):(x,yw,yl)(x, y_w, y_l)。

练习 2(计算)。 (a) BT 模型下,sa−sb=1s_a - s_b = 1 时 P(a≻b)P(a \succ b) 是多少?要让 P(a≻b)=0.9P(a \succ b) = 0.9,分数差要多大? (b) 换成 Elo 分数,0.9 的胜率对应多少分的差距? (c) 给 aa、bb 的分数都加 5,(a) 的答案变吗?都乘以 2 呢?

参考答案

(a) σ(1)=1/(1+e−1)≈0.731\sigma(1) = 1/(1+e^{-1}) \approx 0.731。σ(Δ)=0.9⇒e−Δ=1/9⇒Δ=ln⁡9≈2.20\sigma(\Delta) = 0.9 \Rightarrow e^{-\Delta} = 1/9 \Rightarrow \Delta = \ln 9 \approx 2.20。 (b) 1/(1+10−Δ/400)=0.9⇒10Δ/400=9⇒Δ=400log⁡109≈3821/(1+10^{-\Delta/400}) = 0.9 \Rightarrow 10^{\Delta/400} = 9 \Rightarrow \Delta = 400 \log_{10} 9 \approx 382 分。 (c) 都加 5:不变(只有差值有意义)。都乘以 2:差值变成 2,胜率变成 σ(2)≈0.881\sigma(2) \approx 0.881——乘法改变了”相对于噪声的大小”。在随机效用的解释下,等价于噪声缩小了一半(第 3.4 节,代码 02 演示 4)。

练习 3(推导)。第 2.2 节的打分模型是 打分ij=ai+biuj+噪声ij\text{打分}_{ij} = a_i + b_i u_j + \text{噪声}_{ij}。 (a) 证明:在没有噪声时,标注员 ii 对 jj、kk 的比较结果不依赖于 aia_i,也不依赖于 bib_i(只要 bi>0b_i > 0)。 (b) 如果某个标注员把量表理解反了(bi<0b_i < 0,以为 1 分最好),他的比较数据会怎样?打分数据呢?你会怎样发现这样的标注员? (c) 打分数据被截断到 1~10 分时,哪种信息会丢失?

参考答案

(a) 打分ij−打分ik=bi(uj−uk)\text{打分}_{ij} - \text{打分}_{ik} = b_i (u_j - u_k),aia_i 消掉了;bi>0b_i > 0 时它的正负号和 uj−uku_j - u_k 相同,所以”谁更好”的判断不依赖 bib_i。 (b) 打分数据和比较数据(如果比较是从他的打分推出来的)都会整体反过来。如果是直接问”哪个更好”,就不会有这个问题——这也是直接比较的一个优点:问题本身没有”量表方向”可以误解。发现的方法:放一些”注意力检查”题(答案显而易见的对比,例如 A vs H),看他是否系统性地选错;或者看他和其他人的一致率是否显著低于 50%。 (c) 量表两端的”好多少”信息:两个都很好的回答都被打 10 分,就分不出谁更好(代码 01 演示 3 里宽松的标注员给 A、C 都打了 10 分)。

练习 4(计算)。只有两个回答 y1y_1、y2y_2,πref=(0.5,0.5)\pi_{\text{ref}} = (0.5, 0.5),奖励 r=(1,0)r = (1, 0)。 (a) 用解析解求 β=1\beta = 1 时的最优策略 π∗\pi^*,以及它的期望奖励和 KL(π∗∥πref)\mathrm{KL}(\pi^* \| \pi_{\text{ref}})。 (b) β→0\beta \to 0 和 β→∞\beta \to \infty 时 π∗\pi^* 分别是什么? (c) 如果 πref=(0.01,0.99)\pi_{\text{ref}} = (0.01, 0.99),β=1\beta = 1 时 π∗(y1)\pi^*(y_1) 是多少?这说明了 KL 约束的什么性质?

参考答案

(a) π∗(y1)=0.5e10.5e1+0.5e0=ee+1≈0.731\pi^*(y_1) = \dfrac{0.5 e^{1}}{0.5 e^{1} + 0.5 e^{0}} = \dfrac{e}{e+1} \approx 0.731,π∗(y2)≈0.269\pi^*(y_2) \approx 0.269。期望奖励 0.731。KL=0.731ln⁡(0.731/0.5)+0.269ln⁡(0.269/0.5)≈0.278−0.167=0.111\mathrm{KL} = 0.731 \ln(0.731/0.5) + 0.269 \ln(0.269/0.5) \approx 0.278 - 0.167 = 0.111。 (b) β→0\beta \to 0:π∗=(1,0)\pi^* = (1, 0),全部押在奖励高的回答上。β→∞\beta \to \infty:π∗=πref=(0.5,0.5)\pi^* = \pi_{\text{ref}} = (0.5, 0.5)。 (c) π∗(y1)=0.01e0.01e+0.99≈0.027\pi^*(y_1) = \dfrac{0.01 e}{0.01 e + 0.99} \approx 0.027。参考模型几乎不生成的回答,即使奖励更高,优化后的概率也只提高到 2.7%:KL 约束让策略”在参考模型的支撑范围内”改进,很难跳到参考模型认为不可能的回答上。这既是保护(不会跑到奖励模型没见过的地方),也是限制(参考模型不会的,RLHF 也很难教会)。

练习 5(思考)。第 3.5 节里,用专家奖励优化时真实质量单调上升,用众包奖励时先升后降。 (a) 用一句话说明”先升后降”需要满足什么条件。 (b) 在真实系统里,你没有”真实质量”可以看。你会怎样选择 β\beta? (c) 如果把众包标注员的花哨偏差从 2.0 降到 1.0,你预计会发生什么?

参考答案

(a) 代理奖励的最高点(β→0\beta \to 0 时策略的去处)不是真实质量的最高点,并且在”中间”的某个 β\beta,策略的真实质量高于代理最高点的真实质量。换句话说:代理奖励大体上和真实质量正相关(所以开始时一起上升),但在最顶端偏离了(所以最后下降)。 (b) 留出一小批独立的、更可靠的评估:例如请专家对不同 β\beta 下的策略输出做两两比较,或者用一个更大、更好的奖励模型当”金标准”(Gao 等 2023 的做法);选金标准分数最高的 β\beta。同时监控 KL 和回答长度等”症状”:KL 涨得很快、长度一路变长,往往是过度优化的信号。 (c) 编写讲义时实际运行的结果(在 toy_world.py 的 make_crowd 里把 style_bias=2.0 改成 1.0,再运行 03 号文件):众包奖励模型的第一名从 D 变成 B(详尽教程,真实质量 0.84),D 掉到第四;真实质量随优化单调上升,最终停在 0.840,不再先升后降——但仍然达不到专家奖励的 0.900(众包的长度偏差让 B 压过了 A)。偏差变小,过度优化的”掉头”就消失了;偏差没有完全消失,最终的结果也就不是最好的。

练习 6(概念)。有人说:“DPO 不需要奖励模型,所以不会有奖励模型带来的偏差。“这句话对吗?

参考答案

不对。DPO 的损失就是”把隐式奖励 βlog⁡(πθ/πref)\beta \log(\pi_\theta/\pi_{\text{ref}}) 当成奖励模型”的 BT 似然,它从同样的比较数据里学到同样的偏好(代码 03 演示 4:DPO 的策略和 RLHF 完全相同,隐式奖励同样把 D 排第一)。偏差来自数据(标注员喜欢长的、花哨的),不来自”是否单独训练奖励模型”。DPO 省掉的是工程上的复杂度(不需要强化学习),不是统计上的问题。

练习 7(计算)。三位选民对三个候选人的排名分别是 A > B > C、B > C > A、C > A > B。 (a) 用两两多数决比较每一对,结果是什么? (b) 用 Borda 计数(第一名得 2 分,第二名 1 分,第三名 0 分),谁赢? (c) 这和代码 04 演示 3 里 BT 模型的拟合结果有什么联系?

参考答案

(a) A vs B:第 1、3 位选民选 A,A 胜;B vs C:第 1、2 位选 B,B 胜;C vs A:第 2、3 位选 C,C 胜。循环:A > B > C > A(孔多塞悖论)。 (b) A:2 + 0 + 1 = 3;B:1 + 2 + 0 = 3;C:0 + 1 + 2 = 3。三人并列。 (c) BT 模型给三个候选人几乎相同的分数(A +0.022、B −0.021、C −0.002),和 Borda 计数的”三人并列”一致。第 16 讲会看到,在一定条件下 BT / DPO 的结果和 Borda 计数有严格的联系。

练习 8(动手改代码)。在 02_one_formula_bradley_terry.py 的演示 5 里,把 TRUE_ELO 中 Basalt 的分数从 1230 改成 1170(和第一名差 80 分),重新运行。300 张投票时,“Aurora 排第一的比例”会怎样变化?为什么?

参考思路

编写讲义时实际运行的结果:300 张投票时,Aurora 排第一的比例从 72% 提高到 92%;3000 张投票时从 40% 提高到 98%。差距 80 分对应胜率约 0.61,比 20 分时的 0.53 好分得多。但注意 Basalt 改成 1170 后排到了 Cobalt(1180)后面,这两个只差 10 分的模型成了新的”分不清”的一对:300 张投票时 Basalt 被估计得比 Cobalt 高,3000 张时才排对。原理:区间宽度只取决于投票数和对战的安排,而能不能分清取决于”真实差距 vs 区间宽度”。

练习 9(开放题)。你要为学校的”编程答疑助手”收集偏好数据,用来训练奖励模型。参照本讲的内容,写出你的数据收集方案:谁来标注?收集两两比较、排序还是打分?怎样发现和减轻长度偏差?学生里有喜欢简洁的、也有喜欢详尽的,你打算怎么处理?用什么来选 KL 系数?

参考思路

一种可能的方案:标注员同时包括助教(少量、贵、作为金标准)和学生(大量、便宜、代表真实用户);主要收集两两比较(尺子不一致的问题小),同时请标注员选”好多少”以保留部分强度信息;每批数据里混入长度不同但质量已知的”校准题”,估计每位标注员的长度偏差(第 14 讲:把长度作为协变量放进 BT 模型);记录标注员的偏好类型(例如问一句”你更喜欢简洁还是详尽的解释”),检查不同人群的偏好是否不同,必要时做个性化(第 4 讲)而不是简单平均;KL 系数用助教的独立评估来选(第 3.5 节)。写进预分析计划:主要指标(助教评估的胜率)、样本量的理由、事先计划的分析(不同年级的学生是否偏好不同)。


11. 延伸阅读

课程教材

  • Truong, Haupt, Koyejo. Machine Learning from Human Preferences. Stanford, 2025(mlhp.stanford.edu)。本讲对应导论和第 1 章 1.1–1.3 节。

语言模型对齐(本讲第 3 节)

  • Christiano et al. Deep Reinforcement Learning from Human Preferences. NeurIPS 2017.
  • Ziegler et al. Fine-Tuning Language Models from Human Preferences. 2019.
  • Stiennon et al. Learning to Summarize from Human Feedback. NeurIPS 2020.
  • Ouyang et al. Training Language Models to Follow Instructions with Human Feedback. NeurIPS 2022.(InstructGPT)
  • Bai et al. Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback. 2022.
  • Rafailov et al. Direct Preference Optimization: Your Language Model is Secretly a Reward Model. NeurIPS 2023.
  • Gao, Schulman, Hilton. Scaling Laws for Reward Model Overoptimization. ICML 2023.
  • Casper et al. Open Problems and Fundamental Limitations of Reinforcement Learning from Human Feedback. TMLR 2023.(一篇很好的综述:RLHF 的每一步都有哪些问题)

偏好模型的经典文献(第 3.4、5 节)

  • Thurstone. A Law of Comparative Judgment. Psychological Review 1927.
  • Bradley, Terry. Rank Analysis of Incomplete Block Designs: I. The Method of Paired Comparisons. Biometrika 1952.
  • Luce. Individual Choice Behavior: A Theoretical Analysis. 1959.
  • McFadden. Conditional Logit Analysis of Qualitative Choice Behavior. 1974.
  • Train. Discrete Choice Methods with Simulation. 2009.(离散选择的标准教材,免费在线)

偏差、谁的偏好(第 4 节)

  • Singhal et al. A Long Way to Go: Investigating Length Correlations in RLHF. 2023.
  • Sharma et al. Towards Understanding Sycophancy in Language Models. 2023.
  • Santurkar et al. Whose Opinions Do Language Models Reflect? ICML 2023.
  • Chiang et al. Chatbot Arena: An Open Platform for Evaluating LLMs by Human Preference. ICML 2024.

综述

  • Wirth et al. A Survey of Preference-Based Reinforcement Learning Methods. JMLR 2017.
  • Fürnkranz, Hüllermeier (eds.). Preference Learning. Springer 2010.

研究方法(第 7.3 节)

  • Gelman, Loken. The Garden of Forking Paths. 2013.
  • Olken. Promises and Perils of Pre-Analysis Plans. Journal of Economic Perspectives 2015.

12. 下一讲预告

本讲把 Bradley–Terry 模型当作一个”会用就行”的黑盒。第 2 讲开始把它拆开:

  • 偏好数据到底有几种形式(完整排序、从集合中选一个、两两比较、接受 / 拒绝、逐项反馈),怎样用同一套记号写下来?带上下文(用户、提示词)时又怎样写?
  • “每个选项一个分数”的模型,对没见过的选项无能为力。怎样让分数成为选项特征的函数,从而泛化到新的选项?——这正是奖励模型能给从没见过的回答打分的原因。
  • 平局怎么处理?什么叫”随机传递性”?比较图不连通时会发生什么?

带着本讲代码 01~04 里的几个现象去读第 2 讲:为什么 4000 条有偏差的数据比 400 条更糟?为什么混合人群的数据不服从 BT?这些问题会在后面几讲里一一得到回答。

← 返回课程目录