第 4 讲:因子模型

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

课程源码 ZIP ↓

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

本篇目录

对应:Stanford CS329H Fall 2026 Lecture 4(10/5 Factor models)。依据教材第 1 章 1.6、1.9、1.10 节(Rasch 模型、KK 维因子模型、理想点模型、识别与 Rashomon 效应、逐项数据与成对数据的联系)及第 1 章幻灯片;Community Notes 一节依据教材第 5 章 5.6 节和 Community Notes 公开的算法说明。 配套代码:code/lecture04/(只用 Python 标准库) 预计阅读时间:3~4 小时(含运行代码)


0. 本讲导航

0.1 学完本讲,你应该能够

  1. 写出 Rasch 模型,解释”用户胃口”和”选项吸引力”,说出它的可识别性约束。
  2. 推导 Rasch 的”特定客观性”:在”恰好接受了一个”的条件下,选哪个的概率与用户无关;说清逐项数据和成对数据各能识别哪些参数。
  3. 解释”附带参数问题”:为什么每人数据很少时,联合最大似然会系统性地估错,而条件方法不会。
  4. 写出 KK 维点积因子模型,说出交替优化的思路,解释 KK 的选择、过拟合与冷启动。
  5. 写出理想点模型,解释”单峰偏好”,并证明平方距离的理想点模型是”偏置 + 点积”模型的受约束版本。
  6. 解释因子模型的旋转不可识别性和 Rashomon 效应,说出它们对”解读嵌入”和”选择奖励模型”的含义。
  7. 写出因子模型下的个性化成对比较概率,说出标准 BT 成立的三个条件,比较全局 BT、每人单独 BT 和个性化因子 BT。
  8. 用因子模型解释 Community Notes 的”桥接”思想,说出截距的”零点问题”为什么是一个规范性选择。

0.2 先修知识

知识点用在哪里最低要求
第 1~3 讲全部BT、逐项数据与外部选项(第 2 讲)、混合人群破坏 IIA(第 3 讲)
逻辑回归第 2、3 节知道 P(y=1)=σ(w⊤x)P(y=1) = \sigma(w^\top x);第 2 讲的线性 BT
线性代数第 3、5 节向量点积、矩阵乘法、旋转矩阵 R⊤R=IR^\top R = I

0.3 本讲地图

第1节  从第 3 讲到第 4 讲:口味有分歧,怎样从别人那里“借”信息
第2节  Rasch 模型:胃口与吸引力、特定客观性、附带参数问题      ← 代码 01
第3节  K 维因子模型:矩阵分解、选 K、冷启动、个性化推荐         ← 代码 02
第4节  理想点模型:单峰偏好;理想点 = 偏置 + 点积              ← 代码 03
第5节  识别与 Rashomon 效应:嵌入能不能解读?                  ← 代码 04
第6节  成对比较的个性化:什么时候一个 BT 够用                  ← 代码 05
第7节  案例:Community Notes 与“桥接”                          ← 代码 06
第8–12节 小结、与考核的关系、练习、延伸阅读、下一讲预告

1. 从第 3 讲到第 4 讲

第 3 讲看到:人群的口味有分歧时,“每个选项一个分数”的模型会出错——混合 logit 能修复它,但每个人的口味是什么,我们还不知道怎么估计。直接给每个用户单独拟合一个模型?每个用户通常只有几条、几十条反馈,远远不够。

因子模型的想法是:人的口味虽然各不相同,但有结构。喜欢详细解释的人,往往也喜欢有例子的回答;喜欢科幻电影的人,往往也喜欢某类游戏。如果用少数几个”隐藏维度”就能描述大部分差异,那么每个用户只需要估计几个数(他在这几个维度上的口味),而选项在这些维度上的位置可以用所有人的数据来估计——这就是”从别人那里借信息”。

本讲从最简单的情形(每个用户一个数、每个选项一个数,Rasch 模型)开始,逐步加上口味的维度。


2. Rasch 模型

2.1 逐项数据

第 2 讲介绍过逐项反馈矩阵 Y∈{0,1}N×MY \in \{0, 1\}^{N \times M}:NN 个用户、MM 个选项,Yij=1Y_{ij} = 1 表示用户 ii 接受了选项 jj(点赞、购买、播放完),大部分格子是空的。这类数据在推荐系统里非常丰富(每次交互都是一条),但它有一个两两比较没有的困难:每个用户的”宽严”不同——有人什么都点赞,有人很少点赞。

2.2 模型

丹麦数学家 Rasch(1960)为考试设计了一个模型:学生 ii 答对题目 jj 的概率 = σ(能力i−难度j)\sigma(\text{能力}_i - \text{难度}_j)。换到偏好数据:

P(Yij=1)=σ(ai+zj)P(Y_{ij} = 1) = \sigma(a_i + z_j)
  • aia_i:用户的胃口(appetite)——整体上爱不爱接受。
  • zjz_j:选项的吸引力(appeal)——对所有人都一样的那部分好坏。

