DP方法求解HMM觀測序列概率

1. 引入

現實生活中我們常常遇到這種問題:存在一個可觀察序列(o1 o2, o3, ... ot)和一個隱藏序列(h1 h2, h3, ... ht)(所謂隱藏序列就是我們無法得知的序列)問題是我們如何根據可觀測序列來“猜”隱藏序列呢?這是一個很有實際意義的問題,比如:我們現在用的輸入法,用戶輸入的是拼音字母,輸入法的任務是“猜”你想輸入的漢字;自動醫療診斷系統根據你說的話(%.##..*@)來"猜"你的病情(健康or感冒or發燒)。等等,隱馬爾可夫模型(HHM)的應用場景實在太多了

2. 隱馬爾可夫模型定義

設X是所有可觀測狀態的集合,集合大小為M;Y是所有隱藏狀態的集合,集合大小為N。對于一個長度為T的序列,O(o1 o2, o3, ... oT)為對應的觀測序列;H(h1 h2, h3, ... hT)為對應的隱藏序列。
HMM 做了兩個假設:
(1)馬爾科夫假設:任意時刻的隱藏狀態只依賴于它前一個隱藏狀態。(這個假設不夠準確但是簡化了問題,這個在該文不做討論)如果在t時刻的隱藏狀態為st = hi在t+1時刻的隱藏狀態為st+1 =hj,從t時刻轉到t+1時刻的狀態轉移概率為aij = P(st+1 =hj|st = hi)。這樣就形成了一個大小為N x N的狀態轉移矩陣A = [aij]N x N.
如下圖:i、j、k三個隱藏狀態及對應的狀態轉移概率矩陣:

(2) 觀測獨立性假設。即任意時刻的觀察狀態只僅僅依賴于當前時刻的隱藏狀態,這也是一個為了簡化模型的假設。如果在t時刻的隱藏狀態為st = hi而對應的觀察狀態為pt = oj,則該時刻觀察狀態oj在隱藏狀態 hi下生成的概率為bij = P(pj = oj|si = hi)。這樣就形成了一個大小為N x M的狀態生成矩陣A = [bij]N x M
另外一個HMM模型需要隱藏狀態初始概率分布C=[c(??)]N。其中c(??)=P(s = hi)。因此,HMM模型可以由一個三元組??表示如下:HHM =(A,B,C)


下面我們用一個簡單的實例來描述上面抽象出的HMM模型。這是一個盒子與球的模型,例子來源于李航的《統計學習方法》。假設我們有3個盒子,每個盒子里都有紅色和白色兩種球,這三個盒子里球的數量分別是:


按照下面的方法從盒子里抽球,開始的時候,從第一個盒子抽球的概率是0.2,從第二個盒子抽球的概率是0.4,從第三個盒子抽球的概率是0.4。以這個概率抽一次球后,將球放回。然后從當前盒子轉移到下一個盒子進行抽球。規則是:如果當前抽球的盒子是第一個盒子,則以0.5的概率仍然留在第一個盒子繼續抽球,以0.2的概率去第二個盒子抽球,以0.3的概率去第三個盒子抽球。如果當前抽球的盒子是第二個盒子,則以0.5的概率仍然留在第二個盒子繼續抽球,以0.3的概率去第一個盒子抽球,以0.2的概率去第三個盒子抽球。如果當前抽球的盒子是第三個盒子,則以0.5的概率仍然留在第三個盒子繼續抽球,以0.2的概率去第一個盒子抽球,以0.3的概率去第二個盒子抽球。如此下去,直到重復三次,得到一個球的顏色的觀測序列:??={紅,白,紅}
注意在這個過程中,觀察者只能看到球的顏色序列,卻不能看到球是從哪個盒子里取出的。那么按照我們上一節HMM模型的定義,我們的觀察集合是:??={紅,白},??=2。我們的狀態集合是:??={盒子1,盒子2,盒子3},??=3。而觀察序列和狀態序列的長度為3。初始狀態分布為:C=(0.2,0.4,0.4)。


狀態轉移概率分布矩陣為:


觀測狀態生成概率矩陣為:

3.動態規劃求解HMM觀測序列概率

1. 暴力求解法

因為我們知道所有的隱藏狀態之間的轉移概率和所有從隱藏狀態到觀測狀態生成概率,那么我們是可以暴力求解的。我們可以列舉出所有可能出現的長度為??的隱藏序列H=(h1 h2, h3, ... hT)(NT種不同的序列)分布求出這些隱藏序列與觀測序列??=(o1 o2, o3, ... ot)的聯合概率分布??(??,H|HMM)。這樣我們就可以很容易的求出邊緣分布??(??|HMM)了。

雖然上述方法有效,但是如果我們的隱藏狀態數??非常多的那就麻煩了,此時我們預測狀態有????種組合,算法的時間復雜度是??(??????)階的。因此對于一些隱藏狀態數極少的模型,我們可以用暴力求解法來得到觀測序列出現的概率,但是如果隱藏狀態多,則上述算法太耗時,我們需要尋找其他簡潔的算法。

2. 用前向算法求HMM觀測序列的概率

前向算法本質上屬于動態規劃的算法,遞歸思想將大問題分解成小問題,小問題之間可能存在重疊;動態規劃思想是先計算小問題累計到大問題。他們的共同特點是需要找到遞推關系式。
接下來我們來尋找遞推關系式將大問題分解為小問題:
假設我們只有一個觀測狀態這個觀測狀態的概率??(o1|HMM)=\sum_{i=1}^N(??(hi|HMM)bi1),即,產生觀測狀態o1的隱藏狀態有很多將每種隱藏狀態乘它對應的生成觀測狀態概率然后求和。則當序列長度為T時??(o1 o2, o3, ... ot|HMM)=\sum_{i=1}^N(??(o1,o2,o3, ... ot-1,hi|HMM)b t-1 t,),即將產生(o1,o2,o3, ... ot-1)狀態序列的概率分別乘上ht的狀態轉換概率然后乘上對應的生成概率再求和。我們以上面介紹的抽球實驗為例求解觀測序列概率:

球的顏色的觀測序列:??={紅,白}

時刻1是紅色球
隱藏狀態是盒子1的概率:??1(1)=c1??11=0.2×0.5=0.1;
隱藏狀態是盒子2的概率:??1(2)=c2??21=0.4×0.4=0.16;
隱藏狀態是盒子3的概率:??1(3)=c??31=0.4×0.7=0.28
時刻2是白色球
隱藏狀態是盒子1的概率:??2(1)=[\sum_{i=1}^3??1(i)ai1]b12=[0.1?0.5+0.16?0.3+0.28?0.2]×0.5=0.077;
隱藏狀態是盒子2的概率:??2(2)=[\sum_{i=1}^3??1(i)ai2]
b22=[0.1?0.2+0.16?0.5+0.28?0.3]×0.6=0.1104;
隱藏狀態是盒子3的概率:??2(3)=[\sum_{i=1}^3??1(i)ai3]b32=[0.1?0.3+0.16?0.2+0.28?0.5]×0.3=0.0606;
最終我們求出觀測序列:??={紅,白}的概率:??(??|??)=\sum_{i=1}^3??2(??) = 0.248

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。