维特比算法

一、前言

之前介绍过马尔科夫模型(参考),提到马尔科夫的三个基本问题:

1、概率计算问题

2、学习问题

3、预测问题

这三个问题里面,比较常见是预测问题,也称为解码。在上面链接的文章里谈到有关这个问题的中文分词模型,下面给出一些解法。

二、基本介绍

1、概率模型

我们知道隐马尔科夫模型是一个概率模型,概率模型的基本思想可以参考:语言模型

传统的概率统计模型自由参数数目随着序列长度的增加指数级增长,这种复杂度是无法接受的,所以针对传统统计概率模型已经提出许多方法:n-gram,神经概率等。

2、隐马尔科夫

与n-gram等方法相似,隐马尔科夫也是针对自由参数过多进行了优化。

假设观测序列为s,传统概率模型中P(s)是一个基于所有历史信息,即s序列的条件概率,随着序列长度增加而复杂度指数级增长。隐马尔科夫模型则提出一个隐藏的马尔科夫链的概念,它认为观测序列s是由隐藏的马尔科夫链随机生成观测序列的过程。而这个马尔科夫链序列可取值的范围是有限的,且相对s的可取值范围非常小。

同时,认为隐藏马尔科夫链的状态只与前一个状态有关,观测序列的取值只由马尔科夫链的状态决定。

所以,给定隐马尔科夫模型的参数及相应的观察序列,我们常常希望能够找到生成观察序列的最可能的隐藏状态序列。

三、解法

假设有观测序列={dry,damp,soggy},隐藏状态={Sunny,Cloudy,Rainy},HMM模型参数={pi,A,B}。

1、穷举搜索


如上图所示,穷举搜索就是列举出所有可能的隐藏状态序列,计算在每一种隐藏状态序列的情况下,观测序列出现的概率,选取最大概率的隐藏序列。但是这种办法复杂度非常的高。

2、维特比算法

与穷举法不同,维特比算法是基于动态规划思想的隐马尔科夫模型解法。动态规划原理提到,假设存在一条最优路径,那么将该路径切分成N段,那么这N段小路径都分别是该环境下的最优路径,否则就存在着其他未知小路径,能组成一个比最优路径还更好的路径,这显然不成立。

基于上述原理,我们只需要从时刻t=1开始,递归的计算子安时刻t状态为i的各条部分路径的最大概率,直至得到时刻t=T的状态为i的各条路径的最大概率,便可以得到最优路径。

(1)计算t=1时刻的概率

这里可以直接使用初始概率pi及发射概率B计算得到,


(2)计算t>1时刻的概率

对于t时刻的每一个状态i,它的概率均可以由t-1时刻的局部概率δ,状态转移概率A,及发射概率B得到,


上面公式得到局部最大概率,第一项是t-1时刻的局部概率,第二项是状态转移矩阵,第三项是发射概率。

四、实战

假设HMM模型,隐藏状态={1,2,3},观测序列={红,白,红},模型参数如下,求解最大概率隐藏状态序列。


1、计算t=1时刻的概率

已知t=1时刻,观测为红,分别计算在在状态1,2,3的条件下得到观测的概率:


由上图,此时取状态=3时,得到最大局部概率,但是,这个节点并不一定会是最优路径的节点。

2、计算t>1时刻的概率

在t=2时刻观测到白,t=3时刻观测到红,分别计算观测概率如下:


如上图,在t=2时,对于状态s=1,分别计算由t-1时刻的状态s={1,2,3}的局部概率计算得到的t时刻的局部概率,得到最大的t时刻概率,以此类推。

3、递归结束

在t=3时刻,可以得到最大概率p=0.0147,此时可以得到最优路径的终点是i_3 = 3.

4、回溯最优路径

由最优路径的终点3开始,向前找到之前时刻的最优点:

(1)在t=2时刻,因为i_3 = 3,状态3的最大概率来源于状态3(上图没有显示出来,但可以参考状态1的计算过程)

(2)在t=1时刻,因为i_2 = 3,也可以得到最大概率来源于状态3

最后得到最优路径为(3,3,3)

五、参考

1、《统计学习方法》  李航

2、http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-1

3、http://blog.csdn.net/ch1209498273/article/details/53864036

发布了114 篇原创文章 · 获赞 129 · 访问量 39万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览