一、基本情况
前面有章节介绍过前向算法的理论,似乎很难理解,本文将用一个实例来说明前向算法的应用,先回顾下前向算法的理论
1、 一个隐马尔可夫模型 (HMM) 是由一个五元组描述的:
λ =( N,M ,A,B, π )
其中:
N = {q1,...qN}:状态的有限集合
M = {v1,...,vM}:观察值的有限集合
A = {aij},aij = P(qt = Sj |qt-1 = Si):状态转移概率矩阵
B = {bjk}, bjk = P(Ot = vk | qt = Sj):观察值概率分布矩阵
π = {πi},πi = P(q1 = Si):初始状态概率分布
2、 给定HMM模型 λ = (A, B, π) ,则观察序列 O=O1,O2,…OT 可由以下步骤产生:
1.根据初始状态概率分布π= πi,选择一初始状态q1=Si;
2.设t=1;
3.根据状态 Si的输出概率分布bjk,输出Ot=vk;
4.根据状态转移概率分布aij,转移到新状态qt+1=Sj;
5.设t=t+1,如果t<T,重复步骤3、4,否则结束。
二、HMM的三个基本问题
令 λ = {π,A,B} 为给定HMM的参数,
令 O = O1,...,OT 为观察值序列,则有关于隐马尔可夫模型(HMM)的三个基本问题:
1.评估问题:对于给定模型,求某个观察值序列的概率P(O|λ) ;
2.解码问题:对于给定模型和观察值序列,求可能性最大的状态序列maxQ{P(Q|O,λ)};
3.学习问题:对于给定的一个观察值序列O,调整参数λ,使得观察值出现的概率P(O|λ)最大。
三、前向算法解决评估问题
1、基本步骤:
定义前向变量:“在时间步t, 得到t之前的所有明符号序列, 且时间步t的状态是Si”这一事件的概率,
记为(t, i) = P(o1,…,ot, qt = Si|λ)
采用动态规划算法,复杂度O(N2T)
2、算法过程:
四、算法应用
HMM模型如下,试根据前向算法计算产生观察符号序列O={ABAB}的概率。
初始概率矩阵π=(1,0,0),即开始处于状态1。按照前向算法公式,我们依次递推解出
t(i) 。解法如下:
1、当t=1时,
2、当t=2时:
3、当t=3时:
4、当t=4时:
所以最终有:
P(O| λ)= 4(1)+ 4(2)+ 4(3)=0.0717696 即观察序列O由HMM模型产生的概率
大家动笔一步一步按照实例来,就能理解前向算法的应用了,学过动态规划的就知道,上面这个过程其实用到了动态规划的思想,因此可以用动态规划的图示来看此问题:
五、结语
通过理论了解算法的思想和背景,通过实例了解算法的使用,这个是很重要的,反过来通过使用思考算法的思想,也会恍然大悟。。。