本文主要讨论隐马尔科夫模型的三大要素,三大假设和三大问题。

1、引入

  隐马尔可夫模型是一个关于时序的概率模型,它描述了一个由隐藏的马尔可夫链生成状态序列,再由状态序列生成观测序列的过程。其中,状态之间的转换以及观测序列和状态序列之间都存在一定的概率关系。隐马尔可夫模型主要用来对上述过程进行建模。为了方便后面的讨论,我们先定义一些符号:

  设共有N个隐藏状态,状态集合可以表示为:

  设共有M个观测状态,观测集合为:

  注:隐藏状态的数目和观测状态的数目不一定相同。

2、模型概述

  隐马尔可夫模型主要有三大要素,分别是:初始状态向量,状态转移概率矩阵A和观测概率矩阵B。此三大要素决定了一个模型。模型可表示为:

  1)初始状态向量 。模型最开始的时候处于哪状态?这个就靠初始状态向量,它决定了模型在最开始时每个状态的概率。若有N个状态,则初试状态向量的长度为N。

  其中:表示状态i作为初始状态的概率,所有的概率之和为1.

  2)状态转移概率矩阵A。此矩阵主要描述了不同状态之间的转移概率。由于共有N个状态,则状态转移概率矩阵的大小为N*N。  

  其中:表示状态i直接转移到状态j的概率。并且,状态转移概率矩阵的每一行的概率之和为1.

  3)观测概率矩阵B。表示由状态生成观测的概率。其符号表示为:

  其中:表示由状态j生成观测k的概率。同样,矩阵的每一行的概率之和为1.

注:上面三大要素在模型的训练过程中一直保持不变。

除了上面的三大要素之外,隐马尔可夫模型还有三大假设。

  1)齐次马尔可夫假设。又叫一阶马尔可夫假设,即任意时刻的状态只依赖前一时刻的状态,与其他时刻无关。符号表示为:

  推广:n阶马儿可夫模型:任意时刻的状态只依赖前面n个时刻的状态,与其他时刻无关。

  2)观测独立性假设。任意时刻的观测只依赖于该时刻的状态,与其他状态无关。

  3)参数不变性假设。上面介绍的三大要素不随时间的变化而改变,即在整个训练过程中一直保持不变。

至此,我们介绍了三大要素和三大假设,现在我们要解决三大问题:概率计算问题,预测问题和学习问题。下面分别对其进行详细介绍。

3、概率计算问题

问题描述:此问题主要是在已知模型参数的条件下,求给定观测序列出现的概率。设状态序列为:,其对应的观测序列为:

1)暴力计算法 --> 时间复杂度:O(TNT)

  首先我们使用最原始的方法来分析一下。对于一个确定状态序列的概率为:

  然后计算在状态序列确定的情况下,计算观测序列的概率:

  现在我们将上面两个公式综合起来,即计算状态序列I和观测序列O同时出现的概率为:

  最后对所有可能的状态序列I计算与观测序列O的概率:

  由于状态序列I的长度为T,每个状态有N种可能,所以状态序列I共有NT种可能,然后每种可能计算与观测序列O的概率,所以时间复杂度为:O(TNT)。对于此方法的时间复杂度太高,实际上不可行。

2)前向算法 --> 时间复杂度O(TN2)

  首先,我们设在时刻t的状态为qi,且观测序列为o1,o2,…,ot的概率为

  根据齐次马尔可夫假设和观测独立性假设,我们知道每个观测只与它当前时刻的状态有关,而每一个状态只与它前一时刻的状态有关。于是t+1时刻的前向概率为:

  在t+1时刻的观测概率只与t+1时刻的状态i有关,即首先计算在t+1时刻状态i生成观测ot+1的概率,然后遍历上一时刻t中各个状态的前向概率,再乘以上一时刻的状态j转换成状态i的概率。于是就得到了前向概率的递推公式。

图3.1 前向概率递推示意图

前向算法过程如下:

A)初始化

B)从前向后,逐步递推,对t=1,2,…,T-1

C)对T时刻的所有前向概率求和。

  前向算法的时间从t=1~T进行遍历;然后在时刻t,首先需要对该时刻每个可能的状态(共N个状态)进行遍历;对每一个可能的状态,我们需要计算它与前一时刻的所有状态之间的转移概率。所以算法的最终时间复杂度为O(TN2)。

3)后向算法 --> 时间复杂度O(TN2)

  后向算法从时刻T开始向前推进,对每一时刻t,计算当前时刻t与下一时刻t+1之间的递推关系,设时刻t+1到时刻T的观测序列为ot+1,ot+2,…,oT,于是在t时刻状态i的后向概率为:

  现在,我们分析一下从t+1时刻到t时刻的后向概率的变化。由于t时刻的后向概率只与t+1时刻的状态有关。于是,只需要考虑当前时刻t的状态i转移到t+1时刻的N个状态j的概率,以及状态j生成观测ot+1的概率以及j的后向概率。

