HMM——前向算法与后向算法

1. 前言

前向算法和后向算法主要还是针对HMM三大问题之一的评估问题的计算,即给定模型参数,计算观察序列的概率。文章不介绍过多公式,主要看两个例子

复习一下HMM的三大要素(以海藻(可观测)和天气(隐状态)为例):

①初始概率向量:当前时刻天气的可能性,属于先验概率

②状态转移矩阵:从当前天气转移到下一个天气的可能性,比如P(雨天|晴天)即为晴天转移到雨天的概率

③混淆矩阵:当前天气为某种天气的时候,海藻状态为某种状态的可能性,比如P(干燥|晴天)即为晴天时候海藻干燥的概率

问题:给定HMM模型参数以及海藻的三天状态:干燥、湿润、湿透。

目的:求解海藻出现这三种状态的概率。

2. 穷举搜索直接计算

2.1 理论介绍

已知:给定HMM模型参数λ=(π,A,B),和观察序列

求解:观测序列O出现的概率P(O|I,λ)

方法:列举所有可能的状态,分别求解各个状态序列与观测序列的联合概率P(O,I | λ),最后求和就得到了P(O|λ)

具体过程:

①状态序列出现的概率是

②对于其中一种状态序列,观测序列的概率是

依据贝叶斯公式可以计算

③求和

 

2.2 实例推导

给定隐马尔可夫模型,也就是在模型参数(π,A,B)已知的情况下,我们想找到观察序列的概率。

最直接的方法是列举出每种可能的转移,如下图所示(借用英文文献中的那个例子):

 

  

图中展示了三天的海藻状态,第一列对应第一天海藻为dry时候三种可能的天气隐状态,第二列对应第二天海藻为damp时候三种可能的天气隐状态,第三列对应第三天海藻为soggy时候三种可能的天气隐状态;每个隐状态都有一个概率指向当前可能的海藻状态,由混淆矩阵给出;从第一天到第二天和第二天到第三天的天气隐状态之间都有转移概率,由转移概率矩阵给出。

计算观察序列概率的方法是找到所有的可能路径,因为每种海藻观察情况都有三种可能天气,所以共有33=27条路径,即27种不同的天气序列,然后将所有可能的观察序列的概率加和起来:

不适用于大的模型和较长的序列。可以利用概率的时间不变性减少问题的复杂性。

 

3.前向算法

3.1 理论推导

前向概率:给定隐马尔科夫模型λ,定义到时刻 t 部分观测序列为,状态的概率为前向概率:

说白了就是计算当给出模型参数的时候,计算一个观测序列和第 t 时刻为状态的联合概率,这是一个递推的过程,可以一层一层的计算,而不是像列举法,直接一条路径走到头,然后再计算下一条路径;最后能够通过加和递推得到P(O|λ)

已知:因马尔科夫模型λ和观测序列O

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

方法:前向概率递推得到P(O,I | λ),加和得到P(O | λ)

具体过程:

① 初值,计算第一个时间点处于各隐状态的概率

等式右边表示最初第i个状态出现的概率,乘以在这个状态下,某个观测状态的概率。不懂没关系,待会看天气的实例解释。

② 递推 

中括号意思就是当前层的所有N个隐状态与下一层的第i个状态的连接,里面的 α 是到时刻t部分观测序列为,且在 t 时刻处于状态 j 的概率(前向计算给出,第一层用的是过程①),a是 t 时刻第 j 个状态到 t+1 时刻第 i 个状态的转移情况(转移矩阵给出);中括号外面乘以的b是当前状态下,对应观测情况发生的概率,比如当前是晴天,那么晴天对应海藻湿润的概率是什么呢?就是b,由混淆矩阵给出。

③终止

其实就是求解在时刻t,所有状态的概率求和。

前向算法的高效在于:利用路径结构将前向概率递推到全局。在t=1时刻,计算每个状态与观测情况的联合概率;t=2...T的时候,计算状态与观测情况的联合概率时都用到了前一个时刻刚计算出来的联合概率。

