一、隐马尔科夫链的第一个基本问题
估计问题:给定一个观察序列O=O1O2…OT和模型u=(A,B,π),如何快速地计算出给定模型u情况下,观察序列
二、求解观察序列的概率
其实,求解这个问题就是一个解码问题。 对于任意的状态序列Q=q1q2…qT,有
并且
由于
所以
上述推导过程很直接,但是实际的计算量是非常庞大的,它要穷尽所有可能的状态序列,如果模型中有 N个状态,时间长度为
三、HMM中的前向算法
为了实现前向算法,需要定义一个前向变量αt(i).
定义1 前向变量αt(i)是在时间t, HMM输出序列
前向算法的主要思想是,如果可以快速地计算前向变量αt(i),那么就可以根据αt(i)计算出P(O|u), 因为P(O|u)是在所有状态下观察到序列O=O1O2…Ot的概率:
在前向算法中,采用动态规划的方法计算前向变量 αt(i),其思想基于如下观察:在时间t+1的前向变量可以根据时间t时的前向变量 αt(1),αt(2),…,αt(N)来归纳计算:
前向算法
1 初始化: α1(i)=πibi(O1),1≤i≤N
2 归纳计算: αt+1(j)=(∑Ni=1αt(i)aij)bj(Ot+1),1≤t≤T−1
3 求和终结: P(O|u)=∑Ni=1αT(i)
前向算法的时间复杂度为O(N2T)
四、HMM中的后向算法
快速计算P(O|u)还有一种后向算法。
对应于前向变量,定义一个后向变量βt(i).
定义2 后向变量βt(i)是在给定模型u=(A,B,π)并且在时间t状态为
类似于前向算法,也可以用动态规划算法计算后向变量。
1. 从时间 t到时间
2. 在时间 t+1的状态为 sj的条件下,HMM输出观察序列 Ot+2…OT,概率为: βt+1(j)
则,归纳关系为:
后向算法
1 初始化:βT(i)=1,1≤i≤N
2 归纳计算:βt(i)=∑Nj=1aijbj(Ot+1)βt+1(j),T−1≥t≥1;1≤i≤N
3 求和终结:P(O|u)=∑Ni=1πibi(O1)β1(i)
后向算法的时间复杂度为O(N2T)