[译]基于模型的机器学习 - 2.6 学习猜测概率
你可能以为,推断猜测概率需要用到与我们目前所用完全不同的技术。事实上,我们的做法将完全相同:我们把想要学习的概率值作为新的连续随机变量加入模型,并用概率推断来计算它们的后验分布。这展示了基于模型方法的威力——每当我们想知道某个东西时,我们就把它作为一个随机变量引入模型,然后用概率推断去求出它。
让我们看看如何修改模型,把猜测概率作为随机变量纳入进来。为了保持一致,我们也会为犯错概率(实际上是不犯错概率)添加一个变量,但我们会把它固定在 10% 的犯错几率上。首先,我们要改变书写 AddNoise 因子的方式。
(a) 内置概率的自定义因子
(b) 通用的 Table 因子
图 2.25:书写 AddNoise 因子的两种方式:(a) 作为一个把猜测和犯错概率“内置”其中的自定义因子。(b) 使用一个通用的 Table 因子,它带有两个参数:给定父节点为 false 时子节点为 true 的概率(左参数),以及给定父节点为 true 时子节点为 true 的概率(右参数)。这种书写因子的方式让我们可以把这些概率作为变量提供给因子。
图 2.25 展示了如何把现有的 AddNoise 因子(其中猜测和不犯错概率被硬编码为 0.2 和 0.9)替换为一个通用的 Table 因子,后者把这些概率作为额外的参数。然后我们可以用两个新的随机变量来设置这些参数,我们把它们命名为 probGuess 和 probNoMistake。推断这些变量的后验分布,就会给出我们所需的猜测和不犯错概率的学习值——但为此,我们首先需要一种能表示这类变量不确定性的分布。
表示连续值中的不确定性
这两个新变量 probGuess 和 probNoMistake 与我们目前遇到的变量类型不同:此前我们所有的变量都是二值的(取两个值),而这些新变量是连续的(取实数值),落在 0.0 到 1.0(含端点)的区间内。这意味着我们不能用伯努利分布来表示它们的不确定性。事实上,由于我们的变量是连续的,我们需要使用一种基于概率密度函数的分布——如果你不熟悉这个术语,请阅读专栏 2.4。
专栏 2.4:概率密度函数
当我们想表示一个连续变量(例如一个人的身高)的不确定性时,像“他的身高有 80% 的几率是 1.84 米”这样看似合理的陈述,其实并没有意义。要明白为什么,可以考虑数学上等价的陈述“他的身高有 80% 的几率是 1.840000000… 米”。这个陈述显得非常不合理,因为它暗示:无论我们把身高多测量几位小数,我们总会得到零。事实上,我们测量的小数位越多,就越有可能发现一个非零数字。如果我们能一直以无限精度测量下去,那么恰好得到 1.84000…(或任何特定值)的概率实际上会消失为零。
所以,我们不去谈一个连续变量取某个特定值的概率,而是谈它的值落在某个特定范围内的概率,例如落在 1.835 米到 1.845 米这个范围内。在日常语言中,我们通过表达一个数字时所用的精度来传达这一点,所以当我们说“1.84 米”时,我们往往是指“精确到厘米的 1.84 米”,即介于 1.835 米和 1.845 米之间的某处。我们可以通过给出一组这样的范围,连同值落在每个范围内的概率(使得这些概率加起来为一),来表示一个连续值上的分布。例如:
这种做法有时有用,但也常常带来问题:它引入了许多需要学习的参数(每个范围一个);很难选出一组合理的范围;从一个范围过渡到另一个范围时存在不连续性;而且难以施加平滑性,即相邻范围所对应的概率应当相似。一个更好的解决办法是定义一个函数,使得该函数在任意两个值之间的曲线下面积给出值落在该范围内的概率。这样的函数称为概率密度函数(pdf)。例如,下图展示了一个高斯 pdf(我们将在第 3 章中学到更多关于高斯分布的内容):
注意,现在 y 轴的取值远高于 1,因为概率密度不必限制在 0 到 1 之间。相反,函数下方的总面积被要求为 1.0。1.835 米到 1.845 米之间阴影区域的面积为 0.383,这就给出了身高落在这两个值之间的概率。类似地,计算 pdf 在任意两点之间的曲线下面积,就给出身高落在这两点之间的概率。
我们需要一种分布,其密度函数既能表示我们的先验假设“猜对的概率对大多数题目约为 20%,但对非常容易猜的题目可高达约 60%”,又能表示从数据中学习之后猜测概率上的后验。这个分布还应被限制在 0.0 到 1.0(含端点)的范围内。一个合适的函数应当能够建模一个落在此范围内的单个“隆起”,因为这个隆起对先验来说可以从 20%–60% 宽泛地展开,然后对学到的后验来说又能变窄、集中在某个特定值附近。一种名为 beta 分布的分布满足这些要求。它有如下密度函数:
$$Beta(x; \alpha, \beta) = \frac{x^{\alpha-1}(1-x)^{\beta-1}}{B(\alpha, \beta)} \quad (2.22)$$其中 $B()$ 是这个分布得名的 beta 函数,用于确保函数下方的面积为 1.0。beta 密度函数有两个参数 $\alpha$ 和 $\beta$,它们共同控制隆起的位置和宽度——图 2.26a 展示了这些参数取不同值时的一组 beta pdf。参数 $\alpha$ 和 $\beta$ 必须为正,即大于零。均值 $\frac{\alpha}{\alpha+\beta}$ 决定了隆起的质心位于何处,而和 $\alpha+\beta$ 控制隆起有多宽——$\alpha+\beta$ 越大,隆起越窄。我们可以通过选择 $\alpha=2.5$ 和 $\beta=7.5$ 来配置一个 beta 分布,使之编码我们的先验假设,这给出图 2.26b 所示的密度函数。
(a)
(b)
图 2.26:(a) 参数 $\alpha$ 和 $\beta$ 取不同值时的示例 beta 分布。(b) Beta(2.5, 7.5) 分布,我们可以用它作为猜对一道题概率的先验。该分布的峰值在 0.2 附近,但向右延伸到约 0.6,以容纳那些更容易猜的题目。
我们想要扩展因子图,使得每个 probGuess 变量的先验概率为:
注意这里的记号:我们用小写的 $p$ 表示连续变量的概率密度,而此前我们用大写的 $P$ 表示离散变量的概率分布。这个记号提醒我们,究竟是在处理连续密度还是离散分布。
以图 2.19 的因子图为基础,我们可以扩展它,把猜测概率作为图中的变量纳入,并以这个分布作为先验。还需要另一处改动:为了推断猜测概率,我们需要查看尽可能多的人的数据(仅凭一个人的答案来估计猜测概率会非常不准确!)。所以我们现在必须扩展因子图,以便一次性建模所有人的结果,即整个数据集。为此,我们向因子图添加一个新的板,它复制所有特定于每个人的变量(即 skill、relevantSkills、hasSkills 和 isCorrect)。由于我们假设一道题的猜测概率对每个人都相同,probGuess 被放在新板之外、但在 questions 板之内。由于不犯错概率被假设对每个人、每道题都相同,probNoMistake 被放在两个板之外。得到的因子图如图 2.27 所示。
图 2.27:面向整个数据集、涵盖所有参加测试者的因子图。每道题的猜测概率以一个变量数组的形式出现,并带有合适的 beta 先验。
我们可以在这张图上运行推断来学习猜测概率。即使现在有了连续变量,我们本质上仍可以在图上运行循环置信传播。我们唯一需要做的修改,是确保猜测概率上的不确定性始终以 beta 分布来表示(这种修改后的形式称为期望传播,将在下一章中完整描述)。运行推断之后,我们为每道题得到一个 beta 分布,表示该题猜测概率的不确定值。其中一些题目的 beta 分布展示在图 2.28 中(我们只展示每隔五道的题目,以免图中曲线太多而杂乱)。
图 2.28:每隔五道题的 probGuess 后验 beta 分布。
首先要注意的是,这些分布全都仍然相当宽,表明猜测概率中仍存在相当大的不确定性。这并不太令人意外,因为数据集包含的人相对较少,而且我们只能从那些被推断为不具备某题所需技能的那部分人身上,学到关于该题猜测概率的信息。对于第 1 题——我们假设几乎人人都具备其所需的(Core)技能——后验分布非常接近先验(把曲线与图 2.26b 比较),因为几乎没有人在猜这道题,也就几乎没有数据可供学习其猜测概率。有几道题(如 11、16 和 26)的后验相较先验略向右移,表明这些题比五分之一稍微容易猜一点。最有意思的是,有些题目的猜测概率被推断为要么相当低(第 6、31 题),要么相当高(第 21、36、41 题)。
我们可以通过绘制每道题猜测概率的均值(质心),连同表示不确定性的误差棒,来画出所有题目上的后验(图 2.29)。这表明有相当数量的题目其猜测概率高于 0.2。
图 2.29:推断出的猜测概率。蓝色条显示每道题猜测概率后验分布的均值。黑线称为误差棒,表示推断猜测概率中的不确定性。误差棒的上下两端显示后验分布的上、下四分位数,即分别有 25% 几率猜测概率高于或低于该值的取值。正如我们所猜想的,均值上的变化表明有些题目比其他题目容易猜得多。
顺便提醒一下——我们是在不知道哪些人具备哪些技能的情况下学到这些猜测概率的,也就是说没有使用任何真实标注数据。由于没有真实标注,模型不得不动用我们内建于其中的所有假设,才能推断出猜测概率。
我们现在可以研究一下,学习猜测概率是否提升了我们为每个人推断技能的准确性。图 2.30 展示了旧模型以及带学到的猜测概率的新模型所推断的技能后验。从视觉上看,很清楚新的概率更接近真实标注技能,这是个好消息!
(a) 旧推断技能
(b) 新推断技能
(c) 自评技能
图 2.30:技能后验:(a) 原始模型与 (b) 带学到的猜测概率的新模型,与 (c) 真实标注技能作对比。从定性上看,新模型推断出的技能更接近自评技能。
衡量进展
除了从视觉上检查改进之外,从数值上衡量改进也很重要。为此,我们必须选择一个评估指标,用它来衡量我们做得有多好。对于推断应聘者技能这一任务,我们的评估指标应当衡量推断出的技能概率与真实标注技能有多接近。
一个常用的指标是真实标注值在推断分布下的概率,因为当正确值具有高概率时(这是我们想要的)它会高,而当正确值具有低概率时(这是我们不想要的)它会低。这些概率常常会变得非常小,使它们难以处理。于是我们可以取概率的对数,因为对数让小概率更容易比较——这个指标称为对数概率(log probability)。
如果推断出一个人具备某项特定技能的概率为 $p$,那么当此人确实具备该技能时,对数概率指标等于 $\log p$;当他不具备时,等于 $\log(1-p)$。如果此人确实具备该技能,那么最好的预测是 $p=1.0$,它给出对数概率 $\log 1.0 = 0$(一的对数为零)。一个信心较弱的预测,例如 $p=0.8$,会给出一个负的对数概率值,在此例中为 $\log 0.8 = -0.223$。最差的预测 $p=0.0$ 给出负无穷的对数概率。这告诉了我们关于这个指标的两件事:
- 由于完美的对数概率为零,而真实系统达不到完美,对数概率在实践中会是一个负值。因此,常常使用负对数概率,并认为更低的值(更接近 0 的值)更好。
- 这个指标对“自信却错误”的预测惩罚极重,因为当真实标注的概率非常接近零时,对数会给出非常大的负值。在真实标注本身可能存在错误的场合,尤其应当把这一点考虑在内。
把各个对数概率值合并成一个整体指标是有用的。为此,可以把每项技能、每个人的对数概率取平均或相加,得到一个整体对数概率——我们将采用取平均,因为这让数值更易于管理。注意,最好的整体分数(零)是通过在此人具备技能处取 $p=1$、在其不具备处取 $p=0$ 来实现的——换句话说,就是让推断出的技能概率矩阵与真实标注技能矩阵完全一致。
图 2.31a 展示了在技能和人之间取平均后的负对数概率,分别针对原始模型和改进后的模型。改进模型的分数低得多,表明它对技能概率做出了在数量上好得多的预测。我们可以进一步研究,把整体负对数概率分解为不同技能的贡献(图 2.31b)。这表明,学习猜测概率改善了除 Core 技能之外所有技能的对数概率指标,而 Core 技能大致持平。这是因为几乎人人都具备 Core 技能,所以原始模型(它预测人人都具备每项技能)在这项技能上表现其实不错。但总体而言,就对数概率而言,我们的新结果相较原始推断技能是一个实质性的改进。
(a)
(b)
图 2.31:(a) 原始模型与带学到的猜测概率的模型的整体负对数概率。较低的红色条表明,按这个指标,学习猜测概率给出了明显更好的模型。(b) 各项技能的负对数概率,表明改进因技能而异。
另一种衡量进展的方式
在评估机器学习系统的准确性时,使用不止一个评估指标是一种好做法。这是因为每个指标会提供关于系统表现的不同信息,也能减少对提升任何某一特定指标的过度侧重。没有指标是完美的——过度专注于提升某一个指标是个坏主意,因为这可能最终暴露的是该指标的缺陷,而非真正改进了系统。这一点被古德哈特定律(Goodhart’s law)简洁地表达了出来,它可以这样陈述:
“当一个度量成为目标时,它就不再是一个好的度量。”
使用多个评估指标将帮助我们避免成为古德哈特定律的受害者。
在决定采用第二个评估指标时,我们需要思考我们的系统将如何被使用。一种场景是用这个系统来挑选一份很可能具备某项特定技能的候选人短名单。另一种是筛掉那些极不可能具备该技能的候选人,从而得到一份长名单。在这两种场景下,我们可能只关心人们按技能概率排序的次序,而不关心这些概率的实际值。在每种情形下,我们都会选取排名前 $N$ 的人,但对短名单,$N$ 会很小,而对长名单,$N$ 会很大。对任意数量的入选候选人,我们可以计算:
- 具备该技能且被正确选中的候选人所占的比例——这就是真阳性率(true positive rate,TPR);
- 不具备该技能却被错误选中的候选人所占的比例——这就是假阳性率(false positive rate,FPR)。
真、假阳性预测及其对应比率的术语汇总于表 2.7。
表 2.7:术语 positive(阳性)和 negative(阴性)用于预测值和真实标注值,以避免与用来表示预测是否正确的 true(真)和 false(假)相混淆。真、假阳性率是针对某一组特定预测计算的(# 表示“……的数量”)。
一般来说,在“高 TPR”与“低 FPR”之间存在权衡。对于短名单,如果我们希望名单上每个人都具备该技能(FPR=0),我们就不得不容忍漏掉少数确实具备该技能的人(TPR 小于 1)。对于长名单,如果我们希望纳入所有具备该技能的人(TPR=1),我们就不得不容忍纳入一些不具备该技能的人(FPR 高于 0)。受试者工作特征曲线(receiver operating characteristic curve),即 ROC 曲线 [Fawcett, 2006],通过对所有可能的名单长度 $N$ 绘制 TPR 对 FPR 的图,让我们能够可视化这种权衡。原始模型和改进模型的 ROC 曲线展示在图 2.32 中,其中 TPR 和 FPR 是把所有技能合并在一起计算的。我们本也可以为单项技能分别绘制 ROC 曲线,但由于我们的数据集相对较小,那些曲线会相当颠簸,使得难以解读和比较。
图 2.32:把所有技能合并后,原始模型与带学到的猜测概率的模型的受试者工作特征曲线。出乎意料的是,原始模型的 ROC 曲线只比改进后的略差一点。为便于比较,图中还给出了最优可能结果(Perfect)以及随机预测(Random)的曲线。
图 2.32 立即揭示了一件对数概率指标没有揭示的、令人意外的事:原始模型表现非常好,我们的新模型只有略高的 ROC 曲线。看起来,虽然第一个模型计算出的技能概率普遍偏高,但它们仍然给出了对候选人的良好排序。也就是说,具备某项特定技能的人,其推断技能概率高于不具备该技能的人,即便这些概率本身并不十分准确。一个给出不准确概率的系统被称为具有糟糕的校准(calibration)。对数概率指标对糟糕的校准敏感,而 ROC 曲线则不然。同时使用这两个指标,让我们看到:学习猜测概率大幅改善了模型的校准,但只是略微改善了预测的排序。我们将在第 4 章、尤其是 Panel 4.3 中更详细地讨论校准。
ROC 曲线可以通过计算曲线下面积(area under the curve,AUC)来用作评估指标,因为一般来说面积越大意味着排序越好。完美的排序其 AUC 为 1.0(见图 2.32 的“Perfect”线)。除了计算 AUC 之外,通常也最好看一看 ROC 曲线,因为它给出了系统在不同场景下(例如制作短名单或长名单)表现如何的更多细节。
我们改进后的系统有一个相当可观的 AUC 0.86,在所有技能上都有明显改善的对数概率分数,并已通过视觉检查确认给出了合理的结果。它现在已经可以拿去真正试用了。
收尾
在本章中,我们完整走过了从零开始构建一个基于模型的机器学习系统的过程。我们看到了如何从一组假设构建模型、如何运行推断、如何诊断并修复问题,以及如何评估结果。碰巧的是,我们在本章中开发的模型此前已在心理测量学(psychometrics,衡量心智能力和过程的科学)领域被使用过。例如,Junker 和 Sijtsma [2001] 考虑了两个模型:DINA(Deterministic Inputs, Noisy And,确定性输入、带噪 And),它本质上与我们的模型相同;以及 NIDA(Noisy Inputs, Deterministic And,带噪输入、确定性 And),它是一个类似的模型,但 AddNoise 因子被施加在 And 因子的输入而非输出上。使用后一个模型的效果是:如果一个人具备一道题所需技能中的一部分(但不是全部),会增加他答对该题的机会。
当然,我们的模型总有改进的空间。例如,我们可以为每道题学习犯错概率,就像学习猜测答案的概率那样。我们可以研究关于“当一个人具备一道题所需技能中的部分而非全部时会发生什么”的不同假设(就像上面提到的 NIDA 模型)。我们可以考虑建模“具备某些技能是否使得更可能具备其他技能”。或者,我们可以重新审视“技能是二值的”这一简化假设,转而把它们建模为表示一个人技能程度的连续变量。在下一个案例研究中,我们将恰恰这样做,用连续变量来表示技能,以解决一个非常不同的问题——但首先,我们将有一段简短的插曲,来看看解决机器学习问题的过程。
本页引入概念回顾
概率密度函数(probability density function):一个用于定义连续随机变量上概率分布的函数。变量取值落在某给定范围内的概率,由概率密度函数在该范围内的曲线下面积给出。更多细节见专栏 2.4。
beta 分布(beta distribution):一种在 0 到 1(含端点)之间的连续随机变量上的概率分布,其概率密度函数为 $Beta(x; \alpha, \beta) = \frac{x^{\alpha-1}(1-x)^{\beta-1}}{B(\alpha,\beta)}$。beta 分布有两个参数 $\alpha$ 和 $\beta$,它们控制分布峰值的位置和宽度。均值 $\frac{\alpha}{\alpha+\beta}$ 给出分布质心的位置,和 $\alpha+\beta$ 控制分布展开的程度($\alpha+\beta$ 越大意味着分布越窄)。
评估指标(evaluation metric):对机器学习系统准确性的一种度量,用于评估机器学习系统表现如何。评估指标可用于比较两个不同的系统、比较同一系统的不同版本,或评估一个系统是否达到某个期望的目标准确度。
对数概率(log probability)(或 log-prob):随机变量的真实标注值在该变量推断分布下的概率的对数。用作评估机器学习系统所做的不确定预测的评估指标。较大的 log-prob 值意味着预测更好,因为它给正确值赋予了更高的概率。由于 log-prob 是一个负数(或零),常常使用负 log-prob,此时较小的值表示更好的准确度。例如,见图 2.31。
古德哈特定律(Goodhart’s law):一条关于不要过度专注于任何某个特定评估指标的告诫,可以陈述为“当一个度量成为目标时,它就不再是一个好的度量”。
真阳性率(true positive rate):被正确预测为阳性的阳性项所占的比例。真阳性率越高表示预测准确度越好。另见表 2.7。
假阳性率(false positive rate):被错误预测为阳性的阴性项所占的比例。假阳性率越高表示预测准确度越差。另见表 2.7。
ROC 曲线(ROC curve):受试者工作特征(ROC)曲线是真阳性率对假阳性率的图,用于表示预测一个二值变量的准确度。完美的预测器其 ROC 曲线沿图的左侧垂直上升、再沿顶部水平横过(见图 2.32 的图),而随机预测器的 ROC 曲线是一条对角线(同样见图)。一般来说,ROC 曲线下面积越大,预测器越好。
校准(calibration):机器学习系统所预测概率的准确性。例如,在一个良好校准的系统中,以 90% 概率做出的预测应当大约有 90% 的时间是正确的。校准可以通过考察同一系统的重复预测来评估。在一个校准糟糕的系统中,预测的概率不会与实际预测正确的比例紧密对应。校准糟糕通常是模型中某个假设有误的信号,因此总是值得研究——即使系统的使用方式对校准并不敏感(例如,如果我们是按预测概率排序,而非使用概率的实际值)。更多细节见 Panel 4.3。
自我评估 2.6
以下练习将帮助你巩固本节所学的概念。在做题时,回顾正文或上面的概念小结可能会有所帮助。
- 【这个练习揭示了 beta 分布的形状从何而来,非常值得一做!】假设我们有一道题,其实际猜测概率为 30%,但我们并不知道这一点。为了试着弄清它,我们取 $N=10$ 个不具备该题所需技能的人,看看他们中有多少人靠猜测答对了。
- a. 编写一个程序来采样答对该题的人数($T$)。你应当从 Bernoulli(0.3) 采样 10 次,并统计
true样本的数量。在你运行采样器之前,你预期会从它得到什么样的样本? - b. 在现实中,如果我们只有 10 个人的答案,那么我们只有一个样本计数可用来推断猜测概率。例如,我们可能知道有三个人答对了这道题,于是 $T=3$。这能告诉我们多少关于实际猜测概率的信息?我们可以再写一个采样程序来算出它。首先,采样一个 0.0 到 1.0 之间的可能猜测概率。然后,在给定这个采样猜测概率的条件下,计算——假如这就是真实猜测概率——会有多少人答对该题的一个样本。如果你采样的计数与真实计数 $T$ 相符(换句话说等于 3),那么你就“接受它”并保存这个采样的猜测概率。否则你就“拒绝它”并把它丢掉。重复这一过程,直到你有 10,000 个被接受的样本。
- c. 用 0.0 到 1.0 之间的 50 个分箱,为被接受的样本画一个直方图。你应当会看到,这个直方图具有 beta 分布的形状!事实上,你的程序正是在从一个 $Beta(T+1, (N-T)+1)$ 分布中采样。
- d. 利用这个信息,在你的程序中改变 $N$ 和 $T$,以重现图 2.26a 的 beta 分布。探索一下:在保持 $T/N$ 不变的同时增大 $N$ 会发生什么(你的 beta 分布应当会变窄)。这应当符合这样的直觉:你拥有数据的人越多,就能越准确地评估猜测概率。
- a. 编写一个程序来采样答对该题的人数($T$)。你应当从 Bernoulli(0.3) 采样 10 次,并统计
- 为你在上一个自我评估中对原始模型得到的结果绘制一条受试者工作特征曲线。你需要对预测的技能概率排序,同时记录每个预测对应的真实标注。然后沿排序后的列表向下扫描,在每一点计算真阳性率和假阳性率。验证它看起来像图 2.32 的 Original(原始)ROC 曲线。现在制作一个完美的预测器(通过作弊、使用真实标注)。为这个完美预测器绘制 ROC 曲线,并检查它看起来像图 2.32 的 Perfect 线。如果你愿意,可以对一个随机预测器重复这一过程(结果应当近似图 2.32 的对角线)。
参考文献
[Fawcett, 2006] Fawcett, T. (2006). An introduction to ROC analysis. Pattern Recognition Letters, 27(8):861–874.
[Junker and Sijtsma, 2001] Junker, B. W. and Sijtsma, K. (2001). Cognitive assessment models with few assumptions, and connections with nonparametric item response theory. Applied Psychological Measurement, 25:258–272.
下一章:插曲:机器学习生命周期(英文原文,尚未翻译)
- 本文作者:BeanHsiang
- 本文链接:https://beanhsiang.github.io/post/2026-07-24-mbml-learning-skills_learning_the_guess_probabilities/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。