隱馬爾可夫模型

1、隱馬爾可夫模型基本概念

隱馬爾可夫模型是關(guān)于時序的概率模型,描述由一個隱藏的馬爾科夫鏈隨機(jī)生成不可觀測的狀態(tài)隨機(jī)序列,再由各個狀態(tài)生成一個觀測從而產(chǎn)生觀測隨機(jī)序列的過程。

隱馬爾可夫模型的形式定義如下:

設(shè)Q是所有可能狀態(tài)的集合,V是所有可能觀測的集合

Q=\{q_1,q_2,\dots,q_N\}\quad V=\{v_1,v_2,\dots,v_M\}

其中N為可能狀態(tài)數(shù),M為可能觀測數(shù)。

I是長度為T狀態(tài)序列O是對應(yīng)的觀測序列

I=(i_1,i_2,\dots,i_T)\quad O=(o_1,o_2,\dots,o_T)

A狀態(tài)轉(zhuǎn)移概率矩陣

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

其中:

a_{ij}=P(i_{t+1}=q_j|i_t=q_i)

B觀測概率矩陣

B=[b_j(k)]_{N\times M}

其中:

b_j(k)=P(o_t=v_k|i_t=q_j)

\pi初始狀態(tài)概率向量

\pi=(\pi_i)

其中:

\pi_i=P(i_1=q_i)

隱馬爾可夫模型由初始狀態(tài)概率向量\pi、狀態(tài)轉(zhuǎn)移概率矩陣A和觀測概率矩陣B決定。因此隱馬爾可夫模型\lambda可表示為:

\lambda=(A,B,\pi)

具體來說,長度為T的觀測序列的生成過程如下:按照初始狀態(tài)分布\pi產(chǎn)生狀態(tài)i_1,按狀態(tài)i_t的觀測概率分布b_{i_t}(k)生成o_t,按狀態(tài)i_t的狀態(tài)轉(zhuǎn)移概率分布\{a_{i_t i_{t+1}} \}產(chǎn)生狀態(tài)i_{t+1},依次遞推。

  • 由定義可知隱馬爾可夫模型的兩個基本假設(shè)

(1)齊次馬爾可夫性假設(shè),即隱藏的馬爾科夫鏈在任意時刻t的狀態(tài)只依賴于其前一時刻的狀態(tài),與其他時刻狀態(tài)及觀測無關(guān),也與時刻t無關(guān)。

(2)觀測獨(dú)立性假設(shè),即任意時刻的觀測只依賴于該時刻的馬爾科夫鏈狀態(tài),與其它觀測狀態(tài)無關(guān)。

  • 隱馬爾可夫模型的三個基本問題如下:

(1)概率計算問題:給定模型\lambda=(A,B,\pi)和觀測序列O=(o_1,o_2,\dots,o_T),計算在模型\lambda下序列O出現(xiàn)的概率P(O|\lambda)。

(2)學(xué)習(xí)問題:已知觀測序列O=(o_1,o_2,\dots,o_T),估計模型\lambda=(A,B,\pi)參數(shù),使得在該模型下觀測序列P(O|\lambda)最大。

(3)預(yù)測問題:已知模型\lambda=(A,B,\pi)和觀測序列O=(o_1,o_2,\dots,o_T),求使得P(I|O)最大的狀態(tài)序列I=(i_1,i_2,\dots,i_T)。

接下來分別闡述這三個問題的解決方法。

2、概率計算算法

2.1、直接計算法

狀態(tài)I=(i_1,i_2,\dots,i_T)的概率是:

P(I|\lambda)=\pi_{i_1}a_{i_1 i_2}\dots,a_{i_{T-1}i_T}

對固定的I=(i_1,i_2,\dots,i_T)觀測序列O=(o_1,o_2,\dots,o_T)的概率是:

P(O|I,\lambda)=b_{i_1}(o_1)b_{i_2}(o_2)\dots,b_{i_T}(o_T)

O,I同時出現(xiàn)的聯(lián)合概率為:

P(O,I|\lambda)=P(O|I,\lambda)P(I|\lambda)

從而:

P(O|\lambda)=\sum_{I}P(O,I|\lambda)=\sum_{I}P(O|I,\lambda)P(I|\lambda)

可以看到,上式是對所有可能的I序列求和,而長度為TI序列的數(shù)量是O(N^T)數(shù)量級的,而P(O,I|\lambda)的計算量是O(T)級別的,因此計算量為O(TN^T),非常大,這種算法在實際中不可行

2.2、前向算法

首先定義前向概率:給定隱馬爾可夫模型\lambda,定義到時刻t部分觀測序列為o_1,o_2,\dots,o_t且狀態(tài)為q_i的概率為前向概率,記作:

\alpha_t(i)=P(o_1,o_2,\dots,o_t,i_t=q_i|\lambda)

觀測序列概率的前向算法如下:

(1)初值:

\alpha_1(i)=\pi_i b_i(o_1),\quad i=1,2,\dots,N

(2)遞推,對t=1,2,\dots,T-1

\alpha_{t+1}(i)=\lbrack\sum_{j=1}^N \alpha_t(j) a_{ji}\rbrack b_i(o_{t+1}),\quad i=1,2,\dots,N

(3)終止:

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

前向算法高效的關(guān)鍵是局部計算前向概率,然后利用路徑結(jié)構(gòu)將前向概率遞推到全局,得到P(O|\lambda)。前向概率算法計算量是O(TN^2)級別的。

