隐马尔科夫模型(二)

概率计算算法

给定模型 λ = ( 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λ)=πi1ai1i2ai2i3aiT1iT (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(OI,λ)

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(OI,λ)=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) OIP(O,Iλ)=P(OI,λ)P(Iλ)=πi1bi1(o1)ai1i2bi2(o2)aiT1iTbiT(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λ)=IP(OI,λ)P(Iλ)=i1,i2iTπi1bi1(o1)ai1i2bi2(o2)aiT1iTbiT(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,o2ot,it=qiλ)(时刻t、部分观测序列 o 1 , o 2 … … o t o_1,o_2……o_t o1,o2ot、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=1Nα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=1Nα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(o1qi)=πibi(o1)

2)步骤是前向概率的递推公式,计算到时刻t+1部分观测序列为 o 1 , o 2 … … o t , o t + 1 o_1,o_2……o_t,o_{t+1} o1,o2ot,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,o2ot并在时刻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,o2ot并在时刻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,o2ot并在时刻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,o2ot,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,o2oT,iT=qiλ)(此时的状态仍然有N个可能,也就是说到最后时刻T,这么多条状态序列都能得到想要的观测序列,所以需要求和)
因此:
P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) P(O|λ)=\displaystyle\sum_{i=1}^{N}α_T(i) P(Oλ)=i=1Nα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,2N
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+2oT的概率为后向概率,记作 β 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+2oTit=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,2N
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=1Nα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=1Nπ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+2oT的后向概率 β 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=1Nj=1Nα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=qiO,λ)

γ 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=qiO,λ)=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=1Nα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=1Nα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=qjO,λ)

ζ 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=1Nj=1NP(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=1Nj=1Nαt(i)aijbj(ot+1)βt+1(j)αt(i)aijbj(ot+1)βt+1(j)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值