隱馬爾科夫模型HMM(一)HMM模型

劉建平Pinard發表於2017-06-06

    隱馬爾科夫模型HMM(一)HMM模型基礎

    隱馬爾科夫模型HMM(二)前向後向演算法評估觀察序列概率

    隱馬爾科夫模型HMM(三)鮑姆-韋爾奇演算法求解HMM引數

    隱馬爾科夫模型HMM(四)維特比演算法解碼隱藏狀態序列

    隱馬爾科夫模型(Hidden Markov Model,以下簡稱HMM)是比較經典的機器學習模型了,它在語言識別,自然語言處理,模式識別等領域得到廣泛的應用。當然,隨著目前深度學習的崛起,尤其是RNNLSTM等神經網路序列模型的火熱,HMM的地位有所下降。但是作為一個經典的模型,學習HMM的模型和對應演算法,對我們解決問題建模的能力提高以及演算法思路的擴充還是很好的。本文是HMM系列的第一篇,關注於HMM模型的基礎。

1. 什麼樣的問題需要HMM模型

    首先我們來看看什麼樣的問題解決可以用HMM模型。使用HMM模型時我們的問題一般有這兩個特徵:1)我們的問題是基於序列的,比如時間序列,或者狀態序列。2)我們的問題中有兩類資料,一類序列資料是可以觀測到的,即觀測序列;而另一類資料是不能觀察到的,即隱藏狀態序列,簡稱狀態序列。

    有了這兩個特徵,那麼這個問題一般可以用HMM模型來嘗試解決。這樣的問題在實際生活中是很多的。比如:我現在在打字寫部落格,我在鍵盤上敲出來的一系列字元就是觀測序列,而我實際想寫的一段話就是隱藏序列,輸入法的任務就是從敲入的一系列字元儘可能的猜測我要寫的一段話,並把最可能的詞語放在最前面讓我選擇,這就可以看做一個HMM模型了。再舉一個,我在和你說話,我發出的一串連續的聲音就是觀測序列,而我實際要表達的一段話就是狀態序列,你大腦的任務,就是從這一串連續的聲音中判斷出我最可能要表達的話的內容。

    從這些例子中,我們可以發現,HMM模型可以無處不在。但是上面的描述還不精確,下面我們用精確的數學符號來表述我們的HMM模型。

2. HMM模型的定義

    對於HMM模型,首先我們假設$Q$是所有可能的隱藏狀態的集合,$V$是所有可能的觀測狀態的集合,即:$$Q = \{q_1,q_2,...,q_N\}, \; V =\{v_1,v_2,...v_M\}$$

    其中,$N$是可能的隱藏狀態數,$M$是所有的可能的觀察狀態數。

    對於一個長度為$T$的序列,$I$對應的狀態序列, $O$是對應的觀察序列,即:$$I = \{i_1,i_2,...,i_T\}, \; O =\{o_1,o_2,...o_T\}$$

    其中,任意一個隱藏狀態$i_t \in Q$,任意一個觀察狀態$o_t \in V$

    HMM模型做了兩個很重要的假設如下:

    1) 齊次馬爾科夫鏈假設。即任意時刻的隱藏狀態只依賴於它前一個隱藏狀態,這個我們在MCMC(二)馬爾科夫鏈中有詳細講述。當然這樣假設有點極端,因為很多時候我們的某一個隱藏狀態不僅僅只依賴於前一個隱藏狀態,可能是前兩個或者是前三個。但是這樣假設的好處就是模型簡單,便於求解。如果在時刻$t$的隱藏狀態是$i_t= q_i$,在時刻$t+1$的隱藏狀態是$i_{t+1} = q_j$, 則從時刻$t$到時刻$t+1$的HMM狀態轉移概率$a_{ij}$可以表示為:$$a_{ij} = P(i_{t+1} = q_j | i_t= q_i)$$

     這樣$a_{ij}$可以組成馬爾科夫鏈的狀態轉移矩陣$A$:$$A=\Big [a_{ij}\Big ]_{N \times N}$$

    2) 觀測獨立性假設。即任意時刻的觀察狀態只僅僅依賴於當前時刻的隱藏狀態,這也是一個為了簡化模型的假設。如果在時刻$t$的隱藏狀態是$i_t= q_j$, 而對應的觀察狀態為$o_t = v_k$, 則該時刻觀察狀態$v_k$在隱藏狀態$q_j$下生成的概率為$b_j(k)$,滿足:$$b_j(k) = P(o_t = v_k | i_t= q_j)$$

    這樣$b_j(k) $可以組成觀測狀態生成的概率矩陣$B$:$$B = \Big [b_j(k) \Big ]_{N \times M}$$

    除此之外,我們需要一組在時刻$t=1$的隱藏狀態概率分佈$\Pi$: $$\Pi = \Big [ \pi(i)\Big ]_N \; 其中 \;\pi(i) = P(i_1 = q_i)$$

    一個HMM模型,可以由隱藏狀態初始概率分佈$\Pi$, 狀態轉移概率矩陣$A$和觀測狀態概率矩陣$B$決定。$\Pi,A$決定狀態序列,$B$決定觀測序列。因此,HMM模型可以由一個三元組$\lambda$表示如下:$$\lambda = (A, B, \Pi)$$