穷举法时间复杂度:TNT

前向算法的时间复杂度:N2T其中T是指观察序列的长度,N是指隐藏状态数目。

【注】每次前向得到的均为隐状态和观测情况的联合概率,因而最后一步需要来一次加法。

3.2 实例分解

将上述三步推广到三天海藻观察和天气状态中:

(1)计算t=1时的局部概率

局部概率的计算公式:

αt ( j )= Pr( t=1时刻的海藻观察 隐藏状态 j ) x Pr( t=1 时刻每个隐状态可能发生的初始概率

 

所以初始时刻状态 j 的局部概率依赖于此状态的初始概率及相应时刻我们所见的观察概率。

(2)  计算 t >1 时的局部概率

αt ( j )= Pr( t 时刻海藻的观察情况 | 隐藏状态 j ) x Pr( t 时刻状态到 t+1时刻状态的转移概率)

假设乘号左边项Pr( 观察情况 | 隐藏状态 )已经有了,需要考虑右边Pr( t 时刻所有指向 状态的路径)

计算到达某个状态的所有路径的概率。可以计算到达此状态的每条路径的概率并对它们求和。

计算α所需要的路径数目随着观察序列的增加而指数级递增。但是t-1时刻给出了所有到达此状态的前一路径概率。因此,我们可以通过t-1时刻的局部概率定义 时刻的局部概率。即:

我们计算的这个概率等于相应的观察概率 ( t+1时在状态 j 的观察概率)与该时刻到达此状态的概率总和(上一步每个局部概率的计算结果与相应的状态转移概率乘积后再相加)的乘积。假设式子中t=1,拿上图为例,第三列的中间节点代表的就是观察海藻处于某种状态时出现某种天气的概率即b,后面的加和项就是第二列三个节点的概率与对应转移到第三排中间结点概率的乘积的和。

(3)将第(2)步按照下表j(所有状态)加和起来即可

4. 后向算法

后向概率:给定隐马尔可夫模型,定义在时刻t状态为的条件下,从t+1时刻到T的部分观测序列为后向概率

用递推方法求后向概率,但是并非用简单的加法得到P(O|λ)

具体过程(参考李航《统计学习方法》):

输入:隐马尔可夫模型λ,观测序列O

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

①初始化后向概率,最终时刻的所有状态规定

②对于t=T-1,T-2,...1递推计算,时刻 t 状态为条件下时刻t+1之后的观测序列为的后向概率,其实就是第t+1 时刻的N个状态到t 时刻状态的转移概率乘以t+1时刻每个隐状态对应的观察情况为o(t+1)的概率,再乘以状态j之后的观测序列的后向概率,此项能够递推得到

③计算一种加和,但是与前向算法的加和还不一样,它的含义是与步骤②一样的,只不过初始概率 π 代替了转移概率 a 

5. 统一写法

《统计学习方法》中将前向算法和后向算法统一起来归纳了

6. 前向算法实例

6.1 海藻的实例

由马尔可夫模型MM可知:由一个状态转移至另一个状态中,存在着转移概率,并对这种转移概率可以依据其紧接的前一种状态推算出来,与该系统原始状态和此次转移前的马尔可夫过程无关。

隐马尔可夫模型(Hidden Markov models ,HMM)是马尔可夫链的一种,它的状态不能直接观察到,但能通过观测向量序列观察到,每个观测向量都是通过某些概率密度分布表现为各种状态,每一个观测向量是由一个具有相应概率密度分布的状态序列产生的。

假设连续观察三天的水藻湿度为(Dry,Damp,Soggy),求出该观察序列的概率。天气状态有三类(Sunny,Cloudy,Rainy),而且海藻湿度和天气有一定关系。

已知:

 1> 隐藏状态:Sunny,Cloudy,Rainy

       海藻湿度有四类:{Dry,Dryish,Damp,Soggy}

 2> 观察状态序列:{Dry,Damp,Soggy}

 3>  初始状态序列:Sunny(0.63),Cloudy(0.17),Rainy(0.20)

 4>  状态转移矩阵

 

Sunny

Cloudy

Rainy

Sunny

0.5

0.375

0.125

Cloudy

0.25

0.125

0.625

Rainy

0.25

0.375

0.375

 

 

 

Cloudy(昨天)→Sunny(今天)的概率是0.25

Sunny(昨天)→Rainy(今天)的概率是0.125 

5> 混淆矩阵

 

Dry

Dryish

Damp

Soggy

Sunny

0.6

0.2

0.15

0.05

Cloudy

0.25

0.25

0.25

0.25

Rainy

0.05

0.10

0.35

0.50

怎么计算观察序列的概率?

即统计P(observation|Sunny,Sunny, Sunny)+P(observation| Sunny, Sunny, Cloudy)+ P(observation| Sunny,Sunny,Rainy)+ P(observation| Sunny, Cloudy, Sunny) + P(observation| Sunny, Cloudy,Cloudy)+ P(observation| Sunny, Cloudy, Rainy) + …总共33种可能性。

实际由于马尔可夫模型,第二天的状况只取决于第一天,第三天的只取决于第二天,与第一天的天气没关系。

①  先求第一天的P(Day1-Sunny),P(Day1-Cloudy),P(Day1-Rainy),Day1的海藻湿度是Dry

P(Day1-Sunny) =0.63*0.6;

P(Day1-Cloudy)=0.17*0.25;

P(Day1-Rain)=0.20*0.05;

②  再求第二天的P(Day2-Sunny),P(Day2-Cloudy),P(Day2-Rainy), Day2的海藻湿度是Damp

P(Day2-Sunny)=(P(Day1-Sunny)*0.5 + P(Day1-Cloudy)*0.25 +P(Day1-Rainy)*0.25)* 0.15

P(Day2-Cloudy) =(P(Day1-Sunny)*0.375+ P(Day1-Cloudy)*0.125 + P(Day1-Rainy)*0.375) * 0.25

P(Day2-Rainy) =(P(Day1-Sunny)*0.125+P(Day1-Cloudy)*0.625 + P(Day1-Rainy)*0.375)* 0.35

同理继续求第三日的各天气概率,Day3的海藻湿度是soggy。

P(Day3-Suny)=(P(Day2-Sunny)*0.5 + P(Day2-Cloudy)*0.25 +P(Day2-Rainy)*0.25)* 0.05

P(Day3-Cloudy) =(P(Day2-Sunny)*0.375+ P(Day2-Cloudy)*0.125 + P(Day2-Rainy)*0.375) * 0.25

P(Day3-Rainy)=(P(Day2-Sunny)*0.125+ P(Day2-Cloudy)*0.625 + P(Day2-Rainy)*0.375)* 0.50

推出:

P(observationlist) =P(Day3-Sunny)+P(Day3-Cloudy)+P(Day3-Rainy) = 0.030319

6.2 盒中取球的实例

已知HMM模型参数:

转移概率矩阵A:

 

0.50.20.3
0.30.50.2
0.20.30.5

混淆矩阵B:

 

0.50.5
0.40.6
0.70.3

初始概率:

π=(0.2 , 0.4 , 0.4)

求解:三次取球颜色为(红、白、红)的概率P(O|λ)

提示:盒子相当于三种隐状态,两种颜色的球相当于观测情况,观测序列由(红、白、红)给出

(1)计算初值

(2)递推计算

(3)终止条件

7. 后向算法实例

关于后向算法,直接以6.2盒子(隐)和球(观测)的实例为例推导吧:

(1)初始化第三次取球为红球时候,即最终时刻所有状态的概率为1

式中下标为观测情况,括号为隐状态,比如第一个式子意思就是第一个隐状态对应的观测到红球的概率

(2)逆推迭代倒数第二次观察情况为白球的情况

第一个式子表示的是第二次观测,如果状态为1,那么第二、三次观测为(白、红)的联合概率分布,a是第二层隐状态(第一个盒子)转移到第三层隐状态(三个盒子)的转移概率,b表示第三层的三个隐状态观测到红球的概率,β(等式右边)表示已知模型参数和第三层隐状态,求第三次观测到红球的概率,其实第(1)步计算是1

第二个式子表示的是第二次观测,如果状态为2,那么第二、三次观测为(白、红)的联合概率分布,a是第二层隐状态(第二个盒子)转移到第三层隐状态(三个盒子)的转移概率,b表示第三层的三个隐状态观测到红球的概率,β(等式右边)表示已知模型参数和第三层隐状态,求第三次观测到红球的概率,其实第(1)步计算是1

同理推导第一层的情况

(3)计算加和

可以发现前向算法和后向算法的结果相同

【注】前向算法中计算结果舍去了一位,结果应该是0.035512

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HMM——维特比算法(Viterbi algorithm)

1. 前言 维特比算法针对HMM第三个问题,即解码或者预测问题,寻找最可能的隐藏状态序列: 对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列。 也就是说给定了HMM的模型参数和一个观测…

HMM——前向后向算法

1. 前言 解决HMM的第二个问题:学习问题, 已知观测序列,需要估计模型参数,使得在该模型下观测序列 P(观测序列 | 模型参数)最大,用的是极大似然估计方法估计参数。 根据已知观测序列和对应的状态序列,或者说…

Web安全(吴翰清)

安全工程师的核心竞争力不在于他能拥有多少个 0day,掌握多少种安全技术,而是在于他对安全理解的深度,以及由此引申的看待安全问题的角度和高度。 第一篇 我的安全世界观 脚本小子 “Script Kids”。 黑客精神所代表的 Open、Free、Share。…

机器学习两种方法——监督学习和无监督学习(通俗理解)

前言 机器学习分为:监督学习,无监督学习,半监督学习(也可以用hinton所说的强化学习)等。 在这里,主要理解一下监督学习和无监督学习。 监督学习(supervised learning) 从给定的训…

Tensorflow中padding的两种类型SAME和VALID

边界补充问题 原始图片尺寸为7*7,卷积核的大小为3*3,当卷积核沿着图片滑动后只能滑动出一个5*5的图片出来,这就造成了卷积后的图片和卷积前的图片尺寸不一致,这显然不是我们想要的结果,所以为了避免这种情况&#xff…

机器学习两种距离——欧式距离和马氏距离

我们熟悉的欧氏距离虽然很有用,但也有明显的缺点。它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求。例如,在教育研究中,经常遇到对人的分析和判别,个体的…

最小二乘法深入

上次写了一个一次函数yaxb类型的最小二乘法,即可以看做是n维输入列向量对应的一个n维输出列向量,然后对已知结果进行学习,得到拟合公式。这里对m*n的矩阵进行最小二乘法分析。 设模型的输出为和训练集输出,它们之间的平方误差为&…

ubuntu16.04 制作gif

byzanz安装 sudo apt-get install byzanz byzanz-record #录像byzanz-playback #回放 下载完成后打开命令行输入byzanz-record –help 其中我们重点关注几个参数 * -d 动画录制的时间,默认录制10秒 * -e 动画开始延迟 * -x 录制区域的起始X坐标 * -y 录制区域的起始Y坐标 …

典型关联分析CCA(canonical correlation analysis)

先看两个数学概念: 相关系数(参看百度百科) 相关系数是用以反映变量之间相关关系密切程度的统计指标。相关系数是按积差方法计算,同样以两变量与各自平均值的离差为基础,通过两个离差相乘来反映两变量之间相关程度 相…

Kullback–Leibler divergence(相对熵,KL距离,KL散度)

1 前言 注意两个名词的区别: 相对熵:Kullback–Leibler divergence 交叉熵:cross entropy KL距离的几个用途: ① 衡量两个概率分布的差异。 ② 衡量利用概率分布Q 拟合概率分布P 时的能量损耗,也就是说拟合以后丢失…

李宏毅机器学习课程11~~~为何要深?

为何要“深”? pluskid的博客 Deep Learning and Shallow Learning Bengio Y. Learning deep architectures for AI. Foundations and trends in Machine Learning, 2009 Deeper is Better? 模型有更多的参数会有更好的结果,这是毋庸置疑的。 深瘦的模…

没事随便写写——matlab图像与矩阵的转换与存储为txt文件

<span style"font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">刚开课&#xff0c;上了一节计算机图像处理&#xff0c;想了一下把图像转换成矩阵表示&#xff0c;然后存储到txt文档中去。图片用的 lena.jpg</span> …

李宏毅机器学习课程12~~~半监督学习

Semi-supervised Learning The distribution of the unlabeled data tell us something. Usually with some assumptions. Semi-Supervised Generative Model 对比学习见 李宏毅机器学习课程&#xff14;~~~分类&#xff1a;概率生成模型 EM算法思路来最大化似然函数。 Self-tr…

Python程序设计—车万翔

程序设计入门—Python 对象和类型 五种基本对象类型 字符串 &#xff08;string&#xff09;&#xff0c;简记为 str 使用 ’ ’ 或 ” ” 括起来的一系列字符 整数&#xff08;integer&#xff09;&#xff0c;简记为 int 十进制&#xff1a;21&#xff0c;八进制&#xf…

【重大修改】动态时间规整(Dynamic Time Warping)

本文只是简单的介绍DTW算法的目的和实现。具体的DTW可以参考一下文献&#xff1a; 离散序列的一致性度量方法&#xff1a;动态时间规整&#xff08;DTW&#xff09; http://blog.csdn.net/liyuefeilong/article/details/45748399 动态时间归整/规整/弯曲(Dynamic time warpi…

从机器学习谈起

很好的一篇文章&#xff0c;转载自博客园&#xff1a;http://www.cnblogs.com/subconscious/p/4107357.html 在本篇文章中&#xff0c;我将对机器学习做个概要的介绍。本文的目的是能让即便完全不了解机器学习的人也能了解机器学习&#xff0c;并且上手相关的实践。这篇文档也算…

核函数

由于下一篇要学机器学习的另外一种模型——核模型&#xff0c;里面涉及到核函数&#xff0c;所以先找了一下核函数的相关知识。 在知乎上看到了一些比较好的解答&#xff0c;详细参考&#xff1a;http://www.zhihu.com/question/24627666 首先举一个核函数把低维空间映射到高…

关于Matlab编程的思考(待续)

Matlab编程的规范化思考 1.并行化 2.释放内存 3.需要调参的变量太多&#xff0c;可考虑将变量都放到一个结构体里面。 4.find(y),就是要找到y中那些非零项的指引 5.代码运行出现问题的时候&#xff0c;在命令行输入why就可以得到答案 6.输入bench可以给电脑跑分。 7.hom…

拉普拉斯锐化图像

在图像增强中&#xff0c;平滑是为了消除图像中噪声的干扰&#xff0c;或者降低对比度&#xff0c;与之相反&#xff0c;有时为了强调图像的边缘和细节&#xff0c;需要对图像进行锐化&#xff0c;提高对比度。 图的边缘是指在局部不连续的特征。 简要介绍一下原理&#xff1…

运动捕捉数据的描述ASF/AMC

运动捕捉数据有多种格式&#xff1a;ASF/AMC&#xff0c;BVH&#xff0c;C3D等&#xff0c;这三个是比较常用的&#xff0c;一般的matlab实验用的是ASF/AMC&#xff0c;其次就是BVH。 ASF/AMC文件格式是Acclaim Games公司设计开发的&#xff0c;全称是Acclaim Skeleton File/A…