隱馬爾可夫模型及其典型應用


 

【原】隱馬爾可夫模型及其典型應用

----by stackupdown

目錄

前言    3

正文    3

一、隨機過程    3

二、隱馬爾科夫模型的假設    4

三、隱馬爾科夫模型的三個基本問題:    5

1.解碼問題    5

2.評估問題    6

3.學習問題    7

四、隱馬爾科夫模型應用舉例    8

1.自然語言處理    8

2.蛋白質序列觀測    9

3.其他方面的應用    11

結語    11

參考文獻    12

前言

    本文要介紹的是隱馬爾可夫模型及其應用。

我們從一個史學家開始,假設他在看某國的史料時,辛辛苦苦地統計了上下數年,發現了糧食的增長和下降的一段,他會結合歷史去分析一些問題。但是如果史書的其他記載得太少,他就找不到問題的所在,所以無從下手。

 

又比如,一個人出去旅行,相信民間的傳說,海藻的濕度跟未來的天氣有關,未來不同天氣,海藻的濕度不一樣,但是海藻有一定概率是錯的。盡管如此,他還是想要根據這個來估計明天天氣的可能性[1]

    

    這兩個問題是跟時間相關的問題,有些這樣的問題是解決不了的,有些則不然,我們在接下來的文章里會講到相關問題的數學抽象和解決方法。

正文

一、隨機過程

    我們在自然世界中會遇到各種不確定的過程,它們的發生是不確定的,這種過程稱為隨機過程。像花粉的布朗運動、股票市值、天氣變化都是隨機過程[2]

 

馬爾科夫隨機過程是一類隨機過程。它的原始模型馬爾可夫鏈,由俄國數學家A.A.馬爾可夫於1907年提出。該過程有以下的性質:指定一個時間點,則未來時間的狀態只與現在有關,跟它的過去沒有關系。在現實生活中的馬爾科夫過程是我們人為抽象進行簡化的,如果我們認為一個事物的未來跟過去的變化沒有太大關系,那么我們就可以把它抽象成馬爾科夫過程[2]

 

比如我們的天氣,很不嚴謹地說,可以抽象成馬爾科夫過程,從今天晴天轉移到明天多雲、下雨的轉移只取決於今天的天氣,而跟前天的天氣無關。

 

如下圖,這樣我們按照概率的知識就可以得到今天下雨,明天放晴的概率:

P(明天晴|今天雨)=0.4

    

  這就當做是我們最簡單的一個模型了[3]

    

馬爾科夫過程的假設很簡單,就是概率不依賴於之前的序列,寫成公式:

 

 

    就好像一條魚不知道自己之前的運動軌跡,只知道自己在哪里,接着它就會按照現在的位置隨機選擇一個方向去游動了。魚的前前后后的運動形成了一條鏈。

 

    在一個馬爾科夫模型中,我們可以利用它來計算概率,而且由於它是單個狀態的轉移,我們看起來它就像是一條鏈一樣,狀態從頭到尾移動。跟時間有關的序列往往可以抽象成馬爾科夫過程,像瀏覽網頁這種簡單的行為乃至寫詩、譜曲這種復雜過程都可以用馬爾科夫過程分析。

 

二、隱馬爾科夫模型的假設

    馬爾科夫模型可以用來抽象一些問題,但是更多的情況下我們不能直接看到一些想要的序列,只能間接地通過其他序列來反推結果,這就是一類隱隨機過程。

    

    類似地,我們有隱馬爾科夫模型(Hidden Markov Model, HMM) 。它是由學者Baum和其他人在60年代提出來的。

 

我們不能這么隨意地把將隱隨機過程等同為隱馬爾科夫。為了實用性而提出的隱馬爾科夫模型,必須滿足如下的假設:

隱變量的狀態轉移概率必須是固定的,這樣才有一個確定的概率轉移矩陣。即使我們知道某個過程沒有固定的狀態轉移概率,我們也可以把它看作一個近似。

    從隱變量H到觀測變量W的概率必須是確定的,也就是說P(W=b|H=a)是一個固定值,這樣我們才能用到后面的各個算法。

 

