前面一篇介绍了隐马尔科夫模型的基本的一些概念,篇主要介绍三个问题的具体解决方法。如果对于概念不太理解的可以参考前一篇博客HMM模型基本概念,本篇博客主要介绍对于三个问题的主要推倒,内容主要基于统计学习方法这本书,但是在上面加上了一些自己的理解。下面一一介绍三个问题以及解决的办法。
概率问题
给定模型 λ=(A,B,π) λ = ( A , B , π ) 和观测序列 O=(o1,o2,...,oT) O = ( o 1 , o 2 , . . . , o T ) ,计算在模型 λ λ 下观测序列 O O 出现的概率 。
直接计算法
直接计算法说白了就是暴力计算每一种情况的可能。对于所有可能的状态序列 I I 求和,得到观测序列 的概率 P(O|λ) P ( O | λ ) ,即:
这种计算的缺点在于计算量很大,时间复杂度为 O(TNT) O ( T N T ) 。
前向后向算法
前向后向算法的核心是利用动态规划的思想减少计算的时间复杂度。
图1
前向算法
前向概率 给定隐马尔可夫模型 λ λ ,定义到时刻 t t 部分观测序列为 且状态为 qi q i 的概率为前向概率,记作
然后可以递推求出前向概率 αt(i) α t ( i ) 以及观测序列 P(O|λ) P ( O | λ )
盒子 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
红球数 | 5 | 3 | 6 | 8 |
白球数 | 5 | 7 | 4 | 2 |
那么这个前向概率到底是什么意思呢?估计好多人还是看的一脸懵逼。还是以之前的盒子与球模型,观测序列为 O={ 红,红,白,白,红} O = { 红 , 红 , 白 , 白 , 红 } ,假设 t=3,i=1 t = 3 , i = 1 ,后面的序列我们不知道,那么 αt(i)=P(O={ 红,红,白},i=1|λ) α t ( i ) = P ( O = { 红 , 红 , 白 } , i = 1 | λ ) 。即前面观测序列为[红,红,白],第三次丑的白色球是从盒子1中抽出的概率。
下面是对前向算法的形式化推导。
输入:隐马尔科夫模型 λ λ ,观测序列为 O O ;
输出:观测序列概率 ;
1.初值
即求第一个观测值对应的状态为 i i 的概率
2.递推,对t=1,2,…,T-1,
3.终止
上面这段公式推导的思想为,先求观测值为 o1 o 1 的概率,然后在前面的基础上求观测值为 o2 o 2 对应的概率,依次递推,最后求观测值为 ot o t 的概率。然后每一种概率对应了不同的状态, αt(i) α t ( i ) 则表示在状态为 i i 时的概率,而 ,然后然后对 i i 求和就能够得到上述(3)式。其递推过程图如下:
图2
前向算法就是利用这种方式将时间复杂度从 降低到 O(TN2) O ( T N 2 ) ,至于降低的原因是减少直接利用了前面的计算结果,避免了每一次都需要重新计算。
还是以盒子与球模型为例, λ=(A,B,π) λ = ( A , B , π ) ,状态集合 Q={ 1,2,3} Q = { 1 , 2 , 3 } ,观测集合 V={ 红,白} V = { 红 , 白 } .
设 T=3 T = 3 , O={ 红,白,红} O = { 红 , 白 , 红 } ,求 P(O|λ) P ( O | λ )
1.计算初值
2.递推计算
同理可以得到