隐马尔可夫模型(二)维特比算法 隐马尔可夫模型

接着上篇html

隐马尔可夫模型

隐马尔可夫的三个问题,上文提了问题1的三种解决办法,本文接着讲问题2算法

问题2,即在给出一串观测序列的状况下和已知HMM模型的状况下,找到最可能的隐性状态序列post

问题2的解决:url

维特比算法spa

 

1 简介

维特比算法是一个特殊但应用最广的动态规划算法,它是针对最短路径问题而提出的。凡是使用隐含马尔可夫模型描述的问题均可以用维特比算法来解码,包括今天的数字通讯、语音识别、机器翻译、拼音转汉字、分词等。翻译

 

2 示例

 下面举一个比较简单的例子作说明:求S到E的最短路径。以下图(各点之间距离不相同):htm

 

咱们知道,要找到S到E之间最短路径,最容易想到的方法就是穷举法。也就是把全部可能的路径都例举出来。从S走向A层共有4种走法,从A层走向B层又有4种走法,从B层走向C层又有4种走法,而后C层走向E点只有一种选择。因此最终咱们穷举出了4X4X4=64种可能。
显然,这种方法一定可行。 但在实际的应用当中,对于数量极其庞大的结点数和边数的图,其计算复杂度也将会变得很是大,而计算效率也会随之下降。
 

 

所以,这里选择使用一种基于动态规划的方式来寻找最佳路径。
所谓动态规划。其核心就是“动态”的概念,把大的问题细分为多个小的问题,基于每一步的结果再去寻找下一步的策略,经过每一步走过以后的局部最优去寻找全局最优。这样解释比较抽象,下面直接用回刚刚的例子说明。以下图:blog

 

 

首先,咱们假设S到E之间存在一条最短路径,且这条路径通过C2点,那么咱们便必定可以肯定从S到C2的64条(4X4X4=64)子路径当中,该子路径必定最短。(证实:反证法。若是S到C2之间存在一条更短的子路径,那么即可以用它来代替原先的路径,而原先的路径显然就不是最短了,这与原假设自相矛盾)。
同理,咱们也能够得出从S到B2点为两点间最短子路径的结论。
这时候:既然如此,咱们计算从S点出发到点C2的最短路径,是否是只要考虑从S出发到B层全部节点的最短路径就能够。由于,从S到E的“全局最短”路径一定通过在这些“局部最短”子路径。没错!这就是上面说起到的经过局部最优的最优去寻找全局最优,问题的规模被不断缩小!

 

 

 


回顾以前的分析:咱们计算从S起到C2点的最短路径时候只须要考虑从S出发到B层全部节点的最短路径,B层也如是。对B2来讲,一共有4条路线能够到达,分别是A1→B2,A2→B2,A3→B2,A4→B2。咱们须要作的就是把A2→B2这条最短路线保留,而其余3条删除掉(由于根据以上的分析,它们不可能构成全程的最短路线)。OK,来到这里,咱们会发现一个小“漏洞”,这段S→A2→B2→C2→E的路线只是我一厢情愿的假设,最短路径不必定是通过以上这些点。因此,咱们要把每层的每一个节点都考虑进来。get

如下是具体的作法:
step1:从点S出发。对于第一层的3个节点,算出它们的距离d(S,A1),d(S,A2),d(S,A3),d(S,A4),由于只有一步,因此这些距离都是S到它们各自的最短距离。it

step2:对于B层的全部节点(B1,B2,B3,B4),要计算出S到它们的最短距离。咱们知道,对于特定的节点B2,从S到它的路径能够通过A层的任何一个节点(A1,A2,A3,A4)。对应的路径长就是d(S,B2)=d(S,Ai)+d(Ai,B2)(其中i=1,2,3,4)。因为A层有4个节点(即i有4个取值),咱们要一一计算,而后找到最小值。这样,对于B层的每一个节点,都须要进行4次运算,而B层有4个节点,因此共有4X4=16次运算。

step3:这一步是该算法的核心。咱们从step2计算得出的结果只保留4个最短路径值(每一个节点保留一个)。那么,若从B层走向C层来讲,该步骤的基数已经再也不是4X4,而是变成了4!也就是说,从B层到C层的最短路径只须要基于B层得出的4个结果来计算。这种方法一直持续到最后一个状态,每一步计算的复杂度为相邻两层的计算复杂度为4X4乘积的正比!再通俗点说,链接这两两相邻层的计算符合变成了“+”号,取代了原先的“X”号。用这种方法,只需进行4X4X2=32次计算!

这就是维特比算法

相关文章
相关标签/搜索