隱馬爾科夫模型(Hidden Markov Model,如下簡稱HMM)是比較經典的機器學習模型了,它在語言識別,天然語言處理,模式識別等領域獲得普遍的應用。固然,隨着目前深度學習的崛起,尤爲是RNN,LSTM等神經網絡序列模型的火熱,HMM的地位有所降低。可是做爲一個經典的模型,學習HMM的模型和對應算法,對咱們解決問題建模的能力提升以及算法思路的拓展仍是很好的。本文是HMM系列的第一篇,關注於HMM模型的基礎。
1. 什麼樣的問題須要HMM模型
首先咱們來看看什麼樣的問題解決能夠用HMM模型。使用HMM模型時咱們的問題通常有這兩個特徵:1)咱們的問題是基於序列的,好比時間序列,或者狀態序列。2)咱們的問題中有兩類數據,一類序列數據是能夠觀測到的,即觀測序列;而另外一類數據是不能觀察到的,即隱藏狀態序列,簡稱狀態序列。
有了這兩個特徵,那麼這個問題通常能夠用HMM模型來嘗試解決。這樣的問題在實際生活中是不少的。好比:我如今在打字寫博客,我在鍵盤上敲出來的一系列字符就是觀測序列,而我實際想寫的一段話就是隱藏序列,輸入法的任務就是從敲入的一系列字符儘量的猜想我要寫的一段話,並把最可能的詞語放在最前面讓我選擇,這就能夠看作一個HMM模型了。再舉一個,我在和你說話,我發出的一串連續的聲音就是觀測序列,而我實際要表達的一段話就是狀態序列,你大腦的任務,就是從這一串連續的聲音中判斷出我最可能要表達的話的內容。
從這些例子中,咱們能夠發現,HMM模型能夠無處不在。可是上面的描述還不精確,下面咱們用精確的數學符號來表述咱們的HMM模型。算法
2. HMM模型的定義
對於HMM模型,首先咱們假設QQ是全部可能的隱藏狀態的集合,VV是全部可能的觀測狀態的集合,即:網絡
Q={q1,q2,...,qN},V={v1,v2,...vM}Q={q1,q2,...,qN},V={v1,v2,...vM}機器學習
其中,NN是可能的隱藏狀態數,MM是全部的可能的觀察狀態數。
對於一個長度爲TT的序列,II對應的狀態序列, OO是對應的觀察序列,即:學習
I={i1,i2,...,iT},O={o1,o2,...oT}I={i1,i2,...,iT},O={o1,o2,...oT}深度學習
其中,任意一個隱藏狀態it∈Qit∈Q,任意一個觀察狀態ot∈Vot∈V
HMM模型作了兩個很重要的假設以下:
1) 齊次馬爾科夫鏈假設。即任意時刻的隱藏狀態只依賴於它前一個隱藏狀態。固然這樣假設有點極端,由於不少時候咱們的某一個隱藏狀態不單單隻依賴於前一個隱藏狀態,多是前兩個或者是前三個。可是這樣假設的好處就是模型簡單,便於求解。若是在時刻tt的隱藏狀態是it=qiit=qi,在時刻t+1t+1的隱藏狀態是it+1=qjit+1=qj, 則從時刻tt到時刻t+1t+1的HMM狀態轉移機率aijaij能夠表示爲:博客
aij=P(it+1=qj|it=qi)aij=P(it+1=qj|it=qi)數學
這樣aijaij能夠組成馬爾科夫鏈的狀態轉移矩陣AA:it
A=[aij]N×NA=[aij]N×N基礎
2) 觀測獨立性假設。即任意時刻的觀察狀態只僅僅依賴於當前時刻的隱藏狀態,這也是一個爲了簡化模型的假設。若是在時刻tt的隱藏狀態是it=qjit=qj, 而對應的觀察狀態爲ot=vkot=vk, 則該時刻觀察狀態vkvk在隱藏狀態qjqj下生成的機率爲bj(k)bj(k),知足:神經網絡
bj(k)=P(ot=vk|it=qj)bj(k)=P(ot=vk|it=qj)
這樣
bj(k)bj(k)
能夠組成觀測狀態生成的機率矩陣BB:
B=[bj(k)]N×MB=[bj(k)]N×M
除此以外,咱們須要一組在時刻t=1t=1的隱藏狀態機率分佈ΠΠ:
Π=[π(i)]N其中π(i)=P(i1=qi)Π=[π(i)]N其中π(i)=P(i1=qi)
一個HMM模型,能夠由隱藏狀態初始機率分佈ΠΠ, 狀態轉移機率矩陣AA和觀測狀態機率矩陣BB決定。Π,AΠ,A決定狀態序列,BB決定觀測序列。所以,HMM模型能夠由一個三元組λλ表示以下: