HMM隱馬爾可夫模型來龍去脈(二)

Charzueus發表於2020-09-01

目錄

  前言

  預備知識 

  一、估計問題

    1、問題推導

             2、前向演算法/後向演算法

  二、序列問題

             1、問題推導

             2、維特比演算法

  三、引數估計問題

             1、問題推導

             2、期望最大化演算法(前向後向演算法)

  總結


前言

HMM隱馬爾可夫模型,這個名字看起來熟悉,其實很是陌生。它給人一種很神祕高深的感覺,確實,很強大的一個模型,在概率論統計學應該是應用廣泛而且很重要的;雖說很高深強大的一個模型,其原理確實我們最基礎的理論知識不斷推導計算來的。

上一篇《HMM隱馬爾可夫模型來龍去脈(一)》,從HMM基礎理論開始,我們可以學習得知,其原理來源於概率論基本重要知識,包括了條件概率、貝葉斯公式、概率分佈函式...

而這一篇將繼續探索隱馬爾可夫模型,深入理解模型背後解決的各種問題,力求基本弄懂這個似乎熟悉而又陌生深奧的模型。接下來探索HMM三個經典的基本問題的解決方案,逐步通過問題推導,公式解析,演算法實現,有章可循地真正來理解來龍去脈!


預備知識 

 建議先翻看前一篇《HMM隱馬爾可夫模型來龍去脈(一)》逐步詳細介紹的內容。

一般的,將HMM簡單表示為一個三元組\mu=(A,B,\pi) , π是初始狀態的概率分佈,A是狀態轉移概率,B是符號發射概率。

由此觀察序列O=O_1O_2...O_T可以通過以下步驟產生:

  1. 根據初識狀態的概率分佈\pi_i 選擇一個初識狀態q_1=s_i.
  2. 設t=1.
  3. 根據狀態s_i的符號發射概率分佈b_i(k)輸出O_t=v_k.
  4. 根據狀態轉移概率分佈a_{ij},將此時 t 的狀態轉移到新的狀態 q_{t+1}=s_j.
  5. t=t+1,如果 t<T ,重複執行步驟3和4,否則結束演算法。

一、估計問題

1、問題推導

估計問題:給定一個觀察序列O=O_1O_2...O_T 和模型\mu=(A,B,\pi),如何快速計算序列O的概率。即P(O|\mu) ?

我們很直觀知道,這其實就是一個條件概率的計算問題。在給定的模型條件下,可以推導以下:

首先根據預備知識可以計算任意狀態序列Q下,觀察序列O的概率:

P(O|Q)=\prod_{t=1}^{T}P(O_t|q_t)=b_{q_1}(O_1 )\times b_{q_2}(O_2)\times b_{q_T}(O_T)

而且 P(Q)=\pi_{q_1}a_{q_1q_2}...a_{q_{T-1}q_T} ,

另外根據條件概率P(O,Q)=P(O|Q)\times P(Q).

綜上公式,求得在模型\mu=(A,B,\pi)下,

 P(O)=\sum_{Q}P(O,Q)=\sum_{Q}P(O|Q)P(Q)=\sum_{Q}\pi_{q_1}b_{q_1}(O_1)\prod_{t=1}^{T}a_{q_tq_{t+1}}b_{q_{t+1}}(O_{t+1}) .

然而,這個直觀簡單的推導公式,計算時間複雜度達到指數級爆炸!N^{T} ! ! ! ,所以呢,需要尋找更高效的計算方法來解決指數級時間問題。


由此,引出HMM中的動態規劃方法,一般用格架的組織形式描述。格架演算法示意圖如下:

思想是:對於一個個狀態下的HMM,某一時刻結束時,每個格子能夠記錄HMM所有輸出符號的概率,較長子路徑概率可以由較短子路徑概率計算出來。

2、前向演算法/後向演算法

第一步,定義一個前向變數\alpha_t(i)=P(O_1O_2O_3...O_t,q_t=s_i),表示在時間 t ,HMM在狀態 s_i 輸出一個序列的概率。

第二步,根據動態規劃思想,在時間 t+1 的概率計算為:\alpha_{t+1}=(\sum_{i=1}^{N}\alpha_{t}a_{ij})b_j(O_{t+1})  , 其中表示從狀態 i 轉移到狀態 j 並輸出觀察符號O的概率。

第三步,根據前向變數,可以計算P(O|\mu),就是在所有狀態下觀察到序列O的概率:

P(O|\mu)=\sum_{1=1}^{N}\alpha_T(i)

前向變數歸納關係圖:

前向演算法總結:

1、初始化:\alpha_t(i)=\pi_ib_i(O_1),1\leqslant i\leqslant N

2、歸納計算:\alpha_{t+1}=(\sum_{i=1}^{N}\alpha_{t}a_{ij})b_j(O_{t+1}),1\leqslant t \leqslant T-1

3、求和:P(O|\mu)=\sum_{1=1}^{N}\alpha_T(i)

複雜度分析:步驟1計算每個前向變數需要考慮N個狀態轉移,步驟2計算N個前向變數,所以時間複雜度O(N*N),步驟3在時間1~T過程中,計算量為O(T),所以總時間複雜度為O(N^2T). 因此,使用該演算法解決在多項式時間內計算問題。

後向演算法方法類似,使用動態規劃方法計算,後向變數定義為 \beta _t(i)=P(O_{t+1}...O_T|q_t=s_i,\mu),歸納關係圖如下:

後向演算法總結:

1、初始化:\beta _T(i)=1,1\leqslant i\leqslant N

2、歸納計算:\beta_{t}=\sum_{j=1}^{N}a_{ij}b_j(O_{t+1})\beta_{t+1}(j),1\leqslant t \leqslant T-1;1\leqslant i\leqslant N

3、求和:P(O|\mu)=\sum_{1=1}^{N}\pi_ib_i(O_1)\beta_1(i). 同理,時間複雜度也是O(N^2T)。  

二、序列問題

1、問題推導

序列問題:給定一個觀察序列O=O_1O_2...O_T 和模型\mu=(A,B,\pi),如何快速選擇最優狀態序列Q,使之最好地解釋觀察序列O?

對該問題的正確理解就是,給定觀察序列和模型後,使條件概率P(O|\mu)最大的狀態序列,即\hat{Q}=argmaxP(Q|O,\mu).

因此,維位元演算法定義了一個維位元變數\delta _t(i). 在時間 t 時,HMM沿著某一路徑到達狀態 s_i,使觀察序列O概率最大化。

\delta _t(i)=maxP(q_1,q_2,...,q_t=s_i|O_1O_2...O_t|\mu).

2、維特比演算法

\delta _t(i)有如下遞迴關係,\delta _t(i)=max[\delta_t(j)a_{ij}]b_i(O_{t+1}),根據這個遞迴關係,所以可以運用動態規劃搜尋技術。

另外,為了記錄時間 t 時,HMM通過的一條概率最大的路徑達到狀態s_i ,演算法設定了另外一個變數\varphi _t(i)來記錄前一個時間的狀態。

維位元演算法如下:

三、引數估計問題

1、問題推導

引數估計問題:給定一個觀察序列和模型,使得P(O|\mu)最大化。

我們知道,HMM中的狀態序列是不可見的,所以這裡採用期望最大化法(EM),它可以用於含有隱變數的統計模型的引數最大似然估計。

基本思想:從\mu_0得到從某一個狀態轉移到另一個狀態的期望次數,由此得到模型\mu_1,然後,重新估計模型的引數,執行這個迭代過程,直到引數收斂於最大似然估計值。

2、期望最大化演算法(前向後向演算法)

這種EM方法的具體實現使用到了前向後向演算法(forward-backward algorithm)。

這裡需要用到幾個變數表示概率:

公式(6-24):在時間 t 位於狀態s_i ,時間 t+1位於狀態s_j的概率\varepsilon _t(i,j)=P(q_t=s_i,q_{t+1}=s_j,O|\mu).

公式(6-25):另外,在時間 t 位於狀態s_i的概率\gamma _t(i)=\sum_{j=1}^{N}\varepsilon _t(i,j)

\mu 的引數估計公式:

公式(6-26):\bar{\pi_i}=P(q_1=s_i|O,\mu)=\gamma _1(i)

公式(6-27):\bar{a_{ij}}=\frac{\sum_{t=1}^{T-1}\varepsilon_t(i,j) }{\sum_{t=1}^{T-1}\gamma_t(i)}

公式(6-28.):\bar{b_j(k)}=\frac{\sum_{t=1}^{T}\gamma _t(j)\times \delta (O_t,v_k)}{\sum_{t=1}^{T}\gamma _t(j)}

由上述公式,得出前向後向演算法

總結

至此,我們對隱馬爾可夫模型(HMM)有了比較深入的理解,從原理上全面認識HMM實現思想,這一篇非常抽象的展示許多公式,雖然對這些公式不能夠完全掌握,但是最重要的是,能夠理解HMM三個基本問題解決方案的思想方法,這些經典奇妙的演算法也是人們在不斷探索中發現的並完善。所以,對於初學者來說,思想方法最重要,原理需要理明白,具體應用實現是利用已經封裝好的工具。

這一篇將探索HMM三個經典的基本問題的解決方案,逐步通過問題推導,公式解析,演算法實現,對於HMM理解不再天馬行空般,來龍去脈基本理清!希望能幫助到像我一樣初學者的夥伴,歡迎大佬交流指正!

兩篇內容深入理解HMM:


我的CSDN部落格:https://blog.csdn.net/Charzous/article/details/108311177

我的部落格園:https://www.cnblogs.com/chenzhenhong/p/13592058.html

版權宣告:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結和本宣告。

本文連結:https://blog.csdn.net/Charzous/article/details/108311177

相關文章