[译]基于模型的机器学习 - 4.2 一个用于分类的模型

为一个数据项预测标签(例如“回复”或“不回复”)的问题称为分类(classification)。执行分类的系统被称为分类器(classifier),它们大概是当今使用最广泛的机器学习算法。可用的分类算法有许多种,而对某个特定的预测任务,有些会比另一些效果更好。解决分类问题的一种常见做法是尝试几种不同的分类算法,看看哪一种效果最好。这种做法忽略了分类算法在相同数据上做出不同预测的根本原因:每个算法都隐含地对数据做出了不同的假设。遗憾的是,这些假设被隐藏在每个算法的内部。

你可能会惊讶地得知,许多分类算法都可以被解释为在某个概率模型中进行近似推断。因此,与其运行一个分类算法,我们不如构建相应的模型,并使用一个推断算法来做分类。我们为什么要这样做,而不直接使用分类算法呢?因为一种基于模型的分类方法给我们带来若干好处:

  • 分类器中的假设被显式化。这有助于我们理解分类器在做什么,从而让我们可以改进使用它的方式以获得更好的预测准确率。
  • 我们可以修改模型来提升其准确率,或赋予它超出原分类器能力之外的新能力。
  • 我们可以使用标准的推断算法来同时训练模型和做出预测。这在修改模型时特别有用,因为训练和预测算法会与修改后的模型保持同步。此外,不同的算法在速度与准确率之间有不同的权衡。我们可以选择最适合我们需求的算法,同时保留我们所有的建模假设。

这些好处并不小——在本章中,你将看到这三点如何都对交付一个成功的系统至关重要。我们将展示如何从零开始、通过对给定数据项时标签如何产生做出一系列假设,来构建一个广泛使用的分类器的模型。随后我们将展示如何扩展这个最初的分类模型,以实现邮件分类系统所需的各种能力。在模型演化的整个过程中,我们将使用一个标准的推断算法(期望传播)来做训练和预测。

……

阅读全文

Microsoft Foundry 的 Quota Tiers

有一次收到 Azure 的通知邮件,大体内容如下:

Important update: Eligibility for Quota Tier upgrade

We are pleased to inform you that, based on your recent usage and account standing, your subscription is now eligible for an upgrade from your current Tier (Free Tier) to the next Tier (Tier 1) within our AI Services platform.

我就去翻了翻 Microsoft Foundry 关于配额等级(Quota tiers)的文档,把这次邮件里真正发生的变化记下来,也顺便把几组常用模型的数字放在一起。

本文整理自 Microsoft Learn 的 Quotas and limits 文档。该页面显示的更新时间是 2026 年 7 月 29 日;配额表还会调整,部署前最好再看一眼 Foundry 门户里的实时值。

……

阅读全文

[译]基于模型的机器学习 - 4.1 收集与管理电子邮件数据

为了撰写本章,我们开发了一个工具,用于收集某个人在给定时间段内收到的全部电子邮件。随后我们用这个工具从 10 位志愿者那里收集了邮件,他们慷慨地同意分享自己的邮件数据——以匿名化的形式,我们稍后会讨论这一点。这是一个相当耗时的过程,因此我们需要仔细规划将如何使用这些宝贵的邮件数据。例如,我们需要决定用哪些数据来训练、用哪些数据来评估系统的准确率。极其重要的一点是,用于训练的数据不能用于评估。如果训练数据被用于评估,它会给出误导性的偏高准确率结果——因为当你已经被告知正确答案时,对一封邮件做出预测要容易得多!为避免这一点,我们需要把数据划分为不同的数据集:

……

阅读全文

[译]基于模型的机器学习 - 4 清理你的收件箱

收发电子邮件的庞大数量意味着,一名典型的办公室职员每天要花好几个小时来处理自己的收件箱。源源不断涌入的新邮件很容易让人应接不暇。同时,一封重要邮件淹没在杂乱信息中的可能性也比以往任何时候都大。基于模型的机器学习能否帮助减轻这种信息过载呢?

一堆邮件

普通办公室职员每天花在处理电子邮件上的时间将近三个小时。这些时间中约 90% 花在阅读收到的邮件或管理已有的邮件上——只有剩下的 10% 用于撰写或回复邮件 [Outlook team, 2008]。一个能加快阅读和管理邮件速度的自动工具,将为人们腾出大量时间,让他们能够专注于重要任务,避免信息过载带来的压力。

……

阅读全文

[译]基于模型的机器学习 - 3.5 允许技能变化

至此,我们似乎已经为本章开头提出的问题找到了一个全面的解决方案。我们有了一个关于多支玩家队伍之间游戏(含平局)的概率模型,其中更简单的情形(两名玩家、个人而非队伍、无平局的游戏)作为特例出现。然而,当这个系统面向真实的 beta 测试者部署时,人们发现它的配对并不总是令人满意。特别是,某些玩家的技能值似乎“卡”在了较低的取值上,即使这些玩家已经打了很多游戏并有了很大进步,从而导致糟糕的配对。

网球

……

阅读全文

[译]基于模型的机器学习 - 3.4 核心模型的扩展

到目前为止,我们已经为两名玩家之间、以其中一方获胜告终的一局游戏构建了一个概率模型。为处理 Xbox Live 所需的各种各样的游戏,我们需要扩展我们的模型以应对若干额外的复杂性。具体而言,真实游戏可能以平局结束、可能涉及超过两名玩家、并且可能在多支队伍之间进行。现在我们将展示如何扩展最初的模型以考虑这些复杂性。这种灵活性很好地说明了基于模型的机器学习方法的强大之处。

具体来说,我们需要扩展我们的模型,使它能够:

  • 在结果为平局时更新技能;
  • 对团队游戏,更新各个团队成员的技能;
  • 适用于超过两名玩家的游戏。

基于模型的方法允许以透明的方式并入这些扩展,从而产生一个能够处理上述所有复杂性、同时仍保持可理解、可维护的解决方案。

如果一局游戏可能以平局结束怎么办?

在我们当前的模型中,在某一局游戏中表现值较高的玩家就是那局的赢家。对于也可能以平局结束的游戏,我们可以引入平局边界(draw margin)这一概念来修改这个假设:只有当一名玩家的表现超过另一名玩家至少一个平局边界的值时,他才是赢家。数学上这可以表达为

……

阅读全文

[译]基于模型的机器学习 - 3.3 一个解法:期望传播

我们已经看到,置信传播使我们能够在图 3.10 的模型中计算变量 Jskill 的精确边缘后验分布。虽然 Jskill 的先验分布是一个由两个参数描述的高斯,但后验分布不是高斯,而是一个需要四个参数的更复杂分布。为阻止参数数量在每局游戏后不断增加,我们需要一种方法用具有固定数量参数的分布来近似这个真实的后验,为此我们选择高斯。这样后验分布就会与先验具有相同的函数形式,模仿共轭先验的行为。如果我们能做到这一点,就能把所得的近似后验分布当作下一局游戏的先验分布。这样,每个玩家的技能将始终由一个仅受两个参数支配的高斯分布表示。

第一个问题是如何用一个高斯来近似一个非高斯分布。一个简单的解法是求出该非高斯分布的均值和方差,然后选一个具有相同均值和方差的高斯作为我们的近似。事实证明这是一个合理的近似,它可以通过优化两个概率分布不相似性的某种度量来形式化地推导出来 [Bishop, 2006; Minka, 2005]。

我们也许会因此想干脆直接用一个高斯来近似 Jskill 的精确后验分布。虽然这对图 3.10 的因子图会令人满意地奏效,但当我们转向更复杂的因子图(例如本章后面将遇到的那些)时,它又会失效。具有简单函数形式的消息在穿过因子后往往会变得更复杂。当我们把模型扩展到更大、更精巧的图时,很快就会遇到消息无法被精确计算的情形。这类问题可以通过在每个因子节点处局部地做近似来避免,从而使所有消息都具有所需的分布类型。这确保了只要每个因子都能使用适当的分布类型向所有相邻的变量节点发送近似消息,因子就可以被组合成任意的图。

下面这一小节会深入这类近似推断算法的数学细节。如果你想跳过这些细节,尽可直接看下一节。

推断深入探讨

在这个可选小节中,我们引入期望传播这一近似推断技术,我们将在本书中广泛使用它。如果你想专注于建模,尽可跳过本小节。

回到图 3.12(为方便起见在图 3.21 中重现),我们看到消息 (6) 是我们遇到的第一个非高斯消息。

图 3.21

图 3.21:在应用置信传播计算 Jskill 更新分布时出现的消息。(重现自图 3.12。)

因此我们的目标是用一个高斯来近似消息 (6),从而确保所有后续消息也都是高斯分布。

尽管这似乎是一个可取的目标,但也似乎存在一个重大障碍——如图 3.17 所示,消息 (6) 的精确形式看起来一点也不像高斯!事实上,它的均值和方差甚至都没有良好定义(两者都是无穷)。找到一个合理高斯近似的关键在于注意到:消息 (6) 的近似版本随后会作为消息 (7) 和 (8) 的修改形式在图中传递,然后会被向下的消息 (9) 相乘,以确定 Jskill 的(近似)后验分布。因此我们的目标将是:让消息 (6)(关于 Jperf)的高斯近似在那些被图中其他部分传来的信息认为更可能的区域上最为精确。然而,正如我们刚刚讨论的,我们需要把近似保持在图中生成该消息的局部区域内。消息 (6) 被发送到节点 Jperf,因此我们可以选择我们的近似,使 Jperf 边缘分布的精度最大化。这通过把消息 (6) 乘以图中同一条边上向下的消息得到,后者可如图 3.22 所示计算。注意,求 Fskill 的后验边缘时也需要这些相同的消息,因此计算它们并不引入额外开销。

