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