隱馬爾可夫模型

隱馬爾可夫模型(HMM)

設(shè) z=z_1,z_2,...,z_T 表示隱狀態(tài)序列,x=x_1,x_2,...,x_T 表示觀測(cè)狀態(tài)序列, O=\{o_1,o_2,...,o_m\} 表示觀測(cè)狀態(tài)集,S=\{s_1,s_2,\cdots,s_N\} 表示隱狀態(tài)集合。定義 A=[a_{ij}=p(z_{t+1}=s_j|z_t=s_i)] 表示隱狀態(tài)轉(zhuǎn)移概率矩陣,B=(b_j(x_k)=p(x_t=o_k|z_t=s_j)) 表示發(fā)射矩陣(觀測(cè)狀態(tài)生成概率矩陣),隱狀態(tài)初始化概率為 \pi_i=p(z_1=s_i) ,以上的參數(shù)統(tǒng)一記為 \theta。

在 HMM 中,有兩個(gè)基本假設(shè):

  1. 齊次 一階Markov 假設(shè)(未來(lái)只依賴于當(dāng)前):
    p(z_{t+1}|z_t,z_{t-1},\cdots,z_1,x_t,x_{t-1},\cdots,x_1)=p(z_{t+1}|z_t)

  2. 觀測(cè)獨(dú)立假設(shè)(當(dāng)前結(jié)果只依賴于當(dāng)前隱狀態(tài)):
    p(x_t|z_t,z_{t-1},\cdots,z_1,x_{t-1},\cdots,x_1)=p(x_t|z_t)

HMM 要解決三個(gè)問(wèn)題:

  1. Evaluation:p(x;\theta),F(xiàn)orward-Backward 算法
  2. Learning:\theta=\mathop{argmax}\limits_{\theta}p(x;\theta),EM 算法(Baum-Welch)
  3. Decoding:z=\mathop{argmax}\limits_{z}p(z|x;\theta),Viterbi 算法
    1. 預(yù)測(cè)問(wèn)題:p(z_{t+1}|x_1,x_2,\cdots,x_t)
    2. 濾波問(wèn)題:p(z_t|x_1,x_2,\cdots,x_t)

Evaluation問(wèn)題

即要求某個(gè)觀測(cè)序列出現(xiàn)的概率:
p(x;\theta)=\sum\limits_{z}p(z,x;\theta)=\sum\limits_{z}p(x|z;\theta)p(z;\theta)

后面均省略參數(shù) \theta

首先:
p(z)=p(z_1,z_2,\cdots,z_t)=p(z_t|z_1,z_2,\cdots,z_{t-1})p(z_1,z_2,\cdots,z_{t-1})

根據(jù)齊次 Markov 假設(shè):
p(z_t|z_1,z_2,\cdots,z_{t-1})=p(z_t|z_{t-1})=a_{z_{t-1},z_t}
遞推下去,所以:
p(z)=p(z_1)\prod\limits_{t=2}^Tp(z_t|z_{t-1})=\pi_{z_1}\prod\limits_{t=2}^Ta_{z_{t-1},z_t}
又由于:
p(x|z)=\prod\limits_{t=1}^Tp(x_t|z_t)=\prod\limits_{t=1}^Tb_{z_t}(x_t)
這個(gè)式子可由HMM的概率圖得到(觀測(cè)獨(dú)立假設(shè))。

于是由全概率公式,窮舉隱狀態(tài)做求和即可得到觀測(cè)序列 x 的聯(lián)合分布:
p(x)=\sum\limits_{z}(\pi_{1}\prod\limits_{t=2}^Ta_{z_{t-1},z_t}\prod\limits_{t=1}^Tb_{z_t}(x_t))\\=\sum_{z_1}\sum_{z_2}...\sum_{z_T}(\pi_{1}\prod\limits_{t=2}^Ta_{z_{t-1},z_t}\prod\limits_{t=1}^Tb_{z_t}(x_t))
因每個(gè)隱狀態(tài)都有 N 種可能,于是如果直接窮舉計(jì)算聯(lián)合分布復(fù)雜度為 O(TN^T)。所以我們需要更高效的算法來(lái)計(jì)算觀測(cè)序列的聯(lián)合分布。

