【深度学习】图形模型基础(3):从零开始认识机器学习模型

1.引言

机器学习,这一古老而又充满活力的领域,其历史可追溯至上世纪中叶。然而,直到20世纪90年代初,机器学习才开始展现出其广泛的应用潜力。在过去的十年里,机器学习更是迎来了前所未有的蓬勃发展,其应用范畴广泛,不仅在网络搜索、自动驾驶汽车、医学成像和语音识别等领域大放异彩,还持续不断地拓展新的边界。这一显著增长背后,有赖于多方面的驱动因素:廉价计算资源的普及、机器学习算法的持续优化、研究界和商业界对机器学习兴趣的激增,以及最为关键的一点——全球数据量的爆炸式增长,这些海量的数据为机器学习提供了丰富的养分。

随着机器学习技术的不断发展,各种学习算法和技术层出不穷,如逻辑回归、神经网络、决策树、支持向量机、卡尔曼滤波器等。这些技术的诞生和发展,得益于统计学、人工智能、优化理论、信号处理、语音学、视觉学和控制理论等多个学科的交叉融合。在面对新的机器学习问题时,传统的方法是,从业者需要根据自身经验和应用需求,从众多算法中选择一个合适的,并利用现有软件或自主编写代码来实现。当需要对技术进行调整以适应特定应用时,从业者必须深入了解所选技术的细节。

以两层神经网络为例,它作为一种典型的机器学习技术,在图1中以直观的形式呈现。神经网络可以被视为一个灵活的函数映射器,它接受一组输入 x i {xi} xi,并输出一组预测值 y k {yk} yk。在神经网络中,输入数据首先经过线性组合,然后通过一个非线性激活函数进行转换,以产生中间变量。接着,这些中间变量再经过线性组合,形成最终的输出。神经网络的参数,如权重 w j i ( 1 ) 和 w k j ( 2 ) {w^{(1)}_{ji}}和{w^{(2)}_{kj}} wji(1)wkj(2),是通过最小化训练数据集上的误差函数来优化的。在神经网络的实际应用中,通常会使用训练数据来调整参数,使用验证数据来优化网络结构(如隐藏层的神经元数量),然后固定网络参数,将训练好的模型应用于新的数据。
在这里插入图片描述

图1. 两层可调参数神经网络,每个参数对应网络中的一个链接

神经网络可以被视为一个强大的工具,它作为一个灵活的非线性参数函数,能够将一组输入 x i {xi} xi映射到一组输出 y k {yk} yk。在神经网络的工作过程中,首先会对输入进行线性组合,随后通过一个非线性函数 h ( ⋅ ) h(·) h()进行转换,以引入非线性特性。

具体来说,对于神经网络的某一层(假设为第一层),每个节点(或称为神经元)会接收前一层输出的加权和,即:

z j = h ( ∑ i w j i ( 1 ) x i ) (1.1) z_j = h\left(\sum_{i} w^{(1)}_{ji} x_i\right) \tag{1.1} zj=h(iwji(1)xi)(1.1)

在这里, w j i ( 1 ) w_{ji}^{(1)} wji(1)代表从第 i i i个输入节点到第 j j j个中间节点的权重, x i xi xi是输入节点的值,而 h ( ⋅ ) h(·) h()是非线性激活函数,它负责将加权和转换为非线性输出。在这个上下文中, h ( ⋅ ) h(·) h()通常被选择为“双曲正切”(tanh)函数或其他类似的非线性函数,以增加网络的表达能力。

接着,这些中间变量 z j zj zj会被传递到下一层(假设为输出层),并被再次线性组合以产生最终输出:

y k = ∑ j w k j ( 2 ) z j (1.2) y_k = \sum_{j} w^{(2)}_{kj} z_j \tag{1.2} yk=jwkj(2)zj(1.2)

在这里, w k j ( 2 ) 代表从中间层第 w_{kj}^{(2)}代表从中间层第 wkj(2)代表从中间层第j 个节点到输出层第 个节点到输出层第 个节点到输出层第k$个节点的权重。通过调整这些权重和激活函数的选择,神经网络可以学习复杂的输入-输出映射,并在各种任务中表现出色。

神经网络通过组合线性运算和非线性激活函数,构建了一个能够处理复杂数据并产生准确预测的强大模型。

Kinect的骨架跟踪系统是一个传统机器学习技术成功应用的典型案例。该系统利用深度视频摄像机的数据,在低成本硬件上实现了实时的人体骨架跟踪。其核心技术是决策树随机森林,通过训练大量标记有身体部位的人体姿势图像,系统能够准确地识别出人体各个部位的位置。这一系统的开发过程遵循了传统机器学习应用的典型流程:首先收集训练数据,然后选择合适的机器学习算法进行训练,优化系统参数,最后将训练好的系统部署到实际应用中。

尽管传统机器学习方法已经在许多领域取得了显著的成功,但其局限性也日益凸显。其中最为突出的是,将标准算法适应特定应用需求的困难。虽然有些问题可以通过现成的机器学习算法解决,但更多的问题需要对算法进行定制化的修改,而这往往需要对算法本身及其实现细节有深入的理解。此外,还有许多复杂的问题难以用标准的机器学习算法来直接解决。

随着机器学习的普及和影响力的不断扩大,越来越多的非机器学习专家也开始关注这一领域,并尝试将机器学习技术应用于自己的研究领域。然而,机器学习算法的多样性和复杂的术语体系往往让新手望而却步。与此同时,“数据革命”的到来也为机器学习提供了前所未有的机遇。随着全球数据量的不断增长和云计算技术的发展,人们可以更容易地获取和处理大规模数据集,这为机器学习的发展提供了强大的支持。

为了应对这些挑战和机遇,我们转向了一种新的机器学习范式——基于模型的机器学习。在第2节中,我们将详细阐述基于模型的机器学习的目标和优势。接着,在第3节中,我们将介绍贝叶斯观点在基于模型的机器学习中的应用。在第4节中,我们将探讨概率图模型在机器学习中的重要作用。第5节将介绍确定性近似推理算法在机器学习中的应用。在第6节中,我们将通过一个大规模案例研究来展示基于模型的机器学习的实际效果。在第7节中,我们将解释概率编程语言如何为基于模型的机器学习提供强大的软件环境。最后,在第8节中,我们将对全文进行总结和展望。

2.机器学习模型的设计目标

基于模型的机器学习方法,其核心理念在于为每一个新兴的应用场景量身打造独特的模型。这些模型及其相应的推理算法,有时与传统的机器学习技术相吻合,但更多时候则呈现出独特的创新性。这类方法通常利用模型规范语言来实现,允许通过紧凑的代码定义模型,进而自动生成执行该模型的软件。

基于模型的方法追求以下几个核心目标:

  1. 广泛性与特殊性:能够创建覆盖广泛领域的模型,同时确保这些模型配备适当的推理或学习算法。在这一框架下,许多传统的机器学习技术被视为特定情境下的应用实例。

  2. 定制化与集成化:每个模型都可以根据特定应用的独特需求进行微调。例如,当应用需要在时间序列数据的背景下结合聚类和分类时,无需将高斯混合模型、神经网络和隐马尔可夫模型等传统算法生硬地拼接在一起,而是可以构建一个整合了所有必要功能的单一模型。

  3. 模型与推理的解耦:当模型发生变动时,推理软件能够自动适应这些变化。同样,推理技术的进步也能迅速惠及各类模型,实现技术与应用的双向互动。

  4. 功能透明度:通过通用建模语言中的简洁代码描述模型,使得模型的结构清晰易懂。这种建模代码不仅易于在模型构建者社区中分享和扩展,也极大地提高了模型的可解释性。

  5. 教育友好性:对于机器学习领域的新手而言,只需掌握一个统一的建模环境,即可接触到丰富的建模解决方案。由于许多传统方法被纳入基于模型的环境中,新手无需逐一学习这些方法及其特定的术语,降低了学习门槛。

为实现上述目标,我们可以考虑多种方法。在本文中,我们将重点关注一种基于概率图模型中贝叶斯推理的强大框架。接下来,我们将简要介绍机器学习中贝叶斯视角的基本概念和应用。

3.贝叶斯推理的深入解析

在传统的机器学习方法中,模型的自适应参数通常被赋予具体的点值,这些值是通过应用优化算法来最小化预定的成本函数来确定的。然而,在贝叶斯方法中,我们采取了截然不同的视角:未知变量被概率分布所描述,而观察到的数据则通过贝叶斯定理来更新这些分布。简而言之,贝叶斯推理利用概率来量化不确定性,提供了一种一致的方式来处理未知和不确定性。

每当新的观察或数据点出现时,当前的概率分布(我们称之为先验分布)都会结合这一新信息,通过贝叶斯定理计算出相应的后验分布。这个后验分布随后又成为下一次观察时所使用的先验分布。这种更新过程是顺序的,使得贝叶斯推理特别适合于在线学习和数据流环境。

贝叶斯框架的一大优势在于其构建层次模型的能力。设想一个场景,我们想要从一群人中学习数据,并同时根据他们的个人数据进行个性化预测。在贝叶斯方法中,我们可以为每个个体分配独特的参数值,其先验分布则由更高层次的超参数控制,而这些超参数又源自一个跨人群的共享超先验。这种层次结构允许我们同时实现整体和个体的学习。

在数据供应有限、模型参数不确定性较高的情况下,贝叶斯方法展现出其卓越的性能。此时,传统的基于参数优化的方法容易“过拟合”,即模型过度适应数据中的噪声,导致预测效果不佳。而贝叶斯方法通过概率分布的方式,自然地考虑了参数的不确定性,有效避免了这一问题。

然而,当面对大型数据集时,贝叶斯模型中的概率分布可能会变得相对集中,导致模型输出的结果与传统的基于点的方法相似。但这里需要明确的是,“大”的定义并不仅仅是计算上的大小(以字节为单位),而是相对于模型的统计复杂性。例如,在预测单一输入值x对应的输出y时,如果两者之间存在线性关系且噪声水平较低,那么即使是少量的数据点也可能足以给出非常准确的预测,因为这样的数据集在统计上是“大”的。

随着数据爆炸时代的到来,许多新的机器学习应用面临着计算上庞大但统计上相对较小的数据集。因此,开发高效且能够扩展到大型数据集的贝叶斯推理方法变得尤为重要。在深入探讨这些方法之前,我们先来介绍一个用于构建模型的图形框架。

  1. 概率图模型与贝叶斯建模

在贝叶斯推理的框架下,“模型”的核心是其所有随机变量的联合概率分布。这通常表示为:
p ( x 1 , … , x K ) (4.1) p(x_1, \ldots, x_K) \tag{4.1} p(x1,,xK)(4.1)
其中集合 { x 1 , … , x K } \{ x_1, \ldots, x_K \} {x1,,xK}包含了模型中的所有参数、潜在变量(即隐藏变量),以及需要被观察或预测的变量。由于处理完全无结构的联合分布通常是不切实际的,我们转而使用结构化的模型。概率图模型[Pearl 1988, Koller 和 Friedman 2009]便为此提供了一个非常灵活的框架。

特别地,我们关注基于有向无环图(DAGs)的图模型。这些图直观地展示了联合分布如何被分解为更小子集变量上分布的乘积。以三个变量a、b和c为例,其联合分布可以分解为:
p ( a , b , c ) = p ( c ∣ a , b ) p ( b ∣ a ) p ( a ) (4.2) p(a, b, c) = p(c|a, b)p(b|a)p(a) \tag{4.2} p(a,b,c)=p(ca,b)p(ba)p(a)(4.2)
这里, p ( x ∣ y ) p(x|y) p(xy)表示在给定y的值时 x x x的条件概率。此分解适用于多种分布类型,如高斯、伯努利或伽马分布,因此具有高度的通用性。
在这里插入图片描述
备注:图2展示了一个基于有向图的模型,该模型直观地描绘了三个随机变量a、b和c之间的依赖关系,并对应于(4.2)式中给出的联合概率分布的分解形式。在这个图中,每个变量都由一个节点表示,而节点之间的有向边则指明了条件概率的方向。通过这个图形模型,我们可以清晰地看到a、b和c之间的条件依赖关系,以及它们如何共同构成了一个复杂的联合概率分布。

为了直观地表示这种分解,我们可以使用图模型。在图模型中,每个随机变量都由一个节点表示,每个条件分布则由从相应条件变量指向的箭头表示。例如,在表示 p ( c ∣ a , b ) p(c|a, b) p(ca,b)的图中,会有从a和b指向c的箭头。

考虑一个更为复杂的图模型(如图3所示),它代表了一个包含七个变量的联合概率分布的分解。该图显示了每个变量如何仅依赖于其父节点。例如, x 5 x_5 x5仅依赖于 x 1 x_1 x1 x 3 x_3 x3。联合分布可以表示为这些条件分布的乘积:
p ( x 1 ) p ( x 2 ) p ( x 3 ) p ( x 4 ∣ x 1 , x 2 , x 3 ) p ( x 5 ∣ x 1 , x 3 ) p ( x 6 ∣ x 4 ) p ( x 7 ∣ x 4 , x 5 ) (4.3) p(x_1)p(x_2)p(x_3)p(x_4|x_1, x_2, x_3)\\p(x_5|x_1, x_3)p(x_6|x_4)p(x_7|x_4, x_5) \tag{4.3} p(x1)p(x2)p(x3)p(x4x1,x2,x3)p(x5x1,x3)p(x6x4)p(x7x4,x5)(4.3)

对于包含 K K K个变量的模型,联合分布可以一般性地表示为:
p ( x ) = ∏ k = 1 K p ( x k ∣ pa k ) ( 4.4 ) p(x) = \prod_{k=1}^{K} p(x_k|\text{pa}_k) \quad (4.4) p(x)=k=1Kp(xkpak)(4.4)
其中 pa k \text{pa}_k pak表示 x k x_k xk的父节点集合。
在这里插入图片描述
备注:图3展示了一个包含七个变量(x1至x7)的有向无环图(DAG)。这个图直观地表示了由(4.3)式给出的联合概率分布的分解形式。通过图中的节点和边,我们可以清晰地看到每个变量如何依赖于其父节点,并共同构成了一个复杂的联合分布。这个图模型为我们提供了一种直观的方式来理解和分析这些变量之间的依赖关系。

这种表示方式的优点在于,它允许我们将可能包含数百万变量的联合分布表达为一系列小因子的乘积,每个因子通常仅依赖于变量的一个小子集。这不仅在计算上大大简化了问题,也使得模型在实际应用中变得可行。

在本文探讨的基于模型的机器学习方法中,我们构建了一个以有向图形式表示的概率模型。这个图的结构体现了我们对与应用场景相关的潜在数据分布类别的合理假设。为了直观地理解这个图所承载的含义,一个有效的方法是想象通过图中的祖先节点进行采样以生成合成数据。这种方法被称为生成观点,它可以通过图3来加以阐释。

在生成过程中,我们按照图中的节点顺序依次进行采样。首先,我们从初始分布 p ( x 1 ) p(x_1) p(x1)中抽取一个值,使随机变量 x 1 x1 x1获得一个特定的值 x ^ \hat{x} x^。接着,我们按照同样的方式,为变量 x 2 x_2 x2 x 3 x_3 x3分别抽取值 x ^ 2 \hat{x}_2 x^2 x ^ 3 \hat{x}_3 x^3。然后,当轮到 x 4 x_4 x4时,我们根据条件概率分布 p ( x 4 ∣ x ^ 1 , x ^ 2 , x ^ 3 ) p(x_4|\hat{x}_1, \hat{x}_2, \hat{x}_3) p(x4x^1,x^2,x^3)进行采样,此时 x 4 x_4 x4的父节点(即 x ^ 1 \hat{x}_1 x^1, x ^ 2 \hat{x}_2 x^2, x ^ 3 \hat{x}_3 x^3)已经被赋予了具体的采样值。这个过程持续进行,直到我们为图中的每个变量都抽取了一个样本值。

通过这种方式,我们能够根据图结构所定义的依赖关系和数据生成过程,生成出符合我们假设的数据集,进而用于模型的训练和评估。这种生成观点不仅有助于我们理解图模型的工作原理,还能为我们提供有力的工具来模拟和验证模型在实际应用中的性能。

概率图模型以其灵活性和可定制性在多个领域中发挥着核心作用。作为其中的具体实例,隐马尔可夫模型(HMM)展示了如何通过图形化结构来高效建模和推理。HMM通过图4中的概率图模型表示,广泛应用于语音识别、自然语言处理和生物序列分析等场景。在HMM中,一系列观察向量(如x1, x2, …)依赖于一个潜在的、未观察到的马尔可夫链(如z1, z2, …),其中每个观察值xk仅与同一时间步的潜在变量zk相关。推理过程可以通过高效的前向-后向算法完成。
在这里插入图片描述
备注:图4展示了隐马尔可夫模型(HMM)的图形化表示方式。这个图形模型不仅代表了HMM的结构,而且也可以看作是线性动力系统的一种形式。图中的阴影节点代表观测变量,这些变量的值是由给定的数据集确定的,即它们是可见的、可测量的。通过这种方式,HMM能够捕捉序列数据中隐藏的动态过程,并通过观测到的数据来推断这些隐藏状态。

在这里插入图片描述
备注:图5展示了对图4中模型的一个扩展,该扩展增加了自回归依赖关系。通过引入这种依赖关系,模型能够捕捉变量之间的时间依赖性,即一个变量的当前值依赖于其过去值。这种扩展使得模型在处理时间序列数据或具有连续时间依赖性的场景时更加有效。在图5中,我们可以看到这种自回归关系是如何通过图中的有向边表示的,这些边连接了不同时间步长的变量节点。

