机器学习:隐马尔可夫模型——概率计算算法

问答总结

  • 直接计算法是如何通过公式导出的?

  • 直接计算法复杂度为多少,为什么会有如此高的复杂度?

  • 前向后向算法优化复杂度的本质是什么?

    动态规划,防止多次计算重复子问题

  • 前向算法状态定义是什么?目标态是什么? 状态转移图和方程是什么?初态是什么?

  • 后向算法状态定义是什么? 目标态是什么? 状态转移图和方程是什么?初态是什么?

  • 前向后向概率的管辖范围直观图是怎样的?

  • 由管辖范围直观图直接得出重要的概率与期望值计算方式。


一、目标

前文说过:概率计算任务的目标是:

给定 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT), 计算模型 λ \lambda λ下观测序列 O O O出现的概率.即 P ( O ∣ λ ) P(O | \lambda) P(Oλ)

二、直接计算法

1、方法

直接对概率公式进行以下变形:
P ( O ∣ λ ) = ∑ I P ( O , I ∣ λ ) = ∑ I P ( O ∣ I , λ ) P ( I ∣ λ ) \begin{aligned} P(O | \lambda) &= \sum_{I}P(O,I|\lambda) \\ &= \sum_{I}P(O|I, \lambda)P(I|\lambda) \end{aligned} P(Oλ)=IP(O,Iλ)=IP(OI,λ)P(Iλ)
该公式含义是指:枚举每一种可能的不可观测序列 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)出现的概率,最后求和得到最终答案。
在这里插入图片描述
结合图,根据观测序列生成过程,我们很容易对公式进行展开。
∑ I P ( O ∣ I , λ ) P ( I ∣ λ ) = ∑ i 1 , i 2 , . . , i T π i 1 b i 1 ( o 1 ) a i 1 i 2 . . . a T − 1 T b i T ( o T ) \sum_{I}P(O|I, \lambda)P(I|\lambda) = \sum_{i_1,i_2,..,i_T}\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}...a_{T-1T}b_{i_T}(o_T) IP(OI,λ)P(Iλ)=i1,i2,..,iTπi1bi1(o1)ai1i2...aT1TbiT(oT)

2、复杂度

很明显,共有 N T N^T NT种情况,每种情况复杂度 O ( T ) O(T) O(T),因此该方法复杂度为 O ( T N T ) O(TN^T) O(TNT). 该方法复杂度太高。

二、前向算法

1、方法

仔细观察上方的式子,会发现,我们计算了大量抗余,比如,现在我们有两种可能的不可知状态序列: I 1 = ( 晴 天 , 雨 天 , 晴 天 , 雨天 ) , I 2 = ( 晴 天 , 雨 天 , 晴 天 , 晴天 ) I_1=(晴天,雨天,晴天,\textbf{雨天}), I_2=(晴天,雨天,晴天,\textbf{晴天}) I1=(雨天),I2=(晴天)

在这两种情况下,前三天的概率计算过程是完全一样的,但是根据直接计算方法,我们得完完整整计算两遍。

既然发现抗余,我们如何解决呢?动态规划!!!

对,本质来说,该问题具有大量重复子问题的特性,因此借鉴动态规划的思想,我们能否通过定义合适的状态来防止多次计算重复子问题? 这就是前向算法的思想本质。