图 3.22

图 3.22:计算将用于为消息 (6) 找高斯近似的“上下文”消息。

让我们更详细地考虑因子图中靠近 Jperf 节点的部分,如图 3.23 所示。

图 3.23a

(a)

图 3.23b

(b)

图 3.23:Jperf 节点周围因子图的细节,展示所涉及的消息:(a) 运行置信传播时;(b) 对来自 GreaterThan 因子的向上消息做局部高斯近似时。

这里 $e$ 表示此前在图 3.20 中所见的精确消息 (6),$c$ 表示向下的“上下文”消息,$g$ 表示我们所需的对消息 $e$ 的高斯近似。这些消息都只是变量 Jperf 的函数。我们已经看到,我们不能简单地用高斯来近似消息 $e$,因为消息 $e$ 具有无穷的均值和方差。相反,我们对 Jperf 的边缘分布做高斯近似。精确的边缘由入向消息之积 $ce$ 给出。因此我们把近似消息 $g$ 定义为:使消息 $c$ 与 $g$ 之积给出的 Jperf 边缘分布是对真实边缘的最佳高斯近似,从而

$$cg = \text{Proj}\left( ce \right). \tag{3.14}$$

这里 Proj() 表示“投影”,代表用一个具有相同均值和方差的高斯替换一个非高斯分布的过程。这可以看作把精确消息投影到高斯分布族中“最近”的消息上。两边同除以 $c$,我们于是得到

$$g = \frac{\text{Proj}\left( ce \right)}{c}. \tag{3.15}$$

如何做到这一点的数学细节在 Herbrich 等人 [2007] 中讨论。

因此我们如下为精确消息 (6) 找到一个高斯近似。首先我们像之前一样计算精确的输出消息 (6)。它在图 3.24 中以蓝色显示。

图 3.24

图 3.24:蓝色为精确的输出消息 (6),红色为入向的上下文消息 $c$,绿色为这两条消息之积。

然后我们把它乘以入向的上下文消息 $c$(在图 3.24 中以红色显示)。这给出一个分布(在图 3.24 中以绿色显示),它是非高斯的,但是局部化的,因此具有有限的均值和方差,从而可以用一个高斯来近似。这条曲线在图 3.25 中重复出现,图 3.25 还展示了具有相同均值和方差的高斯分布。

图 3.25

图 3.25:绿色为从图 3.24 复制来的、真实置信传播消息与入向上下文消息之积。橙色为对此积的高斯近似,即 Gaussian(140.4, 28.5²)。

最后,我们把这个高斯分布除以入向的高斯上下文消息 $c$,以生成我们的近似输出消息。因为两个高斯之比本身也是一个高斯 [Bishop, 2006],所得的输出消息也将是高斯的,这正是我们最初的目标。对于我们这个具体例子,这条消息是一个均值为 160.8、标准差为 40.2 的高斯。近似消息的计算过程总结于图 3.26。

图 3.26

图 3.26:计算消息 (6) 高斯近似所涉及的步骤。蓝色曲线为精确消息 (6),红色曲线为入向上下文消息 $c$,橙色曲线为真实消息与上下文消息之积的高斯近似,即 Gaussian(140.4, 28.5²)。最后,紫色曲线为橙色曲线除以红色上下文消息的结果,给出 Gaussian(160.8, 40.2²)。这个高斯随后被用作消息 (6)。

我们看到,总体上我们先乘以入向上下文消息,然后做高斯近似,最后再把上下文消息除掉。因此入向消息所提供的证据仅用于确定高斯近似应当在哪个区域上精确,而不会被直接并入近似消息本身。如果我们恰好有一个共轭分布,那么投影运算就没有必要,上下文消息也不会产生任何影响。

既然我们已经为输出消息 (6) 找到了合适的高斯近似,我们就可以继续沿图传递消息,给出相应的近似消息 (7),如图 3.27 所示。

图 3.27

图 3.27:计算 Jskill 更新分布时的消息 (5)、(6) 和 (7)。注意以橙色高亮的消息 (6) 和 (7) 不同于图 3.18 中的精确消息,它们均为 Gaussian(160.8, 40.2²)。

对新的(近似)版本消息 (8) 的计算同样涉及一个高斯与一个高斯的卷积,结果如图 3.28 所示。

图 3.28

图 3.28:计算 Jskill 更新分布时的消息 (8) 和 (9)。注意除了消息 (6) 和 (7),消息 (8)(橙色,Gaussian(160.8, 40.5²))也不同于图 3.19 中的精确消息。

