隐马尔可夫模型学习笔记(二)

前言
前文所述,要理解隐马尔可夫首先需要梳理几个步骤:

1. 如何理解概念
2. 什么叫转移概率矩阵和生成概率矩阵
3. 模型公式
5. 公式的求解过程
6. python代码串接
五、公式的求解过程

上一篇中,我们提到HMM可以解决的三个经典问题,我们现在就看下问题一
评估可观测序列概率。即给定模型 λ = ( A , B , η ) \lambda = (A, B,\eta) λ=(A,B,η)和观测序列 𝑂 = 𝑜 1 , 𝑜 2 , . . . 𝑜 𝑇 𝑂={𝑜_{1},𝑜_{2},...𝑜_{𝑇}} O=o1,o2,...oT,计算在模型𝜆下可观测序列𝑂出现的概率𝑃(𝑂|𝜆), 如上述例子的骰子,如投3次,可观测的点数序列1,6,3 的概率是多少?

5.1 例举法

求上述问题的时,我们可以暴力求解,如下
在这里插入图片描述
上图只是我们在例句当骰子的不可观测序列为D6->D8->D8的情况,还有其他的不可观测序列,就不一一列出来了,下面是用公式的形式展示出来。
我们可以列举出所有可能出现的长度为𝑇的不可观测序列 𝐼 = 𝑖 1 , 𝑖 2 , . . . , 𝑖 𝑇 𝐼={𝑖_{1},𝑖_{2},...,𝑖_{𝑇}} I=i1,i2,...,iT,分布求出这些不可观测序列与可观测序列 𝑂 = 𝑜 1 , 𝑜 2 , . . . 𝑜 𝑇 𝑂={𝑜_{1},𝑜_{2},...𝑜_{𝑇}} O=o1,o2,...oT的联合概率分布𝑃(𝑂,𝐼|𝜆),这样我们就可以很容易的求出边缘分布𝑃(𝑂|𝜆)了,公式如下:
在这里插入图片描述
其中, 联合分布可以拆分成下面个式子:
在这里插入图片描述
其中, 由于任意一个不可观测序列 𝐼 = 𝑖 1 , 𝑖 2 , . . . , 𝑖 𝑇 𝐼={𝑖_{1},𝑖_{2},...,𝑖_{𝑇}} I=i1,i2,...,iT出现的概率是:
在这里插入图片描述
然后,我们先固定一个不可观测序列 𝐼 = 𝑖 1 , 𝑖 2 , . . . , 𝑖 𝑇 𝐼={𝑖_{1},𝑖_{2},...,𝑖_{𝑇}} I=i1,i2,...,iT下,求可观测序列 𝑂 = 𝑜 1 , 𝑜 2 , . . . 𝑜 𝑇 𝑂={𝑜_{1},𝑜_{2},...𝑜_{𝑇}} O=o1,o2,...oT出现的概率:
在这里插入图片描述
所以,综上所述,我们得到在这里插入图片描述
上面公式就是我们把所有的组合都相乘起来,那么可观测状态就有 𝑁 𝑇 𝑁^{𝑇} NT种组合方式,我们得到的算法的时间复杂度是 𝑂 ( 𝑇 𝑁 𝑇 ) 𝑂(𝑇𝑁^{𝑇}) O(TNT)阶的。对于一些不可观测状态数极少的模型,我们可以用这种求解法来得到观测序列出现的概率,但是如果不可观测状态多,则上述算法太耗时了,所以我们还需要找到另一种方法解题。

5.2 前向后向算法

前向后向算法是前向算法和后向算法的统称,这两个算法都可以用来求HMM观测序列的概率

5.2.1 前向算法

概念:前向算法本质上属于动态规划的算法,也就是我们要通过找到局部状态递推的公式,这样一步步的从子问题的最优解拓展到整个问题的最优解。

那么在前向算法中,通过定义“前向概率”来定义动态规划的这个局部状态(时刻t之前)。什么是前向概率呢, 其实定义很简单:定义时刻 𝑡 时不可观测状态为 𝑞 k , k ∈ N 𝑞_{k}, k\in N qk,kN, 观测状态的序列为 O t = 𝑜 1 , 𝑜 2 , . . . 𝑜 𝑡 O_t=𝑜_1,𝑜_2,...𝑜_𝑡 Ot=o1,o2,...ot的概率为前向概率。记为:
在这里插入图片描述

既然是动态规划,我们就要递推了,现在我们假设我们已经找到了在时刻𝑡时各个不可观测状态的前向概率(也就是说上面公式只表达了不可观测状态为 𝑞 k 𝑞_{k} qk的前向概率),现在我们需要递推出时刻𝑡+1时各个不可观测状态的前向概率。
在这里插入图片描述

上图
1)我们可以基于时刻𝑡时各个(N个)不可观测状态的前向概率 φ t ( k ) \varphi_t(k) φt(k),再乘以对应的不可观测的状态转移概率 a k l a_{kl} akl,即:
在这里插入图片描述
就是在时刻 𝑡 可观测到 O t = 𝑜 1 , 𝑜 2 , . . . 𝑜 𝑡 O_t=𝑜_1,𝑜_2,...𝑜_𝑡 Ot=o1,o2,...ot,其中 i t = 𝑞 k , k ∈ N i_t=𝑞_k, k\in N it=qk,kN i 𝑡 + 1 = q l , l ∈ N i_{𝑡+1}=q_l , l\in N it+1=ql,lN概率,(只把时刻t的不可观测的 q k q_k qk都考虑了)

