概率计算算法
给定模型
λ=(A,B,π),观测序列
O=(o1,o2,…oT),计算在模型
λ下观测序列O出现的概率
这被称作概率计算问题
主要介绍计算观测序列概率
P(O∣λ)的前向与后向算法。
先介绍概念上可行但计算上不可行的直接计算法
直接计算法:
给定模型
λ=(A,B,π),和观测序列
O=(o1,o2,…oT),计算观测序列O出现的概率
P(O∣λ)。最直接的方法是按概率公式直接计算。通过列举所有可能的长度为T的状态序列
I=(i1,i2,…iT),求各个状态序列
I与观测序列
O=(o1,o2,…oT)的联合概率分布
P(O,I∣λ),然后对所有的状态序列求和,得到
P(O∣λ)
(由联合概率求边缘概率的思想)
状态序列
I=(i1,i2,…iT)的概率是:
P(I∣λ)=πi1ai1i2ai2i3……aiT−1iT (1)
对于固定的状态序列
I=(i1,i2,…iT),观测序列
O=(o1,o2,…oT)的概率是
P(O∣I,λ)
P(O∣I,λ)=bi1(o1)bi2(o2)…biT(oT)
O和I同时出现的联合概率为:P(O,I∣λ)=P(O∣I,λ)P(I∣λ)=πi1bi1(o1)ai1i2bi2(o2)…aiT−1iTbiT(oT)
然后对所有可能的状态序列
I求和,得到观测序列O的概率
P(O∣λ)
即:
P(O,I∣λ)=I∑P(O∣I,λ)P(I∣λ)=i1,i2…iT∑πi1bi1(o1)ai1i2bi2(o2)…aiT−1iTbiT(oT)
直接计算法是
O(TNT)阶的,算法不可行。下面介绍计算观测序列概率的有效算法-----前向算法与后向算法
前向算法
**前向概率:**给定隐马尔科夫模型
∣λ,定义到时刻t部分观测序列为
o1,o2,…ot且状态为
qi的概率为前向概率,记作
αt(i)=P(o1,o2……ot,it=qi∣λ)(时刻t、部分观测序列
o1,o2……ot、t时刻的状态q_i)
可以递推的求得前向概率
αt(i)及观测概率
P(O∣λ)
观测序列概率的前向算法:
输入:隐马尔科夫模型
λ,观测序列O
输出:观测序列概率
P(O∣λ)
1)初值
α1(i)=πibi(o1),i=1,2,……N时刻1观测为
o1且状态为
qi
(时刻1各个状态的概率恰好是
πi的各个分量,这N个状态对应到观测
o1的观测概率为
bi(o1))
2)递推 对t=1,2……T-1
αt+1(i)=[j=1∑Nαt(j)αji]bi(ot+1),i=1,2,……N (2)
3)终止
P(O∣λ)=i=1∑NαT(i)
对于步骤1),初始化前向概率。是初始时刻的状态
i1=qi和观测
o1的联合概率。(前向概率的定义)
由前向概率定义可知
α1(i)=P(o1,i1=qi∣λ)=P(i1=qi)P(o1∣qi)=πibi(o1)
2)步骤是前向概率的递推公式,计算到时刻t+1部分观测序列为
o1,o2……ot,ot+1且在时刻t+1处于状态q_i的前向概率。如下图所示:
1)在式2 中的方括号里。既然
αt(j)是到时刻t观测到
o1,o2……ot并在时刻t处于状态
qj的前向概率。
2)那么乘积
αt(j)αji就是到时刻t观测到
o1,o2……ot并在时刻t处于状态
qj而在时刻t+1到达状态
qi的联合概率。
3)对这个乘积在时刻t的所有可能的N个状态
qj求和,其结果就是到时刻t观测为
o1,o2……ot并在时刻t+1处于状态
qi的联合概率。(求和的作用是把时刻t的各种状态考虑进去)
4)方括号里的值与观测概率
bi(ot+1)的乘积恰好是到时刻t+1观测到
o1,o2……ot,ot+1并且在时刻t+1处于状态
qi的前向概率
αt+1(j)
步骤3)给出了
P(O∣λ)的计算公式。因为
αT(i)=P(o1,o2……oT,iT=qi∣λ)(此时的状态仍然有N个可能,也就是说到最后时刻T,这么多条状态序列都能得到想要的观测序列,所以需要求和)
因此:
P(O∣λ)=i=1∑NαT(i)
前向算法实际上是基于“状态序列的路径结构”递推计算
P(O∣λ)的算法。
前向算法的高效的关键是其局部的计算前向概率,然后利用路径结构将前向的概率递推到全局得到
P(O∣λ)
具体的,
1)在时刻t=1,计算
α1(i)的N个值
i=1,2……N
2)在各个时刻t=1,2……T-1,计算
αt+1(i)的N个值(i=1,2……N)
而且每个
αt+1(i)的计算利用前一时刻N个
αt(i)
后向算法
后向概率:给定隐马尔科夫模型
λ,定义在时刻t状态为
qi的条件下,从t+1到T的部分观测序列为
ot+1,ot+2…oT的概率为后向概率,记作
βt(i)=P(ot+1,ot+2…oT∣it=qi,λ)
观测序列概率的后向算法:
输入:隐马尔科夫模型
λ
输出:观测序列概率
P(O∣λ)
1)
βT(i)=1,i=1,2……N
2)对t=T-1,T-2……1
βt(i)=j=1∑Nαijbj(ot+1)βt+1(j)
(想清楚在每一个特定的状态时,可以对应所有的观测,只是他们的概率不同而已)
后向概率和前向概率思想是一样的,都是基于状态的路径,只不过后向算法中,当前是一个状态对应后续的N个状态(前向相反)一对多一直发散。
3)
P(O∣λ)=j=1∑Nπibi(o1)β1(j)
步骤1)初始化后向概率,对钟总时刻的所有状态
qi规定
βT(i)=1
步骤2)为了计算在时刻t状态为
qi的条件下时刻t+1之后的观测序列为
ot+1,ot+2…oT的后向概率
βt(i),只需要考虑在时刻t+1所有可能的N个状态
qj的转移概率(即
αij),以及在此状态下的观测
ot+1的观测概率(
bj(ot+1)),然后考虑状态
qj之后的观测序列的后向概率(
βt+1(j))
利用前向概率和后向概率的定义可以将观测序列概率
P(O∣λ)统一写成:
P(O∣λ)=i=1∑Nj=1∑Nαt(i)bj(ot+1)βt+1(j)
当t=1 和 t=T-1 时,上式分别是前向概率和后向概率。
一些概率与期望值的计算
利用前向概率和后向概率,可以得到关于单个状态和两个状态概率的计算公式。
1)给定模型
λ和观测O,在时刻t处于状态
qi的概率。记
γt(i)=P(it=qi∣O,λ)
γt(i)=P(it=qi∣O,λ)=P(O∣λ)P(it=qi,O∣λ)
由前向与后向概率的定义可知:
αt(i)βt(i)=P(it=qi,O∣λ)
P(O∣λ)=i=1∑Nαt(i)βt(i)(由联合概率求边缘概率公式)
于是:
γt(i)=P(O∣λ)P(it=qi,O∣λ)=P(O∣λ)αt(i)βt(i)=j=1∑Nαt(j)βt(j)αt(i)βt(i)
2)给定模型
λ和观测O,在时刻t处于状态
qi且在时刻t+1处于状态
qj的概率 ,记
ζij=P(it=qi,it+1=qj∣O,λ)
ζij=P(O∣λ)P(it=qi,it+1=qj,O∣λ)=i=1∑Nj=1∑NP(it=qi,it+1=qj,O∣λ)P(it=qi,it+1=qj,O∣λ)
而
P(it=qi,it+1=qj,O∣λ)=αt(i)aijbj(ot+1)βt+1(j)
所以
ζij=i=1∑Nj=1∑Nαt(i)aijbj(ot+1)βt+1(j)αt(i)aijbj(ot+1)βt+1(j)