七、前向-后向算法(Forward-backward algorithm)

根据观察序列生成隐马尔科夫模型(Generating a HMM from a sequence of obersvations)

  与HMM模型相关的“有用”的问题是评估(前向算法)和解码(维特比算法)——它们一个被用来测量一个模型的相对适用性,另一个被用来推测模型隐藏的部分在做什么(“到底发生了”什么)。可以看出它们都依赖于隐马尔科夫模型(HMM)参数这一先验知识——状态转移矩阵,混淆(观察)矩阵,以及pi向量(初始化概率向量)。
  然而,在许多实际问题的情况下这些参数都不能直接计算的,而要需要进行估计——这就是隐马尔科夫模型中的学习问题。前向-后向算法就可以以一个观察序列为基础来进行这样的估计,而这个观察序列来自于一个给定的集合,它所代表的是一个隐马尔科夫模型中的一个已知的隐藏集合。
  一个例子可能是一个庞大的语音处理数据库,其底层的语音可能由一个马尔可夫过程基于已知的音素建模的,而其可以观察的部分可能由可识别的状态(可能通过一些矢量数据表示)建模的,但是没有(直接)的方式来获取隐马尔科夫模型(HMM)参数。
  前向-后向算法并非特别难以理解,但自然地比前向算法和维特比算法更复杂。由于这个原因,这里就不详细讲解前向-后向算法了(任何有关HMM模型的参考文献都会提供这方面的资料的)。
  总之,前向-后向算法首先对于隐马尔科夫模型的参数进行一个初始的估计(这很可能是完全错误的),然后通过对于给定的数据评估这些参数的的价值并减少它们所引起的错误来重新修订这些HMM参数。从这个意义上讲,它是以一种梯度下降的形式寻找一种错误测度的最小值。
  之所以称其为前向-后向算法,主要是因为对于网格中的每一个状态,它既计算到达此状态的“前向”概率(给定当前模型的近似估计),又计算生成此模型最终状态的“后向”概率(给定当前模型的近似估计)。 这些都可以通过利用递归进行有利地计算,就像我们已经看到的。可以通过利用近似的HMM模型参数来提高这些中间概率进行调整,而这些调整又形成了前向-后向算法迭代的基础。

注:关于前向-后向算法,原文只讲了这么多,后继我将按自己的理解补充一些内容。

未完待续:前向-后向算法2

本文翻译自:http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/main.html
部分翻译参考:隐马尔科夫模型HMM自学

转载请注明出处“我爱自然语言处理”:www.52nlp.cn

本文链接地址:https://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-1

作者 52nlp

《HMM学习最佳范例七:前向-后向算法1》有2条评论
  1. 您好,您的关于马尔科夫的文章令我获益匪浅,我目前正在学习这方面的内容,打算将它运用于图像处理,但遇到的一个问题是观察序列和状态序列不知怎么确定。请问您有没有关于这方面的实际例子源代码?能给我学习一下吗?

    [回复]

    52nlp 回复:

    关于图像处理不太清楚,不过开源的HMM有很多,可以看看这篇文章: 几种不同程序语言的HMM版本 https://www.52nlp.cn/several-different-programming-language-version-of-hmm

    [回复]

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注