viterbi算法

维特比算法(Viterbi Algorithm)用于寻找最可能的隐藏状态序列,尤其适用于解决隐马尔科夫模型(HMM)的问题。通过递归降低计算复杂度,计算局部概率delta's和反向指针phi's,确定最可能的隐藏状态序列。算法在每个时间步利用前一时刻的局部概率计算当前时刻的最优路径,最后通过反向指针回溯找到整个序列的最佳隐藏状态路径。维特比算法在处理包含噪音的数据时表现良好,具有较高的鲁棒性。
摘要由CSDN通过智能技术生成

维特比算法(Viterbi Algorithm)

标签(空格分隔): 未分类


维特比算法(Viterbi Algorithm)

viterbi算法用于寻找最可能的隐藏状态序列(Finding most probable sequence of hidden states)
对于一个特殊的隐马尔科夫模型(HMM)及一个相应的观察序列,我们常常希望能找到生成此序列最可能的隐藏状态序列。

穷举搜索

  我们使用下面这张网格图片来形象化的说明隐藏状态和观察状态之间的关系:
关系
其中,[dry, damp, soggy]是观察序列。
如果根据观察序列找到最可能的隐藏序列呢?
我们可以列出所有可能的隐藏状态序列,然后计算对于每个组合相应的观察序列的概率,取概率最大的隐藏序列作为最可能的隐藏状态序列。最可能的隐藏状态序列是使下面这个概率最大的组合:
      Pr(观察序列|隐藏状态的组合)
  例如,对于网格中所显示的观察序列,最可能的隐藏状态序列是下面这些概率中最大概率所对应的那个隐藏状态序列:
  Pr(dry,damp,soggy | sunny,sunny,sunny), Pr(dry,damp,soggy | sunny,sunny,cloudy), Pr(dry,damp,soggy | sunny,sunny,rainy), … . Pr(dry,damp,soggy | rainy,rainy,rainy)
  这种方法是可行的,但是通过穷举计算每一个组合的概率找到最可能的序列是极为昂贵的。与前向算法类似,我们可以利用这些概率的时间不变性来降低计算复杂度。

使用递归降低复杂度

  给定一个观察序列和一个隐马尔科夫模型(HMM),我们将考虑递归地寻找最有可能的隐藏状态序列。我们首先定义局部概率delta,它是到达网格中的某个特殊的中间状态时的概率。然后,我们将介绍如何在t=1和t=n(>1)时计算这些局部概率。
  这些局部概率与前向算法中所计算的局部概率是不同的,因为它们表示的是时刻t时到达某个状态最可能的路径的概率,而不是所有路径概率的总和。

局部概率delta‘s和局部最佳途径

  考虑下面这个网格,它显示的是天气状态及对于观察序列干燥,湿润及湿透的一阶状态转移情况:
  
  对于网格中的每一个中间及终止状态,都有一个到达该状态的最可能路径。举例来说,在t=3时刻的3个状态中的每一个状态(sunny, cloudy, rainy)都有一个到达此状态的最可能路径,或许是这样的:
  
  我们称这些路径局部最佳路径(partial best paths)。其中每个局部最佳路径都有一个相关联的概率,即局部概率或delta。与前向算法中的局部概率不同,delta是到达该状态(最可能)的一条路径的概率。
  因而delta(i,t)是t时刻到达状态i的所有序列概率中最大的概率,而局部最佳路径是得到此最大概率的隐藏状态序列。对于每一个可能的i和t值来说,这一类概率(及局部路径)均存在。
  特别地,在t=T时每一个状态都有一个局部概率和一个局部最佳路径。这样我们就可以通过选择此时刻包含最大局部概率的状态及其相应的局部最佳路径来确定全局最佳路径(最佳隐藏状态序列)。

计算t=1时刻的局部概率delta‘s

  我们计算的局部概率delta是作为最可能到达我们当前位置的路径的概率(已知的特殊知识如观察概率及前一个状态的概率)。当t=1的时候,到达某状态的最可能路径明显是不存在的,因为我们已经给了各个状态的情况;但是,我们使用t=1时的所处状态的初始概率及相应的观察状态k1的观察概率计算局部概率delta;即
   
  ——与前向算法类似,这个结果是通过初始概率和相应的观察概率相乘得出的。

.计算t>1时刻的局部概率delta‘s

  现在我们来展示如何利用t-1时刻的局部概率delta计算t时刻的局部概率delta。
  考虑如下的网格:

  我们考虑计算t时刻到达状态X(n个状态中的一种,每个状态都要计算)的最可能的路径;这条到达状态X的路径将通过t-1时刻的状态A,B或C中的某一个。
  因此,最可能的到达状态X的路径将是下面这些路径的某一个
       (状态序列),…,A,X
       (状态序列),…,B,X
或      (状态序列),…,C,X
  我们想找到路径末端是AX,BX或CX并且拥有最大概率的路径。
  回顾一下马尔科夫假设:给定一个状态序列,一个状态发生的概率只依赖于前n个状态。特别地,在一阶马尔可夫假设下,状态X在一个状态序列后发生的概率只取决于之前的一个状态,即
   Pr (到达状态A最可能的路径) .Pr (X | A) . Pr (观察状态 | X)
  与此相同,路径末端是AX的最可能的路径将是到达A的最可能路径再紧跟X。相似地,这条路径的概率将是:
   Pr (到达状态A最可能的路径) .Pr (X | A) . Pr (观察状态 | X)
  因此,到达状态X的最可能路径概率是:
  
  也就是说,取的是A,B,C转到X的概率中最大的那个。
  其中第一项是t-1时刻的局部概率delta,第二项是状态转移概率以及第三项是观察概率。
  泛化上述公式,就是在t时刻,观察状态是kt,到达隐藏状态i的最佳局部路径的概率是:

其中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值