概率计算方法
在上节中的最后,我们提出了隐马尔可夫模型的三个基本问题,本节我们就来介绍解决第一个问题(概率计算问题)的方法。在本节中,我们将介绍三种方法:直接计算法、前向算法以及后向算法。
直接计算方法
直接计算法方法在概念上或者说理论上是可行的但是在计算上是不可行的,因为它的计算复杂度太高,计算代价太大。
给定模型和观测序列
,计算观测序列O出现的概率
。最直接的方法就是按照概率公式直接计算。通过列举所有可能的长度为T的状态序列
,求各个状态序列I与观测序列
的联合概率
,然后对所有可能的状态序列求和,得到
。也就是说要求
,我们先求
,而又有:
所以,我们首先要分别计算:
状态序列的概率是:
对固定的状态序列,观测序列
的概率是
:
O和I同时出现的联合概率为:
最后,对所有可能的状态序列I求和,得到观测序列O的概率
对于个数为N的状态集合,所有可能的长度为T的状态序列的情况有种,而每一种可能的长度为T的状态序列对应着一种长度为T的观测序列,所以这种直接暴力法的计算复杂很高,是
阶的,这种算法是不可行的。下面我们将介绍两种有效的算法:前向-后向算法(forward-backword algorithm)。
前向算法
前向概率 给定隐马尔可夫模型,定义到时刻t部分观测序列为
,且状态为
的概率为前向概率,记作
可以地推地求得前向概率
算法的解释(重要)
前向算法,步骤(1)初始化前向算概率,是初始时刻的状态和观测
的联合概率。步骤(2)是前向概率的递推公式,计算到时刻t+1部分观测序列为
且在时刻t+1处于状态qi的前向概率,如下图所示:
在式子(10.16)的方括弧里,既然
所以
如下图所示,前向算法实际上是基于“状态序列的路径结构”递推计算的算法。
前向算法高效的关键是其局部计算前向概率,然后利用路径结构将前向概率“递推”到全局,得到
例子讲解前向计算
下面给出一个书本上的例子,对于进一步理解前向算法还是很有帮助的。
后向算法
如果你已经理解了前向算法就不难理解后向算法,简单来说,前向算法呢就是在根据t时刻之前的状态和观测来求解t时刻的状态和观测(从前向后递推),而后向算法呢就是根据t时刻之后的状态和观测来求解t时刻的状态和观测(从后向前递推),递推的原理是一致的。
后向概率 给定隐马尔可夫模型,定义在时刻t状态为qi的条件下,从t+1时刻到T时刻的部分观测序列为
的概率为后向概率,记作
可以利用递推的方式求得后向概率
算法解释
步骤(1)初始化后向概率,对最终时刻所有状态qi规定。步骤(2)是后向概率的递推公式。如图下图所示。为了计算在时刻t状态为qi条件下时刻t+1之后的观测序列为
的后向概率
,只需要考虑时刻t+1所有可能的N个状态
的转移概率(即
项),以及在此状态下的观测
的观测概率(即
项),然后考虑状态qj之后的观测序列的后向概率(即
项)。
步骤(3)求的思路与步骤(2)一致,只是初始概率
代替转移概率。
一些概率与期望计算
我们来解释一下上图中红色框里的公式。表示在给定模型
的条件下,求观测序列为O且在时刻t处于状态qi的概率。通过上述的前向概率和后向概率可知,
表示了到时刻t部分观测序列为
,且状态为
的概率,后向概率
表示了在时刻t状态为qi的条件下,从t+1时刻到T时刻的部分观测序列为
的概率【即一个确定了t时刻前的概率,一个确定了t时刻后的概率】,所以有:
本节内容到此结束了,主要讲解了解决基本问题一的三种方法,主要的高效方法是前向-后向算法。希望看到这里,能有一个比较清晰地认识。
<完>
所谓的不平凡就是平凡的N次幂。
----By Ada