• 隐马尔可夫模型(HMM)原理


    本文主要讨论隐马尔科夫模型的三大要素,三大假设和三大问题。

    1、引入

      隐马尔可夫模型是一个关于时序的概率模型,它描述了一个由隐藏的马尔可夫链生成状态序列,再由状态序列生成观测序列的过程。其中,状态之间的转换以及观测序列和状态序列之间都存在一定的概率关系。隐马尔可夫模型主要用来对上述过程进行建模。为了方便后面的讨论,我们先定义一些符号:

      设共有N个隐藏状态,状态集合可以表示为:

      设共有M个观测状态,观测集合为:

      注:隐藏状态的数目和观测状态的数目不一定相同。

    2、模型概述

      隐马尔可夫模型主要有三大要素,分别是:初始状态向量,状态转移概率矩阵A和观测概率矩阵B。此三大要素决定了一个模型。模型可表示为:

      1)初始状态向量 。模型最开始的时候处于哪状态?这个就靠初始状态向量,它决定了模型在最开始时每个状态的概率。若有N个状态,则初试状态向量的长度为N。

      其中:表示状态i作为初始状态的概率,所有的概率之和为1.

      2)状态转移概率矩阵A。此矩阵主要描述了不同状态之间的转移概率。由于共有N个状态,则状态转移概率矩阵的大小为N*N。  

      其中:表示状态i直接转移到状态j的概率。并且,状态转移概率矩阵的每一行的概率之和为1.

      3)观测概率矩阵B。表示由状态生成观测的概率。其符号表示为:

      其中:表示由状态j生成观测k的概率。同样,矩阵的每一行的概率之和为1.

    注:上面三大要素在模型的训练过程中一直保持不变。

    除了上面的三大要素之外,隐马尔可夫模型还有三大假设。

      1)齐次马尔可夫假设。又叫一阶马尔可夫假设,即任意时刻的状态只依赖前一时刻的状态,与其他时刻无关。符号表示为:

      推广:n阶马儿可夫模型:任意时刻的状态只依赖前面n个时刻的状态,与其他时刻无关。

      2)观测独立性假设。任意时刻的观测只依赖于该时刻的状态,与其他状态无关。

      3)参数不变性假设。上面介绍的三大要素不随时间的变化而改变,即在整个训练过程中一直保持不变。

    至此,我们介绍了三大要素和三大假设,现在我们要解决三大问题:概率计算问题,预测问题和学习问题。下面分别对其进行详细介绍。

    3、概率计算问题

    问题描述:此问题主要是在已知模型参数的条件下,求给定观测序列出现的概率。设状态序列为:,其对应的观测序列为:

    1)暴力计算法 --> 时间复杂度:O(TNT)

      首先我们使用最原始的方法来分析一下。对于一个确定状态序列的概率为:

      然后计算在状态序列确定的情况下,计算观测序列的概率:

      现在我们将上面两个公式综合起来,即计算状态序列I和观测序列O同时出现的概率为:

      最后对所有可能的状态序列I计算与观测序列O的概率:

      由于状态序列I的长度为T,每个状态有N种可能,所以状态序列I共有NT种可能,然后每种可能计算与观测序列O的概率,所以时间复杂度为:O(TNT)。对于此方法的时间复杂度太高,实际上不可行。

    2)前向算法 --> 时间复杂度O(TN2)

      首先,我们设在时刻t的状态为qi,且观测序列为o1,o2,…,ot的概率为

      根据齐次马尔可夫假设和观测独立性假设,我们知道每个观测只与它当前时刻的状态有关,而每一个状态只与它前一时刻的状态有关。于是t+1时刻的前向概率为:

      在t+1时刻的观测概率只与t+1时刻的状态i有关,即首先计算在t+1时刻状态i生成观测ot+1的概率,然后遍历上一时刻t中各个状态的前向概率,再乘以上一时刻的状态j转换成状态i的概率。于是就得到了前向概率的递推公式。

    图3.1 前向概率递推示意图

    前向算法过程如下:

    A)初始化

    B)从前向后,逐步递推,对t=1,2,…,T-1

    C)对T时刻的所有前向概率求和。

      前向算法的时间从t=1~T进行遍历;然后在时刻t,首先需要对该时刻每个可能的状态(共N个状态)进行遍历;对每一个可能的状态,我们需要计算它与前一时刻的所有状态之间的转移概率。所以算法的最终时间复杂度为O(TN2)。

    3)后向算法 --> 时间复杂度O(TN2)

      后向算法从时刻T开始向前推进,对每一时刻t,计算当前时刻t与下一时刻t+1之间的递推关系,设时刻t+1到时刻T的观测序列为ot+1,ot+2,…,oT,于是在t时刻状态i的后向概率为:

      现在,我们分析一下从t+1时刻到t时刻的后向概率的变化。由于t时刻的后向概率只与t+1时刻的状态有关。于是,只需要考虑当前时刻t的状态i转移到t+1时刻的N个状态j的概率,以及状态j生成观测ot+1的概率以及j的后向概率。

    递推公式如下:

    关于后向概率的递推过程如图3.2所示。(与神经网络有点类似)

    图3.2 后向概率递推示意图

    后向概率算法过程:

    A)初始化,将

    B)从后向前,对时刻t=T-1,T-2,…,1.使用递推公式:

    C)最后到达初始化状态,

    4、预测问题

      问题描述:已知模型参数和观测序列,求观测序列对应的最可能的状态序列。

      此问题主要两种方法,总的来说就是计算概率最大的状态序列。

    1)近似算法 --> 贪心的思想 --> 局部最优

      此算法思想是在观测O的前提下每个时刻t选择该时刻概率最大的状态。在时刻为t时,状态为i的概率为:

      然后选择时刻t中所有概率最大的状态:

      最后将每个时刻概率最大的状态组合得到状态序列:I’=(i1’,i2’,…,in’)。但该序列只能保证状态在每一时刻的最优,而不能保证整体序列的最优。

    2)维特比算法 –> 动态规划

      为了使状态序列达到全局最优,我们使用动态规划的思想。首先将每个状态序列看作是一条路径,每个状态看作是路径上的一个节点。

      设时刻t=1~t’的最优状态序列为i1,i2,…,it’,则在整体最优状态序列中一定包含上述部分最优序列,否则,设整体最优状态序列在时间1~t’的最优序列为i1,i2,…,ik,则序列i1,i2,…,ik比序列i1,i2,…,it’更优与条件i1,i2,…,it’是最优的矛盾,因而,我们可以通过逐个时刻求解当前的最优状态序列,直到时刻T。

      先定义在时刻t状态为i的所有单个路径状态i1,i2,…,it中概率最大值为:

      则在时刻t+1时:

      通过上述递推公式可以计算出状态序列出现的概率,但是并没有得到相应的状态序列,于是我们需要使用下式来保存每步中的状态序列:

    维特比算法过程如下:

    1)初始化,在t=1时,有:

    2)利用递推公式,t=2,3,…,T,

    3)得到概率最大的状态序列中的最后一个状态为:

    4)依次回溯,得到最优状态路径:

    得到最优路径为:i1’, i2’, …, iT’。

    5、学习问题

      问题描述:已知观测序列,估计模型参数。

      对于此问题主要有两种情况,首先是给出了观测序列以及对应的状态序列的监督学习方法,其次是只给出观测序列,没有给出状态序列的非监督学习方法。现在分别对其进行讨论:

    1)监督学习法 --> 给出观测序列+对应的状态序列 --> 极大似然估计

      假设给出的训练集为:{(o1,i2),(o2,i2), …, (oT,iT)},此时,我们可以直接使用极大似然估计法来估计模型参数。

      A)状态转移概率估计。设由状态i直接转移到状态j的次数为Aij,则由状态i转移到状态j的概率估计为:

      B)观测概率估计。设样本中状态为j时观测为k的次数是Bjk,则状态j生成观测k的概率估计bjk’为:

      C)初试状态概率。样本状态序列中第一个状态i对应的初始概率为1,其余的为0。

    2)非监督学习法 --> 只有观测序列,无相应的状态序列 --> 前向后向算法.

      在前面,我们已经介绍了前向算法和后向算法。根据前向概率和后向概率,可以得出观测序列为O且在t时刻的状态为qi的概率为:

      将时刻t的前向和后向综合进行考虑,就能得出上述公式,分析如图5.1所示。

    图5.1 时刻t的状态图

      观测O在t时刻的状态为qi的概率为:

      所以,在观测为O的状态下qi出现的期望值为:

      在t时刻状态为qi且在t+1时刻状态为qj的概率为:

      其中,观测为O且t时刻的状态为qi以及t+1时刻的状态为qj的概率为:

      由于在计算at(i)时已经考虑了bi(ot)的概率,所以在上式中只有bj(ot+1)。

    图5.2 时刻t到t+1的状态

      此时的观测O的概率也可以写为:

      那么由状态i转移到状态j的期望值为:

    现在,我们可以估计模型参数:

    A)初始状态概率向量:,其中

    B)状态转移概率矩阵:,其中:

    C)观测概率矩阵:,其中

      对于计算状态j生成观测vk的概率,首先需要找到每个时刻的状态j,然后找出状态j生成观测vk的数目。

    6、总结

      隐马尔可夫模型主要由三大要素组成,然后利用三大假设解决三大问题。在三大问题中,首先是概率计算问题,这主要利用前向算法或后向算法;我们将前向算法和后向算法结合就可以解决只有观测序列求模型参数的问题,即学习问题;最后关于状态序列预测问题主要使用维特比算法,此算法使用动态规划的思想,使得最终计算出来的状态序列能达到整体最优。

      另外,本文后面的前向后向算法只给出了一些计算公式,并未深入的进行分析,其实这些公式可以使用EM算法来推导。

    参考文献:

    [1] 李航,统计学习方法

    [2] peghoty, http://blog.csdn.net/itplus/article/details/15335811

    [3] LiXiang, http://www.leexiang.com/hidden-markov-model

    [4] jihite, http://www.cnblogs.com/kaituorensheng/archive/2012/12/06/2806263.html

  • 相关阅读:
    在VC6.0中虚函数的实现原理
    札记Microsoft基本类库应用程序框架
    typedef用法剖析
    申请成功记录记录
    vc++6.0环境中swap函数
    ubuntu12.04 安装JDK7
    N皇后问题的位运算求解——目前最快的方法
    Linux常用命令小结
    Ubuntu添加自己的桌面快捷方式
    C++静态成员函数小结(转)
  • 原文地址:https://www.cnblogs.com/liuwu265/p/4732797.html
Copyright © 2020-2023  润新知