隱馬爾科夫模型HMM

隱馬爾科夫模型HMM
2009年01月07日 星期三 15:41

原文網址:http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/main.html

算法:Viterbi algorithmForward-Backward Algorithm

小實驗程序:http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/viterbi_algorithm/s3_pg3.html

隱馬爾科夫模型HMM自學 (1)

介紹

崔曉源 翻譯

我們通常都習慣尋找一個事物在一段時間裏的變化規律。在很多領域我們都希望找到這個規律,比如計算機中的指令順序,句子中的詞順序和語音中的詞順序等等。一個最適用的例子就是天氣的預測。

首先,本文會介紹聲稱概率模式的系統,用來預測天氣的變化

然後,我們會分析這樣一個系統,我們希望預測的狀態是隱藏在表象之後的,並不是我們觀察到的現象。比如,我們會根據觀察到的植物海藻的表象來預測天氣的狀態變化。

最後,我們會利用已經建立的模型解決一些實際的問題,比如根據一些列海藻的觀察記錄,分析出這幾天的天氣狀態。

Generating Patterns

有兩種生成模式:確定性的和非確定性的。

確定性的生成模式:就好比日常生活中的紅綠燈,我們知道每個燈的變化規律是固定的。我們可以輕鬆的根據當前的燈的狀態,判斷出下一狀態。

traffic-lights_anim.gif

非確定性的生成模式:比如說天氣晴、多雲、和雨。與紅綠燈不同,我們不能確 定下一時刻的天氣狀態,但是我們希望能夠生成一個模式來得出天氣的變化規律。我們可以簡單的假設當前的天氣只與以前的天氣情況有關,這被稱爲馬爾科夫假 設。雖然這是一個大概的估計,會丟失一些信息。但是這個方法非常適於分析。

馬爾科夫過程就是當前的狀態只與前n個狀態有關。這被稱作n階馬爾科夫模型。最簡單的模型就當n=1時的一階模型。就當前的狀態只與前一狀態有關。(這裏要注意它和確定性生成模式的區別,這裏我們得到的是一個概率模型)。下圖是所有可能的天氣轉變情況:

weather-example-anim.gif

對於有M個狀態的一階馬爾科夫模型,共有M*M個狀態轉移。每一個狀態轉移都有其一定的概率,我們叫做轉移概率,所有的轉移概率可以用一個矩陣表示。在整個建模的過程中,我們假設這個轉移矩陣是不變的。

weather-matrix.gif

該矩陣的意義是:如果昨天是晴,那麼今天是晴的概率爲0.5,多雲的概率是0.25,雨的概率是0.25。注意每一行和每一列的概率之和爲1。

另外,在一個系統開始的時候,我們需要知道一個初始概率,稱爲P 向量。

pi-vector.gif

到現在,我們定義了一個一階馬爾科夫模型,包括如下概念:

狀態:晴、多雲、雨

狀態轉移概率

初始概率

隱馬爾科夫模型HMM自學 (2)

馬爾科夫模型也需要改進!

崔曉源 翻譯

當一個隱士不能通過直接觀察天氣狀態來預測天氣時,但他有一些水藻。民間的傳說告訴我們水藻的狀態與天氣有一定的概率關係。也就是說,水藻 的狀態與天氣時緊密相關的。此時,我們就有兩組狀態:觀察狀態(水藻的狀態)和隱含狀態(天氣狀態)。因此,我們希望得到一個算法可以爲隱士通過水藻和馬 爾科夫過程,在沒有直接觀察天氣的情況下得到天氣的變化情況。

更容易理解的一個應用就是語音識別,我們的問題定義就是如何通過給出的語音信號預測出原來的文字信息。在這裏,語音信號就是觀察狀態,識別出的文字就是隱含狀態。

這裏需要注意的是,在任何一種應用中,觀察狀態的個數與隱含狀態的個數有可能不一樣的。下面我們就用隱馬爾科夫模型HMM來解決這類問題。

HMM

下圖是天氣例子中兩類狀態的轉移圖,我們假設隱狀態是由一階馬爾科夫過程描述,因此他們相互連接。

