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