认识

跟 EM 算法的那部分是有些类似的思想, 引入 "隐变量" (Latent Variable).

对于观测样本:

\(x_1, x_2, x_3, ...x_n\)

存在相对应的 Latent 变量:

\(z_1, z_2, z_3, ...z_n\)

可以理解为观测值的另一种表示, 而且很难直观去观测到, 就像之前 EM 里面的扔硬币, 只能看到最后结果, 却不知道该结果是由哪个硬币产生 的.

在 HMM 中, 我们把 \(z_1, z_2, ...z_n\) 叫做 状态, 不同的状态, 生成对应的 观测值, 而状态之间是有一个状态转移(矩阵)

case 扔硬币

跟之前的 EM 一样的. 假设有2个硬币 A, B , 已知事件, 正面朝上的概率分别为 \(\mu_1, \mu_2\) 即:

\(A: \ P(正面) = \mu_1; \ p(反面) = 1-\mu_1\)

\(B: \ P(正面) = \mu_2; \ p(反面) = 1-\mu_2\)

现在开始扔硬币, 我们只能看到最终的结果, 却不知该结果是由哪个硬币产生的.

也不是乱扔, 扔也是有一定概率分布(状态转移)的, 只是不知道而已

我们重点关系如下几个问题:

  • 假设知道模型参数(就假设知道 z1->x1, z2-x1 的概率下, 如何通过 观测结果 反推 背后逻辑

Viterbi 算法 求解

  • 知道观测值, 如何进行参数估计 (此处就是通过 "正,反"的结果去估计 z 的转移概率和 \(\mu_1, \mu_2\)

可用前面的 EM 算法求解

  • 参数已知, 如何根据观测值去做 预测

预测

需求: 计算 \(p(正, 正, 正, 反, 正, 反)\)

求解: 考虑所有的状态 \(s\) , 即: \(\sum \limits_{s} p(正, 正, 正, 反, 正, 反 | s) p(s)\) => 可用DP算法求解 (动态规划)

硬币自身的产生"正面朝上" 的概率, 被称为 发射概率 (Emission Probability)

如何选择下一次扔哪个硬币的这个规律性 \(\theta\), 被称为 转移概率 (Transtion Probability)

还有最开始的一个状态, 嗯, 就叫初始状态 Initialization 吧

转移矩阵是要通过学出来, 通过EM算法来找出背后的逻辑呀

对于初始状态, 相当于第一实验, 有一个策略, 比如 0.7 概率会选择A, 0.3 概率选择B, 然后后面的则根据 \(\theta\) 参数来选择呀

可以发现, 核心的参数求解过程, 还是用的EM算法呀, 需求解出3个参数: 初始状态, 发射概率, 转移矩阵

case2 词性分析

其实我们每说一句话, 是有背后的词性逻辑的, 即语法. 只是我们平时并不关注而已, 但, 存在.

隐变量 : 主 + 谓 + 宾

观测值 : 我 + 想 + 你

  • 对于 隐变量, 即"主谓宾"的顺序, 是有规律的, 这个规律就是我们说的 状态转移矩阵

  • 而我们直接听到的是 "我想你"

于是 HMM 用在在词性分析上,

EM 部分, 所要做的事情是, 通过 我想你 这样的句子, 去 发现背后的 主谓宾词性规律

而预测部分则是, 通过算好的模型参数, 去生成新的句子.

感觉这不是就是在打造一个 聊天机器人吗

HMM 参数估计

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

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

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

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

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

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

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

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

最好的 Z 状态 - 枚举法

Z 就是隐变量.

前提条件是模型参数已知哦.

最能想到的一种方式, 就是枚举法, 将 所有可能的 z 都枚举出来, 选择最好的一个 z 状态.

什么是最好的状态, 就是 极大似然估计最大的参数呀

具体如何选择呢, 假设 z = 1, 1, 1, 1, 1 其实就是:

\(p(x, z) = [p(z_1 = 1)p(z_2 = 1|z_1=1)p(z_3=1|z_2=1)p(z_4=1 |z_3=1) p(z_5=1|z_4=1) ] \\ * [p(x_1 |z_1=1) p(x_2|z_2=1) p(x_3|z_3=1)p(x_4|z_4=1)p(x_5|z_5=1)]\)

同样, 简化一点哈, 假设 状态有3种, z = 1,3, 2则:

\(p(x, z) = [p(z_1=1)p(z_2=3 |z_1=1)p(z_3=2|z_2=3)] * [p(x_1|z_1=1)p(x_2|z_2=3)p(x_3|z_3=2]\)

....

最后选出最大的 状态 Z 即可呀. (有点像, 求给定 z 求最大的后验概率 \(p(z|x) = \frac {p(z,x)}{p(x)}\) 分母一样, 只关心 分子p(z, x)即可, 但涉及p(x)的计算很麻烦, 而我们目的是最大化 p(z|x) => 关注 p(z, x) 即可, p(x) 是不需要考虑的)

目标导向和数学思维才是最为重要的, 注, 此阶段是假定已经知道所有模型参数的情况下来求解哦

对于离散型的, 即一个状态对应 一个向量, 可用用 不同的(均值, 方差) 的高斯分布来进行估计 发射概率, 每一个状态就对应一个高斯分布而已. 参数是 \((\mu, \Sigma)\) 也都是学出来的 (就是模型的 B),

最好的 Z 状态 - Viterbi 算法

比之前的枚举还是要好一点, Viterbi 就是一个 动态规划算法.

​ z_1 z_2 z_3 z_4 z_5 z_6 z_n

1 x x x x x x x

2 a a x x x x x

j x x a a x a x

... x x x x a x a

m x x x x x x x

列就表示 我们要求解的状态, 行表示每个状态想的所有取值

这样来看, 其实我要求最好的 z 则 是去选择 z1 ... z_n 最好的 路径, 使得这个路径的值, 即联合概率 p(x, z) 是最大的

so, 这样问题就变成了, 寻找最优路径, 关于找路径, 可以用 动态规划算法求解的哦. 先定义个一变量:

\(\delta_k (j)\)

表示一开始从 状态 z_1 到 状态 z_k 且 z_k 取值为 第j 行的那个 节点的最好路径的值

\(\delta _{k+1} (j)\)

表示 z_(k+1) 最好的状态, 跟其前一个状态 z_k 的每个取值(行) 是有关联的, 一直往前这样去 分割问题

\(\delta _{k+1} (j) = max\) (

​ \(\delta_{k(1)} + log \ p(z_{k+1}=j | z_k=1)\),

​ \(\delta_{k(2)} + log \ p(z_{k+1}=j | z_k=2)\),

​ \(\delta_{k(3)} + log \ p(z_{k+1}=j | z_k=3)\),

​ ...

​ \(\delta_{k(m)} + log \ p(z_{k+1}=j | z_k=n)\),

)

其实每一项还有一个发射概率, 可以省略, 因为每行, 其实是一样的值呀

整个过程有点跟 XGBoost 有点像. 在计算 \(\delta_1 ....\delta_n\) 每后一下的行值, 都是由前一列的值来计算出来的, 这样一直从前往后的过程, 全部循环过后呢, (就很像是在按列填充一个二维表) .

最后的评估, 其实就是从最后一列值中选择最大的值, 及其所在的节点位置, 然后从后往前进行节点的 "溯源" 就完整地画出了最优路径了呀.

由此再从前往后写出最后的 z 答案 (假设上述的 a) 则: z = 2, 2, .j..j..j)

至此, 关于 HMM 的 inference 部分就求解结束, 然后, 是关于参数估计的部分推导.

HMM (隐马尔可夫) 推导 (上) - Viterbi算法求解 隐变量的更多相关文章

  1. 隐马尔可夫模型及Viterbi算法

    隐马尔可夫模型(HMM,hidden Markov model)是可用于标注问题的统计学模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型.HMM模型主要用于语音识别,自然语言处理,生物 ...

  2. 隐马尔科夫模型及Viterbi算法的应用

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4335810.html 一个例子: 韦小宝使用骰子进行游戏,他有两种骰子一种正常的骰子,还有一 ...

  3. HMM:隐马尔科夫模型-前向算法

    http://blog.csdn.net/pipisorry/article/details/50722376 目标-解决HMM的基本问题之一:已知HMM模型λ及观察序列O,如何计算P(O|λ)(计算 ...

  4. HMM:隐马尔科夫模型-维特比算法

    http://blog.csdn.net/pipisorry/article/details/50731584 目标-解决HMM的基本问题之二:给定观察序列O=O1,O2,-OT以及模型λ,如何选择一 ...

  5. 隐马尔可夫模型(HMM)及Viterbi算法

    HMM简介   对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳.那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑.   本文将通过具体形象的例子来引 ...

  6. Viterbi算法和隐马尔可夫模型(HMM)算法

    隐马尔可夫模型(HMM)及Viterbi算法 https://www.cnblogs.com/jclian91/p/9954878.html HMM简介   对于算法爱好者来说,隐马尔可夫模型的大名那 ...

  7. 隐马尔可夫模型(HMM)及Viterbi算法

    HMM简介 对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳.那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑. 本文将通过具体形象的例子来引入该模型 ...

  8. 隐马尔科夫模型(HMM)的概念

    定义隐马尔科夫模型可以用一个三元组(π,A,B)来定义:π 表示初始状态概率的向量A =(aij)(隐藏状态的)转移矩阵 P(Xit|Xj(t-1)) t-1时刻是j而t时刻是i的概率B =(bij) ...

  9. 隐马尔科夫模型(hidden Markov Model)

    万事开头难啊,刚开头确实不知道该怎么写才能比较有水平,这篇博客可能会比较长,隐马尔科夫模型将会从以下几个方面进行叙述:1 隐马尔科夫模型的概率计算法  2 隐马尔科夫模型的学习算法 3 隐马尔科夫模型 ...

  10. 隐马尔科夫模型(Hidden Markov Models)

    链接汇总 http://www.csie.ntnu.edu.tw/~u91029/HiddenMarkovModel.html 演算法笔记 http://read.pudn.com/downloads ...

随机推荐

  1. 当ABB机器人外部轴驱动器过流维修

    一.过流故障原因分析 电机负载异常 当ABB机器人外部轴驱动器所承受的负载超过其额定值时,电机需要产生更大的转矩以维持运行,从而导致电流增大.例如,在一些自动化生产线上,如果外部轴需要搬运的物品重量突 ...

  2. MySQL - [04] 分布式部署&主从复制&读写分离

    一.前言 Q1:为什么需要主从复制? 1.在业务复杂的系统中,有一条SQL语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务.使用主从复制,让主库负责写,从库负责读,这样即使主库出现了锁 ...

  3. maven - [02] settings.xml配置

    maven处理配置的优先级顺序 (1)全局settings.xml(优先级★☆☆☆☆) 位于Maven安装目录的conf/settings.xml,提供系统级的默认配置,比如本地仓库位置.远程仓库列表 ...

  4. Flink学习(十五) 滑动事件时间窗口加上水位线开始窗口时间如何确定?(底层源码)

    先看上一节的代码程序 package com.wyh.windowsApi import org.apache.flink.streaming.api.TimeCharacteristic impor ...

  5. LangChain大模型框架& Dify低代码 AI 开发平台

    目录 1. LangChain介绍 1.1 架构 1.2 概念 1.3 术语 1.4 LangChain实战 2. LLM 应用开发平台dify 2.1 dify安装 2.2 设置知识库 3. dif ...

  6. .netCore 使用 Quartz 实例

    一.参考源文链接 1.https://www.likecs.com/show-897836.html 2.https://blog.csdn.net/weixin_43614067/article/d ...

  7. 前缀函数和 KMP "跳步骤"模式匹配

    在一篇由字符构成的长文中查找另一个短字符串出现的位置,这可以算是编程领域最最常见的问题(比如按下 Ctrl + F 就可以打开你浏览器的查找功能).这个问题叫做字符串的模式匹配,我们把被查找的关键词叫 ...

  8. Windows 10 的 "邮件" 设置完成QQ账户,提示您的Qq帐户设置已过期的处置方法

    引起这问题的原因可能是QQ未开启 1.POP3/SMTP服务 2.IMAP/SMTP服务   开启方法: 1.登录QQ邮箱(mail.qq.com) 2.点击"设置"->&q ...

  9. 【前端JSP思考】JSP中#{},${}和%{}的区别

    JSP中#{},${}和%{}的区别: #{} #{}:对语句进行预编译,此语句解析的是占位符?,可以防止SQL注入, 比如打印出来的语句 select * from table where id=? ...

  10. sql数据库连接

    前言 作为数据存储的数据库,近年来发展飞快,在早期的程序自我存储到后面的独立出中间件服务,再到集群,不可谓不快了.早期的sql数据库一枝独秀,到后面的Nosql,还有azure安全,五花八门,教人学不 ...