HMM (隐马尔可夫) 推导 (下) - 参数估计 (EM)

HMM (隐马尔可夫) 推导 (下) - 参数估计 (EM)

回顾 HMM

上篇介绍了HMM这样的一种时序类模型, 即描述了一些观测现象的产生, 是由我们很难观测到的 "隐变量因子", 产生的, 同时这些隐变量因子之间的变化也有一个状态转移概率的过程.

HMM 的推导过程, 也就两个部分, Z 过程 (推断过程) 和 Estimation(参数估计)过程.

上篇对于 Z 过程, 有通过类似于 枚举法 和 一种 DP (动态规划) 算法来求解最好的 Z, 其前提假设是模型的参数 (初始状态, 状态转移概率矩阵, 发射概率) 已知 下来求解的. 嗯. 推导思路过程有点类似之前的 XGBoost 算法, 也是先假定, 再推导, 在证明假设前提这样的套路, 过程又用到了 EM算法来求解.

如果我是面试官, 问HMM, 这相当于将 EM 和 DP 算法 同时问了, 这样的问题就很有质量哦.

12月底恰好tableau老铁跟我分享动态规划,果然数学系就是不一样, 用爬n阶楼梯来说明, 斐波那契数. DP的核心思想就是将问题规模不断缩小求解, 不同于递归哈, 后面可以单独举个 DP 栗子.

so, 本篇就来整一波, 如何进行参数求解.

\(\theta = (\pi, A, B)\)

假设有5个状态, 同样是扔2个硬币

\(\pi\) 表示初始状态, 如: \(\pi = [0.8, b, c, d, e]\)

A 表示两个状态的转移矩阵; 是一个 5x5 的方阵

B 表示发射概率 (隐含规则->观测的概率值); 是一个 5x2 的矩阵

如果是词性分析, 则矩阵就非常大了, 如果观测是连续型 则需要用 概率分布来描述了.

对于, HMM, 要求解出这3个参数, 主要有两个步骤, 或者说是2个关键点:

  • 给定模型的参数, 找出最适合的 Z => Inference (推断过程)
  • 估计模型参数的 \(\theta\) => Parameter Estimation (估计过程)

Complete VS lncomplete "Z"

Z 就是隐变量, X 是对应的观测值.

  • X 已知, Z 已知, 则通过简单的 频率 统计即可求解出参数
  • X 已知, Z 未知, 则通过 EM 算法求解. (E 步更新发射概率, M 步更新参数值, 这样循环交替直到收敛, 即得参数

发射概率

就是 隐变量 z1 -> x1 (观测值) 的概率. 可参考EM篇的扔硬币, 上帝视角, 事先知道 试验结果是由 哪个硬币产生的, 或知道概率. (如第1次是 "正", 我知道有 70% 概率来自 A 硬币, 30%概率来自 B硬币, 这个概率矩阵 [0.7, 0.3] 就是 发射概率)

转移概率

描述状态之间的变化规律. 如还是扔硬币, 每次对 A, B 硬币的选择策略不同, 如 AAB, ABA ... 的场景, 可通过转移概率矩阵来描述.

ps: 老铁昨天问我是数论强, 还是分析强...嗯, 我只想说, 作为文科生(商科), 只是熟练使用数学工具而已....

另外想分享一点工具论, 在我眼里, 数学符号, 公式, 代码, 其实本质都是一样的, 就是一个靠谱的工具, 目标都是为了对现实世界的另一种刻画. 当然世界很大, 可以感性认知, 也可理性认知, 探索的过程是其乐无穷的. 我感觉自己内心还是一个文艺青年的特征, 追求内心的感受, 也有故作伤春悲秋....不说这些了..

Complete "Z"

假设有 3个观测样本, Z 是已知时:

s1:

z : 1, 1, 2, 2, 2, 3

x : a, b, a, c, c, b

s2:

z : 2, 1, 3, 3, 2

x : a, a, c, b, a

s3:

z : 1, 1, 3, 2

x : b, a, a, c

在 z 已知道的这种 上帝视角 下, 求解 参数 (初始状态, 状态转移矩阵, 发射概率) 就是词频统计, 然后归一化作为概率值 , 非常容易的.

为了方便简单演示, 假设样本空间 就是上面这3个样本, 观测值和其隐变量状态都是已知的.

首先来估计 \(\pi\) (初始状态) 即每一个样本(向量 1x3) 的第一状态分量的频数统计, (约定先行后列哦)

状态1 状态2 状态3
频次 2 1 0

然后再 归一化 得到 初始状态 (向量) :

\(\pi = [\frac {2}{3}, \frac {1}{3}, \frac {0}{3}]\)

接着来估计 A (状态转移矩阵), 状态与状态间的, 即 3x3 的矩阵. 同时, 状态要 横向来看, 统计是 先行后列

---> 状态1 状态2 状态3
状态1 2 1 2
状态2 1 2 1
状态3 0 2 1

按行 进行归一化即可得到概率 (严格来说, "频率" 应该更适合, 但我们通常都是用 样本估计总体, 也说得通哈)

---> 状态1 状态2 状态3
状态1 2/5 1/5 2/5
状态2 1/4 2/4 1/4
状态3 0/3 2/3 1/3

最后来估计 B (发射概率矩阵), 即每个状态下, 每个观测值的概率, 即可 3x3 的矩阵 (统计也是约定, 先行后列哈)

---> a b c
状态1 3 2 0
状态2 3 0 3
状态3 1 2 1

同样 按行 做归一化可得到 发射概率矩阵 B:

---> a b c
状态1 3/5 2/5 0/5
状态2 3/6 0/6 3/6
状态3 1/4 2/4 1/4

因此, 在已知 Z 的情况下, 要做的就是直接统计出了 模型的参数: 初始概率状态(向量), 状态转移概率 (矩阵), 发射概率 (矩阵). 站在上帝视角, 果然爽歪歪. 此处突然想到了基本经济社会问题. 就是, 你所掌握资源越多, 就越有发言权, 做事情成功的概率必然很大和相对轻松.

Incomplete "Z"

而我们身处的现实世界, 几乎是没有上帝视角的. 它只存在于理论的乌托邦世界. 于是在现世的洪流, 我们通常只是看到 观测到的现象, 而无法得知现象背后的上帝,是如何扔骰子的, 即便如此, 我们依旧去进行一个逼近, 利用智慧, 嗯, 说得有高大上, 这里其实就用到 EM 算法来进行一个参数估计即可.

\((x, z) - 简单统计 - \theta\) 而,

$ (x, ) - how - \theta$

F/B 算法 ( Forward And Backward)

就要要计算出 \(p(z_k | x)\) 即 在 给定 x 的情况下, 可以计算 任意时刻状态下的 z 的期望

通过 F/B 算法, 可以计算出: \(p(z_k = 1 |x), p(z_k = 2 |x), ....p(z_k = m |x)\)

也就是说, 通过 观测 X, 计算出了 Z, 然后简单统计则可 估计出模型的参数, 再来捋一波条件

  • F / B : \(p(z|x)\)
  • Forward : 用来计算 \(p(z_k | x_{1...k})\)
  • Backward : 用来计算 \(p(x _{k+1, ...n} | z_k)\)

如何将它们关联起来呢, , 涉及条件概率, 同时也会想到贝叶斯公式 呀.

\(p(z_k|x) = \frac {p(z_k, x)}{p(x)}\)

这里的 x 表示所有的 n 个样本嘛, 因此为了和 F, B 产生联系, 可以将 x 进行划分 (展开).

\(p(z_k, x) = p(z_k, x_{1...k}, x_{k+1...n})\)

\(=p(z_k, x_{1...k}) \ p(x_{k+1...n} | z_k, x_{1..k})\)

可以省略掉 \(x_{1...k}\) 考虑条件独立的情况下, 其对条件概率是没有影响的.

\(=p(z_k, x_{1...k}) \ p(x_{k+1...n} | z_k)\)

为啥是 条件独立成立?

因为, directional separation 性质: (嗯, 就可理解为条件独立的一种更高级的一个性质), 用处就是帮助我们来判断多个变量中, 有哪一些变量之间, 是有条件独立的性质的, 或者是把很多的变量看作一个集合.

我们在谈条件独立的时候, 通常是以单个变量来参照的. 然而涉及多个变量, 则需用的 D-separation 性质了呀. 嗯....举个栗子, 假设我有两波变量, 然后通过 D-separation 性质, 可以帮我们判断, 其中一波变量, 是否对其条件概率产生了影响. 算是一个更加泛化的一个条件独立性质.

在本例中, 我们把 X, 拆分成了 \(x_{1...k-1}, \ x_k, \ x_{k+1...n}\) 在 D-separation 性质中, \(x_k\) 这个分割点被称为 Block , 如果当 存在变量 (可以多个) x - Block - y 且指向关系是 x -> Block -> y 的时候, 则可以认为, x(变量集合) 是条件独立于 Block 的. 因此可以省略掉. (具体 D-separation 性质证明, 后面再补一波百度吧, 先用上再说)

最终 \(p(z_k, x) = p(z_k, x_{1...k}) \ p(x_{k+1...n}|z_k)\) 即通过计算 Forward 和 Backward 完成最终求解.

重要信息,再重复一遍: 我们为了计算 \(p(z|k)\) 其实只需要计算出 Forward 和 Backward 即可, 这也就是 通过 X 计算出了 Z, 从而依上 complete 的简单统计, 求解出模型参数

然后关如何去定义 Z 的个数, 其实是一个超参数, 有点类似于 EM算法中, 最开始 E部的初始值, 人工可以根据经验来控制的.

小结

然后好像有点大篇幅的在弄 F/B 算法, 而开篇主要想阐明参数估计的核心是 EM算法, 那体现在何处呢? 我们捋一波求解参数的过程:

首先, 我们是要通过在给定 X 的情况下, 求解出 Z 的期望, 这个求解过程用到了 F/B 算法;

其次, 我们通过已知 (X, Z) 来求解出了参数 \(\theta\)

这, 不就是 EM 算法的 E步 和 M 步了呀.

最后, 其实还遗留了一个问题, 就是如何求解 F/B 嗯, 想一波先. 框架是没问题了, 这就跟写代码一样, 逻辑结构, 模块划分已经搭起来了, 然后就是慢慢去找别人的代码来复制粘贴的过程, 先想一波哈.

原文地址:https://www.cnblogs.com/chenjieyouge/p/12113576.html

时间: 2024-08-30 14:41:19

HMM (隐马尔可夫) 推导 (下) - 参数估计 (EM)的相关文章

HMM隐马尔科夫模型

马尔科夫过程 在概率论及统计学中,马尔可夫过程(英语:Markov process)是一个具备了马尔可夫性质的随机过程,因为俄国数学家安德雷·马尔可夫得名.马尔可夫过程是不具备记忆特质的(memorylessness).换言之,马尔可夫过程的条件概率仅仅与系统的当前状态相关,而与它的过去历史或未来状态,都是独立.不相关的. 一个马尔科夫过程是状态间的转移仅依赖于前n个状态的过程.这个过程被称之为n阶马尔科夫模型,其中n是影响下一个状态选择的(前)n个状态.最简单的马尔科夫过程是一阶模型,它的状态

复习NLP-实战(七)----HMM隐马尔科夫模型

直接入正题吧,不想等了 第七章 HMM隐马尔科夫模型 1.马尔科夫模型 状态转移矩阵 一阶马尔科夫模型: (1)状态 (2)状态转换概率 (3)初始概率 2.隐马尔可夫模型 观察状态 和 隐藏状态(需要得到的),他们并不是一一对应的关系. 原文地址:https://www.cnblogs.com/maowuyu-xb/p/11540009.html

【转】Matlab的HMM(隐马尔可夫模型)相关函数介绍

声明:本文主要介绍Matlab2011b中 Statistics Toolbox工具箱里与隐马尔科夫模型相关的函数及其用法(请勿与其它HMM工具箱混淆).本文的主要内容来自Matlab 2011b的帮助文档,为作者自学笔记.水平有限,笔记粗糙,本着"交流探讨,知识分享"的宗旨,希望对HMM感兴趣的同学有些许帮助,欢迎指教,共同进步. 变量说明: 设有M个状态,N个符号Markov模型. TRANS:对应状态转移矩阵,大小为M*M,表示各状态相互转换的概率,TRANS(i,j)表示从状态

一日一算法之(2)隐马尔可夫模型(2)

关于隐马尔科夫模型,这是知乎上得赞最多的回答,感觉非常有趣,特转载于下,方便时时回顾. 作者:Nong Bloody 链接:http://www.zhihu.com/question/20962240/answer/33561657 来源:知乎 1. 赌场风云(背景介绍) 最近一个赌场的老板发现生意不畅,于是派出手下去赌场张望.经探子回报,有位大叔在赌场中总能赢到钱,玩得一手好骰子,几乎是战无不胜.而且每次玩骰子的时候周围都有几个保镖站在身边,让人不明就里,只能看到每次开局,骰子飞出,沉稳落地.

隐马尔可夫模型的前向算法(java实现),今天奉上

隐马尔可夫模型的前向算法(手动实现),今天奉上,由于研究生期间,实现的时候没有多加注释,这里为了让更好的人进入自然语言处理领域,特此,将前向算法奉上,具体公式可参考52nlp的HMN系列博客. 参考了大部分网站公式和借鉴.在此表示感谢. 后向算法和维特比算法,后续更新. HMM类: 1 package jxutcm.edu.cn.hmm.model;  2   3 import jxutcm.edu.cn.hmm.bean.HMMHelper;  4   5 /**  6  * 实现了 HMM(

理论沉淀:隐马尔可夫模型(Hidden Markov Model, HMM)

理论沉淀:隐马尔可夫模型(Hidden Markov Model, HMM) 参考链接:http://www.zhihu.com/question/20962240 参考链接:http://blog.csdn.net/ppn029012/article/details/8923501 本博文链接:http://www.cnblogs.com/dzyBK/p/5011727.html 1 题设 假设有n个骰子(从1~n编号),每个骰子有m面,每面标有一个数字且不重复,数字取值限制在[1,m].(1

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

隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列(TODO) 在本篇我们会讨论HMM模型参数求解的问题,这个问题在HMM三个问题里算是最复杂的.在研究这个问题之前,建议先阅读这个系列的前两篇以熟悉HMM模型和HMM的前向后向算法,以及EM算法原理总结,这些在本篇里会用到.在李航的<统计学习方法>中,这个算法的讲解只考虑了单个观测

隐马尔科夫模型HMM

隐马尔科夫模型HMM 作者:樱花猪 摘要: 本文为七月算法(julyedu.com)12月机器学习第十七次课在线笔记.隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔科夫过程.其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来作进一步的分析.在早些年HMM模型被非常广泛的应用,而现在随着机器学习的发展HMM模型的应用场景越来越小然而在图像识别等领域HMM依然起着重要的作用. 引言: 隐马尔科夫模型是马尔科夫链的一种,它

理解隐马尔科夫(HMM)模型

前言 在李航的<统计学方法>第十章有对隐马尔科夫模型(Hidden Markov Model,HMM)比较详细的介绍和推导公式,我参考公式结合中文分词应用实现了隐马模型观测序列的生成.前向算法.维特比算法. 本文在此针对HMM模型在中文分词中的应用,讲讲实现原理.我尽可能的撇开公式,撇开推导.结合实际开源代码作为例子,争取做到雅俗共赏,童叟无欺. 没有公式,就没有伤害. 理解一个算法,我认为需要做到:会其意,知其形.本文回答的,其实主要是第一点.但是这一点呢,恰恰是最重要,而且很多书上不会讲的