(转载)机器学习知识点(十一)隐马尔可夫模型
? ? ? ?隱馬爾可夫模型?(Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些學者發(fā)表在一系列的統(tǒng)計學論文中,隨后在語言識別,自然語言處理以及生物信息等領(lǐng)域體現(xiàn)了很大的價值。
? ? ? ?引子
考慮下面交通燈的例子,一個序列可能是紅-紅/橙-綠-橙-紅。這個序列可以畫成一個狀態(tài)機,不同的狀態(tài)按照這個狀態(tài)機互相交替,每一個狀態(tài)都只依賴于前一個狀態(tài),如果當前的是綠燈,那么接下來就是橙燈,這是一個確定性系統(tǒng),因此更容易理解和分析,只要這些狀態(tài)轉(zhuǎn)移都是已知的。但是在實際當中還存在許多不確定性系統(tǒng)。
在日常生活當中,我們總是希望根據(jù)當前天氣的情況來預測未來天氣情況,和上面的交通燈的例子不同,我們不能依靠現(xiàn)有知識確定天氣情況的轉(zhuǎn)移,但是我們還是希望能得到一個天氣的模式。一種辦法就是假設這個模型的每個狀態(tài)都只依賴于前一個的狀態(tài),這個假設被稱為馬爾科夫假設,這個假設可以極大簡化這個問題。顯然,這個假設也是一個非常糟糕的假設,導致很多重要的信息都丟失了。
當涉及到天氣的時候,馬爾科夫假設描述為,假設如果我們知道之前一些天的天氣信息,那么我們就能預測今天的天氣。當然,這個例子也是有些不合實際的。但是,這樣一個簡化的系統(tǒng)可以有利于我們的分析,所以我們通常接受這樣的假設,因為我們知道這樣的系統(tǒng)能讓我們獲得一些有用的信息,盡管不是十分準確的。
馬兒可夫過程
? ? ? ? 談到?HMM,首先簡單介紹一下馬爾可夫過程?(Markov Process),它因俄羅斯數(shù)學家安德烈·馬爾可夫而得名,代表數(shù)學中具有馬爾可夫性質(zhì)的離散隨機過程。該過程中,每個狀態(tài)的轉(zhuǎn)移只依賴于之前的 n 個狀態(tài),這個過程被稱為1個 n 階的模型,其中 n 是影響轉(zhuǎn)移狀態(tài)的數(shù)目。最簡單的馬爾科夫過程就是一階過程,每一個狀態(tài)的轉(zhuǎn)移只依賴于其之前的那一個狀態(tài)。注意這和確定性系統(tǒng)不一樣,因為這種轉(zhuǎn)移是有概率的,而不是確定性的。
馬爾可夫鏈是隨機變量?X1, … ,?Xn?的一個數(shù)列。這些變量的范圍,即他們所有可能取值的集合,被稱為“狀態(tài)空間”,而?Xn ?的值則是在時間?n?的狀態(tài)。如果?Xn+1?對于過去狀態(tài)的條件概率分布僅是?Xn?的一個函數(shù),則
這里?x?為過程中的某個狀態(tài)。上面這個恒等式可以被看作是馬爾可夫性質(zhì)。
馬爾可夫鏈的在很多應用中發(fā)揮了重要作用,例如,谷歌所使用的網(wǎng)頁排序算法(PageRank)就是由馬爾可夫鏈定義的。
下圖展示了天氣這個例子中所有可能的一階轉(zhuǎn)移:
注意一個含有 N 個狀態(tài)的一階過程有 N2?個狀態(tài)轉(zhuǎn)移。每一個轉(zhuǎn)移的概率叫做狀態(tài)轉(zhuǎn)移概率?(state transition probability),就是從一個狀態(tài)轉(zhuǎn)移到另一個狀態(tài)的概率。這所有的 N2?個概率可以用一個狀態(tài)轉(zhuǎn)移矩陣來表示,其表示形式如下:
對該矩陣有如下約束條件:
下面就是海藻例子的狀態(tài)轉(zhuǎn)移矩陣:
這個矩陣表示,如果昨天是晴天,那么今天有50%的可能是晴天,37.5%的概率是陰天,12.5%的概率會下雨,很明顯,矩陣中每一行的和都是1。
為了初始化這樣一個系統(tǒng),我們需要一個初始的概率向量:
這個向量表示第一天是晴天。
到這里,我們就為上面的一階馬爾科夫過程定義了以下三個部分:
狀態(tài):晴天、陰天和下雨
初始向量:定義系統(tǒng)在時間為0的時候的狀態(tài)的概率
狀態(tài)轉(zhuǎn)移矩陣:每種天氣轉(zhuǎn)換的概率
所有的能被這樣描述的系統(tǒng)都是一個馬爾科夫過程。
然而,當馬爾科夫過程不夠強大的時候,我們又該怎么辦呢?在某些情況下,馬爾科夫過程不足以描述我們希望發(fā)現(xiàn)的模式。
例如,一個隱居的人可能不能直觀的觀察到天氣的情況,但是民間傳說告訴我們海藻的狀態(tài)在某種概率上是和天氣的情況相關(guān)的。在這種情況下我們有兩個狀態(tài)集合,一個可以觀察到的狀態(tài)集合(海藻的狀態(tài))和一個隱藏的狀態(tài)(天氣狀況)。我們希望能找到一個算法可以根據(jù)海藻的狀況和馬爾科夫假設來預測天氣的狀況。
一個更現(xiàn)實的例子是語音識別,我們聽到的聲音是聲帶、喉嚨和一起其他的發(fā)音器官共同作用的結(jié)果。這些因素相互作用,共同決定了每一個單詞的聲音,而一個語音識別系統(tǒng)檢測的聲音(可以觀察的狀態(tài))是人體內(nèi)部各種物理變化(隱藏的狀態(tài)、引申一個人真正想表達的意思)產(chǎn)生的。
某些語音識別設備把內(nèi)部的發(fā)音機制作為一個隱藏的狀態(tài)序列,把最后的聲音看成是一個和隱藏的狀態(tài)序列十分相似的可以觀察到的狀態(tài)的序列。在這兩個例子中,一個非常重要的地方是隱藏狀態(tài)的數(shù)目和可以觀察到的狀態(tài)的數(shù)目可能是不一樣的。在一個有3種狀態(tài)的天氣系統(tǒng)(sunny、cloudy、rainy)中,也許可以觀察到4種潮濕程度的海藻(dry、dryish、damp、soggy)。在語音識別中,一個簡單的發(fā)言也許只需要80個語素來描述,但是一個內(nèi)部的發(fā)音機制可以產(chǎn)生不到80或者超過80種不同的聲音。
在上面的這些情況下,可以觀察到的狀態(tài)序列和隱藏的狀態(tài)序列是概率相關(guān)的。于是我們可以將這種類型的過程建模為有一個隱藏的馬爾科夫過程和一個與這個隱藏馬爾科夫過程概率相關(guān)的并且可以觀察到的狀態(tài)集合。這就是本文重點介紹的隱馬爾可夫模型。
? ? ? 隱馬兒可夫模型
隱馬爾可夫模型?(Hidden Markov Model) 是一種統(tǒng)計模型,用來描述一個含有隱含未知參數(shù)的馬爾可夫過程。其難點是從可觀察的參數(shù)中確定該過程的隱含參數(shù),然后利用這些參數(shù)來作進一步的分析。下圖是一個三個狀態(tài)的隱馬爾可夫模型狀態(tài)轉(zhuǎn)移圖,其中x 表示隱含狀態(tài),y 表示可觀察的輸出,a 表示狀態(tài)轉(zhuǎn)換概率,b 表示輸出概率。
下圖顯示了天氣的例子中隱藏的狀態(tài)和可以觀察到的狀態(tài)之間的關(guān)系。我們假設隱藏的狀態(tài)是一個簡單的一階馬爾科夫過程,并且他們兩兩之間都可以相互轉(zhuǎn)換。
對 HMM 來說,有如下三個重要假設,盡管這些假設是不現(xiàn)實的。
假設1:馬爾可夫假設(狀態(tài)構(gòu)成一階馬爾可夫鏈)
假設2:不動性假設(狀態(tài)與具體時間無關(guān))
假設3:輸出獨立性假設(輸出僅與當前狀態(tài)有關(guān))
隱藏的狀態(tài)和可觀察到的狀態(tài)之間有一種概率上的關(guān)系,也就是說某種隱藏狀態(tài) H 被認為是某個可以觀察的狀態(tài) O1?是有概率的,假設為 P(O1?| H)。如果可以觀察的狀態(tài)有3種,那么很顯然?P(O1?| H)+P(O2?| H)+ P(O3?| H) = 1。
?
這樣,我們也可以得到一個另一個矩陣,稱為混淆矩陣?(confusion matrix)。這個矩陣的內(nèi)容是某個隱藏的狀態(tài)被分別觀察成幾種不同的可以觀察的狀態(tài)的概率,在天氣的例子中,這個矩陣如下圖:
上邊的圖示都強調(diào)了?HMM?的狀態(tài)變遷。而下圖則明確的表示出模型的演化,其中綠色的圓圈表示隱藏狀態(tài),紫色圓圈表示可觀察到狀態(tài),箭頭表示狀態(tài)之間的依存概率,一個?HMM?可用一個5元組 { N, M, π,A,B?} 表示,其中 N 表示隱藏狀態(tài)的數(shù)量,我們要么知道確切的值,要么猜測該值,M 表示可觀測狀態(tài)的數(shù)量,可以通過訓練集獲得,?π={πi} 為初始狀態(tài)概率,A={aij} 為隱藏狀態(tài)的轉(zhuǎn)移矩陣?Pr(xt(i)?| xt-1(j)),B={bik} 表示某個時刻因隱藏狀態(tài)而可觀察的狀態(tài)的概率,即混淆矩陣,Pr(ot(i)?| xt(j))。在狀態(tài)轉(zhuǎn)移矩陣和混淆矩陣中的每個概率都是時間無關(guān)的,即當系統(tǒng)演化時,這些矩陣并不隨時間改變。對于一個 N 和 M 固定的?HMM?來說,用 λ={ π, A,?B?} 表示?HMM?參數(shù)。
在正常的馬爾可夫模型中,狀態(tài)對于觀察者來說是直接可見的。這樣狀態(tài)的轉(zhuǎn)換概率便是全部的參數(shù)。而在隱馬爾可夫模型中,狀態(tài)并不是直接可見的,但受狀態(tài)影響的某些變量則是可見的。每一個狀態(tài)在可能輸出的符號上都有一概率分布。因此輸出符號的序列能夠透露出狀態(tài)序列的一些信息。
在?HMM?中有三個典型問題:
(一) 已知模型參數(shù),計算某一給定可觀察狀態(tài)序列的概率
假設我們已經(jīng)有一個特定的隱馬爾科夫模型 λ?和一個可觀察狀態(tài)序列集。我們也許想知道在所有可能的隱藏狀態(tài)序列下,給定的可觀察狀態(tài)序列的概率。當給定如下一個隱藏狀態(tài)序列:
那么在?HMM?和這個隱藏狀態(tài)序列的條件下,可觀察狀態(tài)序列的概率為:
而隱藏狀態(tài)序列在?HMM?條件下的概率為:
因此,隱藏狀態(tài)序列和可觀察狀態(tài)序列的聯(lián)合概率為:
那么所有可能的隱藏狀態(tài)序列上,可觀察狀態(tài)序列的概率為:
例如,我們也許有一個海藻的“Summer”模型和一個“Winter”模型,因為海藻在夏天和冬天的狀態(tài)應該是不同的,我們希望根據(jù)一個可觀察狀態(tài)(海藻的潮濕與否)序列來判斷現(xiàn)在是夏天還是冬天。
我們可以使用前向算法來計算在某個特定的?HMM?下一個可觀察狀態(tài)序列的概率,然后據(jù)此找到最可能的模型。
這種類型的應用通常出現(xiàn)在語音設別中,通常我們會使用很多?HMM,每一個針對一個特別的單詞。一個可觀察狀態(tài)的序列是從一個可以聽到的單詞向前得到的,然后這個單詞就可以通過找到滿足這個可觀察狀態(tài)序列的最大概率的?HMM?來識別。
前向算法?(Forward Algorithm)
如何計算一個可觀察序列的概率?
1.窮舉搜索
給定一個?HMM,我們想計算出某個可觀察序列的概率??紤]天氣的例子,我們知道一個描述天氣和海藻狀態(tài)的?HMM,而且我們還有一個海藻狀態(tài)的序列。假設這個狀態(tài)中的某三天是(dry,damp,soggy),在這三天中的每一天,天氣都可能是晴朗,多云或者下雨,我們可以用下圖來描述觀察序列和隱藏序列:
在這個圖中的每一列表示天氣的狀態(tài)可能,并且每個狀態(tài)都指向相鄰的列的每個狀態(tài),每個狀態(tài)轉(zhuǎn)換在狀態(tài)轉(zhuǎn)移矩陣中都有一個概率。每一列的下面是當天的可觀察的海藻的狀態(tài),在每種狀態(tài)下出現(xiàn)這種可觀察狀態(tài)的概率是由混淆矩陣給出的。
一個可能的計算可觀察概率的方法是找到每一個可能的隱藏狀態(tài)的序列,這里有32?= 27種,這個時候的可觀察序列的概率就是 Pr(dry, damp, soggy | HMM)=Pr(dry, damp, soggy | sunny, sunny, sunny) + . . . . + Pr(dry, damp, soggy | rainy, rainy, rainy)。
很顯然,這種計算的效率非常低,尤其是當模型中的狀態(tài)非常多或者序列很長的時候。事實上,我們可以利用概率不隨時間變化這個假設來降低時間的開銷。
2.使用遞歸來降低復雜度
我們可以考慮給定?HMM?的情況下,遞歸的計算一個可觀察序列的概率。我們可以首先定義一個部分概率,表示達到某個中間狀態(tài)的概率。接下來我們將看到這些部分概率是如何 在time=1 和 time = n (n > 1) 的時候計算的。
假設一個T時間段的可觀察序列是:
1)部分概率
下面這張圖表示了一個觀察序列(dry,damp,soggy)的一階轉(zhuǎn)移
我們可以通過計算到達某個狀態(tài)的所有路徑的概率和來計算到達某個中間狀態(tài)的概率。比如說,t=2時刻,cloudy的概率用三條路徑的概率之和來表示:
我們用 αt(j) 來表示在 t 時刻是狀態(tài) j 的概率,αt(j)=Pr(觀察狀態(tài) | 隱藏狀態(tài) j ) x Pr(t 時刻到達狀態(tài) j 的所有路徑)。
最后一個觀察狀態(tài)的部分概率就表示了整個序列最后達到某個狀態(tài)的所有可能的路徑的概率和,比如說在這個例子中,最后一列的部分狀態(tài)是通過下列路徑計算得到的:
因為最后一列的部分概率是所有可能的路徑的概率和,所以就是這個觀察序列在給定?HMM?下的概率了。
2) 計算 t=1時候的部分概率
當 t=1 的時候,沒有路徑到某個狀態(tài),所以這里是初始概率,Pr(狀態(tài) j | t=0) = π(狀態(tài) j ),這樣我們就可以計算 t=1 時候的部分概率為:
因為在初始的時候,狀態(tài) j 的概率不僅和這個狀態(tài)本身相關(guān),還和觀察狀態(tài)有關(guān),所以這里用到了混淆矩陣的值,k1?表示第一個觀察狀態(tài),bjk1?表示隱藏狀態(tài)是 j,但是觀察成 k1?的概率。
3) 計算 t>1 時候的部分概率
還是看計算部分概率的公式是:αt(j)?= Pr(觀察狀態(tài) | 隱藏狀態(tài) j) x Pr(t 時刻到達狀態(tài) j 的所有路徑)。 這個公式的左邊是從混淆矩陣中已知的,我只需要計算右邊部分,很顯然右邊是所有路徑的和:
需要計算的路徑數(shù)是和觀察序列的長度的平方相關(guān)的,但是 t 時刻的部分概率已經(jīng)計算過了之前的所有路徑,所以在 t+1 時刻只需要根據(jù) t 時刻的概率來計算就可以了:
這里簡單解釋下,bjk(t+1)?就是在 t+1 時刻的第 j 個隱藏狀態(tài)被認為是當前的觀察狀態(tài)的概率,后面一部分是所有t時刻的隱藏狀態(tài)到 t+1 時候的隱藏狀態(tài)j的轉(zhuǎn)移的概率的和。這樣我們每一步的計算都可以利用上一步的結(jié)果,節(jié)省了很多時間。
4) 公式推導
?
5) 降低計算復雜度
我們可以比較窮舉和遞歸算法的復雜度。假設有一個?HMM,其中有 n 個隱藏狀態(tài),我們有一個長度為 T 的觀察序列。
窮舉算法的需要計算所有可能的隱藏序列:
需要計算:
很顯然窮舉算法的時間開銷是和 T 指數(shù)相關(guān)的,即 NT,而如果采用遞歸算法,由于我們每一步都可以利用上一步的結(jié)果,所以是和 T 線性相關(guān)的,即復雜度是 N2T。
這里我們的目的是在某個給定的?HMM?下,計算出某個可觀察序列的概率。我們通過先計算部分概率的方式遞歸的計算整個序列的所有路徑的概率,大大節(jié)省了時間。在 t=1 的時候,使用了初始概率和混淆矩陣的概率,而在t時刻的概率則可以利用 t-1 時刻的結(jié)果。
這樣我們就可以用遞歸的方式來計算所有可能的路徑的概率和,最后,所有的部分概率的計算公式為
使用天氣的例子,計算 t=2 時刻的 cloudy 狀態(tài)的概率方法如圖:
我們使用前向算法在給定的一個?HMM?下計算某個可觀察序列的概率。前向算法主要采用的是遞歸的思想,利用之前的計算結(jié)果。有了這個算法,我們就可以在一堆?HMM?中,找到一個最滿足當前的可觀察序列的模型(前向算法計算出來的概率最大)。
(二) 根據(jù)可觀察狀態(tài)的序列找到一個最可能的隱藏狀態(tài)序列
和上面一個問題相似的并且更有趣的是根據(jù)可觀察序列找到隱藏序列。在很多情況下,我們對隱藏狀態(tài)更有興趣,因為其包含了一些不能被直接觀察到的有價值的信息。比如說在海藻和天氣的例子中,一個隱居的人只能看到海藻的狀態(tài),但是他想知道天氣的狀態(tài)。這時候我們就可以使用?Viterbi 算法來根據(jù)可觀察序列得到最優(yōu)可能的隱藏狀態(tài)的序列,當然前提是已經(jīng)有一個?HMM。
另一個廣泛使用?Viterbi 算法的領(lǐng)域是自然語言處理中的詞性標注。句子中的單詞是可以觀察到的,詞性是隱藏的狀態(tài)。通過根據(jù)語句的上下文找到一句話中的單詞序列的最有可能的隱藏狀態(tài)序列,我們就可以得到一個單詞的詞性(可能性最大)。這樣我們就可以用這種信息來完成其他一些工作。
下面介紹一下維特比算法?(Viterbi Algorithm)
一.如何找到可能性最大的隱藏狀態(tài)序列?
通常我們都有一個特定的?HMM,然后根據(jù)一個可觀察狀態(tài)序列去找到最可能生成這個可觀察狀態(tài)序列的隱藏狀態(tài)序列。
1. 窮舉搜索
我們可以在下圖中看到每個隱藏狀態(tài)和可觀察狀態(tài)的關(guān)系。
通過計算所有可能的隱藏序列的概率,我們可以找到一個可能性最大的隱藏序列,這個可能性最大的隱藏序列最大化了 Pr(觀察序列 | 隱藏狀態(tài)集)。比如說,對于上圖中的可觀察序列 (dry damp soggy),最可能的隱藏序列就是下面這些概率中最大的:
Pr(dry, damp, soggy | sunny, sunny, sunny), ……,Pr(dry, damp, soggy | rainy, rainy, rainy)
這個方法是可行的,但是計算代價很高。和前向算法一樣,我們可以利用轉(zhuǎn)移概率在時間上的不變性來降低計算的復雜度。
2. 使用遞歸降低復雜度
在給定了一個可觀察序列和HMM的情況下,我們可以考慮遞歸的來尋找最可能的隱藏序列。我們可以先定義一個部分概率 δ,即到達某個中間狀態(tài)的概率。接下來我們將討論如何計算 t=1 和 t=n (n>1) 的部分概率。
注意這里的部分概率和前向算法中的部分概率是不一樣的,這里的部分概率表示的是在t時刻最可能到達某個狀態(tài)的一條路徑的概率,而不是所有概率之和。
1) 部分概率和部分最優(yōu)路徑
考慮下面這個圖以及可觀察序列 (dry, damp, soggy) 的一階轉(zhuǎn)移
對于每一個中間狀態(tài)和終止狀態(tài) (t=3) 都有一個最可能的路徑。比如說,在 t=3 時刻的三個狀態(tài)都有一個如下的最可能的路徑:
我們可以稱這些路徑為部分最優(yōu)路徑。這些部分最優(yōu)路徑都有一個概率,也就是部分概率?δ。和前向算法中的部分概率不一樣,這里的概率只是一個最可能路徑的概率,而不是所有路徑的概率和。
我們可以用 δ(i, t) 來表示在t時刻,到狀態(tài)i的所有可能的序列(路徑)中概率最大的序列的概率,部分最優(yōu)路徑就是達到這個最大概率的路徑,對于每一個時刻的每一個狀態(tài)都有這樣一個概率和部分最優(yōu)路徑。
最后,我們通過計算 t=T 時刻的每一個狀態(tài)的最大概率和部分最優(yōu)路徑,選擇其中概率最大的狀態(tài)和它的部分最優(yōu)路徑來得到全局的最優(yōu)路徑。
2) 計算 t=1 時刻的部分概率
當 t=1 時刻的時候,到達某個狀態(tài)最大可能的路徑還不存在,但是我們可以直接使用在 t=1 時刻某個狀態(tài)的概率和這個狀態(tài)到可觀察序列 k1?的轉(zhuǎn)移概率:
3) 計算 t>1 時刻的部分概率
接下來我們可以根據(jù) t-1 時刻的部分概率來求 t 時刻的部分概率
我們可以計算所有到狀態(tài) X 的路徑的概率,找到其中最可能的路徑,也就是局部最優(yōu)路徑。注意到這里,到達X的路徑必然會經(jīng)過 t-1 時刻的 A、B 和 C,所以我們可以利用之前的結(jié)果。達到X的最可能的路徑就是下面三個之一:
(狀態(tài)序列),. . .,A,X (狀態(tài)序列),. . .,B,X (狀態(tài)序列),. . .,C,X
我們需要做的就是找到以 AX、BX 和 CX 結(jié)尾的路徑中概率最大的那個。
根據(jù)一階馬爾科夫的假設,一個狀態(tài)的發(fā)生之和之前的一個狀態(tài)有關(guān)系,所以X在某個序列的最后發(fā)生的概率只依賴于其之前的一個狀態(tài):
Pr (到達A的最優(yōu)路徑) . Pr (X | A) . Pr (觀察狀態(tài) | X)
有個了這個公式,我們就可以利用t-1時刻的結(jié)果和狀態(tài)轉(zhuǎn)移矩陣和混淆矩陣的數(shù)據(jù):
將上面這個表達式推廣一下,就可以得到 t 時刻可觀察狀態(tài)為 kt?的第 i 個狀態(tài)的最大部分概率的計算公式:
其中 aji?表示從狀態(tài) j 轉(zhuǎn)移到狀態(tài) i 的概率,bikt?表示狀態(tài)i被觀察成 kt?的概率。
4) 后向指針
考慮下圖
在每一個中間狀態(tài)和結(jié)束狀態(tài)都有一個部分最優(yōu)概率?δ(i, t)。但是我們的目的是找到最可能的隱藏狀態(tài)序列,所以我們需要一個方法去記住部分最優(yōu)路徑的每一個節(jié)點。
考慮到要計算 t 時刻的部分概率,我們只需要知道 t-1 時刻的部分概率,所以我們只需要記錄那個導致了 t 時刻最大部分概率的的狀態(tài),也就是說,在任意時刻,系統(tǒng)都必須處在一個能在下一時刻產(chǎn)生最大部分概率的狀態(tài)。如下圖所示:
我們可以利用一個后向指針 φ?來記錄導致某個狀態(tài)最大局部概率的前一個狀態(tài),即
這里 argmax 表示能最大化后面公式的j值,同樣可以發(fā)現(xiàn)這個公式和 t-1 時刻的部分概率和轉(zhuǎn)移概率有關(guān),因為后向指針只是為了找到“我從哪里來”,這個問題和可觀察狀態(tài)沒有關(guān)系,所以這里不需要再乘上混淆矩陣因子。全局的行為如下圖所示:
5) 優(yōu)點
使用?viterbi?算法對一個可觀察狀態(tài)進行解碼有兩個重要的優(yōu)點:
a) 通過使用遞歸來減少復雜度,這點和之前的前向算法是一樣的
b) 可以根據(jù)可觀察序列找到最優(yōu)的隱藏序列,這個的計算公式是:
其中?
這里就是一個從左往右翻譯的過程,通過前面的翻譯結(jié)果得到后面的結(jié)果,起始點是初始向量 π。
3. 補充
但在序列某個地方有噪聲干擾的時候,某些方法可能會和正確答案相差的較遠。但是?Viterbi?算法會查看整個序列來決定最可能的終止狀態(tài),然后通過后向指針來找到之前的狀態(tài),這對忽略孤立的噪聲非常有用。
Viterbi?算法提供了一個根據(jù)可觀察序列計算隱藏序列的很高效的方法,它利用遞歸來降低計算復雜度,并且使用之前全部的序列來做判斷,可以很好的容忍噪聲。
在計算的過程中,這個算法計算每一個時刻每一個狀態(tài)的部分概率,并且使用一個后向指針來記錄達到當前狀態(tài)的最大可能的上一個狀態(tài)。最后,最可能的終止狀態(tài)就是隱藏序列的最后一個狀態(tài),然后通過后向指針來查找整個序列的全部狀態(tài)。
(三) 根據(jù)觀察到的序列集來找到一個最有可能的 HMM。?
在很多實際的情況下,HMM?不能被直接的判斷,這就變成了一個學習問題,因為對于給定的可觀察狀態(tài)序列 O 來說,沒有任何一種方法可以精確地找到一組最優(yōu)的?HMM?參數(shù)?λ?使 P(O | λ) 最大,于是人們尋求使其局部最優(yōu)的解決辦法,而前向后向算法(也稱為Baum-Welch算法)就成了?HMM學習問題的一個近似的解決方法。
前向后向算法首先對于?HMM?的參數(shù)進行一個初始的估計,但這個很可能是一個錯誤的猜測,然后通過對于給定的數(shù)據(jù)評估這些參數(shù)的的有效性并減少它們所引起的錯誤來更新?HMM?參數(shù),使得和給定的訓練數(shù)據(jù)的誤差變小,這其實是機器學習中的梯度下降的思想。
對于網(wǎng)格中的每一個狀態(tài),前向后向算法既計算到達此狀態(tài)的“前向”概率,又計算生成此模型最終狀態(tài)的“后向”概率,這些概率都可以通過前面的介紹利用遞歸進行高效計算??梢酝ㄟ^利用近似的?HMM?模型參數(shù)來提高這些中間概率從而進行調(diào)整,而這些調(diào)整又形成了前向后向算法迭代的基礎。
另外,前向后向算法是?EM 算法的一個特例,它避免了?EM 算法的暴力計算,而采用動態(tài)規(guī)劃思想來解決問題,Jelinek 在其書《Statistical Methods for Speech Recognition》中對前向后向算法與?EM 算法的關(guān)系進行了詳細描述,有興趣的讀者可以參考這本書。
類似于上面講到的前向算法,我們也可以定義后向變量 βt(i) 來計算給定當前隱藏狀態(tài) i 時,部分觀察序列 ot+1,ot+2,…,oT的概率,即:
與前向算法類似,我們也可以通過迭代算法有效計算 βt(i),計算公式如下:
其中
進一步我們可以發(fā)現(xiàn)
因此
下面開始介紹前向后向算法。
首先我們需要定義兩個輔助變量,這兩個變量可以用前文介紹過的前向變量和后向變量進行定義。
第一個變量定義為 t 時狀態(tài) i 和 t+1 時狀態(tài) j 的概率,即
該變量在網(wǎng)格中所代表的關(guān)系如下圖所示:
該等式等價于
利用前向變量和后向變量,上式可以表示為
第二個變量定義為后驗概率,也就是在給定觀察狀態(tài)序列和?HMM?的情況下,t 時狀態(tài) i 的概率,即
利用前向變量和后向變量,上式可以表示為
因此,下式為在任意時刻狀態(tài) i 的期望,也就是從狀態(tài) i 轉(zhuǎn)移到觀察狀態(tài) o 的期望
同樣,下式也就是從狀態(tài) i 轉(zhuǎn)移到狀態(tài) j 的期望
我們可以發(fā)現(xiàn)定義的這兩個變量之間的關(guān)系為
下面介紹前向后向算法的參數(shù)學習過程,在學習的過程中,不斷更新?HMM?的參數(shù),從而使得 P(O | λ) 最大。我們假設初始的?HMM?參數(shù)為??λ={ π,?A, B?},首先計算前向變量 α 和后向變量 β,再根據(jù)剛剛介紹的公式計算期望 ξ 和 ζ,最后,根據(jù)下面的3個重估計公式更新?HMM?參數(shù)。
如果我們定義當前的?HMM?模型為?λ={ π,A,B?},那么可以利用該模型計算上面三個式子的右端;我們再定義重新估計的?HMM?模型為,那么上面三個式子的左端就是重估的?HMM?模型參數(shù)。Baum 及他的同事在70年代證明了,因此如果我們迭代地計算上面三個式子,由此不斷地重新估計?HMM?的參數(shù),那么在多次迭代后可以得到?HMM?模型的一個最大似然估計。不過需要注意的是,前向后向算法所得的這個最大似然估計是一個局部最優(yōu)解。
參考資料:
1. http://blog.csdn.NET/eaglex/article/details/6376826
2. http://en.wikipedia.org/wiki/Markov_chain
3. http://en.wikipedia.org/wiki/Hidden_Markov_model
4. Lawrence R. Rabiner, A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition.?Proceedings of the IEEE, 77 (2), p. 257–286, February 1989.
5. L. R. Rabiner and B. H. Juang, “An introduction to HMMs,”?IEEE ASSP Mag., vol. 3, no. 1, pp. 4-16, 1986.
6.?http://jedlik.phy.bme.hu/~gerjanos/HMM/node2.html
7.?http://www.cs.brown.edu/research/ai/dynamics/tutorial/Documents/HiddenMarkovModels.html
8. 隱馬爾可夫模型簡介,劉群
總結(jié)
以上是生活随笔為你收集整理的(转载)机器学习知识点(十一)隐马尔可夫模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习知识点(十)马尔可夫链
- 下一篇: (转载)机器学习知识点(十二)坐标下降法