隐马尔科夫模型(二)

概率计算算法

给定模型 λ = ( A , B , π ) λ=(A,B,π) ,观测序列 O = ( o 1 , o 2 , o T ) O=(o_1,o_2,…o_T) ,计算在模型 λ λ 下观测序列O出现的概率
这被称作概率计算问题

主要介绍计算观测序列概率 P ( O λ ) P(O|λ) 的前向与后向算法。
先介绍概念上可行但计算上不可行的直接计算法

直接计算法:
给定模型 λ = ( A , B , π ) λ=(A,B,π) ,和观测序列 O = ( o 1 , o 2 , o T ) O=(o_1,o_2,…o_T) ,计算观测序列O出现的概率 P ( O λ ) P(O|λ) 。最直接的方法是按概率公式直接计算。通过列举所有可能的长度为T的状态序列 I = ( i 1 , i 2 , i T ) I=(i_1,i_2,…i_T) ,求各个状态序列 I I 与观测序列 O = ( o 1 , o 2 , o T ) O=(o_1,o_2,…o_T) 的联合概率分布 P ( O , I λ ) P(O,I|λ) ,然后对所有的状态序列求和,得到 P ( O λ ) P(O|λ)
(由联合概率求边缘概率的思想)

状态序列 I = ( i 1 , i 2 , i T ) I=(i_1,i_2,…i_T) 的概率是: 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} (1)

对于固定的状态序列 I = ( i 1 , i 2 , i T ) I=(i_1,i_2,…i_T) ,观测序列 O = ( o 1 , o 2 , o T ) O=(o_1,o_2,…o_T) 的概率是 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)

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)

然后对所有可能的状态序列 I I 求和,得到观测序列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)

直接计算法是 O ( T N T ) O(TN^T) 阶的,算法不可行。下面介绍计算观测序列概率的有效算法-----前向算法与后向算法

前向算法

**前向概率:**给定隐马尔科夫模型 λ ,定义到时刻t部分观测序列为 o 1 , o 2 , o t o_1,o_2,…o_t 且状态为 q i q_i 的概率为前向概率,记作
α 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、部分观测序列 o 1 , o 2 o t o_1,o_2……o_t 、t时刻的状态q_i)

可以递推的求得前向概率 α t ( i ) α_t(i) 及观测概率 P ( O λ ) P(O|λ)

观测序列概率的前向算法:

输入:隐马尔科夫模型 λ λ ,观测序列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观测为 o 1 o_1 且状态为 q i q_i
(时刻1各个状态的概率恰好是 π i π_i 的各个分量,这N个状态对应到观测 o 1 o_1 的观测概率为 b i ( o 1 ) b_i(o_1) )

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 (2)

3)终止 P ( O λ ) = i = 1 N α T ( i ) P(O|λ)=\displaystyle\sum_{i=1}^{N}α_T(i)

对于步骤1),初始化前向概率。是初始时刻的状态 i 1 = q i i_1=q_i 和观测 o 1 o_1 的联合概率。(前向概率的定义)
由前向概率定义可知
α 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)

2)步骤是前向概率的递推公式,计算到时刻t+1部分观测序列为 o 1 , o 2 o t , o t + 1 o_1,o_2……o_t,o_{t+1} 且在时刻t+1处于状态q_i的前向概率。如下图所示:
在这里插入图片描述

1)在式2 中的方括号里。既然 α t ( j ) α_t(j) 是到时刻t观测到 o 1 , o 2 o t o_1,o_2……o_t 并在时刻t处于状态 q j q_j 的前向概率。
2)那么乘积 α t ( j ) α j i α_t(j)α_{ji} 就是到时刻t观测到 o 1 , o 2 o t o_1,o_2……o_t 并在时刻t处于状态 q j q_j 而在时刻t+1到达状态 q i q_i 的联合概率。
3)对这个乘积在时刻t的所有可能的N个状态 q j q_j 求和,其结果就是到时刻t观测为 o 1 , o 2 o t o_1,o_2……o_t 并在时刻t+1处于状态 q i q_i 的联合概率。(求和的作用是把时刻t的各种状态考虑进去)
4)方括号里的值与观测概率 b i ( o t + 1 ) b_i(o_{t+1}) 的乘积恰好是到时刻t+1观测到 o 1 , o 2 o t , o t + 1 o_1,o_2……o_t,o_{t+1} 并且在时刻t+1处于状态 q i q_i 的前向概率 α t + 1 ( j ) α_{t+1}(j)

