機器學習算法之隱馬爾可夫模型

馬爾可夫性質及馬爾可夫鏈

馬爾可夫性質

設 \{X(t), t\in T\} 是一個隨機過程,E爲其狀態空間,若對於任意的 t_1< t_2 < \dots < t_n < t 任意的 x_1, x_2, \dots, x_n, x\in Ex ,隨機變量X(t) 在已知變量 X(t_1 )=x_1, \dots, X(t_n )=x_n 之下的條件分佈函數只與 X(t_n)=x_n 有關,而與 X(t_1)=x_1, \dots, X(t_{n-1})=x_{n-1} 無關,即條件分佈函數滿足下列等式,此性質稱爲馬爾可夫性質。如果隨機過程滿足馬爾可夫性,則該過程稱爲馬爾可夫過程。

                                   \begin{aligned}p(X(t)\le x|X(t_1)=x_1, \dots, X(t_n)=x_n)&=p(X(t)\le x|X(t_n)=x_n) \\p(X_{n+1}=x|X_1=x_1, \dots, X_n=x_n)&=p(X_{n+1}=x|X_n=x_n)\end{aligned}
 

馬爾可夫鏈

馬爾可夫鏈是指具有馬爾可夫性質的隨機過程。在過程中,在給定當前信息的情況下,過去的信息狀態對於預測將來狀態是無關的。

在馬爾可夫鏈的每一步,系統根據概率分佈,可以從一個狀態變成另外一個狀態,也可以保持當前狀態不變。狀態的改變叫做轉移,狀態改變的相關概率叫做轉移概率。

馬爾可夫鏈中的三元素是:狀態空間S、轉移概率矩陣P、初始概率分佈π。

隱馬爾可夫模型

隱馬爾可夫模型(Hidden Markov Model,HMM)是一種統計模型,在語音識別、行爲識別、NLP、故障診斷等領域具有高效的性能。

HMM是關於時序的概率模型,描述一個含有未知參數的馬爾可夫鏈所生成的不可觀測的狀態隨機序列,再由各個狀態生成觀測隨機序列的過程。HMM是一個雙重隨機過程,具有一定狀態的隱馬爾可夫鏈和隨機的觀測序列。

HMM隨機生成的狀態隨機序列被稱爲狀態序列,每個狀態生成一個觀測,由此產生的觀測隨機序列,被稱爲觀測序列。

 z_1, z_2, \dots, z_n 是不可觀測的狀態 x_1, x_2, \dots, x_n 是可觀測到的序列。
HMM由隱含狀態S、可觀測狀態O、初始狀態概率矩陣 π、隱含狀態轉移概率矩陣A、可觀測值轉移矩陣B(又稱爲混淆矩陣,Confusion Matrix),π 和A決定了狀態序列,B決定觀測序列,因此HMM可以使用三元符號表示,稱爲HMM的三元素:

                                                                              \lambda=(A, B, \pi)

S是所有可能的狀態集合: S=\{s_1, s_2, \dots, s_n\} 

O是所有可能的觀測集合:O=\{o_1, o_2, \dots, o_n\}

I是長度爲T的狀態序列:I=\{i_1, i_2, \dots, i_T\}

Q是對應的觀測序列:Q=\{q_1, q_2, \dots, q_T\}

A是隱含狀態轉移概率矩陣:A=[a_{ij}]_{n*n}=\begin{bmatrix}a_{11}&a_{12}&\cdots&a_{1n} \\a_{21}&a_{22}&\cdots&a_{2n} \\\vdots&\vdots&\ddots&\vdots \\a_{n1}&a_{n2}&\cdots&a_{nn}\end{bmatrix}

其中a_{ij}=p(i_{t+1}=s_j|i_t=s_i) 是在時刻t處於狀態s_i 的條件下,時刻t+1轉移到狀態 s_j​ 的概率。

B是可觀測值轉移概率矩陣:B=[b_{ij}]_{n*m}=\begin{bmatrix}b_{11}&b_{12}&\cdots&b_{1m} \\b_{21}&b_{22}&\cdots&b_{2m} \\\vdots&\vdots&\ddots&\vdots \\b_{n1}&b_{n2}&\cdots&b_{nm}\end{bmatrix}

其中 b_{ij}=p(q_t=o_j|i_t=s_i) 是在時刻t處於狀態 s_i 的條件下生成觀測值 o_j 的概率。

π 是初始狀態概率向量:\pi=(\pi_i)_{1*n}=(\pi_1, \pi_2, \dots, \pi_n)

其中 \pi_i=p(i_1=s_i)  是在時刻t=1處於狀態 s_i 的概率。

HMM的兩個基本性質:

                                                 \begin{aligned}p(i_t|i_{t-1}, q_{t-1}, i_{t-2}, q_{t-2}, \dots, i_1, q_1)&=p(i_t|i_{t-1}) \\p(q_t|i_t, i_{t-1}, q_{t-1}, i_{t-2}, q_{t-2}, \dots, i_1, q_1)&=p(q_t|i_t)\end{aligned}

HMM的三個問題

  • 概率計算問題:前向-後向算法

給定模型 λ=(A,B,π) 和觀測序列 Q=\{q_1, q_2, \dots, q_T\} ,計算模型 λ 下觀測到序列Q出現的概率 P(Q|λ)

  • 學習問題:Baum-Welch算法(狀態未知)

已知觀測序列 Q=\{q_1, q_2, \dots, q_T\} ,估計模型 λ=(A,B,π) 的參數,使得在該模型下觀測序列 P(Q|λ) 最大

  • 預測問題:Viterbi算法

給定模型 λ=(A,B,π) 和觀測序列 Q=\{q_1, q_2, \dots, q_T\} ,求給定觀測序列條件概率 P(I|Q, λ) 最大的狀態序列I

概率計算問題

直接計算法

按照概率公式,列舉所有可能的長度爲T的狀態序列 I=\{i_1, i_2, \dots, i_T \} ,求各個狀態序列I與觀測序列 Q=\{q_1, q_2, \dots, q_T\}
的聯合概率 P(Q,I;λ) ,然後對所有可能的狀態序列求和,從而得到最終的概率 P(Q;λ) 。

                                    \begin{aligned}I&=\{i_1, i_2, \dots, i_T\} \\p(I; \lambda)&=\pi_{i_1}a_{i_1i_2}a_{i_2i_3}\dots a_{i_{T-1}i_T} \\Q&=\{q_1, q_2, \dots, q_T\} \\p(Q|I;\lambda)&=b_{i_1q_1}b_{i_2q_2}\dots b_{i_Tq_T} \\p(Q, I;\lambda)&=p(Q|I;\lambda)p(I;\lambda) \\&=\pi_{i_1}a_{i_1i_2}a_{i_2i_3}\dots a_{i_{T-1}i_T}b_{i_1q_1}b_{i_2q_2}\dots b_{i_Tq_T} \\p(Q;\lambda)&=\sum_Ip(Q,I;\lambda) \\&=\sum_{i_1, i_2, \dots, i_T}\pi_{i_1}a_{i_1i_2}a_{i_2i_3}\dots a_{i_{T-1}i_T}b_{i_1q_1}b_{i_2q_2}\dots b_{i_Tq_T}\end{aligned}
前向算法

給定 λ ,定義到時刻t部分觀測序列爲 Q=\{q_1, q_2, \dots, q_T\} 且狀態爲 s_i 的概率爲前向概率。記做:

\alpha_t(i)=p(q_1, q_2, \dots, q_t, i_t=s_i; \lambda)   註釋:\alpha_t(i) 代表 狀態爲 i 的隱狀態對應的 觀測狀態 的概率

初值:\alpha_1(i)=p(q_1, i_1=s_i; \lambda)=\pi_ib_{iq_1}  註釋:b_{iq_1} 代表 狀態轉移矩陣中 隱狀態爲 i ,q對應y 的概率值

遞推:對於t=1,2,…,T−1,   \alpha_{t+1}(i)=(\sum_{j=1}^n\alpha_t(j)a_{ji})b_{iq_{t+1}} 

最終:P(Q;\lambda)=\sum_{i=1}^n\alpha_T(i)

推導過程:

後向算法

給定λ,定義到時刻t狀態爲 s_i 的前提下,從t+1到T部分觀測序列爲 q_{t+1}, q_{t+2},\dots,q_T 的概率爲後向概率。記做:

\beta_t(i)=p(q_{t+1}, q_{t+2},\dots,q_T|i_t=s_i;\lambda)

初值:βT(i)=1 

遞推:對於 1t=T−1,T−2,…,1,  \beta_t(i)=\sum_{j=1}^n(a_{ij}b_{jq_{t+1}}\beta_{t+1}(j))

最終:P(Q;\lambda)=\sum_{i=1}^n\pi_ib_{iq_1}\beta_1(i)

推導過程:

單個狀態的概率

求給定模型 λ 和觀測序列 Q 的情況下,在時刻 t 處於狀態 s_i 的概率,記做: \gamma_t(i)=p(i_t=s_i|Q;\lambda)

單個狀態概率的意義主要是用於判斷在每個時刻最可能存在的狀態,從而可以得到一個狀態序列作爲最終的預測結果。

                                        \begin{aligned}p(i_t=s_i, Q;\lambda)&=\alpha_t(i)\beta_t(i) \\\gamma_t(i)&=p(i_t=s_i, Q; \lambda) \\&=\frac{p(i_t=s_i, Q;\lambda)}{p(Q; \lambda)} \\\gamma_t(i)&=\frac{\alpha_t(i)\beta_t(i)}{P(Q;\lambda)} \\&=\frac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^n\alpha_t(j)\beta_t(j)}\end{aligned}
 

兩個狀態的聯合概率

求給定模型λ λλ和觀測序列Q的情況下,在時刻t處於狀態 s_i 並在時刻t+1處於狀態 s_j  的概率,記做:

                           \begin{aligned}\xi_t(i, j)&=p(i_t=s_i, i_{t+1}=s_j|Q;\lambda) \\&=\frac{p(i_t=s_i, i_{t+1}=s_j, Q;\lambda)}{p(Q; \lambda)} \\&=\frac{p(i_t=s_i, i_{t+1}=s_j, Q;\lambda)}{\sum_{i=1}^n\sum_{j=1}^np(i_t=s_i, i_{t+1}=s_j, Q;\lambda)} \\p(i_t=s_i, i_{t+1}=s_j, Q;\lambda)&=\alpha_t(i)a_{ij}b_{jq_{t+1}}\beta_{t+1}(j)\end{aligned}

學習問題

若訓練數據包含觀測序列和狀態序列,則HMM的學習問題非常簡單,是監督學習算法。利用大數定理的結論“頻率的極限是概率”,直接給出HMM的參數估計。

                                                              \begin{aligned}\hat{\pi}_i&=\frac{|s_i|}{\sum_{i=1}^n|s_i|} \\a_{ij}&=\frac{|s_{ij}|}{\sum_{j=1}^n|s_{ij}|} \\\hat{b}_{ij}&=\frac{|q_{ij}|}{\sum_{j=1}^m|q_{ij}|}\end{aligned}

若訓練數據只包含觀測序列,則HMM的學習問題需要使用EM算法求解,是非監督學習算法。此時一般使用Baum-Welch算法。

所有的觀測數據爲 Q=\{q_1, q_2,\dots,q_T\}  ,所有的隱狀態爲 I=\{i_1, i_2, \dots, i_T\} ,則完整的數據爲 (Q,I) ,完整數據的對數似然函數爲ln(p(Q,I;λ)),然後直接使用EM算法的方式來進行參數估計。

Baum-Welch算法

                     \begin{aligned}p(Q,I; \lambda)&=\pi_{i_1}b_{i_1q_1}a_{i_1i_2}b_{i_2q_2}\dots a_{i_{T-1}i_T}b_{i_Tq_T} \\L(\lambda, \bar{\lambda})&=\sum_I\ln(p(Q, I; \lambda))p(I|Q;\bar{\lambda}) \\&=\sum_I\ln(p(Q, I; \lambda))\frac{p(I,Q;\bar{\lambda})}{p(Q;\bar{\lambda})} \\&\propto\sum_I\ln(p(Q, I; \lambda))p(I,Q;\bar{\lambda}) \\L(\lambda, \bar{\lambda})&=\sum_I\ln(\pi_{i_1})p(I, Q; \bar{\lambda})+\sum_I(\sum_{t=1}^{T-1}\ln a_{i_ti_{t+1}})p(I, Q; \bar{\lambda})+\sum_I(\sum_{t=1}^T\ln b_{i_tq_t})p(I, Q; \bar{\lambda})\end{aligned}

極大化L函數,分別可以求得π、a、b的值。

                                                                \begin{aligned}\pi_i&=\gamma_1(i) \\a_{ij}&=\frac{\sum_{t=1}^{T-1}\xi_t(i,j)}{\sum_{t=1}^{T-1}\gamma_t(i)} \\b_{ij}&=\frac{\sum_{t=1, q_t=o_j}^T\gamma_t(i)}{\sum_{t=1}^T\gamma_t(i)}\end{aligned}

預測問題

近似算法

將在每個時刻t最有可能的狀態作爲最終的預測狀態,使用下列公式計算

概率值:\begin{aligned}\gamma_(i)&=\frac{\alpha_t(i)\beta_t(i)}{P(Q;\lambda)} \\&=\frac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^n\alpha_t(j)\beta_t(j)}\end{aligned}

Viterbi算法

Viterbi算法實際是用動態規劃的思路求解HMM預測問題,求出概率最大的“路徑”,每條“路徑”對應一個狀態序列。

                                        \begin{aligned}\delta_t(i)&=\max_{i_1, i_2, \dots, i_{t-1}}p(i_t=i, i_1, i_2, \dots, i_{t-1}, q_t, q_{t-1}, \dots, q_1; \lambda) \\\delta_1(i)&=\pi_ib_{iq_1} \\\delta_{t+1}(i)&=\max_{1\le j\le n}(\delta_t(j)a_{ji})b_{iq_{t+1}} \\P^{\ast}&=\max_{1\le i\le n}\delta_T(i)\end{aligned}
HMM應用

HMM的常見應用主要用於進行特徵提取的場景中或者數據標註的場景中。

在Scikit-learn中安裝HMM工具包:

pip install hmmlearn

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