接受的概率只依赖于两者之和。这是教育测量里项目反应理论(IRT)的单参数模型(1PL);加上”题目区分度”σ(αj(θi−bj))\sigma(\alpha_j(\theta_i - b_j)) 就是 2PL,再加上”猜对的概率”就是 3PL。它是计算机自适应考试的基础(第 7 讲)。

识别:所有 aia_i 加 cc、所有 zjz_j 减 cc,预测不变,所以要固定一个零点。

代码 01_rasch.py 的演示 1:300 个用户各对 20 个回答给一次接受 / 拒绝,同时估计 300 个胃口和 20 个吸引力。吸引力估得很准(相关系数 0.995,每个回答有 300 条数据),胃口估得粗一些(0.869,每个用户只有 20 条)。这是所有因子模型的普遍现象:数据多的一方估得准,数据少的一方估得粗。

2.3 特定客观性:用户参数在比较中抵消

Rasch 模型有一个漂亮的性质。只看”两个选项 jj、kk 恰好接受了一个”的用户,接受的是 jj 的概率是

σ(a+zj) (1−σ(a+zk))σ(a+zj) (1−σ(a+zk))+(1−σ(a+zj)) σ(a+zk)=ezjezj+ezk=σ(zj−zk)\frac{\sigma(a + z_j)\,(1 - \sigma(a + z_k))}{\sigma(a + z_j)\,(1 - \sigma(a + z_k)) + (1 - \sigma(a + z_j))\,\sigma(a + z_k)} = \frac{e^{z_j}}{e^{z_j} + e^{z_k}} = \sigma(z_j - z_k)

(利用 σ(x)/(1−σ(x))=ex\sigma(x)/(1 - \sigma(x)) = e^x,分子分母同除以 (1−σ(a+zj))(1−σ(a+zk))(1-\sigma(a+z_j))(1-\sigma(a+z_k))。)胃口 aa 完全消掉了。Rasch 把这叫特定客观性(specific objectivity):比较两道题的难度,不需要知道是谁在答题。

代码 01 的演示 2:6000 个用户(胃口差异很大),按胃口分成三组:

用户组接受甲的比例恰好接受一个时,接受甲的比例
胃口最低的 1/30.3020.744
中间的 1/30.6630.730
胃口最高的 1/30.9030.763
理论值 σ(0.8−(−0.4))\sigma(0.8 - (-0.4))0.769

三组人的接受率天差地别,“二选一”的比例却都约等于 0.769(差别在抽样误差范围内)。

对偏好学习的含义(教材第 1.10 节):

数据形式能识别什么适合什么
逐项(接受 / 拒绝)用户胃口 aia_i 和选项吸引力 zjz_j(差一个常数)个性化推荐、每次交互都是数据
两两比较只有选项之间的差 zj−zkz_j - z_k全局排名(棋手、模型排行榜)、标注员的宽严不重要

两两比较的数据分不出”所有选项都很好、用户很挑剔”和”所有选项都一般、用户很宽松”——这就是第 2 讲”两两比较看不到绝对水平”的另一面。第 1 讲代码 01 的”打分的宽严在比较中抵消”,宽严正是这里的胃口。

2.4 一个统计陷阱:附带参数问题

估计 Rasch 模型最直接的办法是联合最大似然(JMLE):同时估计所有用户的胃口和所有选项的吸引力。这看起来天经地义,却有一个陷阱。代码 01 的演示 3:3000 个用户,每人回答同样的 nn 个选项,比较 JMLE 和只用”恰好接受一个”的条件比较(把它们当成 BT 数据拟合,胃口根本不出现):

每人回答几个JMLE 估计的吸引力差 ÷ 真实差条件比较理论值 n/(n−1)n/(n-1)
22.0011.0012.000
51.2730.9851.250
201.0410.9851.053

每人只答 2 道题时,JMLE 把两道题的吸引力之差估成了真实值的两倍(Andersen 1973 证明了这个精确结果);答 20 道题时高估约 5%。

原因:每个用户的胃口只由他自己的几条数据估计,数据量不随用户数增加,永远估不准;这个误差又”传染”给了选项的估计。参数个数随数据量一起增长时,最大似然可能不一致——数据再多也不收敛到真值。统计学把这叫附带参数问题(Neyman & Scott 1948)。条件方法完全不受影响,因为它根本不估计胃口。

启示:给每个标注员(或每个用户)一个参数、每人的数据又很少时,要小心这类偏差。补救的办法有正则化(第 5 讲)、把用户参数当作随机效应积分掉(第 6 讲的贝叶斯视角),或者像这里一样用条件方法让它消掉。


3. KK 维因子模型

3.1 从一个数到一个向量

Rasch 的用户只有一个数(胃口):它知道”这个人爱不爱点赞”,不知道”他喜欢什么样的回答”。把口味变成 KK 维向量:

P(Yij=1)=σ(ai+zj+Ui⊤Vj),Ui,Vj∈RKP(Y_{ij} = 1) = \sigma\big(a_i + z_j + U_i^\top V_j\big), \qquad U_i, V_j \in \mathbb{R}^K
  • UiU_i:用户的口味向量;VjV_j:选项的特征向量。
  • Ui⊤VjU_i^\top V_j 衡量”用户的口味和选项的特征有多对路”。
  • K=0K = 0 就是 Rasch;再去掉 aia_i,就是”只看流行度”。

