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

一、問題回顧

隱馬爾可夫的預測問題,也稱爲解碼問題。即給定模型λ=(A,B,Π)和觀測序列O={o1,o2,…oT},求給定觀測序列條件下,最可能出現的對應的狀態序列。這個問題的求解需要用到基於動態規劃的維特比算法,我會在隱馬爾可夫模型系列的第四篇博客中講解。

二、近似算法

在講解維特比算法之前,我們先來看一種求解該問題的近似算法。
問題:在給定觀測序列 O = {o1, o2,…, oT} 的條件下,求最優的狀態序列 I* = { i1* , i2*, …, iT*}。
近似算法的思路:分別求出每一時刻 t 對應的最優狀態 it*
求解:
用 γt( i )表示在觀測序列O給定條件下,時刻 t 的狀態爲 qi 的概率,即 γt( i ) = P( it = qi | O;λ),可以用前面博客中講到的前向概率和後向概率將 γt( i )表示如下:
在這裏插入圖片描述
在這裏插入圖片描述
由 γt( i )的表達式就可以看出:
在這裏插入圖片描述
分別計算每一時刻 t 的最優狀態,最終就可以得到最優狀態序列 I* = { i1* , i2*, …, iT*}。
弊端:
只能保證每一時刻 t 對應的狀態是最優的,但不能保證最後得到的整體狀態序列是最優的,而且最終的狀態序列可能都不會發生。

三、維特比算法

維特比算法用動態規劃來解決隱馬爾可夫的預測問題,思路是:先迭代求解出最後時刻 T 的最優狀態 iT* ,然後利用 T-1 時刻所記錄的內容找到時刻 T 的最優狀態爲 iT* 時所對應的T-1 時刻的最優狀態 iT-1* ,就這樣向前回溯就能得到整個最優的狀態序列。

維特比算法用到兩個符號,如下所示:
(1) δt( i )
δt( i )表示 t 時刻的狀態爲 qi 且部分狀態序列和部分觀測序列發生的概率, 即 δt( i ) = P(it=qi, it-1, it-2 ,…, i1, ot, ot-1 ,…, o1;λ),其中 t=1,2,…,T;i=1,2,…,N。可見,使得δt( i )取最大值的 狀態qi 就是時刻 t 的最優狀態,而且δt( i )考慮了 t 時刻之前的所有狀態及其對應的觀測,所以比近似算法要更可靠一點。
轉換:
爲了方便引入下一個符號表示,這裏將 δt( i ) 再做一下適當的轉換, 即 δt( i ) = P( it=qi, it-1=qj, it-2 ,…, i1, ot, ot-1 ,…, o1;λ),其中 t=1,2,…,T;i=1,2,…,N;j=1,2,…,N,使得δt( i )取最大值的 狀態qi 依然是時刻 t 的最優狀態,只是每一次在計算δt( i ) 時需要額外計算 it-1=qj的N種情況。
解釋如下:
如果用原來的式子計算 δt( 1 ),即δt( 1 ) = P(it=q1, it-1, it-2 ,…, i1, ot, ot-1 ,…, o1;λ),只需計算一次即可,所以從δt( 1 )計算到δt( N )只需計算N次,然後從這N個概率中選一個最大的概率所對應的狀態作爲時刻 t 的最優狀態。

如果用 δt( 1 ) = P( it=q1, it-1=qj, it-2 ,…, i1, ot, ot-1 ,…, o1;λ) 來計算,則需要計算N次,因爲 qj 有N種情況,所以從δt( 1 )計算到δt( N )需要計算N2 次,然後從這N2個概率中選一個最大的概率所對應的狀態作爲時刻 t 的最優狀態。看似是將問題變得更麻煩了,其實是爲了利用上一次計算的結果,比如在計算δt( 2 ) 時會用到δt( 1 ) 的結果,這一來可以減少計算,方便我們導出遞推公式。它還有另外一個好處就是回溯,我將會在下文進行解釋。
遞推公式:
因爲 δt( i ) = P( it=qi, it-1=qj, it-2 ,…, i1, ot, ot-1 ,…, o1;λ),所以δt+1( i ) = P( it+1=qi, it=qj, it-2 ,…, i1, ot+1, ot-1 ,…, o1;λ),即:
在這裏插入圖片描述
(2) Ψt( i )
用 Ψt( i )來記錄當時刻 t 的最優狀態爲 qi 時,時刻 t-1 的狀態。符合 Ψt( i )是專門爲了回溯設立的,所以它和δt( i )有着類似的表達式,即:
在這裏插入圖片描述
利用上面將到的符號 δt( i ) 可以將Ψt( i )化簡爲:
在這裏插入圖片描述
當qi是 t 時刻的最優狀態時,使得Ψt( i )概率達到最大的 qj 就是 t-1 時刻的最優狀態,我們用Ψt( i )記錄下此時的 qj

維特比算法流程:
輸入:模型λ=(A, B,Π )和觀測序列 O = {o1,o2,…oT}
輸出:最優狀態序列 I* = { i1* , i2*, …, iT*}
(1)初始化
δ1(i) = πibi(o1) ,i=1,2,…,N
Ψ1( i ) = 0,i=1,2,…,N
(2)遞推,對於 t = 2, 3, … , T,計算
在這裏插入圖片描述
(3)當 t = T 時終止
此時我們已經求得δT(i) ,i=1,2,…,N,所以得到 T 時刻的最優狀態爲:
在這裏插入圖片描述
(4)回溯,對於t = T-1, T-2, … , 1
我們已經求出來 iT* ,所以用 ΨT( iT*) 就可以得到 T-1 時刻的最優狀態。通過下式可以求出時刻 T-1 到 時刻 1 的最優狀態:
在這裏插入圖片描述
最終可以得到最優的狀態序列 I* = { i1* , i2*, …, iT*}。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章