机器学习笔记 第十四章概率图模型

14.1  隐马尔可夫模型

        概率模型提供一种描述框架,将学习任务转化为计算变量的概率分布,利用已知变量来推测未知变量的分布为“推测”。假定关心的变量集合为Y,可观测变量集合为O,其他变量集合为R,生成式模型联合分布P(Y,R,O),判别式模型考虑条件分布P(Y,R|O),给定一组观测变量值,推断就是从上述两个分布得到条件概率分布P(Y|O)

        概率图模型是一类用图来表达变量关系的概率模型,最常见的是用一个结点表示一个或一组随机变量,边表示变量间的概率相关关系,即“变量关系图”。根据边的性质不同,分为有向无环图(也叫有向图模型或贝叶斯网)和无向图(也叫无向图模型或马尔可夫图)。

        隐马尔可夫模型是结构最简单的动态贝叶斯网,主要应用于时序数据建模,在语音识别、自然语言处理等方面广泛应用。如图14.1所示,状态变量\left \{ y_{1},y_{2},...,y_{n} \right \},其中y_{i}\in \gamma表示第i时刻系统状态,状态变量一般是隐藏的、不可被观测的,也称隐变量。观测变量\left \{ x_{1},x_{2},...,x_{n} \right \},其中x_{i}\in \chi表示第i时刻的观测值。系统通常在多个状态\left \{ s_{1},s_{2},...,s_{N} \right \}之间转换,故\gamma一般有N个可能取值的离散空间,观测变量x_{i}仅考虑离散型,并且假定其取值范围\chi\left \{ o_{1},o_{2},...,o_{M} \right \}

        “马尔可夫链”就是系统下一时刻的状态仅由当前状态决定,不依赖于以往的任何状态。基于这种依赖关系,所有变量的联合概率分布为

P(x_{1},y_{1},...,x_{n},y_{n})=P(y_{1})P(x_{1}|y_{1})\prod_{i=2}^{n}P(y_{i}|y_{i-1})P(x_{i}|y_{i}).

        此外,隐马尔可夫模型还要一下三组参数:

        \bullet状态转移概率:模型在各状态间转换的概率记为矩阵A=[a_{ij}]_{N\times N},其中

a_{ij}=P(y_{t+1}=s_{j}|y_{t}=s_{i}),        1\leqslant i,j\leqslant N,

        表示在任意时刻t,若状态为s_{i},则下一刻状态为s_{j}的概率。

        \bullet输出观测概率:模型根据状态获得各个观测值的概率,通常记为矩阵B=[b_{ij}]_{N\times M},其中

b_{ij}=P(x_{t}=o_{j}|y_{t}=s_{i}),        1\leqslant i\leqslant N,1\leqslant j\leqslant M

        表示在任意时刻t,若状态为s_{i},则观测值o_{j}被获取的概率。

        \bullet初始状态概率:模型在初始时刻各状态出现的概率,通常记为\pi =(\pi _{1},\pi _{2},...,\pi _{N}),其中

\pi _{i}=P(y_{1}=s_{i}),    1\leqslant i\leqslant N

        表示模型的初始状态为s_{i}的概率。

        通过\gamma\chi和三组参数能够确定一个隐马尔可夫模型,通常用参数\lambda =[A,B,\pi ]来指代。给定\lambda,可以下过程产生观测序列\left \{ x_{1},x_{2},...,x_{n} \right \}

        (1)设置t=1,并根据初始状态概率\pi确定y_{1}

        (2)根据y_{t}B选择观测变量取值x_{t}

        (3)根据y_{t}A转移模型状态,即确定y_{t+1}

        (4)若t< n,设置t=t+1,并转到第(2)步,否则停止。

