隱馬爾可夫模型(hidden Markov model, HMM)是可用於標註問題的統計學習模型,描述由隱藏的馬爾可夫鏈隨機生成觀測序列的過程,屬於生成模型。算法
定義10.1 (隱馬爾可夫模型) 隱馬爾可夫模型是關於時序的機率模型,描述由一個隱藏的馬爾可夫鏈隨機生成不可觀測的狀態隨機序列,再由各個狀態生成一個觀測而產生觀測隨機序列的過程。隱藏的馬爾可夫鏈隨機生成的狀態的序列,稱爲狀態序列(state sequence):每一個狀態生成一個觀測,而由此產生的觀測的隨機序列,稱爲觀測序列(observation sequenoe )。序列的每個位置又能夠看做是一個時刻。函數
隱馬爾可夫模型由初始機率分佈、狀態轉移機率分佈以及觀測機率分佈肯定。隱馬爾可夫模型的形式定義以下學習
設Q是全部可能的狀態的集合,V是全部可能的觀側的集合.3d
其中,N是可能的狀態數,M是可能的觀測數.blog
I是長度爲T的狀態序列,O是對應的觀測序列.get
A是狀態轉移機率矩陣:數學
是在時刻t處於狀態qi的條件下在時刻t+1轉移到狀態qj的機率。it
B是觀測機率矩陣:io
是在時刻t處於狀態qj的條件下生成觀測vk的機率。變量
n是初始狀態機率向量:
是時刻t=1處於狀態qi的機率。
隱馬爾可夫模型兄能夠用三元符號表示,即
隱馬爾可夫模型由初始狀態機率向量pi、狀態轉移機率矩陣A和觀測機率矩陣B決定。A,B,pi稱爲隱馬爾可夫模型的三要素。
狀態轉移機率矩陣A與初始狀態機率向量pi肯定了隱藏的馬爾可夫鏈,生成不可觀測的狀態序列。
觀測機率矩陣B肯定了如何從狀態生成觀測,與狀態序列綜合肯定了如何產生觀測序列。
隱馬爾可夫模型做了兩個基本假設:
(1) 齊次馬爾可夫性假設,即假設隱藏的馬爾可夫鏈在任意時刻t的狀態只依賴於其前一時刻的狀態,與其餘時刻的狀態及觀測無關,也與時刻t無關
(2) 觀測獨立性假設,即假設任意時刻的觀測只依賴於該時刻的馬爾可夫鏈的狀態,與其餘觀測及狀態無關.
隱馬爾可夫模型能夠用於標註,這時狀態對應着標記。標註問題是給定觀測的序列預測其對應的標記序列能夠假設標註問題的數據是由隱馬爾可夫模型生成的。這樣咱們能夠利用隱馬爾可夫模型的學習與預測算法進行標註。
根據隱馬爾可夫模型定義,能夠將一個長度爲T的觀測序列,其生成過程描述以下:
隱馬爾可夫模型的3個基本問題
(1)機率計算問題。給定模型和觀測序列O=(o1,o2,... ,oT),計算在模型lamda之下觀測序列O出現的機率。
(2)學習問題。己知觀測序列O=(o1,o2,... ,oT),估計模型參數,使得在該模型下觀測序列機率最大。即用極大似然估計的方法估計參數。
(3)預測問題,也稱爲解碼(decoding)問題。己知模型和觀測序列O=(o1,o2,... ,oT),求對給定觀測序列條件機率P(I | O)最大的狀態序列I=(i1,i2,... ,iT),即給定觀測序列,求最有可能的對應的狀態序列。
直接計算法
按機率公式直接計算經過列舉全部可能的長度爲T的狀態序列I=(i1,i2,... ,iT),求各個狀態序列I與觀測序列O=(o1,o2,... ,oT)
可是,計算量很大,是O(TNT)階的,這種算法不可行。
前向-後向算法(forward-backward algorithm)
前向算法
定義10.2 (前向機率) 給定隱馬爾可夫模型,定義到時刻t部分觀測序列o1,o2,... ,ot且狀態爲qi的機率爲前向機率,記做
能夠遞推地求得前向機率及觀測序列機率
步驟(1)初始化前向機率,是初始時刻的狀態i1=qi和觀測o1的聯合機率。
步驟(2)是前向機率的遞推公式,計算到時刻t+1部分觀測序列爲o1,o2,... ,ot ,ot+1且在時刻t+1處於狀態qi的前向機率,如圖10.1所示。
ai(j)是到時刻t觀測到o1,o2,... ,ot並在時刻t處於狀態qj的前向機率,那麼乘積ai(j)aji就是到時刻t觀測到o1,o2,... ,ot在在時刻t處於狀態qj而在時刻t+1到達狀態qi的聯合機率。對這個乘積在時刻t的全部可能的N個狀態qj求和,其結果就是到時刻t觀測爲o1,o2,... ,ot並在時刻t+1處於狀態qi的聯合機率。方括弧裏的值與觀測機率bi(ot+1)的乘積剛好是到時刻t+1觀測到
o1,o2,... ,ot ,ot+1且在時刻t+1處於狀態qi的前向機率。
步驟(3):
由於
因此
前向算法實際是基於「狀態序列的路徑結構」遞推計算的算法。前向算法高效的關鍵是其局部計算前向機率,而後利用路徑結構將前向機率「遞推」到全局,獲得。具體地,在時刻t=1,計算a1(i)的N個值(i=1,2,...,N);在各個時刻t=1,2,...,T-1,計算at+1(i)的N個值(i=1,2,...,N),並且每一個at+1(i)的計算利用前一時刻ai(j)。
減小計算量的緣由在於每一次計算直接引用前一個時刻的計算結果,避免重複計算。利用前向機率計算的計算量是O(N2T)階的,而不是直接計算的O(TNT)階。
後向算法
定義10.3 (後向機率) 給定隱馬爾可夫模型,定義在時刻t部狀態爲qi的條件下,從t+1到T的部分觀測序列爲ot+1,ot+2 ,... ,oT的機率爲後向機率,記做
能夠遞推地求得後向機率及觀測序列機率
步驟(1)初始化初始化後向機率,對最終時刻的全部狀態qi規定。
步驟(2)是後向機率的遞推公式,如圖10.3所示,爲了計算在時刻t部狀態爲qi的條件下,從t+1到T的部分觀測序列爲ot+1,ot+2 ,... ,oT的後向機率。只需考慮在時刻t十1全部可能的N個狀態qj的轉移機率(即aij項),以及在此狀態下的觀測ot+1的觀測機率(即bj(oi+1)項),而後考慮狀態qj以後的觀測序列的後向機率(即項)。
步驟(3)求解的思路與步驟(2)一致,只是初始機率代替轉移機率.
利用前向機率和後向機率的定義能夠將觀測序列機率統一寫成
此式當t=1和t=T-1時分別爲式(10.17)和式(10.21)。
一些機率與指望值的計算
給定隱馬爾可夫模型和觀測O,利用前向機率和後向機率,能夠獲得關於單個狀態和兩個狀態機率的計算公式,
(1)在時刻t處於狀態qi的機率。記
由前向和後向機率的定義可知,
因此
(2)在時刻t處於狀態qi的機率且在時刻t+1處於狀態qj的機率。記
根據先後向機率計算:
因此
(3)將(1)和(2)中的機率對各個時刻t求和,能夠獲得一些有用的指望值
隱馬爾可夫模型的學習,根據訓練數據是包括觀測序列和對應的狀態序列仍是隻有觀測序列,能夠分別由監督學習與非監督學習實現.
監督學習算法
假設已給訓練數據包含S個長度相同的觀測序列和對應的狀態序列{(O1,I1),...,(OS,IS)},利用極大似然估計法來估計隱馬爾可夫模
型的參數。
(1)轉移機率aij的估計
設樣本中時t處於狀態i時刻t+1轉移到狀態j的頻數爲Aij,那麼狀態轉移機率的估計是
(2)觀測機率bj(k)的估計
設樣本中狀態爲j並觀測爲k的頻數是Bjk,那麼狀態爲j觀測爲k的機率的估計是
非監督學習算法--Baum-Welch算法(即EM算法)
假設給定訓練數據只包含S個長度爲T的觀測序列{O1,...,OS)}而沒有對應的狀態序列,目標是學習隱馬爾可夫模型的參數。將觀測序列數據看做觀測數據O,狀態序列數據看做不可觀測的隱數據I,那麼隱馬爾可夫模型事實上是一個含有隱變量的機率模型
它的參數學習能夠由EM算法實現。
徹底數據由觀測數據和隱數據組成(O,I)=(o1,o2,... ,oT,i1,i2,... ,iT),對數似然函數是
EM算法的E步:求Q函數
EM算法的M步:極大化Q函數求模型參參數:極大似然函數可得,
隱馬爾可夫模型預測的兩種算法:近似算法與維特比算法(Viterbi algorithm)
近似算法
近似算法的想法是:在每一個時刻t選擇在該時刻最有可能出現的狀態it*,獲得一個狀態序列做爲預測的結果。
在每一時刻t最有可能的狀態it*經過下式獲得:
近似算法的優勢是計算簡單,其缺點是不能保證預測的狀態序列總體是最有可能的狀態序列,由於預測的狀態序列可能有實際不發生的部分。該方法獲得的狀態序列中有可能存在轉移機率爲0的相鄰狀態
維特比算法
維特比算法實際是用動態規劃解隱馬爾可夫模型預側問題,即用動態規劃(dynamic programming)求機率最大路徑(最優路徑)。一條路徑對應着一個狀態序列。
根據動態規劃原理,最優路徑具備這樣的特性:若是最優路徑在時刻t經過結點it*,那麼這一路徑從結點it*到終點iT*的部分路徑,對於從it*到iT*的全部可能的部分路徑來講,必須是最優的。依據這一原理,咱們只需從時刻t=1開始,遞推地計算在時刻t狀態爲i的各條部分路徑的最大機率,直至獲得時刻t=T狀態爲i的各條路徑的最大機率。時刻t=T的最大機率即爲最優路徑的機率P*。
最優路徑的終結點iT*也同時獲得。以後,從終結點iT*開始,由後向前逐步求得結點iT-1* , ... , i1*。