隱馬爾可夫模型(HMM)簡介

請各位讀者深吸一口氣……呼……
開始……


(一)

阿黃是大家敬愛的警官,他性格開朗,身體強壯,是大家心目中健康的典範。

但是,近一個月來阿黃的身體狀況出現異常:情緒失控的狀況時有發生。有時候忍不住放聲大笑,有時候有時候愁眉不展,有時候老淚縱橫,有時候勃然大怒……

如此變化無常的情緒失控是由什麼引起的呢?據警隊同事勇男描述,由於複習考試寢室不熄燈與多媒體作業的困擾,阿黃近日出現了失眠等症狀;與此同時,阿黃近日登陸一個叫做“xiaonei網”的網站十分頻繁。經醫生進一步診斷,由於其他人也遇到同樣的考試壓力、作息不規律的情況而並未出現情緒失控;並且,其它登陸XIAONEI網的衆多同學表現正常,因此可基本排除它們是情緒失控的原因。黃SIR的病情一度陷入僵局……
最近,阿黃的病情有了新的眉目:據一位對手相學與占卜術十分精通的小巫婆透露,阿黃曾經私下請她對自己的病情進行診斷。經過觀察與分析終於有了重大發現:原來阿黃的病情正在被潛伏在他體內的三種侍神控制!他們是:修羅王、阿修羅、羅剎神

據悉,這三種侍神是情緒積聚激化而形成的自然神靈,他們相剋相生,是遊離於個體意識之外的精神產物,可以對人的情緒起到支配作用。每一天,都會有一位侍神主宰阿黃的情緒。並且,不同的侍神會導致不同的情緒突然表現。然而,當前的科技水平無法幫助我們診斷,當前哪位侍神是主宰侍神;更糟的是,不同的侍神(3個)與不同的情緒(4種)並不存在顯而易見的一一對應關係。
所以,乍看上去,阿黃的病情再次陷入僵局……

我們怎樣才能把握阿黃情緒變化的規律?
我們怎樣才能通過阿黃的情緒變化,推測他體內侍神的變化規律?

關鍵詞:兩類狀態:
情緒狀態(觀察狀態):放聲大笑,愁眉不展,老淚縱橫,勃然大怒
侍神狀態(隱狀態):修羅王,阿修羅,羅剎神

(二)

阿黃的病情引來了很多好心人的關心。這與阿黃真誠善良的品格不無關係。
關於侍神的特點,占卜師和很多好心人找來了許多珍貴資料。其中很多人經過一段時間的觀察與記錄後,在貌似毫無規律的數據背後,發現了侍神與情緒之間的內在規律!!他們在多次觀測後,建立在大量數據基礎上,表現出宏觀的內在聯繫!
由於這些好心人大部分是TONGJI大學的人,所以,這種規律被稱作統計規律。這些人被稱爲統計學家(orz太土了)…………

具體的規律被概括爲:
1. 每天,哪位侍神主宰與前一天侍神是誰有很大關係!即:前一個侍神會影響下一個侍神出現的概率多少。
三個侍神,兩兩之間的轉化的機率的大小,我們總結在一個對應表中:

便於某些自稱爲數學家的人計算,我們習慣於寫成矩陣形式:


2.每位侍神主宰時,所對應的情緒出現也有一定的規律:某種侍神出現時,情緒的出現有一定的規律性。比如,如果今天的侍神是修羅王,那麼阿黃放聲大笑的概率是不同侍神對應的不同情緒出現的機率,我們也歸納在一張表中:


便於計算,也可以寫成矩陣的格式。


3.由於每天的侍神狀態,情緒狀態都取決於前一天,所以,只有知道最開始阿黃的情緒狀態,即初始狀態,纔有可能來推導隨後的日子裏,阿黃體內的侍神和情緒的變化情況。

我們假定,阿黃體內的侍神首先出現的概率滿足下面的表格
修羅王 阿修羅   羅剎神
〔0.63 0.17 0.20〕