来到求解动态规划问题的步骤:

  • (1) 定义状态(也称前向概率 α t ( i ) = P ( o 1 , o 2 , . . . , o t , i t = q i ∣ λ ) \alpha_t(i)=P(o_1, o_2, ..., o_t, i_t=q_i|\lambda) αt(i)=P(o1,o2,...,ot,it=qiλ):为(1)给定马尔科夫模型 λ \lambda λ。(2)到时刻 t t t部分观测序列为 ( o 1 , o 2 , . . . , o t ) (o_1, o_2, ..., o_t) (o1,o2,...,ot)。(3)时刻 t t t的可观测状态为 q i q_i qi。的概率。(这其实就是动态规划中的dp数组)

  • (2) 目标状态: ∑ i = 1 N α T ( i ) \sum_{i=1}^N\alpha_T(i) i=1NαT(i)

  • (3) 状态转移:

    • 很明显,状态转移图可表示为:
      在这里插入图片描述
    • 因此状态转移方程为: α t + 1 ( i ) = [ ∑ i = 1 N α t ( j ) a j i ] b i ( o t + 1 ) \alpha_{t+1}(i)=[\sum_{i=1}^N\alpha_t(j)a_{ji}]b_{i}(o_{t+1}) αt+1(i)=[i=1Nαt(j)aji]bi(ot+1)
  • (4) 初态: α 1 ( i ) = π i b i ( o 1 ) \alpha_1(i) = \pi_ib_i(o_1) α1(i)=πibi(o1)

2、复杂度

很明显,在每一个时间 t t t,我们需要花费 O ( N 2 ) O(N^2) O(N2)的时间求解新状态。故总的复杂度为 O ( T N 2 ) O(TN^2) O(TN2)

三、后向算法

1、方法

既然从前向后防止重复子问题计算可以优化复杂度,那么从后往前是否可以呢?
来看两种可能的不可知状态序列: I 1 = ( 雨天 , 晴 天 , 雨 天 , 晴 天 ) , I 2 = ( 晴天 , 晴 天 , 雨 天 , 晴 天 ) I_1=(\textbf{雨天},晴天,雨天,晴天), I_2=(\textbf{晴天},晴天,雨天,晴天) I1=(雨天)I2=(晴天)

在两种情况下,后三天的计算过程是一样的。因此我们可以通过定义状态保存后三天的计算结果以简化计算。

来到动态规划方法的求解步骤:

  • (1) 定义状态(也称后向概率): β t ( i ) = P ( o t + 1 , o t + 2 , . . . , o T ∣ i t = q i , λ ) \beta_t(i)=P(o_{t+1}, o_{t+2}, ..., o_T| i_t=q_i, \lambda) βt(i)=P(ot+1,ot+2,...,oTit=qi,λ)为(1)给定马尔科夫模型 λ \lambda λ。(2)定义在时刻t状态为 q i q_i qi的条件下。(3)从 t + 1 t+1 t+1 T T T的部分观测序列为 ( o t + 1 , o t + 2 , . . . , o T ) (o_{t+1}, o_{t+2},...,o_T) (ot+1,ot+2,...,oT)。的概率。

个人疑惑:
(1) 为什么后向概率将 q i q_i qi定义在前提上?(毕竟前向概率是定义在结果上的)。
(2) 为什么 β t ( i ) \beta_t(i) βt(i)的观测序列是从 o t + 1 o_{t+1} ot+1开始的?
个人思考:
这是为了与前向概率配合,其实如果不考虑和前向概率配合,直接将 i t + 1 = q i i_{t+1}=q_{i} it+1=qi定义在前提上也是可以的。(如何配合在后方会讲到)


  • (2) 目标状态: ∑ i = 1 N π i b i ( o 1 ) β 1 ( i ) \sum_{i=1}^N\pi_ib_i(o_1)\beta_1(i) i=1Nπibi(o1)β1(i)

  • (3) 状态转移:

    • 状态转移图:
      在这里插入图片描述
    • 状态转移方程:
      β t ( i ) = ∑ j = 1 N a i j b j ( o t + 1 ) β t + 1 ( j ) = ∑ j = 1 N p ( i t + 1 = q j ∣ i t = q i ) p ( o t + 1 ∣ i t + 1 = q j , λ ) p ( o t + 2 , . . . , o T ∣ i t + 1 = q j , λ ) = ∑ j = 1 N p ( i t + 1 = q j ∣ i t = q i ) p ( o t + 1 , o t + 2 , . . . , o T ∣ i t + 1 = q j , λ ) 独 立 性 = p ( o t + 1 , o t + 2 , . . . , o T ∣ i t = q i , λ ) 全 概 率 公 式 = β t ( i ) \begin{aligned} \beta_t(i) &= \sum_{j=1}^Na_{ij}b_j(o_{t+1)}\beta_{t+1}(j) \\ &=\sum_{j=1}^Np(i_{t+1}=q_j|i_{t}=q_i)p(o_{t+1}|i_{t+1}=q_j,\lambda)p(o_{t+2}, ..., o_T|i_{t+1}=q_j, \lambda) \\ &= \sum_{j=1}^Np(i_{t+1}=q_j|i_{t}=q_i)p(o_{t+1},o_{t+2}, ..., o_T|i_{t+1}=q_j, \lambda) 独立性 \\ &= p(o_{t+1},o_{t+2}, ..., o_T|i_{t}=q_i, \lambda) 全概率公式 \\ &= \beta_t(i) \end{aligned} βt(i)=j=1Naijbj(ot+1)βt+1(j)=j=1Np(it+1=qjit=qi)p(ot+1it+1=qj,λ)p(ot+2,...,oTit+1=qj,λ)=j=1Np(it+1=qjit=qi)p(ot+1,ot+2,...,oTit+1=qj,λ)=p(ot+1,ot+2,...,oTit=qi,λ)=βt(i)
  • (4) 初态: β T ( i ) = 1 \beta_T(i)=1 βT(i)=1.(当 t = T t=T t=T,只有条件,没有结论,意义为"在此条件下发生什么都行"的概率)。

2、复杂度

很明显,复杂度和前向算法一样,都为 O ( T N 2 ) O(TN^2) O(TN2)

四、概率与期望值的计算

1、管辖范围

首先使用图示明确前向概率和后向概率的管辖范围:前向概率 α t ( i ) \alpha_t(i) αt(i)(红色), 后向概率: β t ( i ) \beta_t(i) βt(i)(绿色), 绿色箭头表示以 i t = q i i_t=q_i it=qi为前提:
在这里插入图片描述

2、计算

(1)、定义:给定模型 λ \lambda λ和观测 O O O, 在时刻 t t t处于状态 q i q_i qi的概率。记:
γ t ( i ) = P ( i t = q i ∣ O , λ ) \gamma_t(i)=P(i_t=q_i|O, \lambda) γt(i)=P(it=qiO,λ)

  • γ t ( i ) = P ( i t = q i , O ∣ λ ) P ( O ∣ λ ) \gamma_t(i) = \frac{P(i_t=q_i, O|\lambda)}{P(O|\lambda)} γt(i)=P(Oλ)P(it=qi,Oλ)
  • P ( i t = q i , O ∣ λ ) = α t ( i ) β t ( i ) P(i_t=q_i, O|\lambda) = \alpha_t(i)\beta_t(i) P(it=qi,Oλ)=αt(i)βt(i)(根据上方图示很容易直观想象出)
  • γ t ( i ) = α t ( i ) β t ( i ) ∑ j = 1 N α t ( j ) β t ( j ) \gamma_t(i) = \frac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^N\alpha_t(j)\beta_t(j)} γt(i)=j=1Nαt(j)βt(j)αt(i)βt(i)

