隐马尔可夫模型(HMM)

隐马尔可夫模型(HMM)



白话HMM

  HMM定义:隐马尔科夫模型关于时序的概率模型,描述由一个隐藏的马尔科夫链随机生成不可观测的状态随机序列(状态序列),再由各个状态生成一个观测而产生观测随机序列(观测序列)的过程。序列的每一个位置可以看成一个时刻


HMM基本模型
图1-HMM基本模型

  什么是状态?什么是观测?
  举一个简单的例子,假设有两个相同的盒子A,B,A中有红球:白球=1:1,B中有红球:白球=3:1,我们随机选择一个盒子,再从该盒子中拿出一个球,我们发现我们拿出的球是一个红球。如果我们只知道得到的球是红球,我们可以判断它是从哪一个盒子中拿出的吗?不知道!这时红球就对应一个观测(  o1 ),而它对应的盒子则是一个不可观测的状态(  i1 )。
  现在我们接着上一个例子,我们规定:如果是第一次选择盒子(如  i1 ),那么选择两个盒子的概率相等;如果我们当前选择的盒子是A,那么下一次我们就以1/2的概率选择A,1/2的概率选择B;如果我们当前的盒子是B,那么下一次我们就以2/3的概率选择A,1/3的概率选择B。
  按照这种规则进行T次,我们是不是会得到一个长度为T的状态序列?每次从选出的盒子里面再随机拿出一个球,我们会不会得到一个长度为T的观测序列
  我们选择盒子的过程是按照先后顺序来的,所以这个过程是时序相关的。到现在为止,我们已经对HMM定义有了了解。
  现在我们来了解该模型的参数构成:首先我们第一次选择盒子,选择两个盒子的概率都是1/2,这个概率就是初始状态的概率 π ;如果不是第一次选择盒子,那么我们选择下一个盒子的概率是依据当前盒子种类确定的,这个概率是状态转移概率 a ;我们从选出的盒子中拿出每种球的概率就是观测概率b。所有的 a 可以构成状态转移概率矩阵A,所有的 b 可以构成观测概率矩阵B
  隐马尔科夫模型 λ 就是由这三个参数确定的,即:

λ=(A,B,π)
  隐马尔科夫模型怎么 使用以及有什么 作用呢?
  1. 概率计算问题:给定模型 λ 和观测序列 O ,计算在该模型下观测序列O出现的概率 P(O|λ)
  2. 学习问题:已知观测序列 O ,估计模型λ,使得 P(O|λ) 达到最大。当人工指定模型参数不可行时,用于根据训练样本学得最优的模型参数。
  3. 预测问题:已知模型 λ 和观测序列 O ,求使得P(O|I)最大的状态序列。在语音识别任务中,观测值为语音信号,隐藏状态为文字;在输入法中类似。

  现在我们是不是对隐马尔科夫模型有了一个直观的认识?是不是感觉很简单?如果你只是想要了解HMM是什么,怎么使用的,用来干什么的,现在可以回去了emmm…


深入HMM

前言

三个要素

  隐马尔可夫模型由初始概率分布,状态转移概率分布以及观测概率分布确定。
  设Q是所有可能的状态的集合, V 是所有可能的观测的集合,即:

Q={q1,q2,...,qN}, V={v1,v2,...,vM}
  其中,N是可能的状态数,M是可能的观测数。
   I 是长度为T的状态序列, O 是对应的观测序列,即:
I=(i1,i2,...,iT), O=(o1,o2,...,oT)
   A 状态转移概率矩阵
A=[aij]N×N
  其中,
aij=P(it+1=qj|it=qi),i=1,2,...,N; j=1,2,...,N
  是在时刻 t 处于状态qi的条件下在时刻 t+1 转移到状态 qj 的概率。

   B 观测概率矩阵

B=[bj(k)]N×M
  其中,

bj(k)=P(ot=vk|it=qj),k=1,2,...,N; j=1,2,...,N

   π 初始状态概率向量

π=(πi)
  其中,
πi=P(i1=qi),i=1,2,...,N


两个假设
  1. 隐马尔科夫链在任意时刻 t 的状态只依赖于其前一个时刻的状态,与其他时刻的状态及观测无关,也与时刻t无关。
    P(it|it1,ot1,...,i1,o1),t=1,2,...,T
  2. 任意时刻的观测只依赖于该时刻隐马尔科夫链的状态,与其他观测及状态无关。
    P(ot|iT,oT,it1,ot1,...,it+1,ot+1,it,it1,ot1,...,i1,o1)=P(ot|it)

