隐马尔可夫模型基本问题——概率计算问题详细讲解

本文探讨了概率计算问题,即评价问题,介绍了在给定模型和观测序列下计算匹配程度的方法,包括直接计算法、前向算法和后向算法,并通过具体例子详细解释了前向算法和后向算法的计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概率计算问题又称评价问题(Evaluation Problem)

已知条件:给定模型λ=[A,B,π]\lambda=[A,B,\pi]λ=[A,B,π]和观测序列O=(o1,o2,o3,...,on)O=(o_{1},o_{2},o_{3},...,o_{n})O=(o1,o2,o3,...,on)
求解目标:计算在模型λ\lambdaλ和观测序列OOO出现情况下的P(O∣λ)P(O|\lambda)P(Oλ),也可以认为是求解观测序列和评估模型之间的匹配程度。
求解方式:直接计算法、前向算法、后向算法

例子:有三个盒子,编号1、2、3,每个盒子都有红、白两种颜色的球,有放回的从盒子里拿1个球,总共进行了四次,出现“红、白、红、白”的概率是多少?(初始状态概率矩阵π=(1,0,0)\pi=(1,0,0)π=(1,0,0)

表1. 盒子之间的转移概率
盒子盒1盒 2盒3
盒10.40.60
盒200.80.2
盒 3001
表2. 每个盒子中红、白球的个数
盒子盒1盒 2盒3
红球748
白球362

解析:由表1和表2,可知状态转移矩阵A和观测概率B,此时“模型λ=[A,B,π]\lambda=[A,B,\pi]λ=[A,B,π]和观测序列O=(红、白、红、白)O=(红、白、红、白)O=()”为已知条件,求解目标是:“O=(红、白、红、白)O=(红、白、红、白)O=()发生的概率,即P(O∣λ)=?P(O|\lambda)=?P(Oλ)=

直接计算法(不提倡)

通过列举所有可能长度为T的状态序列S=(s1,s2,s3,...,sT)S=(s_{1},s_{2},s_{3},...,s_{T})S=(s1,s2,s3,...,sT),求各个状态序列SSS和观测序列OOO的联合概率P(O,S∣λ)P(O,S|\lambda)P(O,Sλ),然后对所有可能的状态序列求和,得到P(O∣λ)P(O|\lambda)P(Oλ),求解方式如下(aij是状态转移概率,bij是观测概率a_{ij}是状态转移概率,b_{ij}是观测概率aijbij):

P(O∣S,λ)=b11b22b33...bTMP(O|S,\lambda)=b_{11}b_{22}b_{33}...b_{TM}P(OSλ)=b11b22b33...bTM

P(S∣λ)=π1a12a23...a(T−1)TP(S|\lambda)=\pi_{1}a_{12}a_{23}...a_{(T-1)T}P(Sλ)=π1a12a23...a(T1)T

P(O,S∣λ)=P(O∣S,λ)P(S∣λ)=π1b11a12b22a23b33...a(T−1)TbTMP(O,S|\lambda)=P(O|S,\lambda)P(S|\lambda) =\pi_{1}b_{11}a_{12}b_{22}a_{23}b_{33}...a_{(T-1)T}b_{TM}P(O,Sλ)=P(OSλ)P(Sλ)=π1b11a12b22a23b33...a(T1)TbTM

P(O∣λ)=∑S∈STP(O,S∣λ)=∑S1,S2,S3,...STπ1b11a12b22a23b33...a(T−1)TbTMP(O|\lambda)=\sum_{S∈S_{T}}P(O,S|\lambda) =\sum_{S_{1},S_{2},S_{3},...S_{T}}\pi_{1}b_{11}a_{12}b_{22}a_{23}b_{33}...a_{(T-1)T}b_{TM}P(Oλ)=SSTP(O,Sλ)=S1,S2,S3,...STπ1b11a12b22a23b33...a(T1)TbTM

理论上可以计算,但计算量很大,时间复杂度是O(TNT)O(TN^T)O(TNT)NNN是状态的个数,TTT是观测列表的长度),因此不可行。

解析:还是上面例子,如果O=(红、白、红、白)O=(红、白、红、白)O=(),那么只要枚举343^434个就行,分别求出对应的概率,再相加就行了,但要是O=(红、白、红、...、白)O=(红、白、红、...、白)O=(...)有1000个,需要枚举310003^{1000}31000,这数目就不少了,因此该方法只要知道是什么就可以了,可行度不高。

前向算法(重要)

前向概率:在λ\lambdaλ给定的情况下,到时刻ttt时,出现的观测序列为o1,o2,o3,...,oto_{1},o_{2},o_{3},...,o_{t}o1,o2,o3,...,ot且状态为sis_{i}si时的概率,记为:

αt(i)=P(o1,o2,o3,...,ot,si∣λ)\alpha_{t}(i)=P(o_{1},o_{2},o_{3},...,o_{t},s_{i}|\lambda)αt(i)=P(o1,o2,o3,...,ot,siλ)

求解步骤

  1. 起始值:α1(i)=πibi(o1),    i=1,2,3,...,N\alpha_{1}(i)=\pi_{i}b_{i}(o_{1}),\:\:\:\:i=1,2,3,...,Nα1(i)=πibi(o1),i=1,2,3,...,N

  2. 递推:当t=1,2,3,...,T−1t=1,2,3,...,T-1t=1,2,3,...,T1时, αt+1(i)=[∑j=1Nαt(j)αji]bi(ot+1),    i=1,2,3,...,N\alpha_{t+1}^{(i)}=[\sum_{j=1}^{N}\alpha_{t}(j)\alpha_{ji}]b_{i}(o_{t+1}), \:\:\:\:i=1,2,3,...,Nαt+1(i)=[j=1Nαt(j)αji]bi(ot+1),i=1,2,3,...,N

  3. 执行完步骤1和2,可得P(O∣λ)=∑i=1NαT(i),    i=1,2,3,...,NP(O|\lambda)=\sum_{i=1}^{N}\alpha_{T}(i),\:\:\:\:i=1,2,3,...,NP(Oλ)=i=1NαT(i),i=1,2,3,...,N

此时,求解P(O∣λ)P(O|\lambda)P(Oλ)的时间复杂度是O(N2T)O(N^2T)O(N2T)

递推求解,直到T时为止

解析:对上面的例子进行求解,现在观测序列O=(红、白、红、白),初始状态概率矩阵π=(1,0,0)\pi=(1,0,0)π=(1,0,0),状态转移矩阵A和观测概率B如下:

A=[0.40.6000.80.2001]A=\begin{bmatrix} 0.4& 0.6 &0 \\ 0&0.8 &0.2 \\ 0 & 0& 1 \end{bmatrix}A=0.4000.60.8000.21       \:\:\:\:\:\:B=[0.70.30.40.60.80.2]B=\begin{bmatrix} 0.7& 0.3 \\ 0.4&0.6 \\ 0.8 & 0.2 \end{bmatrix}B=0.70.40.80.30.60.2

1、当t=1t=1t=1时:
α1(1)=π∗b1(o1)=1∗0.7=0.7\alpha_{1}(1)=\pi*b_{1}(o_{1})=1*0.7=0.7α1(1)=πb1(o1)=10.7=0.7
2、当t=2t=2t=2时:
α2(1)=α1(1)∗a11∗b1(o2)=0.7∗0.4∗0.3=0.084\alpha_{2}(1)=\alpha_{1}(1)*a_{11}*b_{1}(o_{2})=0.7*0.4*0.3=0.084α2(1)=α1(1)a11b1(o2)=0.70.40.3=0.084
α2(2)=α1(1)∗a12∗b2(o2)=0.7∗0.6∗0.6=0.252\alpha_{2}(2)=\alpha_{1}(1)*a_{12}*b_{2}(o_{2})=0.7*0.6*0.6=0.252α2(2)=α1(1)a12b2(o2)=0.70.60.6=0.252
3、当t=3t=3t=3时:
α3(1)=α2(1)∗a11∗b1(o3)=0.084∗0.4∗0.7=0.02352\alpha_{3}(1)=\alpha_{2}(1)*a_{11}*b_{1}(o_{3})=0.084*0.4*0.7=0.02352α3(1)=α2(1)a11b1(o3)=0.0840.40.7=0.02352
α3(2)=[α2(1)∗a12+α2(2)∗a22]∗b2(o3)=(0.084∗0.6+0.252∗0.8)∗0.4=0.1008\alpha_{3}(2)=[\alpha_{2}(1)*a_{12}+\alpha_{2}(2)*a_{22}]*b_{2}(o_{3})=(0.084*0.6+0.252*0.8)*0.4=0.1008α3(2)=[α2(1)a12+α2(2)a22]b2(o3)=(0.0840.6+0.2520.8)0.4=0.1008
α3(3)=α2(2)∗a23∗b3(o3)=0.252∗0.2∗0.8=0.04032\alpha_{3}(3)=\alpha_{2}(2)*a_{23}*b_{3}(o_{3})=0.252*0.2*0.8=0.04032α3(3)=α2(2)a23b3(o3)=0.2520.20.8=0.04032
4、当t=4t=4t=4时:
α4(1)=α3(1)∗a11∗b1(o4)=0.02352∗0.4∗0.3=0.0028224\alpha_{4}(1)=\alpha_{3}(1)*a_{11}*b_{1}(o_{4})=0.02352*0.4*0.3=0.0028224α4(1)=α3(1)a11b1(o4)=0.023520.40.3=0.0028224
α4(2)=[α3(1)∗a12+α3(2)∗a22]∗b2(o4)=(0.02352∗0.6+0.1008∗0.8)∗0.6=0.0568512\alpha_{4}(2)=[\alpha_{3}(1)*a_{12}+\alpha_{3}(2)*a_{22}]*b_{2}(o_{4})=(0.02352*0.6+0.1008*0.8)*0.6=0.0568512α4(2)=[α3(1)a12+α3(2)a22]b2(o4)=(0.023520.6+0.10080.8)0.6=0.0568512
α4(3)=[α3(2)∗a23+α3(3)∗a33]∗b3(o4)=(0.1008∗0.2+0.04032∗1)∗0.2=0.012096\alpha_{4}(3)=[\alpha_{3}(2)*a_{23}+\alpha_{3}(3)*a_{33}]*b_{3}(o_{4})=(0.1008*0.2+0.04032*1)*0.2=0.012096α4(3)=[α3(2)a23+α3(3)a33]b3(o4)=(0.10080.2+0.040321)0.2=0.012096
此时,可求P(O∣λ)=α4(1)+α4(2)+α4(3)=0.0028224+0.0568512+0.012096=0.0717696P(O|\lambda)=\alpha_{4}(1)+\alpha_{4}(2)+\alpha_{4}(3)=0.0028224+0.0568512+0.012096=0.0717696P(Oλ)=α4(1)+α4(2)+α4(3)=0.0028224+0.0568512+0.012096=0.0717696

计算流程图如图2所示,其中初始状态概率、状态转移概率和观测概率为0的线没有画

计算流程图

后向算法(和前向算法差不多)

后向概率:在λ\lambdaλ给定的情况下,并且时刻ttt的状态为sis_{i}si的条件下,观测序列ot+1,ot+2,ot+3,...,oTo_{t+1},o_{t+2},o_{t+3},...,o_{T}ot+1,ot+2,ot+3,...,oT的概率,记为:

βt(i)=P(ot+1,ot+2,ot+3,...,oT∣λ,si)\beta_{t}(i)=P(o_{t+1},o_{t+2},o_{t+3},...,o_{T}|\lambda,s_{i})βt(i)=P(ot+1,ot+2,ot+3,...,oTλ,si)

求解步骤

  1. 起始值:β1(i)=1,    i=1,2,3,...,N\beta_{1}(i)=1,\:\:\:\:i=1,2,3,...,Nβ1(i)=1,i=1,2,3,...,NTTT时刻的状态,后向概率都为1)

  2. 递推:当t=T−1,T−2,T−3,...,1t=T-1,T-2,T-3,...,1t=T1,T2,T3,...,1时, βt(i)=∑j=1Nαijbj(ot+1)βt+1(j),    i=1,2,3,...,N\beta_{t}^{(i)}=\sum_{j=1}^{N}\alpha_{ij}b_{j}(o_{t+1})\beta_{t+1}(j), \:\:\:\:i=1,2,3,...,Nβt(i)=j=1Nαijbj(ot+1)βt+1(j),i=1,2,3,...,N

  3. 执行完步骤1和2,可得P(O∣λ)=∑i=1Nπibi(o1)β1(i),    i=1,2,3,...,NP(O|\lambda)=\sum_{i=1}^{N}\pi_{i}b_{i}(o_{1})\beta_{1}(i),\:\:\:\:i=1,2,3,...,NP(Oλ)=i=1Nπibi(o1)β1(i),i=1,2,3,...,N

