隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率

简介:

1. 回顾HMM问题一:求观测序列的概率

    首先我们回顾下HMM模型的问题一。这个问题是这样的。我们已知HMM模型的参数λ=(A,B,Π)。其中A是隐藏状态转移概率的矩阵,B是观测状态生成概率的矩阵, Π是隐藏状态的初始概率分布。同时我们也已经得到了观测序列O={o1,o2,...oT},现在我们要求观测序列O在模型λ下出现的条件概率P(O|λ)

    乍一看,这个问题很简单。因为我们知道所有的隐藏状态之间的转移概率和所有从隐藏状态到观测状态生成概率,那么我们是可以暴力求解的。

    我们可以列举出所有可能出现的长度为T的隐藏序列I={i1,i2,...,iT},分布求出这些隐藏序列与观测序列O={o1,o2,...oT}的联合概率分布P(O,I|λ),这样我们就可以很容易的求出边缘分布P(O|λ)了。

    具体暴力求解的方法是这样的:首先,任意一个隐藏序列I={i1,i2,...,iT}出现的概率是:P(I|λ)=πi1ai1i2ai2i3...aiT1iT

    对于固定的状态序列I={i1,i2,...,iT},我们要求的观察序列O={o1,o2,...oT}出现的概率是:P(O|I,λ)=bi1(o1)bi2(o2)...biT(oT)

    则OI联合出现的概率是:P(O,I|λ)=P(I|λ)P(O|I,λ)=πi1bi1(o1)ai1i2bi2(o2)...aiT1iTbiT(oT)

    然后求边缘概率分布,即可得到观测序列O在模型λ下出现的条件概率P(O|λ)P(O|λ)=IP(O,I|λ)=i1,i2,...iTπi1bi1(o1)ai1i2bi2(o2)...aiT1iTbiT(oT)

    虽然上述方法有效,但是如果我们的隐藏状态数N非常多的那就麻烦了,此时我们预测状态有NT种组合,算法的时间复杂度是O(TNT)阶的。因此对于一些隐藏状态数极少的模型,我们可以用暴力求解法来得到观测序列出现的概率,但是如果隐藏状态多,则上述算法太耗时,我们需要寻找其他简洁的算法。

    前向后向算法就是来帮助我们在较低的时间复杂度情况下求解这个问题的。

2. 用前向算法求HMM观测序列的概率

    前向后向算法是前向算法和后向算法的统称,这两个算法都可以用来求HMM观测序列的概率。我们先来看看前向算法是如何求解这个问题的。

    前向算法本质上属于动态规划的算法,也就是我们要通过找到局部状态递推的公式,这样一步步的从子问题的最优解拓展到整个问题的最优解。

    在前向算法中,通过定义“前向概率”来定义动态规划的这个局部状态。什么是前向概率呢, 其实定义很简单:定义时刻t时隐藏状态为qi, 观测状态的序列为o1,o2,...ot的概率为前向概率。记为:αt(i)=P(o1,o2,...ot,it=qi|λ)

    既然是动态规划,我们就要递推了,现在我们假设我们已经找到了在时刻t时各个隐藏状态的前向概率,现在我们需要递推出时刻t+1时各个隐藏状态的前向概率。

    从下图可以看出,我们可以基于时刻t时各个隐藏状态的前向概率,再乘以对应的状态转移概率,即αt(j)aji就是在时刻t观测到o1,o2,...ot,并且时刻t隐藏状态qj, 时刻t+1隐藏状态qi的概率。如果将想下面所有的线对应的概率求和,即Nj=1αt(j)aji就是在时刻t观测到o1,o2,...ot,并且时刻t+1隐藏状态qi的概率。继续一步,由于观测状态ot+1只依赖于t+1时刻隐藏状态qi, 这样[Nj=1αt(j)aji]bi(ot+1)就是在在时刻t+1观测到o1,o2,...otot+1,并且时刻t+1隐藏状态qi的概率。而这个概率,恰恰就是时刻t+1对应的隐藏状态i的前向概率,这样我们得到了前向概率的递推关系式如下:αt+1(i)=[Nj=1αt(j)aji]bi(ot+1)

    我们的动态规划从时刻1开始,到时刻T结束,由于αT(i)表示在时刻T观测序列为o1,o2,...oT,并且时刻T隐藏状态qi的概率,我们只要将所有隐藏状态对应的概率相加,即Ni=1αT(i)就得到了在时刻T观测序列为o1,o2,...oT的概率。

    下面总结下前向算法。

    输入:HMM模型λ=(A,B,Π),观测序列O=(o1,o2,...oT)

    输出:观测序列概率P(O|λ)

    1) 计算时刻1的各个隐藏状态前向概率:α1(i)=πibi(o1),i=1,2,...N

    2) 递推时刻2,3,...T时刻的前向概率:αt+1(i)=[Nj=1αt(j)aji]bi(ot+1),i=1,2,...N

    3) 计算最终结果:P(O|λ)=Ni=1αT(i)

    从递推公式可以看出,我们的算法时间复杂度是O(TN2),比暴力解法的时间复杂度O(TNT)少了几个数量级。

