天天看点

隐马尔科夫模型HMM-过程了解

  HMM模型是个经典模型,处理的是序列的判决问题。本文大体讲解一下HMM的过程,而对其原理不作深入探究。

一阶马尔科夫模型

  判断一个状态 vi 到另一个状态 vj 的转变。

  比如今天的天气状态是“晴天”,那明天的天气状态是?,我们推测极大的可能也是“晴天”。这就是一个简单的一阶马尔科夫模型的应用。

  一阶马尔科夫假设:每个状态只依赖于前一个状态。(不是依赖于其前几个状态)

  前后关系用时间 t 和t+1表示,则前后状态的转移概率为: P(vj(t+1)|vi(t))=aij 。

  表示在当前时刻 t 时,状态vi向下一时刻 t+1 状态 vj 的转移概率。

  

一阶马尔科夫图示(w就是s)

  

隐马尔科夫模型HMM-过程了解

一阶隐马尔科夫模型

  含有隐藏状态 s(t) ,目标仍然是判断可视状态 v(t) 的转变。

  我们若是只能观测到某一状态,但是可观测状态是由隐含的某一状态决定的,那么就需要隐马尔科夫模型出马了。

  独立性假设:可视状态只取决于当前隐藏状态。

   P(vk(t)|sj(t))=bjk

  齐次马尔科夫假设:每个状态只依赖于前一个状态。

   P(vj(t+1)|vi(t))=aij

  归一化约束: ∑jaij=1 和 ∑kbkj=1

  

一阶隐马尔科夫的图示(w就是s)

  

隐马尔科夫模型HMM-过程了解

  下面解决三个关键问题:

   估值:计算可视序列 VT=v1,v2,v3,...,vn 出现的概率。根据转移概率 aij 和 bjk 。

   解码:根据可视序列 VT=v1,v2,v3,...,vn 及转移概率 aij 和 bjk ,计算最可能出现的隐状态序列 ST=s1,s2,s3,...,sn 。

   学习:由一组样本序列确定状态转移概率 aij 和 bjk 及隐状态的先验概率 πi 。

HMM估值

  已知HMM模型( aij 和 bjk ),如何求解产生可视序列 VT 的概率。

  可视序列的产生概率如下:

   P(VT)=∑rmaxr=1P(VT|STr)P(STr)

  其中 rmax 为 c 个隐状态时的可能隐序列种数。

  因为隐序列的当前状态仅仅取决于前一状态,故:

  P(ST)=∏Tt=1P(st|st−1)

  因为当前可视状态仅仅由当前隐状态决定,故:

   P(VT|ST)=P(v1|ST)P(v2|ST)∗...∗P(vT|ST) 可视状态间互不影响。

   P(VT|ST)=P(v1|s1)P(v2|s2)∗...∗P(vT|sT)=∏Tt=1P(vt|st)

  综上所述:

   P(VT)=∑rmaxr=1∏Tt=1P(vt|st)∏Tt=1P(st|st−1)

   P(VT)=∑rmaxr=1∏Tt=1P(vt|st)P(st|st−1)

  上面这个式子计算起来实在太过复杂~现在介绍一种简单计算方法,递归地计算 P(VT) ,累积前面的,计算当次的,再累积前面的,计算当次的,直到整个序列都计算完毕。

  设 αi(t) 表示HMM在 t 时刻,位于隐状态si,并且已经产生了可见序列 VT 的前 t 个符号的概率。

  αi=⎧⎩⎨⎪⎪01bjkv(t)∑iαi(t−1)aijt=0且j≠初始状态t=0且j=初始状态其他

  HMM前向估计的递归方法示意图(这里的 w 是上面的s)。

  

隐马尔科夫模型HMM-过程了解

   HMM前向算法过程

  1. Initialize t=0,aij,bjk ,可见序列 VT , αj(0)=1

  2. for t=t+1

  3. αj(t)=bjkv(t)∑ci=1αi(t−1)aij

  4. until t=T

  5. returnP(VT)

   HMM后向算法过程

  1. Initialize t=T,aij,bjk ,可见序列 VT , βj(T)

  2. for t=t−1

  3. βi(t)=bjkv(t+1)∑cj=1βj(t+1)aij

  4. until t=1

  5. returnP(VT)

  其中,定义 βi(t) 为在 t 时刻位于状态si,并且将产生 t 时刻之后的目标序列(时间范围为从t+1到 T )的概率。

  βi(t)=⎧⎩⎨⎪⎪01bjkv(t+1)∑jβj(t+1)aijsi(t)≠s0且t=Tsi(t)=s0且t=T其他

