在本篇我们会讨论HMM模型参数求解的问题,这个问题在HMM三个问题里算是最复杂的。在研究这个问题之前,建议先阅读这个系列的前两篇以熟悉HMM模型和HMM的前向后向算法,以及EM算法原理总结,这些在本篇里会用到。在李航的《统计学习方法》中,这个算法的讲解只考虑了单个观测序列的求解,因此无法用于实际多样本观测序列的模型求解,本文关注于如何使用多个观测序列来求解HMM模型参数。
1. HMM模型参数求解概述
HMM模型参数求解根据已知的条件可以分为两种情况。
第一种情况较为简单,就是我们已知$D$个长度为$T$的观测序列和对应的隐藏状态序列,即$\{(O_1, I_1), (O_2, I_2), ...(O_D, I_D)\}$是已知的,此时我们可以很容易的用最大似然来求解模型参数。
假设样本从隐藏状态$q_i$转移到$q_j$的频率计数是$A_{ij}$,那么状态转移矩阵求得为:

$$ A = \Big[a_{ij}\Big], \;其中a_{ij} = \frac{A_{ij}}{\sum\limits_{s=1}^{N}A_{is}} $$

假设样本隐藏状态为$q_j$且观测状态为$v_k$的频率计数是$B_{jk}$,那么观测状态概率矩阵为:

$$ B= \Big[b_{j}(k)\Big], \;其中b_{j}(k) = \frac{B_{jk}}{\sum\limits_{s=1}^{M}B_{js}} $$

假设所有样本中初始隐藏状态为$q_i$的频率计数为$C(i)$,那么初始概率分布为:

$$ \Pi = \pi(i) = \frac{C(i)}{\sum\limits_{s=1}^{N}C(s)} $$

可见第一种情况下求解模型还是很简单的。但是在很多时候,我们无法得到HMM样本观察序列对应的隐藏序列,只有$D$个长度为$T$的观测序列,即$\{(O_1), (O_2), ...(O_D)\}$是已知的,此时我们能不能求出合适的HMM模型参数呢?这就是我们的第二种情况,也是我们本文要讨论的重点。它的解法最常用的是鲍姆-韦尔奇算法,其实就是基于EM算法的求解,只不过鲍姆-韦尔奇算法出现的时代,EM算法还没有被抽象出来,所以我们本文还是说鲍姆-韦尔奇算法。
2. 鲍姆-韦尔奇算法原理
鲍姆-韦尔奇算法原理既然使用的就是EM算法的原理,那么我们需要在E步求出联合分布$P(O,I|λ)$基于条件概率$P(I|O,\overline{\lambda})$的期望,其中$\overline{\lambda}$为当前的模型参数,然后再M步最大化这个期望,得到更新的模型参数$λ$。接着不停的进行EM迭代,直到模型参数的值收敛为止。
首先来看看E步,当前模型参数为$\overline{\lambda}$, 联合分布$P(O,I|\lambda)$基于条件概率$P(I|O,\overline{\lambda})$的期望表达式为:

$$ L(\lambda, \overline{\lambda}) = \sum\limits_{I}P(I|O,\overline{\lambda})logP(O,I|\lambda) $$

在M步,我们极大化上式,然后得到更新后的模型参数如下:

$$ \overline{\lambda} = arg\;\max_{\lambda}\sum\limits_{I}P(I|O,\overline{\lambda})logP(O,I|\lambda) $$

通过不断的E步和M步的迭代,直到$\overline{\lambda}$收敛。下面我们来看看鲍姆-韦尔奇算法的推导过程。

3. 鲍姆-韦尔奇算法的推导
我们的训练数据为$\{(O_1, I_1), (O_2, I_2), ...(O_D, I_D)\}$,其中任意一个观测序列$O_d = \{o_1^{(d)}, o_2^{(d)}, ... o_T^{(d)}\}$,其对应的未知的隐藏状态序列表示为:$I_d = \{i_1^{(d)}, i_2^{(d)}, ... i_T^{(d)}\}$
首先看鲍姆-韦尔奇算法的E步,我们需要先计算联合分布$P(O,I|λ)$的表达式如下:

$$ P(O,I|\lambda) = \prod_{d=1}^D\pi_{i_1^{(d)}}b_{i_1^{(d)}}(o_1^{(d)})a_{i_1^{(d)}i_2^{(d)}}b_{i_2^{(d)}}(o_2^{(d)})...a_{i_{T-1}^{(d)}i_T^{(d)}}b_{i_T^{(d)}}(o_T^{(d)}) $$