3. HMM前向算法求解实例

    这里我们用隐马尔科夫模型HMM(一)HMM模型中盒子与球的例子来显示前向概率的计算。

    我们的观察集合是:V={}M=2

    我们的状态集合是:Q={123}N=3

    而观察序列和状态序列的长度为3.

    初始状态分布为:Π=(0.2,0.4,0.4)T

    状态转移概率分布矩阵为:

A=(0.50.20.30.30.50.20.20.30.5)

     观测状态概率矩阵为:

B=(0.50.50.40.60.70.3)

    球的颜色的观测序列:O={}

    按照我们上一节的前向算法。首先计算时刻1三个状态的前向概率:

    时刻1是红色球,隐藏状态是盒子1的概率为:α1(1)=π1b1(o1)=0.2×0.5=0.1

    隐藏状态是盒子2的概率为:α1(2)=π2b2(o1)=0.4×0.4=0.16

    隐藏状态是盒子3的概率为:α1(3)=π3b3(o1)=0.4×0.7=0.28

    现在我们可以开始递推了,首先递推时刻2三个状态的前向概率:

    时刻2是白色球,隐藏状态是盒子1的概率为:α2(1)=[3i=1α1(i)ai1]b1(o2)=[0.10.5+0.160.3+0.280.2]×0.5=0.077

    隐藏状态是盒子2的概率为:α2(2)=[3i=1α1(i)ai2]b2(o2)=[0.10.2+0.160.5+0.280.3]×0.6=0.1104

    隐藏状态是盒子3的概率为:α2(3)=[3i=1α1(i)ai3]b3(o2)=[0.10.3+0.160.2+0.280.5]×0.3=0.0606

    继续递推,现在我们递推时刻3三个状态的前向概率:

    时刻3是红色球,隐藏状态是盒子1的概率为:α3(1)=[3i=1α2(i)ai1]b1(o3)=[0.0770.5+0.11040.3+0.06060.2]×0.5=0.04187

    隐藏状态是盒子2的概率为:α3(2)=[3i=1α2(i)ai2]b2(o3)=[0.0770.2+0.11040.5+0.06060.3]×0.4=0.03551

    隐藏状态是盒子3的概率为:α3(3)=[3i=1α3(i)ai3]b3(o3)=[0.0770.3+0.11040.2+0.06060.5]×0.7=0.05284

    最终我们求出观测序列:O={}的概率为:P(O|λ)=3i=1α3(i)=0.13022

4. 用后向算法求HMM观测序列的概率

    熟悉了用前向算法求HMM观测序列的概率,现在我们再来看看怎么用后向算法求HMM观测序列的概率。

    后向算法和前向算法非常类似,都是用的动态规划,唯一的区别是选择的局部状态不同,后向算法用的是“后向概率”,那么后向概率是如何定义的呢?

    定义时刻t时隐藏状态为qi, 从时刻t+1到最后时刻T的观测状态的序列为ot+1,ot+2,...oT的概率为后向概率。记为:βt(i)=P(ot+1,ot+2,...oT|it=qi,λ)

    后向概率的动态规划递推公式和前向概率是相反的。现在我们假设我们已经找到了在时刻t+1时各个隐藏状态的后向概率βt+1(j),现在我们需要递推出时刻t时各个隐藏状态的后向概率。如下图,我们可以计算出观测状态的序列为ot+2,ot+3,...oT, t时隐藏状态为qi, 时刻t+1隐藏状态为qj的概率为aijβt+1(j), 接着可以得到观测状态的序列为ot+1,ot+2,...oT, t时隐藏状态为qi, 时刻t+1隐藏状态为qj的概率为aijbj(ot+1)βt+1(j), 则把下面所有线对应的概率加起来,我们可以得到观测状态的序列为ot+1,ot+2,...oT, t时隐藏状态为qi的概率为Nj=1aijbj(ot+1)βt+1(j),这个概率即为时刻t的后向概率。

    这样我们得到了后向概率的递推关系式如下:βt(i)=Nj=1aijbj(ot+1)βt+1(j)

    现在我们总结下后向算法的流程,注意下和前向算法的相同点和不同点:

    输入:HMM模型λ=(A,B,Π),观测序列O=(o1,o2,...oT)

    输出:观测序列概率P(O|λ)

    1) 初始化时刻T的各个隐藏状态后向概率:βT(i)=1,i=1,2,...N

    2) 递推时刻T1,T2,...1时刻的后向概率:βt(i)=Nj=1aijbj(ot+1)βt+1(j),i=1,2,...N

    3) 计算最终结果:P(O|λ)=Ni=1πibi(o1)β1(i)

    此时我们的算法时间复杂度仍然是O(TN2)

5. HMM常用概率的计算

    利用前向概率和后向概率,我们可以计算出HMM中单个状态和两个状态的概率公式。

    1)给定模型λ和观测序列O,在时刻t处于状态qi的概率记为:γt(i)=P(it=qi|O,λ)=P(it=qi,O|λ)P(O|λ)

    利用前向概率和后向概率的定义可知:P(it=qi,O|λ)=αt(i)βt(i)

    于是我们得到:γt(i)=αt(i)βt(i)Nj=1αt(j)βt(j)

    2)给定模型λ和观测序列O,在时刻t处于状态qi,且时刻t+1处于状态qj的概率记为:ξt(i,j)=P(it=qi,it+1=qj|O,λ)=P(it=qi,it+1=qj,O|λ)P(O|λ)

    而P(it=qi,it+1=qj,O|λ)可以由前向后向概率来表示为:P(it=qi,it+1=qj,O|λ)=αt(i)aijbj(ot+1)βt+1(j)

    从而最终我们得到ξt(i,j)的表达式如下:ξt(i,j)=αt(i)aijbj(ot+1)βt+1(j)Nr=1Ns=1αt(r)arsbs(ot+1)βt+1(s)

     3) 将γt(i)ξt(i,j)在各个时刻t求和,可以得到:

    在观测序列O下状态i出现的期望值Tt=1γt(i)

    在观测序列O下由状态i转移的期望值T1t=1γt(i)

    在观测序列O下由状态i转移到状态j的期望值T1t=1ξt(i,j)

    上面这些常用的概率值在求解HMM问题二,即求解HMM模型参数的时候需要用到。我们在这个系列的第三篇来讨论求解HMM参数的问题和解法。


本文转自刘建平Pinard博客园博客,原文链接:http://www.cnblogs.com/pinard/p/6955871.html,如需转载请自行联系原作者