14.2  马尔可夫随机场

        马尔可夫随机场是著名无向图模型,其有一组势函数,也叫因子,这是定义在变量子集上的非负实函数,主要用于定义概率分布函数。如图14.2所示,若其中任意两结点间都有边连接,则称该结点子集为一个“团”,如果一个团中加入另外任何一个结点都不再形成团,则该团为“极大团”。

        对于n个变量x=\left \{ x_{1},x_{2},...,x_{n} \right \},所有极大团构成的集合为C^{*},与团Q\in C^{*}对应的变量集合记为x_{Q},则联合概率P(x)定义为

P(x)=\frac{1}{Z^{*}}\prod_{Q\in C^{*}}^{} \psi _{Q}(x_{Q}),

其中Z^{*}=\sum_{x}^{}\prod_{Q\in C^{*}}^{}\psi _{Q}(x_{Q})规范化因子,以确保P(x)是被正确定义的概率。

        如图14.3所示,如果从结点集A中的结点到B中的结点都必须经过结点集C中的结点,则称结点集A和B被结点集C分离,C称为“分离集”。全局马尔可夫性是指给定两个变量子集的分离集,则这两个变量子集条件独立。也就是说,若令A,B和C对应的变量集分别为x_{A},x_{B}x_{C},则x_{A}x_{B}在给定x_{C}的条件下独立,记为x_{A}\perp x_{B}|x_{C}

        由全局马尔可夫性可得如下推论

        \bullet局部马尔可夫性:给定某变量的邻接变量,则该变量条件独立于其他变量,形式化地说,令V为图的结点集,n(v)为结点v在图上的邻接结点,n^{*}(v)=n(v)\cup \left \{ v \right \},有x_{v}\perp x_{V/n^{*}(v)}|x_{n(v)}

        \bullet成对马尔可夫性:给定所有其他变量,两个非邻接变量条件独立。

        为满足非负性,指数函数常被用于定义势函数,即

\psi _{Q}(x_{Q})=e^{-H_{Q}(x_{Q})}.

H_{Q}(x_{Q})是一个定义在变量x_{Q}上的实值函数,常见形式为

H_{Q}(x_{Q})=\sum_{u,v\in Q,u\neq v}\alpha _{uv}x_{u}x_{v}+\sum_{v\in Q}\beta _{v}x_{v},

其中\alpha _{uv}\beta _{v}是参数。上式中的第一项考虑每一对结点的关系,第二项仅考虑单节点。

14.3  条件随机场

        条件随机场是一种判别式无向图模型,对条件分布进行建模。条件随机场试图对多个变量在给定观测值后的条件概率进行建模。具体来说,令x=\left \{ x_{1},x_{2},...,x_{n} \right \}为观测序列,标记序列为y=\left \{ y_{1},y_{2},...,y_{n} \right \},那么条件随机场的目标是构建条件概率模型P(y|x)。特别注意,y可以是结构型变量,即其分量之间具有某种相关性。

        令G=\left \langle V,E \right \rangle表示结点与标记变量y中元素一一对应的无向图,y_{v}表示与结点v对应的标记变量,n(v)表示结点v的邻接结点,若图G的每个变量y_{v}都满足马尔可夫性,即

P(y_{v}|x,y_{V/\left \{ v \right \}})=P(y_{v}|x,y_{n(v)})

(x,y)构成一个条件随机场。

        在条件随机场中,条件概率为

P(y|x)=\frac{1}{Z}exp(\sum_{j}\sum_{i=1}^{n-1}\lambda _{j}t_{j}(y_{i+1},y_{i},x,i)+\sum_{k}\sum_{i=1}^{n}\mu _{k}s_{k}(y_{i},x,i)),

其中t_{j}(y_{i+1},y_{i},x,i)是定义在观测序列的两个相邻标记位置上的转移特征函数,s_{k}(y_{i},x,i)是定义在观测序列的标记位置i上的状态特征函数。

