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 时刻所有指向 j 状态的路径)

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

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

我们计算的这个概率等于相应的观察概率 ( 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.5 0.2 0.3
0.3 0.5 0.2
0.2 0.3 0.5

混淆矩阵B:

0.5 0.5
0.4 0.6
0.7 0.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

HMM——前向算法与后向算法相关推荐

  1. python做马尔科夫模型预测法_隐马尔可夫模型的前向算法和后向算法理解与实现(Python)...

    前言 隐马尔可夫模型(HMM)是可用于标注问题的统计学习模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型. 马尔可夫模型理论与分析 参考<统计学习方法>这本书,书上已经讲得 ...

  2. NLP系列学习:前向算法和后向算法

    在上一篇文章里,我们简单的概述了隐马尔科夫模型的简单定义 在<CRF-tutorial>这一篇文章里,我们可以看到HMM经过发展之后是CRF产生的条件,因此我们需要学好隐马尔科夫模型. 在 ...

  3. HMM前向算法,维比特算法,后向算法,前向后向算法代码

    typedef struct { int N; /* 隐藏状态数目;Q={1,2,-,N} */ int M; /* 观察符号数目; V={1,2,-,M}*/ double **A; /* 状态转移 ...

  4. 机器学习算法 10 —— HMM模型(马尔科夫链、前向后向算法、维特比算法解码、hmmlearn)

    文章目录 系列文章 隐马尔科夫模型 HMM 1 马尔科夫链 1.1 简介 1.2 经典举例 2 HMM简介 2.1 简单案例 2.2 案例进阶 问题二解决 问题一解决 问题三解决 3 HMM模型基础 ...

  5. HMM学习一:前向和后向算法

    一, 马尔科夫相关概念 马尔可夫过程 (Markov Process): 它因俄罗斯数学家安德烈·马尔可夫而得名,代表数学中具有马尔可夫性质的离散随机过程.该过程中,每个状态的转移只依赖于之前的 n ...

  6. 隐马尔科夫模型(前向后向算法、鲍姆-韦尔奇算法、维特比算法)

    隐马尔科夫模型(前向后向算法.鲍姆-韦尔奇算法.维特比算法) 概率图模型是一类用图来表达变量相关关系的概率模型.它以图为表示工具,最常见的是用一个结点表示一个或一组随机变量,结点之间的变表是变量间的概 ...

  7. 机器学习算法总结(七)——隐马尔科夫模型(前向后向算法、鲍姆-韦尔奇算法、维特比算法)...

    概率图模型是一类用图来表达变量相关关系的概率模型.它以图为表示工具,最常见的是用一个结点表示一个或一组随机变量,结点之间的变表是变量间的概率相关关系.根据边的性质不同,可以将概率图模型分为两类:一类是 ...

  8. 【机器学习】【隐马尔可夫模型-3】后向算法:算法详解+示例讲解+Python实现

    0.前排提示 csdn有些数学公式编辑不出来,所以本博用容易书写的表达式来表示专业数学公式,如: (1)  在本博客中用α<T>(i)来表示 (2)在本博客中用[i=1, N]∑来表示 注 ...

  9. 隐马尔科夫模型(HMM)解释 和 前向与后向算法[转] 讲解通俗易懂 赞

    HMM前向算法讲明白第一功 https://blog.csdn.net/xueyingxue001/article/details/52396494?simpread_mode=read HMM后向算 ...

最新文章

  1. oracle学习 sql基本语法(三),Oracle数据库学习三
  2. kali用Squid简单配置搭建http代理服务器
  3. 语言ppt课件猜拳_人教版初中数学七年级下册阅读与思考 一次方程组的古今表示及解法公开课优质课课件教案视频...
  4. 其实跑步花不了多少时间
  5. C#和java的语法区别
  6. 报Cannot find /usr/local/tomcat/bin/setclasspath.sh错误
  7. 如何做好招生讲座-----转载 (四)
  8. 最近公司准备启动一个风险系统【Springboot + urule 】
  9. wps PPT 中提取视频
  10. uniapp 实现识别图片二维码
  11. macpro如何清理磁盘空间_在MacBook上,释放磁盘空间的7种方法
  12. 大数据教学竞赛科研平台设计思路
  13. java工程师怎么找兼职,快来看鸭~
  14. 移动磁盘显示文件系统损坏的资料寻回方案
  15. python监控端口_python监控设备端口示例
  16. 科技交流英语(2022秋)
  17. 遗传算法的c++语言程,遗传算法 C++的程序
  18. C语言 指向函数的指针
  19. android 语音发短信,谷歌Android增加语音操作功能 可语音发短信
  20. php丢失msvcr110.dll,Win7电脑丢失Msvcr110.dll的解决方法

热门文章

  1. 机器学习之决策树的原理及sklearn实现
  2. Master of GCD(差分数组||线段树)
  3. 灯泡四个闪烁c语言程序设计教程课后答案,c语言编程题及答案4.doc
  4. 该文章为递归寻找目录下目标文件(待完善,但是能用)
  5. PAT_B_1029_Java(20分)
  6. linux中 tar 报参数列表过长,四种解决”Argument list too long”参数列表过长的办法...
  7. 深度学习(10)TensorFlow基础操作六: 数学运算
  8. android 数据库实例,android – 数据库全局实例
  9. Java学习笔记_多态/内部类
  10. javascript调用dll_Blazor条码识别:Web中运行C#和JavaScript