1、HMM问题一:求观测序列问题(直接计算)
首先我们回顾下HMM模型的问题一。这个问题是这样的。我们已知HMM模型的参数λ=(A,B,Π)。其中A是隐藏状态转移概率的矩阵,B是观测状态生成概率的矩阵, Π是隐藏状态的初始概率分布。同时我们也已经得到了观测序列O={o1,o2,...oT},现在我们要求观测序列O在模型λ下出现的条件概率P(O|λ)。
我们可以列举出所有可能出现的长度为T的隐藏序列I={i1,i2,...,iT},分布求出这些隐藏序列与观测序列O={o1,o2,...oT}的联合概率分布P(O,I|λ),这样我们就可以很容易的求出边缘分布P(O|λ)了。
![](https://img.haomeiwen.com/i17895677/9addea20bb801316.png)
![](https://img.haomeiwen.com/i17895677/1957d9135154336c.png)
虽然上述方法有效,但是如果我们的隐藏状态数N非常多的那就麻烦了,此时我们预测状态有NT种组合,算法的时间复杂度是O((2T-1)N^T),因此对于一些隐藏状态数极少的模型,我们可以用暴力求解法来得到观测序列出现的概率,但是如果隐藏状态多,则上述算法太耗时,我们需要寻找其他简洁的算法.
前向后向算法就是来帮助我们在较低的时间复杂度情况下求解这个问题的。
2、用前向算法求HMM观测序列的概率
前向后巷算法是前向算法和后向算法的统称,这两个算法都可以用来求HMM观测序列的概率。我们先来看看前向算法是如何求解这个问题的。
在前向算法中,通过定义“前向概率”来定义动态规划的这个局部状态。什么是前向概率呢?
![](https://img.haomeiwen.com/i17895677/91109b8f76d4b96e.png)
既然是动态规划,我们就要递推了,现在我们假设我们已经找到了在时刻t时各个隐藏状态的前向概率,现在我们需要递推出时刻t+1时各个隐藏状态的前向概率。
从下图可以看出,我们可以基于时刻t时各个隐藏状态的前向概率,再乘以对应的状态转移概率,即αt(j)aji就是在时刻t观测到o1,o2,...ot,并且时刻t隐藏状态qj, 时刻t+1隐藏状态qi的概率。如果将想下面所有的线对应的概率求和,即
![](https://img.haomeiwen.com/i17895677/82fa70dbfbefc8b9.png)
![](https://img.haomeiwen.com/i17895677/fa40d02463ce113b.png)
![](https://img.haomeiwen.com/i17895677/be9f0fe76a0e5811.png)
前向概率公式推导:
![](https://img.haomeiwen.com/i17895677/a9d58eaebd25d078.png)
总结一下前向算法:
输入:HMM模型λ=(A,B,Π),观测序列O=(o1,o2,...oT)
输出:观测序列概率P(O|λ)
1)计算时刻1的各个隐藏状态前向概率:
![](https://img.haomeiwen.com/i17895677/75d74a419c19c796.png)
-
递推时刻2,3,...T时刻的前向概率:
-
由联合概率分布和边缘概率分布的关系,计算最终结果:
3. HMM前向算法求解实例
我们的观察集合是:![](https://img.haomeiwen.com/i17895677/cd889285cc4ec409.png)
我们的状态集合是:
![](https://img.haomeiwen.com/i17895677/24ec28520a7dc2a2.png)
而观察序列和状态序列的长度为3.
初始状态分布为:
![](https://img.haomeiwen.com/i17895677/9cdbd4c615468d69.png)
状态转移概率分布矩阵为:
![](https://img.haomeiwen.com/i17895677/b819b31b908633fb.png)
观测状态概率矩阵为:
![](https://img.haomeiwen.com/i17895677/9aa64e625bfb0a8c.png)
球的颜色的观测序列:
![](https://img.haomeiwen.com/i17895677/938761e69e5cca33.png)
按照我们上一节的前向算法。首先计算时刻1三个状态的前向概率:
时刻1是红色球,隐藏状态是盒子1的概率为:
![](https://img.haomeiwen.com/i17895677/67f146b82ee6446d.png)
隐藏状态是盒子2的概率为:
![](https://img.haomeiwen.com/i17895677/ea002ae6d6342916.png)
隐藏状态是盒子3的概率为:
![](https://img.haomeiwen.com/i17895677/303e889d8fdaa3f1.png)
现在我们可以开始递推了,首先递推时刻2三个状态的前向概率:
时刻2是白色球,隐藏状态是盒子1的概率为:
![](https://img.haomeiwen.com/i17895677/01c9ca566ec7b84c.png)
隐藏状态是盒子2的概率为:
![](https://img.haomeiwen.com/i17895677/5f46cac93ddc8cf2.png)
隐藏状态是盒子3的概率为:
![](https://img.haomeiwen.com/i17895677/929e8a23a1c50251.png)
继续递推,现在我们递推时刻3三个状态的前向概率: 时刻3是红色球,隐藏状态是盒子1的概率为:
![](https://img.haomeiwen.com/i17895677/853ffcbe9bd045ed.png)
隐藏状态是盒子2的概率为:
![](https://img.haomeiwen.com/i17895677/fd5e575df2c322ac.png)
隐藏状态是盒子3的概率为:
![](https://img.haomeiwen.com/i17895677/078c6f7c8bda0797.png)
最终我们求出观测序列:O={红,白,红}的概率为:
![](https://img.haomeiwen.com/i17895677/5368130391322a7a.png)
下一章节将介绍后向算法
网友评论