2.3、后向算法

首先定義后向概率:給定隱馬爾可夫模型\lambda,定義在時刻t狀態(tài)為q_i的條件下,從t+1T部分觀測序列為o_{t+1},o_{t+2},\dots,o_T的概率為后向概率,記作:

\beta_t(i)=P(o_{t+1},o_{t+2},\dots,o_T|i_t=q_i,\lambda)

觀測序列概率的后向算法如下:

(1)初值:

\beta_T(i)=1,\quad i=1,2,\dots,N

(2)遞推,對t=T-1,T-2,\dots,1

\beta_t(i)=\sum_{j=1}^N a_{ij}b_j (o_{t+1})\beta_{t+1}(j)

(3)終止:

P(O|\lambda)=\sum_{i=1}^N \pi_i b_i(o_1)\beta_1(i)

3、學(xué)習(xí)算法

3.1、監(jiān)督學(xué)習(xí)方法

若有S個長度相同觀測序列和對應(yīng)狀態(tài)序列\{(O_1,I_1),(O_2,I_2),\dots,(O_S,I_S) \}則可利用極大似然估計得到隱馬爾可夫模型參數(shù):

設(shè)樣本中時刻t處于狀態(tài)i時刻t+1轉(zhuǎn)移到狀態(tài)j的頻數(shù)為A_{ij},那么狀態(tài)轉(zhuǎn)移概率a_{ij}的估計為:

\hat{a}_{ij}=\frac{A_{ij}}{\sum_{j=1}^N A_{ij}}

設(shè)樣本中狀態(tài)為j觀測為k的頻數(shù)為B_{jk},那么觀測概率b_j(k)的估計為:

\hat_j(k)=\frac{B_{jk}}{\sum_{k=1}^M B_{jk}}

初始狀態(tài)\pi_i的估計\hat{\pi}_iS個樣本中初始狀態(tài)為q_i的頻率。

3.2、無監(jiān)督學(xué)習(xí)方法(Baum-Welch算法)

假設(shè)給定訓(xùn)練數(shù)據(jù)只包含S個長度為T的觀測序列\{O_1,O_2,\dots,O_S \}而沒有對應(yīng)狀態(tài)序列,我們可以把狀態(tài)數(shù)據(jù)看作不可觀測的隱數(shù)據(jù)I,則隱馬爾可夫模型事實上是一個含有隱變量的概率模型:

P(O|\lambda)=\sum_I P(O|I,\lambda)P(I|\lambda)

其參數(shù)可由EM算法實現(xiàn)。

4、預(yù)測算法

4.1、近似算法

近似算法的思想是,在每個時刻t選擇在該時刻最有可能出現(xiàn)的狀態(tài)i_t^*,從而得到一個狀態(tài)序列I^*=(i_1^*,i_2^*,\dots,i_T^*)

近似算法的優(yōu)點(diǎn)是計算簡單,缺點(diǎn)是不能保證預(yù)測的狀態(tài)序列整體是最有可能的狀態(tài)序列,因為預(yù)測的狀態(tài)序列可能有實際不發(fā)生的部分,比如存在轉(zhuǎn)移概率為0的相鄰狀態(tài)。盡管如此,近似算法還是有用的。

4.2、維特比算法

維特比算法實際上是用動態(tài)規(guī)劃解隱馬爾可夫模型預(yù)測問題,即用動態(tài)規(guī)劃求概率最大路徑(最優(yōu)路徑),此路徑對應(yīng)一個狀態(tài)序列。

定義在時刻t狀態(tài)為i的所有單個路徑(i_1,i_2,\dots,i_t)中概率最大值為:

\delta_t(i)=\max_{i_1,i_2,\dots,i_{t-1}}P(i_t=i,i_{t-1},\dots,i_1,o_t,o_{t-1},\dots,o_1|\lambda),\quad i=1,2,\dots,N

由定義得遞推式:

\begin{aligned} \delta_{t+1}(i)&=\max_{i_1,i_2,\dots,i_{t-1}}P(i_{t+1}=i,i_{t-1},\dots,i_1,o_t,o_{t-1},\dots,o_1|\lambda)\\ &=\max_{1\leq j\leq N}[\delta_t(j)a_{ji}]b_i(o_{t+1}) \end{aligned}

定義在時刻t狀態(tài)為i的所有單個路徑(i_1,i_2,\dots,i_{t-1},i)中概率最大路徑的第t-1個結(jié)點(diǎn)為:

\psi_t(i)=arg\max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}],\quad i=1,2,\dots,N

維特比算法如下:

(1)初始化:

\delta_1(i)=\pi_i b_i(o_1),\quad i=1,2,\dots,N

\psi_1(i)=0,\quad i=1,2,\dots,N

(2)遞推,對t=2,3,\dots,T:

\delta_{t}(i)=\max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}]b_i(o_t),\quad i=1,2,\dots,N

\psi_t(i)=arg\max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}],\quad i=1,2,\dots,N

(3)終止:

P^*=\max_{1\leq i\leq N}\delta_T(i)

i_T^*=arg\max_{1\leq i\leq N}[\delta_T(i)]

(4)回溯,對t=T-1,T-2,\dots,1

i_t^*=\psi_{t+1}(i_{t+1}^*)

最優(yōu)路徑為I^*=(i_1^*,i_2^*,\dots,i_T^*)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容