隱馬爾可夫模型 是統(tǒng)計(jì)模型,它用來描述一個(gè)含有隱含未知參數(shù)的馬爾可夫過程。其難點(diǎn)是從可觀察的參數(shù)中確定該過程的隱含參數(shù)。然后利用這些參數(shù)來作進(jìn)一步的分析,例如模式識(shí)別。 更多見 iii.run
HMM模型
馬爾科夫性質(zhì)
-
公式
s和t 是兩個(gè)時(shí)刻,不同時(shí)間下發(fā)生的條件概率是相同的。
08880-j2evkrjnnxd.png
或者說:
已知當(dāng)前狀態(tài)情況下,過去事件與未來相互獨(dú)立。簡言之:
隨機(jī)過程中某時(shí)間的發(fā)生只取決于它的上一時(shí)間,是無記憶的過程。
馬爾可夫過程
具有了馬爾科夫性質(zhì)的隨機(jī)過程,具有不可記憶性。
隱馬爾科夫模型
隱馬爾可夫模型(Hidden Markov Model,HMM)是關(guān)于時(shí)序的概率模型,描述由一個(gè)隱藏的馬爾可夫鏈隨機(jī)生成不可觀測的狀態(tài)隨機(jī)序列,再由各個(gè)狀態(tài)生成一個(gè)觀測而產(chǎn)生觀測隨機(jī)序列的過程。
隱藏的馬爾可夫鏈隨機(jī)生成的狀態(tài)的序列,稱為狀態(tài)序列(state sequence);每個(gè)狀態(tài)生成一個(gè)觀測,而由此產(chǎn)生的觀測的隨機(jī)序列,稱為觀測序列(observation sequence)。
序列的每一個(gè)位置又可以看作是一個(gè)時(shí)刻。
使用場景
使用HMM模型時(shí)我們的問題一般有這兩個(gè)特征:
1)我們的問題是基于序列的,比如時(shí)間序列,或者狀態(tài)序列。
2)我們的問題中有兩類數(shù)據(jù),一類序列數(shù)據(jù)是可以觀測到的,即觀測序列;而另一類數(shù)據(jù)是不能觀察到的,即隱藏狀態(tài)序列,簡稱狀態(tài)序列。
舉個(gè)兩個(gè)例子:
1、NLP問題
2、視頻識(shí)別
定義
首先我們假設(shè)Q是所有可能的隱藏狀態(tài)的集合,V是所有可能的觀測狀態(tài)的集合(類型,比如分詞的時(shí)候,就有BIES這四個(gè)),即:
Q = \{q_1,q_2,...,q_N\}, \; V =\{v_1,v_2,...v_M\}
其中,N是可能的隱藏狀態(tài)數(shù),M是所有的可能的觀察狀態(tài)數(shù)。
對于一個(gè)長度為T的序列,I對應(yīng)的狀態(tài)序列, O是對應(yīng)的觀察序列,即:
I = \{i_1,i_2,...,i_T\}, \; O =\{o_1,o_2,...o_T\}
其中,任意一個(gè)隱藏狀態(tài) i_t \in Q ,任意一個(gè)觀察狀態(tài) o_t \in V
HMM模型做了兩個(gè)很重要的假設(shè)如下:
齊次馬爾科夫鏈假設(shè)
即任意時(shí)刻的隱藏狀態(tài)只依賴于它前一個(gè)隱藏狀態(tài),也就是狀態(tài)轉(zhuǎn)移的時(shí)候只考慮前邊一個(gè)時(shí)刻的隱藏狀態(tài)。
pint:大多數(shù)情況下,這樣做都是不那么準(zhǔn)確的。但是這樣做比較簡單,也許分詞模型進(jìn)一步的優(yōu)化方向可以考慮修改模型中的這個(gè)假設(shè)。
這里順便說一下狀態(tài)轉(zhuǎn)移矩陣,假定時(shí)刻t的隱藏狀態(tài)是 i_t= q_i,在時(shí)刻t+1的隱藏狀態(tài)是 i_{t+1}= q_j,那么從t時(shí)刻到t+1時(shí)刻的狀態(tài)轉(zhuǎn)移概率可以表示為:
a_{ij} = P(i_{t+1} = q_j | i_t= q_i)
t一般來說會(huì)有連續(xù)的多個(gè)時(shí)間點(diǎn),將對應(yīng)的{s_{ij}}組合起來,就可以獲得馬爾科夫鏈的狀態(tài)轉(zhuǎn)移矩陣A
A=\Big [a_{ij}\Big ]_{N \times N}
觀察獨(dú)立性假設(shè)
即任意時(shí)刻的觀察狀態(tài)只僅僅依賴于當(dāng)前時(shí)刻的隱藏狀態(tài),換句話說,當(dāng)前時(shí)刻的觀察狀態(tài)僅依賴于當(dāng)前的隱藏狀態(tài)。
如果在時(shí)刻t的隱藏狀態(tài)是i_t=q_j, 而對應(yīng)的觀察狀態(tài)為o_t=v_k, 則該時(shí)刻觀察狀態(tài)v_k在隱藏狀態(tài)q_j下生成的概率為b_j(k),滿足:
b_j(k) = P(o_t = v_k | i_t= q_j)
這樣b_j(k)可以組成觀測狀態(tài)生成的概率矩陣B:
B = \Big [b_j(k) \Big ]_{N \times M}
即:隱藏狀態(tài) -> 觀測狀態(tài)的概率矩陣
隱藏狀態(tài)初始概率
即在 t = 1時(shí)刻,隱藏狀態(tài)概率分布
\Pi = \Big [ \pi(i)\Big ]_N \; 其中 \;\pi(i) = P(i_1 = q_i)
小結(jié)
一個(gè)完整HMM模型,由三部分組成。
- 狀態(tài)轉(zhuǎn)移方程 A
- 觀察概率矩陣
- 初始狀態(tài)\Pi
找了一張圖來幫助理解

不過到了現(xiàn)實(shí)情況時(shí)就會(huì)發(fā)現(xiàn),人生吶。。。
HMM模型例子
維特比算法 里邊的例子就是一個(gè)HMM模型,本質(zhì)上是一個(gè)動(dòng)態(tài)規(guī)劃BP問題。
狀態(tài)轉(zhuǎn)移矩陣?yán)?/h2>
維特比算法 里的 transition_probability,就是這里的狀態(tài)轉(zhuǎn)移矩陣。
transition_probability = { # 狀態(tài)轉(zhuǎn)移概率
'健康': {'健康': 0.7, '發(fā)熱': 0.3},
'發(fā)熱': {'健康': 0.4, '發(fā)熱': 0.6},
}
觀測概率矩陣?yán)?/h2>
通俗的講,就是村民身體內(nèi)部的情況,醫(yī)生其實(shí)是不清楚的。
但是醫(yī)生知道,如果用戶身體健康的情況下,感到發(fā)暈的概率可是很低哦。
emission_probability = { # 狀態(tài)->觀測的發(fā)散概率
'健康': {'正常': 0.5, '發(fā)冷': 0.4, '發(fā)暈': 0.1},
'發(fā)熱': {'正常': 0.1, '發(fā)冷': 0.3, '發(fā)暈': 0.6},
}
初始矩陣
start_probability = {'健康': 0.6, '發(fā)熱': 0.4} # 起始個(gè)狀態(tài)概率
看完維特比算法,再來看這張圖,應(yīng)該就有點(diǎn)感覺了

HMM模型的三個(gè)基本問題
評估觀察序列概率
即給定模型λ=(A,B,\Pi)和觀測序列O={o_1,o_2,...o_T},計(jì)算在模型λ下觀測序列O#出現(xiàn)的概率P(O|λ)$。
這個(gè)問題的求解需要用到前向后向算法。
模型參數(shù)學(xué)習(xí)問題
即給定觀測序列O={o_1,o_2,...o_T},估計(jì)模型λ=(A,B,\Pi)的參數(shù),使該模型下觀測序列的條件概率P(O|λ)最大。
這個(gè)問題的求解需要用到基于EM算法的鮑姆-韋爾奇算法。
預(yù)測問題,也稱為解碼問題
即給定模型λ=(A,B,\Pi)和觀測序列O={o_1,o_2,...o_T},求給定觀測序列條件下,最可能出現(xiàn)的對應(yīng)的狀態(tài)序列。
這個(gè)問題的求解需要用到基于動(dòng)態(tài)規(guī)劃的維特比算法,最常見的一個(gè)用途了,請參考維特比算法部分。
總結(jié)
模型總體來說還是比較簡單的,只是一開始看到一大堆公式有點(diǎn)懵逼,不過可以先看維特比算法部分,看懂了之后再回過頭看這里。
