隱馬爾科夫模型HMM學習(三)

找到可能性最大的隱含狀態序列

崔曉源 翻譯

多數情況下,我們都希望能夠根據一個給定的HMM模型,根據觀察狀態序列找到產生這一序列的潛在的隱含狀態序列。

1、窮舉搜索方法

 

我們可以通過窮舉的方式列出所有可能隱含狀態序列,並算出每一種隱狀態序列組合對應的觀察狀態序列的概率。概率最大的那個組合對應的就是最可能的隱狀態序列組合。

Pr(observed sequence | hidden state combination).

比如說上圖中的trellis中,最有可能的隱狀態序列是使得概率:

Pr(dry,damp,soggy | sunny,sunny,sunny), Pr(dry,damp,soggy | sunny,sunny,cloudy), Pr(dry,damp,soggy | sunny,sunny,rainy), . . . . Pr(dry,damp,soggy | rainy,rainy,rainy)

得到最大值的序列。

同樣這種窮舉法的計算量太大了。爲了解決這個問題,我們可以利用和Forward algorithm一樣的原理--概率的時間不變性來減少計算量。

2.用遞歸方式減少複雜度

在給定的觀察序列和HMM模型下,我們用一種遞歸的方式找到最有可能的隱狀態序列。同樣我們滴定部分概率,即在trellis中到達某一中間狀態的概率。然後介紹如何在初始時刻t=1和t>1的時刻分別求解這個部分概率。但要注意,這裏的部分概率是到達某一中間狀態的概率最大的路徑而不是所有概率之和。

2.1部分概率和部分最優路徑

看如下trellis

 [Picture of trellis]

對於trellis中的每個中間狀態和結束狀態,都存在一條到達它的最優路徑。他可能是下圖這樣:

 [Picture]

我們這些路徑爲部分最優路徑,每一條 部分最優路徑都對應一個關聯概率--部分概率。與Forward algorithm不同是最有可能到達該狀態的一條路徑的概率。

  d(i,t)是所有序列中在t時刻以狀態i終止的最大概率。當然它所對應那條路徑就是部分最優路徑。  d(i,t)對於每個i,t都是存在的。這樣我們就可以在時間T(序列的最後一個狀態)找到整個序列的最優路徑。

2b. 計算  d's 在t = 1的初始值

由於在t=1不存在任何部分最優路徑,因此可以用初始狀態 向量協助計算。

[Formula]

這一點與Forward Algorithm相同

2c. 計算 d 's 在t > 1 的部分概率

同樣我們只用t-1時刻的信息來得到t時刻的部分概率。

[Picture]

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

(sequence of states), . . ., A, X                                (sequence of states), . . ., B, X or (sequence of states), . . ., C, X

我們希望找到一條概率最大的。回想馬爾科夫一階模型的假設,一個狀態之和它前一時刻的狀態有關。

Pr (most probable path to A) . Pr (X | A) . Pr (observation | X)

因此到達X的最大概率就是:

 [Formula]

其中第一部分由t-1時刻的部分概率得到,第二部分是狀態轉移概率,第三部分是混淆矩陣中對應的概率。

(Viterbi Algorithm 待續)


 


一般化上一篇最後得到的公式我們可以把概率的求解寫成:

[Formula]

2d. 反向指針,f 's

考慮下面trellis

[Trellis]

現在我們可以得到到達每一箇中間或者終點狀態的概率最大的路徑。但是我們需要採取一些方法來記錄這條路徑。這就需要在每個狀態記錄得到該狀態最優路徑的前一狀態。記爲:

[Formula]

這樣argmax操作符就會選擇使得括號中式子最大的索引j。

如果有人問,爲什麼沒有乘以混淆矩陣中的觀察概率因子。這是因爲我們關心的是在到達當前狀態的最優路徑中,前一狀態的信息,而與他對應的觀察狀態無關。

2e. viterbi算法的兩個優點

1)與Forward算法一樣,它極大的降低了計算複雜度

2)viterbi會根據輸入的觀察序列,“自左向右”的根據上下文給出最優的理解。由於viterbi會在給出最終選擇前考慮所有的觀察序列因素,這樣就避免了由於突然的噪聲使得決策原理正確答案。這種情況在真實的數據中經常出現。

==================================================

下面給出viterbi算法完整的定義

1. Formal definition of algorithm
The algorithm may be summarised formally as:

For each i,, i = 1, ... , n, let :

[Formula]

- this intialises the probability calculations by taking the product of the intitial hidden state probabilities with the associated observation probabilities.

For t = 2, ..., T, and i = 1, ... , n let :

[Formula]

- thus determining the most probable route to the next state, and remembering how to get there. This is done by considering all products of transition probabilities with the maximal probabilities already derived for the preceding step. The largest such is remembered, together with what provoked it.

Let :

[Formula]

- thus determining which state at system completion (t=T) is the most probable.

For t = T - 1, ..., 1

Let :

[Formula]

- thus backtracking through the trellis, following the most probable route. On completion, the sequence i1 ... iT will hold the most probable sequence of hidden states for the observation sequence in hand.

==================================================

我們還用天氣的例子來說明如何計算狀態CLOUDY的部分概率,注意它與Forward算法的區別

 [Picture]
還是那句話:
怎麼樣?看到這裏豁然開朗了吧。要是還不明白,我就.....................還有辦法,看個動畫效果:
http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/viterbi_algorithm/s3_pg3.html
參數定義:
http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/viterbi_algorithm/s3_pg4.html
http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/viterbi_algorithm/s3_pg5.html
別忘了,viterbi算法的目的是根據給定的觀察狀態序列找出最有可能的隱含狀態序列,別忘了viterbi算法不會被中間的噪音所幹擾。


尾聲

HMM的第三個應用就是learning,這個算法就不再這裏詳述了,並不是因爲他難於理解,而是它比前兩個算法要複雜很多。這個方向在語音處理數據庫上有重要的地位。因爲它可以幫助我們在狀態空間很大,觀察序列很長的環境下找到合適HMM模型參數:初始狀態、轉移概率、混淆矩陣等。


好了,我們終於可以對HMM做一個階段性的總結了。通過這個系列的自學過程,我相信各位已經和我一樣對HMM的概念和應用有了一個初步的瞭解。這裏我們考慮的都是一階馬爾科夫過程。HMM在語音識別和NLP方面都有很深入的應用。

簡單說說我學習HMM的初衷,在科研過程中遇到了reranking的問題,候選一直都是別人爲我生成的,處於好奇,終於決定自己也研究一下,大家都知道,reranking是需要產生N-best的候選,既然是N-best,那麼viterbi算法就只能生成一條最好的路徑,其他的該怎麼辦呢?原來在實際應用過程中,通常是把viterbi decoding與另一種稱爲stack decoding的算法聯合使用(當然A*算法也可以)產生多個候選。前面我們已經對A*算法作了介紹,在今後的日子裏,如果我有時間也會把stack decoding向大家介紹。(希望不要等太長時間)

發佈了27 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章