Forward Algorithm

\alpha_t(i)=p(x_1,x_2,\cdots,x_t,z_t=s_i),其含義是到時(shí)刻 t 隱狀態(tài)為 s_i 的條件下觀測(cè)到序列 x_1,...,x_t 的概率, 所以,\alpha_T(i)=p(x,z_T=s_i)。于是遍歷隱狀態(tài)空間就得到了觀測(cè)序列 x_1,x_2,...,x_T 的概率:
p(x)=\sum\limits_{i=1}^Np(x,z_T=s_i)=\sum\limits_{i=1}^N\alpha_T(i)
對(duì) \alpha_{t+1}(j) ,分出一個(gè) z_t ,對(duì)其利用全概率公式,則:
\begin{align}\alpha_{t+1}(j)&=p(x_1,x_2,\cdots,x_{t+1},z_{t+1}=s_j)\nonumber\\ &=\sum\limits_{i=1}^Np(x_1,x_2,\cdots,x_{t+1},z_{t+1}=s_j,z_t=s_i)\nonumber\\ &=\sum\limits_{i=1}^Np(x_{t+1}|x_1,x_2,\cdots,z_{t+1}=s_j,z_t=s_i)p(x_1,\cdots,x_t,z_t=s_i,z_{t+1}=s_j) \end{align}
利用觀測(cè)獨(dú)立假設(shè)和齊次馬爾科夫假設(shè):
\begin{align}\alpha_{t+1}(j)&=\sum\limits_{i=1}^Np(x_{t+1}|z_{t+1}=s_j)p(x_1,\cdots,x_t,z_t=s_i,z_{t+1}=s_j)\nonumber\\ &=\sum\limits_{i=1}^Np(x_{t+1}|z_{t+1}=x_j)p(z_{t+1}=s_j|x_1,\cdots,x_t,z_t=s_i)p(x_1,\cdots,x_t,z_t=s_i)\nonumber\\ &=\sum\limits_{i=1}^Nb_{j}(x_{t+1})a_{ij}\alpha_t(i) =(\sum\limits_{i=1}^N\alpha_t(i)a_{ij})\cdot b_{j}(x_{t+1}) \end{align}
上式中 \alpha_t(i) 表示時(shí)刻 t 觀測(cè)到狀態(tài) x_i 的概率,\alpha_t(i)a_{ij} 表示觀測(cè)到 x_1,...,x_t 后隱狀態(tài)轉(zhuǎn)移到 s_j 的概率,由于時(shí)刻 t 觀測(cè)到 x_t 可由 N 種可能的隱狀態(tài)得到,所以做求和,再乘 b_j(x_{t+1}) 表示 t+1 時(shí)刻觀測(cè)到 x_{t+1} 的概率。

這樣,由初始化概率,根據(jù)遞推公式求得各個(gè) \alpha ,最后由 p(x)=\sum\limits_{i=1}^N\alpha_T(i),就可以得到觀測(cè)序列的聯(lián)合概率分布了。時(shí)間復(fù)雜度為 O(TN^2) 。

Forward Algorithm

(1)初始化:t = 1

? \alpha_1(i)=\pi_i\cdot b_i(x_1), 1\leq i \leq N

(2)遞歸計(jì)算:t = 2, 3, ... , T - 1

? \alpha_{t+1}(j)=(\sum\limits_{i=1}^N\alpha_t(i)a_{ij})\cdot b_{j}(x_{t+1}) , 1\leq j \leq N

(3)終止:

? p(x) =\sum_{i=1}^N\alpha_T(i)

