1. 程式人生 > >機器學習_5.隱馬爾可夫模型的典型問題和演算法

機器學習_5.隱馬爾可夫模型的典型問題和演算法

三個典型問題

1.已知模型引數,計算某一給定可觀察狀態序列的概率

已經有一個特定的隱馬爾科夫模型 λ 和一個可觀察狀態序列集。我們也許想知道在所有可能的隱藏狀態序列下,給定的可觀察狀態序列的概率。當給定如下一個隱藏狀態序列:

  那麼在 HMM 和這個隱藏狀態序列的條件下,可觀察狀態序列的概率為:

  而隱藏狀態序列在 HMM 條件下的概率為:

  因此,隱藏狀態序列和可觀察狀態序列的聯合概率為:

  那麼所有可能的隱藏狀態序列上,可觀察狀態序列的概率為:

計算此類問題,即計算在某個特定的 HMM

 下一個可觀察狀態序列的概率下最可能的模型,通常使用前向演算法。

我們可以使用以下策略:

1.窮舉搜尋

效率低

2.使用遞迴來降低複雜度

不斷利用“t+1時刻的計算依靠t時刻狀態”的思想進行遞迴計算。

公式推導

 

所有的部分概率的計算公式為

               

使用前向演算法在給定的一個 HMM 下計算某個可觀察序列的概率。前向演算法主要採用的是遞迴的思想,利用之前的計算結果。。

2.根據可見狀態鏈尋找最可能的隱式狀態鏈

1.窮舉

2.維特比演算法 (Viterbi Algorithm)

在給定了一個可觀察序列和HMM的情況下,我們可以考慮遞迴的來尋找最可能的隱藏序列。我們可以先定義一個部分概率 δ,即到達某個中間狀態的概率。接下來我們將討論如何計算 t=1 和 t=n (n>1) 的部分概率。

  注意這裡的部分概率和前向演算法中的部分概率是不一樣的,這裡的部分概率表示的是在t時刻最可能到達某個狀態的一條路徑的概率,而不是所有概率之和

  1) 部分概率和部分最優路徑

  考慮下面這個圖以及可觀察序列 (dry, damp, soggy) 的一階轉移

  

對於每一箇中間狀態和終止狀態 (t=3) 都有一個最可能的路徑。比如說,在 t=3 時刻的三個狀態都有一個如下的最可能的路徑:

  我們可以稱這些路徑為部分最優路徑。這些部分最優路徑都有一個概率,也就是部分概率 δ。和前向演算法中的部分概率不一樣,這裡的概率只是一個最可能路徑的概率,而不是所有路徑的概率和。

  我們可以用 δ(i, t) 來表示在t時刻,到狀態i的所有可能的序列(路徑)中概率最大的序列的概率,部分最優路徑就是達到這個最大概率的路徑,對於每一個時刻的每一個狀態都有這樣一個概率和部分最優路徑。

  最後,我們通過計算 t=T 時刻的每一個狀態的最大概率和部分最優路徑,選擇其中概率最大的狀態和它的部分最優路徑來得到全域性的最優路徑。

  2) 計算 t=1 時刻的部分概率

  當 t=1 時刻的時候,到達某個狀態最大可能的路徑還不存在,但是我們可以直接使用在 t=1 時刻某個狀態的概率和這個狀態到可觀察序列 k1 的轉移概率:

  3) 計算 t>1 時刻的部分概率

  接下來我們可以根據 t-1 時刻的部分概率來求 t 時刻的部分概率

  我們可以計算所有到狀態 X 的路徑的概率,找到其中最可能的路徑,也就是區域性最優路徑。注意到這裡,到達X的路徑必然會經過 t-1 時刻的 A、B 和 C,所以我們可以利用之前的結果。達到X的最可能的路徑就是下面三個之一:

  (狀態序列),. . .,A,X (狀態序列),. . .,B,X (狀態序列),. . .,C,X

  我們需要做的就是找到以 AX、BX 和 CX 結尾的路徑中概率最大的那個。

  根據一階馬爾科夫的假設,一個狀態的發生之和之前的一個狀態有關係,所以X在某個序列的最後發生的概率只依賴於其之前的一個狀態:

Pr (到達A的最優路徑) . Pr (X | A) . Pr (觀察狀態 | X)

  有個了這個公式,我們就可以利用t-1時刻的結果和狀態轉移矩陣和混淆矩陣的資料:

  將上面這個表示式推廣一下,就可以得到 t 時刻可觀察狀態為 kt 的第 i 個狀態的最大部分概率的計算公式:

  其中 aji 表示從狀態 j 轉移到狀態 i 的概率,bikt 表示狀態i被觀察成 kt 的概率。

  4) 後向指標

  考慮下圖

  在每一箇中間狀態和結束狀態都有一個部分最優概率 δ(i, t)。但是我們的目的是找到最可能的隱藏狀態序列,所以我們需要一個方法去記住部分最優路徑的每一個節點。

  考慮到要計算 t 時刻的部分概率,我們只需要知道 t-1 時刻的部分概率,所以我們只需要記錄那個導致了 t 時刻最大部分概率的的狀態,也就是說,在任意時刻,系統都必須處在一個能在下一時刻產生最大部分概率的狀態。如下圖所示:

  我們可以利用一個後向指標 φ 來記錄導致某個狀態最大區域性概率的前一個狀態,即

  這裡 argmax 表示能最大化後面公式的j值,同樣可以發現這個公式和 t-1 時刻的部分概率和轉移概率有關,因為後向指標只是為了找到“我從哪裡來”,這個問題和可觀察狀態沒有關係,所以這裡不需要再乘上混淆矩陣因子。全域性的行為如下圖所示:

  5) 優點

  使用 viterbi 演算法對一個可觀察狀態進行解碼有兩個重要的優點:

  a) 通過使用遞迴來減少複雜度,這點和之前的前向演算法是一樣的

  b) 可以根據可觀察序列找到最優的隱藏序列,這個的計算公式是:

其中 

  這裡就是一個從左往右翻譯的過程,通過前面的翻譯結果得到後面的結果,起始點是初始向量 π。

  3. 補充

  但在序列某個地方有噪聲干擾的時候,某些方法可能會和正確答案相差的較遠。但是 Viterbi 演算法會檢視整個序列來決定最可能的終止狀態,然後通過後向指標來找到之前的狀態,這對忽略孤立的噪聲非常有用。

  Viterbi 演算法提供了一個根據可觀察序列計算隱藏序列的很高效的方法,它利用遞迴來降低計算複雜度,並且使用之前全部的序列來做判斷,可以很好的容忍噪聲。

  在計算的過程中,這個演算法計算每一個時刻每一個狀態的部分概率,並且使用一個後向指標來記錄達到當前狀態的最大可能的上一個狀態。最後,最可能的終止狀態就是隱藏序列的最後一個狀態,然後通過後向指標來查詢整個序列的全部狀態。

3.序列集來找到一個最有可能的 HMM

 

在很多實際的情況下,HMM 不能被直接的判斷,這就變成了一個學習問題,因為對於給定的可觀察狀態序列 O 來說,沒有任何一種方法可以精確地找到一組最優的 HMM 引數 λ 使 P(O | λ) 最大,於是人們尋求使其區域性最優的解決辦法,而前向後向演算法(也稱為Baum-Welch演算法)就成了 HMM 學習問題的一個近似的解決方法。

  前向後向演算法首先對於 HMM 的引數進行一個初始的估計,但這個很可能是一個錯誤的猜測,然後通過對於給定的資料評估這些引數的的有效性並減少它們所引起的錯誤來更新 HMM 引數,使得和給定的訓練資料的誤差變小,這其實是機器學習中的梯度下降的思想。

  對於網格中的每一個狀態,前向後向演算法既計算到達此狀態的“前向”概率,又計算生成此模型最終狀態的“後向”概率,這些概率都可以通過前面的介紹利用遞迴進行高效計算。可以通過利用近似的 HMM 模型引數來提高這些中間概率從而進行調整,而這些調整又形成了前向後向演算法迭代的基礎。

  另外,前向後向演算法是 EM 演算法的一個特例,它避免了 EM 演算法的暴力計算,而採用動態規劃思想來解決問題,Jelinek 在其書《Statistical Methods for Speech Recognition》中對前向後向演算法與 EM 演算法的關係進行了詳細描述,有興趣的讀者可以參考這本書。

  類似於上面講到的前向演算法,我們也可以定義後向變數 βt(i) 來計算給定當前隱藏狀態 i 時,部分觀察序列 ot+1,ot+2,…,oT的概率,即:

  與前向演算法類似,我們也可以通過迭代演算法有效計算 βt(i),計算公式如下:

  其中

  進一步我們可以發現

  因此

  下面開始介紹前向後向演算法

  首先我們需要定義兩個輔助變數,這兩個變數可以用前文介紹過的前向變數和後向變數進行定義。

  第一個變數定義為 t 時狀態 i 和 t+1 時狀態 j 的概率,即

  該變數在網格中所代表的關係如下圖所示:

  

  該等式等價於

  利用前向變數和後向變數,上式可以表示為

  第二個變數定義為後驗概率,也就是在給定觀察狀態序列和 HMM 的情況下,t 時狀態 i 的概率,即

  利用前向變數和後向變數,上式可以表示為

  因此,下式為在任意時刻狀態 i 的期望,也就是從狀態 i 轉移到觀察狀態 o 的期望

  同樣,下式也就是從狀態 i 轉移到狀態 j 的期望

  我們可以發現定義的這兩個變數之間的關係為

  下面介紹前向後向演算法的引數學習過程,在學習的過程中,不斷更新 HMM 的引數,從而使得 P(O | λ) 最大。我們假設初始的 HMM 引數為  λ={ π, A, B },首先計算前向變數 α 和後向變數 β,再根據剛剛介紹的公式計算期望 ξ 和 ζ,最後,根據下面的3個重估計公式更新 HMM 引數。

  如果我們定義當前的 HMM 模型為 λ={ π,A,B },那麼可以利用該模型計算上面三個式子的右端;我們再定義重新估計的 HMM 模型為,那麼上面三個式子的左端就是重估的 HMM 模型引數。Baum 及他的同事在70年代證明了,因此如果我們迭代地計算上面三個式子,由此不斷地重新估計 HMM 的引數,那麼在多次迭代後可以得到 HMM 模型的一個最大似然估計。不過需要注意的是,前向後向演算法所得的這個最大似然估計是一個區域性最優解。

 

參考:https://blog.csdn.net/likelet/article/details/7056068