至此,我們已經掌握了研究阿黃情緒變化規律的所有信息,它包括:
兩類狀態:侍神狀態,情緒狀態
三種關係:侍神的轉換關係,侍神與情緒的關係,侍神的初始狀態

便於計算,我們用數學語言來定義,便於今後計算。

               修羅王 阿修羅 羅剎神
初始狀態矩陣:Π=〔0.64 0.17 0.20〕

狀態轉移矩陣:
A =  

兩態混合矩陣(描述侍神狀態和情緒狀態對應關係)


(三)


知道了關於阿黃的這些信息後,我們能做些什麼呢?

一、估計“放聲大笑”-“老淚縱橫”-“勃然大怒”出現的概率:

“放聲大笑”-“老淚縱橫”-“勃然大怒”是一種非常危險的組合!如果某三天內阿黃出現了“放聲大笑”-“老淚縱橫”-“勃然大怒”的情緒變化,會引起嚴重精神損傷!!那麼,這種情緒組合出現的概率是多少呢?

看起來比較麻煩,因爲“放聲大笑”可以對應三種侍神;其餘兩個也可以。三天,三種侍神,所有可能爲3*3*3=27種。

根據全概率公式:所以:
P(笑-淚-怒)=P(笑-淚-怒 | 修羅王-修羅王-修羅王)+P(笑-淚-怒 | 修羅王-修羅王-阿修羅)+P(笑-淚-怒 | 修羅王-修羅王-羅剎神)+………………+P(笑-淚-怒 | 羅剎神-羅剎神-羅剎神)
一共27項相加,就可以把所有的可能計算出來!
可以想像,這樣的計算是災難性的。

當然,在計算機計算時,可以用遞歸法簡化計算,降低複雜度。
①我們來把每一天,阿黃的情緒狀態串起來,多天就形成一個狀態序列。其中第t天的狀態就是Ykt

②在計算序列中某一中間狀態的概率時,用所有可能到達該狀態的路徑之和表示。


比如在t=2時間,狀態爲阿修羅的概率可以用下面的路徑計算:



最後的觀察狀態的部分概率表示,這些狀態所經過的所有可能路徑的概率。比如:





③用αt ( j ) 表示在時間t時 狀態j的部分概率。計算方法如下:


αt ( j )= P( 觀察情緒 | 侍神是j ) * P(在t時間所有到j的途徑)


其中兩項相乘中的第一項我們由兩狀態混合矩陣就可以得到:



而後一項,我們需要前一項的結果來確定。這也表現了HMM每個環節的狀態是基於前一環節狀態的特點。



④如果說,每一環節都依賴前一環節,那麼最初的環節,也就是最初的狀態怎麼來計算呢?
很簡單。初始狀態Π就派上它的用場了。
比如:第一天阿黃放聲大笑,那麼:
a1(修羅王)=0.63×0.6=0.378
a1(阿修羅)=0.17×0.25=0.0425
a1(羅剎神)=0.20×0.05=0.01
歸納成數學式:
⑤我們說過,後一天侍神的情況是由前一天來決定的。現在,如果知道了at(j),那麼,後面一天的情況at+1(j)也應該知道了吧。怎麼來算at+1(j)呢?
太枯燥了~還是繼續上面的例子吧
比如,t=2時,情緒爲老淚縱橫,侍神爲阿修羅,那麼:
a2(阿修羅)=P(阿修羅時老淚縱橫的概率)×P(所有到達阿修羅的概率)
其中:
P(所有到達阿修羅的概率)
=a1(修羅王)×P(修羅王→阿修羅)+a1(阿修羅)×P(阿修羅→阿修羅)+a1(羅剎神)×P(羅剎神→阿修羅)
=0.378×0.25+0.0425×0.125+0.01×0.675

這樣,知道a1,知道at和at+1的關係,迭代啊迭代,迭迭代代無窮匱矣……最終會找到你需要的狀態的概率的。
(而且,在編成時運用迭代可降低算法複雜度,不太懂,不多扯……)