hidden-weather-example.gif
隱狀態和觀察狀態之間的連線表示:在給定的馬爾科夫過程中,一個特定的隱狀態對應的觀察狀態的概率。我們同樣可以得到一個矩陣:
weather-b-matrix.gif
注意每一行(隱狀態對應的所有觀察狀態)之和爲1。
到此,我們可以得到HMM的所有要素:兩類狀態和三組概率
兩類狀態:觀察狀態和隱狀態;
三組概率:初始概率、狀態轉移概率和兩態對應概率(confusion matrix)

隱馬爾科夫模型HMM自學 (3)

HMM 定義

崔曉源 翻譯

HMM是一個三元組 (P,A,B).

P : the vector of the initial state probabilities;

A : the state transition matrix; Triple_A_2.gif

B : the confusion matrix; Triple_B_2.gif

這其中,所有的狀態轉移概率和混淆概率在整個系統中都是一成不變的。這也是HMM中最不切實際的假設。

HMM的應用

有三個主要的應用:前兩個是模式識別後一個作爲參數估計

(1) 評估

根據已知的HMM找出一個觀察序列的概率。

這類問題是假設我們有一系列的HMM模型,來描述不同的系統(比如夏天的天氣變化規律和冬天的天氣變化規律), 我們想知道哪個系統生成觀察狀態序列的概率最大。反過來說,把不同季節的天氣系統應用到一個給定的觀察狀態序列上,得到概率最大的哪個系統所對應的季節就 是最有可能出現的季節。(也就是根據觀察狀態序列,如何判斷季節)。在語音識別中也有同樣的應用。

我們會用forward algorithm 算法來得到觀察狀態序列對應於一個HMM的概率。

(2) 解碼

根據觀察序列找到最有可能出現的隱狀態序列

回想水藻和天氣的例子,一個盲人隱士只能通過感受水藻的狀態來判斷天氣狀況,這就顯得尤爲重要。我們使用viterbi algorithm來解決這類問題。

viterbi算法也被廣泛的應用在自然語言處理領域。比如詞性標註。字面上的文字信息就是觀察狀態,而詞性就是隱狀態。通過HMM我們就可以找到一句話上下文中最有可能出現的句法結構。

(3) 學習

從觀察序列中得出HMM

這是最難的HMM應用。也就是根據觀察序列和其代表的隱狀態,生成一個三元組HMM (P,A,B)。使這個三元組能夠最好的描述我們所見的一個現象規律。

我們用forward-backward algorithm來解決在現實中經常出現的問題--轉移矩陣和混淆矩陣不能直接得到的情況。

總結 HMM可以解決的三類問題

  1. Matching the most likely system to a sequence of observations -evaluation, solved using the forward algorithm;

  2. determining the hidden sequence most likely to have generated a sequence of observations - decoding, solved using the Viterbi algorithm;

  3. determining the model parameters most likely to have generated a sequence of observations - learning, solved using the forward-backward algorithm.

隱馬爾科夫模型HMM自學 (4-1)Forward Algorithm

找到觀察序列的概率

崔曉源 翻譯

Finding the probability of an observed sequence

1、窮舉搜索方法

對於水藻和天氣的關係,我們可以用窮舉搜索方法的到下面的狀態轉移圖(trellis):

trellis.gif
圖中,每一列於相鄰列的連線由狀態轉移概率決定,而觀察狀態和每一列的隱狀態則由混淆矩陣決定。如果用窮舉的方法的到某一觀察狀態序列的概率,就要求所有可能的天氣狀態序列下的概率之和,這個trellis中共有3*3=27個可能的序列。

Pr(dry,damp,soggy | HMM) = 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)

