隱馬爾科夫模型HMM(三)鮑姆-韋爾奇算法求解HMM參數

HMM模型參數求解概述

HMM模型參數求解根據已知的條件可以分爲兩種情況。

第一種情況較爲簡單,就是我們已知D個長度爲T的觀測序列和對應的隱藏狀態序列,即{(O1,I1),(O2,I2),...(OD,ID)}\{(O_1, I_1), (O_2, I_2), ...(O_D, I_D)\}是已知的,此時我們可以很容易的用最大似然來求解模型參數。

假設樣本從隱藏狀態qi轉移到qj的頻率計數是Aij,那麼狀態轉移矩陣求得爲:
A=[aij],  aij=Aijs=1NAisA = \Big[a_{ij}\Big], \;其中a_{ij} = \frac{A_{ij}}{\sum\limits_{s=1}^{N}A_{is}}   
假設樣本隱藏狀態爲qj且觀測狀態爲vk的頻率計數是Bjk,那麼觀測狀態概率矩陣爲:
B=[bj(k)],  bj(k)=Bjks=1MBjsB= \Big[b_{j}(k)\Big], \;其中b_{j}(k) = \frac{B_{jk}}{\sum\limits_{s=1}^{M}B_{js}}
    假設所有樣本中初始隱藏狀態爲qi的頻率計數爲C(i),那麼初始概率分佈爲:
Π=π(i)=C(i)s=1NC(s)\Pi = \pi(i) = \frac{C(i)}{\sum\limits_{s=1}^{N}C(s)}
可見第一種情況下求解模型還是很簡單的。但是在很多時候,我們無法得到HMM樣本觀察序列對應的隱藏序列,只有D個長度爲T的觀測序列,即{(O1),(O2),...(OD)}\{(O_1), (O_2), ...(O_D)\}是已知的,此時我們能不能求出合適的HMM模型參數呢?這就是我們的第二種情況,也是我們本文要討論的重點。它的解法最常用的是鮑姆-韋爾奇算法,其實就是基於EM算法的求解,只不過鮑姆-韋爾奇算法出現的時代,EM算法還沒有被抽象出來,所以我們本文還是說鮑姆-韋爾奇算法。

鮑姆-韋爾奇算法的推導

我們的訓練數據爲{(O1,I1),(O2,I2),...(OD,ID)}\{(O_1, I_1), (O_2, I_2), ...(O_D, I_D)\},其中任意一個觀測序列Od={o1(d),o2(d),...oT(d)}O_d = \{o_1^{(d)}, o_2^{(d)}, ... o_T^{(d)}\},其對應的未知的隱藏狀態序列表示爲:Id={i1(d),i2(d),...iT(d)}I_d = \{i_1^{(d)}, i_2^{(d)}, ... i_T^{(d)}\}
    首先看鮑姆-韋爾奇算法的E步,我們需要先計算聯合分佈P(O,I|λ)的表達式如下:
    P(O,Iλ)=d=1Dπi1(d)bi1(d)(o1(d))ai1(d)i2(d)bi2(d)(o2(d))...aiT1(d)iT(d)biT(d)(oT(d))P(O,I|\lambda) = \prod_{d=1}^D\pi_{i_1^{(d)}}b_{i_1^{(d)}}(o_1^{(d)})a_{i_1^{(d)}i_2^{(d)}}b_{i_2^{(d)}}(o_2^{(d)})...a_{i_{T-1}^{(d)}i_T^{(d)}}b_{i_T^{(d)}}(o_T^{(d)})
    我們的E步得到的期望表達式爲:
L(λ,λ)=IP(IO,λ)logP(O,Iλ)L(\lambda, \overline{\lambda}) = \sum\limits_{I}P(I|O,\overline{\lambda})logP(O,I|\lambda)
    在M步我們要極大化上式。由於P(IO,λ)=P(I,Oλ)/P(Oλ)P(I|O,\overline{\lambda}) = P(I,O|\overline{\lambda})/P(O|\overline{\lambda}),而P(Oλ)P(O|\overline{\lambda})是常數,因此我們要極大化的式子等價於:
λ=arg  maxλIP(O,Iλ)logP(O,Iλ)\overline{\lambda} = arg\;\max_{\lambda}\sum\limits_{I}P(O,I|\overline{\lambda})logP(O,I|\lambda)
    我們將上面P(O,I|λ)的表達式帶入我們的極大化式子,得到的表達式如下:
λ=arg  maxλd=1DIP(O,Iλ)(logπi1+t=1T1log  ait,it+1+t=1Tbit(ot))\overline{\lambda} = arg\;\max_{\lambda}\sum\limits_{d=1}^D\sum\limits_{I}P(O,I|\overline{\lambda})(log\pi_{i_1} + \sum\limits_{t=1}^{T-1}log\;a_{i_t,i_{t+1}} + \sum\limits_{t=1}^Tb_{i_t}(o_t))
    我們的隱藏模型參數λ=(A,B,Π),因此下面我們只需要對上式分別對A,B,Π求導即可得到我們更新的模型參數λ\overline{\lambda} 
    首先我們看看對模型參數Π的求導。由於Π只在上式中括號裏的第一部分出現,因此我們對於Π的極大化式子爲:
πi=arg  maxπi1d=1DIP(O,Iλ)logπi1=arg  maxπid=1Di=1NP(O,i1(d)=iλ)logπi\overline{\pi_i} = arg\;\max_{\pi_{i_1}} \sum\limits_{d=1}^D\sum\limits_{I}P(O,I|\overline{\lambda})log\pi_{i_1} = arg\;\max_{\pi_{i}} \sum\limits_{d=1}^D\sum\limits_{i=1}^NP(O,i_1^{(d)} =i|\overline{\lambda})log\pi_{i}
    由於πi還滿足i=1Nπi=1\sum\limits_{i=1}^N\pi_i =1,因此根據拉格朗日子乘法,我們得到πi要極大化的拉格朗日函數爲:
arg  maxπid=1Di=1NP(O,i1(d)=iλ)logπi+γ(i=1Nπi1)arg\;\max_{\pi_{i}}\sum\limits_{d=1}^D\sum\limits_{i=1}^NP(O,i_1^{(d)} =i|\overline{\lambda})log\pi_{i} + \gamma(\sum\limits_{i=1}^N\pi_i -1)
    其中,γ爲拉格朗日系數。上式對πi求偏導數並令結果爲0, 我們得到:
d=1DP(O,i1(d)=iλ)+γπi=0\sum\limits_{d=1}^DP(O,i_1^{(d)} =i|\overline{\lambda}) + \gamma\pi_i = 0
    令i分別等於從1到N,從上式可以得到N個式子,對這N個式子求和可得:
d=1DP(Oλ)+γ=0\sum\limits_{d=1}^DP(O|\overline{\lambda}) + \gamma = 0
 從上兩式消去γ,得到πi的表達式爲:
πi=d=1DP(O,i1(d)=iλ)d=1DP(Oλ)=d=1DP(O,i1(d)=iλ)DP(Oλ)=d=1DP(i1(d)=iO,λ)D=d=1DP(i1(d)=iO(d),λ)D\pi_i =\frac{\sum\limits_{d=1}^DP(O,i_1^{(d)} =i|\overline{\lambda})}{\sum\limits_{d=1}^DP(O|\overline{\lambda})} = \frac{\sum\limits_{d=1}^DP(O,i_1^{(d)} =i|\overline{\lambda})}{DP(O|\overline{\lambda})} = \frac{\sum\limits_{d=1}^DP(i_1^{(d)} =i|O, \overline{\lambda})}{D} = \frac{\sum\limits_{d=1}^DP(i_1^{(d)} =i|O^{(d)}, \overline{\lambda})}{D}
    利用我們在隱馬爾科夫模型HMM(二)前向後向算法評估觀察序列概率裏第二節中前向概率的定義可得:
P(i1(d)=iO(d),λ)=γ1(d)(i)P(i_1^{(d)} =i|O^{(d)}, \overline{\lambda}) = \gamma_1^{(d)}(i)
    因此最終我們在M步πi的迭代公式爲:
    πi=d=1Dγ1(d)(i)D\pi_i = \frac{\sum\limits_{d=1}^D\gamma_1^{(d)}(i)}{D}

現在我們來看看A的迭代公式求法。方法和Π的類似。由於A只在最大化函數式中括號裏的第二部分出現,而這部分式子可以整理爲:
d=1DIt=1T1P(O,Iλ)log  ait,it+1=d=1Di=1Nj=1Nt=1T1P(O,it(d)=i,it+1(d)=jλ)log  aij\sum\limits_{d=1}^D\sum\limits_{I}\sum\limits_{t=1}^{T-1}P(O,I|\overline{\lambda})log\;a_{i_t,i_{t+1}} = \sum\limits_{d=1}^D\sum\limits_{i=1}^N\sum\limits_{j=1}^N\sum\limits_{t=1}^{T-1}P(O,i_t^{(d)} = i, i_{t+1}^{(d)} = j|\overline{\lambda})log\;a_{ij}
利用隱馬爾科夫模型HMM(二)前向後向算法評估觀察序列概率裏第二節中前向概率的定義和第五節ξt(i,j)的定義可得們在M步aij的迭代公式爲:
aij=d=1Dt=1T1ξt(d)(i,j)d=1Dt=1T1γt(d)(i)a_{ij} = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}\xi_t^{(d)}(i,j)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}\gamma_t^{(d)}(i)}
現在我們來看看B的迭代公式求法。方法和Π的類似。由於B只在最大化函數式中括號裏的第三部分出現,而這部分式子可以整理爲:
d=1DIt=1TP(O,Iλ)log  bit(ot)=d=1Dj=1Nt=1TP(O,it(d)=jλ)log  bj(ot)\sum\limits_{d=1}^D\sum\limits_{I}\sum\limits_{t=1}^{T}P(O,I|\overline{\lambda})log\;b_{i_t}(o_t) = \sum\limits_{d=1}^D\sum\limits_{j=1}^N\sum\limits_{t=1}^{T}P(O,i_t^{(d)} = j|\overline{\lambda})log\;b_{j}(o_t)
    由於bj(ot)還滿足k=1Mbj(ot=vk)=1\sum\limits_{k=1}^Mb_{j}(o_t =v_k) =1。和求解πi類似,我們可以用拉格朗日子乘法並對bj(k)b_{j}(k)求導,並令結果爲0,得到bj(k)b_{j}(k)的迭代表達式爲:
bj(k)=d=1Dt=1TP(O,it(d)=jλ)I(ot(d)=vk)d=1Dt=1TP(O,it(d)=jλ)b_{j}(k) = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T}P(O,i_t^{(d)} = j|\overline{\lambda})I(o_t^{(d)}=v_k)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T}P(O,i_t^{(d)} = j|\overline{\lambda})}
    其中I(ot(d)=vk)I(o_t^{(d)}=v_k)當且僅當ot(d)=vko_t^{(d)}=v_k時爲1,否則爲0. 利用隱馬爾科夫模型HMM(二)前向後向算法評估觀察序列概率裏第二節中前向概率的定義可得bj(ot)b_{j}(o_t)的最終表達式爲:
bj(k)=d=1Dt=1,ot(d)=vkTγt(d)(j)d=1Dt=1Tγt(d)(j)b_{j}(k) = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1, o_t^{(d)}=v_k}^{T}\gamma_t^{(d)}(j)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T}\gamma_t^{(d)}(j)}
有了πi,aij,bj(k)\pi_i, a_{ij},b_{j}(k)的迭代公式,我們就可以迭代求解HMM模型參數了

鮑姆-韋爾奇算法流程總結

這裏我們概括總結下鮑姆-韋爾奇算法的流程。

輸入: D個觀測序列樣本{(O1),(O2),...(OD)}\{(O_1), (O_2), ...(O_D)\}
    輸出:HMM模型參數

1)隨機初始化所有的πi,aij,bj(k)\pi_i, a_{ij},b_{j}(k)
    2) 對於每個樣本d=1,2,…D,用前向後向算法計算γt(d)(i)ξt(d)(i,j),t=1,2...T\gamma_t^{(d)}(i),\xi_t^{(d)}(i,j), t =1,2...T
    3) 更新模型參數:

πi=d=1Dγ1(d)(i)D\pi_i = \frac{\sum\limits_{d=1}^D\gamma_1^{(d)}(i)}{D}
aij=d=1Dt=1T1ξt(d)(i,j)d=1Dt=1T1γt(d)(i)a_{ij} = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}\xi_t^{(d)}(i,j)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}\gamma_t^{(d)}(i)}
bj(k)=d=1Dt=1,ot(d)=vkTγt(d)(j)d=1Dt=1Tγt(d)(j)b_{j}(k) = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1, o_t^{(d)}=v_k}^{T}\gamma_t^{(d)}(j)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T}\gamma_t^{(d)}(j)}
    4) 如果πi,aij,bj(k)\pi_i, a_{ij},b_{j}(k)的值已經收斂,則算法結束,否則回到第2)步繼續迭代。

以上就是鮑姆-韋爾奇算法的整個過程。

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