14.4  学习与推断

        边际分布是指对无关变量求和或积分后得到结果,给定参数\Theta求解某个变量x的分布,就变成对联合分布中其他无关变量进行积分的过程,这称为“边际化”。

        假设图模型对应的变量集x=\left \{ x_{1},x_{2},...,x_{N} \right \}能分为x_{E}x_{F}两个不相交的变量集,计算边际概率P(x_{F})或条件概率P(x_{F}|x_{E})

P(x_{F}|x_{E})=\frac{P(x_{E},x_{F})}{P(x_{E})}=\frac{P(x_{E},x_{F})}{\sum_{x_{F}}P(x_{E},x_{F})},

其中联合概率P(x_{E},x_{F})可基于概率图模型获得,故

P(x_{E})=\sum_{x_{F}}P(x_{E},x_{F}).

        概率图模型的推断方法分为两类,即精确推方法和近似推断方法,接下来介绍两种有代表性的精确推断方法。

        14.4.1  变量消去

        精确推断是一类动态规划算法,利用图模型所描述的条件独立性来削减计算目标概率值所需的计算量。变量消去是构建其他精确推断算法的基础。如图14.7(a)所示

        假定计算编辑概率P(x_{5}),为此,只需加法消去变量\left \{ x_{1},x_{2},x_{3},x_{4} \right \},即

        P(x_{5})=\sum_{x_{4}}\sum_{x_{3}}\sum_{x_{2}}\sum_{x_{1}}P(x_{1},x_{2},x_{3},x_{4})

                    =\sum_{x_{4}}\sum_{x_{3}}\sum_{x_{2}}\sum_{x_{1}}P(x_{1})P(x_{2}|x_{1})P(x_{3}|x_{2})P(x_{4}|x_{3})P(x_{5}|x_{4})

        14.4.2  信念传播

        变量消去法通过求和操作

m_{ij}(x_{j})=\sum_{x_{i}}\psi (x_{i},x_{j})\prod_{k\in n(i)/j}m_{ki}(x_{i})

消去变量x_{i},其中n(i)表示结点x_{i}的邻接结点。在信念传播算法中,该操作可看作从x_{i}x_{j}传递了一个消息m_{ij}(x_{j})。一个结点只有在接收到来自其他所有结点的消息后才能向另一个结点发消息,且结点的边际分布正比于它所接收的消息的乘积,即

P(x_{i})\infty \prod_{k\in n(i)}m_{ki}(x_{i}).

14.5  近似推断

        14.5.1  MCMC采样

        在许多任务中,我们关心某些概率分布并不是因为对这些概率分布本身感兴趣,而是要基于它们计算某些期望,并且进一步基于期望做决策。如果直接计算或逼近这个期望比推断概率分布更容易,则直接操作无疑将使推断问题更为高效。

        假定目标是计算函数f(x)在概率密度函数p(x)下的期望

E_{p}[f]=\int f(x)p(x)dx,

则可根据p(x)抽取一组样本\left \{ x_{1},x_{2},...,x_{N} \right \},然后计算f(x)在这些样本上的均值

\tilde{f}=\frac{1}{N}\sum_{i=1}^{N}f(x_{i}),

以此来近似目标期望E_{p}[f]。概率图模型中最常用的采样技术是马尔可夫链蒙特卡罗方法,给定连续变量 x\in X 的概率密度函数p(x),x 在区间A中的概率可计算为

P(A)=\int_{A}^{}p(x)dx.

若有函数f:X\rightarrow R,则可计算f(x)的期望

p(f)=E_{p}[f(X)]=\int_{x}f(x)p(x)dx.

MCMC先构造出服从p分布的独立同分布随机变量x_{1},x_{2},...,x_{N},再得到上式的无偏估计

\tilde{p}(f)=\frac{1}{N}\sum_{i=1}^{N}f(x_{i}).

如果马尔可夫链运行时间足够长,则此时产出的样本x近似服从于分布p。假定平稳马尔可夫链T的状态转移概率(即从状态x转移到状态x'的概率)为T(x'|x),t时刻状态的分布为p(x^{t}),则马尔可夫链满足平稳条件

p(x^{t})T(x^{t-1}|x^{t})=p(x^{t-1})T(x^{t}|x^{t-1}),

        MCMC方法先构造一条马尔可夫链,使其收敛至平稳分布恰为待估计参数的后验分布,然后通过该马尔可夫链产生符合其后验分布的样本,并且基于这些样本来进行估计。

        Metropolis-Hastings (简称 MH) 算法是 MCMC 的重要代表,它基于"拒绝采样"来逼近平稳分布 p,其算法如图14.9所示。

        若x^{*}最终收敛到平稳收态,则根据上式有

p(x^{t-1})Q(x^{*}|x^{t-1})A(x^{*}|x^{t-1})=p(x^{*})Q(x^{t-1}|x^{*})A(x^{t-1}|x^{*}),

于是,为了达到平稳状态,只需将接受率设置为

A(x^{*}|x^{t-1})=min(1,\frac{p(x^{*})Q(x^{t-1}|x^{*})}{p(x^{t-1})Q(x^{*}|x^{t-1})}).

        以下是用python实现的MH算法

import numpy as np
import matplotlib.pyplot as plt


def target_distribution(x):
    """
    目标分布(需要进行采样的分布),这里以标准正态分布为例
    :param x: 输入值
    :return: 概率密度函数值
    """
    return np.exp(-0.5 * x ** 2) / np.sqrt(2 * np.pi)


def proposal_distribution(x, scale=1.0):
    """
    提议分布(用于生成候选样本),这里以标准正态分布为例
    :param x: 当前值
    :param scale: 提议分布的标准差
    :return: 新的提议值
    """
    return x + scale * np.random.randn()


def metropolis_hastings(iterations, initial_value, proposal_scale):
    """
    Metropolis-Hastings 算法
    :param iterations: 迭代次数
    :param initial_value: 初始值
    :param proposal_scale: 提议分布的标准差
    :return: 生成的样本
    """
    samples = np.zeros(iterations)
    current_value = initial_value

    for i in range(iterations):
        proposed_value = proposal_distribution(current_value, proposal_scale)

        # 计算接受率
        acceptance_ratio = min(1, target_distribution(proposed_value) / target_distribution(current_value))

        # 接受或拒绝提议
        if np.random.rand() < acceptance_ratio:
            current_value = proposed_value

        samples[i] = current_value

    return samples


# 示例参数
iterations = 10000
initial_value = 0
proposal_scale = 1.0

# 执行 Metropolis-Hastings 算法
samples = metropolis_hastings(iterations, initial_value, proposal_scale)

# 可视化结果
plt.figure(figsize=(10, 6))
plt.hist(samples, bins=50, density=True, alpha=0.6, color='g', label='Samples')
x = np.linspace(-4, 4, 100)
plt.plot(x, target_distribution(x), 'r', label='Target Distribution')
plt.title('Metropolis-Hastings Sampling')
plt.xlabel('Value')
plt.ylabel('Density')
plt.legend()
plt.show()

        我们希望从中采样的分布。示例中使用的是标准正态分布(均值为0,方差为1);生成候选样本的分布。示例中使用的是标准正态分布,方差由 scale 参数决定;通过在提议分布中生成候选样本,并根据接受率决定是否接受这些样本来生成新的样本;使用 Matplotlib 绘制生成的样本的直方图,并与目标分布的理论密度函数进行比较。下图是代码运行的结果

        14.5.2  变分推断

        变分推断通过使用己知简单分布来逼近需推断的复杂分布,并通过限制近似分布的类型,从而得到一种局部最优、但具有确定解的近似后验分布。

        盘式记法如图所示,图14.10(a)表示N个变量\left \{ x_{1},x_{2},...,x_{N} \right \}均依赖于其他变量z,图(b)中。相互独立、由相同机制生成的多个变量被放在一个方框(盘)内,并在方框中标出类似变量重复出现的个数N;方框可以嵌套。

        图b中观察到的变量x的联合分布的概率密度函数是