可見計算複雜度是很大,特別是當狀態空間很大,觀察序列很長時。我們可以利用概率的時間不變性解決複雜度。
2、採用遞歸方法降低複雜度
我們採用遞歸的方式計算觀察序列的概率,首先定義部分概率爲到達trellis中某一中間狀態的概率。在後面的文章裏,我們把長度爲T的觀察狀態序列表示爲:
Y{k{1}}, Y{k{2}}, .... , Y{k{T}}
2a. Partial probabilities, (a's)
trellis.1.gif
在計算trellis中某一中間狀態的概率時,用所有可能到達該狀態的路徑之和表示。
比如在t=2時間,狀態爲cloudy的概率可以用下面的路徑計算:
paths.to.cloudy.gif
at ( j ) 表示在時間t時 狀態j的部分概率。計算方法如下:
at ( j )= Pr( observation | hidden state is j ) * Pr(all paths to state j at time t)
最後的觀察狀態的部分概率表示,這些狀態所經過的所有可能路徑的概率。比如:
alphas.at.t_eq_3.gif
這表示最後的部分概率的和即爲trellis中所有可能路徑的和,也就是當前HMM下觀察序列的概率。
Section 3 會給出一個動態效果介紹如何計算概率。
2b.計算初始狀態的部分概率
我們計算部分概率的公式爲:
a t ( j )= Pr( observation | hidden state is j ) x Pr(all paths to state j at time t)
但是在初始狀態,沒有路徑到達這些狀態。那麼我們就用probability乘以associated observation probability計算:
formula
這樣初始時刻的狀態的部分概率就只與其自身的概率和該時刻觀察狀態的概率有關。

隱馬爾科夫模型HMM自學 (4-2)Forward Algorithm

崔曉源 翻譯

書接上文,前一話我們講到了Forward Algorithm中初始狀態的部分概率的計算方法。這次我們繼續介紹。

2c.如何計算t>1時刻的部分概率

回憶一下我們如何計算部分概率:

at ( j )= Pr( observation | hidden state is j ) * Pr(all paths to state j at time t)

我們可知(通過遞歸)乘積中第一項是可用的。那麼如何得到Pr(all paths to state j at time t) 呢?

爲了計算到達一個狀態的所有路徑的概率,就等於每一個到達這個狀態的路徑之和:

allpath.gif
隨着序列數的增長,所要計算的路徑數呈指數增長。但是在t時刻我們已經計算出所有到達某一狀態的部分概率,因此在計算t+1時刻的某一狀態的部分概率時只和t時刻有關。
[Formula]
這個式子的含義就是恰當的觀察概率(狀態j下,時刻t+1所真正看到的觀察狀態的概率)乘以此時所有到達該狀態的概 率和(前一時刻所有狀態的概率與相應的轉移概率的積)。因此,我們說在計算t+1時刻的概率時,只用到了t時刻的概率。這樣我們就可以計算出整個觀察序列 的概率。
2d.複雜度比較
對於觀察序列長度T,窮舉法的複雜度爲T的指數級;而Forward Algorithm的複雜度爲T的線性。
=======================================================
最後我們給出Forward Algorithm的完整定義
We use the forward algorithm to calculate the probability of a T long observation sequence;

[Formula]

where each of the y is one of the observable set. Intermediate probabilities (a's) are calculated recursively by first calculating a for all states at t=1.

[Formula]

Then for each time step, t = 2, ..., T, the partial probability a is calculated for each state; [Formula]

that is, the product of the appropriate observation probability and the sum over all possible routes to that state, exploiting recursion by knowing these values already for the previous time step. Finally the sum of all partial probabilities gives the probability of the observation, given the HMM, l. [Formula] =======================================================

我們還用天氣的例子來說明如何計算t=2時刻,狀態CLOUDY的部分概率
example.forward.gif
怎麼樣?看到這裏豁然開朗了吧。要是還不明白,我就.....................還有辦法,看個動畫效果:
參數定義:
最後記住我們使用這個算法的目的(沒有應用任何算法都是垃圾),從若干個HMM模型中選出一個最能夠體現給定的觀察狀態序列的模型(概率最大的那個)。
Forward Algorithm (Done)

隱馬爾科夫模型HMM自學 (5-1)Viterbi Algorithm

本來想明天再把後面的部分寫好,可是睡覺今天是節日呢?一時情不自禁就有打開電腦..........

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

崔曉源 翻譯

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

1、窮舉搜索方法

trellis.gif

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

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]

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

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

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

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

[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時刻的部分概率得到,第二部分是狀態轉移概率,第三部分是混淆矩陣中對應的概率。

隱馬爾科夫模型HMM自學 (5-2)Viterbi Algorithm

書接前文,viterbi算法已經基本成形......

崔曉源 翻譯

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

[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]
還是那句話:
怎麼樣?看到這裏豁然開朗了吧。要是還不明白,我就.....................還有辦法,看個動畫效果:
參數定義:
別忘了,viterbi算法的目的是根據給定的觀察狀態序列找出最有可能的隱含狀態序列,別忘了viterbi算法不會被中間的噪音所幹擾。

隱馬爾科夫模型HMM自學 (6)尾聲

崔曉源 翻譯

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

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