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

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

    估计问题:给定一个观察序列 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)

你可能感兴趣的:(机器学习,自然语言处理)