p(x|\Theta )=\prod_{i=1}^{N}\sum_{z}p(x_{i},z|\Theta ),

所对应的对数似然函数为

lnp(x|\Theta )=\sum_{i=1}^{N}ln\left \{ \sum_{z}p(x_{i},z|\Theta ) \right \},

其中x=\left \{ x_{1},x_{2},...,x_{N} \right \}\Theta是x与z服从的分布参数。

        概率模型的参数估计通常以最大化对数似然函数为手段。上式可使用EM算法,根据t时刻的参数\Theta ^{t}p(z|x,\Theta ^{t})进行推断,并计算联合似然函数p(x,z|\Theta ),进行最大化寻优,即对关于变量\Theta的函数\wp(\Theta ;\Theta ^{t})进行最大化从而求取

\Theta ^{t+1}=argmax_{\Theta }\wp(\Theta ;\Theta ^{t})=argmax_{\Theta }\sum_{z}p(z|x,\Theta ^{t})lnp(x,z|\Theta ).

        p(z|x,\Theta ^{t})未必是隐变量z服从的真实分布,而只是一个近似分布,用q(z)表示,可验证

lnp(x)=\pounds (q)+KL(q||p),

其中

\pounds (q)=\int q(z)ln\left \{ \frac{p(x,z)}{q(z)} \right \}dz

KL(q||p)=-\int q(z)ln\left \{ \frac{p(z|x)}{q(z)} \right \}dz.

        在现实任务中,对p(z|x,\Theta ^{t}),通常假设z服从分布

q(z)=\prod_{i=1}^{M}q_{i}(z_{i}),

即假设复杂的多变量z可拆解为一系列相互独立的多变量z_{i}

        可知变量子集z_{j}所服从的最优分布q_{*}^{j}应满足

lnq_{j}^{*}(z_{j})=E_{i\neq j}[lnp(x,z)]+const,

