对应:Stanford CS329H Fall 2026 Lecture 2(9/28 Choice data, generalization, Bradley–Terry)。依据教材第 1 章 1.4–1.5 节(随机偏好、比较数据的类型)、第 1 章的幻灯片,以及 Bradley–Terry 模型的经典文献;“泛化”一节对应教材里”效用作为特征的函数”和奖励模型的讨论。 配套代码:
code/lecture02/(只用 Python 标准库) 预计阅读时间:3~4 小时(含运行代码)
0. 本讲导航
0.1 学完本讲,你应该能够
- 说出偏好关系的两条公理(完备性、传递性),解释为什么”无差异”可以不传递(半序)。
- 把”随机偏好”理解成排序上的概率分布,并从这个分布推出两两胜率、多选一概率和排序概率。
- 说出偏好数据的五种形式(完整排序、从集合中选一个、两两比较、接受 / 拒绝、逐项反馈矩阵),把它们都写成”从集合 里选了 “的选择事件,并用同一个 softmax 模型拟合。
- 比较不同问法的信息量和成本;解释为什么两两比较看不到”绝对水平”;解释为什么同一次排序拆出的比较不独立。
- 解释点击数据的位置偏差,以及”选择集是看到的,不是展示的”。
- 写出 Bradley–Terry 的似然;用 Zermelo–Ford 条件判断最大似然估计是否存在;定义弱 / 中 / 强随机传递性,证明 BT 满足强随机传递性;用似然比检验判断 BT 是否合适;说出两种平局模型。
- 解释表格式 BT 为什么不能给新选项打分,写出线性 BT(特征差上的逻辑回归),并用偏差–方差、遗漏变量偏差、外推、数据划分四个角度讨论”泛化”。
0.2 先修知识
| 知识点 | 用在哪里 | 最低要求 |
|---|---|---|
| 第 1 讲 | 全部 | BT 公式 、“效用 + 噪声”的直觉、写作助手世界 |
| 概率 | 第 2、4 节 | 概率分布、边缘概率、独立;对数似然的概念 |
| 逻辑回归 | 第 5 节 | 知道逻辑回归是 ;不熟悉也能读懂 |
| 图的基本概念 | 第 4.2 节 | 节点、边、有向边、连通 |
0.3 本讲地图
第1节 从第 1 讲到第 2 讲:BT 公式背后还有哪些没说清的问题
第2节 偏好的形式化:全序、半序、排序上的概率分布、随机传递性 ← 代码 01
第3节 偏好数据的五种形式;一切都是“从集合中选一个”;哪种问法最划算;
绝对水平;拆出来的对不独立;点击数据 ← 代码 02、03
第4节 Bradley–Terry 模型:似然、比较图、拟合优度、平局 ← 代码 04
第5节 泛化:从“每个选项一个分数”到“分数是特征的函数” ← 代码 05
第6–10节 小结、与考核的关系、练习、延伸阅读、下一讲预告
0.4 关于本讲的数字
和第 1 讲一样,讲义里的模拟数字都来自代码的实际输出(固定随机种子,Python 3.9 和 3.13 上逐字相同);论文里的真实数字会注明出处。代码 02、03、05 用到第 1 讲的写作助手世界(专家的效用:A 5.40、B 5.04、C 4.80、D 3.00、F 2.28、E 1.80、G 1.32、H 0.60),代码 05 另造了一个 120 个回答的”回答池”。
1. 从第 1 讲到第 2 讲
第 1 讲把 Bradley–Terry 模型当成一个”会用就行”的黑盒:给它一堆”谁胜过谁”,它返回每个选项一个分数。这背后还有很多没说清的问题:
- “偏好”到底是什么? 第 1 讲说”人是不一致的”,那我们建模的对象究竟是一个确定的排名,还是别的什么东西?(第 2 节)
- 数据只有”两两比较”一种吗? InstructGPT 收集的是排序,推荐系统收集的是点击,点赞是接受 / 拒绝。它们能放进同一个框架吗?哪种问法最划算?(第 3 节)
- 拟合总能成功吗? 如果某个模型一场都没输过呢?如果数据根本不服从 BT 呢?平局怎么办?(第 4 节)
- 第 1 讲的奖励模型只给 8 个固定的回答打分。真实的语言模型每次都生成新的回答,奖励模型怎样给没见过的回答打分?(第 5 节)
这一讲的标题里有”泛化”(generalization)这个词,它在本讲有两层意思:一种数据形式的结论能否推广到其他形式(第 3 节的统一框架),以及模型能否推广到没见过的选项(第 5 节)。
2. 偏好的形式化
2.1 偏好关系:完备性与传递性
直觉。你心里有一个”好坏”的顺序:咖啡比茶好,茶比白水好。经济学和决策理论把这个顺序写成一个偏好关系 (读作”不差于”): 表示” 至少和 一样好”。由它可以定义严格偏好 ( 但不是 )和无差异 (两个方向都成立)。
一个”理性”的偏好关系要满足两条公理:
| 公理 | 定义 | 直觉 |
|---|---|---|
| 完备性 | 任意 : 或 (至少一个成立) | 任何两个选项都能比 |
| 传递性 | 且 | 不会绕圈 |
满足这两条的关系叫弱序(weak order);如果再要求没有无差异(任何两个不同的选项都分得出高低),就是全序(total order),也就是一个排名。
为什么这两条公理重要? 因为经典的效用表示定理:在有限(或可数)个选项上,偏好关系能用一个效用函数 表示(),当且仅当它完备且传递。反过来看,用一个数给每个选项打分、按大小比较,得到的偏好一定完备、传递。所以第 1 讲”每个选项一个分数”的做法,背后隐含的就是这两条公理。代码 01_preference_relations.py 的演示 1 验证了按效用比较的偏好确实完备、传递。
2.2 理想与现实:咖啡里的糖
心理学家 Luce(1956)给出过一个著名的例子:一杯咖啡里加 0 粒、1 粒、2 粒……10 粒糖。差一两粒你根本尝不出来,所以 0 粒 ~ 1 粒、1 粒 ~ 2 粒……但 0 粒和 10 粒的差别一尝就知道。代码 01 用”差 2.5 粒以内尝不出来”模拟了这个人:
无差异 ~ 违反传递性的例子:0粒 ~ 1粒,1粒 ~ 3粒,但 0粒 和 3粒 不是无差异
一条无差异链:0粒 ~ 2粒 ~ 4粒 ~ 6粒 ~ 8粒 ~ 10粒,可是 0粒 和 10粒 的差别一尝就知道
严格偏好 仍然是传递的,但无差异不传递。Luce 把这种结构叫做半序(semiorder)。它说明”确定的全序”是一个理想化的假设:真实的人有察觉阈值,“差不多”的东西分不出来。
这门课的处理办法不是放弃效用,而是加入随机性:差得少时,选择接近五五开;差得多时,几乎确定。第 1 讲的 就是一条被”软化”的阈值;第 4.4 节的 Rao–Kupper 平局模型则把”察觉阈值”直接写进了模型。
2.3 随机偏好:排序上的概率分布
定义。教材第 1 章把偏好建模成一个随机的全序:每次做选择时,从一个排序上的概率分布 里抽一个排序,按它来选。 个选项有 种排序,所以一个随机偏好有 个自由参数。
所有选择数据都是这个分布的”侧面”。从排序分布可以推出任何一种我们能观察到的数据:
代码 01 的演示 2 用 3 个选项(6 种排序)把这件事算了出来:
| 排序分布 | 两两胜率 | 从 选一个 |
|---|---|---|
| 确定的(总是 ) | : 1 | |
| 均匀 | 全是 0.5 | 各 1/3 |
| Plackett–Luce(分数 1, 0, −1) | 0.73、0.73、0.88 | 0.67、0.24、0.09 |
| 孔多塞混合(、、 各 1/3) | 0.67、0.67、0.33 | 各 1/3 |
| 两群人(60% 简洁派 + 40% 详尽派,各自是 PL) | 0.66、0.54、0.61 | 0.52、0.13、0.35 |
Plackett–Luce 只用 2 个自由参数就确定了全部 6 种排序的概率;一般的随机偏好需要 5 个。孔多塞混合里每个人都是一个全序,两两胜率却绕成一个圈。“两群人”里每群人各自服从 PL,混合以后却出现了单一分数模型无法表示的结构(第 2.5 节)。
2.4 为什么要用”随机”偏好?
第 3 讲会详细讨论,这里先列出教材给出的三种解释——它们对应三种不同的世界观,却给出完全相同的数学模型:
- 异质性:不同的人有不同的偏好,“随机”来自”这次是谁在做选择”(经济学的产业组织传统)。孔多塞混合、两群人都是这种。
- 有限理性:同一个人每次评估都有误差(心情、注意力),“随机”来自”这次评估出了多大的错”。第 1 讲的”同一个人问 20 次”是这种。
- 设计者的不确定性:偏好本身是确定的,“随机”表示我们不知道它是什么(贝叶斯的视角,第 6 讲)。
2.5 随机传递性
全序的传递性在随机偏好里有三种”软化”的版本。设 且 :
| 名称 | 要求 | 直觉 |
|---|---|---|
| 弱随机传递性(WST) | 多数决不会绕圈 | |
| 中随机传递性(MST) | 跨两级不比较弱的那一级差 | |
| 强随机传递性(SST) | 跨两级不比任何一级差 |
BT 一定满足 SST。证明只有一行: 意味着 ,同理 ,于是 , 是增函数,所以 。
反过来,违反 SST 就说明 BT 不合适。代码 01 的演示 3:孔多塞混合连 WST 都违反;“两群人”满足 WST 和 MST,却违反 SST—— 以 0.657 胜 、 以 0.542 胜 , 胜 却只有 0.607,比”跨一级”的 0.657 还低(详尽派强烈偏爱 ,把 胜 的概率拉了下来)。这是第 1 讲代码 04 里”BT 的预测在几对上都偏了”的根本原因。第 4.3 节会在数据上做这个检验。
3. 偏好数据的五种形式
3.1 五种形式
教材按”信息量”和”收集难度”列出了以下几种数据(记号沿用教材: 是选项, 是用户或上下文):
| 形式 | 记号 | 例子 | 信息量 | 认知负担 |
|---|---|---|---|---|
| 完整排序 | , | InstructGPT 给 4~9 个回答排序;选票上的排序 | 最多( 比特) | 最重 |
| 从集合中选一个 | 推荐页面上点了 (展示的是 ) | 比特 | 中等 | |
| 两两比较 | 表示 | Chatbot Arena;大多数 RLHF 数据;棋局 | 1 比特 | 轻 |
| 接受 / 拒绝 | :和”外部选项”0 比较 | 点赞 / 点踩;“这个回答能发布吗” | 1 比特 | 最轻 |
| 逐项反馈矩阵 | (很多格子是空的) | 电商的购买、流媒体的播放 / 跳过、约会软件的左右滑 | 每格 1 比特 | 轻(隐式) |
上下文。真实数据几乎总带着上下文:、、、,其中 可以是用户、也可以是提示词。RLHF 的数据 就是带上下文 (提示词)的两两比较。上下文是第 4 讲(每个用户有自己的偏好)和第 5 节(分数依赖于提示词)的出发点。
外部选项。“接受 / 拒绝”可以看成和一个特殊的选项 0(“什么都不要”)做两两比较:接受 就是 ,拒绝就是 。把 0 的分数固定为 0,其他分数就有了绝对的含义: 表示 多半会被接受(第 3.4 节)。
3.2 统一的视角:一切都是”从集合中选一个”
不同形式的数据,都能拆成若干个选择事件”从集合 里选了 ”:
两两比较 a ≻ b → 从 {a, b} 选了 a
多选一 从 {a,b,c,d} 选 b → 从 {a, b, c, d} 选了 b
完整排序 a ≻ c ≻ b ≻ d → 从 {a,b,c,d} 选 a;从 {b,c,d} 选 c;从 {b,d} 选 b (“爆炸”排序)
接受 a → 从 {a, ∅} 选了 a
拒绝 a → 从 {a, ∅} 选了 ∅
然后只需要一个模型:每个选项一个分数 ,
两个选项时它就是 BT 的 ;排序拆开后各步相乘就是 Plackett–Luce。对数似然对 的梯度有一个漂亮的形式(第 5 讲推导):
“被选中得比预期多,分数就往上调”。代码 choice_data.py 的 fit_choice_model 就是按这个梯度做的,它能处理所有数据形式。
代码 02_data_formats.py 的演示 2:每种形式各做 3000 次任务(专家标注,四选一、排序都是从 8 个回答里随机挑 4 个),把拟合结果平移到平均值为 0,和专家的真实效用比较:
| 回答 | 真实 | 两两比较 | 四选一 | 四个排序(PL) | 排序拆成对(BT) | 接受 / 拒绝 |
|---|---|---|---|---|---|---|
| A | 2.37 | 2.28 | 2.25 | 2.27 | 2.20 | 2.19 |
| B | 2.01 | 1.78 | 2.04 | 1.89 | 1.83 | 1.84 |
| D | −0.03 | −0.08 | −0.08 | −0.01 | −0.01 | −0.19 |
| H | −2.43 | −2.23 | −2.27 | −2.34 | −2.27 | −2.07 |
| 均方根误差 | 0.163 | 0.118 | 0.079 | 0.129 | 0.176 |
(表里只列了 8 个回答中的 4 个。)五种做法都把效用学回来了。有一个现象值得注意:把排序拆成两两比较、当成 BT 数据拟合,结果和按 Plackett–Luce 拟合几乎一样。原因是在”效用 + Gumbel 噪声”的模型下,一个排序里 排在 前面的概率恰好等于 (第 3 讲证明)。所以 InstructGPT 把每个排序拆成 对比较来训练奖励模型,在模型层面是合理的——但这些对之间不独立(第 3.5 节)。
3.3 哪种问法最划算?
设计数据收集时真正关心的是:同样的成本,哪种问法学得最好? 成本怎么算?读一个回答的时间远多于点一下按钮,所以代码 02 的演示 3 按”读了多少个回答”计成本,预算是读 240 个回答,重复 200 次:
| 问法 | 每次读几个 | 任务数 | 均方根误差 ↓ | 肯德尔 ↑ |
|---|---|---|---|---|
| 两两比较 | 2 | 120 | 0.506 | 0.871 |
| 四选一 | 4 | 60 | 0.749 | 0.807 |
| 四个排序(成本 4) | 4 | 60 | 0.312 | 0.935 |
| 四个排序(成本 6,排序更费脑子) | 4 | 40 | 0.390 | 0.906 |
| 接受 / 拒绝 | 1 | 240 | 0.430 | 0.875 |
- 排序最划算:读完 4 个回答以后,排个序只多花一点功夫,却能给出约 比特的信息,而挑一个只给 2 比特。即使排序多花 50% 的时间(成本 6),它也比两两比较好;编写讲义时另外试了”成本 8”(30 次排序),均方根误差 0.458,仍略好于两两比较的 0.522。这是 InstructGPT 让标注员一次排 4~9 个回答的原因之一。
- 四选一最差:它只告诉你谁最好,扔掉了其余三个之间的顺序。
- 接受 / 拒绝在这个设置里不错:每次只读一个,任务数最多。但它的信息集中在”离阈值近”的回答上(第 3.4 节)。
这些结论依赖成本模型。真实的人排 9 个回答时,后面几名常常是随手排的(疲劳、注意力),排序带来的信息会打折扣;第 3 讲还会看到,同时看到多个选项会产生”情境效应”。设计数据收集时,好的做法是先做一个这样的小模拟,再做一个小规模的真人试点。
3.4 两两比较看不到”绝对水平”
代码 02 的演示 4 造了两个世界:第二个世界里所有回答的效用都比第一个低 3(例如换了一个更弱的模型)。效用整体平移不改变任何胜率,所以两个世界的两两比较数据服从完全相同的分布,拟合结果也几乎一样。只看两两比较,你永远发现不了”这批回答整体都很差”。
接受 / 拒绝数据立刻就看出来了:第一个世界的总体接受率是 41.8%,第二个世界只有 8.6%;拟合出的分数(外部选项固定为 0)整体低了约 3。
这和第 1 讲的”只有差值可识别”是同一件事:两两比较只能识别差值;外部选项提供了一个”零点”,让绝对水平变得可识别。实践中常把两者结合:Chatbot Arena 的投票除了”A 好 / B 好 / 平局”,还有”两个都不好”。
接受 / 拒绝也有弱点:演示 2 里,离阈值最远的 H(真实值 −2.90)估得最不准(−2.41)——它几乎总被拒绝,结果几乎是确定的,信息很少。第 7 讲会把这个直觉变成定理:五五开的问题信息量最大。
3.5 同一次排序拆出的对不独立
一次排序拆出的 6 对比较共享同一组”感受”(同一组噪声),它们是相关的。代码 02 的演示 5 用自助法估计 的标准差:
| 重抽样的单位 | 标准差 |
|---|---|
| 按”一次排序”整体重抽样(正确) | 0.283 |
| 按”一对比较”重抽样(当成独立) | 0.251(正确值的 89%) |
把相关的数据当成独立的,等于假装自己有更多数据,估计的不确定性就偏小、置信区间太窄。每次排的回答越多,低估得越厉害:编写讲义时另做的一次运行里,每次排 2 个时两者相同(本来就没有相关性),排 4 个时约 86%,排 8 个时约 78%。
InstructGPT 的论文报告过一个相关的现象:把同一个提示词的所有比较打散混进数据集,奖励模型在一遍训练之内就过拟合了;他们改成把同一个提示词的 对比较放进同一个批次一起训练。
原则:自助法、交叉验证、训练 / 测试划分,都要以真正独立的单元为单位——这里是”一次排序”,在 RLHF 里通常是”一个提示词”。第 5.6 节和第 5 讲还会遇到这个原则。
3.6 隐式反馈:点击也是选择数据
前面的数据都是请人专门来比较的(显式反馈)。现实中更多的偏好数据是隐式的:搜索、推荐里的点击、播放、购买。它们量大、免费,却有一个陷阱:用户只会点他看到的东西。
信息检索里最常用的点击模型是检查假设(examination hypothesis):
代码 03_clicks_as_choices.py 模拟了 6 个搜索结果,线上排序把最好的”戊”放在第 5 位(只有 30% 的人看得到):
- 直接按点击率排序:排名第 1 位、吸引力一般的”乙”点击率 0.374,比最有吸引力的”戊”(0.223)高得多;和真实顺序的肯德尔 只有 0.33。拿这个点击率去更新排序,偏差会自我强化(第 17 讲:反馈循环)。
- “跳过上方”规则(Joachims 2002):用户从上往下看,跳过了第 1、2 条而点了第 3 条,说明他看过前两条但更喜欢第 3 条——这把点击变成了”从看到的选项里选一个”。想法很聪明,但在一个固定的排序下,这条规则只能产生”下面的 ≻ 上面的”,比较图的箭头全部朝一个方向。BT 只好得出”越往下越好”:拟合出的顺序是”戊 > 丁 > 己 > 甲 > 丙 > 乙”,几乎是线上排序倒过来( = 0.07)。
- 修正一:随机化。另取 4000 次搜索,每次把结果随机打乱后再展示。每个结果在每个位置出现的机会相同,位置的影响被平均掉,点击率的顺序完全正确( = 1.00)。代价是这部分用户的体验变差,所以通常只随机化一小部分流量,或者只随机交换相邻的两条(Radlinski & Joachims 2006)。
- 修正二:逆倾向加权(IPS)。在原来的日志上,位置 的一次点击算作 次。加权后的点击率是吸引力的无偏估计(例如”戊”:真实 0.731,估计 0.742),顺序也完全正确。前提是知道每个位置被看到的概率——这通常又要靠一个随机化实验来估计(Joachims、Swaminathan、Schnabel 2017)。
这个例子的教训适用于所有偏好数据:弄清楚每个选择是从哪个选择集里做出的。在 RLHF 里,“标注员看到了哪些回答、按什么顺序看到的”同样会影响他的选择(第 3 讲的情境效应,第 14 讲的位置偏差)。真实的点击模型更复杂(例如级联模型:从上往下看,点了一个就离开),第 15 讲会更系统地讨论”从行为推偏好”。
4. Bradley–Terry 模型
4.1 定义与似然
定义。每个选项 有一个分数 ,
最后一种写法是 Bradley 和 Terry 原文的形式: 是选项的”实力”, 赢的概率等于它的实力占两者实力之和的比例。
似然。设 是 赢 的次数。各次比较独立时,
只依赖于”谁赢了谁几次”(胜负表),和比较的先后顺序无关——这一点在第 5 讲比较 Elo(在线更新,依赖顺序)和最大似然(不依赖顺序)时很重要。
可识别性。 加一个常数,似然不变(第 1 讲)。所以要加一个约束:让平均值为 0,或者把某个选项固定为 0,或者加 L2 正则化。
4.2 比较图:什么时候最好的分数存在?
把选项看成节点,“比较过”看成边,就得到比较图;把” 赢过 “看成一条 的有向边,就得到胜负图。
Zermelo(1929)/ Ford(1957)条件:在”平均值为 0”的约束下,BT 的最大似然估计存在且唯一,当且仅当胜负图是强连通的——从任何一个选项出发,都能沿着”赢过”的箭头走到任何其他选项。等价地说:不管怎样把选项分成两组,总有第一组的某个选项赢过第二组的某个选项,并且反过来也有。
代码 04_bt_details.py 的演示 1 展示了两种违反的情形:
(a) 某个选项从来没输过。没有箭头指向它,最大似然认为”它比别人好无穷多”:不加正则化时,迭代 100、1000、10000 步, 分别是 4.64、6.97、9.27,永远不会停。这不是代码的错误,而是数据真的支持”越大越好”。加一点 L2 正则化(第 5 讲:相当于”分数不会无穷大”的高斯先验),分数收敛到 2.29。小数据集上这很常见:一个新模型只打了几场,碰巧全胜。
(b) 选项分成了互不比较的两群。 内部比较 400 次, 内部比较 400 次。群内的相对高低估计得很好,但群与群之间的高低完全无从得知;正则化把两群的平均分都拉向 0,于是模型预测 A 胜 H 的概率只有 0.739,而真实是 0.992。加上 30 次 C 与 F 的”桥接”比较,预测升到 0.968;300 次升到 0.986。
实践建议:拟合之前先检查比较图(代码里的 check_graph);设计数据收集时保证图连通,最好让每个选项都和各种水平的对手比较过。桥接用实力接近的对手更省(实力悬殊的比较几乎总是一边倒,信息很少,第 7 讲)。
4.3 拟合优度:数据真的服从 BT 吗?
第 2.5 节说违反 SST 就说明 BT 不合适。怎样在数据上检验?
似然比检验(G 检验)。把 BT 和饱和模型比较:饱和模型给每一对 一个独立的胜率(取观察到的频率),有 个参数;BT 只有 个。如果数据真的服从 BT,饱和模型多出的参数只能拟合噪声,两者的对数似然差得不多。统计量
在”数据服从 BT”时近似服从自由度为 的卡方分布。 时自由度为 21,5% 显著性水平的临界值约为 32.7。
代码 04 的演示 2:每一对回答各比较 300 次:
| 数据来源 | 结论 | 明显违反 SST 的三元组 | |
|---|---|---|---|
| 专家(数据确实来自 BT) | 17.3 | 不能拒绝 BT | 0 / 56 |
| 两群人混合(60% 简洁 + 40% 详尽) | 182.7 | 拒绝 BT | 9 / 56 |
两群人各自服从 BT,混在一起就不服从了,检验清楚地报了警。
局限:检验需要每一对都比较过足够多次。真实的 RLHF 数据几乎每一对回答只比较一次,这种检验做不了,通常要在”回答的特征”层面、或者在大规模的排行榜数据上检验。
4.4 平局
标注员常常说”差不多”。Llama 2 让标注员选”明显更好 / 更好 / 稍好 / 差不多(不确定)“;Chatbot Arena 的投票里有”平局”和”两个都不好”。怎么处理?
两个经典的平局模型:
- Rao–Kupper(1967):只有差得够多才分得出高低。设察觉阈值 :
时就是普通的 BT。这正是第 2.2 节”咖啡里的糖”的随机版本。
- Davidson(1970):,,。它保留了”胜负之比 “这个 BT 的性质。
代码 04 的演示 3:专家按 Rao–Kupper 模型()比较 6000 次,15% 是平局。四种处理方法给出的顺序都对,差别在尺度(最高分与最低分之差)上:
| 真实 | 丢掉平局 | 各算半场 | Rao–Kupper | Davidson | |
|---|---|---|---|---|---|
| 最高 − 最低 | 4.80 | 5.70 | 4.21 | 4.79 | 6.56 |
- 丢掉平局:剩下的都是”分得出高低”的比较,看起来比真实的更一边倒,尺度被放大。
- 各算半场:平局把胜率往 0.5 拉,尺度被压缩。
- Rao–Kupper 是生成数据的模型,分数和阈值(估计 0.77,真实 0.8)都估得准。
- Davidson 对平局的假设和生成数据的方式不同,尺度反而偏大:用错了平局模型,尺度同样会错。
尺度为什么重要?分数差决定了预测的胜率 ,也决定了 RLHF 里奖励模型给出的奖励差有多大。尺度错了,概率就不校准(第 5 讲),下游的 KL 系数 的含义也跟着变(第 8 讲)。
5. 泛化:从”每个选项一个分数”到”分数是特征的函数”
5.1 表格式模型的局限
到目前为止,BT 给每个选项一个独立的分数——像一张表格,每个选项一行。这对棋手、排行榜上的模型没问题,选项是固定的。可是 RLHF 的奖励模型要给从没见过的回答打分:语言模型每次生成的回答都是新的,表格里没有这一行。
代码 05_generalization.py 造了一个 120 个回答的”回答池”,每个回答有 6 个特征(正确、清晰、有例子、log 长度、花哨、详细)。专家的效用是
其中”个性”是特征描述不到的部分(例如某个例子特别贴切),标准差 0.5。前 60 个回答之间做 800 次专家比较用来训练,后 60 个回答从没出现过。演示 1 的排序正确率(在测试的回答对上,模型认为更好的那个是否真的是专家效用更高的那个):
| 模型 | 见过的回答 | 没见过的回答 |
|---|---|---|
| 表格式 BT | 91.8% | 50.0% |
| 线性 BT | 90.7% | 89.6% |
表格式模型对新回答一无所知,只能抛硬币。
5.2 线性 BT:特征差上的逻辑回归
想法:不给每个选项单独一个分数,而是让分数成为特征的函数 。于是
这正是没有截距的逻辑回归,输入是”赢家的特征 − 输家的特征”。参数从 个(每个选项一个)变成 个(每个特征一个),而且只要新回答的特征算得出来,就能打分。
为什么没有截距? 截距 对每个选项都一样,在差值里消掉了——和”只有差值有意义”是同一回事。同理,任何对两个选项都一样的特征都学不到。这在带上下文时有一个重要的推论:奖励模型 里只依赖提示词 的部分(例如”这个问题难不难”)在 里消掉了,所以奖励模型的分数在不同提示词之间没有可比性,只有同一个提示词的回答之间的差值才有意义(练习 6)。
演示 1 里线性 BT 学到的权重:正确 +2.66、清晰 +2.38、有例子 +0.88(真实是 3、2.5、1),log 长度 +0.18、花哨 −0.72、详细 +0.31(真实都是 0,800 次比较还不够把它们估准;4000 次时分别是 +0.04、−0.13、+0.34)。
5.3 从线性 BT 到奖励模型
真实的奖励模型把这个想法推到极致:
是一个大语言模型读完提示词和回答后的最后一层表示(几千维), 是一个线性”打分头”。训练损失就是第 1 讲的
也就是线性 BT,只是特征 也一起学。第 6 讲会在一个小型文本编码器上做这件事。
5.4 偏差与方差:什么时候哪个模型更好?
代码 05 的演示 2 改变训练数据量(每个数据量重复 3 次):
| 比较次数 | 表格式(见过的回答) | 线性(见过的回答) | 线性(没见过的回答) |
|---|---|---|---|
| 25 | 63.4% | 79.5% | 80.7% |
| 100 | 76.0% | 87.5% | 86.0% |
| 400 | 88.8% | 91.4% | 89.4% |
| 1,600 | 93.7% | 92.4% | 89.2% |
| 6,400 | 97.6% | 92.7% | 89.3% |
- 数据少时线性模型遥遥领先:6 个参数比 60 个参数好估计得多(方差小)。
- 数据多时表格式模型在见过的回答上反超:线性模型永远学不到特征之外的”个性”(偏差),而表格式模型数据够多时能把”个性”也学进去。线性模型的上限停在 90% 左右。
这就是偏差–方差权衡。真实的奖励模型非常灵活(几十亿参数),所以需要大量数据,也很容易过拟合(第 5、6 讲)。
5.5 特征决定上限:遗漏变量偏差
如果特征里缺了一个重要的东西会怎样?回答池里,越清晰的回答越可能是正确的()。代码 05 的演示 3 去掉”正确”这个特征,用 3000 次比较训练:
| 模型 | “清晰”的权重 | “有例子”的权重 | 全部测试对 | 正确性不同的对 | 正确性相同的对 |
|---|---|---|---|---|---|
| 全部特征 | 2.23 | 0.86 | 89.1% | 99.7% | 79.7% |
| 去掉”正确” | 3.16 | 0.56 | 78.4% | 77.3% | 79.4% |
三件事:
- 在”一个对、一个错”的回答对上,准确率从 99.7% 掉到 77.3%:特征里没有的东西,模型学不到——这就是第 1 讲手写规则的困境。
- “清晰”的权重变大了:模型把”正确”的功劳记到了与它相关的”清晰”头上。统计学把这叫遗漏变量偏差。后果是:写得很清晰但内容错误的回答会被高估——如果策略学会了”写得清晰但不管对错”,奖励模型挡不住。
- 和”正确”无关的”有例子”,权重反而变小了。这是逻辑回归特有的现象(统计学叫”不可压缩性”):漏掉一个重要变量,相当于多了一份”解释不了的噪声”,模型对所有比较都更没把握,其余的权重整体缩小。线性回归没有这个现象。
真实的奖励模型用整个语言模型的表示做特征,“看不见对错”没有这么极端,但同样存在:奖励模型很难核实事实,往往只能依赖”看起来对不对”的线索(第 14 讲)。
5.6 外推:过度优化的第二个来源
第 1 讲的奖励过度优化只有一个来源(标注员的偏差)。代码 05 的演示 4 展示第二个:外推。用 4000 次众包比较(众包标注员和第 1 讲一样喜欢长的、花哨的回答)拟合线性 BT:
众包:正确 +2.66 清晰 +2.20 有例子 +0.98 log长度 +0.76 花哨 +1.67 详细 +0.42
专家:正确 +2.62 清晰 +2.22 有例子 +0.94 log长度 +0.04 花哨 −0.13 详细 +0.34
众包奖励模型学到了正的长度和花哨权重。训练数据里回答的长度在 67~1198 字之间。现在造几个”假想”的回答:
| 回答 | 众包奖励 | 专家奖励 |
|---|---|---|
| 训练集里专家最喜欢的回答 | 6.85 | 5.66 |
| 一个正确、清晰度中等、没例子的普通回答 | 3.97 | 3.89 |
| 错误、含糊、满屏格式,1200 字 | 3.89 | 0.73 |
| 错误、含糊、满屏格式,5000 字 | 4.97 | 0.80 |
| 错误、含糊、满屏格式,20000 字 | 6.03 | 0.86 |
线性模型说”越长越好”,而且没有上限。把长度推到训练数据从没出现过的范围,一个错误、含糊的回答就超过了一个正确的普通回答,并且一路逼近最好的回答。训练数据里根本没有这么长的回答,模型是在外推——它在那里的分数毫无根据。
真实的 RLHF 里,策略会主动去寻找奖励模型给高分的地方,而这些地方往往正是奖励模型没见过的地方(极长的回答、奇怪的格式、讨好的语气)。Singhal 等(2023)观察到 RLHF 让回答越来越长。第 8 讲的 KL 约束和第 14 讲的风格控制都是应对办法。
5.7 怎样划分训练集和测试集
最后一个”泛化”问题是:你测的是哪一种泛化? 代码 05 的演示 5 在 120 个回答上做 6000 次比较,用两种方式划分:
| 划分方式 | 训练 / 测试 | 表格式 | 线性 |
|---|---|---|---|
| 按比较随机划分(80/20) | 4800 / 1200 | 94.7% | 90.2% |
| 按回答划分(测试回答全是新的) | 3754 / 242 | 50.0% | 88.8% |
按比较随机划分时,表格式模型看起来最好——因为测试里的回答几乎都在训练里出现过。按回答划分,它立刻掉到 50%。两种划分回答的是不同的问题:“对已有的回答再比较一次,能预测对吗?“vs”对新的回答,能打对分吗?” 奖励模型要回答的是后者,所以 RLHF 里通常按提示词划分训练和测试,同一个提示词的回答不跨越两边。这和第 3.5 节”以独立的单元为单位”是同一个原则。
6. 小结
- 偏好关系:完备 + 传递 ⇔ 能用效用表示(有限集)。真实的人有察觉阈值,无差异可以不传递(半序)。这门课把偏好建模成排序上的概率分布:所有选择数据(两两、多选一、排序)都是它的边缘分布。 个参数太多,BT / PL 只用 个。
- 随机传递性:WST ⊂ MST ⊂ SST 一级比一级强。BT 一定满足 SST;混合人群可能违反 SST,孔多塞混合连 WST 都违反。
- 五种数据形式都能拆成”从集合 里选了 “的事件,用同一个 softmax 模型和同一个拟合器处理;梯度 = 观察到的被选次数 − 模型预期的次数。
- 问法:在”按读了多少个回答计成本”的模型下,排序最划算,四选一最差;结论依赖成本模型,应先模拟、再试点。两两比较看不到绝对水平,外部选项(接受 / 拒绝)提供零点。同一次排序拆出的比较不独立,重抽样和划分都要以独立单元为单位。
- 点击数据:选择集是”看到的”,不是”展示的”。位置偏差会让点击率排序自我强化;固定排序下的”跳过上方”规则会把顺序翻过来;随机化和逆倾向加权可以修正。
- BT 的细节:似然只依赖胜负表;最大似然存在且唯一 ⇔ 胜负图强连通(Zermelo–Ford),否则用正则化或桥接比较;似然比检验可以检验 BT 是否合适;平局要么用 Rao–Kupper / Davidson 建模,要么意识到”丢掉”会放大尺度、“各算半场”会压缩尺度。
- 泛化:表格式模型不能给新选项打分;线性 BT = 特征差上的逻辑回归(没有截距,只依赖提示词的部分消掉);奖励模型 = 神经网络特征上的线性 BT。偏差–方差决定了数据量与模型灵活性的匹配;缺了特征会学不到、还会算错账(遗漏变量偏差);模型在训练数据之外会外推出离谱的分数(过度优化的第二个来源);按什么单位划分数据决定了你测的是哪种泛化。
7. 与测验、口试和项目的关系
- 测验与口试可能会问:给一个排序,写出它拆成的选择事件和 Plackett–Luce 概率;判断一组两两胜率满足哪种随机传递性;给一份胜负表,判断最大似然是否存在;解释”为什么奖励模型没有截距""为什么两两比较看不到绝对水平""为什么按回答划分测试集”。
- 期末项目:如果你的项目要收集偏好数据,第 3.3 节的”先模拟、再试点”和第 3.5、5.7 节的”以独立单元为单位”应该写进预分析计划;如果你的项目用到别人的偏好数据,先检查比较图(第 4.2 节)、先做拟合优度检验(第 4.3 节)。
8. 练习
练习 1(转换)。把下面的数据都写成”从集合中选一个”的事件:(a) 排序 ;(b) 从 里选了 ;(c) 拒绝 。再把 (a) 拆成两两比较,一共几对?
参考答案
(a) 从 选 ;从 选 ;从 选 。拆成两两比较:、、、、、,共 对。 (b) 从 选 (也可以拆成 、,但它们不独立,而且丢掉了” 和 之间不知道”这个信息)。 (c) 从 选 。
练习 2(计算)。分数 。 (a) 用 Plackett–Luce 算 。 (b) 算 ——用两种方法:把所有满足条件的排序的概率加起来;直接用 。 (c) 一次完整排序(3 个选项)、一次三选一、一次两两比较,信息量的上限各是多少比特?
参考答案
(a) 。 (b) 满足条件的排序有 、、。代码 01 算出 PL 下它们的概率约为 0.49、0.18、0.22,合计约 0.88;。两种方法一致(第 3 讲证明这对任意分数都成立)。 (c) 比特; 比特;1 比特。
练习 3(证明与反例)。 (a) 证明 BT 模型满足中随机传递性(提示:它满足 SST)。 (b) 写出一个 3 个选项的两两胜率矩阵,满足 WST 但违反 SST。 (c) 一个人群的数据违反 SST,能说明其中每个人都不服从 BT 吗?
参考答案
(a) SST 要求 ,而 ,所以 SST ⇒ MST。BT 满足 SST(第 2.5 节),因此满足 MST。 (b) 例如 、、:满足 WST()、违反 SST()。代码 01 的”两群人”是一个更自然的例子。 (c) 不能。代码 01、04 的”两群人”里每个人都服从 BT,违反 SST 来自混合。违反 SST 只能说明”用一个 BT 模型描述这群人不合适”,可能需要的是混合模型或因子模型(第 4 讲),而不是”人不理性”。
练习 4(比较图)。5 个选项的胜负记录如下:A 胜 B 3 次、B 胜 C 2 次、C 胜 A 1 次、D 胜 E 4 次、E 胜 D 1 次。 (a) BT 的最大似然估计(平均值为 0)存在吗?为什么? (b) 最少加哪一场比赛的结果,就能让它存在?
参考答案
(a) 不存在(不唯一)。比较图分成了 和 两块,两块之间的相对高低无从确定(“平均值为 0”只固定了整体,不能固定两块之间的差)。每一块内部是强连通的(A→B→C→A;D↔E),所以块内的差值是确定的。 (b) 一场比赛不够:只加”C 胜 D”,从 D、E 出发走不回 A、B、C,胜负图仍不是强连通的,这时最大似然会把 推到比 高出无穷多。至少要两场,例如”C 胜 D”和”E 胜 A”(两个方向都有)。实践中加上 L2 正则化,一场桥接也能得到有限的估计,但它主要由先验决定。
练习 5(平局)。Rao–Kupper 模型,。 (a) 时,平局的概率是多少? 时呢? (b) 用一句话解释:为什么丢掉平局会放大分数的尺度?
参考答案
(a) :,平局 。:,,平局 。 (b) 平局主要发生在实力接近的选项之间;丢掉平局后,剩下的比较里”一边倒”的比例比真实的高,BT 只能用更大的分数差来解释这种一边倒。( 时,去掉平局后 的胜率是 ,对应 BT 的分数差约 2.6,而不是 2。)
练习 6(奖励模型)。奖励模型 ,其中 的一部分特征只依赖提示词 (例如”问题的长度""问题属于数学类”)。 (a) 这部分特征的权重能从比较数据里学到吗? (b) 某个奖励模型给提示词 1 的回答打 3.2 分,给提示词 2 的回答打 −0.5 分。能说”第一个回答比第二个好”吗? (c) RLHF 的第 3 步只用到同一个提示词下奖励的差值吗?这对 (b) 意味着什么?
参考答案
(a) 学不到。比较总是在同一个提示词的两个回答之间做, 里只依赖 的部分消掉了,梯度恒为 0。 (b) 不能。奖励只在同一个提示词内有可比性,不同提示词的奖励之间可以差任意一个”只依赖提示词”的常数。 (c) KL 约束的最优策略 在每个提示词内部归一化,只依赖同一个提示词下奖励的差值,所以不受影响。但如果有人把奖励模型的分数跨提示词比较(例如”挑出奖励最高的 10% 的数据”),结果就可能被”提示词常数”主导。实践中常对奖励做归一化或减去基线(第 8 讲)。
练习 7(数据划分)。你有一份 RLHF 数据:2000 个提示词,每个提示词 4 个回答,由 30 位标注员排序(每个提示词只由一位标注员排序)。你想估计奖励模型对新提示词的排序正确率,也想知道它对新标注员的泛化能力。怎样划分训练和测试?
参考答案
估计对新提示词的泛化:按提示词划分(例如 1600 个训练、400 个测试),同一个提示词的所有比较都在同一边;不要按比较随机划分(第 5.7 节)。估计对新标注员的泛化:按标注员划分(例如 24 位的数据训练、6 位的数据测试)。两者可以组合(测试集里既是新提示词,又是新标注员)。报告时说明划分方式;做自助法置信区间时,也要按同样的单元重抽样(第 3.5 节)。
练习 8(动手)。在 02_data_formats.py 演示 3 里把排序的成本改成 8,排序还比两两比较划算吗?如果真实的标注员排 4 个回答时,第 3、4 名有一半的概率是随手排的,你预计结论会怎样变化?
参考答案
编写讲义时实际运行的结果:成本 8 时只能做 30 次排序,均方根误差 0.458,两两比较(120 次)为 0.522,排序仍略好。如果后两名有一半是随手排的,第三个选择事件(从后两名里选)的信息量大约减半,而且是”有偏差的噪声”;可以预期排序的优势缩小,甚至反转。可以在 task_rank4 里加入这种”疲劳”模型来验证(具体数字以你运行的结果为准)。
9. 延伸阅读
课程教材
- Truong, Haupt, Koyejo. Machine Learning from Human Preferences. 第 1 章 1.4–1.5 节(随机偏好、比较数据的类型)。
偏好关系与随机偏好
- Luce. Semiorders and a Theory of Utility Discrimination. Econometrica 1956.
- Block, Marschak. Random Orderings and Stochastic Theories of Responses. 1960.(随机偏好与随机传递性的经典论文)
- Tversky. Intransitivity of Preferences. Psychological Review 1969.
Bradley–Terry 及其扩展
- Zermelo. Die Berechnung der Turnier-Ergebnisse als ein Maximumproblem der Wahrscheinlichkeitsrechnung. 1929.
- Bradley, Terry. Rank Analysis of Incomplete Block Designs: I. Biometrika 1952.
- Ford. Solution of a Ranking Problem from Binary Comparisons. American Mathematical Monthly 1957.
- Rao, Kupper. Ties in Paired-Comparison Experiments: A Generalization of the Bradley-Terry Model. JASA 1967.
- Davidson. On Extending the Bradley-Terry Model to Accommodate Ties in Paired Comparison Experiments. JASA 1970.
- Plackett. The Analysis of Permutations. Applied Statistics 1975.
- Hunter. MM Algorithms for Generalized Bradley-Terry Models. Annals of Statistics 2004.(第 5 讲会用到)
隐式反馈
- Joachims. Optimizing Search Engines using Clickthrough Data. KDD 2002.
- Radlinski, Joachims. Minimally Invasive Randomization for Collecting Unbiased Preferences from Clickthrough Logs. AAAI 2006.
- Craswell, Zoeter, Taylor, Ramsey. An Experimental Comparison of Click Position-Bias Models. WSDM 2008.
- Joachims, Swaminathan, Schnabel. Unbiased Learning-to-Rank with Biased Feedback. WSDM 2017.
奖励模型与泛化
- Ouyang et al. Training Language Models to Follow Instructions with Human Feedback. NeurIPS 2022.(排序数据、按提示词组织批次)
- Singhal et al. A Long Way to Go: Investigating Length Correlations in RLHF. 2023.
10. 下一讲预告
本讲多次”借用”了一个还没证明的事实:在”效用 + Gumbel 噪声”的模型下,选择概率是 softmax,排序的概率是 Plackett–Luce,排序里 排在 前面的概率恰好是 。第 3 讲把它证明出来,并回答更深的问题:
- 为什么偏偏是 Gumbel? Luce 的选择公理(无关选项独立性,IIA)说” 和 的相对偏好,不受旁边还有什么选项影响”。定理:在独立噪声的随机效用模型里,满足 IIA 当且仅当噪声是 Gumbel 分布。
- IIA 什么时候失效? 红色公交车 / 蓝色公交车(加入一个”克隆”选项,抢走的应该只是它的”双胞胎”的份额);混合人群(本讲已经见过);情境效应(加入一个明显更差的”诱饵”,反而让某个选项更受欢迎——这甚至违反了所有随机效用模型的共同性质)。
- 有哪些比 BT 更灵活的模型? probit、嵌套 logit、混合 logit;以及怎样用”公理”来检验一份数据能不能用随机效用模型解释。