隐马尔可夫模型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=qjit=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=vkit=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+1it,it1,,i1,ot,ot1,,o1)=P(it+1it)
观测独立假设,某时刻的观测变量只与其自身对应的隐状态有关,与之前的其他变量都无关。即:
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(otit,it1,,i1,ot1,,o1)=P(otit)

三个问题

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^=argmaxiP(OI)

    decoding 问题又可引申出两种问题:prediction 和 filtering。

    • prediction:已知过去和现在的观测序列,求下一时刻的隐状态,即求 P(it+1∣o1,o2,…,ot)P(i_{t+1}|o_1,o_2,\dots,o_t)P(it+1o1,o2,,ot)
    • filtering:已知过去和现在的观测序列,求当前时刻的隐状态,即求 P(it∣o1,o2,…,ot)P(i_t|o_1,o_2,\dots,o_t)P(ito1,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λ)=SP(S,Oλ)=SP(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(iTi1,i2,,iT1,λ)P(i1,i2,,iT1,λ)=P(iTiT1)P(i1,i2,,iT1,λ)       齐次马尔可夫假设=P(iTiT1)P(iT1iT2)P(i2i1)    递归展开=aiT1,iTaiT2,iT1a12=t=2Tait1it
同理,根据观测独立假设,前一项:
P(O∣I,λ)=∏t=1Tbit(ot)P(O|I,\lambda)=\prod_{t=1}^Tb_{i_t}(o_t) P(OI,λ)=t=1Tbit(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λ)=It=2Tait1itt=1Tbit(ot)=i1i2iTt=2Tait1itt=1Tbit(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=1NP(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=1NP(o1,,ot,ot+1,it=qi,it+1=qjλ)=i=1NP(ot+1o1,,ot,it=qi,it+1=qj,λ)P(o1,,ot,it=qi,it+1=qjλ)=i=1NP(oi+1it+1=qj)P(o1,,ot,it=qi,it+1=qjλ)       观测独立假设=i=1NP(oi+1it+1=qj)P(it+1=qjo1,,ot,it=qi,λ)P(o1,,ot,it=qiλ)=i=1NP(oi+1it+1=qj)P(it+1=qjit=qi,λ)P(o1,,ot,it=qiλ)       齐次马尔可夫假设=i=1NP(oi+1it+1=qj)P(it+1=qjit=qi,λ)αt(i)=i=1Nbj(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=1Nbj(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,,oTit=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=1NP(o1,,oT,i1=qiλ)=i=1NP(o1,,oTi1=qi,λ)P(i1=qi)=i=1NP(o1,,oTi1=qi,λ)πi=i=1NP(o1o2,,oT,i1=qi,λ)P(o2,,oTi1=qi,λ)πi=i=1NP(o1i1=qi,λ)β1(i)πi=i=1Nbi(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,,oTit=qi)=j=1NP(ot+1,,oT,it+1=qjit=qi)=j=1NP(ot+1,,oTit+1=qj,it=qi)P(it+1=qjit=qi)=j=1NP(ot+1,,oTit+1=qj)aij       前面拿掉it=qi的证明暂略=j=1NP(ot+1ot+2,,oT,it+1=qj)P(ot+2,,oTit+1=qj)aij=j=1NP(ot+1it+1=qj)βt+1(j)aij       独立观测假设=j=1Nbj(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=1Nbj(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=1Nbi(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λmaxP(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θmaxZlogP(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λmaxIlogP(O,Iλ)P(IO,λ(t))=argλmaxIlogP(O,Iλ)P(Oλ(t))P(O,Iλ(t))=argλmaxIlogP(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λ)=IP(O,Iλ)=i1iTπi1t=2Tait1,itt=1Tbit(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))=IlogP(O,Iλ)P(O,Iλ(t))=I[(logπi1+t=2Tlogait1,it+t=1Tlogbit(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πmaxQ(λ,λ(t))=argπmaxIlogπi1P(O,Iλ(t))=argπmaxi1iT[logπi1P(O,i1,,iTλ(t))]=argπmaxi=1N[logπiP(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=1NlogπiP(O,i1=qiλ(t))+η(i=1Nπi1)
求其对 π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)}) πiL=πi1P(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)=η1P(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^=argmaxiP(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,,it1P(o1,,ot.i1,,it1,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}aijt+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,,itmaxP(o1,,ot+1,i1,,it,it+1=qj)=1iNmaxδt(i)aijbj(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^=argmaxZP(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(ztx1,x2,,xt) 。比起只根据当前时刻观测变量求隐变量 P(zt∣xt)P(z_t|x_t)P(ztxt) ,滤波能够根据更多历史信息,滤除噪声,故称为 Filtering。常用于在线(online)分析。也可由前向算法求解。
    • Smoothing,根据全部观测变量,求某点的隐变量,即求 P(zt∣x1,x2,…,xT)P(z_t|x_1,x_2,\dots,x_T)P(ztx1,x2,,xT) ,常用于离线(offline)分析。可由前向后向算法求解。
    • Prediction,根据历史观测变量,求下一个或下两个时刻的隐变量或观测变量,即求 P(zt+1∣x1,x2,…,xt)P(z_{t+1}|x_1,x_2,\dots,x_t)P(zt+1x1,x2,,xt)P(xt+1∣x1,x2,…,xt)P(x_{t+1}|x_1,x_2,\dots,x_t)P(xt+1x1,x2,,xt) 。比如 NLP 中根据 ”我爱中国共“ 这 5 个历史观测变量,预测出下两个观测变量为 ”产党“。可用前向算法求解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用randomaccessfile类将一个文本文件中的内容逆序输出_Java 中比较常用的知识点:I/O 总结...

Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水…

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

huggingface NLP工具包教程2:使用Transformers 引言 Transformer 模型通常非常大,由于有数百万到数百亿个参数,训练和部署这些模型是一项复杂的任务。此外,由于几乎每天都有新模型发布,而且每个模型都有自己的实现&a…

mysql精讲_Mysql 索引精讲

开门见山,直接上图,下面的思维导图即是现在要讲的内容,可以先有个印象~常见索引类型(实现层面)索引种类(应用层面)聚簇索引与非聚簇索引覆盖索引最佳索引使用策略1.常见索引类型(实现层面)首先不谈Mysql怎么实现索引的,先马后炮一…

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 平…

OpenAI Whisper论文笔记

OpenAI Whisper论文笔记 OpenAI 收集了 68 万小时的有标签的语音数据,通过多任务、多语言的方式训练了一个 seq2seq (语音到文本)的 Transformer 模型,自动语音识别(ASR)能力达到商用水准。本文为李沐老师…

【经典简读】知识蒸馏(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、用一根透明的软管,长度…

Vision Transformer(ViT)PyTorch代码全解析(附图解)

Vision Transformer(ViT)PyTorch代码全解析 最近CV领域的Vision Transformer将在NLP领域的Transormer结果借鉴过来,屠杀了各大CV榜单。本文将根据最原始的Vision Transformer论文,及其PyTorch实现,将整个ViT的代码做一…

Linux下的ELF文件、链接、加载与库(含大量图文解析及例程)

Linux下的ELF文件、链接、加载与库 链接是将将各种代码和数据片段收集并组合为一个单一文件的过程,这个文件可以被加载到内存并执行。链接可以执行与编译时,也就是在源代码被翻译成机器代码时;也可以执行于加载时,也就是被加载器加…

java 按钮 监听_Button的四种监听方式

Button按钮设置点击的四种监听方式注:加粗放大的都是改变的代码1.使用匿名内部类的形式进行设置使用匿名内部类的形式,直接将需要设置的onClickListener接口对象初始化,内部的onClick方法会在按钮被点击的时候执行第一个活动的java代码&#…

linux查看java虚拟机内存_深入理解java虚拟机(linux与jvm内存关系)

本文转载自美团技术团队发表的同名文章https://tech.meituan.com/linux-jvm-memory.html一, linux与进程内存模型要理解jvm最重要的一点是要知道jvm只是linux的一个进程,把jvm的视野放大,就能很好的理解JVM细分的一些概念下图给出了硬件系统进程三个层面内存之间的关系.从硬件上…

java function void_Java8中你可能不知道的一些地方之函数式接口实战

什么时候可以使用 Lambda?通常 Lambda 表达式是用在函数式接口上使用的。从 Java8 开始引入了函数式接口,其说明比较简单:函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 java8…

java jvm内存地址_JVM--Java内存区域

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,如图:1.程序计数器可以看作是当前线程所执行的字节码的行号指示器,通俗的讲就是用来指示执行哪条指令的。为了线程切换后能恢复到正确的执行位置Java多线程是…

java情人节_情人节写给女朋友Java Swing代码程序

马上又要到情人节了,再不解风情的人也得向女友表示表示。作为一个程序员,示爱的时候自然也要用我们自己的方式。这里给大家上传一段我在今年情人节的时候写给女朋友的一段简单的Java Swing代码,主要定义了一个对话框,让女友选择是…

java web filter链_filter过滤链:Filter链是如何构建的?

在一个Web应用程序中可以注册多个Filter程序,每个Filter程序都可以针对某一个URL进行拦截。如果多个Filter程序都对同一个URL进行拦截,那么这些Filter就会组成一个Filter链(也叫过滤器链)。Filter链用FilterChain对象来表示,FilterChain对象中…

java final static_Java基础之final、static关键字

一、前言关于这两个关键字,应该是在开发工作中比较常见的,使用频率上来说也比较高。接口中、常量、静态方法等等。但是,使用频繁却不代表一定是能够清晰明白的了解,能说出个子丑演卯来。下面,对这两个关键字的常见用法…

java语言错误的是解释运行的_Java基础知识测试__A卷_答案

考试宣言:同学们, 考试考多少分不是我们的目的! 排在班级多少的名次也不是我们的初衷!我的考试的目的是要通过考试中的题目,检查大家在这段时间的学习中,是否已经把需要掌握的知识掌握住了,如果哪道题目你不会做,又或者做错了, 那么不用怕, 考完试后, 导师讲解的时候你要注意听…

java 持续集成工具_Jenkins-Jenkins(持续集成工具)下载 v2.249.2官方版--pc6下载站

Jenkins是一款基于java开发的持续集成工具,是一款开源软件,主要用于监控持续重复的工作,为开发者提供一个开发易用的软件平台,使软件的持续集成变成可能。。相关软件软件大小版本说明下载地址Jenkins是一款基于java开发的持续集成…

java中线程调度遵循的原则_深入理解Java多线程核心知识:跳槽面试必备

多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲。在平时工作中如若使用不当会出现数据错乱、执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关重要。本文从基础概念开始到最后的并…