HMM解码

  已知一个观测序列 VT ,解码就是找到与其对应的最可能的隐状态序列 ST 。

  一种简单的方法是遍历所有的可能的隐状态序列的概率,选择最大的作为解码结果。但是这很明显不现实,因为计算量实在过于巨大。

  现提供一种简单思路,把每个时刻最可能的隐状态 s(t) 找到。

  HMM解码算法(Viterbi)

  1. Initialize paht为空 , t=0

  2.    for t=t+1

  3.      j=1

  4.      for j=j+1

  5.        αj(t)=bjkv(t)∑ci=1αi(t−1)aij

  6.      until j=c

  7.      j′=argmaxjαj(t)

  8.     将隐状态 sj′ 添加到 path 中

  9.    until t=T

  10.   return path

  这种解码方法(维特比算法)的缺点是:不能够保证找到的路径就是合法的路径,即找到的路径有可能是不连贯的。因为是用局部最优解串联成的解。

HMM学习

  学习模型的过程就是确定模型的参数,转移概率 aij,bjk 及隐状态的先验概率 πi 。

  (1)对于有监督问题

   a^ij=隐状态si转到sj的频次隐状态si的所有隐状态转移频次

   b^ij=隐状态sj转到可视状态vk的频次隐状态sj的所有可视状态转移频次

   π^i=样本中 t=1 时,可视状态对应的隐藏状态为si的频率

  (2)对于无监督问题

  解决无监督的HMM训练问题,就是大名鼎鼎的Baum-Welch算法,也叫前向-后向算法。

  该算法是“广义期望最大化算法”的一种具体实现,其核心思想是:通过递归方式更新权重,以得到能够更好地描述(解释)训练样本的模型参数。

  定义从隐状态 si(t−1) 到 sj(t) 的概率 γij(t) 如下:

  

γij(t)=αi(t−1)aijbjkβj(t)P(VT|θ)

  其中, P(VT|θ) 是模型用任意的隐含路径产生序列 VT 的概率, γij(t) 则表示了在产生可序列 VT 的条件下,从隐状态 si(t−1) 到 sj(t) 的概率。

   aij 的估计值 aij^ 如下, K 表示可转移的状态数量:

  

a^ij=∑Tt=1γij(t)∑Tt=1∑Kk=1γik(t)

  上式中,分子表示了 si 到 sj 的期望;分母表示了 si 转移的总期望。

   bjk 的估计值 bjk^ 如下:

   b^jk=∑Tt=1∑v(t)=vkγik(t)∑Tt=1∑γik(t)

  上式中,分子表示了隐状态 sj 对应的特定的可视状态 vk 对应的频次;分母表示了隐状态 sj 对应的所有的可视状态的频次。

  ?初始状态概率怎么确定的?

   前向-后向算法过程

  1. Initial aij,bjk 训练序列 VT ,收敛判据 θ , z=0

  2.    doz=z+1

  3.      由a(z−1)和b(z−1)计算a^(z)

  4.      由a(z−1)和b(z−1)计算b^(z)

  5.      update:

  6.      aij(z)=a^ij(z−1)

  7.      bjk(z)=b^jk(z−1)

  8.    until maxi,j,k[aij(z)−aij(z−1),bjk(z)−bjk(z−1)]<θ

  9.    return aij=aij(z);

           bjk=bjk(z)

   πi=当前参数下,初始隐状态s1=si的概率当前参数下,VT的概率=P(VT,s1=si|a,b)P(VT|a,b)

   πi 是隐状态的先验概率估计,需要根据样本推测隐状态样本,然后计算。

小结

  HMM算法是个经典算法,在语音识别、自然语言处理、生物信息等领域应用广泛。隐马尔科夫模型是关于时序的概率模型,描述一个由隐藏的马尔科夫链随机生成不可观测的状态的序列,再由各个状态随机生成一个观测值而产生观测序列的过程。

继续阅读