3. HMM三类问题的求解方法

3.1 问题1的求解方法

给定模型λ,希望计算观测序列O=O1O2OT的概率,即P(O|λ)。最直接的计算方式是枚举所有长度为T的状态序列。对某个状态序列

Q=q1q2qT(12)

其中q1是初始状态。在上面的状态序列的条件下,观测序列O的概率是

P(O|Q,λ)=t=1TP(Ot|qt,λ),(13a)

这里假设观测是独立的。于是

P(O|Q,λ)=bq1(O1)bq2(O2)bqT(OT).(13b)

状态序列Q的概率为

P(Q|λ)=πq1aq1q2aq2q3aqT1qT.(14)

于是OQ的联合概率为

P(O,Q|λ)=P(O|Q,λ)P(Q,λ).(15)

通过对所有可能的状态序列的联合概率进行求和可以得到O的概率:

P(O|λ)=QP(O|Q,λ)P(Q|λ)=q1,q2,,qTπq1bq1(O1)aq1q2bq2(O2) aqT1qTbqT(QT).(16)(17)

上面的计算公式可以这样理解:在初始时刻(t=1),我们以概率πq1选择状态q1,然后以概率bq1(O1)生成观测值O1。在时刻由tt+1时,我们从状态q1以概率qq1q2转移到状态q2,然后以概率bq2(O2)生成观测值O2。重复这个过程直到生产时刻T的观测值OT

根据公式(17)直接计算P(O|λ)的时间复杂度是2TNT阶的,因为在每个时刻t=1,2,,T,都有N种可能的状态,即共有NT种可能的状态序列,对每个状态序列需要大概2T的计算量。更准确地,我们需要(2T1)NT次乘法,NT1次加法。即使对比较小的NT,这个计算量也是非常大的,比如N=5,T=100,计算量是210051001072阶的。很显然,我们需要一个更有效的方法来解决问题1。这个方法称为前向-后向过程。

事实上,我们只需要前向-后向过程中的前向过程来求解问题1。我们在这节也会介绍后向过程,因为在求解问题3的时候会用到。定义前向变量

αt(i)=P(O1O2Ot,qt=Si|λ),(18)

即给定模型λ,到时刻t部分观测序列为O1O2Ott时刻的状态为Si的概率。我们可以通过归纳计算αi(i)

1)初始化:

α1(i)=πibi(O1),1iN.(19)

2)归纳计算:

αt+1(j)=[i=1Nαt(i)aij]bj(Ot+1),1tT1,1jN.(20)

3)终止:

P(O|λ)=i=1NαT(i).(21)

HMM经典介绍论文【Rabiner 1989】翻译(六)——概率计算问题

步骤1)初始化前向概率为状态SiO1的联合概率。归纳过程时前向算法的核心,如图4(a)所示。这个图展示了t+1时刻的状态Sj可以由t时刻的N个可能状态Si,1iN到达。由于αt(i)是部分观测序列O1O2Otqt=Si的联合概率,所以乘积αt(i)aij是部分观测序列为O1O2Ot并且qt=Si,qt+1=Sj的联合概率。对时刻t所有可能的N个状态对应的乘积求和,结果就是观测序列为O1O2Ot并且qt+1=Sj的联合概率。这个结果与观测概率bj(Ot+1)的乘积就是αt+1(j)。对给定时刻t,计算所有状态j,1jN前向概率;然后对所有t=1,2,,T1迭代计算。步骤3)给出了P(O|λ)的计算公式。因为

αT(i)=O(O1O2OT,qT=Si|λ),(22)

所以P(O|λ)αT(i)的和。

前向概率计算P(O|λ)的计算量是N2T阶(N(N+1)(T1)+N次乘法和N(N1)(T1))的,而不是直接计算的TNT阶。对n=5,T=100,前向算法只需要3000次计算,而不是1072次。

前向算法高效的关键在于图4(b)所示的结构。在时刻t=1时刻,计算α1(i),1iN的。在时刻t=2,3,,T,只需要计算αt(j),1jN,其中每个值的计算利用了前一时刻的Nαt1(i)

类似地,定义后向变量βt(i)

βt(i)=P(Ot+1Ot+2OT|qt=Si,λ)(23)

即在t时刻的状态为Si和给定模型λ的条件下,从t+1T时刻的部分观测序列为Ot+1Ot+2OT的概率。

仍然可以用归纳的方法计算βt(i):

1) 初始化:

βT(i)=1,1iN.(24)

2)归纳:

βt(i)=j=1Naijbj(Ot+1)βt+1(j),t=T1,T2,,1,1iN.(25)

HMM经典介绍论文【Rabiner 1989】翻译(六)——概率计算问题

如图5所示,为了计算在qt=Si的条件下,t+1时刻后的观测序列为Ot+1Ot+2OT的后向概率,需要考虑t+1时刻所有可能状态Sj的转移概率(aij),以及此状态下的观测概率(bj(Ot+1)),然后考虑状态Sj之后的观测序列的后向概率(βt+1(j))。我们后面会看到如何利用前向计算以及后向计算来解决问题2和问题3。

βt(i),1tT,1iN的计算量是N2T阶的。

相关文章: