机器学习算法拾遗:(七)隐马尔科夫模型(前向后向算法、鲍姆-韦尔奇算法、维特比算法)

1、隐马尔科夫模型HMM

  隐马尔科夫模型的图结构如下

  

  从上图中主要有两个信息:一是观测变量xi 仅仅与与之对应的状态变量yi 有关;二是当前的状态变量yi 仅仅与它的前一个状态变量yi-1 有关。

隐马尔科夫模型是由初始概率分布,状态转移概率分布,以及观测概率分布确定的。设Q是所有可能的状态的集合,V是所有可能的观测的集合(注意:这里的状态集合和观测集合中的个数和序列的长度T是不一样的,每个时间端的状态和观测值都是依照概率生成的,也就意味着在一个序列里面会存在状态和观测值相同的情况)。具体集合表达式如下,其中N是可能的状态数,M是可能的观测数:

  

  假设此时存在一个长度为T的序列,I为其状态序列,O为其观测序列(在HMM模型中每个序列都会包含状态序列和观测序列),序列的表达式如下:

  

  在这里我们引入三组参数来描述我们的模型:

  状态转移概率矩阵,,状态转移概率矩阵A的表达式如下(矩阵的维度和状态集合的个数是一样的

  

  其中aij 描述的是在t 时刻从状态qi 转移到t+1 时刻的状态qj 的概率,其条件概率表达式如下

  

  观测概率矩阵,观测概率矩阵B的表达式如下(矩阵的行数和状态集合的个数相等,列数和观测集合的个数相等

  

  其中bj(k) 描述的是在t 时刻处于状态qj 的条件下生成观测值vk 的概率(在某一时刻下,从状态输出观测值的可能性有k种),其表达式如下

  

  初始状态概率,初始状态概率π 的表达式如下(整个模型的入口是从确定状态i1 开始的,因此需要初始化该值

   

   

  其中πi 就是在t = 1 时刻处于状态qi 的概率

  给出了上述三个参数之后,隐马尔科夫模型λ 就可以用它们来表示

  

 在隐马尔科夫模型中作出了两个假设来简化模型:

  1)齐次马尔科夫性假设,即假设隐藏的马尔科夫链在任意时刻t 的状态只和前一时刻状态有关,与其他时刻的状态无关(而在深度模型中都会假设和前面多个时刻的状态有关,如LSTM;或者和之前的所有状态相关,如RNN。事实上很多应用场景中都不止是和前一个状态相关),这也就简化了模型的复杂度,因此我们可以获得如下的表达式

  

  2)观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔科夫链的状态,与其他观测和状态无关,因此可以获得如下表达式

  

  结合上面两个假设,我们可以将我们的模型中所有变量的联合概率分布给出,这就是所谓的 “马尔科夫链”

  

  当确定了模型的三个参数后,我们可以按照如下规则生成观测值序列

  输入的是HMM的模型λ=(A, B, π),观测序列的长度T

  输出是观测序列O={o1, o2, ... oT}

  生成的过程如下:

  1)根据初始状态概率分布π,生成隐藏状态i1

     2) 令 t = 1

  3)按照隐藏状态it 的观测状态分布生成观察状态ot

  4)按照隐藏状态it 的状态转移概率分布产生隐藏状态it+1

     5)令t = t + 1;如果t  < T,则转至第3 步,否则终止。所有的ot 一起形成观测序列O={o1, o2, ...oT}

  隐马尔科夫模型的三个基本问题

  1) 评估观察序列概率。即给定模型λ = (A, B, π)和观测序列O={o1, o2,... oT},计算在模型λ下观测序列O出现的概率P(O|λ)。这个问题的求解需要用到基于动态规划的前向后向算法

  2)模型参数学习问题。即给定观测序列O={o1, o2,... oT},估计模型λ=(A, B π)的参数,使该模型下观测序列的条件概率P(O|λ)最大。这个问题的求解需要用到基于EM算法的鲍姆-韦尔奇算法

  3)预测问题,也称为解码问题。即给定模型λ=(A, B, π)和观测序列O={o1, o2,... oT},求给定观测序列条件下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的维特比算法

4、维特比算法

  维特比算法是一种预测算法,在给定了模型参数λ和观测序列O的前提下去预测最可能出现的状态序列。关于隐马尔科夫模型预测的算法除了维特比算法之外,还有一种近似算法。

  近似算法:近似算法的核心思想是在每个时刻t选择在该时刻最有可能出现的状态it*,从而得到一个近似状态序列。这种算法的优点是算法简单易理解,缺点是每次都是求解局部最优(贪心原则),不能保证全局最优。具体算法流程如下:

  给定模型λ和观测序列O,在t 时刻的状态qi 的概率为(在前向后向算法中有推导):

  

  在每一时刻t 最有可能的状态it* 是

  

  这样就可以得到近似的状态序列

  

  维特比算法和前向后向算法一样,也是利用动态规划来解隐马尔科夫的预测问题。在前向后向算法中是对t 时刻转移到t+1 时刻的所有可能的状态相加,因为是求边缘概率 P(O|π);而在维特比算法中是对t 时刻转移到t+1 时刻的状态求最大概率,即求最大的P(O, S|π)(注意:在这里求t 时刻的最大值也是和t - 1的时刻相关联的。无关的化只是贪心法)。

  首先定义两个变量δ和Ψ。定义在时刻t 状态为i 的所有单个路径中概率最大值(这里事实上就是前向算法中的前向概率的最大值

  

  由定义可得变量δ的递推公式

  

  定义在时刻t 状态为i 的所有单个路径中概率最大的路径的第i -1 个节点(在这里和前一时刻关联起来)

  

  维特比算法的具体过程如下:

  1)初始化

  

  2)递归

  

  3)终止

  

  4)最优路径回溯,求得最优路径

  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值