隐马尔可夫模型(四)——维特比算法

一、问题回顾

隐马尔可夫的预测问题,也称为解码问题。即给定模型λ=(A,B,Π)和观测序列O={o1,o2,…oT},求给定观测序列条件下,最可能出现的对应的状态序列。这个问题的求解需要用到基于动态规划的维特比算法,我会在隐马尔可夫模型系列的第四篇博客中讲解。

二、近似算法

在讲解维特比算法之前,我们先来看一种求解该问题的近似算法。
问题:在给定观测序列 O = {o1, o2,…, oT} 的条件下,求最优的状态序列 I* = { i1* , i2*, …, iT*}。
近似算法的思路:分别求出每一时刻 t 对应的最优状态 it*
求解:
用 γt( i )表示在观测序列O给定条件下,时刻 t 的状态为 qi 的概率,即 γt( i ) = P( it = qi | O;λ),可以用前面博客中讲到的前向概率和后向概率将 γt( i )表示如下:
在这里插入图片描述
在这里插入图片描述
由 γt( i )的表达式就可以看出:
在这里插入图片描述
分别计算每一时刻 t 的最优状态,最终就可以得到最优状态序列 I* = { i1* , i2*, …, iT*}。
弊端:
只能保证每一时刻 t 对应的状态是最优的,但不能保证最后得到的整体状态序列是最优的,而且最终的状态序列可能都不会发生。

三、维特比算法

维特比算法用动态规划来解决隐马尔可夫的预测问题,思路是:先迭代求解出最后时刻 T 的最优状态 iT* ,然后利用 T-1 时刻所记录的内容找到时刻 T 的最优状态为 iT* 时所对应的T-1 时刻的最优状态 iT-1* ,就这样向前回溯就能得到整个最优的状态序列。

维特比算法用到两个符号,如下所示:
(1) δt( i )
δt( i )表示 t 时刻的状态为 qi 且部分状态序列和部分观测序列发生的概率, 即 δt( i ) = P(it=qi, it-1, it-2 ,…, i1, ot, ot-1 ,…, o1;λ),其中 t=1,2,…,T;i=1,2,…,N。可见,使得δt( i )取最大值的 状态qi 就是时刻 t 的最优状态,而且δt( i )考虑了 t 时刻之前的所有状态及其对应的观测,所以比近似算法要更可靠一点。
转换:
为了方便引入下一个符号表示,这里将 δt( i ) 再做一下适当的转换, 即 δt( i ) = P( it=qi, it-1=qj, it-2 ,…, i1, ot, ot-1 ,…, o1;λ),其中 t=1,2,…,T;i=1,2,…,N;j=1,2,…,N,使得δt( i )取最大值的 状态qi 依然是时刻 t 的最优状态,只是每一次在计算δt( i ) 时需要额外计算 it-1=qj的N种情况。
解释如下:
如果用原来的式子计算 δt( 1 ),即δt( 1 ) = P(it=q1, it-1, it-2 ,…, i1, ot, ot-1 ,…, o1;λ),只需计算一次即可,所以从δt( 1 )计算到δt( N )只需计算N次,然后从这N个概率中选一个最大的概率所对应的状态作为时刻 t 的最优状态。

如果用 δt( 1 ) = P( it=q1, it-1=qj, it-2 ,…, i1, ot, ot-1 ,…, o1;λ) 来计算,则需要计算N次,因为 qj 有N种情况,所以从δt( 1 )计算到δt( N )需要计算N2 次,然后从这N2个概率中选一个最大的概率所对应的状态作为时刻 t 的最优状态。看似是将问题变得更麻烦了,其实是为了利用上一次计算的结果,比如在计算δt( 2 ) 时会用到δt( 1 ) 的结果,这一来可以减少计算,方便我们导出递推公式。它还有另外一个好处就是回溯,我将会在下文进行解释。
递推公式:
因为 δt( i ) = P( it=qi, it-1=qj, it-2 ,…, i1, ot, ot-1 ,…, o1;λ),所以δt+1( i ) = P( it+1=qi, it=qj, it-2 ,…, i1, ot+1, ot-1 ,…, o1;λ),即:
在这里插入图片描述
(2) Ψt( i )
用 Ψt( i )来记录当时刻 t 的最优状态为 qi 时,时刻 t-1 的状态。符合 Ψt( i )是专门为了回溯设立的,所以它和δt( i )有着类似的表达式,即:
在这里插入图片描述
利用上面将到的符号 δt( i ) 可以将Ψt( i )化简为:
在这里插入图片描述
当qi是 t 时刻的最优状态时,使得Ψt( i )概率达到最大的 qj 就是 t-1 时刻的最优状态,我们用Ψt( i )记录下此时的 qj

维特比算法流程:
输入:模型λ=(A, B,Π )和观测序列 O = {o1,o2,…oT}
输出:最优状态序列 I* = { i1* , i2*, …, iT*}
(1)初始化
δ1(i) = πibi(o1) ,i=1,2,…,N
Ψ1( i ) = 0,i=1,2,…,N
(2)递推,对于 t = 2, 3, … , T,计算
在这里插入图片描述
(3)当 t = T 时终止
此时我们已经求得δT(i) ,i=1,2,…,N,所以得到 T 时刻的最优状态为:
在这里插入图片描述
(4)回溯,对于t = T-1, T-2, … , 1
我们已经求出来 iT* ,所以用 ΨT( iT*) 就可以得到 T-1 时刻的最优状态。通过下式可以求出时刻 T-1 到 时刻 1 的最优状态:
在这里插入图片描述
最终可以得到最优的状态序列 I* = { i1* , i2*, …, iT*}。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值