HMM的一个强大特性在于其可定制性。通过简单的图形结构修改,可以轻松地扩展或改变模型以适应不同的应用需求。例如,图5展示了自回归隐马尔可夫模型,其中观察值不仅依赖于隐藏变量,还依赖于先前的观察值。图6中的模型则包含了“输入”和“输出”的概念,进一步丰富了模型的表达能力。
在这里插入图片描述
备注:图6展示了图4中模型的一个扩展版本,这次增加了输入变量和输出变量。这种扩展使得模型能够接收外部输入信息,并基于这些输入和模型内部的隐藏状态来生成输出。在图6中,输入变量和输出变量通过特定的节点表示,这些节点与模型中的其他节点通过有向边相连,体现了数据流的方向和模型结构的复杂性。通过引入输入和输出变量,模型可以更加灵活地应用于各种预测、分类或生成任务。

另一个变体是因子隐马尔可夫模型(FHMM),如图7所示,它允许多个隐藏过程同时影响观察值。这种模型特别适用于那些需要捕捉多个潜在因素相互作用的场景。FHMM的一个有趣发展是切换状态空间模型,它结合了多个独立的潜在变量马尔可夫链,每个链只在特定条件下对观察值产生影响。
在这里插入图片描述
备注:图7展示了图4中模型的一个扩展版本,它用于建模多个隐马尔可夫过程。这种扩展允许我们同时捕捉和分析多个独立或相互关联的隐藏状态序列,这些状态序列随时间演进,并产生可观测的输出。在图7中,我们可以看到多个隐马尔可夫链(或称为“过程”)的并行表示,每个链都有自己的状态转移和输出生成机制。这些链之间可以通过共享某些参数、状态或输出进行交互,以捕捉更复杂的依赖关系和动态行为。通过扩展模型以包含多个隐马尔可夫过程,我们可以更全面地理解和分析具有多个隐藏层或组件的复杂系统。

这些例子展示了概率图模型如何通过简单的图形结构变化来适应各种复杂场景,并提供了有效的推理算法。这种灵活性使得概率图模型成为解决许多实际问题时不可或缺的工具。通过不断开发新的模型和推理算法,我们可以进一步扩展概率图模型的应用范围,并推动相关领域的发展。

在机器学习的广阔领域中,许多传统技术实际上都可以视为图形模型框架下的特定应用,结合适当的推理算法。这些技术,如主成分分析(PCA)、因子分析、逻辑回归、高斯混合模型等,都可以通过构建简单的图形结构来直观地表示。一旦这些模型被图形化,它们就能被轻松地组合和扩展,比如构建概率PCA模型的混合体。在基于模型的机器学习框架中,我们无需深究这些模型的名称或特定的文献背景,只需关注它们如何在图形化结构中发挥作用。

当涉及到模型的详细设计时,一个更为丰富和灵活的图形框架——因子图——常常被采用。因子图能够表示有向图的超集,提供了更广泛的建模能力。然而,由于篇幅限制,本文不再深入讨论因子图的具体细节。

在构建图形模型时,我们通常假设图的结构是预先确定的。但在实际应用中,图的结构往往存在不确定性,比如某个特定的链接是否存在。为了解决这个问题,一种强大的图形技术被引入,即门控图(Gated Graph)。门控图允许随机变量在多个不同的图形结构之间进行切换,从而构建了一个更高层次的图,这个图隐式地包含了多个底层的图形结构。通过在门控图上运行推理算法,我们可以得到不同结构在给定观察数据下的后验分布,从而帮助我们从数据中自动确定最优的图结构。

5. 近似推理算法

概率模型定义了应用中所有变量的联合分布。我们可以将这些变量划分为已观察到的变量 (x)(数据)、我们感兴趣的变量 (z),以及其余的潜在变量 (w)。因此,联合分布可以表示为 (p(x, z, w))。如果我们没有观察到 (x),那么 (z) 的边际分布由下式给出:

p ( z ) = ∑ x ∑ w p ( x , z , w ) (5.1) p(z) = \sum_x \sum_w p(x, z, w) \tag{5.1} p(z)=xwp(x,z,w)(5.1)

这里假设变量是离散的,但讨论同样适用于连续变量或离散与连续变量的组合,在这种情况下,求和应适当地被积分替换。

当观察到 (x) 取特定值 (x_b) 时,我们可以计算条件分布:

p ( z ∣ x = x b ) ∝ ∑ w p ( x = x b , z , w ) (5.2) p(z|x = x_b) \propto \sum_w p(x = x_b, z, w) \tag{5.2} p(zx=xb)wp(x=xb,z,w)(5.2)

其中符号 (x = x_b) 表示随机变量 (x) 取特定值 (x_b)。得到的分布如果需要可以被规范化。可以将 (5.1) 视为在观察数据之前的先验分布,而 (5.2) 是相应的后验分布。从先验到后验的分布变化反映了通过观察数据获得的信息,这代表了现代贝叶斯视角下机器“从数据中学习”的意义。

在大多数实际应用中,我们关注于确定形式如下的单个变量的后验边际分布:

p ( z i ∣ x = x b ) ∝ ∑ { z j ≠ i } ∑ w p ( x = x b , z , w ) (5.3) p(z_i|x = x_b) \propto \sum_{\{z_j \neq i\}} \sum_w p(x = x_b, z, w) \tag{5.3} p(zix=xb){zj=i}wp(x=xb,z,w)(5.3)

对于构成 (z) 的每个变量 (z_i)。

对于几乎所有实际感兴趣的问题,精确评估 (5.2) 或 (5.3) 都是不可行的。因此,我们必须求助于近似,这些近似需要在计算效率和特定应用所需的准确性之间取得平衡。

让我们首先考虑计算效率的问题。考虑一个由 (M) 个离散潜在变量组成的向量 (w),每个变量的基数为 (K)。那么 (5.2) 中对 (w) 的求和就涉及到 (K^M) 项,因此存储和计算需求随着变量数量的增加而呈指数级增长。即使对于二元变量,这也会使许多现实世界的应用变得不可解,这些应用可能涉及数千或数百万变量。