递推公式如下:

关于后向概率的递推过程如图3.2所示。(与神经网络有点类似)

图3.2 后向概率递推示意图

后向概率算法过程:

A)初始化,将

B)从后向前,对时刻t=T-1,T-2,…,1.使用递推公式:

C)最后到达初始化状态,

4、预测问题

  问题描述:已知模型参数和观测序列,求观测序列对应的最可能的状态序列。

  此问题主要两种方法,总的来说就是计算概率最大的状态序列。

1)近似算法 --> 贪心的思想 --> 局部最优

  此算法思想是在观测O的前提下每个时刻t选择该时刻概率最大的状态。在时刻为t时,状态为i的概率为:

  然后选择时刻t中所有概率最大的状态:

  最后将每个时刻概率最大的状态组合得到状态序列:I’=(i1’,i2’,…,in’)。但该序列只能保证状态在每一时刻的最优,而不能保证整体序列的最优。

2)维特比算法 –> 动态规划

  为了使状态序列达到全局最优,我们使用动态规划的思想。首先将每个状态序列看作是一条路径,每个状态看作是路径上的一个节点。

  设时刻t=1~t’的最优状态序列为i1,i2,…,it’,则在整体最优状态序列中一定包含上述部分最优序列,否则,设整体最优状态序列在时间1~t’的最优序列为i1,i2,…,ik,则序列i1,i2,…,ik比序列i1,i2,…,it’更优与条件i1,i2,…,it’是最优的矛盾,因而,我们可以通过逐个时刻求解当前的最优状态序列,直到时刻T。

  先定义在时刻t状态为i的所有单个路径状态i1,i2,…,it中概率最大值为:

  则在时刻t+1时:

  通过上述递推公式可以计算出状态序列出现的概率,但是并没有得到相应的状态序列,于是我们需要使用下式来保存每步中的状态序列:

维特比算法过程如下:

1)初始化,在t=1时,有:

2)利用递推公式,t=2,3,…,T,

3)得到概率最大的状态序列中的最后一个状态为:

4)依次回溯,得到最优状态路径:

得到最优路径为:i1’, i2’, …, iT’。

5、学习问题

  问题描述:已知观测序列,估计模型参数。

  对于此问题主要有两种情况,首先是给出了观测序列以及对应的状态序列的监督学习方法,其次是只给出观测序列,没有给出状态序列的非监督学习方法。现在分别对其进行讨论:

1)监督学习法 --> 给出观测序列+对应的状态序列 --> 极大似然估计

  假设给出的训练集为:{(o1,i2),(o2,i2), …, (oT,iT)},此时,我们可以直接使用极大似然估计法来估计模型参数。

  A)状态转移概率估计。设由状态i直接转移到状态j的次数为Aij,则由状态i转移到状态j的概率估计为:

  B)观测概率估计。设样本中状态为j时观测为k的次数是Bjk,则状态j生成观测k的概率估计bjk’为:

  C)初试状态概率。样本状态序列中第一个状态i对应的初始概率为1,其余的为0。

2)非监督学习法 --> 只有观测序列,无相应的状态序列 --> 前向后向算法.

  在前面,我们已经介绍了前向算法和后向算法。根据前向概率和后向概率,可以得出观测序列为O且在t时刻的状态为qi的概率为:

  将时刻t的前向和后向综合进行考虑,就能得出上述公式,分析如图5.1所示。

图5.1 时刻t的状态图

  观测O在t时刻的状态为qi的概率为:

  所以,在观测为O的状态下qi出现的期望值为:

  在t时刻状态为qi且在t+1时刻状态为qj的概率为:

  其中,观测为O且t时刻的状态为qi以及t+1时刻的状态为qj的概率为:

  由于在计算at(i)时已经考虑了bi(ot)的概率,所以在上式中只有bj(ot+1)。

图5.2 时刻t到t+1的状态

  此时的观测O的概率也可以写为:

  那么由状态i转移到状态j的期望值为:

现在,我们可以估计模型参数:

A)初始状态概率向量:,其中

B)状态转移概率矩阵:,其中:

C)观测概率矩阵:,其中

  对于计算状态j生成观测vk的概率,首先需要找到每个时刻的状态j,然后找出状态j生成观测vk的数目。

6、总结

  隐马尔可夫模型主要由三大要素组成,然后利用三大假设解决三大问题。在三大问题中,首先是概率计算问题,这主要利用前向算法或后向算法;我们将前向算法和后向算法结合就可以解决只有观测序列求模型参数的问题,即学习问题;最后关于状态序列预测问题主要使用维特比算法,此算法使用动态规划的思想,使得最终计算出来的状态序列能达到整体最优。

  另外,本文后面的前向后向算法只给出了一些计算公式,并未深入的进行分析,其实这些公式可以使用EM算法来推导。

