隱馬爾可夫模型HMM推導

隱馬爾可夫模型HMM推導

機器學習-白板推導系列(十四)-隱馬爾可夫模型HMM(Hidden Markov Model) 課程筆記

背景介紹

介紹一下頻率派和貝葉斯派兩大流派發展出的建模方式。

頻率派

頻率派逐漸發展成了統計機器學習,該流派通常將任務建模為一個優化問題,其中有三個關鍵:

  • 模型(model),建立用于解決問題的模型,如 f(w)=wT+bf(w)=w^T+bf(w)=wT+b
  • 策略(strategy),指導模型優化的策略,比如計算損失函數
  • 算法(algorithm),根據策略優化模型的算法,比如 GD、SGD、牛頓法、擬牛頓法

著作有李航老師的統計學習方法。

貝葉斯派

貝葉斯派逐漸發展出了概率圖模型,最終是進行推斷(inference),也就是求后驗概率 p(z∣x)p(z|x)p(zx) 及其期望、方差,最終是一個積分問題。這可以通過一系列數值積分方法(如 MCMC)來計算。

概率圖模型

  • 有向 —> 貝葉斯網絡
  • 無向 —> 馬爾克夫隨機場(馬爾可夫網絡)
  • 概率圖模型 + 時間序列 —> 動態模型(Dynamic Model)
    • 隱馬兒可夫模型(HMM),隱狀態是離散的;
    • 卡爾曼濾波(Kalman Filter),隱狀態連續、線性;
    • 粒子濾波(Particle Filter),隱狀態連續、非線性。

動態模型:在 GMM 等模型中,假設每個樣本是獨立同分布的,即不同樣本之間沒有任何關系。而在動態模型中,在此基礎上有了時間序列。這里所謂的時間序列是廣義的,可以是真正的時間序列,如語音信號,也可以是其他有序序列,如自然語言中的一個句子。在動態模型中,樣本點之間是不滿足獨立同分布假設的。動態模型中,通常有隱藏狀態和觀測變量兩種隨機變量。如 HMM 示意圖中,從橫向來看,是時間序列(time),從縱向來看,是混合變量(mixture)。

HMM模型表示

HMM 模型的概率圖表示如下所示,其中空白節點表示隱藏狀態,用 I=i1,i2,…,it,…I=i_1,i_2,\dots,i_t,\dotsI=i1?,i2?,,it?, 來表示,其取值的可能為 Q=q1,q2,…,qNQ={q_1,q_2,\dots,q_N}Q=q1?,q2?,,qN?,陰影節點表示觀測變量,用 O=o1,o2,…,ot,…O=o_1,o_2,\dots,o_t,\dotsO=o1?,o2?,,ot?, 來表示,其取值的可能為 V=v1,v2,…,vMV={v_1,v_2,\dots,v_M}V=v1?,v2?,,vM?。概率圖模型的參數為 λ=(π,A,B)\lambda=(\pi,A,B)λ=(π,A,B) ,其中

  • π\piπ 是初始概率分布,即第一個隱狀態 i1i_1i1? 的概率分布,作為隱狀態,它的其取值可能有 NNN
  • A=[aij]A=[a_{ij}]A=[aij?] 是狀態轉移矩陣(transition matrix),矩陣中的元素 aija_{ij}aij? 表示從隱狀態 iii 到隱狀態 jjj 的轉移概率,即 aij=P(it+1=qj∣it=qi)a_{ij}=P(i_{t+1}=q_j|i_t=q_i)aij?=P(it+1?=qj?it?=qi?)
  • B=[bj(k)]B=[b_{j}(k)]B=[bj?(k)] 是發射矩陣(emission matrix),矩陣中的元素 bj(k)b_{j}(k)bj?(k) 表示同一時間點從隱狀態 jjj 到觀測變量 kkk 的發射概率,即 bj(k)=P(ot=vk∣it=qj)b_{j}(k)=P(o_t=v_k|i_t=q_j)bj?(k)=P(ot?=vk?it?=qj?)

在這里插入圖片描述

兩個假設

HMM 模型中有兩個假設,分別是齊次馬爾可夫假設和觀測獨立假設。

齊次馬爾可夫假設,即無后效性,未來狀態與過去狀態無關,只與當前狀態有關。即:
P(it+1∣it,it?1,…,i1,ot,ot?1,…,o1)=P(it+1∣it)P(i_{t+1}|i_t,i_{t-1},\dots,i_1,o_t,o_{t-1},\dots,o_1)=P(i_{t+1}|i_t) P(it+1?it?,it?1?,,i1?,ot?,ot?1?,,o1?)=P(it+1?it?)
觀測獨立假設,某時刻的觀測變量只與其自身對應的隱狀態有關,與之前的其他變量都無關。即:
P(ot∣it,it?1,…,i1,ot?1,…,o1)=P(ot∣it)P(o_t|i_t,i_{t-1},\dots,i_1,o_{t-1},\dots,o_1)=P(o_t|i_t) P(ot?it?,it?1?,,i1?,ot?1?,,o1?)=P(ot?it?)

三個問題

HMM 模型中,通常有三種問題:evaluation、learning、decoding。

  • evaluation:求值(觀測變量)

    已知 λ={π,A,B}\lambda=\{\pi, A, B\}λ={π,A,B} ,求觀測變量序列出現的概率,即求 P(o∣λ)P(o|\lambda)P(oλ) 。通常用前向后向算法(forward-backward algorithm)求解。

  • learning:求參數,參數估計

    已知觀測序列,求 λ\lambdaλ ,通常用 EM 算法(baum welch algorithm)求解極大似然估計 λ^=arg?max?λP(O∣λ)\hat{\lambda}=\arg\max_{\lambda} P(O|\lambda)λ^=argmaxλ?P(Oλ)

  • decoding:求狀態序列

    已知觀測序列和模型參數,求使得該觀測序列出現概率最大的隱狀態序列,通常用維特比算法(viterbi algorithm)估計 I^=arg?max?iP(O∣I)\hat{I}=\arg\max_{i}P(O|I)I^=argmaxi?P(OI)

    decoding 問題又可引申出兩種問題:prediction 和 filtering。

    • prediction:已知過去和現在的觀測序列,求下一時刻的隱狀態,即求 P(it+1∣o1,o2,…,ot)P(i_{t+1}|o_1,o_2,\dots,o_t)P(it+1?o1?,o2?,,ot?)
    • filtering:已知過去和現在的觀測序列,求當前時刻的隱狀態,即求 P(it∣o1,o2,…,ot)P(i_t|o_1,o_2,\dots,o_t)P(it?o1?,o2?,,ot?) ,HMM 一般不做這個問題。

evaluation問題

樸素解法

給定 HMM 模型的參數,求觀測變量,即求 P(O∣λ)P(O|\lambda)P(Oλ)
P(O∣λ)=∑SP(S,O∣λ)=∑SP(O∣I,λ)?P(I∣λ)P(O|\lambda)=\sum_{S}P(S,O|\lambda)=\sum_SP(O|I,\lambda)\cdot P(I|\lambda) P(Oλ)=S?P(S,Oλ)=S?P(OI,λ)?P(Iλ)
其中,后一項:
P(S∣λ)=P(i1,i2,…,iT∣λ)=P(iT∣i1,i2,…,iT?1,λ)?P(i1,i2,…,iT?1,λ)=P(iT∣iT?1)?P(i1,i2,…,iT?1,λ)齊次馬爾可夫假設=P(iT∣iT?1)P(iT?1∣iT?2)…P(i2∣i1)遞歸展開=aiT?1,iTaiT?2,iT?1…a12=∏t=2Tait?1it\begin{align} P(S|\lambda)&=P(i_1,i_2,\dots,i_T|\lambda)\\ &=P(i_T|i_1,i_2,\dots,i_{T-1},\lambda)\cdot P(i_1,i_2,\dots,i_{T-1},\lambda)\\ &=P(i_T|i_{T-1})\cdot P(i_1,i_2,\dots,i_{T-1},\lambda)\ \ \ \ \ \ \ 齊次馬爾可夫假設\\ &=P(i_T|i_{T-1})P(i_{T-1}|i_{T-2})\dots P(i_2|i_1)\ \ \ \ 遞歸展開\\ &=a_{i_{T-1},i_T}a_{i_{T-2},i_{T-1}}\dots a_{12}\\ &=\prod_{t=2}^Ta_{i_{t-1}i_t} \end{align} P(Sλ)?=P(i1?,i2?,,iT?λ)=P(iT?i1?,i2?,,iT?1?,λ)?P(i1?,i2?,,iT?1?,λ)=P(iT?iT?1?)?P(i1?,i2?,,iT?1?,λ)???????齊次馬爾可夫假設=P(iT?iT?1?)P(iT?1?iT?2?)P(i2?i1?)????遞歸展開=aiT?1?,iT??aiT?2?,iT?1??a12?=t=2T?ait?1?it????
同理,根據觀測獨立假設,前一項:
P(O∣I,λ)=∏t=1Tbit(ot)P(O|I,\lambda)=\prod_{t=1}^Tb_{i_t}(o_t) P(OI,λ)=t=1T?bit??(ot?)
從而:
P(O∣λ)=∑I∏t=2Tait?1it∏t=1Tbit(ot)=∑i1∑i2?∑iT∏t=2Tait?1it∏t=1Tbit(ot)\begin{align} P(O|\lambda)&=\sum_I\prod_{t=2}^Ta_{i_{t-1}i_t}\prod_{t=1}^Tb_{i_t}(o_t)\\ &=\sum_{i_1}\sum_{i_2}\dots\sum_{i_T}\prod_{t=2}^Ta_{i_{t-1}i_t}\prod_{t=1}^Tb_{i_t}(o_t)\\ \end{align} P(Oλ)?=I?t=2T?ait?1?it??t=1T?bit??(ot?)=i1??i2???iT??t=2T?ait?1?it??t=1T?bit??(ot?)??
上式的時間復雜度為 O(TNT)\mathcal{O}(TN^T)O(TNT) ,無疑是不能接受的。我們需要尋找時間復雜度更低的算法。

前向算法

推導前向后向算法的過程中用到的變換主要就是 HMM 的兩個假設,以及條件概率的公式。

在這里插入圖片描述

αt(i)=P(o1,…,ot,it=qi∣λ)\alpha_t(i)=P(o_1,\dots,o_t,i_t=q_i|\lambda)αt?(i)=P(o1?,,ot?,it?=qi?λ) ,則
P(O∣λ)=∑i=1NP(O,it=qi∣λ)=∑i=1NαT(i)P(O|\lambda)=\sum_{i=1}^NP(O,i_t=q_i|\lambda)=\sum_{i=1}^N\alpha_T(i) P(Oλ)=i=1N?P(O,it?=qi?λ)=i=1N?αT?(i)
要求觀測變量 P(O∣λ)P(O|\lambda)P(Oλ), 現在我們只要求出 αT(i)\alpha_T(i)αT?(i) ,然后再 i=1…Ni=1\dots Ni=1N 上求和即可。

一個自然的想法就是找 αt(i)\alpha_{t}(i)αt?(i) 的遞推式,即其與 αt+1(i)\alpha_{t+1}(i)αt+1?(i) 的關系。有:
αt+1(j)=P(o1,…,ot,ot+1,it+1=qj∣λ)=∑i=1NP(o1,…,ot,ot+1,it=qi,it+1=qj∣λ)=∑i=1NP(ot+1∣o1,…,ot,it=qi,it+1=qj,λ)?P(o1,…,ot,it=qi,it+1=qj∣λ)=∑i=1NP(oi+1∣it+1=qj)?P(o1,…,ot,it=qi,it+1=qj∣λ)觀測獨立假設=∑i=1NP(oi+1∣it+1=qj)?P(it+1=qj∣o1,…,ot,it=qi,λ)?P(o1,…,ot,it=qi∣λ)=∑i=1NP(oi+1∣it+1=qj)?P(it+1=qj∣it=qi,λ)?P(o1,…,ot,it=qi∣λ)齊次馬爾可夫假設=∑i=1NP(oi+1∣it+1=qj)?P(it+1=qj∣it=qi,λ)?αt(i)=∑i=1Nbj(ot+1)?aij?αt(i)\begin{align} \alpha_{t+1}(j)&=P(o_1,\dots,o_t,o_{t+1},i_{t+1}=q_j|\lambda)\\ &=\sum_{i=1}^NP(o_1,\dots,o_t,o_{t+1},i_t=q_i,i_{t+1}=q_j|\lambda)\\ &=\sum_{i=1}^NP(o_{t+1}|o_1,\dots,o_t,i_t=q_i,i_{t+1}=q_j,\lambda)\cdot P(o_1,\dots,o_t,i_t=q_i,i_{t+1}=q_j|\lambda)\\ &=\sum_{i=1}^NP(o_{i+1}|i_{t+1}=q_j)\cdot P(o_1,\dots,o_t,i_t=q_i,i_{t+1}=q_j|\lambda)\ \ \ \ \ \ \ 觀測獨立假設\\ &=\sum_{i=1}^NP(o_{i+1}|i_{t+1}=q_j)\cdot P(i_{t+1}=q_j|o_1,\dots,o_t,i_t=q_i,\lambda)\cdot P(o_1,\dots,o_t,i_t=q_i|\lambda)\\ &=\sum_{i=1}^NP(o_{i+1}|i_{t+1}=q_j)\cdot P(i_{t+1}=q_j|i_t=q_i,\lambda)\cdot P(o_1,\dots,o_t,i_t=q_i|\lambda)\ \ \ \ \ \ \ 齊次馬爾可夫假設\\ &=\sum_{i=1}^NP(o_{i+1}|i_{t+1}=q_j)\cdot P(i_{t+1}=q_j|i_t=q_i,\lambda)\cdot \alpha_t(i)\\ &=\sum_{i=1}^Nb_{j}(o_{t+1})\cdot a_{ij}\cdot\alpha_t(i)\\ \end{align} αt+1?(j)?=P(o1?,,ot?,ot+1?,it+1?=qj?λ)=i=1N?P(o1?,,ot?,ot+1?,it?=qi?,it+1?=qj?λ)=i=1N?P(ot+1?o1?,,ot?,it?=qi?,it+1?=qj?,λ)?P(o1?,,ot?,it?=qi?,it+1?=qj?λ)=i=1N?P(oi+1?it+1?=qj?)?P(o1?,,ot?,it?=qi?,it+1?=qj?λ)???????觀測獨立假設=i=1N?P(oi+1?it+1?=qj?)?P(it+1?=qj?o1?,,ot?,it?=qi?,λ)?P(o1?,,ot?,it?=qi?λ)=i=1N?P(oi+1?it+1?=qj?)?P(it+1?=qj?it?=qi?,λ)?P(o1?,,ot?,it?=qi?λ)???????齊次馬爾可夫假設=i=1N?P(oi+1?it+1?=qj?)?P(it+1?=qj?it?=qi?,λ)?αt?(i)=i=1N?bj?(ot+1?)?aij??αt?(i)??
由此,我們就得到了遞推式:
αt+1(j)=∑i=1Nbj(ot+1)?aij?αt(i)\alpha_{t+1}(j)=\sum_{i=1}^Nb_j(o_{t+1})\cdot a_{ij}\cdot\alpha_t(i) αt+1?(j)=i=1N?bj?(ot+1?)?aij??αt?(i)
從而可以前向(從前往后,從 111TTT)求得 αT(i)\alpha_T(i)αT?(i) ,從而求得 P(O∣λ)=∑i=1NαT(i)P(O|\lambda)=\sum_{i=1}^N\alpha_T(i)P(Oλ)=i=1N?αT?(i)

后向算法