教材里这个模型的写法是 Hij=Ui⊤Vj+ZjH_{ij} = U_i^\top V_j + Z_j(用户胃口可以并进 UiU_i 的一个分量)。所有参数排成矩阵,logit 矩阵 ≈\approx 偏置 +UV⊤+ U V^\top,是一个低秩矩阵——这就是推荐系统里的矩阵分解。2006–2009 年的 Netflix Prize(100 万美元奖金,目标是把 Netflix 的推荐准确率提高 10%)让它成了推荐系统的标准方法;今天的”双塔模型”(用户塔、物品塔各自用神经网络算出向量,再做点积)是它的深度学习版本。

3.2 怎样拟合:交替的小逻辑回归

参数很多((N+M)(K+1)(N + M)(K + 1) 个),但有一个好用的结构:

  • 固定所有选项的参数,每个用户的 (ai,Ui)(a_i, U_i) 是一个只有 K+1K + 1 个参数的逻辑回归(特征是 VjV_j,偏移是 zjz_j);
  • 固定所有用户的参数,每个选项的 (zj,Vj)(z_j, V_j) 也是一个小逻辑回归(特征是 UiU_i,偏移是 aia_i)。

两者交替,每个小问题用牛顿法几步就收敛(代码 factor_models.py 的 fit_mf)。这是”交替最小二乘”(ALS)在逻辑回归上的版本。注意必须随机初始化 VV:全 0 时,UU 的梯度也是 0,永远学不动。

3.3 选 KK

代码 02_matrix_factorization.py 造了一个”口味世界”:40 个回答各有两个隐藏的风格维度(详细程度、正式程度)和一个质量,200 个用户各有胃口和两维口味。每个格子有 60% 的概率被观察到(每人约 19 条训练数据):

模型参数个数测试对数损失准确率AUC
只看流行度400.5900.6900.751
Rasch2400.5640.7090.783
K=1K = 14800.5450.7210.801
K=2K = 27200.5400.7370.805
K=4K = 412000.5610.7300.784
K=8K = 821600.5720.7160.773
上帝模型(真实参数)—0.4610.7870.862

K=2K = 2(和真实世界的维数相同)最好;KK 再大,每人只有十几条数据,模型开始拟合噪声,即使有 L2 正则化也会变差。选 KK 和正则化强度要用验证集或交叉验证(第 5 讲)。编写时 L2 强度是在几个候选值里试出来的(代码里注明了),这本身就说明了”超参数需要系统地选”。

3.4 冷启动:数据越多,个性化越值钱

代码 02 的演示 2 改变每个格子被观察的概率:

每格被观察的概率每人约几条训练数据Rasch 的 AUCK=2K = 2 的 AUC差距
15%4.90.7050.7050.000
30%9.60.7730.793+0.020
60%19.10.7510.774+0.023
90%28.90.7750.816+0.041

每人只有 5 条左右的数据时,个性化模型学不到口味,和 Rasch 打平——这就是推荐系统的冷启动问题。实践中的折中:新用户先用流行度或 Rasch,数据积累后再切换到个性化;或者用用户的特征(注册信息、语言)预测初始口味(教材的”上下文”)。

3.5 个性化改变了什么

代码 02 的演示 3:只看流行度的系统给所有人推荐同样的 3 个回答;K=2K = 2 模型给最喜欢简洁的用户推荐详细程度为负的回答,给最喜欢详尽的用户推荐详细程度为正的回答——而我们从来没有告诉模型”详细程度”这个维度,它是从”谁和谁口味相似”里自己发现的。对全部 200 个用户平均,推荐前 3 个回答的真实接受概率:流行度 0.823,K=2K = 2 0.877,上帝视角的最优推荐 0.918。

今天的 RLHF 奖励模型大多是”只看流行度”的:一个奖励给所有人。个性化奖励模型是一个活跃的研究方向,它要面对的正是冷启动问题,以及”该不该迎合每个人”的问题(第 16、17 讲)。


4. 理想点模型

4.1 单峰偏好

点积 Ui⊤VjU_i^\top V_j 描述的是”沿着某个方向,越多越好”。可是很多偏好不是这样的:回答的详细程度,有人喜欢简洁、有人喜欢详尽,还有很多人喜欢适中——太短不够用,太长读不完。这种”在某个理想点最喜欢、离得越远越不喜欢”的偏好叫单峰偏好,对应理想点模型:

Hij=ai+zj−c ∥ui−xj∥2H_{ij} = a_i + z_j - c \,\lVert u_i - x_j \rVert^2

uiu_i 是用户的理想点,xjx_j 是选项的位置。政治学用它分析议员投票:Poole & Rosenthal 的 NOMINATE 把每位美国国会议员和每次表决放在一两维的空间里,第一维几乎就是”左—右”。音乐口味、商品规格也常是这样。第 16 讲会看到,单峰偏好还是”逃出 Arrow 不可能定理”的一条路。

4.2 单调模型画不出”适中”

