机器学习笔记(十四)——HMM估计问题和前向后向算法

来源:互联网 发布:java数组定义和初始化 编辑:程序博客网 时间:2024/05/16 11:09

一、隐马尔科夫链的第一个基本问题

    估计问题:给定一个观察序列O=O1O2OT和模型u=(A,B,π),如何快速地计算出给定模型u情况下,观察序列O的概率, 即P(O|u)?

二、求解观察序列的概率

    其实,求解这个问题就是一个解码问题。 对于任意的状态序列Q=q1q2qT,有

P(O|Q,u)=t=1T1P(Ot|qt,qt+1,u)=bq1(O1)bq2(O2)bqT(OT)

并且
P(Q|u)=πq1aq1q2aq2q3aqT1qT

由于
P(O,Q|u)=P(O|Q,u)P(Q|u)

所以
P(O|u)=QP(O,Q|u)QP(O|Q,u)P(Q|u)=Qπq1bq1(O1)t=1T1aqtqt+1bqt+1(Ot+1)

上述推导过程很直接,但是实际的计算量是非常庞大的,它要穷尽所有可能的状态序列,如果模型中有N个状态,时间长度为T, 那么有NT个可能的状态序列,这导致了并不能有效地执行这个算法。因此,人们提出了前向算法,利用动态规划来解决指数爆炸的问题。

三、HMM中的前向算法

    为了实现前向算法,需要定义一个前向变量αt(i).
定义1 前向变量αt(i)是在时间t, HMM输出序列O=O1O2Ot并且位于状态si的概率

αt(i)=P(O1O2Ot,qt=si|u)

    前向算法的主要思想是,如果可以快速地计算前向变量αt(i),那么就可以根据αt(i)计算出P(O|u), 因为P(O|u)是在所有状态下观察到序列O=O1O2Ot的概率:

P(O|u)=siP(O1O2OT,qT=si|u)=i=1NαT(i)

    在前向算法中,采用动态规划的方法计算前向变量αt(i),其思想基于如下观察:在时间t+1的前向变量可以根据时间t时的前向变量αt(1)αt(2),αt(N)来归纳计算:
αt+1(j)=(i=1Nαt(i)aij)bj(Ot+1)

前向算法

1 初始化: α1(i)=πibi(O1),1iN
2 归纳计算: αt+1(j)=(Ni=1αt(i)aij)bj(Ot+1),1tT1
3 求和终结: P(O|u)=Ni=1αT(i)

前向算法的时间复杂度为O(N2T)

四、HMM中的后向算法

    快速计算P(O|u)还有一种后向算法。
对应于前向变量,定义一个后向变量βt(i).
定义2 后向变量βt(i)是在给定模型u=(A,B,π)并且在时间t状态为si的条件下,HMM的输出观察序列O=Ot+1Ot+2OT的概率:

βt(i)=P(Ot+1Ot+2OT|qt=si|u)

    类似于前向算法,也可以用动态规划算法计算后向变量。
1. 从时间t到时间t+1, HMM的状态si到状态sj输出Ot+1,概率为aijbj(Ot+1)
2. 在时间t+1的状态为sj的条件下,HMM输出观察序列Ot+2OT,概率为:βt+1(j)
则,归纳关系为:
βt(i)=j=1Naijbj(Ot+1)βt+1(j)

后向算法

1 初始化:βT(i)=1,1iN
2 归纳计算:βt(i)=Nj=1aijbj(Ot+1)βt+1(j),T1t1;1iN
3 求和终结:P(O|u)=Ni=1πibi(O1)β1(i)

后向算法的时间复杂度为O(N2T)

0 0