前一篇说到隐马尔可夫有三个基本问题,其中概率计算问题是首当其冲需解决的问题。
概率计算问题就是在给定模型
λ=(A,B,π)
和观测序列
O=(o1,o2,...,oT)
,计算观测序列
O
出现的概率
P(O|λ)
乘法公式的推广
在做隐马尔可夫公式推导前,我们需要复习一下概率乘法公式的推广。
若
P(A1A2...An−1)>0,n≥2
则
P(A1A2...An)
=P(An|A1A2...An−1)...P(A3|A1A2)P(A2|A1)P(A1)
可以写成
P(A2...An|A1)
=P(An|A1A2...An−1)...P(A3|A1A2)P(A2|A1)
换到此问题中来,我们可以将λ和O同时出现的联合概率写为
P(O,I|λ)=P(O|I,λ)P(I|λ)
直接计算
直接计算是最简单粗暴的方法,即列举长度为
T
的状态序列
I
的所有可能序列,对每一个可能的状态序列
Ix
求其与观测序列
O
的联合概率
P(O,Ix|λ)
,然后对其求和得
∑xP(O,Ix|λ)=P(O|λ)
。
①列举所有可能的状态序列
Ix=(i1,i2,...,iT)
状态序列长度为
T
,即
t=1,2,...,T
。每个时刻状态
it
有
N
种可取状态,因此所有可能的状态序列数为
NT
②计算
O
和每种状态序列
Ix
同时出现的联合概率
P(O,Ix|λ)
P(O,Ix|λ)=P(O|Ix,λ)P(Ix|λ)
可以看做分为三步:
第一步:求给定模型
λ
条件下出现状态序列
Ix
的概率
由要求可知,我们需要用到初始状态概率
π
和状态转移概率矩阵
A
P(Ix|λ)=πi1ai1i2ai2i3...aiT−1iT
第二步:对给定的状态序列
Ix
和模型
λ
的条件下观测序列
O
的概率
由要求可知,我们需要用到初始状态概率
π
和观测概率矩阵
B
P(O|Ix,λ)=bi1(o1)bi2(o2)...biT(oT)
第三步:将前两步得到的相乘
P(O,Ix|λ)=P(O|Ix,λ)P(Ix|λ)
=πi1bi1(o1)ai1i2bi2(o2)...aiT−1iTbiT(oT)
有
2T
项相乘
③对所有可能的状态序列
Ix
求和,得到
P(O|λ)
P(O|λ)=∑xNTP(O,Ix|λ)
计算量为
O(2T⋅NT)=O(TNT)
,计算量呈指数级,因此用这种直接计算的方法很困难。
前向-后向算法
利用前向算法和后向算法都可以得到观测序列概率
P(O|λ)
ajk和bk(ot+1)
回忆一下状态转移概率
ajk
和观测概率
bk(ot+1)
,它们会在前向算法和后向算法中用到
ajk=P(it+1=qk|it=qj)
bk(ot+1)=P(ot+1|it+1=qk)
前向算法
前向概率定义
给定隐马尔可夫模型
λ
,定义到时刻
t
部分观测序列为
o1,o2,...,ot
且状态为
qj
的概率为前向概率,记作
αt(j)=P(o1,o2,...,ot,it=qj|λ)
第一步:根据这些概率我们可以找到
αt+1(k)
与
αt(j)
的关系
①
αt(j)⋅ajk=P(o1,o2,...,ot,it=qj|λ)⋅P(it+1=qk|it=qj)
=P(o1,o2,...,ot,it=qj,it+1=qk|λ)
②
∑j=1Nαt(j)⋅ajk=∑j=1NP(o1,o2,...,ot,it=qj,it+1=qk|λ)
=P(o1,o2,...,ot,it+1=qk|λ)
③
[∑j=1Nαt(j)⋅ajk]⋅bk(ot+1)
=P(o1,o2,...,ot,it+1=qk|λ)⋅P(ot+1|it+1=qk)
=P(o1,o2,...,ot,ot+1,it+1=qk|λ)=αt+1(k)
计算量为
N
第二步:获取初值
α1(j)
并递推至
αT(j)
初值:
α1(j)=πjbj(o1)=P(i1=qj|λ)⋅P(o1|i1=qj)
递推:对于
t=1,2,...,T−1
αt+1(k)=[∑j=1Nαt(j)⋅ajk]⋅bk(ot+1)
计算量为
1+T−1=T
第三步:求
P(O|λ)
P(O|λ)=∑k=1NαT(k)=∑k=1NP(o1,o2,...,oT,iT=qk|λ)
=P(o1,o2,...,oT|λ)=P(O|λ)
计算量为
N
总的计算量为
O(N⋅T⋅N)=O(N2T)
后向算法
与前向算法类似
后向概率定义
给定隐马尔可夫模型
λ
,定义在时刻
t
状态为
qj
的条件下,从
t+1
到
T
的部分观测序列为
ot+1,ot+2,...,oT
的概率为后向概率,记作
βt(j)=P(ot+1,ot+2,...,oT|it=qj,λ)
第一步:根据这些概率我们可以找到
βt(j)
与
βt+1(k)
的关系
①
βt+1(k)⋅bk(ot+1)⋅ajk
=P(ot+2,ot+3,...,oT|it+1=qk,λ)⋅P(ot+1|it+1=qk)⋅P(it+1=qk|it=qj)
=P(ot+1,ot+2,ot+3,...,oT,it+1=qk|it=qj,λ)
②
∑k=1Nβt+1(k)⋅bk(ot+1)⋅ajk
=∑k=1NP(ot+1,ot+2,ot+3,...,oT,it+1=qk|it=qj,λ)
=P(ot+1,ot+2,ot+3,...,oT|it=qj,λ)
=βt(j)
计算量为
N
第二步:获取初值
βT(j)
并递推至
β1(j)
初值:
βT(j)=1
递推:对于
t=T−1,T−2,...,1
βt(j)=∑k=1Nβt+1(k)⋅bk(ot+1)⋅ajk
计算量为
1+T−1=T
第三步:求
P(O|λ)
P(O|λ)=∑j=1Nβ1(j)⋅bj(ot+1)⋅πj
=∑j=1NP(o2,o3,...,oT|i1=qj,λ)⋅P(o1|i1=qj)⋅P(i1=qj|λ)
=∑j=1NP(o1,o2,o3,...,oT,i1=qj|λ)
=P(o1,o2,o3,...,oT|λ)=P(O|λ)
计算量为
N
总的计算量为
O(N⋅T⋅N)=O(N2T)
利用前向概率和后向概率的定义,可以将观测序列概率P(O|λ)写成
P(O|λ)=∑j=1N∑k=1Nαt(j)ajkbk(ot+1)βt+1(k)
t=1,2,...,T−1
通过前向、后向概率求状态概率和期望
状态概率
单个状态:
给定模型
λ
和观测序列
O
,在
t
时刻处于状态
qj
的概率记为:
γt(j)=P(it=qj|O,λ)
找出其和前向概率
αt(j)
和后向概率
βt(j)
的关系:
γt(j)=P(it=qj|O,λ)=P(it=qj,O|λ)P(O|λ)=αt(j)βt(j)∑k=1Nαt(k)βt(k)
两个状态同时:
给定模型
λ
和观测序列
O
,在
t
时刻处于状态
qj
且在
t+1
时刻处于状态
qk
的概率记为:
ξt(j,k)=P(it=qj,it+1=qk|O,λ)
找出其和前向概率
αt(j)
和后向概率
βt(j)
的关系:
ξt(j,k)=P(it=qj,it+1=qk,O|λ)P(O|λ)=αt(j)ajkbk(ot+1)βt+1(k)∑j=1N∑k=1Nαt(j)ajkbk(ot+1)βt+1(k)
期望
(1)在观测序列
O
下状态
j
出现的期望值为
∑t=1Tγt(j)
(2)在观测序列
O
下由状态
j
转移的期望值为
∑t=1T−1γt(j)
(3)在观测序列
O
下由状态
j
转移到状态
k
的期望值为
∑t=1T−1ξt(j,k)