1. 程式人生 > >隱馬爾可夫模型的三大問題及求解方法

隱馬爾可夫模型的三大問題及求解方法

遞推公式 規劃 觀測 給定 image 步驟 統計學 參數 狀態

本文主要介紹隱馬爾可夫模型以及該模型中的三大問題的解決方法。

隱馬爾可夫模型的是處理序列問題的統計學模型,描述的過程為:由隱馬爾科夫鏈隨機生成不可觀測的狀態隨機序列,然後各個狀態分別生成一個觀測,從而產生觀測隨機序列。

在這個過程中,不可觀測的序列稱為狀態序列(state sequence), 由此產生的序列稱為觀測序列(observation sequence)。

該過程可通過下圖描述:

技術分享圖片

上圖中, $X_1,X_2,…X_T$是隱含序列,而$O_1, O_2,..O_T$是觀察序列。

隱馬爾可夫模型由三個概率確定:

  1. 初始概率分布,即初始的隱含狀態的概率分布,記為$\pi$;
  2. 狀態轉移概率分布
    ,即隱含狀態間的轉移概率分布, 記為$A$;
  3. 觀測概率分布,即由隱含狀態生成觀測狀態的概率分布, 記為$B$。

以上的三個概率分布可以說就是隱馬爾可夫模型的參數,而根據這三個概率,能夠確定一個隱馬爾可夫模型$\lambda = (A, B, \pi)$。

而隱馬爾科夫鏈的三個基本問題為:

  1. 概率計算問題。即給定模型$\lambda = (A, B, \pi)$和觀測序列$O$,計算在模型$\lambda$下觀測序列出現的最大概率$P(O|\lambda)$;
  2. 學習問題。即給定觀測序列$O$,估計模型的參數$\lambda$, 使得在該參數下觀測序列出現的概率最大,即$P(O|\lambda)$最大;
  3. 解碼問題。給定模型$\lambda = (A, B, \pi)$和觀測序列$O$,計算最有可能產生這個觀測序列的隱含序列$X$, 即使得概率P(X|O, \lambda)最大的隱含序列$X$。

一、概率計算問題

概率計算問題理論上可通過窮舉法來解決,即窮舉所有可能的隱含狀態序列,然後計算所有可能的隱含序列生成觀測序列的概率,假設觀測序列的長度為$n$, 且每個觀測狀態對應的可能的隱含狀態長度為$m$, 則這種方法的時間復雜度就是$O(m^n)$, 這樣的時間復雜度顯然是無法接受的,因此在實際中往往不采用這種方法,而是采用前向算法和後向算法, 前向算法和後向算法都是通過動態規劃來減少計算的時間復雜度,兩者的不同點就是計算的方向不同。

1.1 前向算法

前向算法需要先定義前向概率:

前向概率定義為到時刻$t$為止觀測序列為$o_1,o_2,o_3…o_t$,且時刻$t$的隱含狀態為所有的隱含狀態中的第$i$個(記為$q_i$),則前向概率可記為
$$\alpha_t(i) = P(o_1,o_2,o_3…o_t,x_t = q_i|\lambda)$$

定義了前向概率,便可遞歸地求解前向概率和觀測序列的概率$P(o_1,o_2,o_3…o_t|\lambda)$。


初始的狀態為:
$$\alpha_1(i) = \pi_ib_i(o_1)~~i=1,..m$$
上式中的$m$表示隱含狀態的數目,$\pi_i$表示各個隱含狀態的初始概率,$b_i(o_1)$表示第$i$個隱含狀態生成觀測狀態$o_1$的概率。


則遞推的公式為:
$$\alpha_{t+1}(i) = (\sum_{j=1}^N \alpha_t(j) a_{ji} )b_i(o_{t+1})~~i=1,..m$$
上式中的$a_{ji}$表示從隱含狀態$j$轉移到隱含狀態$i$的狀態轉移概率。通過下圖可較直觀地看到前向遞推公式的過程:

技術分享圖片

最終計算得到的概率為(其中$T$為觀測序列的長度):
$$P(O|\lambda) = \sum_{i=1}^{m}\alpha_T(i)$$

1.2 後向算法

類似前向算法,後向算法也可用於求解這個問題,只是方向是從後到前的。同樣的,需要先定義後向概率:

後向概率指時刻$t$的隱含狀態為所有隱含狀態中的第$i$個(記為$q_i$), 且時刻$t+1$到$T$的觀測序列為$o_{t+1}, o_{t+2},….o_T$的概率,記為:
$$\beta_t(i) = P(o_{t+1}, o_{t+2},….o_T, x_t = q_i|\lambda)$$

