Hidden Markov Model 隐马尔可夫模型

695 阅读4分钟

这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战

Hidden Markov Model 隐马尔可夫模型

隐马尔可夫模型也是一个生成模型。是一个用来描述系统隐性状态的转移和隐性状态的表现概率的概率模型。

概念

什么是隐性状态?

隐性的马尔科夫链随机生成一个状态序列,其中状态是隐性的,也即是外界观察不到的状态。我们称为隐性状态。下文简称状态。

状态之间转移的概率,由一个状态转移概率矩阵 AA 表示:

A=[aij]N×Naij=P(it+1=qjit=qi),i=1,...,N;j=1,...,NA=[a_{ij}]_{N\times N} \\ a_{ij}=P(i_{t+1}=q_j|i_t=q_i),i=1,...,N;j=1,...,N

aija_{ij} 表示t时刻下的状态 qiq_it+1t+1 时刻转移到状态 qjq_j的概率。

什么是观测?

隐性状态的表现,也就是每个状态会生成一个对应的观测 observation,由此也产生一个观测序列。

观测概率矩阵BB 表示:

B=[bj(k)]N×Nbj(k)=P(ot=vkit=qt),k=1,...,M;j=1,...,NB=[b_{j}(k)]_{N\times N} \\ b_j(k)=P(o_t=v_k|i_t=q_t),k=1,...,M;j=1,...,N

bj(k)b_j(k) 表示t时刻下状态 qjq_j 生成观测 vkv_k 的概率。

初始状态概率分布,用 π\pi 表示,表示初始时刻下每个状态的概率。

实际上,HMM观测不到系统状态的转移序列,只能观测到系统状态的表现序列。HMM模型可用一个三元组来表示,即 λ=(A,B,π)\lambda=(A,B,\pi)

HMM需满足的条件

  • 状态的转移必须满足马尔可夫性,即假设的马尔可夫链在任意t时刻下的状态都只与前一时刻相关,与其它时刻的状态及观测无关。
  • 观测独立性假设。即观测之间是独立的。
  • 状态必须能够大概被估计。

概率计算

给定HMM模型λ=(A,B,π)\lambda=(A,B,\pi)和当前 TT 时刻的观测序列O=(o1,...oT)O=(o_1,...o_T),计算观测序列出现的概率 P(Oλ)P(O|\lambda)

前向算法

前向概率:给定模型 λ\lambdatt 时刻观测序列为 o1,...,oto_1,...,o_t,且状态为 qiq_i 的概率。其实就是时序上从 t=1t=1 开始往后推

at(i)=P(o1,o2,...,ot,it=qiλ)a_t(i)=P(o_1,o_2,...,o_t,i_t=q_i|\lambda)

观测序列的概率:

t=1:  a1(i)=πibi(o1),i=1,2,...,Nt=1,2,...,T1:  at+1(i)=[j=1Nat(j)aji]bi(ot+1),i=1,2,...,NP(Oλ)=i=1NaT(i)t=1:\; a_1(i)=\pi_ib_i(o_1),i=1,2,...,N \\ t=1,2,...,T-1:\;a_{t+1}(i)=[\sum_{j=1}^N a_t(j) a_{ji}]b_i(o_{t+1}),i=1,2,...,N \\ P(O|\lambda)=\sum_{i=1}^N a_T(i)

at+1(i)a_{t+1}(i) 即当前状态 qiq_it+1t+1 时刻的前向概率。

后向算法

后向概率:同理,其实就是时序上从 t=Tt=T 开始往前推。具体来说,给定模型 λ\lambda,从 t+1t+1 时刻到 TT 时刻观测序列为 ot+1,...,oTo_{t+1},...,o_T,且状态为 qiq_i 的概率。

观测序列的概率:

t=T:  βT(i)=1,i=1,2,...,Nt=T1,T2,...,1:  βt(i)=j=1Naijbj(ot+1)βt+1(j),i=1,2,...,NP(Oλ)=i=1Nπibi(o1)β1(i)t=T:\; \beta_T(i)=1,i=1,2,...,N \\ t=T-1,T-2,...,1:\; \beta_{t}(i)=\sum_{j=1}^N a_{ij} b_j(o_{t+1})\beta_{t+1}(j),i=1,2,...,N \\ P(O|\lambda)=\sum_{i=1}^N \pi_i b_i(o_1) \beta_1(i)

利用前向与后向概率,最终的观测序列的概率定义如下

P(Oλ)=i=1Nj=1Nat(i)aijbj(ot+1)βt+1(j),t=1,...,T1P(O|\lambda)=\sum_{i=1}^N\sum_{j=1}^N a_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j),t=1,...,T-1

给定 λ\lambda 和观测序列 OO,t时刻处于状态 qiq_i 的概率:

P(it=qiO,λ)=P(it=qi,Oλ)P(Oλ)=αt(i)βt(i)j=1Nαt(j)βt(j)P(i_t=q_i|O,\lambda)=\dfrac{P(i_t=q_i,O|\lambda)}{P(O|\lambda)}=\dfrac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^N\alpha_t(j)\beta_t(j)}

给定 λ\lambda 和观测序列 OO,t时刻处于状态 qiq_i 且t+1时刻处于状态 qjq_{j} 的概率:

P(it=qi,it+1=qjO,λ)=P(it=qi,it+1=qj,Oλ)P(Oλ)=αt(i)aijbj(ot+1)βt+1(i)i=1Nj=1Nαt(i)aijbj(ot+1)βt+1(i)P(i_t=q_i,i_{t+1}=q_j|O,\lambda)=\dfrac{P(i_t=q_i,i_{t+1}=q_j,O|\lambda)}{P(O|\lambda)}=\dfrac{\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(i)}{\sum_{i=1}^N\sum_{j=1}^N \alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(i)}

学习

分为两种学习方法。一种是监督学习,一种是无监督学习。

区分的依据是训练数据的类型。如果训练数据是包括观测序列和对应的状态序列,那可以监督学习来实现,也就是极大似然估计法;如果训练数据是仅有观测序列,那则是要用无监督学习的方法来实现,也就是EM算法

学习的目标很显然,就是模型 λ=(A,B,π)\lambda=(A,B,\pi) 中的这三个参数。

基于极大似然估计

已知训练样本中有观测序列 OO 和对应的状态序列 II,即 {(O1,I1),(O2,I2),...,(Os,Is)}\{(O_1,I_1),(O_2,I_2),...,(O_s,I_s)\}ss 对。

运用极大似然法,可以对模型的参数进行估计。

状态转移概率 aija_{ij} 可以如下估计:

a^ij=Aijj=1NAij,i=1,..,N;j=1,...,N\hat{a}_{ij}=\dfrac{A_{ij}}{\sum_{j=1}^N A_{ij}},\qquad i=1,..,N;j=1,...,N

其中的 AijA_{ij} 表示样本中 tt 时刻状态 ii 转移到 t+1t+1 时刻的状态 jj 出现的频数。也就是样本中出现了多少次状态 ii 在下一时刻转移到状态 jj。这个还是比较好理解。

而观测概率 bj(k)b_j(k) 的估计为:

b^j(k)=Bjkk=1MBjk,i=1,..,N;j=1,...,M\hat{b}_j(k)=\dfrac{B_{jk}}{\sum_{k=1}^M B_{jk}},\qquad i=1,..,N;j=1,...,M

其中,BjkB_{jk} 表示样本中状态 qjq_j 生成观测 vkv_k 的频数。

对于初始状态概率 π\pi 的估计比较简单,就是计算所有样本中,每个初始状态出现的频率。

基于EM算法

回顾一下setting,训练样本中只有 SS 个长度为 TT 的观测序列 {O1,...,Os}\{O_1,...,O_s\}时,我们的目标同样是学习模型中的参数。

因为状态序列 II 是未知的,HMM变成一个含隐变量的概率模型:

P(Oλ)=P(OI,λ)P(Iλ)P(O|\lambda)=\sum P(O|I,\lambda)P(I|\lambda)

那问题来了,如何学习这个模型的参数?

答案是EM算法。

我们知道EM算法分为E步和M步。

E步

E就是求期望。首先我们需要初始化一组参数 aij(0),bj(k)(0),πi(0)a^{(0)}_{ij},b_j(k)^{(0)},\pi_i^{(0)}。然后定义了一个Q函数,就是对隐变量 II 求期望的一个函数。

Q(λ,λ^)=IlogP(OI,λ)P(OI,λ^)Q(\lambda,\hat{\lambda})=\sum_I \log P(O|I,\lambda)P(O|I,\hat{\lambda})

λ^\hat{\lambda} 表示估计值。进一步的,

Q(λ,λ^)=IlogP(OI,λ)P(OI,λ^)=Ilogπi1bi1(o1)ai1i2bi2(o2)...aiT1iTbiT(oT)  P(OI,λ^)=Ilogπi1P(OI,λ^)+I(t=1Tlogaitit+1)P(OI,λ^)+I(t=1Tlogbit(ot))P(OI,λ^)\begin{aligned} Q(\lambda,\hat{\lambda})&=\sum_I \log P(O|I,\lambda)P(O|I,\hat{\lambda})\\ &=\sum_I \log \pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}i_{T}}b_{i_T}(o_T) \;P(O|I,\hat{\lambda}) \\ &=\sum_I \log \pi_{i_1}P(O|I,\hat{\lambda})+\sum_I(\sum_{t=1}^T\log a_{i_t i_{t+1}})P(O|I,\hat{\lambda})+\sum_I(\sum_{t=1}^T\log b_{i_t} (o_t))P(O|I,\hat{\lambda}) \end{aligned}

E步就是计算这个函数。

M步

M就是极大化。对上式的三个项分别最大化。

这里是应用拉格朗日乘子法进行推导,过程有点复杂,可以直接参考书上内容,这里就不展开。

最后是可以求解得到参数的估计值:

πi=P(O,i1=iλ^)P(Oλ^)\pi_i=\dfrac{P(O,i_1=i|\hat{\lambda})}{P(O|\hat{\lambda})}
aij=t=1T1P(O,i1=i,it+1=jλ^)t=1T1P(O,i1=iλ^)a_{ij}=\dfrac{\sum_{t=1}^{T-1} P(O,i_1=i,i_{t+1}=j|\hat{\lambda})}{\sum_{t=1}^{T-1} P(O,i_1=i|\hat{\lambda})}
bj(k)=t=1TP(O,i1=jλ^)I(ot=vk)t=1TP(O,i1=jλ^)b_{j}(k)=\dfrac{\sum_{t=1}^{T}P(O,i_1=j|\hat{\lambda})I(o_t=v_k)}{\sum_{t=1}^{T} P(O,i_1=j|\hat{\lambda})}

参考

  1. 李航老师——《统计学习方法》