14.1 隐马尔可夫模型
概率模型提供一种描述框架,将学习任务转化为计算变量的概率分布,利用已知变量来推测未知变量的分布为“推测”。假定关心的变量集合为,可观测变量集合为
,其他变量集合为
,生成式模型联合分布
,判别式模型考虑条件分布
,给定一组观测变量值,推断就是从上述两个分布得到条件概率分布
。
概率图模型是一类用图来表达变量关系的概率模型,最常见的是用一个结点表示一个或一组随机变量,边表示变量间的概率相关关系,即“变量关系图”。根据边的性质不同,分为有向无环图(也叫有向图模型或贝叶斯网)和无向图(也叫无向图模型或马尔可夫图)。
隐马尔可夫模型是结构最简单的动态贝叶斯网,主要应用于时序数据建模,在语音识别、自然语言处理等方面广泛应用。如图14.1所示,状态变量,其中
表示第i时刻系统状态,状态变量一般是隐藏的、不可被观测的,也称隐变量。观测变量
,其中
表示第i时刻的观测值。系统通常在多个状态
之间转换,故
一般有N个可能取值的离散空间,观测变量
仅考虑离散型,并且假定其取值范围
为
。
“马尔可夫链”就是系统下一时刻的状态仅由当前状态决定,不依赖于以往的任何状态。基于这种依赖关系,所有变量的联合概率分布为
此外,隐马尔可夫模型还要一下三组参数:
状态转移概率:模型在各状态间转换的概率记为矩阵
,其中
![]()
表示在任意时刻t,若状态为
,则下一刻状态为
的概率。
输出观测概率:模型根据状态获得各个观测值的概率,通常记为矩阵
,其中
![]()
表示在任意时刻t,若状态为
,则观测值
被获取的概率。
初始状态概率:模型在初始时刻各状态出现的概率,通常记为
,其中
![]()
表示模型的初始状态为
的概率。
通过、
和三组参数能够确定一个隐马尔可夫模型,通常用参数
来指代。给定
,可以下过程产生观测序列
:
(1)设置
,并根据初始状态概率
确定
;
(2)根据
和
选择观测变量取值
;
(3)根据
和
转移模型状态,即确定
;
(4)若
,设置
,并转到第(2)步,否则停止。
14.2 马尔可夫随机场
马尔可夫随机场是著名无向图模型,其有一组势函数,也叫因子,这是定义在变量子集上的非负实函数,主要用于定义概率分布函数。如图14.2所示,若其中任意两结点间都有边连接,则称该结点子集为一个“团”,如果一个团中加入另外任何一个结点都不再形成团,则该团为“极大团”。
对于n个变量,所有极大团构成的集合为
,与团
对应的变量集合记为
,则联合概率
定义为
其中规范化因子,以确保
是被正确定义的概率。
如图14.3所示,如果从结点集A中的结点到B中的结点都必须经过结点集C中的结点,则称结点集A和B被结点集C分离,C称为“分离集”。全局马尔可夫性是指给定两个变量子集的分离集,则这两个变量子集条件独立。也就是说,若令A,B和C对应的变量集分别为和
,则
和
在给定
的条件下独立,记为
。
由全局马尔可夫性可得如下推论
局部马尔可夫性:给定某变量的邻接变量,则该变量条件独立于其他变量,形式化地说,令V为图的结点集,
为结点v在图上的邻接结点,
,有
。
成对马尔可夫性:给定所有其他变量,两个非邻接变量条件独立。
为满足非负性,指数函数常被用于定义势函数,即
是一个定义在变量
上的实值函数,常见形式为
其中和
是参数。上式中的第一项考虑每一对结点的关系,第二项仅考虑单节点。
14.3 条件随机场
条件随机场是一种判别式无向图模型,对条件分布进行建模。条件随机场试图对多个变量在给定观测值后的条件概率进行建模。具体来说,令为观测序列,标记序列为
,那么条件随机场的目标是构建条件概率模型
。特别注意,y可以是结构型变量,即其分量之间具有某种相关性。
令表示结点与标记变量y中元素一一对应的无向图,
表示与结点
对应的标记变量,
表示结点
的邻接结点,若图G的每个变量
都满足马尔可夫性,即
,
则构成一个条件随机场。
在条件随机场中,条件概率为
其中是定义在观测序列的两个相邻标记位置上的转移特征函数,
是定义在观测序列的标记位置i上的状态特征函数。
14.4 学习与推断
边际分布是指对无关变量求和或积分后得到结果,给定参数求解某个变量x的分布,就变成对联合分布中其他无关变量进行积分的过程,这称为“边际化”。
假设图模型对应的变量集能分为
和
两个不相交的变量集,计算边际概率
或条件概率
。
其中联合概率可基于概率图模型获得,故
概率图模型的推断方法分为两类,即精确推方法和近似推断方法,接下来介绍两种有代表性的精确推断方法。
14.4.1 变量消去
精确推断是一类动态规划算法,利用图模型所描述的条件独立性来削减计算目标概率值所需的计算量。变量消去是构建其他精确推断算法的基础。如图14.7(a)所示
假定计算编辑概率,为此,只需加法消去变量
,即
14.4.2 信念传播
变量消去法通过求和操作
消去变量,其中
表示结点
的邻接结点。在信念传播算法中,该操作可看作从
向
传递了一个消息
。一个结点只有在接收到来自其他所有结点的消息后才能向另一个结点发消息,且结点的边际分布正比于它所接收的消息的乘积,即
14.5 近似推断
14.5.1 MCMC采样
在许多任务中,我们关心某些概率分布并不是因为对这些概率分布本身感兴趣,而是要基于它们计算某些期望,并且进一步基于期望做决策。如果直接计算或逼近这个期望比推断概率分布更容易,则直接操作无疑将使推断问题更为高效。
假定目标是计算函数在概率密度函数p(x)下的期望
则可根据抽取一组样本
,然后计算
在这些样本上的均值
以此来近似目标期望。概率图模型中最常用的采样技术是马尔可夫链蒙特卡罗方法,给定连续变量
的概率密度函数p(x),x 在区间A中的概率可计算为
若有函数,则可计算
的期望
MCMC先构造出服从p分布的独立同分布随机变量,再得到上式的无偏估计
如果马尔可夫链运行时间足够长,则此时产出的样本x近似服从于分布p。假定平稳马尔可夫链T的状态转移概率(即从状态x转移到状态x'的概率)为,t时刻状态的分布为
,则马尔可夫链满足平稳条件
MCMC方法先构造一条马尔可夫链,使其收敛至平稳分布恰为待估计参数的后验分布,然后通过该马尔可夫链产生符合其后验分布的样本,并且基于这些样本来进行估计。
Metropolis-Hastings (简称 MH) 算法是 MCMC 的重要代表,它基于"拒绝采样"来逼近平稳分布 p,其算法如图14.9所示。
若最终收敛到平稳收态,则根据上式有
于是,为了达到平稳状态,只需将接受率设置为
以下是用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个变量均依赖于其他变量z,图(b)中。相互独立、由相同机制生成的多个变量被放在一个方框(盘)内,并在方框中标出类似变量重复出现的个数N;方框可以嵌套。
图b中观察到的变量x的联合分布的概率密度函数是
所对应的对数似然函数为
其中,
是x与z服从的分布参数。
概率模型的参数估计通常以最大化对数似然函数为手段。上式可使用EM算法,根据t时刻的参数对
进行推断,并计算联合似然函数
,进行最大化寻优,即对关于变量
的函数
进行最大化从而求取
未必是隐变量z服从的真实分布,而只是一个近似分布,用
表示,可验证
其中
,
在现实任务中,对,通常假设z服从分布
即假设复杂的多变量z可拆解为一系列相互独立的多变量。
可知变量子集所服从的最优分布
应满足
即