初始態(tài)到 t+1? 時(shí)狀態(tài) = (初始態(tài)到 t 時(shí)狀態(tài)) \cdot (t狀態(tài) 轉(zhuǎn)移到 t+1 狀態(tài))

Backward Algorithm

Forward算法是從前往后的,當(dāng)然也可以從后往前計(jì)算,定義 \beta_t(i)=p(x_{t+1},x_{t},\cdots,x_T|z_t=s_i) ,可以這樣來(lái)理解,上式表示已知第 t 次的隱狀態(tài)為 z_t ,從 t+1 時(shí)刻到 T 時(shí)刻觀測(cè)到序列 x_{t+1},...,x_T 的概率。于是觀測(cè)序列聯(lián)合分布可表示為:

\begin{align}p(x)&=p(x_1,\cdots,x_T)\\ &=\sum\limits_{i=1}^Np(x_1,x_2,\cdots,x_T,z_1=s_i)\\ &=\sum\limits_{i=1}^N\pi_i\cdot p(x_1,x_2,\cdots,x_T|z_1=s_i)\\ &=\sum\limits_{i=1}^N\pi_i\cdot p(x_1|x_2,\cdots,x_T,z_1=s_i)\cdot p(x_2,\cdots,x_T|z_1=s_i)\\ &=\sum\limits_{i=1}^N\pi_i\cdot b_i(x_1)\cdot \beta_1(i) \end{align}
對(duì)于這個(gè) \beta_1(i) ,我們只需從后向前導(dǎo)出 \beta_t(i) 的遞推式即可:
\begin{align}\beta_t(i)&=p(x_{t+1},\cdots,x_T|z_t=s_i)\nonumber\\ &=\sum\limits_{j=1}^Np(x_{t+1},x_{t+2},\cdots,x_T,z_{t+1}=s_j|z_t=s_i)\nonumber\\ &=\sum\limits_{j=1}^Np(x_{t+1},\cdots,x_T|z_{t+1}=s_j,z_t=s_i)\cdot \underbrace{p(z_{t+1}=s_j|z_t=s_i)}_{a_{ij}}\\ &=\sum\limits_{j=1}^Np(x_{t+1},\cdots,x_T|z_{t+1}=s_j)a_{ij}\\ &=\sum\limits_{j=1}^Np(x_{t+1}|x_{t+2},\cdots,x_T,z_{t+1}=s_j)\cdot\underbrace{p(x_{t+2},\cdots,x_T|z_{t+1}=s_j)}_{\beta_{t+1}(j)}\cdot a_{ij}\\ &=\sum\limits_{j=1}^Np(x_{t+1}|z_{t+1}=s_j)\cdot\beta_{t+1}(j)\cdot a_{ij}\\ &=\sum\limits_{j=1}^Nb_j(x_{t+1})\cdot\beta_{t+1}(j)\cdot a_{ij}\\ &=\sum\limits_{j=1}^Na_{ij}\cdot b_j(x_{t+1})\cdot\beta_{t+1}(j) \end{align}
這樣,讓初始值 t=T,\beta_T(i)=1 ,因?yàn)樽詈笠淮蔚碾[狀態(tài)為 s_i ,時(shí)刻 T 之后我們不再關(guān)注,它轉(zhuǎn)移到任意狀態(tài)的概率和是歸一的,所以 \beta_T(i)=1。利用上述遞推公式,于是后向地得到了每一項(xiàng),進(jìn)而求得聯(lián)合概率。

Backward Algorithm

(1)初始化:t = T

? \beta_T(i)=1, 1\leq i \leq N

(2)遞歸計(jì)算:t = T - 1,T-2,...,2,1

? \beta_t(i)=\sum\limits_{j=1}^Na_{ij}\cdot b_j(x_{t+1})\cdot\beta_{t+1}(j) , 1\leq i \leq N

(3)終止:

? p(x) =\sum\limits_{i=1}^N\pi_i\cdot b_i(x_1)\cdot \beta_1(i)

t 時(shí)狀態(tài)到終態(tài)=(t+1時(shí)狀態(tài)到終態(tài))\cdot(t時(shí)狀態(tài)轉(zhuǎn)移到t+1時(shí)狀態(tài))

Learning問(wèn)題

為了學(xué)習(xí)得到參數(shù)的最優(yōu)值,在 MLE 中:
\theta_{MLE}=\mathop{argmax}_\theta p(x|\theta)
我們采用 EM 算法(在這里也叫 Baum Welch 算法),用上標(biāo)表示迭代:
\theta^{t+1}=\mathop{argmax}_{\theta}\int_z\log p(x,z|\theta)p(z|x,\theta^t)dz
其中,x 是觀測(cè)變量,z 是隱變量序列。于是:
\theta^{t+1}=\mathop{argmax}_\theta\sum\limits_z\log p(x,z|\theta)p(z|x,\theta^t)\\ =\mathop{argmax}_\theta\sum\limits_z\log p(x,z|\theta)p(x,z|\theta^t)
這里利用了 p(x|\theta^t)\theta 無(wú)關(guān)。將 Evaluation 中的式子代入:
\sum\limits_z\log p(x,z|\theta)p(x,z|\theta^t)=\sum\limits_z[\log \pi_{i_1}+\sum\limits_{t=2}^T\log a_{i_{t-1},i_t}+\sum\limits_{t=1}^T\log b_{i_t}(x_t)]p(x,z|\theta^t)
對(duì) \pi^{t+1}
\begin{align}\pi^{t+1}&=\mathop{argmax}_\pi\sum\limits_z[\log \pi_{i_1}p(x,z|\theta^t)]\nonumber\\ &=\mathop{argmax}_\pi\sum\limits_z[\log \pi_{i_1}\cdot p(x,z_1,z_2,\cdots,z_T|\theta^t)] \end{align}
上面的式子中,對(duì) z_2,z_2,\cdots,z_T 求和可以將這些參數(shù)消掉:
\pi^{t+1}=\mathop{argmax}_\pi\sum\limits_{z_1}[\log \pi_{z_1}\cdot p(x,z_1|\theta^t)]
上面的式子還有對(duì) \pi 的約束 \sum\limits_i\pi_i=1。 Lagrange 函數(shù):
L(\pi,\eta)=\sum\limits_{i=1}^N\log \pi_i\cdot p(x,z_1=s_i|\theta^t)+\eta(\sum\limits_{i=1}^N\pi_i-1)
于是:
\frac{\partial L}{\partial\pi_i}=\frac{1}{\pi_i}p(x,z_1=s_i|\theta^t)+\eta=0
對(duì)上式求和:
\sum\limits_{i=1}^Np(x,z_1=s_i|\theta^t)+\pi_i\eta=0\Rightarrow\eta=-p(x|\theta^t)
所以:
\pi_i^{t+1}=\frac{p(x,z_1=s_i|\theta^t)}{p(x|\theta^t)}

Decoding問(wèn)題

Decoding 問(wèn)題表述為:
z=\mathop{argmax}\limits_{z}p(z|x,\theta)
即找到一個(gè)隱狀態(tài)序列,其概率最大,這個(gè)序列其實(shí)就是要在參數(shù)空間中找一個(gè)路徑,可以采用動(dòng)態(tài)規(guī)劃的思想。

定義:
\delta_{t}(j)=\max\limits_{i_1,\cdots,i_{t-1}}p(x_1,\cdots,x_t,z_1,\cdots,z_{t-1},z_t=s_i)
于是:
\delta_{t+1}(j)=\max\limits_{1\le i\le N}\delta_t(i)a_{ij}b_j(x_{t+1})
這個(gè)式子就是從上一步到下一步的概率再求最大值。記這個(gè)路徑為:
\psi_{t+1}(j)=\mathop{argmax}\limits_{1\le i\le N}\delta_t(i)a_{ij}

動(dòng)態(tài)規(guī)劃求解即可。

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

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

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