JS技术

隐马尔可夫模型(HMM)攻略 - likelet的专栏 - 博客频道 - CSDN.NET likelet的专栏 new(6)

字号+ 作者:H5之家 来源:H5之家 2015-12-14 15:19 我要评论( )

但在序列某个地方有噪声干扰的时候,某些方法可能会和正确答案相差的较远。但是Viterbi算法会查看整个序列来决定最可能的终止状态,然后通过后向指针来找到之前的状态,这对忽略孤立的噪声非常有用。 Viterbi算法提

  但在序列某个地方有噪声干扰的时候,某些方法可能会和正确答案相差的较远。但是 Viterbi 算法会查看整个序列来决定最可能的终止状态,然后通过后向指针来找到之前的状态,这对忽略孤立的噪声非常有用。

  Viterbi 算法提供了一个根据可观察序列计算隐藏序列的很高效的方法,它利用递归来降低计算复杂度,并且使用之前全部的序列来做判断,可以很好的容忍噪声。

  在计算的过程中,这个算法计算每一个时刻每一个状态的部分概率,并且使用一个后向指针来记录达到当前状态的最大可能的上一个状态。最后,最可能的终止状态就是隐藏序列的最后一个状态,然后通过后向指针来查找整个序列的全部状态。

  (三) 根据观察到的序列集来找到一个最有可能的 HMM。 

  在很多实际的情况下,HMM 不能被直接的判断,这就变成了一个学习问题,因为对于给定的可观察状态序列 O 来说,没有任何一种方法可以精确地找到一组最优的 HMM 参数 λ 使 P(O | λ) 最大,于是人们寻求使其局部最优的解决办法,而前向后向算法(也称为Baum-Welch算法)就成了 HMM 学习问题的一个近似的解决方法。

  前向后向算法首先对于 HMM 的参数进行一个初始的估计,但这个很可能是一个错误的猜测,然后通过对于给定的数据评估这些参数的的有效性并减少它们所引起的错误来更新 HMM 参数,使得和给定的训练数据的误差变小,这其实是机器学习中的梯度下降的思想。

  对于网格中的每一个状态,前向后向算法既计算到达此状态的“前向”概率,又计算生成此模型最终状态的“后向”概率,这些概率都可以通过前面的介绍利用递归进行高效计算。可以通过利用近似的 HMM 模型参数来提高这些中间概率从而进行调整,而这些调整又形成了前向后向算法迭代的基础。

  另外,前向后向算法是 EM 算法的一个特例,它避免了 EM 算法的暴力计算,而采用动态规划思想来解决问题,Jelinek 在其书《Statistical Methods for Speech Recognition》中对前向后向算法与 EM 算法的关系进行了详细描述,有兴趣的读者可以参考这本书。

  类似于上面讲到的前向算法,我们也可以定义后向变量 βt(i) 来计算给定当前隐藏状态 i 时,部分观察序列 ot+1,ot+2,…,oT的概率,即:

  与前向算法类似,我们也可以通过迭代算法有效计算 βt(i),计算公式如下:

  其中

  进一步我们可以发现

  因此

  下面开始介绍前向后向算法。

  首先我们需要定义两个辅助变量,这两个变量可以用前文介绍过的前向变量和后向变量进行定义。

  第一个变量定义为 t 时状态 i 和 t+1 时状态 j 的概率,即

  该变量在网格中所代表的关系如下图所示:

  

  该等式等价于

  利用前向变量和后向变量,上式可以表示为

  第二个变量定义为后验概率,也就是在给定观察状态序列和 HMM 的情况下,t 时状态 i 的概率,即

  利用前向变量和后向变量,上式可以表示为

  因此,下式为在任意时刻状态 i 的期望,也就是从状态 i 转移到观察状态 o 的期望

  同样,下式也就是从状态 i 转移到状态 j 的期望

  我们可以发现定义的这两个变量之间的关系为

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 从头认识java-13.5 利用泛型构建复杂模型 - raylee2007的专栏 - 博客频道 - CSDN.NET r

    从头认识java-13.5 利用泛型构建复杂模型 - raylee2007的专栏 - 博客

    2015-12-15 09:12

网友点评
t