與前向算法類似,我們定義一個記號 βt(i)\beta_t(i)βt?(i)
βt(i)=P(ot,…,oT∣it=qi,λ)\beta_t(i)=P(o_t,\dots,o_T|i_t=q_i,\lambda) βt?(i)=P(ot?,,oT?it?=qi?,λ)
則:
P(O∣λ)=P(o1,…,oT∣λ)=∑i=1NP(o1,…,oT,i1=qi∣λ)=∑i=1NP(o1,…,oT∣i1=qi,λ)?P(i1=qi)=∑i=1NP(o1,…,oT∣i1=qi,λ)?πi=∑i=1NP(o1∣o2,…,oT,i1=qi,λ)?P(o2,…,oT∣i1=qi,λ)?πi=∑i=1NP(o1∣i1=qi,λ)?β1(i)?πi=∑i=1Nbi(o1)?πi?β1(i)\begin{align} P(O|\lambda)&=P(o_1,\dots,o_T|\lambda)\\ &=\sum_{i=1}^NP(o_1,\dots,o_T,i_1=q_i|\lambda)\\ &=\sum_{i=1}^NP(o_1,\dots,o_T|i_1=q_i,\lambda)\cdot P(i_1=q_i)\\ &=\sum_{i=1}^NP(o_1,\dots,o_T|i_1=q_i,\lambda)\cdot \pi_i\\ &=\sum_{i=1}^NP(o_1|o_2,\dots,o_T,i_1=q_i,\lambda)\cdot P(o_2,\dots,o_T|i_1=q_i,\lambda)\cdot\pi_i\\ &=\sum_{i=1}^NP(o_1|i_1=q_i,\lambda)\cdot\beta_1(i)\cdot\pi_i\\ &=\sum_{i=1}^Nb_i(o_1)\cdot\pi_i\cdot\beta_1(i) \end{align} P(Oλ)?=P(o1?,,oT?λ)=i=1N?P(o1?,,oT?,i1?=qi?λ)=i=1N?P(o1?,,oT?i1?=qi?,λ)?P(i1?=qi?)=i=1N?P(o1?,,oT?i1?=qi?,λ)?πi?=i=1N?P(o1?o2?,,oT?,i1?=qi?,λ)?P(o2?,,oT?i1?=qi?,λ)?πi?=i=1N?P(o1?i1?=qi?,λ)?β1?(i)?πi?=i=1N?bi?(o1?)?πi??β1?(i)??
λ\lambdaλ 為已知,下面就省略不寫了。同樣我們試圖得到遞推式,即 βt+1(j)\beta_{t+1}(j)βt+1?(j)βt(i)\beta_t(i)βt?(i) 之間的關系。有:
βt(i)=P(ot+1,…,oT∣it=qi)=∑j=1NP(ot+1,…,oT,it+1=qj∣it=qi)=∑j=1NP(ot+1,…,oT∣it+1=qj,it=qi)?P(it+1=qj∣it=qi)=∑j=1NP(ot+1,…,oT∣it+1=qj)?aij前面拿掉it=qi的證明暫略=∑j=1NP(ot+1∣ot+2,…,oT,it+1=qj)?P(ot+2,…,oT∣it+1=qj)?aij=∑j=1NP(ot+1∣it+1=qj)?βt+1(j)?aij獨立觀測假設=∑j=1Nbj(ot+1)?aij?βt+1(j)\begin{align} \beta_t(i)&=P(o_{t+1},\dots,o_T|i_t=q_i)\\ &=\sum_{j=1}^NP(o_{t+1},\dots,o_T,i_{t+1}=q_j|i_t=q_i)\\ &=\sum_{j=1}^NP(o_{t+1},\dots,o_T|i_{t+1}=q_j,i_t=q_i)\cdot P(i_{t+1}=q_j|i_t=q_i)\\ &=\sum_{j=1}^NP(o_{t+1},\dots,o_T|i_{t+1}=q_j)\cdot a_{ij}\ \ \ \ \ \ \ 前面拿掉i_t=q_i的證明暫略\\ &=\sum_{j=1}^NP(o_{t+1}|o_{t+2},\dots,o_T,i_{t+1}=q_j)\cdot P(o_{t+2},\dots,o_T|i_{t+1}=q_j)\cdot a_{ij}\\ &=\sum_{j=1}^NP(o_{t+1}|i_{t+1}=q_j)\cdot \beta_{t+1}(j)\cdot a_{ij}\ \ \ \ \ \ \ 獨立觀測假設\\ &=\sum_{j=1}^Nb_j(o_{t+1})\cdot a_{ij}\cdot \beta_{t+1}(j) \end{align} βt?(i)?=P(ot+1?,,oT?it?=qi?)=j=1N?P(ot+1?,,oT?,it+1?=qj?it?=qi?)=j=1N?P(ot+1?,,oT?it+1?=qj?,it?=qi?)?P(it+1?=qj?it?=qi?)=j=1N?P(ot+1?,,oT?it+1?=qj?)?aij????????前面拿掉it?=qi?的證明暫略=j=1N?P(ot+1?ot+2?,,oT?,it+1?=qj?)?P(ot+2?,,oT?it+1?=qj?)?aij?=j=1N?P(ot+1?it+1?=qj?)?βt+1?(j)?aij????????獨立觀測假設=j=1N?bj?(ot+1?)?aij??βt+1?(j)??
由此,就得到了遞推式:
βt(i)=∑j=1Nbj(ot+1)?aij?βt+1(j)\beta_t(i)=\sum_{j=1}^Nb_j(o_{t+1})\cdot a_{ij}\cdot \beta_{t+1}(j) βt?(i)=j=1N?bj?(ot+1?)?aij??βt+1?(j)
從而,可以后向(從后往前,從 TTT111)求得 β1(i)\beta_1(i)β1?(i) ,從而求得 P(O∣λ)=∑i=1Nbi(o1)?πi?β1(i)P(O|\lambda)=\sum_{i=1}^Nb_i(o_1)\cdot\pi_i\cdot\beta_1(i)P(Oλ)=i=1N?bi?(o1?)?πi??β1?(i)

總結