(2)、定义: 给定模型 λ \lambda λ和观测 O O O, 在时刻 t t t处于状态 q i q_i qi,在时刻 t + 1 t+1 t+1处于状态 q j q_j qj的概率。记:
ξ t ( i , j ) = P ( i t = q i , i t + 1 = q j ∣ O , λ ) \xi _t(i,j)=P(i_t=q_i,i_{t+1}=q_j|O, \lambda) ξt(i,j)=P(it=qi,it+1=qjO,λ)

  • ξ t ( i , j ) = P ( i t = q i , i t + 1 = q j , O ∣ λ ) P ( O ∣ λ ) \xi_t(i,j) = \frac{P(i_t=q_i,i_{t+1}=q_j,O|\lambda)}{P(O|\lambda)} ξt(i,j)=P(Oλ)P(it=qi,it+1=qj,Oλ)
  • P ( i t = q i , i t + 1 = q j , O ∣ λ ) = α t ( i ) β t + 1 ( j ) b j ( o t + 1 ) a i j P(i_t=q_i, i_{t+1}=q_j,O|\lambda) = \alpha_t(i)\beta_{t+1}(j)b_j(o_{t+1})a_{ij} P(it=qi,it+1=qj,Oλ)=αt(i)βt+1(j)bj(ot+1)aij(根据上方图示很容易直观想象出)
  • ξ t ( i , j ) = α t ( i ) β t + 1 ( j ) b j ( o t + 1 ) a i j ∑ i = 1 N ∑ j = 1 N α t ( i ) β t + 1 ( j ) b j ( o t + 1 ) a i j \xi_t(i,j) = \frac{\alpha_t(i)\beta_{t+1}(j)b_j(o_{t+1})a_{ij}} {\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)\beta_{t+1}(j)b_j(o_{t+1})a_{ij}} ξt(i,j)=i=1Nj=1Nαt(i)βt+1(j)bj(ot+1)aijαt(i)βt+1(j)bj(ot+1)aij

(3)、一些有用的期望值

  • 在观测 O O O下状态 i i i出现的期望: ∑ t = 1 T γ t ( i ) \sum_{t=1}^T\gamma_t(i) t=1Tγt(i)
  • 在观测 O O O下由状态 i i i转移的期望: ∑ t = 1 T − 1 γ t ( i ) \sum_{t=1}^{T-1}\gamma_t(i) t=1T1γt(i)
  • 在观测 O O O下由状态 i i i转移到状态 j j j的期望值: ∑ t = 1 T − 1 ξ t ( i , j ) \sum_{t=1}^{T-1}\xi_t(i,j) t=1T1ξt(i,j)

五、参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值