我们通常可以通过利用模型内的结构来大幅改善这种情况。考虑一个由有向图指定的模型,其中联合分布的分解由 (4.4) 指定(尽管这里的 (4.4) 没有直接给出,但我们假设它描述了某种形式的分解)。如果单个因子只依赖于变量的小子集,那么我们可以利用这种分解来获得更有效的推理过程。为了说明这一点,考虑一个涉及两个二元变量 (a) 和 (b) 的简单示例,以及一个简单的函数,即 (a) 和 (b) 的乘积。如果我们对所有 (a) 和 (b) 的值求和这个函数,我们得到:

∑ a ∑ b a b = a 1 b 1 + a 1 b 2 + a 2 b 1 + a 2 b 2 (5.4) \sum_a \sum_b ab = a_1b_1 + a_1b_2 + a_2b_1 + a_2b_2 \tag{5.4} abab=a1b1+a1b2+a2b1+a2b2(5.4)

计算右侧需要七次操作(四次乘法和三次加法)。然而,我们可以利用函数 (ab) 分解为 (a) 的函数和 (b) 的函数的乘积这一事实,使我们能够将 (5.4) 重写为分析上等价但计算上更有效的形式:

∑ a ∑ b a b = ( a 1 + a 2 ) ( b 1 + b 2 ) (5.5) \sum_a \sum_b ab = (a_1 + a_2)(b_1 + b_2) \tag{5.5} abab=(a1+a2)(b1+b2)(5.5)

现在只需要三个计算步骤(两次加法和一次乘法)。我们利用了分解结构来交换求和和乘法,从而实现了分析上等价但计算上更有效的形式。

现在考虑一个更复杂的例子,由节点链组成,如图8所示。再次假设链有 (M) 个离散变量,每个变量的基数为 (K),我们希望计算 (x_M) 的边际分布。直接计算将涉及对联合分布的评估,然后对不需要的变量进行边缘化,这在直接评估时,存储和计算成本都是链长指数级的。

p ( x M ) = ∑ x 1 ⋯ ∑ x M − 1 p ( x 1 , … , x M ) (5.6) p(x_M) = \sum_{x_1} \cdots \sum_{x_{M-1}} p(x_1, \ldots, x_M) \tag{5.6} p(xM)=x1xM1p(x1,,xM)(5.6)
在这里插入图片描述

图8. 简单的变量马尔可夫链

为了获得更有效的推理过程,我们利用联合分布的分解,它通常表示为一系列条件概率的乘积。以链式模型为例,联合分布可以写为:

p ( x 1 , … , x M ) = p ( x 1 ) ∏ m = 2 M p ( x m ∣ x m − 1 ) (5.7) p(x_1, \ldots, x_M) = p(x_1) \prod_{m=2}^{M} p(x_m | x_{m-1}) \tag{5.7} p(x1,,xM)=p(x1)m=2Mp(xmxm1)(5.7)

这是通过将链式模型的结构应用于图8中的图形得到的。将(5.7)代入边际分布的计算中,并交换求和与乘积的顺序,我们得到:

p ( x M ) = ∑ x M − 1 p ( x M ∣ x M − 1 ) ( ⋯ ( ∑ x 2 p ( x 3 ∣ x 2 ) ( ∑ x 1 p ( x 2 ∣ x 1 ) p ( x 1 ) ) ) ⋯   ) (5.8) p(x_M) = \sum_{x_{M-1}} p(x_M | x_{M-1})\\ \left( \cdots \left( \sum_{x_2} p(x_3 | x_2) \left( \sum_{x_1}p(x_2 | x_1)p(x_1) \right) \right) \cdots \right) \tag{5.8} p(xM)=xM1p(xMxM1)((x2p(x3x2)(x1p(x2x1)p(x1))))(5.8)

在这里,我们首先计算 (x_1) 的求和,这仅涉及分布 (p(x_2 | x_1)) 和 (p(x_1))。因此,这一步的存储和计算成本仅为 (O(K^2))。然后,我们将得到的结果视为 (x_2) 的函数,并乘以 (p(x_3 | x_2)),再对 (x_2) 求和,这一步骤在计算和存储上同样是 (O(K^2))。这个过程沿着链重复进行,总体计算成本为 (O(MK^2))。因此,通过使用联合分布的分解,我们将计算成本从链长指数级降低到链长线性级。注意,这仍然是一个精确的计算。

这个过程可以被解释为一种消息传递方案,其中量

μ x 1 → x 2 ( x 2 ) ≡ ∑ x 1 p ( x 2 ∣ x 1 ) p ( x 1 ) (5.9) \mu_{x_1 \rightarrow x_2}(x_2) \equiv \sum_{x_1} p(x_2 | x_1)p(x_1) \tag{5.9} μx1x2(x2)x1p(x2x1)p(x1)(5.9)

可以被视为从图中的节点 (x_1) 向节点 (x_2) 发送的消息。同样地,计算中的一个通用步骤可以表示为评估一个传出消息,该消息是由传入消息与局部条件分布结合构建的:

μ x m → x m + 1 ( x m + 1 ) = ∑ x m p ( x m + 1 ∣ x m ) μ x m − 1 → x m ( x m ) (5.10) \mu_{x_m \rightarrow x_{m+1}}(x_{m+1}) = \\\sum_{x_m} p(x_{m+1} | x_m) \mu_{x_{m-1} \rightarrow x_m}(x_m) \tag{5.10} μxmxm+1(xm+1)=xmp(xm+1xm)μxm1xm(xm)(5.10)

因此,全局计算可以分解为涉及链中相邻节点之间传递消息的局部计算。在这个特定的例子中,一系列消息从链的一端传递到另一端。

这种方法可以很容易地推广到没有环路的任意图形[Pearl 1988, Bishop 2005]。在这种情况下,所有未观察到的节点的边际分布可以使用两阶段的消息传递时间表来评估。首先将任意一个节点指定为“根”。然后,消息通过所有其他节点顺序从根传递到“叶子”节点。然后第二组消息从叶节点传回根节点。在第二次传递结束时,每条链接将看到每个方向上的消息传递一次,每个节点将获得足够的信息来计算其边际分布,条件是任何观察到的变量。同样,计算成本与图形的大小成线性关系。

