隐马尔可夫模型(Hidden Markov Model)

背景

隐马尔可夫模型(Hidden Markov Model)是一种常用的统计模型。应用也比较广泛,在时序问题,以及语音识别等问题上有广泛的应用。下面简单介绍一下隐马尔可夫模型。

隐马尔可夫模型是在马尔可夫过程的基础上,加入了隐含状态后的一种结构。这里首先介绍一下什么是马尔可夫过程(Markov Process)

在一个随机过程中,有一个状态变量III,其下一时刻的状态之和之前的状态有关。例如布朗运动,粒子的下一时刻状态之和之前时刻的状态有关。而III变化的过程,也就是马尔科夫链。这个约束,也就是马尔可夫假设。
在这里插入图片描述
在马尔可夫过程中,模型还是很复杂,我们还可以加约束来让模型变得简单一点。我们可以假设,状态变量III的下一时刻状态只和上一时刻的状态有关。这样就得到了齐次马尔可夫模型。即:

p(It∣It−1,It−2,...,I0)=p(It∣It−1),t=1,2,...,Tp(I_t|I_{t-1}, I_{t-2}, ..., I_{0}) = p(I_t|I_{t-1}), t=1, 2, ..., Tp(ItIt1,It2,...,I0)=p(ItIt1),t=1,2,...,T

我们可以看出,马尔可夫模型的描述,只针对某一个变量而言。但是实际生活中,很多变量之间都是相关的。例如你的运动是由肌肉的收缩和舒张来完成的。但是在观察者看来,你只是完成了一个简单的运动。其中,你的运动状态就是观测到的变化量,而肌肉的状态就是隐藏的状态。所以HMM模型的结构如下图所示:
在这里插入图片描述

和马尔可夫过程一样,HMM也有一些约束条件。首先,HMM要满足马尔可夫假设且满足齐次马尔可夫模型,即:

p(It∣It−1,ot−1,...,I0,o0)=p(It∣It−1),t=1,2,...,Tp(I_t|I_{t-1}, o_{t-1}, ..., I_{0}, o_{0}) = p(I_t|I_{t-1}), t=1, 2, ..., Tp(ItIt1,ot1,...,I0,o0)=p(ItIt1),t=1,2,...,T

然后是观测独立性假设,也就是说任意时刻的观测值只依赖于当前时刻的马尔可夫链的状态iti_tit, 即:

p(ot∣It,It−1,ot−1,...,I0,o0)=p(ot∣It),t=1,2,...,Tp(o_t|I_t, I_{t-1}, o_{t-1}, ..., I_{0}, o_{0}) = p(o_t|I_t), t=1, 2, ..., Tp(otIt,It1,ot1,...,I0,o0)=p(otIt),t=1,2,...,T

原理

HMM的结构如上图所示,其中III是状态变量,OOO是观测变量。假设QQQ是所有可能的状态的集合,VVV是所有可能的观测的集合。

Q={q1,q2,...,qN}Q = \{ q_1,q_2,...,q_N \}Q={q1,q2,...,qN}

V={v1,v2,...,vM}V = \{v_1,v_2,...,v_M \}V={v1,v2,...,vM}

即可能的状态有N种, 可能的观测值有M种,两者不一定会相等。那么在一次试验中,观测到的值为OOO,每个观测值会唯一对应一个状态值,因为试验已经结束了,假设状态序列为III,那么OOOIII的长度一样,假设为T,那么: O={O1,O2,...,OT}O = \{ O_1,O_2,...,O_T \}O={O1,O2,...,OT}

I={I1,I2,...,IT}I = \{ I_1,I_2,...,I_T \}I={I1,I2,...,IT}

ttt时刻会有一个状态值,那么下一个时刻的状态值会与上一时刻相关,当然也可以是不相关的,由此给出状态矩阵AAA的定义:

A=[aij]A=[a_{ij}]A=[aij]

aija_{ij}aij表示当前时刻ttt状态为qiq_iqi的情况下,下一时刻的状态为qjq_jqj的概率,这里i,j=1,2,...Ni,j=1,2,...Ni,j=1,2,...N,用数学形式表示,即: 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)

有了状态转移矩阵后,我们并不能直接估计下一时刻的状态,因为状态在整个试验过程中是隐藏的,试验中只能得到观测值的相关信息,所以还要有观测值和状态值之间的转换矩阵,即当观测到某个值时,其对应于各个状态的概率分别是多少。假设观测概率矩阵是BBB,给出BBB的定义:

B=[bjk]B=[b_{jk}]B=[bjk]

bjkb_{jk}bjk表示当前时刻ttt状态值为qjq_jqj的情况下,观测值为vkv_kvk的概率。所以有k=1,2,...Mk=1,2,...Mk=1,2,...Mj=1,2,...,Nj=1,2,...,Nj=1,2,...,N,用数学形式表示,即:

bjk=P(ot=vk∣it=qj)b_{jk}=P(o_t=v_k | i_t=q_j)bjk=P(ot=vkit=qj)

确定了观测值和状态值之间的转换概率,当前时刻和下一时刻之间的状态转换概率,那么我们还需要确定可能的观测值在试验刚开始时被选中的概率,假设为π\piπ,给出π\piπ的定义:

π=[πi]\pi=[\pi_{i}]π=[πi]

其中πi\pi_{i}πi表示观测值qiq_iqi在刚开始被选中的概率,那么,i=1,2,...,Ni=1,2,...,Ni=1,2,...,N,用数学的形式表示,即:

πi=P(I1=qi)\pi_i=P(I_1=q_i)πi=P(I1=qi)

到这里,整个HMM模型中的主要参数已经全部介绍了,由介绍可知,根据π,A,B\pi,A,Bπ,A,B可以让一个HMM模型顺利工作。可以求出在任意状态序列对应的概率P(O∣λ)P(O|\lambda)P(Oλ)。所以,我们也用这些参数来表示一个HMM模型,即: λ={A,B,π}\lambda=\{ A,B,\pi \}λ={A,B,π}

常见问题

以上介绍了HMM的基本概念,在实际应用中,主要有以下几个基本问题:

  1. 已知模型λ\lambdaλ以及观测序列OOO,计算在这种模型下出现这种观测序列的概率P(O∣λ)P(O|\lambda)P(Oλ)
  2. 已知观测序列OOO,但是不知道模型λ\lambdaλ,计算模型λ\lambdaλ,使得当前观测序列产生的概率P(O∣λ)P(O|\lambda)P(Oλ)最大
  3. 给定模型λ\lambdaλ和观测序列OOO,计算最有可能产生这一观测序列的状态序列III,即使得P(I∣O,λ)最大的P(I|O,\lambda)最大的P(IO,λ)III

以上就是最常见的HMM问题,主要涉及到模型中各个参数计算的问题。

在问题1中,我们需要计算观测序列出现的概率,主要可以用来判断出现的这一观测序列是否常见,如果计算得到的概率很低,但是在实际观测中却经常出现,那么就需要检查系统中是否出现了外部干扰。

在问题2中,我们需要计算模型的参数。主要是用于模型的学习和自适应参数调整的问题。模型是不确定的,但是根据给定的观测序列,我们需要找到一个最合适的模型,来保证出现这一观测序列的概率最大。有点类似回归求最优解或者神经网络拟合的思想。

在问题3中,我们需要通过观测序列和模型,来估计隐藏状态。这个主要适用于一些解码问题。通过观测值求解隐藏值。

针对以上的问题,分别有对应的解决办法。下面会介绍最常见的一些解法。当然,由于HMM中,观测变量和隐藏状态可能的取值是有限的。所以其实用穷举法也可以算,只是计算量会很大。

解决办法

问题1

已知模型和观测序列,要计算出现这种观测序列的概率P(O∣λ)P(O|\lambda)P(Oλ)

这个问题有两种解法,前向和后向算法。两种方法比较类似。

  1. 前向算法

首先,我们定义一个概率:

pt(i)=P(o1,o2,...,ot,It=qi)p_t(i) = P(o_1, o_2, ..., o_t, I_t=q_i)pt(i)=P(o1,o2,...,ot,It=qi)

pt(i)p_t(i)pt(i)表示观测序列为o0,o1,...,ot{o_0, o_1, ...,o_t}o0,o1,...,ot,同时It=qiI_t=q_iIt=qi的概率。所以我们有以下递推公式:

pt(i)=(∑j=1Npt−1(j)aji)bikp_{t}(i) = (\sum_{j=1}^{N}p_{t-1}(j)a_{ji})b_{ik}pt(i)=(j=1Npt1(j)aji)bik

同时,有ot=vko_{t}=v_{k}ot=vk。在上面的公式中,∑j=0Npt−1(j)aji\sum_{j=0}^{N}p_{t-1}(j)a_{ji}j=0Npt1(j)aji表示前t−1t-1t1个输出为o1,o2,...,ot−1{o_1, o_2, ..., o_{t-1}}o1,o2,...,ot1,且第ttt个隐藏状态为qiq_iqi的概率。因为t−1t-1t1时刻的状态是任何值都可以,只需要乘以对应的转移概率,就可以计算出ttt时刻状态为qiq_iqi的概率了。

然后在初始状态时,有:

p1(i)=πibik,o1=vkp_1(i) = \pi_ib_{ik}, o_1=v_kp1(i)=πibik,o1=vk

所以最终得到的概率为:

P(O∣λ)=∑i=1NpT(i)P(O|\lambda) = \sum_{i=1}^{N}p_T(i)P(Oλ)=i=1NpT(i)