缺少以上兩點假設,會讓實際中因為無法確定轉移概率而無法計算序列的概率,或者根據觀察序列無法得到可能的狀態轉移概率(因為一直在變化)。

 

    注意到概率的已知和未知,我們要解決以下的問題。

三、隱馬爾科夫模型的三個基本問題:

1.解碼問題

在一個HMM模型里,假設我們已經觀察到了一個序列O,而且我們有模型的參數:轉移概率矩陣M,表現概率矩陣P,從觀察到的序列O里可以看到各個狀態,我們想知道最有可能的隱藏狀態序列。解決這個問題要用到Viterbi算法, 它由安德魯·維特比在1967年提出。

 

    我們把這個問題通俗地講一遍。比如你今天在一個地方見到了扎克伯格,比如在一家酒吧好了,你想知道他今天的心情是郁悶還是開心。當然我們不管他看起來是開心還是郁悶還是一般,反正我們知道在他心情為i的時候來酒吧的概率是P(i,1),去公園的時候是P(i,2), 去公司的概率是P(i,3)。以此類推。我們在5天里看到了他的序列:酒吧->酒吧->公園->公園->公司,我們希望知道他這五天里的心情是什么樣的。

 

    在這個問題下,轉移概率和表現概率必須是清楚的。為了解決這個問題,我們假設概率轉移矩陣如下:

 

 

    表現矩陣(事實上叫做混淆矩陣)如下:

 

    但是我們還沒有確定初始的各個概率π,

    那么就這樣P(good) = 0.5, P(bad) = 0.2, P(normal) = 0.3,

    即π = (0.5, 0.3, 0.2)

 

現在我們可以根據序列求他的心情了。

    我們用Hi表示第i+1天扎克伯格的心情(i從0開始計數), P表示產生序列的概率;

    第一天: 酒吧: P=P(bar|H0)*P(H0), H0最可能是bad,因為概率是0.6*0.2 = 0.12, 在三種心情里可能性最大。

第二天:酒吧->酒吧 要計算這個序列的概率,序列的概率為:

    P = P(H0)*P(bar|H0) * P(H1|H0) * P(bar|H1),

 

我們看到必須確認H0和H1,以使得該概率最大,但是這樣是不是就說明第一天得到的H0的結果沒用了呢?

 

並不是。

我們用Pr(t, Hk)表示在序列的概率,這個序列就是時刻t的序列,Hk代表不同的心情。

我們可以看到,當t-1的取各個可能的值Ht-1,得到概率Pr(t-1,Ht-1),意味着Pr(t-1)各個取值已經計算過,這時Pr(t)的結果一定可以用到Pr(t-1)的計算結果,這樣以后都不用每次都計算之前的序列概率了。

 

比如,我們可以得到Pr(t, Ht)=Pr(t-1,Ht-1)*P(Ht|Ht-1)*P(Ot|Ht),我們只需要依次計算后面跟Ht相關的結果,就可以得到最好的概率了。

 

這里t=1, Ot為bar,可以求P=Pr(0,H0)*P(H1|H0)*P(bar|H1),只需求最后兩項和各個H0取值下P(H0)*P(bar|H0)的相乘結果, 得到H1=bad, P = 0.2 * 0.6 * 0.375 * 0.6為最大。

 

依次類推,我們就可以得到最終最可能的隱藏序列H0,H1,...。這就是我們解決的問題。

 

以上我們用到的算法叫做Viterbi算法,雖然最初是為了解決信道通信的問題,但是它在語音識別中也是非常經典和重要的一個算法[1]

 

2.評估問題

由扎克伯格的例子我們已經想到了一個問題,假如我們沒有見到扎克伯格,我也不知道他想干什么,但是我突然很閑,想先去一下酒吧,然后去一下公園雲雲,最后看看我這個活動軌跡跟扎克伯格一樣的概率是多少,要怎么辦?

 

事實上這個問題比上個問題簡單一些,而且它一般並不是用來看你跟名人的相似度的。嚴謹地說,我們知道了一個模型的參數,想要知道一個已知序列出現的概率。這可以用來判斷模型是否出錯,比如跟實際產生的序列頻率相差太大,或者實際中出現了什么異常,比如某個人在賭場里偷換了骰子,出老千等等。

 