代码 03_ideal_point.py 的演示 1:每个回答的详细程度 xj∈[0,1]x_j \in [0, 1] 是已知的特征,质量也已知;三类用户(理想点约为 0.2、0.5、0.85),每人只用 20 个回答训练。四种个性化方式的测试 AUC:

用户类型不个性化单调(线性)自由二次理想点上帝视角
喜欢简洁0.6950.7890.8210.8710.894
喜欢适中0.7100.7190.7240.7920.818
喜欢详尽0.6220.7130.7550.8570.882
  • 单调模型(每人一条斜线)对两端的用户有帮助,对喜欢适中的用户几乎没用——一条斜线画不出”中间高、两头低”。
  • 自由二次(每人 [1,x,x2][1, x, x^2] 三个自由系数)理论上画得出抛物线,但要画出这么陡的抛物线,x2x^2 的系数约为 −16;每人只有 20 条数据,再加上正则化往 0 拉,学不出来。
  • 理想点模型让所有人共享曲率 cc(在训练数据上选出 20,真实值 16),每人只学胃口和理想点两个数。约束更多、自由参数更少,三类用户都接近上帝视角——喜欢适中的用户提升最大。

这就是教材对理想点模型的评价:“利用几何结构,学得更快;代价是很强的嵌入假设”——真实偏好如果不是单峰的,约束就错了。

4.3 理想点 = 偏置 + 点积

一个代数事实(代码 03 的演示 2 用数值验证):

ai+zj−∥ui−xj∥2=(ai−∥ui∥2)⏟新的用户偏置+(zj−∥xj∥2)⏟新的选项偏置+(2 ui)⊤(2 xj)a_i + z_j - \lVert u_i - x_j \rVert^2 = \underbrace{(a_i - \lVert u_i \rVert^2)}_{\text{新的用户偏置}} + \underbrace{(z_j - \lVert x_j \rVert^2)}_{\text{新的选项偏置}} + (\sqrt{2}\,u_i)^\top(\sqrt{2}\,x_j)

所以带偏置的 KK 维点积模型已经包含了 KK 维平方距离的理想点模型:选项偏置里的 −∥xj∥2-\lVert x_j \rVert^2 让”离中心远的选项”整体吃亏,点积再决定每个用户偏向哪边——合起来就是单峰的。理想点模型的价值在于它的约束:选项偏置必须等于”吸引力 − 位置的平方长度”。(用绝对距离 −∥u−x∥-\lVert u - x \rVert 时恒等式不成立,它就真是另一类模型了。)

这也解释了一个现象:如果用”不个性化”的选项偏置 zjz_j(从所有人的数据估计)做基础,再给每人加一条斜线,效果会比纯粹的单调模型好——因为人群平均的偏好往往本身就是单峰的(平均的人喜欢适中),二次项已经”藏”在选项偏置里,斜线只需把抛物线的顶点左右平移(−c(x−m)2+wx-c(x - m)^2 + wx 的顶点在 m+w/2cm + w/2c)。


5. 识别与 Rashomon 效应

5.1 嵌入的坐标不可识别

学出了口味向量和特征向量,很诱人的做法是”解读”它们:“第一维代表详细程度”。可是:

(R Ui)⊤(R Vj)=Ui⊤R⊤R Vj=Ui⊤Vj(R⊤R=I)(R\,U_i)^\top (R\,V_j) = U_i^\top R^\top R\, V_j = U_i^\top V_j \qquad (R^\top R = I)

把所有向量一起旋转同一个角度,所有点积不变,预测一点都不变。更一般地,Ui→A⊤UiU_i \to A^\top U_i、Vj→A−1VjV_j \to A^{-1} V_j(AA 任意可逆)也不变。数据只能确定所有的点积(矩阵 UV⊤UV^\top),确定不了坐标本身。

代码 04_identification_rashomon.py 的演示 1:旋转 73° 后,测试集上预测概率的最大差别是 2.2×10−162.2 \times 10^{-16}(浮点误差)。L2 正则化消除了缩放的自由度(让两边的长度”平衡”时惩罚最小),但消除不了旋转和翻转(旋转不改变长度)。

5.2 换个随机种子

代码 04 的演示 2:同样的数据,用三个随机种子训练:

种子测试对数损失第 1 维坐标和种子 1 的相关预测和种子 1 的相关
10.57151.0001.0000
20.57150.1971.0000
30.5715−0.0641.0000

预测完全一样,“第 1 维”却几乎无关。用普鲁克分析(找一个最合适的旋转 / 翻转把一组向量对齐到另一组)把种子 2、3 对齐到种子 1 以后,第 1 维的相关都变成 1.000——它们是同一个解的不同”摆法”。把种子 1 的向量对齐到真实的风格维度,对齐后第 1 维和”详细程度”的相关 0.867,第 2 维和”正式程度”的相关 0.965:模型确实学到了真实的结构,只是不知道这两个方向该叫什么名字、该朝哪边。真实项目里没有”真实风格”可以对齐,通常用已知的特征(例如回答长度)去对齐或解释隐向量。

5.3 Rashomon 效应