参考文献:

[1] 李航,统计学习方法

[2] peghoty, http://blog.csdn.net/itplus/article/details/15335811

[3] LiXiang, http://www.leexiang.com/hidden-markov-model

[4] jihite, http://www.cnblogs.com/kaituorensheng/archive/2012/12/06/2806263.html

隐马尔可夫模型(HMM)原理的更多相关文章

  1. 隐马尔科夫模型(HMM)原理详解

    隐马尔可夫模型(Hidden Markov Model,HMM)是可用于标注问题的统计学习模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型.HMM在语音识别.自然语言处理.生物信息.模 ...

  2. 基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法

    文章目录 1. 1. 摘要 2. 2. Map-Matching(MM)问题 3. 3. 隐马尔科夫模型(HMM) 3.1. 3.1. HMM简述 3.2. 3.2. 基于HMM的Map-Matchi ...

  3. 隐马尔科夫模型HMM学习最佳范例

    谷歌路过这个专门介绍HMM及其相关算法的主页:http://rrurl.cn/vAgKhh 里面图文并茂动感十足,写得通俗易懂,可以说是介绍HMM很好的范例了.一个名为52nlp的博主(google ...

  4. 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数

    隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...

  5. 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列

    隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态 ...

  6. 用hmmlearn学习隐马尔科夫模型HMM

    在之前的HMM系列中,我们对隐马尔科夫模型HMM的原理以及三个问题的求解方法做了总结.本文我们就从实践的角度用Python的hmmlearn库来学习HMM的使用.关于hmmlearn的更多资料在官方文 ...

  7. HMM:隐马尔可夫模型HMM

    http://blog.csdn.net/pipisorry/article/details/50722178 隐马尔可夫模型 隐马尔可夫模型(Hidden Markov Model,HMM)是统计模 ...

  8. 隐马尔可夫模型HMM与维特比Veterbi算法(一)

    隐马尔可夫模型HMM与维特比Veterbi算法(一) 主要内容: 1.一个简单的例子 2.生成模式(Generating Patterns) 3.隐藏模式(Hidden Patterns) 4.隐马尔 ...

  9. 隐马尔可夫模型HMM

    隐马尔可夫模型HMM的探究 1 HMM基本概念1.1 定义1.2 观测序列生成过程1.3 HMM的三个问题2 概率计算算法2.1 直接计算算法2.2 前向算法forward algorithm2.3 ...

  10. viterbi维特比算法和隐马尔可夫模型(HMM)

    隐马尔可夫模型(HMM) 原文地址:http://www.cnblogs.com/jacklu/p/7753471.html 本文结合了王晓刚老师的ENGG 5202 Pattern Recognit ...

随机推荐

  1. hdu_5213_Lucky(莫队算法+容斥定理)

    题目连接:hdu_5213_Lucky 题意:给你n个数,一个K,m个询问,每个询问有l1,r1,l2,r2两个区间,让你选取两个数x,y,x,y的位置为xi,yi,满足l1<=xi<=r ...

  2. hdu_5711_Ingress(TSP+贪心)

    题目连接:hdu5711 这题是 HDU 女生赛最后一题,TSP+贪心,确实不好想,看了wkc巨巨的题解,然后再做的 题解传送门:Ingress #include<cstdio> #inc ...

  3. offsetXXX和scollXXX的一些操作

    <!doctype html><html><head><meta charset="utf-8"><title>offs ...

  4. android 画图之setXfermode .

    setXfermode 设置两张图片相交时的模式 我们知道 在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状. 如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint: 而 ...

  5. 字符串解析运用-将字符串分解为多个整数,求各整数之和(华为oj)

    描述 输入内容是一个字符串,输出结果为一个字符串.要求在输入的字符串中识别出多个整数单元,并且对各个整数单元求和运算,最终输出一个字符串,输出的字符串内容是对各个整数单元求和的结果.两个整数单元之间以 ...

  6. HDU 1883 Phone Cell(计算几何)

    方法:选取一个点A,以点A为圆心做一个半径为r的圆,然后枚举另一个点B,以B为圆心做一个圆,如果这两个圆有交集,那我们在这个交集内选取一个点做半径为r的圆,这个圆就包括了A和B点,找到交集最多的区域并 ...

  7. 扩展方法实现DevExpress控件校验

    DevExpress控件中,如果要控件的值进行校验,需要用到DXValidationProvider控件和DXErrorProvider控件,按照正常思路,无论使用哪个控件要实现校验效果时都需要对每个 ...

  8. Python3基础 函数 关键字参数 的示例

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  9. javascript学习01

    1/js 中所有的数字都是浮点型,所以5/2=2.5    6.5%2.1=0.2 2/delete用于删除对象的属性或者是数组元素: var o={x=1,y=2}:delete o.x;  x i ...

  10. HDU 3339 最短路+01背包

    In Action Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...