q_{j}^{*}(z_{j})=\frac{exp(E_{i\neq j}[p(x,z)])}{\int exp(E_{i\neq j}[p(x,z)])dz_{j}}.

  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本章主要介绍了概率图模型的基本概念和常见类型,以及如何利用Python实现这些模型。下面是一些笔记和代码示例。 ## 概率图模型的基本概念 概率图模型是一种用于表示和处理不确定性的图形化模型,它能够将一个复杂的联合概率分布表示为多个简单的条件概率分布的乘积形式,从而简化概率推理和模型学习的过程。概率图模型主要包括两种类型:有向图模型和无向图模型。 有向图模型(Directed Acyclic Graph, DAG)又称为贝叶斯网络(Bayesian Network, BN),它用有向边表示变量之间的因果关系,每个节点表示一个随机变量,给定父节点的条件下,每个节点的取值都可以用一个条件概率分布来描述。有向图模型可以用贝叶斯公式进行概率推理和参数学习。 无向图模型(Undirected Graphical Model, UGM)又称为马尔可夫随机场(Markov Random Field, MRF),它用无向边表示变量之间的相互作用关系,每个节点表示一个随机变量,给定邻居节点的取值,每个节点的取值都可以用一个势函数(Potential Function)来描述。无向图模型可以用和有向图模型类似的方法进行概率推理和参数学习。 ## 概率图模型的Python实现 在Python中,我们可以使用`pgmpy`库来实现概率图模型。该库提供了一个简单而强大的接口来定义和操作概率图模型,支持有向图模型和无向图模型的构建、概率推理、参数学习等功能。 ### 有向图模型 以下是一个简单的有向图模型的示例: ```python from pgmpy.models import BayesianModel model = BayesianModel([('A', 'B'), ('C', 'B'), ('B', 'D')]) ``` 其中,`BayesianModel`是有向图模型的类,`('A', 'B')`表示A节点指向B节点,即B节点是A节点的子节点,依此类推。我们可以使用以下代码查看模型的结构: ```python print(model.edges()) # 输出:[('A', 'B'), ('B', 'D'), ('C', 'B')] ``` 接下来,我们可以为每个节点定义条件概率分布。以下是一个简单的例子: ```python from pgmpy.factors.discrete import TabularCPD cpd_a = TabularCPD(variable='A', variable_card=2, values=[[0.2, 0.8]]) cpd_c = TabularCPD(variable='C', variable_card=2, values=[[0.4, 0.6]]) cpd_b = TabularCPD(variable='B', variable_card=2, values=[[0.1, 0.9, 0.3, 0.7], [0.9, 0.1, 0.7, 0.3]], evidence=['A', 'C'], evidence_card=[2, 2]) cpd_d = TabularCPD(variable='D', variable_card=2, values=[[0.9, 0.1], [0.1, 0.9]], evidence=['B'], evidence_card=[2]) model.add_cpds(cpd_a, cpd_c, cpd_b, cpd_d) ``` 其中,`TabularCPD`是条件概率分布的类,`variable`表示当前节点的变量名,`variable_card`表示当前节点的取值个数,`values`表示条件概率分布的值。对于有父节点的节点,需要指定`evidence`和`evidence_card`参数,表示当前节点的父节点和父节点的取值个数。 接下来,我们可以使用以下代码进行概率推理: ```python from pgmpy.inference import VariableElimination infer = VariableElimination(model) print(infer.query(['D'], evidence={'A': 1})) # 输出:+-----+----------+ # | D | phi(D) | # +=====+==========+ # | D_0 | 0.6000 | # +-----+----------+ # | D_1 | 0.4000 | # +-----+----------+ ``` 其中,`VariableElimination`是概率推理的类,`query`方法用于查询给定变量的概率分布,`evidence`参数用于指定给定变量的取值。 ### 无向图模型 以下是一个简单的无向图模型的示例: ```python from pgmpy.models import MarkovModel model = MarkovModel([('A', 'B'), ('C', 'B'), ('B', 'D')]) ``` 其中,`MarkovModel`是无向图模型的类,与有向图模型类似,`('A', 'B')`表示A节点和B节点之间有相互作用关系。 接下来,我们可以为每个节点定义势函数。以下是一个简单的例子: ```python from pgmpy.factors.discrete import DiscreteFactor phi_a = DiscreteFactor(['A'], [2], [0.2, 0.8]) phi_c = DiscreteFactor(['C'], [2], [0.4, 0.6]) phi_b = DiscreteFactor(['A', 'C', 'B'], [2, 2, 2], [0.1, 0.9, 0.3, 0.7, 0.9, 0.1, 0.7, 0.3]) phi_d = DiscreteFactor(['B', 'D'], [2, 2], [0.9, 0.1, 0.1, 0.9]) model.add_factors(phi_a, phi_c, phi_b, phi_d) ``` 其中,`DiscreteFactor`是势函数的类,与条件概率分布类似,需要指定变量名、变量取值个数和势函数的值。 接下来,我们可以使用以下代码进行概率推理: ```python from pgmpy.inference import BeliefPropagation infer = BeliefPropagation(model) print(infer.query(['D'], evidence={'A': 1})) # 输出:+-----+----------+ # | D | phi(D) | # +=====+==========+ # | D_0 | 0.6000 | # +-----+----------+ # | D_1 | 0.4000 | # +-----+----------+ ``` 其中,`BeliefPropagation`是概率推理的类,与有向图模型类似,`query`方法用于查询给定变量的概率分布,`evidence`参数用于指定给定变量的取值。 ## 总结 本章介绍了概率图模型的基本概念和Python实现,包括有向图模型和无向图模型的构建、条件概率分布和势函数的定义、概率推理等。使用`pgmpy`库可以方便地实现概率图模型,对于概率模型的学习和应用都有很大的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值