旋转不变性是同一个模型的不同写法。更麻烦的是真正不同的模型却一样好。Breiman(2001)用黑泽明的电影《罗生门》命名这个现象:几个目击者对同一件事给出了各不相同、却都说得通的叙述。

代码 04 的演示 3 训练了 18 个模型(K∈{1,2,3}K \in \{1, 2, 3\} × 正则化 ∈{2,3,5}\in \{2, 3, 5\} × 2 个种子),验证集损失最好的是 0.5601;在它 1% 以内的模型(Rashomon 集合,Semenova 等 2022)有 4 个。它们在验证集上几乎没有区别,可是:

  • 测试集的 713 个格子里,37 个(5.2%)的”接受 / 拒绝”预测在这些模型之间不一致;同一个格子的接受概率最多相差 0.156;
  • 200 个用户里,**67 个(34%)**会因为”选了哪个模型”而收到不同的第一推荐。

Marx 等(2020)把这叫预测多重性(predictive multiplicity)。对 RLHF 的含义:很多不同的奖励模型能同样好地解释人类反馈,但它们对某些回答的打分不同,优化不同的奖励模型会得到不同的策略(Skalse 等 2023 研究了奖励学习里的”部分可识别性”)。报告时最好给出”一批好模型”的范围,而不只是一个”最好的模型”;第 6 讲的奖励模型集成就是一种做法。

参数不可识别(旋转)Rashomon 效应
是什么同一个模型的不同参数写法不同的模型,总体一样好
预测完全相同细节不同
对策加约束、对齐后再解读报告范围、集成、收集更多 / 更有区分度的数据

6. 成对比较的个性化

6.1 胃口消掉,口味消不掉

RLHF 的数据是两两比较。在因子模型下:

P(j≻k∣i)=σ((ai+zj+Ui⊤Vj)−(ai+zk+Ui⊤Vk))=σ((zj−zk)+Ui⊤(Vj−Vk))P(j \succ k \mid i) = \sigma\Big( (a_i + z_j + U_i^\top V_j) - (a_i + z_k + U_i^\top V_k) \Big) = \sigma\Big( (z_j - z_k) + U_i^\top (V_j - V_k) \Big)

胃口 aia_i 消掉了(第 2.3 节),口味 UiU_i 没有。代码 05_pairwise_personalization.py 的演示 1:两个胃口差 4、口味相同的用户,接受概率天差地别,P(j≻k)P(j \succ k) 却完全相同(0.023);口味相反的用户,比较结果也反过来(0.944)。

教材总结:用户参数完全消掉、标准 BT 才是对的,只在三种情况下成立:(1) 模型是 Rasch(没有口味项);(2) 只有一个用户;(3) 所有用户的口味相同。用 BT 做全局排名(棋手、模型排行榜),用因子模型做个性化。

6.2 三种模型

代码 05 的演示 2:200 个用户、40 个回答,每人做 mm 次两两比较,测试时看排序正确率:

每人比较 mm 次全局 BT每人单独 BT个性化因子 BT(K=2K = 2)
572.3%55.1%67.0%
2074.9%63.2%88.0%
8075.4%75.1%93.8%
  • 全局 BT(今天绝大多数奖励模型的做法)数据再多也只到 75% 左右:它只能学到”平均人”的偏好。
  • 每人单独 BT 要为每人估计 40 个分数,几次比较远远不够。
  • 个性化因子 BT 共享回答的向量,每人只估计 2 维口味。每人只比较 5 次时它反而不如全局 BT——5 次比较估不准口味,估出来的主要是噪声,不如假设”这个人和平均人一样”;从 20 次起它就明显超过。实践中常在两者之间折中:数据少的用户,口味向量被正则化拉向 0(拉向平均人)。

6.3 谁被亏待了

代码 05 的演示 3 把用户按”口味离平均口味有多远”分成三组(每人 80 次比较):

用户组全局 BT个性化因子 BT
口味最接近平均的 1/385.6%93.3%
中间的 1/372.8%93.2%
口味最”小众”的 1/368.2%94.9%

全局 BT 对口味接近平均的用户相当准,对小众用户差得多——平均准确率掩盖了这种不平等。个性化消除了它(前提是每人都有足够的数据)。这把第 1 讲的”谁的偏好”变成了可以测量的东西:报告奖励模型的准确率时,应该按用户群体分开报告(第 17 讲)。个性化 RLHF 是近年的研究热点(例如用变分推断为每个用户学一个隐变量的方法,以及优化”最差群体”效用的 MaxMin-RLHF),它们面对的正是这里的冷启动和公平问题。


7. 案例:Community Notes 与”桥接”

7.1 问题

X(原 Twitter)的 Community Notes 让用户给帖子写”补充说明”,再请其他用户评价这条说明”有没有用”。评价者有政治立场,偏向某一派的说明会被那一派的人大量点”有用”。如果按”有用率”排序,人多的那一派喜欢的说明就会胜出。

Community Notes 公开的算法(Wojcik 等 2022)用的正是本讲的因子模型:

评价un≈μ+iu+in+fu fn\text{评价}_{un} \approx \mu + i_u + i_n + f_u\, f_n