初始狀態定義為:
$$\beta_T(i) = 1~~i=1,2,…m$$
這裏概率為1的原因是本來還需要看看時刻$T$後面有什麽東西,但因為最後一個時刻$T$後面已經沒有時刻,即不需要再觀測某個東西,所以隨便給個什麽狀態都可以。

遞推公式為:
$$\beta_t(i) = \sum_{j=1}^ma_{ij}b_j(o_{t+1})\beta_{t+1}(j)~~i=1,2,…m$$

上面的式子中的符號與前向算法中的一致,其過程可通過下圖更直觀理解:

技術分享圖片


最終計算得到的概率為:
$$P(O|\lambda) = \sum_{i=1}^m \pi_ib_i(o_1)\beta_1(i)$$

分析可知,前向算法和後向算法的時間復雜度均是$O(m^2T)$,$m$為隱含狀態的個數,$T$為序列長度。

二、學習問題

學習問題要根據觀測序列來推導模型參數,這一類的問題對應到概率論中的極大似估計問題。但是這裏是有隱含變量的極大似然估計,因此直接無法通過直接求導進行求解,而要通過EM算法來求解這一類問題。

EM 算法是一類算法,用於解決有隱含變量的概率模型參數的極大似然估計,具體到隱馬爾可夫模型中的具體算法是 Baum-Welch 算法。

註:這裏采用 EM 算法的前提是問題僅給出了觀測序列,假如同時給出了觀測序列和隱含序列,可直接通過最大似然估計求解。

這裏只給出 Baum-Welch 算法的流程,而省去其推導過程:
1. 初始化模型參數:選取$a_{ij}^{(0)}, b_j^{(0)}, \pi_i^{(0)}$, 得到模型$\pi^{(0)} = (A^{(0)}, B^{(0)}, \pi^{(0)})$;
2. E 步,求解兩個中間變量$\gamma_t(i), \xi_t(i,j)$,兩者的含義如下:
$\gamma_t(i)$:給定模型$\lambda$和觀測序列$O$,在時刻$t$的隱含狀態為$q_i$的概率, 即$\gamma_t(i) = P(x_t = q_i | O, \lambda)$;
$\xi_t(i,j)$:給定模型$\lambda$和觀測序列$O$,在時刻$t$的隱含狀態為$q_i$, 時刻$t+1$的隱含狀態為$q_i$的概率, 即$\xi_t(i,j) = P(x_t = q_i, x_{t+1} = q_j | O, \lambda)$.

結合前面的前向概率和後向概率的定義,計算這兩個中間變量的公式如下($m$表示隱含狀態的總個數):
$$\gamma_t(i) = \frac{\alpha_t(i) \beta_t(i)}{\sum_{j=1}^m \alpha_t(j) \beta_t(j)}$$
$$\xi_t(i,j) = \frac{\alpha_t(i) a_{ij} b_j(o_{t+1})\beta_{t+1}(j)}{\sum_{p=1}^m \sum_{q=1}^m \alpha_t(p) a_{pq} b_q(o_{t+1})\beta_{t+1}(q)}$$

3. M步,同時E步求解出的兩個中間變量來求解模型的參數,求解公式如下:
$$a_{ij} = \frac{\sum_{t=1}^T \xi_t(i,j)}{\sum_{t=1}^T \gamma_t(i)}$$
$$b_j(k) = \frac{\sum_{t=1}^T \gamma_t(j)I(o_t = v_k)}{\sum_{t=1}^T \gamma_t(j)}$$
$$\pi_i = \gamma_1(i)$$

上式中的$I(o_t = v_k)$表示時刻$t$的觀察狀態為$v_k$時, $I(o_t = v_k)$才為1,否則為0.

叠代進行E步驟和M步,將最終收斂的結果作為模型的參數.

三、解碼問題

解碼問題理論上也可以通過窮舉法來解決,就是窮舉所有可能的隱含序列並計算在這個隱含序列下觀測序列的概率,並選擇概率最大的那個隱含序列,但是窮舉所有可能的隱含序列的時間復雜度也是指數級別的,跟第一個問題一樣,在實際中往往也是不常用的。
實際中,解碼問題通過動態規劃來降低時間復雜度,並且已經有了成熟的解決方法,就是著名的維特比算法。

轉自博文:http://wulc.me/2017/07/14/隱馬爾可夫模型的三大問題及求解方法/

隱馬爾可夫模型的三大問題及求解方法