这个算法的一个特例是前向-后向算法,用于在隐马尔可夫模型中寻找后验边际分布,用于学习模型的参数[Rabiner 1989]。另一个特殊情况是由卡尔曼滤波器(前向传递)和卡尔曼平滑器(后向传递)算法给出的线性动态系统的算法[Minka 1998, Bishop 2005]。

对于有环路的图形,情况更为复杂。虽然可以使用诸如连接树算法[Lauritzen 和 Spiegelhalter 1988]的技术来执行精确推理,但计算成本可能会变得过高,这取决于图形的结构。一种替代方法是环状信念传播[Frey 和 MacKay 1998],它使用与上述树状图形相同的消息传递技术,但简单地迭代消息以允许在存在环路的情况下进行近似推理。尽管这个过程可能看起来是临时的,但在许多应用中已经发现它可以产生良好的结果。

到目前为止,我们假设每个节点的本地消息可以精确计算。虽然对于离散节点这通常是可行的,但对于其他分布,消息的封闭形式评估通常是不可能的,因此需要使用近似。一类近似方案基于使用技术如马尔可夫链蒙特卡洛(MCMC)[Metropolis 等人 1953]进行抽样。一种非常简单但广泛适用的MCMC方法是吉布斯抽样。蒙特卡洛方法有两个优点:它们适用于广泛的分布范围,并且其中许多方法在无限计算资源的极限下会给出精确推理的近似。

然而,在实践中,蒙特卡洛方法(如吉布斯抽样)计算成本高昂,通常不适应许多技术应用中遇到的大型数据集,特别是涉及互联网规模数据集的应用。因此,我们转而使用基于确定性近似的另一类推理算法。

在这里,我们考虑一个特定的近似框架,称为期望传播(Expectation Propagation, EP)[Minka 2001]。本地消息通过最小化由下式给出的Kullback-Leibler(KL)散度来近似:

KL ( p ∥ q ) = − ∫ p ( z ) ln ⁡ { q ( z ) p ( z ) } d z (5.11) \text{KL}(p \| q) = -\int p(z) \ln \left\{ \frac{q(z)}{p(z)} \right\} dz \tag{5.11} KL(pq)=p(z)ln{p(z)q(z)}dz(5.11)

其中 q ( z ) q(z) q(z)表示一族近似分布。KL散度度量了分布 q ( z ) q(z) q(z)与给定分布 p ( z ) p(z) p(z)之间的差异程度,具有属性 KL ( p ∥ q ) > 0 \text{KL}(p \| q) > 0 KL(pq)>0,并且当且仅当 q ( z ) = p ( z ) q(z) = p(z) q(z)=p(z)时等式成立。我们将在下一节看到一个应用此程序的例子。对于有环路的图形,消息传递过程可以再次迭代进行,直到满足某个停止准则。

还有许多其他确定性近似方案,如变分消息传递(Variational Message Passing, VMP)[Winn 和 Bishop 2005]、树加权消息传递(Tree-Reweighted Message Passing, TRWMP)[Wainwright 等人 2005]、分数信念传播(Fractional Belief Propagation, FBP)[Wiegerinck 和 Heskes 2003]和幂EP(Power EP)[Minka 2004]。此外,已经证明[Minka 2005],广泛的信息传递算法可以从一个共同的框架中派生出来,该框架涉及最小化Kullback-Leibler散度的一种概括,称为alpha族的散度。

6. 案例研究:贝叶斯技能评级

在这一节中,我们将考虑一个现实世界中应用图形模型和近似确定性推理框架的例子。这个模型被称为TrueSkill[Herbrich 等人 2007],它旨在解决一系列竞技游戏中玩家技能评级的问题。TrueSkill扩展了广泛使用的Elo系统[Elo 1978],后者在国际象棋等级分等场景中有所应用。TrueSkill自2005年以来便部署在Xbox Live在线游戏系统上,至今每天仍处理着数百万的游戏结果。

6.1.目标

目标是基于游戏结果为每个玩家分配一个技能值。在贝叶斯设置中,由于玩家 i i i的技能 s i s_i si是未知的,它被赋予了一个概率分布,为了简单起见,这里采用由均值 μ i \mu_i μi和方差 σ i 2 \sigma_i^2 σi2定义的高斯分布来表示。与Elo系统不同,TrueSkill从一开始就量化了玩家技能的不确定性。当新的数据(即新的游戏结果)到来时,技能分布会随之更新,分布的方差减少代表了对玩家技能值的信心增加。

6.2.图形模型

考虑玩家1和玩家2之间的特定游戏。我们为每个玩家定义了一个表现 π i \pi_i πi,代表他们在那个特定游戏中的表现如何。由于具有给定技能的玩家的表现可能因游戏而异,表现是技能的有噪声版本。这通过给 π i \pi_i πi一个高斯分布来表示,其均值是 s i s_i si,方差为 β \beta β。游戏的获胜者是表现值较高的玩家。这可以通过引入一个变量 y = π 2 − π 1 y = \pi_2 - \pi_1 y=π2π1来表示,其中 y > 0 y > 0 y>0表示玩家2获胜。当表现值的差异低于阈值 ∣ y ∣ ≤ ϵ |y| \leq \epsilon yϵ时,平局也可以建模。
在这里插入图片描述

图9:展示两个玩家之间单场比赛TrueSkill模型的有向图

备注:图9展示了TrueSkill模型的有向图,该模型用于评估两个玩家之间单场比赛的技能水平。在这个模型中,每个玩家(玩家1和玩家2)都有一个技能值(s1和s2),这些技能值由高斯分布表示,其中均值(μ1和μ2)和方差(σ1²和σ2²)分别代表玩家技能水平的预期值和不确定性。
每个玩家在游戏中的表现(π1和π2)也被建模为高斯分布,其均值等于对应玩家的技能值(s1和s2),方差为β,反映了技能表现的不确定性。游戏的获胜者由两个玩家表现值之间的差异(y = π2 - π1)决定,其中y > 0表示玩家2获胜,y < 0表示玩家1获胜,而|y| ≤ ϵ则表示平局。
这个模型允许我们根据观察到的游戏结果(即节点y的值)来更新玩家技能的后验分布。通过这种方法,TrueSkill能够随着更多游戏数据的积累而逐渐提高玩家技能评级的准确性。此外,TrueSkill模型还能够处理更复杂的场景,如团队比赛或多玩家比赛,通过扩展图形模型来适应这些场景。

