隐马尔科夫模型(HMM)

隐马尔科夫模型(Hidden Markov Model,HMM)是一种概率图模型(PGM),概率图模型的定义及内容参看:概率图模型。

必备的数学知识

    随机过程(Stochastic Process)是一连续状态下随机变量的动态关系的定量描述。回想一下随机变量的数学定义,随机变量是描述一组实验的可能结果,所有的可能结果构成一个基本空间,随机过程可看做在随机变量的基础上附加了一个连续状态,比如时间。严格的数学描述是对于设对每一个 t∈T,X(t,w) 是一个随机变量,称随机变量族 XT={X(t,w),t∈T} 为一随机过程(或随机函数),其中 T∈ℝ 称为指标集,ℝ 是实数集。w∈Ω,Ω为样本空间。用映射来表示XT。
                            X(t,w):T×Ω→ℝ
当 T 取可列集时,通常称 XT 为随机序列。XT (t∈T) 可能取值的全体集合称为状态空间,状态空间中的元素称为状态。
    马尔科夫过程(Markov Process)便是随机过程中的一种,假设已知现在时刻t的状态,则过去时刻(小于t)的状态与将来时刻(大于t)的状态无关,这就是所谓的无后效性或者无记忆性。用数学语言描述是:
若随机过程{Xt,t∈T}对任意 t1<t2<…<tn<t,xi,1≤i≤n 及 A 是 ℝ 的子集,总有
            P{Xt∈A|Xt1=x1,Xt2=x2,⋯,Xtn=xn}=P{Xt∈A|Xtn=xn}
则称此过程为马尔科夫过程。称P(s,x;t,A)=P{Xt∈A|Xs=x},s>t, 为转移概率函数。Xt 的全体取值构成集合S就是状态空间。对于马尔可夫过程 XT={Xt,t∈T},当S={1,2,3,⋯}为可列无限集或有限集时,通常称为马尔科夫链(Markov Chain)。 
    好比一场足球比赛,教练会选择最近状态好的球员上场(位置咱先不考虑),每场比赛在教练的眼里都很清楚,知道你是不是全身心在投入比赛,还是昨晚去夜店厮混,在场上萎得不行。但比赛的结果只取决于球队上下今天是否合作得好,跟以前怎么怎么样都是没有关系的,所以当年意大利小组赛就被淘汰了。当然球员们长期累积的比赛经验也肯定会对比赛有很大的作用。如果要分析比赛胜负以及球员状态就需要用科学的手段来评估,不然更衣室里,教练和谁有矛盾,那恐怕要长期坐板凳了。
    在上面的例子中,胜负是能观察的结果,而当天球员状态在比赛前是不知道的,你只好通过比赛来看哪个球员状态是好还是坏。隐马尔科夫模型就是一种比较合理的能对这种事件进行分析的模型。一个典型的HMM如下图所示:
           ----[x1]---->[x2]---->[x3]----
                |         |        |
                v         v        v
               [y1]      [y2]    [y3]
图中y是能观测的,x是隐含状态,从图中可以看出,某一时刻可观察的状态只与该时刻的隐含状态有关。在上面阐述马尔科夫随机过程中说道,不念过去,不念将来,活在当下。但在HMM中我们还是需要怀念下昨天的(仅仅是昨天),也就是说某一时刻的隐含状态仅仅与前一时刻隐含状态有关,再之前的就一点关系都没。数学语言表示为:
                    P(xt|xt−1,xt−2,⋯,x1)=P(xt|xt−1)
综上,我们已经知道了HMM中需要的两个参数:
    1. 隐状态之间的转移概率:
    P(xt|xt−1,xt−2,⋯,x1,y1,⋯,yt−1)=P(xt|xt−1)
    2. 隐状态和可观测值的测量概率:
    P(yt|xt,xt−1,⋯,x1,y1,⋯,yt−1)=P(yt|xt)
    由此可见,上一时刻(t-1)的隐状态信息与该时刻(t)的可观测信息是依靠这时刻(t)的隐状态联系起来的,那么第一时刻转移概率和测量概率从何而来?自然,是来自初始化,所以还需要一个初始化信息π,当三个参数确定,HMM也就确定了。so,HMM可以表示为:
                            HMM=λ(A, B, π)
A是转移矩阵,B是测量矩阵,π是初始化状态。
    现在思考两个问题,求取一个可观测序列y1,y2,y3的概率P(y1,y2,y3)是多少?根据这个可观测序列,求取最可能的隐状态是什么?由于某一时刻y和x有关,通过讲x加进去,然后积分(求和)消除x,便能求出P(y1,y2,y3),根据这一思路有:
P(y1,y2,y3)=∑∑∑P(y1,y2,y3,x1,x2,x3)           
           =∑∑∑P(y3|y1,y2,x1,x2,x3)×P(y1,y2,x1,x2,x3)
求和符号表示所有状态求和。下面为了表达的简洁性,讲省略求和的上下限。再由上面提到的马尔科夫链无后效性进行简化:
           =∑∑∑P(y3|x3)×P(y1,y2,x1,x2,x3)
           =∑∑∑P(y3|x3)×P(x3|y1,y2,x1,x2)×P(y1,y2,x1,x2)
           =∑∑∑P(y3|x3)×P(x3|x2)×P(y1,y2,x1,x2)         
           =∑∑∑P(y3|x3)×P(x3|x2)×P(y2|x2)×P(x2|x1)×P(y1|x1)×P(x1)
上这种做法确实可以得出我们想要的结果,但是这种做法的计算量过大。你很容易发现,它的复杂度是 O(k^T) ,经过改进,有了复杂度更低的Forward算法。

Forward算法

    定义:αi(t)=P(y1,y2,⋯,yt,qt=i | λ), α(alpha) 和 a 是不同的。我们的新记号 αi(t) 给出了当状态 qt=i 时,它与到时刻 t 为止所有的观测值的联合分布的概率。利用新定义有:
    αi(1)=P(y1,q1=i)=P(y1|q1=i)⋅P(q1)=bi(y1)⋅π(q1)
同理,我们还可以写出αj(2) 所表示的内容: 
    αj(2)=P(y1,y2,q2=j)=∑P(y1,y2,q1=i,q2=j)
    =∑(y2|q2=j)⋅P(q2=j|q1=i)⋅P(y1,q1=i)
    =∑(y2|q2=j)⋅P(q2=j|q1=i)⋅αi(1)
    =P(y2|q2=j)∑P(q2=j|q1=i)⋅αi(1)
    =bj(y2)∑i=1kai,j⋅αi(1)
可以写出αj(T) 的表达式: 
    αj(T)=bj(yT)∑ai,j⋅αi(T−1)
所以:
    P(y1,y2,⋯,yT)=∑j=1kαj(T)
现在问题的复杂度已经降为了 O(K^2*T)。 对于第二个问题,那就是Viterbi算法登场的时候了。

Viterbi算法

经由最可能的状态序列 q0,q1,⋯,qt−1 后进入状态 qt=j 时,前面这些状态序列与到 t 时刻为止所有观测值的联合概率,记为:
vj(t)=maxq0,q1,⋯,qt−1P(q1,q2,⋯,qt−1,y1,y2,⋯,yt,qt=j | λ)
表示“最可能的状态序列”的方法就是在之前所有的状态序列里找到使上述概率却得最大的那个状态序列
vj(t)=maxP(q1,q2,⋯,qt−1,y1,y2,⋯,yt,qt=j)
    =maxP(q1,q2,⋯,qt−1,y1,y2,⋯,yt−1)⋅P(yt | qt=j)⋅P(qt=j|qt−1)
    =maxP(q1,q2,⋯,qt−1,y1,y2,⋯,yt−1)⋅bj(yt)⋅aqt−1, j
    =bj(yt)maxvi(t−1)⋅ai, j
    于是得到了一个递归的公式。这也就是维特比算法的核心原理。此外,由于我们最终要确定最大可能的隐状态序列,所以记 ψj(t) 是在 t−1 时刻的一个状态,且从该状态转换到状态 j 的概率最大,即
    ψj(t)=bj(yt)argmaxikvi(t−1)⋅ai, j

参考文献:
【1】http://blog.csdn.net/baimafujinji/article/details/51322186
【2】 徐亦达教授的机器学习视频(优酷)
【3】http://www.cnblogs.com/skyme/p/4651331.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值