最後,解答“放聲大笑-老淚縱橫-勃然大怒”的概率
每天的三個概率對應三位侍神
第一天:放聲大笑
(0.63 × 0.6) = 0.37800002
(0.17 ×0.25) = 0.0425
(0.2 ×0.05) = 0.010000001

第二天:老淚縱橫
(((0.37800002×0.5) + (0.0425*0.375) + (0.010000001*0.125)) * 0.15) = 0.03092813
(((0.37800002*0.25) + (0.0425*0.125) + (0.010000001*0.675)) * 0.25) = 0.026640628
(((0.37800002*0.25) + (0.0425*0.375) + (0.010000001*0.375)) * 0.35) = 0.039965626
第三天:勃然大怒
(((0.03092813*0.5) + (0.026640628*0.375) + (0.039965626*0.125)) * 0.05) = 0.0015225002
(((0.03092813*0.25) + (0.026640628*0.125) + (0.039965626*0.675)) * 0.25) = 0.009509727
(((0.03092813*0.25) + (0.026640628*0.375) + (0.039965626*0.375)) * 0.5) = 0.01635469
所以,最終所有可能加起來,“放聲大笑-老淚縱橫-勃然大怒”的概率爲
0.0015225002+0.009509727+0.01635469= 0.027386917
黃SIR暫時可以放心。

(四)

還有什麼應用呢?


二、由觀測狀態推測最大可能性的隱狀態,


         即:由阿黃情緒變化推測體內侍神的變化


1.    還是用窮舉法吧




總之,變化是有限地,概率是知道地,每步是可算地,大小是可比地……


算一算,比一比,總能找到最可能的一條路。


只是隨着天數增長、侍神數增長等,計算的複雜度會呈指數增加,這一點很不利。



又枯燥了~再舉個例子:


比如,某三天,阿黃十分不幸地出現了“放聲大笑-老淚縱橫-勃然大怒”的情緒變化。


我們十分想知道:是怎樣的侍神組合,最可能導致這種情緒?


最佳組合要取:


MAX{P(笑-淚-怒 | 修羅王-修羅王-修羅王),P(笑-淚-怒 | 修羅王-修羅王-阿修羅),P(笑-淚-怒 | 修羅王-修羅王-羅剎神),………………,P(笑-淚-怒 | 羅剎神-羅剎神-羅剎神)}


27個裏面比出一個概率最大的來,搞定~



2.    程序計算,我們用遞歸方法降低計算複雜度:


我們知道,對應於阿黃的每一個情緒狀態,侍神的變化只有一個最佳路徑,也許是這樣:




每一條 部分最優路徑都對應一個關聯概率--部分概率 (相當於前面的那個中間概率)。與前面不同 是最有可能到達該狀態的一條路徑的概率。


① 我們定義: δ(i,t)是所有序列中在t時刻以狀態i終止的最大概率。當然它所對應那條路徑就是部分最優路徑。   δ(i,t)對於每個i,t都是存在的。這樣我們就可以順藤摸瓜找下去,在序列的最後一個狀態找到整個序列的最優路徑。


②那麼,最初的狀態(t=1)的最優路徑是什麼?我們還是要依賴初始狀態矩陣Π


這和上次的算法是一樣的。


δ(修羅王,1)=0.378


δ(阿修羅,1)=0.0425


δ(羅剎神,1)=0.01



③那麼,對於時間爲t時刻的中間狀態,如何來找它的部分概率(即最佳路徑)呢?


再舉個具體例子,t時刻,到達X狀態的路徑可能有ABC三條。



由此圖可以看出,到達X的最優路徑是下面三條中的一條:



(狀態序列), . . ., A, X                           


(狀態序列), . . ., B, X


(狀態序列), . . ., C, X


我們就要比較:


P(到達A的最佳路徑)×P(A到達X的概率)


P(到達B的最佳路徑)×P(B到達X的概率)


P(到達C的最佳路徑)×P(C到達X的概率)