反向递推求解,直到时刻1时为止

解析:使用后向算法对上面的例子进行求解,观测序列为O=(红、白、红、白)O=(红、白、红、白)O=(),初始状态概率矩阵π=(1,0,0)\pi=(1,0,0)π=(1,0,0),状态转移矩阵A和观测概率B如下:

A=[0.40.6000.80.2001]A=\begin{bmatrix} 0.4& 0.6 &0 \\ 0&0.8 &0.2 \\ 0 & 0& 1 \end{bmatrix}A=0.4000.60.8000.21       \:\:\:\:\:\:B=[0.70.30.40.60.80.2]B=\begin{bmatrix} 0.7& 0.3 \\ 0.4&0.6 \\ 0.8 & 0.2 \end{bmatrix}B=0.70.40.80.30.60.2

1、当t=4t=4t=4时:

β4(i)=1,  i=1,2,3\beta_{4}(i)=1,\:\:i=1,2,3β4(i)=1,i=1,2,3

2、当t=3t=3t=3时:

β3(1)=∑j=1Nα1jbj(o4)β4(j)=0.48\beta_{3}(1)=\sum_{j=1}^{N}\alpha_{1j}b_{j}(o_{4})\beta_4(j)=0.48β3(1)=j=1Nα1jbj(o4)β4(j)=0.48

β3(2)=∑j=1Nα2jbj(o4)β4(j)=0.52\beta_{3}(2)=\sum_{j=1}^{N}\alpha_{2j}b_{j}(o_{4})\beta_4(j)=0.52β3(2)=j=1Nα2jbj(o4)β4(j)=0.52

β3(3)=∑j=1Nα3jbj(o4)β4(j)=0.2\beta_{3}(3)=\sum_{j=1}^{N}\alpha_{3j}b_{j}(o_{4})\beta_4(j)=0.2β3(3)=j=1Nα3jbj(o4)β4(j)=0.2

3、当t=2t=2t=2时:

β2(1)=∑j=1Nα1jbj(o3)β3(j)=0.2592\beta_{2}(1)=\sum_{j=1}^{N}\alpha_{1j}b_{j}(o_{3})\beta_3(j)=0.2592β2(1)=j=1Nα1jbj(o3)β3(j)=0.2592

β2(2)=∑j=1Nα2jbj(o3)β3(j)=0.1984\beta_{2}(2)=\sum_{j=1}^{N}\alpha_{2j}b_{j}(o_{3})\beta_3(j)=0.1984β2(2)=j=1Nα2jbj(o3)β3(j)=0.1984

β2(3)=∑j=1Nα3jbj(o3)β3(j)=0.16\beta_{2}(3)=\sum_{j=1}^{N}\alpha_{3j}b_{j}(o_{3})\beta_3(j)=0.16β2(3)=j=1Nα3jbj(o3)β3(j)=0.16

4、当t=1t=1t=1时:

β1(1)=∑j=1Nα1jbj(o2)β2(j)=0.102528\beta_{1}(1)=\sum_{j=1}^{N}\alpha_{1j}b_{j}(o_{2})\beta_2(j)=0.102528β1(1)=j=1Nα1jbj(o2)β2(j)=0.102528

β1(2)=∑j=1Nα2jbj(o2)β2(j)=0.132352\beta_{1}(2)=\sum_{j=1}^{N}\alpha_{2j}b_{j}(o_{2})\beta_2(j)=0.132352β1(2)=j=1Nα2jbj(o2)β2(j)=0.132352

β1(3)=∑j=1Nα3jbj(o2)β2(j)=0.032\beta_{1}(3)=\sum_{j=1}^{N}\alpha_{3j}b_{j}(o_{2})\beta_2(j)=0.032β1(3)=j=1Nα3jbj(o2)β2(j)=0.032

此时,可求P(O∣λ)=∑i=1Nπibi(o1)β1(i)=0.0717696P(O|\lambda)=\sum_{i=1}^{N}\pi_{i}b_{i}(o_{1})\beta_1(i)=0.0717696P(Oλ)=i=1Nπibi(o1)β1(i)=0.0717696

结论:后向算法和前向算法计算结果完全一样,因此计算P(O∣λ)P(O|\lambda)P(Oλ)的时候,可以任意选择一个算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值