HMM模型是個經典模型,處理的是序列的判決問題。本文大體講解一下HMM的過程,而對其原理不作深入探究。
一階馬爾科夫模型
判斷一個狀态 vi 到另一個狀态 vj 的轉變。
比如今天的天氣狀态是“晴天”,那明天的天氣狀态是?,我們推測極大的可能也是“晴天”。這就是一個簡單的一階馬爾科夫模型的應用。
一階馬爾科夫假設:每個狀态隻依賴于前一個狀态。(不是依賴于其前幾個狀态)
前後關系用時間 t 和t+1表示,則前後狀态的轉移機率為: P(vj(t+1)|vi(t))=aij 。
表示在目前時刻 t 時,狀态vi向下一時刻 t+1 狀态 vj 的轉移機率。
一階馬爾科夫圖示(w就是s)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyM2MjMwgTNyEjMwkDM1EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
一階隐馬爾科夫模型
含有隐藏狀态 s(t) ,目标仍然是判斷可視狀态 v(t) 的轉變。
我們若是隻能觀測到某一狀态,但是可觀測狀态是由隐含的某一狀态決定的,那麼就需要隐馬爾科夫模型出馬了。
獨立性假設:可視狀态隻取決于目前隐藏狀态。
P(vk(t)|sj(t))=bjk
齊次馬爾科夫假設:每個狀态隻依賴于前一個狀态。
P(vj(t+1)|vi(t))=aij
歸一化限制: ∑jaij=1 和 ∑kbkj=1
一階隐馬爾科夫的圖示(w就是s)
下面解決三個關鍵問題:
估值:計算可視序列 VT=v1,v2,v3,...,vn 出現的機率。根據轉移機率 aij 和 bjk 。
解碼:根據可視序列 VT=v1,v2,v3,...,vn 及轉移機率 aij 和 bjk ,計算最可能出現的隐狀态序列 ST=s1,s2,s3,...,sn 。
學習:由一組樣本序列确定狀态轉移機率 aij 和 bjk 及隐狀态的先驗機率 πi 。
HMM估值
已知HMM模型( aij 和 bjk ),如何求解産生可視序列 VT 的機率。
可視序列的産生機率如下:
P(VT)=∑rmaxr=1P(VT|STr)P(STr)
其中 rmax 為 c 個隐狀态時的可能隐序列種數。
因為隐序列的目前狀态僅僅取決于前一狀态,故:
P(ST)=∏Tt=1P(st|st−1)
因為目前可視狀态僅僅由目前隐狀态決定,故:
P(VT|ST)=P(v1|ST)P(v2|ST)∗...∗P(vT|ST) 可視狀态間互不影響。
P(VT|ST)=P(v1|s1)P(v2|s2)∗...∗P(vT|sT)=∏Tt=1P(vt|st)
綜上所述:
P(VT)=∑rmaxr=1∏Tt=1P(vt|st)∏Tt=1P(st|st−1)
P(VT)=∑rmaxr=1∏Tt=1P(vt|st)P(st|st−1)
上面這個式子計算起來實在太過複雜~現在介紹一種簡單計算方法,遞歸地計算 P(VT) ,累積前面的,計算當次的,再累積前面的,計算當次的,直到整個序列都計算完畢。
設 αi(t) 表示HMM在 t 時刻,位于隐狀态si,并且已經産生了可見序列 VT 的前 t 個符号的機率。
αi=⎧⎩⎨⎪⎪01bjkv(t)∑iαi(t−1)aijt=0且j≠初始狀态t=0且j=初始狀态其他
HMM前向估計的遞歸方法示意圖(這裡的 w 是上面的s)。
HMM前向算法過程
1. Initialize t=0,aij,bjk ,可見序列 VT , αj(0)=1
2. for t=t+1
3. αj(t)=bjkv(t)∑ci=1αi(t−1)aij
4. until t=T
5. returnP(VT)
HMM後向算法過程
1. Initialize t=T,aij,bjk ,可見序列 VT , βj(T)
2. for t=t−1
3. βi(t)=bjkv(t+1)∑cj=1βj(t+1)aij
4. until t=1
5. returnP(VT)
其中,定義 βi(t) 為在 t 時刻位于狀态si,并且将産生 t 時刻之後的目标序列(時間範圍為從t+1到 T )的機率。
βi(t)=⎧⎩⎨⎪⎪01bjkv(t+1)∑jβj(t+1)aijsi(t)≠s0且t=Tsi(t)=s0且t=T其他
HMM解碼
已知一個觀測序列 VT ,解碼就是找到與其對應的最可能的隐狀态序列 ST 。
一種簡單的方法是周遊所有的可能的隐狀态序列的機率,選擇最大的作為解碼結果。但是這很明顯不現實,因為計算量實在過于巨大。
現提供一種簡單思路,把每個時刻最可能的隐狀态 s(t) 找到。
HMM解碼算法(Viterbi)
1. Initialize paht為空 , t=0
2. for t=t+1
3. j=1
4. for j=j+1
5. αj(t)=bjkv(t)∑ci=1αi(t−1)aij
6. until j=c
7. j′=argmaxjαj(t)
8. 将隐狀态 sj′ 添加到 path 中
9. until t=T
10. return path
這種解碼方法(維特比算法)的缺點是:不能夠保證找到的路徑就是合法的路徑,即找到的路徑有可能是不連貫的。因為是用局部最優解串聯成的解。
HMM學習
學習模型的過程就是确定模型的參數,轉移機率 aij,bjk 及隐狀态的先驗機率 πi 。
(1)對于有監督問題
a^ij=隐狀态si轉到sj的頻次隐狀态si的所有隐狀态轉移頻次
b^ij=隐狀态sj轉到可視狀态vk的頻次隐狀态sj的所有可視狀态轉移頻次
π^i=樣本中 t=1 時,可視狀态對應的隐藏狀态為si的頻率
(2)對于無監督問題
解決無監督的HMM訓練問題,就是大名鼎鼎的Baum-Welch算法,也叫前向-後向算法。
該算法是“廣義期望最大化算法”的一種具體實作,其核心思想是:通過遞歸方式更新權重,以得到能夠更好地描述(解釋)訓練樣本的模型參數。
定義從隐狀态 si(t−1) 到 sj(t) 的機率 γij(t) 如下:
γij(t)=αi(t−1)aijbjkβj(t)P(VT|θ)
其中, P(VT|θ) 是模型用任意的隐含路徑産生序列 VT 的機率, γij(t) 則表示了在産生可序列 VT 的條件下,從隐狀态 si(t−1) 到 sj(t) 的機率。
aij 的估計值 aij^ 如下, K 表示可轉移的狀态數量:
a^ij=∑Tt=1γij(t)∑Tt=1∑Kk=1γik(t)
上式中,分子表示了 si 到 sj 的期望;分母表示了 si 轉移的總期望。
bjk 的估計值 bjk^ 如下:
b^jk=∑Tt=1∑v(t)=vkγik(t)∑Tt=1∑γik(t)
上式中,分子表示了隐狀态 sj 對應的特定的可視狀态 vk 對應的頻次;分母表示了隐狀态 sj 對應的所有的可視狀态的頻次。
?初始狀态機率怎麼确定的?
前向-後向算法過程
1. Initial aij,bjk 訓練序列 VT ,收斂判據 θ , z=0
2. doz=z+1
3. 由a(z−1)和b(z−1)計算a^(z)
4. 由a(z−1)和b(z−1)計算b^(z)
5. update:
6. aij(z)=a^ij(z−1)
7. bjk(z)=b^jk(z−1)
8. until maxi,j,k[aij(z)−aij(z−1),bjk(z)−bjk(z−1)]<θ
9. return aij=aij(z);
bjk=bjk(z)
πi=目前參數下,初始隐狀态s1=si的機率目前參數下,VT的機率=P(VT,s1=si|a,b)P(VT|a,b)
πi 是隐狀态的先驗機率估計,需要根據樣本推測隐狀态樣本,然後計算。
小結
HMM算法是個經典算法,在語音識别、自然語言處理、生物資訊等領域應用廣泛。隐馬爾科夫模型是關于時序的機率模型,描述一個由隐藏的馬爾科夫鍊随機生成不可觀測的狀态的序列,再由各個狀态随機生成一個觀測值而産生觀測序列的過程。