6.3.推理与更新

当已知游戏结果时,节点 y y y变为观察到的,推理问题涉及更新技能 s 1 s_1 s1 s 2 s_2 s2的分布。由于图形是树状结构的,但来自节点 y y y的确切消息是非高斯的,因此技能的后验分布变为非高斯的。为了处理这种情况,使用期望传播来近似消息,将确切分布替换为局部最小化Kullback-Leibler散度(公式5.11)的高斯分布。这确保了分布在指数族内。所需的分布可以通过矩匹配来计算,即将近似高斯的均值和方差与真实分布的相应值匹配。

6.4.顺序贝叶斯模型

这个贝叶斯模型本质上是顺序的,一旦观察到新数据,后验技能分布就作为下一轮推理的先验。当前的技能分布用于在线游戏环境中选择对手,然后相应的游戏结果用于进一步细化技能分布。因此,推理和决策是交错的,图形模型正在不断地创建。这与传统的机器学习范式大相径庭,传统的机器学习范式中模型的参数是在实验室中使用训练数据集调整的,并且之后被固定下来。

6.5.结果

图10显示了使用TrueSkill获得的一些结果,以及使用Elo的相应结果。这里我们看到两个在线电脑游戏玩家的Elo估计技能水平与玩的游戏数量的对比。同样也绘制了使用相同数据从TrueSkill获得的两个玩家的后验平均技能,显示出随着游戏数量的增加收敛速度更快。这种改善行为是TrueSkill中不确定性建模的结果,每个玩家都有技能水平的均值和方差,与Elo中的单一估计技能值相比[Herbrich 等人 2007]。

6.6.模型的扩展

基于模型的机器学习的一个强大方面是能够扩展模型以考虑更复杂的情况。例如,传统Elo系统有两个显著限制:(i)游戏结果通常涉及玩家团队,但为了匹配目的,我们需要个人玩家的技能,(ii)许多游戏涉及超过两个玩家(或超过两个玩家团队)。这些限制在在线电脑游戏的背景下是重要的,并且可以通过模型的简单扩展来克服,如图11所示的图形。当游戏涉及超过两个玩家时,必须迭代运行消息传递算法,直到满足适当的停止准则。

模型的进一步扩展很容易实现。例如,可以通过引入一些高斯扩散来考虑玩家技能随时间的演变(例如,由于获得经验),这与卡尔曼滤波器的精神相符。同样,这可以通过修改底层的概率图来轻松适应[Herbrich 等人 2007, Dangauthier 等人 2008]。

7. 概率编程

在机器学习领域,随着数据复杂性的增加和模型复杂性的提升,传统的确定性编程范式已经难以满足所有需求。为了应对这一挑战,概率编程作为一种新兴的编程范式,为机器学习模型的构建和推理提供了更加灵活和直观的方法。

7.1.概率编程的核心思想

概率编程的核心思想是将随机变量视为与常规确定性变量同等的一等公民,从而允许我们在编程中直接操作和处理不确定性。通过扩展传统编程语言的语法和语义,概率编程语言允许我们定义和操作随机变量,以及定义这些随机变量之间的依赖关系和约束条件。

在概率编程语言中,我们可以使用特定的关键字(如randomconstraininfer)来定义和操作随机变量。这些关键字使得我们能够以直观的方式表达概率模型,并通过编译和优化技术生成高效的推理代码。

7.2.概率编程的灵活性

概率编程语言的灵活性体现在多个方面。首先,它允许我们定义复杂的概率模型,这些模型可以包含离散和连续变量、条件概率分布以及复杂的依赖关系。这种灵活性使得我们能够更好地捕捉现实世界中的不确定性,并构建更加精确的模型。

其次,概率编程语言允许我们将概率代码和传统确定性代码结合使用。这意味着我们可以利用现有的编程工具和库来构建复杂的系统,并在需要的地方添加概率推理功能。这种混合编程范式使得我们能够更加高效地利用计算资源,并加速模型的开发和迭代。

最后,概率编程语言通常提供了丰富的可视化工具和分析工具,使得我们能够更好地理解模型的内部结构和行为。这些工具可以帮助我们调试和优化模型,提高模型的性能和可解释性。

7.3.概率编程的应用场景

概率编程在多个应用场景中展现出巨大的潜力。以下是一些典型的应用场景:

  1. 贝叶斯网络:贝叶斯网络是一种用于表示和推理不确定性知识的图形模型。概率编程语言可以用于构建和推理贝叶斯网络,从而解决各种决策和预测问题。
  2. 推荐系统:在推荐系统中,我们需要根据用户的历史行为和偏好来预测用户可能感兴趣的内容。概率编程语言可以帮助我们构建复杂的推荐模型,并处理用户行为中的不确定性和噪声。
  3. 自然语言处理:自然语言处理中的许多任务(如文本分类、情感分析等)都涉及到不确定性。概率编程语言可以帮助我们构建基于概率的模型,并处理文本数据中的歧义和不确定性。
  4. 图像处理:在图像处理中,我们需要对图像进行分割、识别和分类等操作。概率编程语言可以用于构建基于概率的图像处理模型,并处理图像数据中的噪声和不确定性。

7.4.概率编程语言的例子

Infer.NET

Infer.NET 是一个功能强大的概率编程语言,它支持广泛的概率分布和推理算法。Infer.NET 的模块化框架使得它能够轻松扩展到新的分布和算法。通过使用 Infer.NET,用户可以定义复杂的概率模型,并利用高效的推理算法进行推断。Infer.NET 还提供了丰富的可视化工具和分析工具,帮助用户理解模型的内部结构和行为。

BUGS/OpenBUGS

