隱馬爾可夫模型(二)維特比算法 隱馬爾可夫模型

接着上篇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次計算!

這就是維特比算法

相關文章
相關標籤/搜索