隱馬爾可夫模型(三)
預測算法
還記得隱馬爾可夫模型的三個問題嗎?本篇介紹第三個問題:預測問題,即給定模型參數和觀測序列,求最有可能的狀態序列,有如下兩種算法。
近似算法
在每個時刻t選出當前最有可能的狀態 it,從而得到一個狀態序列。
給定隱馬爾可夫模型參數 λ 和長度為T的觀測序列O,在時刻 t 處於狀態qi的概率為
(1)
其中使用了前向算法和後向算法,於是最有可能的狀態的下表 i 為
(2)
於是得到狀態序列I*=(i1*,i2*,...,iT*)
近似算法雖然計算簡單,但是無法保證狀態序列整體是最優的,也就是說在這個模型參數 λ 和觀測序列O下,近似算法得到的狀態序列可能不是出現概率最大的那個狀態序列(即,P(I*
維特比算法
維特比算法實際使用了動態規劃(dynamic programming)求概率最大路徑(最優路徑),這條路徑就是這裏的狀態序列。
根據動態規劃原理,如果最優路徑在時刻 t 經過結點 it*,那麽從結點it*到結點iT*之間的局部路徑也是最優的。因為如果it*到iT*之間如果有另一個更優的局部路徑,那麽將它與i1*到it*之間的最優局部路徑連接起來,就形成一條完整的更優路徑,這與之前的最優路徑矛盾。
上面這段話的意思是,到了時刻t,無論之前的局部路徑選擇如何,此後時刻t到時刻T之間的選擇必須是最優的。
根據這一原理,我們可以從t=1時刻開始,遞推計算在時刻t狀態為 i 的各條局部路徑的最大概率,這意味著最優局部路徑
引入兩個變量
定義時刻 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分詞
隱馬爾可夫模型(三)