• 统计学习方法笔记 -- 隐马尔可夫模型


    参考,隐马尔可夫模型(HMM)攻略

    首先看看确定的状态序列,这种状态序列中状态的变化是确定的,比如
    红绿灯,一定是绿灯->红灯->黄灯,这样的状态序列
    当然也有些不确定状态序列,比如
    天气,今天是晴天,你不能确定明天也一定是晴天或雨天
    于是我们用概率来表示这种不确定性,称为马尔可夫过程 (Markov Process),马尔可夫过程的阶数表示当前状态依赖于过去几个状态,出于简单考虑往往用一阶马尔可夫过程,即当前状态仅仅取决于前一个状态。

    马尔可夫过程,由状态集合,初始状态和状态转移矩阵组成,
    以天气为例子,
    状态集合为,晴天、阴天和下雨
    初始状态为,晴天
    image 
    状态转移矩阵,表示每个状态之间的迁移概率
    image 

    用马尔可夫过程模型,已经可以观察和model各种状态序列,但如果想要切开表面,发现事物的本质,就需要隐马尔可夫模型(Hidden Markov Model)

     

    隐马尔可夫模型

    隐马尔可夫模型用于表述,两个状态序列之间的关系,即本质状态序列和表象状态序列之间的关系。
    可想而知,有了隐马尔可夫模型,我们可以根据本质状态序列来预测表象状态序列,或反过来,根据表象状态序列来探索本质状态序列

    还是天气的例子,
    比如一个人被监禁在房子里无法出去,无法直接观察到天气的状态,但是房子里面有盆植物,它会更加不同的天气发生状态变化
    那么他能做的,就是根据植物的状态去猜测天气状况,这就是根据表象去探索本质的例子

    image

    其中,

    隐含的状态列表,sun,cloud,rain
    观察到的状态列表,soggy,damp,dryish,dry
    隐含状态的转移矩阵为A
    隐含状态和观察状态之间的关系矩阵为B,表示在隐含状态a时,出现观察状态b的概率

    给出隐马尔可夫模型形式化表示,

    image

    image

    表示当在t时刻状态为qi, 那么在t+1时刻,状态变为qj的概率

    image

    表示在t时刻,当状态为qj时,观测状态为Vk的概率

    image

    表示在1时刻,状态为qi的概率

    综合,隐马尔可夫模型就可以用上面的三要素来表示,
    image

    并且隐马尔可夫模型做了两个假设,

    齐次马尔可夫性假设,即一阶马尔可夫模型假设,t时刻的隐藏状态,只依赖于前一时刻的隐藏状态,和其他时刻的隐藏状态或任意时刻的观察状态都无关
    image

    观测独立性假设,即t时刻的观测状态,只依赖于t时刻的隐藏状态,和其他时刻的观测状态或隐藏状态都无关

    image

     

    隐马尔可夫模型的3个基本问题

    1. 概率计算问题

    image

    计算image , 即在该模型下,出现这组观测序列的概率是多少

    2. 学习问题

    image

    用极大似然估计出参数,使得该观测序列出现概率image最大

    3. 预测问题

    已知模型和观测状态序列,求解使得P(I|O)最大的隐藏状态序列,

    image

     

    下面就分别来看看每种问题的解法

    概率计算问题

    比较直接的方法,穷举法,就是找出所有可能的长度为t的隐藏状态序列,并乘以在该隐藏状态序列下得到该观测序列的概率,可以想象这个复杂度为,image

    image

    前向算法和后向算法

    定义,前向概率
    image

    即在t时刻观测序列为image ,且t时刻状态为image 的概率

    前向算法,其实就是定义一个递归算法,即用上一层的前向概率来计算当前的前向概率

    image image

    看看下图,

    image

    如果穷举,3的3次方,计算27次,因为对于这个case,长度为3的隐藏状态序列的可能性为27
    而如果用前向算法,需要计算3×3 + 3×3 = 18次,因为它避免了重复计算

    可以看到计算复杂度从image,降到image

    前向算法的核心思路,就是避免重复计算,其实是一种动态规划算法

     

    后向算法的思路和前向是一样的

    定义后向概率,当t时刻的状态为image ,那么image 的概率,就为后向概率

    image 

    后向算法,

    image image

    首先初始化,对于T时刻的状态,没有后续状态,所以后向概率默认设为1
    接着给出递推公式,可以反向推出前一层的后向概率,求到第一层的时候,把所有状态的后向概率求和就得到image

    可以看到用前向或后向算法,都可以递推的最终求得image

     

    学习算法

    监督学习算法
    如果训练集中,有S个长度相同的观测序列和对应的隐藏状态序列
    image

    那么直接用极大似然来拟合参数,即直接统计

    image ,其中image

    即在i状态转移到j状态的次数除以从i状态转移的总数

    image ,其中image

    这个方法很简单,但是问题是训练集是很难获取的
    所以实际用到的都是无监督算法

     

    无监督算法,Baum-Welch算法

    只有S个长度为T的观测状态序列,
    image

    需要拟合出隐马尔可夫的参数,
    image

    这就是含有隐变量的概率模型,

    image

    求解这种问题的典型算法是EM算法,具体算法这里不列,后面有空再细看

     

    预测问题

    近似算法

    找出对于观测状态序列,在每个时刻t,最有可能出现的隐藏状态image , 从而得到image

    那么先看看如何计算,image

    image

    并且有前向,后向概率定义可知

    image

    image

    所以,只需求得,

    image

    这个算法计算简单,但不能保证预测的状态序列整体上是最有可能的状态序列

     

    Viterbi 算法

    其实就是用动态规划算法来求解最优路径
    预测问题是隐马尔可夫比较重要的问题和常见的问题,因为用隐马尔可夫往往就是为了同观测状态去挖掘隐藏状态
    比如上面通过房子中的植物状态去推测天气的状态
    或者自然语言处理中,去推测每个词的词性

     

    动态规划算法,关键就是写出递归式,

    image

    如果我知道到t-1时刻到3个状态A,B,C的最优路径
    那么如果要找到到x节点的最优路径,很简单,从A+AX,B+BX,C+CX这3个路径中找到个最优的即可

    形式化的表示,

    定义,

    image

    在t时刻,到达状态i的所有路径中,最优路径的概率;最优路径即概率最大的路径

    于是得到递归式,

    image 

    t时刻每个状态的最佳路径概率值×迁移到i状态的概率×i状态得到观测值Ot+1的概率,求其最大值
    得到t+1时刻,最优路径的概率

    当到T时刻,找到所有状态节点的最优路径中,概率最大的,就是全局最优路径

    image

    但此时,只知道最优路径最后的状态是i,过程中的路径需要回溯回去,

    所以在求解时,需要buffer每一时刻,每一状态的最优路径的上个节点,即来自上一时刻哪个状态

    image

    和求解公式比,少了个b,是因为对于相同i,b是一样的,所以略去

    最终,完整的Viterbi算法

    image 
    image

  • 相关阅读:
    cd /d %~dp0是什么意思啊?
    [转]修改SDI主窗口Title
    版本控制
    (原创)日志处理(修改)
    (转)VC中让CListBox带有复选框
    (转)专业的程序员需要具备的思考能力:写一个程序需要注意多少细节问题
    vue中vcharts的使用
    1. 持续集成 简单介绍
    os.urandom函数用来获取一个指定长度的随机bytes对象
    python 列表中嵌套列表或列表推导式 如果合并成一个list
  • 原文地址:https://www.cnblogs.com/fxjwind/p/3949993.html
Copyright © 2020-2023  润新知