相关文章
|
15天前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
60 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
1月前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
|
1月前
|
存储 自然语言处理 算法
【算法精讲系列】MGTE系列模型,RAG实施中的重要模型
检索增强生成(RAG)结合检索与生成技术,利用外部知识库提升大模型的回答准确性与丰富性。RAG的关键组件包括文本表示模型和排序模型,前者计算文本向量表示,后者进行精细排序。阿里巴巴通义实验室推出的GTE-Multilingual系列模型,具备高性能、长文档支持、多语言处理及弹性向量表示等特性,显著提升了RAG系统的检索与排序效果。该系列模型已在多个数据集上展示出优越性能,并支持多语言和长文本处理,适用于各种复杂应用场景。
|
1月前
|
自然语言处理 监控 算法
【算法精讲系列】通义模型Prompt调优的实用技巧与经验分享
本文详细阐述了Prompt的设计要素,包括引导语、上下文信息等,还介绍了多种Prompt编写策略,如复杂规则拆分、关键信息冗余、使用分隔符等,旨在提高模型输出的质量和准确性。通过不断尝试、调整和优化,可逐步实现更优的Prompt设计。
|
1月前
|
算法
基于SIR模型的疫情发展趋势预测算法matlab仿真
该程序基于SIR模型预测疫情发展趋势,通过MATLAB 2022a版实现病例增长拟合分析,比较疫情防控力度。使用SIR微分方程模型拟合疫情发展过程,优化参数并求解微分方程组以预测易感者(S)、感染者(I)和移除者(R)的数量变化。![]该模型将总人群分为S、I、R三部分,通过解析或数值求解微分方程组预测疫情趋势。
|
1月前
|
算法 数据可视化 数据安全/隐私保护
基于LK光流提取算法的图像序列晃动程度计算matlab仿真
该算法基于Lucas-Kanade光流方法,用于计算图像序列的晃动程度。通过计算相邻帧间的光流场并定义晃动程度指标(如RMS),可量化图像晃动。此版本适用于Matlab 2022a,提供详细中文注释与操作视频。完整代码无水印。
|
1月前
|
机器学习/深度学习 数据采集 存储
一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
蒙特卡洛方法起源于1945年科学家斯坦尼斯劳·乌拉姆对纸牌游戏中概率问题的思考,与约翰·冯·诺依曼共同奠定了该方法的理论基础。该方法通过模拟大量随机场景来近似复杂问题的解,因命名灵感源自蒙特卡洛赌场。如今,蒙特卡洛方法广泛应用于机器学习领域,尤其在超参数调优、贝叶斯滤波等方面表现出色。通过随机采样超参数空间,蒙特卡洛方法能够高效地找到优质组合,适用于处理高维度、非线性问题。本文通过实例展示了蒙特卡洛方法在估算圆周率π和优化机器学习模型中的应用,并对比了其与网格搜索方法的性能。
165 1
|
2月前
|
机器学习/深度学习 自然语言处理 负载均衡
揭秘混合专家(MoE)模型的神秘面纱:算法、系统和应用三大视角全面解析,带你领略深度学习领域的前沿技术!
【8月更文挑战第19天】在深度学习领域,混合专家(Mixture of Experts, MoE)模型通过整合多个小型专家网络的输出以实现高性能。从算法视角,MoE利用门控网络分配输入至专家网络,并通过组合机制集成输出。系统视角下,MoE需考虑并行化、通信开销及负载均衡等优化策略。在应用层面,MoE已成功应用于Google的BERT模型、Facebook的推荐系统及Microsoft的语音识别系统等多个场景。这是一种强有力的工具,能够解决复杂问题并提升效率。
57 2
|
3天前
|
传感器 算法 C语言
基于无线传感器网络的节点分簇算法matlab仿真
该程序对传感器网络进行分簇,考虑节点能量状态、拓扑位置及孤立节点等因素。相较于LEACH算法,本程序评估网络持续时间、节点死亡趋势及能量消耗。使用MATLAB 2022a版本运行,展示了节点能量管理优化及网络生命周期延长的效果。通过簇头管理和数据融合,实现了能量高效和网络可扩展性。
|
1月前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。
下一篇
无影云桌面