我们的E步得到的期望表达式为:

$$ L(\lambda, \overline{\lambda}) = \sum\limits_{I}P(I|O,\overline{\lambda})logP(O,I|\lambda) $$

在M步我们要极大化上式。由于$P(I|O,\overline{\lambda}) = P(I,O|\overline{\lambda})/P(O|\overline{\lambda})$,而$P(O|\overline{\lambda})$是常数,因此我们要极大化的式子等价于:

$$ \overline{\lambda} = arg\;\max_{\lambda}\sum\limits_{I}P(O,I|\overline{\lambda})logP(O,I|\lambda) $$

我们将上面$P(O,I|λ)$的表达式带入我们的极大化式子,得到的表达式如下:

$$ \overline{\lambda} = arg\;\max_{\lambda}\sum\limits_{d=1}^D\sum\limits_{I}P(O,I|\overline{\lambda})(log\pi_{i_1} + \sum\limits_{t=1}^{T-1}log\;a_{i_t}a_{i_{t+1}} + \sum\limits_{t=1}^Tb_{i_t}(o_t)) $$

我们的隐藏模型参数$λ=(A,B,Π)$,因此下面我们只需要对上式分别对$A,B,Π$求导即可得到我们更新的模型参数$\overline{\lambda}$
首先我们看看对模型参数ΠΠ的求导。由于ΠΠ只在上式中括号里的第一部分出现,因此我们对于ΠΠ的极大化式子为:

$$ \overline{\pi_i} = arg\;\max_{\pi_{i_1}} \sum\limits_{d=1}^D\sum\limits_{I}P(O,I|\overline{\lambda})log\pi_{i_1} = arg\;\max_{\pi_{i}} \sum\limits_{d=1}^D\sum\limits_{i=1}^NP(O,i_1^{(d)} =i|\overline{\lambda})log\pi_{i} $$

由于$π_i$还满足$\sum\limits_{i=1}^N\pi_i =1$,因此根据拉格朗日子乘法,我们得到$π_i$要极大化的拉格朗日函数为:

$$ arg\;\max_{\pi_{i}}\sum\limits_{d=1}^D\sum\limits_{i=1}^NP(O,i_1^{(d)} =i|\overline{\lambda})log\pi_{i} + \gamma(\sum\limits_{i=1}^N\pi_i -1) $$

其中,$γ$为拉格朗日系数。上式对$π_i$求偏导数并令结果为0, 我们得到:

$$ \sum\limits_{d=1}^DP(O,i_1^{(d)} =i|\overline{\lambda}) + \gamma\pi_i = 0 $$

令$i$分别等于从1到$N$,从上式可以得到$N$个式子,对这$N$个式子求和可得:

$$ \sum\limits_{d=1}^DP(O|\overline{\lambda}) + \gamma = 0 $$

从上两式消去$γ$,得到$π_i$的表达式为:

$$ \pi_i =\frac{\sum\limits_{d=1}^DP(O,i_1^{(d)} =i|\overline{\lambda})}{\sum\limits_{d=1}^DP(O|\overline{\lambda})}\frac{\sum\limits_{d=1}^DP(O,i_1^{(d)} =i|\overline{\lambda})}{DP(O|\overline{\lambda})} = $$

$$ \frac{\sum\limits_{d=1}^DP(i_1^{(d)} =i|O, \overline{\lambda})}{D} = \frac{\sum\limits_{d=1}^DP(i_1^{(d)} =i|O^{(d)}, \overline{\lambda})}{D} $$

利用我们在隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率里第二节中前向概率的定义可得:

$$ P(i_1^{(d)} =i|O^{(d)}, \overline{\lambda}) = \gamma_1^{(d)}(i) $$

因此最终我们在M步$π_i$的迭代公式为:

$$ \pi_i = \frac{\sum\limits_{d=1}^D\gamma_1^{(d)}(i)}{D} $$

现在我们来看看$A$的迭代公式求法。方法和$Π$的类似。由于$A$只在最大化函数式中括号里的第二部分出现,而这部分式子可以整理为:

$$ \sum\limits_{d=1}^D\sum\limits_{I}\sum\limits_{t=1}^{T-1}P(O,I|\overline{\lambda})log\;a_{i_t}a_{i_{t+1}} = \sum\limits_{d=1}^D\sum\limits_{i=1}^N\sum\limits_{j=1}^N\sum\limits_{t=1}^{T-1}P(O,i_t^{(d)} = i, i_{t+1}^{(d)} = j|\overline{\lambda})log\;a_{ij} $$

由于$a_{ij}$还满足$\sum\limits_{j=1}^Na_{ij} =1$。和求解$π_i$类似,我们可以用拉格朗日子乘法并对$a_{ij}$求导,并令结果为0,可以得到$a_{ij}$的迭代表达式为:

$$ a_{ij} = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}P(O^{(d)}, i_t^{(d)} = i, i_{t+1}^{(d)} = j|\overline{\lambda})}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}P(O^{(d)}, i_t^{(d)} = i|\overline{\lambda})} $$

利用隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率里第二节中前向概率的定义和第五节$\xi_t(i,j)$的定义可得们在M步$a_{ij}$的迭代公式为:

$$ a_{ij} = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}\xi_t^{(d)}(i,j)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}\gamma_t^{(d)}(i)} $$

现在我们来看看$B$的迭代公式求法。方法和$Π$的类似。由于$B$只在最大化函数式中括号里的第三部分出现,而这部分式子可以整理为:

$$ \sum\limits_{d=1}^D\sum\limits_{I}\sum\limits_{t=1}^{T}P(O,I|\overline{\lambda})log\;b_{i_t}(o_t) = \sum\limits_{d=1}^D\sum\limits_{j=1}^N\sum\limits_{t=1}^{T}P(O,i_t^{(d)} = j|\overline{\lambda})log\;b_{j}(o_t) $$

由于$b_{j}(o_t)$还满足$\sum\limits_{k=1}^Mb_{j}(o_t =v_k) =1$。和求解$\pi_i$类似,我们可以用拉格朗日子乘法并对$b_{j}(k)$求导,并令结果为0,得到$b_{j}(k)$的迭代表达式为:

$$ b_{j}(k) = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T}P(O,i_t^{(d)} = j|\overline{\lambda})I(o_t^{(d)}=v_k)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T}P(O,i_t^{(d)} = j|\overline{\lambda})} $$

其中$I(o_t^{(d)}=v_k)$当且仅当$o_t^{(d)}=v_k$时为1,否则为0. 利用隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率里第二节中前向概率的定义可得$b_{j}(o_t)$的最终表达式为:

$$ b_{j}(k) = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1, o_t^{(d)}=v_k}^{T}\gamma_t^{(d)}(i)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T}\gamma_t^{(d)}(i)} $$

有了$\pi_i, a_{ij},b_{j}(k)$的迭代公式,我们就可以迭代求解HMM模型参数了。
4. 鲍姆-韦尔奇算法流程总结
这里我们概括总结下鲍姆-韦尔奇算法的流程。
输入: $D$个观测序列样本$\{(O_1), (O_2), ...(O_D)\}$
输出:HMM模型参数
1)随机初始化所有的$\pi_i, a_{ij},b_{j}(k)$
2) 对于每个样本$d=1,2,...D$,用前向后向算法计算$gamma_t^{(d)}(i),xi_t^{(d)}(i,j), t =1,2...T$
3) 更新模型参数:

$$ \pi_i = \frac{\sum\limits_{d=1}^D\gamma_1^{(d)}(i)}{D} $$

$$ a_{ij} = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}\xi_t^{(d)}(i,j)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}\gamma_t^{(d)}(i)} $$

$$ b_{j}(k) = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1, o_t^{(d)}=v_k}^{T}\gamma_t^{(d)}(i)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T}\gamma_t^{(d)}(i)} $$

4) 如果$\pi_i, a_{ij},b_{j}(k)$的值已经收敛,则算法结束,否则回到第2)步继续迭代。
以上就是鲍姆-韦尔奇算法的整个过程。

摘自:https://www.cnblogs.com/pinard/p/6972299.html

隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数相关推荐

  1. 隐马尔科夫模型,三个基本问题及相应算法

    隐马尔科夫模型基本问题及其相应的算法: 1.评估问题:概率计算问题:给定模型和观测序列,计算在模型下观测序列出现的概率. 前向.后向算法解决的是一个评估问题,即给定一个模型,求某特定观测序列的概率,用 ...

  2. 隐马尔科夫模型、三个基本问题、三个训练算法

    参考一篇"机器学习研究会"的文章与宗庆后的<统计自然语言模型>,督促自己回顾一下HMM模型知识为面试做准备. 这次学习会讲了隐马尔科夫链,这是一个特别常见的模型,在自然 ...

  3. 隐马尔科夫模型(HMM)浅见

    隐马尔科夫模型,Hidden Marcov Model,是可用于标注问题的统计学习模型,描述由隐藏的马尔科夫链随机生成观测序列的过程,属于生成模型,是一种比较重要的机器学习方法,在语音识别等领域有重要 ...

  4. 【转】隐马尔科夫模型(HMM)及其Python实现

    原文链接https://applenob.github.io/hmm.html 隐马尔科夫模型(HMM)及其Python实现 目录 1.基础介绍 形式定义 隐马尔科夫模型的两个基本假设 一个关于感冒的 ...

  5. 学习笔记四:HMM(隐马尔科夫模型)

    第四章 HMM 1.隐马尔科夫模型的基本概念 引入 例子:天气和冰激凌问题 想象你是2799年的气候学家,正在研究全球变暖的历史 你无法找到任何关于北京2020年夏天的天气记录 但你找到了小米的日记本 ...

  6. 隐马尔科夫模型HMM详解(1)

    目录 隐马尔科夫模型基本概念 隐马尔科夫模型的三个基本问题 概率计算 预测算法-Viterbi算法 HMM学习算法参考下篇文章 代码地址:https://gitee.com/liangcd/speec ...

  7. HMM学习笔记2 隐马尔科夫模型与前向算法

    一 序 本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,有大佬做了二次整理,参见:https://blog.csdn.ne ...

  8. 第十九课.隐马尔科夫模型

    目录 隐马尔科夫模型的结构 马尔科夫链与隐马尔科夫模型 实例 HMM的要素 模型的性质 推理问题:HMM的状态解码 隐状态解码问题 最大路径概率与维特比算法 使用维特比算法解码 实例演示 基于Pyth ...

  9. 10_隐马尔科夫模型HMM2_统计学习方法

    文章目录 四.学习算法 1.监督学习方法 2.非监督学习方法(Baum-Welch算法) 五.预测算法 1.近似算法 2.维特比算法 (1)最优路径特性 (2)两个变量 (3)维特比算法流程 隐马尔科 ...

  10. 10_隐马尔科夫模型HMM1_统计学习方法

    文章目录 一.几个基本概念 1.隐马尔可夫模型 2.马尔科夫链 3.随机过程 4.马尔科夫性质 二.隐马尔科夫模型 1.隐马尔科夫模型的引入 2.隐马尔科夫模型定义 3.隐马尔科夫模型的两个假设 4. ...

最新文章

  1. Vue教程1 【Vue核心】
  2. python下载图片、已知url_python实现通过URL下载图片到本地服务器
  3. python中insert()函数的用法_Python list insert()用法及代码示例
  4. IOS FRAMEWORK,动态库 等几个问题
  5. Boost:符号symbols找到null的测试程序
  6. java机试 数据结构_来看看阿里面试的一面都面了些什么笔试+机试(java岗)
  7. oppo售后解锁恢复工具.zip_OPPO手机4个不为人知的小技巧,全知道的竟然不到1%,令人唏嘘...
  8. MacBook写代码真香!包邮送一台!
  9. gatsby_如何将静态Gatsby应用程序部署到Heroku
  10. java excel 晒新年操作_java操作Excel的poi 创建一个sheet页
  11. 苹果为 macOS 重大漏洞道歉;迅雷内讧股价暴跌;小米百度在一起 | 一周业界事
  12. Oracle常见操作和命令
  13. 如何更改spring源码_如何看Spring源码、Java每日六道面试分享,打卡第二天
  14. 这些中国扶贫路上的“组合拳”,你见过吗?
  15. 社群编码识别黑灰产攻击实践
  16. 爱分析·中国采购数字化行业趋势报告
  17. 恋爱计时:只要时间在走,我们的爱就在继续
  18. oracle 三表关联查询
  19. 机械结构_day12
  20. 正大国际:你所应该知道的外盘国际期货知识

热门文章

  1. js拖拽俄罗斯方块小游戏(一)
  2. php nts,wamp 环境中的nts php 配置方式
  3. 杨辉三角金字塔c语言编程,scratch编程绘制数字金字塔(杨辉三角)
  4. 《C陷阱与缺陷》第三章阅读笔记
  5. 谷歌地图显示服务器错误解决方法,谷歌地图API:内部服务器错误插入功能时
  6. 大数据应用统一集成平台CDAP简介
  7. Auto Encoder(AE),Denoising Auto Encoder(DAE), Variational Auto Encoder(VAE) 区别
  8. python requests的作用_requests session的作用
  9. django文件上传功能的实现
  10. 【蜂鸟E203的FPGA验证】Chap.8 Vivado综合与性能分析-Vivado性能分析