隐马尔科夫模型(HMM)

隐马尔科夫模型(HMM, Hidden Markov Model)是一种经典的模型,可用于标注问题,在语音识别、NLP、生物信息、模式识别等领域被实践证明是有效的算法。 
HMM是关于时序的概率模型,描述由一个隐藏的马尔科夫链生成不可观测的状态随机序列,再由各个状态生成观测随机序列的过程。 

模型简介


我们现在来假设一种情况,一个文明在某个时期有三种状态,黑暗时期,正常时期与黄金时期。在我们接触到文明的时候,我们不能够直接得知他的状态,但是可以观测到这个文明的科技水平。而通过我们的先验知识,状态与科技水平是有联系的不相互独立的,我们假设由于先验知识我们知道一个文明在黄金时期有3/4的概率科技水平高,1/6的概率科技水平中等,1/12的概率科技水平低。在正常时期有1/4的概率科技水平高,1/2的概率科技水平中等,1/4的概率科技水平低.在黑暗时期与黄金时期相反。而一个文明下个时期的状态也与这个时期的状态也有联系不是独立的。这样的一个模型我们便称之为隐马尔科夫模型,图示如下:

它是一种特别的贝叶斯网络,z代表隐马尔科夫模型随机生成的状态随机序列,称为状态序列(文明某个时期的状态)

每个状态生成一个观测,由此产生的观测随机序列,称为观测序列(科技水平)。序列的每个位置可看做是一个时刻。 

通过之前贝叶斯网络一些条件独立的判定,我们可以发现,在z1,z2不可观察的前提下,x1和z2不独立(tail-to-tail),x1和x2不独立(tail-to-tail和head-to-tail)。

HMM由初始概率分布T、状态转移概率分布A以及观测概率分布B确定。 

\lambda =(A,B,\pi)

Q是所有可能的状态的集合,N是可能的状态数 (文明的三种状态)

Q=\left \{ q_{1},q_{2},...q_{N} \right \}

V是所有可能的观测的集合,M是可能的观测数 (文明科技水平的三种情况)

V=\left \{ v_{1},v_{2},...v_{M} \right \}

I是长度为T的状态序列(图中z),O是对应的观测序列(图中x)

I=\left \{ i_{1},i_{2},...i_{T} \right \}

O=\left \{ o_{1},o_{2},...o_{T} \right \}

A是状态转移概率矩阵(一个文明下个时期的状态也与这个时期的状态的概率矩阵)

A=[a_{ij}]_{N*N}

a_{ij}=P(i_{t+1}=q_{j}|i_{t}=q_{i})

B是观测概率矩件(一个文明状态与科技水平的概率矩阵)

B=[b_{ik}]_{N*M}

b_{ij}=P(o_{t}=v_{k}|i_{t}=q_{i})



π是初始状态概率向量(第一个时期的状态概率向量)\pi=(\pi_{i})\begin{matrix} & \pi_{i}=P(i_{1}=q_{i}) \end{matrix}

HMM由初始概率分布π(向量)、状态转移概率分布A(矩阵)以及观测概率分布B(矩阵)确定。π和A决定状态序列,B决定观测序列。因此,HMM可以用三元符号表示,称为HMM的三要素:\lambda =(A,B,\pi)

通过模型我们可知在上一个状态已知的情况下,这一次的状态仅取决于上一个状态。已知这一次的状态时,这一次的观测仅取决于这一次的状态。

问题描述

一般来说,我们对于这个模型有三种类型的问题:

概率计算问题:前向-后向算法——动态规划 

给定模型λ=(A,B,T)和观测序列O,计算模型λ下观测序列O出现的概率P(O|λ)


学习问题:Baum-Welch算法(状态未知)———EM

已知观测序列O,估计模型λ=(A,B,T)的参数,使得在该模型下观测序列P(O|λ)最大

预测问题:Viterbi算法—动态规划

解码问题:已知模型λ=(A,B,T)和观测序列O求给定观测序列条件概率P(I|O,λ)最大的状态序列I 

解决方法

首先是概率计算问题,一般由三种方法:直接算法,前向算法与后向算法

直接算法即暴力计算:

按照概率公式,列举所有可能的长度为T的状态序列I,求各个状态序列I与观测序列О的联合概率P(O,I|λ),然后对所有可能的状态序列求和,从而得到P(O|λ) 

前向与后向算法如图所示:

前向算法

定义:给定λ,定义到时刻t部分观测序列为o1,o2...ot且状态为qi的概率称为前向概率,记做:

\alpha_{t} (i)=P(o_{1},o_{2}...o_{t},i_{i}=q_{i}|\lambda )

可以递推计算前向概率α,P(O|λ):

初始:\alpha_{1}(i)=\pi_{i}b_{io_{1}}

递推:对于t=1,2...T-1:\alpha_{t+1}(i)=(\sum_{j=1}^{N}\alpha _{t}(j)a _{ji})b_{io_{t+1}}

最终P(O|\lambda )=\sum_{i=1}^{N}\alpha _{T}(i)

后向算法

给定λ,定义到时刻t状态为qi的前提下,从t+1到T的部分观测序列为ot+1,ot+2·.. OT的概率为后向概率,记做:
\beta_{t} (i)=P(o_{t+1},o_{t+2}...o_{T}|i_{i}=q_{i},\lambda )

可以递推计算后向概率\beta_{t} (i)及观测序列概率P(O|λ) 。具体过程类似于前向算法。

为了计算在时刻t状态为qi条件下时刻t+1之后的观测序列为ot+1,ot+2...OT的后向概率\beta_{t} (i),只需要考虑在时刻t+1所有可能的N个状态qi的转移概率(a_{ij}项),以及在此状态下的观测ot+1的观测概率(b_{to_{t+1}}项),然后考虑状态qj之后的观测序列的后向概率\beta_{t+1} (i)

预测问题

根据前向后向概率的定义我们有:

P(i_{t}=q_{i},O|\lambda ) =P(O|i_{t}=q_{i},\lambda )p(i_{t}=q_{i}|\lambda ) =P(o_{1},o_{2},...o_{t}|i_{t}=q_{i},\lambda )P(o_{t+1},o_{t+2},...o_{T}|i_{t}=q_{i},\lambda )p(i_{t}=q_{i}|\lambda )=P(o_{1},o_{2},...o_{t},i_{t}=q_{i}|,\lambda )P(o_{t+1},o_{t+2},...o_{T}|i_{t}=q_{i},\lambda )=\alpha _{t}(i)\beta _{t}(i)

然后求给定模型入和观测O,在时刻t处于状态qi的概率。

\gamma _{t}(i)=P(i_{t}=q_{i}|O,\lambda )

根据上面的式子我们可得:

\gamma _{t}(i)=P(i_{t}=q_{i}|O,\lambda )=\frac{P(i_{t}=q_{i},O|\lambda )}{P(O|\lambda )}=\frac{\alpha _{t}(i)\beta _{t}(i)}{\sum_{j=1}^{N}\alpha _{t}(j)\beta _{t}(j)}

上面是单个状态的概率,现在我们推导两个状态:

求给定模型入和观测O,在时刻t处于状态qi并且时刻t+1处于状态qj的概率。 

\varepsilon _{t}(i,j)=P(i_{t}=q_{i},i_{t+1}=q_{j}|O,\lambda )=\frac{P(i_{t}=q_{i},i_{t+1}=q_{j},O|\lambda )}{P(O|\lambda )}=\frac{P(i_{t}=q_{i},i_{t+1}=q_{j},O|\lambda )}{\sum_{k=1}^{N}\sum_{m=1}^{N}P(i_{t}=q_{k},i_{t+1}=q_{m},O|\lambda )}

P(i_{t}=q_{i},i_{t+1}=q_{j},O|\lambda )=\alpha _{t}(i)a_{ij}b_{jo_{t+1}}\beta _{t+1}(i)

很显然这样的方法会越来越麻烦,所以我们采用Viterbi算法,即动态规划解HMM预测问题,用DP求概率最大的路径(最优路径),这是一条路径对应一个状态序列。 

初始计算\gamma _{1}(i),并保留最大的i。再以此状态为基础计算下一个时期的最大概率。本质上也为贪心算法。
 

学习算法

若训练数据包括观测序列和状态序列,则HMM的学习非常简单,是监督学习。

假设已给定训练数据包含S个长度相同的观测序列和对应的状态序列,那么可以直接利用Bernoulli大数定理的结论“频率的极限是概率”,给出HMM的参数估计。 

初始概率:\hat{\pi}_{i}=\frac{|q_{i}|}{\sum_{i}|q_{i}|}

转移概率\hat{a}_{ij}=\frac{|q_{ij}|}{\sum_{j=1}^{N}|q_{ij}|}

观测概率\hat{b}_{ik}=\frac{|s_{ik}|}{\sum_{k=1}^{M}|s_{ik}|}

若训练数据只有观测序列,则HMM的学习需要使用EM算法,是非监督学习。

所有观测数据写成O={o_{1},o_{2}...o_{T}},所有隐数据写成I={i_{1},i_{2}...i_{T}},完全数据是(O,I),完全数据的对数似然函数是lnP(O,I|λ) 

根据EM算法的流程:


假设\bar{\lambda }是HMM参数的当前估计值,λ为待求的参数。 

Q(\lambda,\bar{\lambda })=\sum_{I}(lnP(O,I| \lambda ))P(I|O ,\bar{\lambda } )=\sum_{I}(lnP(O,I| \lambda ))\frac{P(O,I| \bar{\lambda } )}{P(O| \bar{\lambda } )}\propto \sum_{I}(lnP(O,I| \lambda ))P(O,I| \bar{\lambda } )

根据P(O,I| \lambda )=P(O|I, \lambda )P(I|\lambda )=\pi_{i_{1}}b_{i_{1}o_{1}}a_{i_{1}i_{2}}b_{i_{2}o_{2}}...a_{i_{T-1}i_{T}}b_{i_{T}o_{T}}.

Q(\lambda,\bar{\lambda })\propto \sum_{I}(lnP(O,I| \lambda ))P(O,I| \bar{\lambda } )=\sum_{I}ln\pi_{i_{1}}P(O,I| \bar{\lambda } )+\sum_{I}(\sum_{t=1}^{T-1}lna_{i_{t}i_{t+1}})P(O,I| \bar{\lambda } )+\sum_{I}(\sum_{t=1}^{T}lnb_{i_{t}o_{t}})P(O,I| \bar{\lambda } )

我们则要极大化Q,求得A,B,π。即对于式子的三项都做求和,具体则是用拉格朗日乘子法。在此不做具体推导了,感兴趣的自行推导或者在wiki上查阅过程。

隐马尔科夫模型的应用范围十分广阔

可以实现中文分词:根据语料训练,对新文件分词或者编码转换 

当标记值为离散分布,观测值为连续分布时为高斯分布隐马尔科夫模型 

股价数据提取隐特征 

数据处理的应用:电流强度的整流(GMHMM)

等等,生活中也有各种各样的情况可以套用到此模型上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值