再乘以P(X(某種侍神)對應的觀測狀態(某種情緒))就可以算得狀態概率


④那麼,在t時刻對應某種觀察狀態的概率記爲δt(i),那麼


第一天,由於沒有先導,只能直接利用兩狀態轉換矩陣計算:




第t天:


δt(i)=MAX{δt-1(j)×P(j狀態→i狀態)×i狀態下對應觀察狀態概率}


數學公式爲:




這樣,又可以迭迭代代無窮匱矣了~




最後,我們再來計算黃SIR“放聲大笑-老淚縱橫-勃然大怒”的最可能侍神組合:


第一天:放聲大笑


修羅王(0.63 * 0.6) = 0.37800002


阿修羅(0.17 * 0.25) = 0.0425


羅剎神(0.2 * 0.05) = 0.010000001


第二天:老淚縱橫


修羅王max ((0.37800002*0.5), (0.0425*0.375), (0.010000001*0.125)) * 0.15 = 0.028350003


阿修羅max ((0.37800002*0.25), (0.0425*0.125), (0.010000001*0.675)) * 0.25 = 0.023625001


羅剎神max ((0.37800002*0.25), (0.0425*0.375), (0.010000001*0.375)) * 0.35 = 0.033075


第三天:勃然大怒


修羅王max ((0.028350003*0.5), (0.023625001*0.375), (0.033075*0.125)) * 0.05 = 0.000708750


阿修羅max ((0.028350003*0.25), (0.023625001*0.125), (0.033075*0.675)) * 0.25 = 0.00558140


羅剎神max ((0.028350003*0.25), (0.023625001*0.375), (0.033075*0.375)) * 0.5 = 0.006201562



可見,第一天,修羅王主宰阿黃最爲可能;


第二天,由修羅王變爲羅剎神,造成阿黃老淚縱橫的可能最大;


而第三天,繼續由羅剎神主宰阿黃,造成勃然大怒的可能最大


所以,對應“放聲大笑-老淚縱橫-勃然大怒”最可能的侍神組合爲:修羅王-羅剎神-羅剎神




尾聲


一、瞭解了這個故事,我們就粗淺地瞭解了隱馬爾科夫模型的構成。它包括兩類狀態,三種關係:Π(初始狀態)A(狀態轉移矩陣)B(兩狀態混合矩陣)



二、HMM模型的初步瞭解就到這裏。其主要功能有三:


1.根據已知的HMM找出一個觀察序列的概率。(計算某種情緒組合出現概率)


2.根據觀察序列找到最有可能出現的隱狀態序列 (由情緒組合推導侍神組合)


3.從觀察序列中得出HMM (這是最難的HMM應用。也就是根據觀察序列和其代表的隱狀態,生成一個三元組HMM ( Π,A,B)。使這個三元組能夠最好的描述我們所見的一個現象規律。限於水平,不討論)



三、上面應用中,1設計到FORWARD算法,2設計Viterbi算法,可以查閱資料,都可以在程序中實現。

四、生物信息中涉及到HMM的應用有很多。在蛋白質DOMAIN描述,分子進化樹的構建中都會應用這個模型。其實大同小異:我們能看得見的就是觀察狀態:序列(情緒),而隱藏在當前序列背後的各種隱狀態:比如基因……(修羅王,阿修羅,羅剎神……)。基因發生了怎樣的進化過程,我們不能直接觀測,但可以用應用3――從觀察序列中得到HMM,用已知序列進行訓練,生成包含實際序列信息的HMM模型,就可以通過已有的序列來進行基因的人工註釋(大概是這個意思,FT)



五、感謝來自這個網站:


www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/main.html


提供的大量介紹,數據,圖表,小程序,很有幫助


特別感謝丁香園裏的崔曉源進行的詳盡翻譯和解釋,這篇文章的思路歸功於他的翻譯作品。



六、感謝主人公姓名雷同者的大力支持,體諒和鼓勵,以及所有帶來靈感的同學~你們讓生活更精彩!

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