遞推方向設定求解公式復雜度
樸素解法--$P(O\lambda)=\sum_{i_1}\sum_{i_2}\dots\sum_{i_T}\prod_{t=2}Ta_{i_{t-1}i_t}\prod_{t=1}Tb_{i_t}(o_t)$
前向算法從前向后,從111TTT$\alpha_t(i)=P(o_1,\dots,o_t,i_t=q_i\lambda)$$P(O
后向算法從后向前,從TTT111$\beta_t(i)=P(o_t,\dots,o_Ti_t=q_i,\lambda)$$P(O

learning問題

HMM 的 learning 問題是要估計出其參數 λ=(π,A,B)\lambda=(\pi,A,B)λ=(π,A,B) 。如果直接用極大似然估計,即:
λMLE=arg?max?λP(O∣λ)\lambda_{MLE}=\arg\max_\lambda P(O|\lambda) λMLE?=argλmax?P(Oλ)
是無法直接解析的。因此,我們這里用迭代的 EM 算法來估計參數。EM 算法的迭代公式如下:
θ(t+1)=arg?max?θ∫Zlog?P(X,Z∣θ)?P(Z∣X,θ(t))dZ\theta^{(t+1)}=\arg\max_\theta\int_Z\log P(X,Z|\theta)\cdot P(Z|X,\theta^{(t)})dZ θ(t+1)=argθmax?Z?logP(X,Zθ)?P(ZX,θ(t))dZ
其中 xxx 是觀測變量,zzz 是隱變量,θ\thetaθ 是參數。之前提到,HMM 除了可以橫向看做是時間(time)序列之外,還可以縱向看做是混合(mixture)變量。將觀測變量、隱變量和參數分別對應到 HMM 中符號之后,順便做一步簡化,把常數拿掉,有:
λ(t+1)=arg?max?λ∑Ilog?P(O,I∣λ)?P(I∣O,λ(t))=arg?max?λ∑Ilog?P(O,I∣λ)?P(O,I∣λ(t))P(O∣λ(t))=arg?max?λ∑Ilog?P(O,I∣λ)?P(O,I∣λ(t))\begin{align} \lambda^{(t+1)}&=\arg\max_\lambda\sum_I\log P(O,I|\lambda)\cdot P(I|O,\lambda^{(t)})\\ &=\arg\max_\lambda\sum_I\log P(O,I|\lambda)\cdot \frac{P(O,I|\lambda^{(t)})}{P(O|\lambda^{(t)})}\\ &=\arg\max_\lambda\sum_I\log P(O,I|\lambda)\cdot P(O,I|\lambda^{(t)})\\ \end{align} λ(t+1)?=argλmax?I?logP(O,Iλ)?P(IO,λ(t))=argλmax?I?logP(O,Iλ)?P(Oλ(t))P(O,Iλ(t))?=argλmax?I?logP(O,Iλ)?P(O,Iλ(t))??
記為 Q 函數 Q(λ,λ(t))Q(\lambda,\lambda^{(t)})Q(λ,λ(t)) ,記 λ(t)=(π(t),A(t),B(t))\lambda^{(t)}=(\pi^{(t)},A^{(t)},B^{(t)})λ(t)=(π(t),A(t),B(t)) ,又有 P(O∣λ)=∑IP(O,I∣λ)=∑i1?∑iTπi1∏t=2Tait?1,it∏t=1Tbit(ot)P(O|\lambda)=\sum_IP(O,I|\lambda)=\sum_{i_1}\dots\sum_{i_T}\pi_{i_1}\prod_{t=2}^Ta_{i_{t-1},i_t}\prod_{t=1}^Tb_{i_t}(o_t)P(Oλ)=I?P(O,Iλ)=i1???iT??πi1??t=2T?ait?1?,it??t=1T?bit??(ot?),則:
Q(λ,λ(t+1))=∑Ilog?P(O,I∣λ)?P(O,I∣λ(t))=∑I[(log?πi1+∑t=2Tlog?ait?1,it+∑t=1Tlog?bit(ot))?P(O,I∣λ(t))]\begin{align} Q(\lambda,\lambda^{(t+1)})&=\sum_I\log P(O,I|\lambda)\cdot P(O,I|\lambda^{(t)})\\ &=\sum_I[(\log\pi_{i_1}+\sum_{t=2}^T\log a_{i_{t-1},i_t}+\sum_{t=1}^T\log b_{i_t}(o_t))\cdot P(O,I|\lambda^{(t)})] \end{align} Q(λ,λ(t+1))?=I?logP(O,Iλ)?P(O,Iλ(t))=I?[(logπi1??+t=2T?logait?1?,it??+t=1T?logbit??(ot?))?P(O,Iλ(t))]??
這里就只介紹 π\piπ 的參數估計,A,BA,BA,B 類似。觀察上面 Q 函數的展開結果,只有第一項與 π\piπ 相關,有:
π(t+1)=arg?max?πQ(λ,λ(t))=arg?max?π∑Ilog?πi1?P(O,I∣λ(t))=arg?max?π∑i1?∑iT[log?πi1?P(O,i1,…,iT∣λ(t))]=arg?max?π∑i=1N[log?πiP(O,i1=qi∣λ(t))]\begin{align} \pi^{(t+1)}&=\arg\max_\pi Q(\lambda,\lambda^{(t)})\\ &=\arg\max_\pi\sum_I\log\pi_{i_1}\cdot P(O,I|\lambda^{(t)})\\ &=\arg\max_\pi\sum_{i_1}\dots\sum_{i_T}[\log\pi_{i_1}\cdot P(O,i_1,\dots,i_T|\lambda^{(t)})]\\ &=\arg\max_\pi\sum_{i=1}^N[\log\pi_iP(O,i_1=q_i|\lambda^{(t)})]\\ \end{align} π(t+1)?=argπmax?Q(λ,λ(t))=argπmax?I?logπi1???P(O,Iλ(t))=argπmax?i1???iT??[logπi1???P(O,i1?,,iT?λ(t))]=argπmax?i=1N?[logπi?P(O,i1?=qi?λ(t))]??
由于 π\piπ 是初始狀態的概率分布,因此上述優化問題有約束:∑i=1Nπi=1\sum_{i=1}^N\pi_i=1i=1N?πi?=1 。解決帶約束的優化問題,這里用拉格朗日乘子法。

令:
L(π,η)=∑i=1Nlog?πiP(O,i1=qi∣λ(t))+η(∑i=1Nπi?1)\mathcal{L}(\pi,\eta)=\sum_{i=1}^N\log\pi_iP(O,i_1=q_i|\lambda^{(t)})+\eta(\sum_{i=1}^N\pi_i-1) L(π,η)=i=1N?logπi?P(O,i1?=qi?λ(t))+η(i=1N?πi??1)
求其對 πi\pi_iπi? 的偏導,并令其為 0:
?L?πi=1πiP(O,i1=qi∣λ(t))+η=0∑i=1N[P(O,i1=qi∣λ(t))+πiη]=0P(O∣λ(t))+η=0η=?P(O∣λ(t))\frac{\partial{\mathcal{L}}}{\partial{\pi_i}}=\frac{1}{\pi_i}P(O,i_1=q_i|\lambda^{(t)})+\eta=0\\ \sum_{i=1}^N[P(O,i_1=q_i|\lambda^{(t)})+\pi_i\eta]=0\\ P(O|\lambda^{(t)})+\eta=0\\ \eta=-P(O|\lambda^{(t)}) ?πi??L?=πi?1?P(O,i1?=qi?λ(t))+η=0i=1N?[P(O,i1?=qi?λ(t))+πi?η]=0P(Oλ(t))+η=0η=?P(Oλ(t))
將其帶回,有:
πi(t+1)=?1ηP(O∣i1=qi∣λ(t))=P(O,i1=qi∣λ(t))P(O∣λ(t))\pi_i^{(t+1)}=-\frac{1}{\eta}P(O|i_1=q_i|\lambda^{(t)})=\frac{P(O,i_1=q_i|\lambda^{(t)})}{P(O|\lambda^{(t)})} πi(t+1)?=?η1?P(Oi1?=qi?λ(t))=P(Oλ(t))P(O,i1?=qi?λ(t))?
至此,我們就得到了由 πi(t)\pi_i^{(t)}πi(t)? 迭代計算 πi(t+1)\pi_i^{(t+1)}πi(t+1)? 的公式,從而,就可以估計 π(t+1)\pi^{(t+1)}π(t+1)
π(t+1)=(π1(t+1),…,πN(t+1))\pi^{(t+1)}=(\pi_1^{(t+1)},\dots,\pi_N^{(t+1)}) π(t+1)=(π1(t+1)?,,πN(t+1)?)
這就完成了 HMM 參數中 π\piπ 的 learning 問題,對于另外兩個參數 A,BA,BA,B ,方法類似。這就是 baum-welch 算法,可以看做是一種特殊形式的 EM 算法。

decoding問題

decoding 問題是已知觀測序列和模型參數的情況下,求使得該觀測序列出現概率最大的隱狀態序列,通常用維特比算法(viterbi algorithm)估計 I^=arg?max?iP(O∣I)\hat{I}=\arg\max_{i}P(O|I)I^=argmaxi?P(OI)

在之前的題目設定中有:隱狀態 iti_tit? 取值的集合為 Q=q1,q2,…,qNQ={q_1,q_2,\dots,q_N}Q=q1?,q2?,,qN? ,每個時間點的隱狀態 iti_tit? 都有可能取這些值,我們就是要每一步 iti_tit? 選取一個 qiq_iqi? ,最終找到一組 I=i1,…,iTI=i_1,\dots,i_TI=i1?,,iT? 的取值(圖中藍色虛線),使得觀測變量序列 O=o1,…,oTO=o_1,\dots,o_TO=o1?,,oT? 出現的概率最大。

在這里插入圖片描述

實際中,我們使用動態規劃的思想來解決該問題。首先定義:δt(i)=max?i1,i2,…,it?1P(o1,…,ot.i1,…,it?1,it=qi)\delta_t(i)=\max_{i_1,i_2,\dots,i_{t-1}} P(o_1,\dots,o_t.i_1,\dots,i_{t-1},i_t=q_i)δt?(i)=maxi1?,i2?,,it?1??P(o1?,,ot?.i1?,,it?1?,it?=qi?) 表示到達第 iti_tit? 個位置取值為 it=qii_t=q_iit?=qi? 的最大概率值。接下來我們要找到動態規劃中的狀態轉移方程,即 δt+1(j)\delta_{t+1}(j)δt+1?(j)δt(i)\delta_t(i)δt?(i) 的關系。其實就是乘上從 iiijjj 對應的轉移概率 aija_{ij}aij?t+1t+1t+1 時刻的發射概率 bj(ot+1)b_j(o_{t+1})bj?(ot+1?)δt(i)\delta_t(i)δt?(i) 乘積的最大者,即有:
δt+1(j)=max?i1,…,itP(o1,…,ot+1,i1,…,it,it+1=qj)=max?1≤i≤Nδt(i)aijbj(ot+1)\begin{align} \delta_{t+1}(j)&=\max_{i_1,\dots,i_t}P(o_1,\dots,o_{t+1},i_1,\dots,i_t,i_{t+1}=q_j)\\ &=\max_{1\le i\le N}\delta_t(i)a_{ij}b_j(o_{t+1}) \end{align} δt+1?(j)?=i1?,,it?max?P(o1?,,ot+1?,i1?,,it?,it+1?=qj?)=1iNmax?δt?(i)aij?bj?(ot+1?)??
這樣,我們就求出了每一步的最大概率值,注意現在只是求得了最大概率值,沒有記錄路徑,而我們的目標是要求最大概率值對應的隱狀態序列路徑。


?t+1(j)=arg?max?1≤i≤Nδt(i)?aij\phi_{t+1}(j)=\arg\max_{1\le i\le N}\delta_t(i)\cdot a_{ij} ?t+1?(j)=arg1iNmax?δt?(i)?aij?
即可將每一步所選的 qiq_iqi? 記錄下來。這就是求解 HMM decoding 問題的維特比算法。

總結

HMM 是一種動態模型,即含有時間序列這一維度。更廣義地來說,它是一種狀態空間模型(State Space Model),狀態空間模型可以不包含時間維度,如卡爾曼濾波、粒子濾波等,它們的概率圖都類似(如圖 1 所示)。

記隱變量為 ZZZ,觀測變量為 XXX,模型參數為 θ\thetaθ ,這一類模型的問題可以歸納為下面幾種:

  • Learning,根據觀測變量估計模型參數,如由極大似然來估計參數 θ^=arg?max?θP(X∣θ)\hat{\theta}=\arg\max_{\theta}P(X|\theta)θ^=argmaxθ?P(Xθ),可由 Baum Welch(EM)算法求解;
  • Inference,根據模型參數進行分析、求值、預測等,以下 θ\thetaθ 均已知
    • Decoding,根據觀測變量解碼出隱變量,即求 Z^=arg?max?ZP(Z∣X)\hat{Z}=\arg\max_{Z}P(Z|X)Z^=argmaxZ?P(ZX),可由維特比算法(動態規劃)求解;
    • Evaluation,已知模型參數計算觀測變量,即求 prob of evidence P(X)P(X)P(X) 。通常如果使用樸素方法直接計算,會有較高的復雜度,因此對該問題的求解也有對應的算法,如前向算法和后向算法;
    • Filtering,根據歷史觀測變量求當前時刻的隱變量,即求 P(zt∣x1,x2,…,xt)P(z_t|x_1,x_2,\dots,x_t)P(zt?x1?,x2?,,xt?) 。比起只根據當前時刻觀測變量求隱變量 P(zt∣xt)P(z_t|x_t)P(zt?xt?) ,濾波能夠根據更多歷史信息,濾除噪聲,故稱為 Filtering。常用于在線(online)分析。也可由前向算法求解。
    • Smoothing,根據全部觀測變量,求某點的隱變量,即求 P(zt∣x1,x2,…,xT)P(z_t|x_1,x_2,\dots,x_T)P(zt?x1?,x2?,,xT?) ,常用于離線(offline)分析。可由前向后向算法求解。
    • Prediction,根據歷史觀測變量,求下一個或下兩個時刻的隱變量或觀測變量,即求 P(zt+1∣x1,x2,…,xt)P(z_{t+1}|x_1,x_2,\dots,x_t)P(zt+1?x1?,x2?,,xt?)P(xt+1∣x1,x2,…,xt)P(x_{t+1}|x_1,x_2,\dots,x_t)P(xt+1?x1?,x2?,,xt?) 。比如 NLP 中根據 ”我愛中國共“ 這 5 個歷史觀測變量,預測出下兩個觀測變量為 ”產黨“。可用前向算法求解。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532373.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532373.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532373.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ef mysql 的坑_C# EF 與 MySql 的那些坑

之前一直想用 mysql 和 ef 。然后多次嘗試也只能感嘆 還是 sqlsever 是親兒子。今天在單位又嘗試了一次,然后就成功了,記錄一下遇到的問題。首先是安裝包和驅動?。請保證 MySql.Data / MySql.Data.Entity.EF6 / mysql Connector/NET 版本對應…

使用randomaccessfile類將一個文本文件中的內容逆序輸出_Java 中比較常用的知識點:I/O 總結...

Java中I/O操作主要是指使用Java進行輸入,輸出操作. Java所有的I/O機制都是基于數據流進行輸入輸出,這些數據流表示了字符或者字節數據的流動序列。數據流是一串連續不斷的數據的集合,就象水管里的水流,在水管的一端一點一點地供水…

huggingface NLP工具包教程2:使用Transformers

huggingface NLP工具包教程2:使用Transformers 引言 Transformer 模型通常非常大,由于有數百萬到數百億個參數,訓練和部署這些模型是一項復雜的任務。此外,由于幾乎每天都有新模型發布,而且每個模型都有自己的實現&a…

huggingface NLP工具包教程3:微調預訓練模型

huggingface NLP工具包教程3:微調預訓練模型 引言 在上一章我們已經介紹了如何使用 tokenizer 以及如何使用預訓練的模型來進行預測。本章將介紹如何在自己的數據集上微調一個預訓練的模型。在本章,你將學到: 如何從 Hub 準備大型數據集如…

mysql精講_Mysql 索引精講

開門見山,直接上圖,下面的思維導圖即是現在要講的內容,可以先有個印象~常見索引類型(實現層面)索引種類(應用層面)聚簇索引與非聚簇索引覆蓋索引最佳索引使用策略1.常見索引類型(實現層面)首先不談Mysql怎么實現索引的,先馬后炮一…

pytorch lightning最簡上手

pytorch lightning最簡上手 pytorch lightning 是對原生 pytorch 的通用模型開發過程進行封裝的一個工具庫。本文不會介紹它的高級功能,而是通過幾個最簡單的例子來幫助讀者快速理解、上手基本的使用方式。在掌握基礎 API 和使用方式之后,讀者可自行到 …

RT-Smart 官方 ARM 32 平臺 musl gcc 工具鏈下載

前言 RT-Smart 的開發離不開 musl gcc 工具鏈,用于編譯 RT-Smart 內核與用戶態應用程序 RT-Smart musl gcc 工具鏈代碼當前未開源,但可以下載到 RT-Thread 官方編譯好的最新的 musl gcc 工具鏈 ARM 32位 平臺 比如 RT-Smart 最好用的 ARM32 位 qemu 平…

java list翻轉_JAVA實現兩種方法反轉單列表

/***authorluochengcheng* 定義一個單鏈表*/classNode {//變量private intrecord;//指向下一個對象privateNode nextNode;public Node(intrecord) {super();this.record record;}public intgetRecord() {returnrecord;}public void setRecord(intrecord) {this.record record;}…

OpenAI Whisper論文筆記

OpenAI Whisper論文筆記 OpenAI 收集了 68 萬小時的有標簽的語音數據,通過多任務、多語言的方式訓練了一個 seq2seq (語音到文本)的 Transformer 模型,自動語音識別(ASR)能力達到商用水準。本文為李沐老師…

mysql 工具 08s01_Mysql管理必備工具Maatkit詳解之十四(mk-kill)

mk-kill - 顧名思義,殺mysql線程。安裝方法查看這里。在一個OLTP的生產環境,一般不會讓sql執行過長的時間,特別是myisam這樣表鎖的引擎,如果出現長時間執行的sql一般是誤操作,要不就是出現問題了。出現這種情況&#x…

【經典簡讀】知識蒸餾(Knowledge Distillation) 經典之作

【經典簡讀】知識蒸餾(Knowledge Distillation) 經典之作 轉自:【經典簡讀】知識蒸餾(Knowledge Distillation) 經典之作 作者:潘小小 知識蒸餾是一種模型壓縮方法,是一種基于“教師-學生網絡思想”的訓練方法,由于其簡單&#xf…

深度學習三大謎團:集成、知識蒸餾和自蒸餾

深度學習三大謎團:集成、知識蒸餾和自蒸餾 轉自:https://mp.weixin.qq.com/s/DdgjJ-j6jHHleGtq8DlNSA 原文(英):https://www.microsoft.com/en-us/research/blog/three-mysteries-in-deep-learning-ensemble-knowledge…

在墻上找垂直線_墻上如何快速找水平線

在裝修房子的時候,墻面的面積一般都很大,所以在施工的時候要找準水平線很重要,那么一般施工人員是如何在墻上快速找水平線的呢?今天小編就來告訴大家幾種找水平線的方法。一、如何快速找水平線1、用一根透明的軟管,長度…

百度地圖mysql打點_關于百度地圖連接MYSQL的問題,謝謝啦!

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓大家好,剛使用百度地圖API,請教大家一個問題,謝啦!我需要從我的數據庫中取出字段為"city"的所有數據,然后通過bdGEO()函數在地圖上標注這些城市,我是…

PyTorch中的torch.nn.Parameter() 詳解

PyTorch中的torch.nn.Parameter() 詳解 今天來聊一下PyTorch中的torch.nn.Parameter()這個函數,筆者第一次見的時候也是大概能理解函數的用途,但是具體實現原理細節也是云里霧里,在參考了幾篇博文,做過幾個實驗之后算是清晰了&am…

Vision Transformer(ViT)PyTorch代碼全解析(附圖解)

Vision Transformer(ViT)PyTorch代碼全解析 最近CV領域的Vision Transformer將在NLP領域的Transormer結果借鑒過來,屠殺了各大CV榜單。本文將根據最原始的Vision Transformer論文,及其PyTorch實現,將整個ViT的代碼做一…

hdfs的副本數為啥增加了_HDFS詳解之塊大小和副本數

1.HDFSHDFS : 偽分布式(學習)NNDNSNNsbin/start-dfs.sh(開啟hdfs使用的腳本)bin/hdfs dfs -ls (輸入命令加前綴bin/hdfs dfs)2.block(塊)dfs.blocksize : 134217728(字節) / 128M 官網默認一個塊的大小128M*舉例理解塊1個文件 130M,默認一個塊的大小128M…

Linux下的ELF文件、鏈接、加載與庫(含大量圖文解析及例程)

Linux下的ELF文件、鏈接、加載與庫 鏈接是將將各種代碼和數據片段收集并組合為一個單一文件的過程,這個文件可以被加載到內存并執行。鏈接可以執行與編譯時,也就是在源代碼被翻譯成機器代碼時;也可以執行于加載時,也就是被加載器加…

mysql gender_Mysql第一彈

1、創建數據庫pythoncreate database python charsetutf8;2、設計班級表結構為id、name、isdelete,編寫創建表的語句create table classes(id int unsigned auto_increment primary key not null,name varchar(10),isdelete bit default 0);向班級表中插入數據pytho…

python virtualenv nginx_Ubuntu下搭建Nginx+supervisor+pypy+virtualenv

系統:Ubuntu 14.04 LTS搭建python的運行環境:NginxSupervisorPypyVirtualenv軟件說明:Nginx:通過upstream進行負載均衡Supervisor:管理python進程Pypy:用Python實現的Python解釋器PyPy is a fast, complian…