BUGS(贝叶斯推断使用吉布斯抽样)和OpenBUGS 是另一个流行的概率编程语言。它们使用蒙特卡洛方法(如吉布斯抽样)进行推理,这使得它们能够处理复杂的模型和大规模的数据集。BUGS/OpenBUGS 的语法简单直观,易于学习和使用。此外,BUGS/OpenBUGS 还提供了丰富的文档和示例代码,帮助用户快速上手。

概率编程作为一种新兴的编程范式,为机器学习模型的构建和推理提供了更加灵活和直观的方法。通过扩展传统编程语言的语法和语义,概率编程语言允许我们直接操作和处理不确定性,并构建复杂的概率模型。这些模型可以应用于各种场景,如贝叶斯网络、推荐系统、自然语言处理和图像处理等。未来,随着概率编程技术的不断发展和完善,我们相信它将在机器学习和人工智能领域发挥越来越重要的作用。

8.总结

在本文中,我们深入探讨了基于模型的机器学习方法的核心理念,并比较了它与传统方法的独特优势。这种方法的一大亮点在于,它能够根据特定应用的需求,定制并优化模型,从而实现更高的效率和准确性。我们构建了一个基于概率图模型和局部消息传递算法的框架,来支撑模型化机器学习的实践。此外,我们还介绍了一个名为概率编程的软件开发环境,它提供了一种灵活且强大的方式来构建和测试机器学习模型。特别是Infer.NET这样的工具,为模型化机器学习的发展提供了强大的支撑。可以预见,随着数据驱动计算的不断发展,模型化机器学习及其概率编程形式将在未来展现出更大的潜力和价值。

参考文献

  1. C. M. Bishop, D. Spiegelhalter, 和 J. Winn, (2003). VIBES: 贝叶斯网络的变分推理引擎。神经信息处理系统进展,15。
  2. C. M. Bishop (2005). 模式识别与机器学习。Springer。
  3. P. Dangauthier, R. Herbrich, T. Minka, 和 T. Graepel (2008). 随时间变化的TrueSkill:重温国际象棋的历史。神经信息处理系统进展,20。
  4. R. Durbin, S. Eddy, A. Krogh, 和 G. Mitchison (1998). 生物序列分析,剑桥大学出版社。
  5. A. E. Elo (1978). 国际象棋选手的等级评定:过去和现在。Arco Publishing。
  6. B. J. Frey 和 D. J. C. MacKay (1998). 在有环图中的信念传播革命。神经信息处理系统进展,10。
  7. Z. Ghahramani 和 G. E. Hinton (1998). 切换状态空间模型的变分学习。神经计算,12, 963–996。
  8. Z. Ghahramani 和 M. I. Jordan (1997). 因子隐马尔可夫模型。机器学习,29, 245–275。
  9. R. Herbrich, T. Minka, 和 T. Graepel (2007). TrueSkill™: 一个贝叶斯技能评级系统。神经信息处理系统进展,20。
  10. F. Jelinek (1997). 语音识别的统计方法。MIT Press。
  11. R. E. Kalman (1960). 线性滤波和预测问题的新方法。美国机械工程师协会交易,D系列,基础工程杂志,82, 35–45。
  12. D. Koller 和 N. Friedman (2009). 概率图模型:原理与技术。MIT Press。
  13. F. R. Kschischnang, B. J. Frey, 和 H. A. Loeliger (2001). 因子图和求和-乘积算法。IEEE信息理论交易,47, 498–519。
  14. S. L. Lauritzen 和 D. J. Spiegelhalter (1988). 图形结构上的概率局部计算及其在专家系统中的应用。皇家统计学会杂志,50, 157–224。
  15. D. Lunn, D. Spiegelhalter, A. Thomas, 和 N. Best (2009). BUGS项目:演变、批评和未来方向。医学统计,28, 3049–3067。
  16. C. D. Manning 和 H. Schütze (1999). 统计自然语言处理的基础。MIT Press。
  17. N. Metropolis, A. W. Rosenblutt, M. N. Rosenbluth, A. H. Teller, 和 E. Teller (1953). 快速计算机的方程状态计算。化学物理杂志,21, 1087–1092。
  18. T. Minka (1998). 从隐马尔可夫模型到线性动态系统。MIT技术报告 TR#531。
  19. T. Minka (2001). 用于近似贝叶斯推理的期望传播。第十七届不确定性人工智能会议论文集,Morgan Kaufmann, 362–369。
  20. T. Minka (2004). 幂EP。微软研究院剑桥技术报告,MSR-TR-2004-149。
  21. T. Minka (2005). 散度度量和消息传递。微软研究院剑桥技术报告 MSR-TR-2005-173。
  22. T. Minka 和 J. Winn (2008). 门:混合模型的图形表示法。神经信息处理系统进展,21。
  23. T. Minka, J. Winn, J. Guiver, 和 D. Knowles (2010). Infer.NET, 微软研究院剑桥,http://research.microsoft.com/infernet。
  24. J. Pearl (1988). 智能系统中的概率推理。Morgan Kaufmann。
  25. L. R. Rabiner (1989). 隐马尔可夫模型的教程及在语音识别中的选定应用。IEEE会议记录,77, 257–285。
  26. S. Roweis 和 Z. Ghahramani (1999). 线性高斯模型的统一回顾。神经计算,11, 305–345。
  27. D. M. Roy (2011). 概率编程中的可计算性、推理和建模。麻省理工学院博士论文。
  28. J. Shotton, A. Fitzgibbon, M. Cook, T. Sharp, M. Finocchio, R. Moore, A. Kipman, 和 A. Blake (2011). 从单个深度图像实时识别人体姿态部分。IEEE国际计算机视觉与模式识别会议。
  29. M. J. Wainwright, T. S. Jaakkola, 和 A. S. Willsky (2005). 日志划分函数的一个新的上界类别。IEEE信息理论交易,51, 2313–2335。
  30. W. Wiegerinck 和 T. Heskes (2003). 分数信念传播。神经信息处理系统进展,15。
  31. J. Winn 和 C. M. Bishop (2005). 变分消息传递。机器学习研究杂志,6, 661–694。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MUKAMO

你的鼓励是我们创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值