解決這個問題可以用窮舉的方法。說白了,我們不需要知道最可能的隱藏序列,但是要把可能產生該序列的所有情況的概率加起來得到結果。

 

當然了,這種方法在計算上是行不通的,因為它用的是簡單的窮舉方法,計算時間呈指數增長。我們在計算概率的時候有很多是重復計算的,通過合理的方法可以大量地減少計算時間,解決這個問題采用的是前向算法[1]

 

我們分兩步,第一步是計算:

  

 

 

這里S是H0的可能狀態。

 

第二步:

    我們計算第t步(t>1)的總概率怎么算呢?事實是現在的前面的序列為

o0o1o2...ot-1,我們用Pr(t, x)表示最大標號為t而且實際狀態為x的序列的概率, 則從Pr(t-1,i)到Pr(t, j),我們用求和的公式可以得到

  為什么公式是這樣的?

  因為前一個序列發生的概率,我們的第t個狀態只取決於前一個狀態t-1,但是第t-1個狀態不確定, 所以要計算:單個隱藏狀態下的序列概率X隱藏狀態轉移概率X表現概率,再把所有狀態下的概率都加起來。

 

  每一次迭代的時候我們要計算所有狀態j下的)並且把結果寫下來(在計算機里是保存下來,這樣到下一步才能用來計算,最后得到最終的概率。當然,最后一步我們求出所有狀態j的概率后需要將它們求和。

 

    得到概率之后,你就可以用它來判斷數據的觀察序列出現的概率,如果數據夠多,你可以推測這個序列是否正常,並且進行進一步的研究。

 

3.學習問題

    隱馬爾科夫模型的三個基本問題中,第三個HMM參數學習的問題是最難的。參數學習是通過推導和計算得到模型參數的近似值。在HMM模型里,參數由{π,M,P}組成,其中π是初始的狀態概率,M,P是我們在1中講到的兩個概率矩陣。

我們之前知道轉移概率,表現概率(混淆矩陣),但是現在沒有了,這也是事實上現實中遇到的最多的問題。我們需要直接通過觀察序列來得到模型的參數,來使得P(O|λ)最大。

 

P(O|)這個概率看起來有點抽象,但是其實就是我們之前求過的,整個序列的出現概率。注意我們需要根據序列O1O2...Ot尋找所有的M,P;模型中隱藏變量的種類是清楚的。對於給定的觀察序列O,沒有一種方法可以精確地找到一組隱馬爾科夫模型參數使概率P(O|λ)最大。

 

因而,學者們退而求其次。不能使P(O|λ)全局最優,就尋求使其局部最優的解決方法,而前向-后向算法(又稱之為Baum-Welch算法)就成了隱馬爾科夫模型學習問題的一種替代(近似)解決方法[4]

 

Baum-Welch算法本質上是EM算法的一個特例。不妨說一下EM算法,它是通過迭代修改模型參數,來得到近似的最優解,盡管它不能保證得到全局的參數最優 [5]

 

所謂迭代修改,可以近似理解成,我們先把現在的結果當成事實模型,用來看它的效果,如果有誤差,通過一個方法修改參數,再把參數代入原模型。如此往復,直到參數最后接近不變(收斂)[5]

    

我們在這里不做詳細的推導,一方面也是因為它的理解有些困難。

 

假設在我們的模型里,觀察序列下標為0~T, 狀態的所有下標為1到N。

簡單來說:這個算法設計了幾個變量,最基礎的兩個是一個前向變量,一個后向變量。計算序列為O0O1...Ot、t時刻狀態為i的序列概率;而計算序列Ot+1Ot+2...OT在t時刻狀態為i的序列概率。我們之前在前向算法中其實就用到了。

.

接着,算法設計了另外兩個變量,

  

     

 

這兩個參數在模型中可以更新模型的參數,反過來又被影響產生變化,這樣就可以進行迭代、更新參數了。要解釋這個方法的有效性,應該需要用到更多的數學理論。

 

 

四、隱馬爾科夫模型應用舉例

1.自然語言處理

    隱馬爾科夫模型本來就是為了處理語音和語言問題,所以我們先看一下語音問題中用到這個模型的地方。

    

    語音識別

語音識別我們現在知道的不少了,對普通的大眾來說,語音識別是最直接接觸到人工智能的領域之一。從手機軟件的語音撥號,到科大訊飛的語音識別系統,再到蘋果助理Siri,對話機器人,都或多或少地用到了語音識別的功能。

    

    語音識別並沒有想象的那么容易,它會遇到很多問題。事實上它不是一個簡單的對錄下來的聲音進行分析的過程,單單是聲音信號的保存就要用到很多的數學處理。我們保存的聲音信號是比特的數字信號。信號有波形,有頻率,它的形狀保存下來變成了振幅和頻率的數字信號。第一種想法,我們可以用用波形匹配字符嗎?這種想法是因為波形相似,則發音是一樣的。不過同一個發音,實際字符經常是不同的,同一個字符也可能發音不准確。

    

    盡管如此,我們還是考慮到語音識別中的兩個序列了,一個是字符序列,一個是我們的聲音序列,從聲音序列分析得到字符序列我們就可以進行后續的句子含義分析了。這就是第二種想法。

    

    根據我們之前的介紹,隱馬爾可夫模型是可以分析觀察序列得到隱含序列的。但是單純地使用馬爾科夫模型是不對的,我們並不知道馬爾科夫模型里的概率,也即一個聲音怎么就對應到漢字"西湖",怎么就對應到英文"Moon River"了。

 

    應對這個問題,學者們不打算用一蹴而就的方法,能夠根據一個簡單的概率估計就算出四海皆准的概率表,而是通過大量的數據進行統計並且通過其他方法修正。這種數據的方法體現的是一種經驗法則,但是在實際應用中有它的用武之地。

 

因此,我們用馬爾科夫模型進行語音識別之前,要使用字符串-語音對應的數據庫,在對模型進行訓練之后才將其應用到識別之中。實際的學術界中,通常把通過數據進行模型參數修正的方法稱為訓練。

 

數據庫從哪兒來?在《數學之美》中講到了這件事,語言學家馬庫斯認識到建立標准語料庫(corpus)對語言研究的重要性。建立語料庫,可以類似這樣:從《華爾街日報》中選取一些真實的英語語句,進行詞性標注,再加入語法樹構建。有了文字語料庫,還可以繼續添加語音,機器翻譯的語料庫,供世界上的學者研究[6]

 

在隱馬爾科夫模型中,我們提到了三種概率的參數,而獲得概率的方法當然不是全靠猜的,這里面要用到一些概率估計的方法。在上世紀90年代,其核心框架就是用隱馬爾科模型對語音的時序進行建模,而用高斯混合模型(GMM)對語音的概率進行建模。而在2006年著名學者辛頓提出深度神經網絡(DNN)的模型之后,人們普遍采用了DNN來替換GMM,以提高模型的效果[7]

語音處理過程[7]

其他語言處理問題

在文本的處理中給詞語進行詞性標注、命名實體(人名、地名、機構名)的標注,這個可以用來給計算機對輸入語句的含義分析,從而可以讓電腦擁有更加智能的表現,比如對話系統或者問答系統的實現。同樣地,這些問題也是可以由隱馬爾科夫模型參與解決的。還有一些打字軟件為了追求好的效果也會用到隱馬爾可夫模型。

 

 

2.蛋白質序列觀測

    序列分析

    生物中用到大量數據的地方有很多,因此也就有了生物信息學。對於蛋白質的功能研究來說,生物信息是結合得很緊密的。在目前的生物信息學研究中,我們根據蛋白質序列得到的不僅僅是蛋白質的結構,而且還跟遺傳學的親源關系,蛋白質功能的研究有很大的關系。

 

    如果你學過生物學,那么你應該知道生物的大分子蛋白質是由一些更小的分子合成的,氨基酸的組成成分和順序是合成大分子蛋白質的必要條件。當然除此之外還有空間結構問題,一個相同序列的蛋白質可能有完全不同的性質,原因就是它的空間結構不一樣。蛋白質 有空間結構,還分成至少三級的空間結構(可能有四級)[8],低級的通過折疊形成高級的結構。因此,根據蛋白質的序列研究並不是理所當然的。

    

蛋白質的四級結構[9]

    

    蛋白質數據庫

    蛋白質的氨基酸序列是一個觀測序列,對於不同的蛋白質來說,它的產生概率顯然不是固定的。在生物學內部,對蛋白質會有一個標准的蛋白質表示方法,也就是用一個氨基酸序列來表示它。

 

    場景應用

    我們設想兩個場景。

    場景一,一個生物系的教授現在有了一種蛋白酶的樣本,他通過各種手段得到了蛋白質的序列,但是想知道它的結構長得什么樣。至於為什么要看它的結構,生物知識告訴我們,酶是一種受體,它作用的物質跟它的結構一般要能"互補"。利用隱馬爾科夫模型在數據集上訓練得到的結果,我們可以預測該蛋白質的結構。

    

    場景二,醫生發現,在一個病人體內產生很多不常見的蛋白質,他猜測是因為某些未知的病理導致蛋白質發生異常,但是他沒辦法猜測蛋白質的種類,看到空間結構也沒用。於是他把問題交給研究員。研究員利用數據庫多次對比,查到了跟它相似的一些蛋白質,並且知道了它的可能病變過程。

 

    這就是蛋白質序列的兩個應用HMM的場景:結構預測和多序列結構對比[10]。有些人可能還會想到用HMM來進行新葯的研制。具體的應用可能是多種多樣,但是不管怎樣,我們應該也沒辦法用HMM造出一只恐龍的所有蛋白。

 

    其他生物信息問題

    除了蛋白質,還有DNA、RNA可以分析。而且並不像表面上看的那樣簡單,DNA、RNA由於突變的問題跟蛋白質有一定的區別。

 

3.其他方面的應用

    量化交易

    一部分金融界的人會采用HMM輔助預測量化交易的趨勢,當然,他們用到的HMM往往復雜度並不在問題的抽象,而在數學處理上,用到的模型還經常混合了其他的模型。

    

    人臉識別、手勢識別

    在計算機視覺中當然也可以用到HMM, 比如一張人臉照片讓你識別它的表情,一個手勢的動作讓你識別它的含義等等,這些也都是被稱作模式識別的一些應用。

 

結語

    我們通過扎克伯格介紹了隱馬爾科夫模型的基本問題,舉了幾個簡單的例子並且講解了隱馬爾科夫模型的應用,了解到該模型的強大。用這個模型作為近似,能幫我們有效地解決一些問題,而且如果在未來使用語音識別系統的時候,也不要忘了有HMM的功勞。

 

當然這不意味着隱馬爾科夫模型是萬能的。每個模型只是一些現象的抽象,要解決問題還是得具體問題具體分析。由於問題的多種多樣,有時候問題本身就比模型有趣得多。

 

參考文獻

[1] 隱馬爾可夫模型(HMM)攻略

http://blog.csdn.net/likelet/article/details/7056068

[2]關於馬爾科夫隨機場MRF 的思考

http://blog.sina.com.cn/s/blog_82a790120101ab6p.html

[3] 如何用簡單易懂的例子解釋隱馬爾可夫模型?

https://www.zhihu.com/question/20962240

[4] HMM學習最佳范例七:前向-后向算法4

http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4

[5] HMM進階(6)——Baum-Welch算法

http://blog.sina.com.cn/s/blog_8267db980102wpvz.html

[6] 吳軍.數學之美[M]北京:人民郵電出版社,2012:198,199

[7] 語音識別系統及科大訊飛最新實踐

http://www.weidu8.net/wx/1004147209047264

[8] Protein primary structure

https://en.wikipedia.org/wiki/Protein_primary_structure

[9] 卜東波,陳 翔,王志勇.蛋白質結構預測方法綜述

http://download.bioon.com.cn/upload/month_1001/20100116_479b2d9726a8f6181eacEJ11PiiX4NHw.attach.pdf

[10]崔岩, 黃積濤. 蛋白質拓撲結構Alignment與相似性打分的算法[J]. 天津理工大學學報, 2000, 16(2):35-39.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM