隱馬爾可夫模型(Hidden Markov Model,HHM),作為一種統計模型,描述了含有隱含未知數的馬爾可夫過程。其難點是從可觀察的參數中確定該過程的隱含參數。
用一個擲骰子的例子來引入隱馬爾可夫模型。
假設現有三種不同的骰子,第一種是四面體(稱這個骰子為D4),可擲出1,2,3,4這4個數值,每個數值被擲出的概率為1/4;第二種是六面體(稱D6),可擲出1,2,3,4,5,6這6個數值,每個數值被擲出的概率為1/6;同樣,第三種是八面體(稱D8),可以以1/8的概率擲出1到8中的其中的一個數。
如果每次可用任意一種骰子投擲,那么在投擲10次后,我們可能會得到這樣一串順序數字:3 5 4 6 2 8 4 6 1 3,而所得到的這串數字稱為可見狀態鏈。現在我們要根據這一串順序數字,求相應的骰子序列能投擲出這一串數字。能擲出這樣一串順序數字的骰子序列可能為:D6 D8 D8 D6 D4 D8 D6 D6 D4 D8,而稱這對應的骰子序列成為隱含狀態鏈。
圖1-1 擲骰子對應的隱馬爾可夫模型
圖1-2 隱含狀態鏈中狀態間的轉換
在隱馬爾可夫模型中,隱含狀態鏈的狀態之間存在一個轉換概率。比如上面的例子,下一次擲骰子選到任意一種骰子的概率都為1/3,不過通常轉換概率不是均勻的。而在可見狀態鏈中狀態間沒有轉換概率,不過有一個從隱含狀態鏈中的隱含狀態轉化到可見狀態鏈中可見狀態的輸出概率。比如上面6面體骰子擲出6的概率為1/6,而擲出8的概率為0。
至此,隱馬爾可夫模型,有N個隱含狀態集合,對應有M個可見狀態集合
,且其還有三個要素組成模型
:(集合和狀態序列鏈是有區別的,狀態序列鏈是從集合中選取狀態組成了一個序列鏈條)
- 狀態轉移概率矩陣A,
,
即t時刻狀態
條件下,t+1時刻為狀態
的概率
- 隱含狀態的輸出概率矩陣B,
,
即t時刻下狀態
輸出為狀態
的概率
-
初始狀態的概率向量
,
,為初始時刻,狀態為
的概率
同樣,根據隱馬爾可夫模型的這些要素,再結合可見狀態序列鏈
與隱含狀態序列鏈
的是否已知情況,可產生三個基本的問題:
1.已知已知模型
,計算能產生某一種給定的可見狀態鏈
的概率
2.已知模型
和某一種可見狀態鏈
,求能最大可能產生出這次可見狀態序列對應隱含狀態序列
,即使的概率最大
3.給出大量的可見狀態鏈
,推算出模型的三個要素A,B,
參數,使
這三種問題分別有其對應的解決方法:
第一種問題的解決方法 -- 向前-向后算法。
向前算法,首先先初始化向前概率,初始N個隱含狀態
和產生對應的可見狀態
的聯合概率
,再利用向前公式
遞推到最后一刻各個隱含狀態
能產生對應可見狀態
的概率
,最后再總和
便能得到。
同理,向后算法,則是從后往前推出能產生對應可見狀態鏈
的概率。
向前和向后算法是一種累計概率的算法,即求有多少種可能的隱含狀態序列能產生對應可見狀態序列鏈
占N種隱含狀態T次排列組合所產生隱含狀態鏈數量的比。
第二種問題的解決方法--維比特算法。
維比特算法是一種求最優路徑的算法,即求某一隱含狀態鏈
能最大可能的產生出對應已知的可見狀態鏈
。
維比特算法和上述的向前算法有相似之處,都是當前的狀態往后推,不同的是,向前算法求的是累計概率,而維比特算法求的是最大概率。
圖1-3 向前算法和維比特算法
在時間復雜度上,維比特算法的時間復雜度為O(T*N^2)。
第三種問題的解決方法有兩種,分別是監督學習和baum-welch算法。
監督學習,給定大量個長度相同的可見序列鏈和隱含狀態序列鏈
作為訓練集,使用極大似然估計法來估計模型的參數
種的三個要素。
轉移概率
的估計,樣本中t時刻處於狀態
,t+1時刻轉移到狀態
的頻數為
,則
。同樣,利用相同的方式計算發射概率
和初始狀態概率
。
baum-welch算法則是利用EM算法得到模型參數的估計式,然后通過迭代進一步優化模型的參數。
向前向后算法鏈接:https://zhuanlan.zhihu.com/p/41912745