機器學習模型之隱馬爾可夫(HMM)

1、隱馬爾可夫模型簡介

隱馬爾可夫模型是一種生成模型,其廣泛的應用於自然語言處理,語音識別,生物信息領域。

其模型可以描述爲由狀態集合,觀測集合,初始集合生成相應的狀態序列和觀測序列的任務。定義如下

設Q表示狀態集合,V表示觀測集合。狀態集合的個數爲N,觀測集合的個數爲M,

\[Q = {q_{1},q_{2}......q_{N}} \\ V = {v_{1},v_{2}......v_{M}} \]

I是長度爲T的狀態序列,O是長度爲T的觀測序列。

\[I = {i_{1},i_{2}....i_{T}} \\ O = {o_{1},o_{2}....o_{T}} \]

A是狀態轉移概率矩陣。表示由狀態\(q_{i}\)轉移到狀態\(q_{j}\)的概率大小

\[A = [a_{ij}]_{N * N} \]

B是觀測概率矩陣,表示由狀態\(q_{j}\)生成觀測\(o_{k}\)的概率值。

\[B = [b_{j}(k)]_{N*M} \]

\(\pi\)表示狀態初始值

\[\pi = [\pi_{i}] \]

所以,綜上,隱馬爾可夫模型可以用一個三元組來表示

\[\lambda = (A,B,\pi) \]

隱馬爾可夫模型有兩個假設:1、任何時刻t的狀態只依賴於前一個時刻的狀態。2、任意時刻的觀測輸出只依賴於當前時刻的狀態。

隱馬爾可夫模型有三個基本問題,接下來我們就一一進行詳解,分別是:

  • 1、概率計算問題
    給定\(\lambda\),計算觀測序列O的概率,即\(p(O|\lambda)\)
  • 2、學習問題
    給定觀測序列O,學習參數\(\lambda\)使得\(p(O|\lambda)\)最大
  • 3、預測問題
    給定觀測序列O和參數\(\lambda\),求使得\(p(I|O)\)最大的觀測序列

2、概率計算問題

概率計算問題是已知參數\(\lambda\)來計算給定的觀測序列O,我們有三種方法來計算\(P(O|\lambda)\),暴力解決法,前向計算法,後向計算法

2.1、暴力解決法

根據給定的參數\(\lambda\)我們可以窮舉出所有得到序列\(O={o_{1},o_{2}....o_{T}}\)的可能性,並將相應的可能性相加即可得到最終的結果。對於任意一個狀態序列\(I={i_{1},i_{2}....i_{T}}\)來說,\(P(I|\lambda) = \pi_{i_{1}} a_{i_{1}i_{2}} a_{i_{2}i_{3}}......a_{i_{T-1}i_{T}}\),對於某一個固定的序列I來說,\(P(O|I,\lambda) = b_{i_{1}}(o_{1}) b_{i_{2}}(o_{2})....b_{i_{T}}(o_{T})\),則對於一條固定的狀態序列來說

\[P(O,I|\lambda) = \pi_{i_{1}} b_{i_{1}}(o_{1}) a_{i_{1}i_{2}} b_{i_{2}}(o_{2}) ...... a_{i_{T-1}i_{T}} b_{i_{T}}(o_{T}) \]

那麼,對於所有的觀測序列I來說,其概率爲

\[P(O|\lambda) = \sum\limits_{I} \pi_{i_{1}} b_{i_{1}}(o_{1}) a_{i_{1}i_{2}} b_{i_{2}}(o_{2}) ...... a_{i_{T-1}i_{T}} b_{i_{T}}(o_{T}) \]

這裏表示說,對於每一條狀態序列來說,我們都可以得到相應的概率輸出,最終,我們將所有的概率做一個加和,即可得到結果。

這種方法理論上是可行的,但在實際操作的時候,其時間複雜度爲\(O(TN^{T})\),這裏\(N^{T}\)表示一個排列組合,即將個數爲N的狀態放在T個時間上的排列組合。\(T\)表示時間步驟,對於每一個固定的狀態序列來說,都需要複雜度爲\(O(T)\),所以最終的時間複雜度爲\(O(TN^{T})\),所以,這種方法由於時間複雜度較高,實際中不適用。

2.2、前向計算法

前向算法的邏輯如下所示。前向算法的整體邏輯是,首先每一個時間t,計算當前時間的每個狀態到當前序列的概率值,在時間t+1步,將上一個時間t計算出來的概率值進行相加,然後再計算t+1時刻的每個狀態的概率值。再最後一步T,將當前計算的狀態概率值相加即可。時間複雜度爲\(O(N^{2}T)\)

2.3、後向計算法

後向計算法的邏輯如下所示。其整體邏輯是從後向前進行計算,在每一個t+1步計算所有狀態的概率值,在t步利用t+1計算的概率值和當前的概率轉移等得到當前所有狀態的概率值。

3、學習問題

學習問題是根據觀測序列O來學習參數\(\lambda,I\)這兩個參數,由於參數有含有隱變量\(I\),這塊需要用EM算法(這塊的推導稍微有些複雜,後續弄懂了再推吧)

4、預測問題

預測問題是已知\(\lambda\)\(O\),預測狀態序列\(I^{*} = i_{1}^{*},i_{2}^{*}.....i_{t}^{*}\),可以用動態規劃的方法來解決(也叫維特比算法)如下


這裏可以用這個圖來進行理解,維特比算法的思想是對於前一個時間t的狀態概率來說,轉移到時間t+1的狀態中,我們選擇可以使概率值最大的狀態概率,並用一個集合記錄這個最大概率是從時刻t的哪個狀態來的,這裏選擇最大的概率一點好處就是少算了許多不值得算的概率,減少了計算量。換一種方式理解的話,假設我們狀態有3個,時間T爲10,那其實我們構造了兩個3 * 10的矩陣,第一個矩陣爲\(W_{ij}\),表示第i個狀態在第j個時刻的輸出概率值,這個值根據\(max(W_{1j-1}*a_{1j},W_{2j-1}*a_{2j},W_{3j-1}*a_{3j})*b_{j}(o)\)公式得到,而第二個矩陣\(V_{ij}\)表示第i個狀態的在第j個時刻的最大值是由j-1時刻的哪個狀態得來的,比如剛纔式子中最大值是第二個即\(W_{2j-1}*a_{2j}\),則\(V_{ij} = 2\)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章