向下的消息 (9) 保持不变,因此我们最终可以把 Jskill 后验分布的高斯近似计算为两个高斯之积,给出最终结果:一个均值为 140.1、标准差为 28.5 的高斯。

这种在消息传递过程中局部近似消息的方法被称为期望传播(expectation propagation,简称 EP),由 Minka [2001] 提出。近似是在因子节点处局部做出的,而且其方式独立于图其余部分的结构。因此,只要每个因子都一致地用所需的分布类型(此处为高斯)发送和接收消息,该技术就可以应用于任意结构的图。期望传播算法总结于算法 3.1,其中与循环置信传播的差异以红色高亮。

算法 3.1:期望传播

输入:因子图、要计算边缘的目标变量列表、消息传递调度、初始消息值(可选)、每条边的近似分布选择。

输出:目标变量的边缘分布。

  1. 把所有消息初始化为均匀(或初始值,若已提供)。
  2. 对消息传递调度中的每一条边:发送下面适当的消息——
    • 变量节点消息:在其他边上收到的所有消息之积;
    • 因子节点消息:计算置信传播消息(见算法 2.1)。乘以上下文消息(在这条边上朝该因子传来的消息)。用矩匹配把它投影到这条边所需的分布类型。把上下文消息除掉。
    • 观测节点消息:在观测值处的一个点质量;
  3. 直到所有消息收敛。
  4. 在每个目标变量节点处,把所有入向消息之积计算为边缘分布。
……

阅读全文

[译]基于模型的机器学习 - 3.2 推断玩家的技能

到目前为止,我们假设已经知道 Jill 和 Fred 的技能,并用这些技能计算了每个玩家成为胜者的概率。在实践中,我们必须反向推理:我们观察到谁赢得了游戏,并需要用这个信息来了解玩家的技能值。因此,我们转向学习玩家技能这一问题。

下棋

在任何游戏中,看到谁胜谁负都会告诉我们关于玩家技能的信息。

给定一局游戏的结果,提高胜者的技能值、降低败者的技能值似乎是合理的。然而,不太清楚的是我们应当做多大的调整。直觉上我们可以这样推理。假设 Jill 是这局游戏的胜者。如果 Jill 的技能显著高于 Fred,那么 Jill 获胜并不令人意外,因此技能值的变化应当相对较小。如果技能相近,那么较大的变化就有道理。然而,如果 Jill 的技能显著低于 Fred,那么这个游戏结果就非常令人意外。这个结果表明我们当前对技能值的评估不太准确,因此我们应当对技能值做大得多的调整。简而言之,意外的程度指示了应当对技能值做多大的改变。我们将看到,在一个合适的模型中执行推断会自动给出这种行为。

……

阅读全文

[译]基于模型的机器学习 - 3.1 建模游戏的结果

我们的目标是构建一个能够评估在线游戏玩家技能的系统。作为迈向这一目标的第一步,我们需要先考察一个更简单的问题:在已经知道相关玩家技能的情况下,预测一局游戏的结果。这将使我们发展出解决“确定技能”这一更复杂问题所需的许多概念。

假设 Jill 将在 Xbox Live 上与 Fred 玩一局《光环》。在第 2 章中,我们用一个二值变量来表示一个人的软件开发技能,指示此人是否具备某项特定技能。当我们考虑一个人在《光环》这类典型 Xbox 游戏中的技能时,这种做法就不够用了,因为可能的技能水平存在很宽的谱系。相反,用一个连续值来表示一个人的技能更为合适。因此,我们的第一条建模假设是:

……

阅读全文

[译]基于模型的机器学习 - 3 匹配你的对手

每一天,全世界数以百万计的玩家登录 Xbox Live®,在数百款不同的游戏里彼此对战。他们的乐趣取决于是否能被匹配到实力相当的其他玩家,从而获得良好的游戏体验。那么,我们如何用基于模型的机器学习来自动匹配实力相近的玩家呢?

对于游戏而言,在线世界的一大优势在于随时随地都能找到对手,无论白天黑夜。Xbox Live 的一项重要需求,是能够找到技能水平相当的对手,以便让玩家获得愉快的游戏体验。这一需求意味着系统必须有办法估计玩家的技能。然而,要做到这一点会面临一些重大挑战——尤其是,实力更强的玩家并不总能赢得一局游戏。许多游戏都带有运气成分,在某一局中运气可能会偏向较弱的玩家。更普遍地说,一名玩家的表现会因疲劳或热情起伏等因子而在不同对局之间发生变化。因此,我们不能假设某一局的胜者一定比败者技能更高。另一方面,我们确实预期实力更强的玩家在与较弱玩家的对局中,赢的次数会多于输的次数,所以对局结果确实能提供关于玩家相对技能的有用信息。

……

阅读全文

最近文章

分类

标签

友情链接

其它