iui_u 是评价者的宽松程度,fuf_u 是评价者的立场(1 维因子),fnf_n 是说明的立场倾向,ini_n 是说明的截距——扣除立场因素之后大家都认可的程度。一条说明只有在截距足够高时才会被展示:它必须得到”立场不同的人”的共同认可,这叫桥接(bridging)。

7.2 实验与”零点问题”

代码 06_community_notes.py:600 个评价者(70% 甲派、30% 乙派)、40 条说明(16 条偏甲派、16 条偏乙派、8 条中立,真实质量和立场无关)。和说明的真实质量比较:

排序方法肯德尔 τ\tau前 8 名:偏甲派 / 偏乙派 / 中立前 8 名的平均真实质量
有用率0.195 / 0 / 3+0.56
截距(零点 = 全体平均立场)0.325 / 0 / 3+0.55
截距(零点 = 两派的中点)0.752 / 2 / 4+0.80
(真实质量)1.002 / 2 / 4+0.80

按有用率排序,前 8 名被偏甲派的说明占据,乙派喜欢的说明一条也进不去。直接用因子模型的截距只好了一点。为什么?

零点问题:把所有评价者的立场整体平移 cc(fu→fu−cf_u \to f_u - c),同时把截距改成 in+cfni_n + c f_n,预测完全不变——又是第 5 节的不可识别性。截距的含义取决于”把哪里当作中立的立场”。默认的正则化把零点放在”全体评价者的平均立场”(这里 +0.07)——人多的甲派把零点拉向了自己,截距里仍然混着”甲派人多”的优势。把零点改成”两派的中点”(先用两类聚类找到两派的中心 −0.88 和 +0.57,取中点 −0.15),截距才真正衡量”立场之外的认可”,前 8 名和真实质量的前 8 名完全一致。

零点放在哪里,是数据决定不了的规范性选择:按人头平均(多数派优先),还是按派别平均(每派平等)?Community Notes 的公开说明里,对截距的正则化比对因子强得多(约 5 倍),并要求说明得到不同立场评价者的共同认可,这是用算法设计隐式地做了这个选择。练习 7 显示,两派各占一半时,三种方法几乎没有区别——零点问题只在人群不平衡时才出现,而这恰恰是最常见的情形。

学到的 1 维因子确实就是立场:代码 06 的演示 2 中,说明的因子和真实立场倾向的相关是 −0.992,评价者的因子和真实立场的相关是 −0.930(正负号是任意的,整体乘以 −1 不改变 fufnf_u f_n)——模型从来没有被告知谁是哪一派。

第 16、17 讲会把它放进”怎样聚合很多人的偏好”的框架:没有中立的聚合规则,每种规则都编码了一种价值判断。


8. 小结

  1. Rasch 模型 σ(ai+zj)\sigma(a_i + z_j):用户胃口 + 选项吸引力。逐项数据能识别两者(差一个常数);“恰好接受一个”的条件概率是 σ(zj−zk)\sigma(z_j - z_k),胃口消掉(特定客观性),所以两两比较只能识别选项之间的差。
  2. 附带参数问题:每人数据很少时,联合最大似然不一致(每人 2 题时差距被估成 2 倍);条件方法、正则化、随机效应是补救。
  3. KK 维因子模型 σ(ai+zj+Ui⊤Vj)\sigma(a_i + z_j + U_i^\top V_j):低秩矩阵分解,交替的小逻辑回归。KK 和正则化要用验证集选;数据少时个性化学不到(冷启动);个性化能从”谁和谁口味相似”里自己发现风格维度。
  4. 理想点模型 −c∥ui−xj∥2-c\lVert u_i - x_j \rVert^2 描述单峰偏好;平方距离的理想点 = 偏置 + 点积的受约束版本,约束让它在数据少时学得更快。
  5. 识别与 Rashomon:嵌入只在旋转 / 翻转意义下确定(正则化消除缩放),对齐后才能解读;一批”一样好”的模型对具体用户的预测和推荐可以不同(实验里 34% 的用户第一推荐不同)。
  6. 成对比较的个性化:胃口消掉、口味消不掉;全局 BT 只在没有口味分歧时才对;个性化因子 BT 在数据足够时显著更好,并消除对小众用户的不公平。
  7. Community Notes:因子模型把”立场带来的赞同”和”截距”分开;截距的零点是一个数据决定不了的规范性选择(按人头还是按派别)。

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

  • 测验与口试可能会问:推导 Rasch 的特定客观性;“两两比较能估计用户的胃口吗?为什么?“;解释附带参数问题;“嵌入的第一维代表什么?能这样解读吗?”;“什么情况下一个全局 BT 就够了?”;“Community Notes 的截距衡量的是什么,零点为什么重要?”
  • 期末项目:如果你的数据来自多个标注员 / 用户,先问:分歧主要是”宽严”(Rasch 能处理)还是”口味”(需要因子模型)?报告结果时按群体分开(第 6.3 节),给出 Rashomon 集合的范围(第 5.3 节)。“个性化奖励模型需要多少数据才划算""LLM 标注数据里的口味维度是什么”都是可做的研究问题。

