萬事開頭難啊,剛開頭確實不知道該怎么寫才能比較有水平,這篇博客可能會比較長,隱馬爾科夫模型將會從以下幾個方面進行敘述:1 隱馬爾科夫模型的概率計算法 2 隱馬爾科夫模型的學習算法 3 隱馬爾科夫模型的預測算法
隱馬爾科夫模型其實有很多重要的應用比如說:語音識別、自然語言處理、生物信息、模式識別等等
同樣先說一下什么是馬爾科夫,這個名字感覺就像高斯一樣,無時無刻的滲透在你的生活中,這里給出馬爾科夫鏈的相關解釋供參考:
馬爾可夫鏈是滿足馬爾可夫性質的隨機過程,是具有馬爾科夫性質的隨機變量的一個數列, 是馬爾可夫鏈(Markov Chain),描述了一種狀態序列,其每個狀態值取決於前面有限個狀態。
舉個例子,如果后一個狀態的變換僅取決以前一時刻的狀態的話,用公式來表示就是:
需要注意的就是馬爾科夫鏈並沒有限定后一個狀態的變化僅僅取決於前一個狀態,而是說取決於前面有限個狀態!所以上述公式表示僅僅是馬爾科夫鏈的一個特例,稱之為一階馬爾科夫鏈.
需要知道的是一階馬爾科夫其實是為了精簡計算而損失精確度的一個方法,因為當前狀態的變化和越多的之前狀態相關,則越能夠精確的描述概率模型,所以如果考慮多階馬爾科夫比如M階公式:
就是和前M個變量相關的意思!
但是多階馬爾科夫鏈在考慮的精確度的同時就會損失掉簡便計算的好處,導致產生非常復雜的計算量,可實現程度就會降低,所以,科學家們就想出了一種既能夠使得當前狀態變化和更多的前面發生的狀態相關又不至於計算復雜度指數增長的方法,那就是今天的主角------隱馬爾科夫模型
下面給出李航老師課本上的隱馬爾科夫模型的定義:
隱馬爾科夫是關於時序的概率模型,描述由一個隱藏的馬爾科夫鏈隨機生成不可觀測的狀態隨機序列,再由各個狀態生成一個觀測而產生觀測隨機序列的過程,隱藏的馬爾科夫鏈生成的隨機狀態的序列被稱為狀態序列(state sequence),每個狀態生成一個觀測,由此而產生的觀測的隨機序列,稱之為觀測序列(observation sequence) ,序列的每一個位置都可以看作是一個時刻。
設Q是所有可能的狀態的集合,V是所有可能的觀測的集合 ,其中N是所有可能的狀態數,M是所有可能的觀測數 。
I是長度為T的狀態序列,O是其對應的觀測序列.
A是狀態轉移概率矩陣:,其中,
, 是在時刻t處於狀態qi的條件下,在時刻t+1轉移到狀態qj的概率
B是觀測概率矩陣: ,其中,
,是在時刻t處於狀態qj的條件下生成觀測vk的概率
π是初始時刻的概率向量 :,是時刻t=1處於狀態qi的概率
綜上所述,隱馬爾科夫模型由三個參數構成:λ=(A,B,π)
說了這么一大堆,其實一張圖就可以表述的很清楚:
圓圈表示的是狀態序列,圓圈和圓圈之間是狀態轉移概率,轉移概率構成的矩陣就是狀態轉移概率矩陣A,許多方塊表示的是觀測序列,由圓圈到方塊代表了隱藏狀態到可觀測狀態的變化,對應着發射概率,發射概率組成的矩陣就是觀測概率矩陣,每個點都代表着一個時刻。
從定義我們也可以知道隱馬爾科夫模型作了兩個基本的假設:
(1)齊次馬爾科夫性假設,即假設隱藏的馬爾科夫鏈在任意時刻t的狀態只依賴於其前一個時刻的狀態,與其他時刻的狀態及觀測無關,與時刻t也無關!這個從定義中顯然是可以得到的公式:
(2)觀測獨立性假設,即假設任意時刻的觀測只依賴於該時刻的馬爾科夫鏈的狀態,於其他觀測及狀態無關. 公式:
介紹到這里可能還是會有不少童鞋有疑惑,隱馬爾科夫鏈怎么就能夠在大大減少計算量的同時還可以增加狀態變量的相關性呢?
我仔細考慮了一下,也許正是因為隱變量或者狀態變量的引入,導致了這種相關性的大大增強,每一個觀測變量的出現都只跟其對應的隱變量有關系,通過隱變量這個媒介,便間接的建立起和之前所有時刻的變量的相關性,這樣在仍然只需要計算一個發射概率的同時,卻大大增加了變量之間的相關性,達到了我們的目的!並且,此時的觀測變量之間並不存在任何的馬爾科夫性,從圖中我們也可以看出,每個方塊之間並沒有箭頭相聯系!
下面正式進入我們今天要介紹的第一個task:隱馬爾科夫模型的概率計算法
條件:給定模型 λ=(A,B,π)和觀測序列,計算在模型λ下觀測序列出現的概率
一般情況下有三種解法:1理論可行的暴力解法 2 前向解法 3 后向解法
首先介紹理論可行的暴力求解方法:
上述公式的意思就是將所有可能的長度為T的狀態序列全都列舉出來,然后求狀態序列和觀測序列的聯合概率再求和!
分成了和
兩部分以后再分別進行求解:
PS:這一步划簡過程中用到了前面的齊次性假設
同樣的:
PS:這一步的划簡過程應用了前面介紹的觀測獨立性假設
綜上:
得到暴力求解的計算結果!其實得到的這個結果是非常直觀的,從初始概率開始,發射概率產生觀測,再繼續轉移,反復下去,直到產生整個觀測序列!
但是這個方法也只是理論上可行,因為對於長鏈來水,我們沒有辦法從頭到尾的挨個找下去。
前向算法:
首先給出前向概率的定義: 給定隱馬爾科夫模型λ,定義到時刻t部分觀測序列為,且狀態為
的概率為前向概率,記作:
可以遞推地求得前向概率及觀測序列概率
通俗的說就是在時間點t時刻,已經得到的觀測狀態為,且t時刻對應的狀態為
的概率!
具體的算法過程:
(1)初值:
(2)遞推:對於t=1,2,.....T-1,
(3)終止:
關鍵點在於遞推的過程,可以這么理解,根據前向概率的定義的要求,最后一個時刻點的狀態變量必須是,那么不管你什么從什么狀態變過啦,都必須變成i狀態在我這一步,而且對應的發射輸出的結果是Ot+1!
這樣就可以解釋了前向概率,十分通俗易懂。畫張圖表示一下:
后向算法:
同樣先給出后向概率的定義:給定隱馬爾科夫模型λ,定義在時刻t狀態為的條件下,從t+1到T的部分觀測序列為
的概率為后向概率,記作:
可以遞推地求得后向概率及觀測序列概率
后向算法的計算過程:
(1)初值:
(2)對t=T-1,T-2,......1
(3)終止:
后向算法的遞推過程比較有趣:
之前閱讀真皮先生的博客HMM的時候,真皮先生的思路是已知是一個未來的概率,要求之前的,需要回退到隱狀態上,再和轉換概率相乘,就可以完成從后往前的這個變化過程,我在這里卡頓了好久,
一直不明白為什么回退到隱狀態?為什么乘以發射概率就可以回退到隱狀態呢?感興趣的讀者也可以先不看后面的自己思考一下
其實,由未來概率回退到隱狀態上來這個思路是非常巧妙的,一開始我就是想不通,為什么這樣可以回退到隱狀態,后向概率明顯是從后往前想,我們來仔細看后向概率的定義式:
很明顯這里已知的發射狀態是到t+1時刻的,並沒有到t時刻,那為什么乘一個t時刻的Ot的發射概率就可以完成回退到隱狀態來呢?我們來借鑒一下暴力解法當中的結論:
可以發現一個明顯的連乘規律就是一個轉移概率加一個發射概率之后必須再一個轉移概率進行狀態轉移,再來一個發射概率,所以回到
我們的后向概率上來,當我們得到了時刻的狀態之后,必須再和一個發射概率相乘,這樣我們便可以巧妙的又回到隱狀態的序列上來,只要再進行一步轉移,就可以完成狀態的回溯!太秒啦!
這樣,這個迭代公式也可以解釋的通了,得到t+1的后向概率,先乘一個發射概率,回退到狀態序列之后,和所有可能得到i狀態的轉移概率相乘再求和,就是后向概率的迭代!
同樣也用一幅圖來表示,開局一幅圖,文字全靠編:
最后再送上一個神級后向概率推導公式(思路來自於真皮先生博客):
第一個問題的最后,總結一下一些概率與期望值的計算:
1 給定模型λ和觀測O,在時刻t處於狀態qi的概率,記作:,然后來推導一下這個公式,看看它和前向后向概率的關系:
PS:從t這個地方隔斷,可以慢慢感覺到前向概率和后向概率要暴露出來了!
這一步我當時也沒看懂是什么騷操作,我解釋一下子
三式連乘,把第一個和第三個結合成聯合概率,就得到下面的第一式,第二式利用的是觀測獨立性假設!
結果真是太讓人意外了,竟然是前向后向概率的相乘! 別着急,還有更意外的:
這個公式一列出來,我整個人都嚇尿了,怎么數學界千絲萬縷的聯系的事情就這么多嗎?還是數學家故意安排的邂逅?
2 給定模型λ和觀測O,在時刻t處於狀態qi且在時刻t+1處於qj的概率,記作:
這個定義比上面那個多考慮了一個時刻,有趣
發現整個式子里就剩下這個東西了。。。。
其實給定參數和觀測考慮兩個時刻,就是用前向概率和后向概率巧妙的將兩個時刻結合起來,如下圖所示(同樣來自真皮先生的博客):
這里直接給出結論:
最后的結果就顯而易見了!
寫到這里,僅僅寫完了HMM的第一部分,概率計算問題,后面還有參數模型的估計問題以及預測算法問題,簡單說一下思路
參數模型的估計和我前面一篇博客 什么是EM算法?關系密切,其實仔細考慮一下,觀測序列已知,直接進行參數模型的估計,其實就是我們前面講的EM算法,寫出Q函數,然后帶進去,利用暴力求解的方法
得出的結論,然后繼續往里帶,再就是利用拉格朗日乘子法根據已知的限制條件,將拉格朗日乘子根據求導的方法求出來,回帶進去,基本上就可以將三個最大化的參數毫無保留的求出。
至於預測算法的問題,其實就是根據概率最大化原則選擇最優的最可能的路徑,將概率最大的篩選出來,然后反向尋找路徑經過的結點,這就是所謂的維特比算法,維特比算法好像在信息論與編碼當中講過
不過當時的維特比算法是用來譯碼,這里的維特比算法是用來求解最優路徑,本質思路都是一樣的,我不是很了解維特比算法,就不展開描述了,如果有時間我可以再寫一篇HMM模型參數估計的博客給大家
參考,十分感謝簡書真皮先生的博客,看了收獲很多,也是這篇博客的靈感來源!文末附上鏈接,就寫到這里啦,能看到這里我還是十分感謝您的,這么冗長的一篇博文,想必浪費您不少時間吧!哈哈
參考博客:https://www.jianshu.com/u/cbacf40d927f