步骤3)给出了 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|λ) (此时的状态仍然有N个可能,也就是说到最后时刻T,这么多条状态序列都能得到想要的观测序列,所以需要求和)
因此:
P ( O λ ) = i = 1 N α T ( i ) P(O|λ)=\displaystyle\sum_{i=1}^{N}α_T(i)

前向算法实际上是基于“状态序列的路径结构”递推计算 P ( O λ ) P(O|λ) 的算法。
前向算法的高效的关键是其局部的计算前向概率,然后利用路径结构将前向的概率递推到全局得到 P ( O λ ) P(O|λ)

具体的,
1)在时刻t=1,计算 α 1 ( i ) α_1(i) 的N个值 i = 1 , 2 N i=1,2……N
2)在各个时刻t=1,2……T-1,计算 α t + 1 ( i ) α_{t+1}(i) 的N个值(i=1,2……N)
而且每个 α t + 1 ( i ) α_{t+1}(i) 的计算利用前一时刻N个 α t ( i ) α_{t}(i)

后向算法

后向概率:给定隐马尔科夫模型 λ λ ,定义在时刻t状态为 q i q_i 的条件下,从t+1到T的部分观测序列为 o t + 1 , o t + 2 o T o_{t+1},o_{t+2}…o_T 的概率为后向概率,记作 β 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,λ)

观测序列概率的后向算法:
输入:隐马尔科夫模型 λ λ
输出:观测序列概率 P ( O λ ) P(O|λ)
1) β 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)
(想清楚在每一个特定的状态时,可以对应所有的观测,只是他们的概率不同而已)
后向概率和前向概率思想是一样的,都是基于状态的路径,只不过后向算法中,当前是一个状态对应后续的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)
步骤1)初始化后向概率,对钟总时刻的所有状态 q i q_i 规定 β T ( i ) = 1 β_T(i)=1
步骤2)为了计算在时刻t状态为 q i q_i 的条件下时刻t+1之后的观测序列为 o t + 1 , o t + 2 o T o_{t+1},o_{t+2}…o_T 的后向概率 β t ( i ) β_t(i) ,只需要考虑在时刻t+1所有可能的N个状态 q j q_j 的转移概率(即 α i j α_{ij} ),以及在此状态下的观测 o t + 1 o_{t+1} 的观测概率( b j ( o t + 1 ) b_j(o_{t+1}) ),然后考虑状态 q j q_j 之后的观测序列的后向概率( β t + 1 ( j ) β_{t+1}(j)

利用前向概率和后向概率的定义可以将观测序列概率 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)

当t=1 和 t=T-1 时,上式分别是前向概率和后向概率。

一些概率与期望值的计算

利用前向概率和后向概率,可以得到关于单个状态和两个状态概率的计算公式。
1)给定模型 λ λ 和观测O,在时刻t处于状态 q i q_i 的概率。记
γ t ( i ) = P ( i t = q i O , λ ) γ_t(i)=P(i_t=q_i|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 ) β t ( i ) = P ( i t = q i , O λ ) α_t(i)β_t(i)=P(i_t=q_i,O|λ)

P ( O λ ) = i = 1 N α t ( i ) β t ( i ) P(O|λ)=\displaystyle\sum_{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)}

2)给定模型 λ λ 和观测O,在时刻t处于状态 q i q_i 且在时刻t+1处于状态 q j q_j 的概率 ,记
ζ 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,λ)

ζ 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|λ)}


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)

所以
ζ 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)}

猜你喜欢

转载自blog.csdn.net/qq_16608563/article/details/84568021