10. 练习

练习 1(推导)。Rasch 模型,a=1a = 1,zj=0.5z_j = 0.5,zk=−0.5z_k = -0.5。 (a) 算 P(Yj=1)P(Y_j = 1)、P(Yk=1)P(Y_k = 1)。 (b) 算”恰好接受一个”时接受 jj 的概率,验证它等于 σ(zj−zk)\sigma(z_j - z_k)。 (c) 换成 a=−3a = -3,(b) 的答案变吗?

参考答案

(a) σ(1.5)≈0.818\sigma(1.5) \approx 0.818;σ(0.5)≈0.622\sigma(0.5) \approx 0.622。 (b) P(接受 j、拒绝 k)=0.818×0.378≈0.309P(\text{接受 } j\text{、拒绝 } k) = 0.818 \times 0.378 \approx 0.309;P(拒绝 j、接受 k)=0.182×0.622≈0.113P(\text{拒绝 } j\text{、接受 } k) = 0.182 \times 0.622 \approx 0.113。比值 0.309/(0.309+0.113)≈0.731=σ(1)0.309/(0.309 + 0.113) \approx 0.731 = \sigma(1)。 (c) 不变。σ(−2.5)≈0.0759\sigma(-2.5) \approx 0.0759、σ(−3.5)≈0.0293\sigma(-3.5) \approx 0.0293:0.0759×0.9707/(0.0759×0.9707+0.9241×0.0293)≈0.0736/(0.0736+0.0271)≈0.7310.0759 \times 0.9707/(0.0759 \times 0.9707 + 0.9241 \times 0.0293) \approx 0.0736/(0.0736 + 0.0271) \approx 0.731,和 (b) 相同。

练习 2(计数)。NN 个用户、MM 个选项的 KK 维点积模型(暂不考虑偏置)有 (N+M)K(N + M)K 个参数。考虑到 U→UA⊤U \to UA^\top、V→VA−1V \to VA^{-1} 不改变预测(AA 是任意 K×KK \times K 可逆矩阵),真正”有效”的参数有多少个?N=200N = 200、M=40M = 40、K=2K = 2 时是多少?

参考答案

AA 有 K2K^2 个自由度,所以有效参数是 (N+M)K−K2(N + M)K - K^2。N=200N = 200、M=40M = 40、K=2K = 2:480−4=476480 - 4 = 476。(这也是秩为 KK 的 N×MN \times M 矩阵的维数。)

练习 3(概念)。为什么”条件比较”没有附带参数问题?如果每个用户只回答 1 个选项,Rasch 的选项吸引力还能估计吗?条件比较呢?

参考答案

条件比较只用”恰好接受一个”这一事件的概率 σ(zj−zk)\sigma(z_j - z_k),其中不含用户参数,所以用户数增加时,数据增加、参数不增加,最大似然是一致的。每人只回答 1 个选项时,条件比较没有任何数据(需要同一个人回答两个选项);JMLE 也不行——每个用户的胃口只由一条数据决定,会被推到 ±∞,不提供选项的信息。这时只能靠先验(例如假设胃口 ~ N(0, 1),把它积分掉,第 6 讲),或者只用流行度。

练习 4(理想点)。某用户的个性化模型拟合出 logit=0.3+6.4x−8x2\text{logit} = 0.3 + 6.4x - 8x^2(xx 是详细程度)。 (a) 这个用户的理想点在哪里?曲率 cc 是多少? (b) 如果拟合出的 x2x^2 系数是正的,说明什么?

参考答案

(a) −c(x−u)2=−cx2+2cux−cu2-c(x - u)^2 = -cx^2 + 2cux - cu^2。对照系数:c=8c = 8,2cu=6.4⇒u=0.42cu = 6.4 \Rightarrow u = 0.4。理想点 0.4(偏简洁一点的”适中”)。 (b) 曲线开口向上:用户最不喜欢某个中间值、喜欢两头——这不是单峰偏好。可能是数据太少(噪声)、可能是这个用户真的”要么极简、要么极详”,也可能是模型错了。理想点模型强制 c>0c > 0,在这种情况下会给出错误的结论。

练习 5(识别)。 (a) 证明旋转不改变 Ui⊤VjU_i^\top V_j。 (b) 为什么 L2 正则化 λ(∑i∥Ui∥2+∑j∥Vj∥2)\lambda(\sum_i \lVert U_i \rVert^2 + \sum_j \lVert V_j \rVert^2) 能消除缩放(U→2UU \to 2U、V→V/2V \to V/2)的自由度,却不能消除旋转的自由度?

参考答案

(a) (RUi)⊤(RVj)=Ui⊤R⊤RVj=Ui⊤Vj(RU_i)^\top(RV_j) = U_i^\top R^\top R V_j = U_i^\top V_j,因为 R⊤R=IR^\top R = I。 (b) 缩放 U→sUU \to sU、V→V/sV \to V/s 时,正则化项变成 s2∑∥Ui∥2+s−2∑∥Vj∥2s^2 \sum \lVert U_i \rVert^2 + s^{-2}\sum \lVert V_j \rVert^2,对 ss 求最小值有唯一解(两项相等时),所以 ss 被确定了。旋转不改变向量长度,正则化项完全不变,所以无法区分不同的旋转。