三个基本问题
  1. 概率计算问题:给定模型 λ=(A,B,π) 和观测序列 O=(o1,o2,...,oT) ,计算在该模型下观测序列 O 出现的概率P(O|λ)
  2. 学习问题:已知观测序列 O=(o1,o2,...,oT) ,估计模型 λ=(A,B,π) 参数,使得 P(O|λ) 最大。
  3. 预测问题:已知模型 λ=(A,B,π) 和观测序列 O=(o1,o2,...,oT) ,求使得P(O|I)最大的状态序列 I=(i1,i2,...,iT)

  在继续之前,让我们以另外一种角度来看一下HMM:


HMM新视角
图2-换个角度看HMM

  看着上面的图,我们是不是想到了全连接神经网络多段图?这个图代表什么含义呢?这个图是HMM各种概率计算的核心。
  该图理解如下:假设 t 时刻状态为qi,则 t+1 时刻我们有N中选择方式 qj, j=1,2,...,N ,每一种选择对应一个状态转移概率 Ai,j(=aij) ,所以上图绿色框框中表示从第一层(时刻为 1 )到最后一层(时刻为T)所有可能的状态序列每一条路径表示一个状态序列如图中黑色线表示路径为  q2q1qNq3... 每一条边表示一个状态转移概率
  针对绿色框框中的每一种可能的状态序列,我们都会产生一个对应的观测序列 O=(o1,o2,...,oT), oiV


1. 概率计算算法

直接计算法

  问题:给定模型 λ=(A,B,π) 和观测序列 O=(o1,o2,...,oT) ,计算观测序列 O 出现的概率。
  直接计算方法是列举所有可能的长度为T状态序列 I=(i1,i2,...,iT) ,求各个状态序列 I 与观测序列O联合分布概率 P(O,I|λ) ,然后对所有可能的状态序列求和。
  状态序列 I=(i1,i2,...,iT) 的概率是

P(I|λ)=πi1ai1i2ai2i3...aiT1iT
  给定状态序列 I=(i1,i2,...,iT) ,观测序列 O=(o1,o2,...,oT) 的概率是 P(O|I,λ)
P(O|I,λ)=bi1(o1)bi2(o2)...biT(oT)

  则观测序列 O 出现的概率是:
P(O|λ)=IP(O,I|λ)=IP(O|I,λ)P(I|λ)
=Iπi1ai1i2ai2i3...aiT1iTbi1(o1)bi2(o2)...biT(oT)(1)
  上式计算复杂度是 O(TNT) ,不可行。


前向算法

  为了描述方便,首先进行前向概率定义:给定隐马尔科夫模型 λ ,定义到时刻 t 部分观测序列为o1,o2,...,ot且状态为 qi 的概率为前向概率,记做:

αt(i)=P(o1,o2,...,ot,it=qi|λ)(2)
  我们可以递推求得前向概率 αt 及观测序列概率 P(O|λ)
  具体怎么求呢?看图:


前向算法
图3-前向算法

  我们假设已经知道 t 时刻状态为qj的概率,那么 t+1 时刻为状态 qi 的概率是不是可以根据状态转移概率得到?( aji )
  在 t+1 时刻的状态 qi 可由 t 时刻中的N个状态(q1,q2,...,qN)中的一个状态得到,我们对所有的可能性求和即得到 t+1 时刻状态为 qi 的概率:

P(it+1=qi|λ)=j=1NP(it=qj|λ)aji
  如果再考虑产生观测 ot+1 的概率,那么进一步会得到:
αt+1(i)=[j=1Nαt(j)aji]bi(ot+1)(3)

  因为初值为 α1(i)=πibi(o1) ,那么我们就可以从前往后递推得到观测序列 O 出现的概率:
P(O|λ)=i=1NαT(i)(4)


后向算法

  首先给出后向概率定义:给定隐马尔可夫模型 λ ,定义在时刻 t 状态为qi的条件下,从 t+1 T 的部分观测序列为ot+1,ot+2,...,oT的概率为后向概率,记做:

βt(i)=P(ot+1,ot+2,...,oT|it=qi,λ)(5)
  可以用递推的方法求得后向概率 βt(i) 以及观测序列概率 P(O|λ)
  具体怎么求?看图:


后向算法
图4-后向算法

  递推公式怎么得到呢?首先我们知道 t+1 时刻往后的状态和观测出现的概率,那么从 t 时刻往后状态和观测出现的概率只需要把从t时刻到 t+1 时刻考虑进去即可。
  假设我们现在在 qi ,那么我们有 aij 的概率转移到下一时刻的状态 qj ,而当我们处于状态 qj 时,我们可以以概率 βt+1(j) 来确定观测序列 ot+2,ot+3,...,oT 出现的概率,那我们就可以对所有情况进行一个累加来得到我们在状态 qi 的条件下得到观测序列 ot+1,ot+2,...,oT 的概率。
  我们会得到:

βt(i)=j=1Naijbj(ot+1)βt+1(j)(6)
  因为我们知道初始概率 βT(i)=1,i=1,2,...,N 由后往前递推,我们将会得到观测序列 O 出现的概率:
P(O|λ)=i=1Nπibi(o1)β1(i)(7)


小结

  利用前向概率和后向概率定义可以将观测序列概率 P(O|λ) 写成:

P(O|λ)=i=1Nj=1Nαt(i)aijbj(ot+1)βt+1(j), t=1,2,...,T1(8)
  当 t=1 t=T1 时分别对应式(4)和式(7)。


2. 学习算法

监督学习算法

  假定已知训练数据包含 S 个长度的序观测序列和对应的状态序列{(O1,I1),(O2,I2),...,(OS,IS)},那么可以利用极大似然估计法来估计隐马尔可夫模型的参数。
  1. 设样本中时刻 t 处于状态i时刻 t+1 处于状态 j 的频数为Aij,则状态转移概率 aij 的估计是:

a^ij=AijNj=1Aij, i=1,2,...,N; j=1,2,...,N(9)

  2. 设样本中状态为 j 并且观测为k的频数为 Bjk ,那么状态为 j 观测为k的概率 bj(k) 的估计是:
b^j(k)=BjkMk=1Bjk, j=1,2,...,N; k=1,2,...,M(10)

  3. 初始状态概率 πi 的估计 π^i S 个样本中初始状态为qi的频率。


无监督-(EM算法求解)

  假设给定训练数据只包含 S 个长度为T的观测序列 {O1,O2,...,OS} 而没有对应的状态序列,目标是学习隐马尔可夫模型的参数 λ=(A,B,π) ,我们将观测序列数据看做观测数据 O ,状态序列数据看做不可观测隐数据I,隐马尔可夫模型事实上是一个含有隐变量的概率模型

P(O|λ)=IP(O|I,λ)P(I|λ)
  参数学习可以通过EM算法实现:
  1. 确定完全数据的对数似然函数 logP(O,I|λ)
  2. EM算法的E步:求 Q 函数Q(λ,λ¯)
Q(λ,λ¯)=IlogP(O,I|λ)P(I|O,λ¯)=IlogP(O,I|λ)P(O,I|λ¯)P(O|λ¯)
  为了书写方便,我们省去对 λ 而言的常数项因子 1/P(O|λ¯) ,即:
Q(λ,λ¯)=IlogP(O,I|λ)P(O,I|λ¯)(11)
  其中, λ¯ 是隐马尔可夫模型参数的当前估计值, λ 是要极大化的隐马尔科夫模型参数。
P(O,I|λ)=πi1ai1i2ai2i3...aiT1iTbi1(o1)bi2(o2)...biT(oT)
  函数 Q 可以写成:
Q(λ,λ¯)=IlogπiP(O,I|λ¯)+I[t=1T1logait,it+1]P(O,I|λ¯)+I[t=1Tlogbit(ot)]P(O,I|λ¯)
  3. EM算法的M步极大化 Q 函数求解模型参数A,B,π。这里不再详述求解过程。


3. 预测算法

  给定观测序列 O 以及隐马尔可夫模型参数λ=(A,B,π),如何确定一个最优的观测序列?(对应图2中的一条路径)
  学过算法的一般都知道多段图求解最短路径动态规划求解方法,只不过在求最短路径的时候路径的计算是不同段之间的边长度相加,而在这里则是不同段之间的边代表的状态转移概率相乘。
  假定在时刻 t 状态为i的所有单个路径 (i1,i2,...,it) 中概率最大值为 δt(i) ,则动态规划求解的递推关系是:

δt+1(i)=max1jN[δt(i)aji]bi(ot+1)

  然后我们在递推的时候对最优路径进行记录。当然这就是鼎鼎有名的维特比算法


参考

  李航 《统计学习方法》
  周志华 《机器学习》
  Kevin P. Murphy 《Machine Learning A Probabilistic Persperctive》

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值