2)如果想将下面所有的线对应的概率求和,即:
在这里插入图片描述

就是在时刻𝑡可观测到 O t = 𝑜 1 , 𝑜 2 , . . . 𝑜 𝑡 O_t=𝑜_1,𝑜_2,...𝑜_𝑡 Ot=o1,o2,...ot,其中 i 𝑡 + 1 = q l , l ∈ N i_{𝑡+1}=q_{l}, l\in N it+1=ql,lN概率,(都把时刻t的各个不可观测的 q N q_N qN都考虑了)

3)继续一步,由于可观测状态 o t + 1 o_{t+1} ot+1只依赖于𝑡+1时刻不可观测状态 q l q_{l} ql, 这样
在这里插入图片描述
就是在在时刻𝑡+1可观测到 O t + 1 = 𝑜 1 , 𝑜 2 , . . . 𝑜 𝑡 + 1 O_{t+1}={𝑜_1,𝑜_2,...𝑜_{𝑡+1}} Ot+1=o1,o2,...ot+1,其中 i 𝑡 + 1 = q l i_{𝑡+1}=q_{l} it+1=ql

而这个概率,恰恰就是时刻𝑡+1对应的不可观测状态 l l l的前向概率(看上面定义前向概率的公式),这样我们得到了前向概率的递推关系式如下:
在这里插入图片描述

我们的动态规划从时刻1开始,到时刻𝑇结束,由于 φ T ( K ) \varphi_{T}(K) φT(K)表示在时刻𝑇观测序列为 O T = 𝑜 1 , 𝑜 2 , . . . 𝑜 T O_T=𝑜_1,𝑜_2,...𝑜_T OT=o1,o2,...oT,并且时刻𝑇不可观测状态 q K q_K qK的概率,我们只要将所有不可观测状态对应的概率相加,即:
在这里插入图片描述
就得到了在时刻𝑇观测序列为 O T = 𝑜 1 , 𝑜 2 , . . . 𝑜 T O_T=𝑜_1,𝑜_2,...𝑜_T OT=o1,o2,...oT概率

下面总结下前向算法。

输入: HMM模型𝜆=(𝐴,𝐵,Π),观测序列 O T = ( 𝑜 1 , 𝑜 2 , . . . 𝑜 T ) O_T=(𝑜_1,𝑜_2,...𝑜_T) OT=(o1,o2,...oT)
输出: 观测序列概率𝑃(𝑂|𝜆)

  1. 计算时刻1的各个隐藏状态前向概率:
    在这里插入图片描述
  2. 递推时刻2,3,…𝑇时刻的前向概率:
    在这里插入图片描述
  3. 计算最终结果:
    在这里插入图片描述
    从递推公式可以看出,我们的算法时间复杂度是𝑂(𝑇𝑁2),比暴力解法的时间复杂度𝑂(𝑇𝑁𝑇)少了几个数量级。
    (有个实际例子请看参考资料3. HMM前向算法求解实例)
5.2.1 后向算法

后向算法和前向算法非常类似,都是用的动态规划,唯一的区别是选择的局部状态不同,后向算法用的是“后向概率”,那么后向概率是如何定义的? 定义时刻t时不可观测状态为 q k q_k qk, 从时刻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+1时各个不可观测状态的后向概率 β t + 1 ( l ) \beta_{t+1}(l) βt+1(l),现在我们需要递推出时刻t时各个不可观测状态的后向概率。
在这里插入图片描述
上图
1)我们可以计算出观测状态的序列为 o t + 2 , o t + 3 , . . . o T o_{t+2},o_{t+3},...o_T ot+2,ot+3,...oT, t时隐藏状态为 q k q_k qk, 时刻t+1隐藏状态为 q l q_l ql的概率:
在这里插入图片描述

2)接着可以得到观测状态的序列为 o t + 1 , o t + 2 , . . . o T o_{t+1},o_{t+2},...o_T ot+1,ot+2,...oT, t时隐藏状态为 q k q_k qk, 时刻t+1隐藏状态为 q l q_l ql的概率:
在这里插入图片描述
3)把下面所有线对应的概率加起来,我们可以得到观测状态的序列为 o t + 1 , o t + 2 , . . . o T o_{t+1},o_{t+2},...o_T ot+1,ot+2,...oT, t时隐藏状态为 q k q_k qk的概率为
在这里插入图片描述
这个概率即为时刻t的后向概率 ,这样我们得到了后向概率的递推关系式如下:
在这里插入图片描述
现在我们总结下后向算法的流程,注意下和前向算法的相同点和不同点:

输入: HMM模型λ=(A,B,Π),观测序列O=(o1,o2,…oT)
输出: 观测序列概率P(O|λ)

  1. 初始化时刻T的各个隐藏状态后向概率:
    在这里插入图片描述
  2. 递推时刻T−1,T−2,…1时刻的后向概率:
    在这里插入图片描述
  3. 计算最终结果:
    在这里插入图片描述

此时我们的算法时间复杂度仍然是O(TN2)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值