练习 6(个性化)。你有一份 RLHF 数据,来自 50 位标注员,每人标注了 2000 对回答。 (a) 怎样检验”一个全局 BT 够用”? (b) 如果每人只标注了 10 对呢?

参考答案

(a) 几种做法:给每位标注员单独拟合 BT(数据足够),比较他们的分数是否在误差范围内一致;拟合个性化因子 BT,看验证集上是否明显好于全局 BT;对共同标注过的回答对,检查标注员之间的一致率是否明显低于每人自身的一致率(第 3 讲代码 04 演示 3 的思路);在汇总数据上做第 2 讲的拟合优度检验和 SST 检验。 (b) 每人单独拟合不可行,个性化模型也很难学到每个人的口味(代码 05:每人 5 次比较时个性化反而更差)。可以用标注员的特征(背景、语言)分组,或用强正则化的因子模型;更重要的是在数据收集阶段就让一部分回答对被多位标注员共同标注,以便估计分歧的大小。

练习 7(Community Notes)。在 06_community_notes.py 里把甲派的比例从 70% 改成 50%,三种排序方法的差距会怎样变化?为什么?

参考答案

编写讲义时实际运行的结果:肯德尔 τ\tau 分别是 0.73(有用率)、0.79(默认零点的截距)、0.80(两派中点为零点的截距),前 8 名完全相同。两派人数相等时,“全体平均立场”和”两派中点”重合(评价者因子的平均值 −0.04,两派中心 ±0.72,中点 0.00),零点问题消失;偏甲派和偏乙派的说明从多数派那里得到的”优势”也互相抵消,连有用率都不错。零点问题只在人群不平衡时才出现——而现实中人群几乎总是不平衡的。

练习 8(动手)。在 01_rasch.py 的演示 3 里把用户数从 3000 增加到 30000,JMLE 在 n=2n = 2 时的斜率会向 1 靠近吗?

参考思路

不会:附带参数问题的偏差来自”每个用户的数据太少”,而用户数增加并不增加每个用户的数据,所以斜率仍然约等于 2(只是随机误差变小)。这就是”不一致”的含义:数据再多也不收敛到真值。(运行需要约 1 分钟;结果以你的运行为准。)


11. 延伸阅读

课程教材

  • Truong, Haupt, Koyejo. Machine Learning from Human Preferences. 第 1 章 1.6、1.9、1.10 节;第 5 章 5.6 节(Community Notes)。

Rasch 模型与项目反应理论

  • Rasch. Probabilistic Models for Some Intelligence and Attainment Tests. 1960.
  • Andersen. Conditional Inference and Models for Measuring. 1973.(条件最大似然;JMLE 在两道题时的 2 倍偏差)
  • Neyman, Scott. Consistent Estimates Based on Partially Consistent Observations. Econometrica 1948.(附带参数问题)
  • Embretson, Reise. Item Response Theory for Psychologists. 2000.

矩阵分解与推荐

  • Koren, Bell, Volinsky. Matrix Factorization Techniques for Recommender Systems. IEEE Computer 2009.(Netflix Prize 的经验)

理想点模型

  • Poole, Rosenthal. A Spatial Model for Legislative Roll Call Analysis. American Journal of Political Science 1985.(NOMINATE)
  • Jamieson, Nowak. Active Ranking using Pairwise Comparisons. NeurIPS 2011.

识别与 Rashomon

  • Breiman. Statistical Modeling: The Two Cultures. Statistical Science 2001.
  • Marx, Calmon, Ustun. Predictive Multiplicity in Classification. ICML 2020.
  • Semenova, Rudin, Parr. On the Existence of Simpler Machine Learning Models. FAccT 2022.(Rashomon 比率)
  • Skalse et al. Invariance in Policy Optimisation and Partial Identifiability in Reward Learning. ICML 2023.

Community Notes

  • Wojcik et al. Birdwatch: Crowd Wisdom and Bridging Algorithms Can Inform Understanding and Reduce the Spread of Misinformation. 2022.

12. 下一讲预告

第 2~4 讲搭好了”模型”:BT / PL、随机效用、因子模型。拟合时我们一直把 fit_bradley_terry、fit_mf 当成工具来用。第 5 讲开始第二单元”学习”,把它们打开:

  • 最大似然估计:BT 的对数似然、梯度(“观察到的 − 预期的”)、海森矩阵(一个加权的图拉普拉斯矩阵);为什么它是凹的;Zermelo–Ford 条件的证明思路。
  • 优化算法:梯度上升(步长怎么定)、牛顿法、MM 算法(Zermelo 1929 年就用过)、Adam;Elo 等级分其实是随机梯度上升。
  • 正则化与交叉验证:L2 = 高斯先验;怎样选正则化强度和 KK;为什么交叉验证要按”独立单元”划分。
  • 评估:准确率、AUC、对数似然、校准——一个模型可以排序很准却概率不准。

从第 5 讲起,代码开始使用 numpy,计算会快很多。

← 返回课程目录