也就是说,在TTT时刻,观测序列为o1,o2,...,oT{o_1, o_2, ..., o_T}o1,o2,...,oT,且模型为λ\lambdaλ的概率为观测序列为o1,o2,...,oT{o_1, o_2, ..., o_T}o1,o2,...,oTTTT时刻状态值为q1,q2,...,qN{q_1, q_2, ..., q_N}q1,q2,...,qN的所有值的和。

  1. 后向算法

后向算法和前向算法比较类似,都是通过递推的方式逐步计算观测序列的概率。不同的地方是,后向算法是从后往前算,前向算法是从前往后算。

假设观测序列的长度为TTT,并定义从t+1t+1t+1时刻到TTT时刻的序列为ot+1,ot+2,...,oT{o_{t+1}, o_{t+2}, ..., o_T}ot+1,ot+2,...,oT,且ttt时刻的隐藏状态为qiq_iqi的概率为:

pt(i)=P(ot+1,ot+2,...,oT,It=qi∣λ)p_t(i) = P(o_{t+1}, o_{t+2}, ..., o_T, I_t=q_i|\lambda)pt(i)=P(ot+1,ot+2,...,oT,It=qiλ)

对于后向算法,初始状态应该是pT(i)p_T(i)pT(i),表示的是观测序列为oT+1{o_{T+1}}oT+1时,且隐藏状态为qiq_iqi的概率,但是因为已经知道了oTo_ToT的状态了,且oT+1o_{T+1}oT+1并没有发生,所以这里其实给任意值都可以。这个值其实主要表示的是T+1T+1T+1时刻和TTT时刻的关系,但是这个关系并不知道,所以给任意值都是可以的。表示这个关系可以是任意的。

然后和前向算法类似,我们可以计算后向的递推公式:

pt(i)=∑j=1Naijbjkpt+1(j)p_t(i) = \sum_{j=1}^{N}a_{ij}b_{jk}p_{t+1}(j)pt(i)=j=1Naijbjkpt+1(j)

其中有,ot+1=vko_{t+1} = v_kot+1=vk

∑j=1Naijpt+1(j)\sum_{j=1}^{N}a_{ij}p_{t+1}(j)j=1Naijpt+1(j)表示t+2t+2t+2时刻状态为qjq_jqjttt时刻的状态为qiq_iqi的所有可能的t+2t+2t+2时刻的值的和,所以aijbjkpt+1(j)a_{ij}b_{jk}p_{t+1}(j)aijbjkpt+1(j)表示的是,t+1t+1t+1时刻的观测值为ot+1o_{t+1}ot+1,也就是vkv_kvk,同时t+1t+1t+1时刻的状态值为qjq_jqj的概率。求和之后就是,t+1t+1t+1TTT时刻的观测值为ot+1,ot+2,...,oT{o_{t+1}, o_{t+2}, ..., o_{T}}ot+1,ot+2,...,oT,且$

t时刻的隐藏状态为时刻的隐藏状态为qiq_iqi的概率。也就是pt(i)p_t(i)pt(i)

所以可以得到,最终计算的概率为:

P(O∣λ)=∑i=1Nπibi(o1)p1(i)P(O|\lambda) = \sum_{i=1}^{N}\pi_{i}b_i(o_1)p_1(i)P(Oλ)=i=1Nπibi(o1)p1(i)

其中,p1(i)p_1(i)p1(i)表示的是观测序列为o2,o3,...,oT{o_2, o_3, ..., o_T}o2,o3,...,oT,$ b_i(o_1)p_1(i)表示观测序列为表示观测序列为{o_1, o_2, …, o_T}。所以。所以\pi_ib_i(o_i)p_1(i)表示观测序列为表示观测序列为o_1, o_2, …, o_T,且, 且,I_1=q_i的概率,对所有的的概率,对所有的I_1={q_1, q_2, …, q_N}求和,就是观测序列为求和,就是观测序列为{o_1, o_2, …, o_N}$的概率

以上就是两种计算观测序列概率的算法。主要的思想都是通过递推计算。

问题2

已知观测序列OOO, 计算使得P(O∣λ)P(O|\lambda)P(Oλ)最大的模型参数λ\lambdaλ

这个问题有点类似于回归问题中的拉格朗日极值问题,但是由于涉及到隐藏变量的极大似然估计,所以这里并不能用求导的方法来计算。广泛使用的一种计算方法是EM(Expectation Maximum)算法。关于EM算法,会在后续的文章中介绍,这里暂且不写。

问题3

已知观测序列OOO和模型参数λ\lambdaλ,求可能产生这一观测序列的隐藏状态III, 使得P(I∣λ)P(I|\lambda)P(Iλ)最大

这个问题类似于常见的解码问题。对于HMM模型下的解码问题,一般是用动态规划的方法来求解的。因为这样计算量会降低。常用的HMM解码问题的解决办法是维特比算法(Viterbi Algorithm)。这个也会在后续的文章中介绍。这里暂且不写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值