1. 程式人生 > >隱馬爾可夫模型(三)

隱馬爾可夫模型(三)

image 之前 下標 如何 最大路 mage 局部最優 .com 紅色

預測算法

還記得隱馬爾可夫模型的三個問題嗎?本篇介紹第三個問題:預測問題,即給定模型參數和觀測序列,求最有可能的狀態序列,有如下兩種算法。

近似算法

在每個時刻t選出當前最有可能的狀態 it,從而得到一個狀態序列。

給定隱馬爾可夫模型參數 λ 和長度為T的觀測序列O,在時刻 t 處於狀態qi的概率為

技術分享 (1)

其中使用了前向算法和後向算法,於是最有可能的狀態的下表 i 為

技術分享 (2)

於是得到狀態序列I*=(i1*,i2*,...,iT*)

近似算法雖然計算簡單,但是無法保證狀態序列整體是最優的,也就是說在這個模型參數 λ 和觀測序列O下,近似算法得到的狀態序列可能不是出現概率最大的那個狀態序列(即,P(I*

|O,λ) 可能不是最大值)

維特比算法

維特比算法實際使用了動態規劃(dynamic programming)求概率最大路徑(最優路徑),這條路徑就是這裏的狀態序列。

根據動態規劃原理,如果最優路徑在時刻 t 經過結點 it*,那麽從結點it*到結點iT*之間的局部路徑也是最優的。因為如果it*到iT*之間如果有另一個更優的局部路徑,那麽將它與i1*到it*之間的最優局部路徑連接起來,就形成一條完整的更優路徑,這與之前的最優路徑矛盾。

上面這段話的意思是,到了時刻t,無論之前的局部路徑選擇如何,此後時刻t到時刻T之間的選擇必須是最優的。

根據這一原理,我們可以從t=1時刻開始,遞推計算在時刻t狀態為 i 的各條局部路徑的最大概率,這意味著最優局部路徑

經過結點 it*。當t=T時的最大概率即為最優完整路徑的概率,最優完整路徑的終結點為iT*。因為我們計算的是在時刻 t 狀態為 i 的局部概率,時刻t之前的各時刻狀態不指定,這是為了減小計算量,在時刻 t 時,共計算 t * N 次概率,其中 N 為所有狀態數。得到終結點iT*後,為了找到最優完整路徑的其他結點,從終結點iT*開始,由後向前逐步求得節點iT-1*, ... , i1*

引入兩個變量

定義時刻 t 狀態為i的所有局部路徑(i1,i2,...,it)中概率最大值為

技術分享 (3)

即,指定 t 時刻的狀態為 i,選擇不同的狀態組合(i1,i2,...,it-1),使得上式中的概率最大,於是遞推公式為,

技術分享

令it=j,於是

技術分享 (4)

其中,

技術分享

仔細研究δt(i)的含義,其實就是到達 t 時刻為止,觀測序列已經確定為(o1,o2,...,ot),對應的狀態序列(i1,i2,...,it)並且假設 it 的值為 i,O,I聯合概率最大的值,設對應的狀態為(i1,i2,...it=i),於是這就是到達 t 時刻狀態為 i 的局部最優路徑,註意 限定了 t 時刻狀態為 i。當t=T時,δT(i)就是狀態為 i 的O,I聯合概率最大值,那麽假設 i = m 時δT(i)值達到最大技術分享,那麽狀態序列(i1,i2,...,iT-1,iT=m)就是所求的最有可能出現的狀態序列。

好了,給出下圖,進行一些可能是無用(然而我就是喜歡啰嗦,攤手~)的分析:

技術分享

如圖,橫軸方向表示時刻 t,縱軸方向表示狀態 i,結點之間的箭頭表示轉移,結點(t,j)對應的局部最優概率為δt(j),那麽從時刻 t 轉移到 時刻 t+1時,如果時刻 t+1 的狀態為 i,那麽時刻 t 的狀態可以是 1<=j<=N,這N個狀態到底使用哪個狀態呢,不難想到,對時刻 t 來說,某個狀態 j 的局部最優概率為δt(j),狀態 j 到 狀態 i 的轉移概率為 aji,自然地,我們對 1<= j<=N,尋找 δt(j)*aji的最大值,比如圖中那個紅色的箭頭對應δt(j)*aji的最大值,t 時刻其他狀態轉移到 t+1 時刻的 i 狀態的箭頭全被否定掉,如圖中叉叉掉的箭頭(註意僅叉掉 到(t+1,i)的結點的連線,到 t+1 時刻其他狀態的結點不能這麽貿然叉掉,而是同 i 狀態下一樣的選擇)。這樣再乘以一個與 t 時刻狀態 j 無關的一個值 bi(ot+1)(也就是說無論 t 時刻選擇什麽狀態,這個值都不變),就得到δt+1(i),那麽當 t+1 = T 時,即最終時刻,只要遍歷一下 t+1 時刻的所有狀態 i,找出 max(δt+1(i)) 對應的那個 i 的值就就是完整的最優路徑的終結點 (T,i)。倒過來推,那麽δt(j)是如何確定的呢?顯然類似地,選擇結點(t-1,k),使得 δt-1(k)*at-1,t 的值最大,於是就這樣一直倒推,直到起始時刻 1,而我們知道 δ1(i)=πibi(o1)。

假設我們每個時刻每個狀態形成一個結點,那麽每個結點的局部最優概率形成的路線也許就是下圖這個樣子,

技術分享

也就是每個結點都有對應的局部最優概率值,且由上一時刻的某個狀態轉移過來。而上一時刻某個狀態的結點也可能轉移到下一時刻的多個狀態結點。

好吧,費話了一大篇,還不知道講清楚沒,悲催~

定義時刻 t 的狀態為 i 的所有局部路徑(i1,i2,...,it)中概率最大值對應的那個局部路徑的第 t-1 個結點為

技術分享 (5)

即,第 t-1 個結點為 it-1*,t-1時刻的狀態就是使上式值最大對應的那個狀態下標 j。

為什麽這麽做就可以呢?

再次看一下上面的那個圖,因為圖中兩相鄰時刻標記的是 t 和 t+1 時刻,我就使用圖中的標記,其實本質是一樣的。

看一下圖,從 t 到 t+1 的狀態,我們選擇的是什麽樣的轉移(什麽樣的紅色箭頭)?已知 t+1 時刻的狀態為 i,那麽轉移的選擇是根據 δt(j)*aji 的最大值選擇的,其中 j 表示 t 時刻的某個狀態,自然要求使得 δt(j)*aji 最大所對應的那個 j 作為 t 時刻的狀態,依次逆推下去,直到 t = 1,得到第一個觀測狀態,如此,形成我們要求的概率最大的狀態序列。

實際在程序中,上述的這種逆推其實並不需要真正地逆推,只要在遞推計算δt(i)的時候,將 max[δt-1(j)aji] 所對應的那個 j 值保存到一個狀態下標的列表中即可。

ref

統計學習方法,李航

代碼

可參考jieba分詞

隱馬爾可夫模型(三)