3.一個HMM模型例項

    下面我們用一個簡單的例項來描述上面抽象出的HMM模型。這是一個盒子與球的模型,例子來源於李航的《統計學習方法》。

    假設我們有3個盒子,每個盒子裡都有紅色和白色兩種球,這三個盒子裡球的數量分別是:

盒子 1 2 3
紅球數 5 4 7
白球數 5 6 3

    按照下面的方法從盒子裡抽球,開始的時候,從第一個盒子抽球的概率是0.2,從第二個盒子抽球的概率是0.4,從第三個盒子抽球的概率是0.4。以這個概率抽一次球后,將球放回。然後從當前盒子轉移到下一個盒子進行抽球。規則是:如果當前抽球的盒子是第一個盒子,則以0.5的概率仍然留在第一個盒子繼續抽球,以0.2的概率去第二個盒子抽球,以0.3的概率去第三個盒子抽球。如果當前抽球的盒子是第二個盒子,則以0.5的概率仍然留在第二個盒子繼續抽球,以0.3的概率去第一個盒子抽球,以0.2的概率去第三個盒子抽球。如果當前抽球的盒子是第三個盒子,則以0.5的概率仍然留在第三個盒子繼續抽球,以0.2的概率去第一個盒子抽球,以0.3的概率去第二個盒子抽球。如此下去,直到重複三次,得到一個球的顏色的觀測序列:$$O=\{紅,白,紅\}$$

     注意在這個過程中,觀察者只能看到球的顏色序列,卻不能看到球是從哪個盒子裡取出的。

    那麼按照我們上一節HMM模型的定義,我們的觀察集合是:$$V=\{紅,白\},M=2$$

    我們的狀態集合是:$$Q =\{盒子1,盒子2,盒子3\}, N=3 $$

    而觀察序列和狀態序列的長度為3.

    初始狀態分佈為:$$\Pi = (0.2,0.4,0.4)^T$$

    狀態轉移概率分佈矩陣為:

$$A = \left( \begin{array} {ccc} 0.5 & 0.2 & 0.3 \\ 0.3 & 0.5 & 0.2 \\ 0.2 & 0.3 &0.5 \end{array} \right) $$

     觀測狀態概率矩陣為:

$$B = \left( \begin{array} {ccc} 0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3 \end{array} \right) $$

4. HMM觀測序列的生成

    從上一節的例子,我們也可以抽象出HMM觀測序列生成的過程。

    輸入的是HMM的模型$\lambda = (A, B, \Pi)$,觀測序列的長度$T$

    輸出是觀測序列$O =\{o_1,o_2,...o_T\}$

    生成的過程如下:

    1)根據初始狀態概率分佈$\Pi$生成隱藏狀態$i_1$

    2) for t from 1 to T

      a. 按照隱藏狀態$i_t$的觀測狀態分佈$b_{i_t}(k)$生成觀察狀態$o_t$

      b. 按照隱藏狀態$i_t$的狀態轉移概率分佈$a_{i_t\;\;i_{t+1}}$產生隱藏狀態$i_{t+1}$

    所有的$o_t$一起形成觀測序列$O =\{o_1,o_2,...o_T\}$

5. HMM模型的三個基本問題

     HMM模型一共有三個經典的問題需要解決:

    1) 評估觀察序列概率。即給定模型$\lambda = (A, B, \Pi)$和觀測序列$O =\{o_1,o_2,...o_T\}$,計算在模型$\lambda$下觀測序列$O$出現的概率$P(O|\lambda)$。這個問題的求解需要用到前向後向演算法,我們在這個系列的第二篇會詳細講解。這個問題是HMM模型三個問題中最簡單的。

    2)模型引數學習問題。即給定觀測序列$O =\{o_1,o_2,...o_T\}$,估計模型$\lambda = (A, B, \Pi)$的引數,使該模型下觀測序列的條件概率$P(O|\lambda)$最大。這個問題的求解需要用到基於EM演算法的鮑姆-韋爾奇演算法, 我們在這個系列的第三篇會詳細講解。這個問題是HMM模型三個問題中最複雜的。

    3)預測問題,也稱為解碼問題。即給定模型$\lambda = (A, B, \Pi)$和觀測序列$O =\{o_1,o_2,...o_T\}$,求給定觀測序列條件下,最可能出現的對應的狀態序列,這個問題的求解需要用到基於動態規劃的維特比演算法,我們在這個系列的第四篇會詳細講解。這個問題是HMM模型三個問題中複雜度居中的演算法。

(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com) 

相關文章