HMM学习笔记—001--前向算法(forward algorithm)


整理自博客:从一个实例中学习HMM前向算法


HMM在实际应用中主要用来解决3类问题:

  1. 评估问题
    给定观测序列 o=o1o2o3ot 和模型参数 λ=(A,B,π) ,怎么样有效计算这一个观测的概率。(Forward Algorithm,前向算法;Backforward Algorithm,后向算法)

  2. 解码问题
    给定观测序列 o=o1o2o3ot 和模型参数 λ=(A,B,π) ,怎么样寻找满足这种观测序列意义上最优的隐含状态序列 s

  3. 学习问题
    HMM的模型参数λ=(A,B,π)未知,如何求出这3个参数以使观测数据 o=o1o2o3ot 出现的概率尽可能大。


本篇文章只针对问题一


在阐述算法之前,先引入几个符号:
at(i) :表示到第 t 个观测值 ot 时处于状态 i
bi(ox):表示在状态 i 下产生观察值ox的概率。


问题来源

我们要解决的是模型估计问题,即计算概率 P(O|λ) 。可以用如下公式简化:

P(O|λ)=QP(O,Q|λ)
因此,首先要先计算
P(O,Q|λ)=P(O|Q,λ)P(Q|λ)
, 其中,Q 为一给定的状态序列。又有
P(O|Q,λ)=t=1TP(ot|qt,λ)=bq1(o1)bq2(o2)bqT(oT)
, 其中
p(Q|λ)=πqiaq1q2aq(T1)qT
, 所以
P(O,Q|λ)=πq1bq1(o1)aq1q2bq2(o2)aq(T1)qTbqT(oT)
因此,最后求得:
P(O|λ)=QP(O,Q|λ)
=Qπq1bq1(o1)aq1q2bq2(o2)aq(T1)qTbqT(oT)
由此可见,上述计算复杂度非常大,为 2TNT


为了解决上述算法计算量大的问题,前向算法就出现了。


首先定义了一个前向变量 αt(i) ,表示在 t 时刻,到达状态si 的时候,观察到 Ot 的概率。

前向变量 αt(i) αt(i)=P(o1o2ot,qt=i|λ)
初值: α1(i)=P(o1,q1=i)=πibi(o1)

最后有递推关系:

P(O|λ)=i=1NαT(i)


为什么这样就可以简化计算复杂度呢?其原因很简单,因为每一次的 at(i) ,我们都可以用 at1(i) 来计算,就不用重复计算了。如下图所示:
这里写图片描述


举例

题目:HMM模型如下,试通过前向算法计算产生观察符号序列 O={ABAB} 时每个时刻的 αt(i) 和总概率。其中,初始概率矩阵 n=(1,0,0) ,即开始处于状态1。
这里写图片描述

按照上面的公式理论,我们的递推一次解出 at(i) 。解法如下:

t=1 时:
这里写图片描述

t=2 时:
这里写图片描述

t=3 时:
这里写图片描述

t=4 时:
这里写图片描述

所以最后的结果:
P(O|λ)=α4(1)+α4(2)+α4(3)=0.0717679

最后将其计算过程示意图表示如下:
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值