【基础理论】隐马尔可夫模型及其算法

news2024/11/26 3:47:34

一、说明

        根据L.R Rabiner等人[1]的说法,隐马尔可夫模型是一个双重嵌入的随机过程,其潜在的随机过程是不可观察的(它是隐藏的),但只能通过另一组产生观察序列的随机过程来观察。

        基本上,隐马尔可夫模型 (HMM) 是观察一系列排放,但不知道模型生成排放所经历的状态序列的模型。我们分析隐马尔可夫模型,以从观察到的数据中恢复状态序列。听起来很混乱吧...

二、马尔可夫过程

2.1 马尔可夫模型和马尔可夫链

        要理解HMM,我们首先需要了解什么是马尔可夫模型。马尔可夫模型是一种随机模型,用于对伪随机变化状态进行建模。这意味着当前状态不依赖于以前的状态。最简单的马尔可夫模型是马尔可夫链。在这种情况下,当前状态仅取决于上一个状态。

马尔可夫链

2.2 什么是HMM和马尔可夫链......

        Rob 参加了一个游戏,在该游戏中,飞镖击中靶心后会颁发奖品。奖品保存在屏幕后面的 3 个不同的盒子(红色、绿色和蓝色)中。现在,分发奖品的人会根据他早上是否被堵在交通中来发放奖品。这些称为状态。现在,由于 rob 知道该地区交通的总体趋势,他可以将其建模为马尔可夫链。但是他没有任何关于交通的确切信息,因为他无法直接观察它们。他们对他是隐藏的。他也知道奖品将从绿色、红色或蓝色的盒子中挑选出来。这些称为观察。由于他无法观察到状态和观测结果之间的相关性,因此该系统是HMM的系统。

隐马尔可夫模型

2.2.1 转移概率

        转移概率是从一种状态移动到另一种状态的概率。在这种情况下,如果今天我们有流量,明天有 55% 的可能性会有流量,明天有 45% 的可能性没有流量。同样,如果我们今天没有流量,明天有 35% 的可能性没有流量,明天有 65% 的可能性会有流量。

2.2.2 排放概率

        它们是观察者可以观察到的输出概率。在这里,连接状态和观测值的概率是发射概率。

        HMM 在 python 中的表示

三、HMM的基本结构 

        正如我们之前所讨论的,隐马尔可夫模型具有以下参数:

  • 隐藏状态集(M)
  • 交易概率矩阵 (A)
  • 一系列观测值(t)
  • 发射概率矩阵(也称为观测似然)(B)
  • 参数的初始概率分布

3.1 HMM 的核心问题

  •         评估

        第一个问题是找到观察到的序列的概率。

  •         译码

        第二个问题是找到最可能的隐藏状态序列——维特比算法、正向-后向算法

  •         学习

        第三个问题是找到最大化观测数据可能性的参数——鲍姆-韦尔奇算法

3.2 关于HMM的假设

        马尔可夫假设

        由于HMM是马尔可夫模型的增强形式,因此以下假设成立:未来状态将仅依赖于当前状态。

它表示如下:

3.2.1 马尔可夫假设

        输出独立性

        输出观测值 (oi) 的概率仅取决于产生观测值的状态,而不取决于任何其他状态或任何其他观测值。它表示如下:

3.2.2 输出独立性

        前向算法

        让我们有一个简单的HMM,我们有两个隐藏的状态,它们代表一个城镇的天气,我们也知道一个孩子,他可以根据天气携带两样东西中的任何一个,一顶帽子和一把雨伞。孩子的物品与天气之间的关系由橙色和蓝色箭头显示。黑色箭头表示状态的过渡。

图片来源:作者

假设我们知道以下项目序列

一个序列

我们使用前向算法来查找观察到序列的概率,给定HMM的参数是已知的,即转移矩阵,发射矩阵和平稳分布(π)。

具有潜在隐藏状态的序列

        我们找到了所有可能的隐藏状态,这些状态可能导致我们进入这个序列。我们找到每个序列的累积概率。我们发现总共有 8 个这样的序列。现在计算每个序列的概率将是一项繁琐的任务。直接计算联合概率需要对所有可能的状态序列进行边缘化,其数量随着序列长度的增加呈指数增长。相反,前向算法利用隐马尔可夫模型的条件独立规则以递归方式执行计算。

序列的概率

序列的概率是隐藏状态的所有可能序列的总和,可以表示为上述。

递归地表示如下,其中 t 是序列的长度,s 表示隐藏状态。

概率的递归表达式

例如,如果 t=1,

现在,为了得到最终答案,我们找到每个隐藏状态的α t并将其相加。它表示如下:

前向算法的最终表达式

在前向算法中,我们使用当前时间步的计算概率来推导出下一个时间步的概率。因此,它在计算上更有效。

前向算法主要用于需要我们在知道观察序列时确定处于特定状态的概率的应用程序。我们首先计算为上一个观测值计算的状态的概率,并将其用于当前观测值,然后使用转移概率表将其扩展到下一步。该方法缓存所有中间状态概率,因此仅计算一次。这有助于我们计算固定状态路径。该过程也称为后验解码。

3.3 逆向算法

        后向算法是正向算法的时间反转版本。在逆向算法中,我们需要找到机器在时间步 t 处处于隐藏状态并生成序列剩余部分的概率。在数学上,它表示为:

3.4 正向-后向算法

        正向-后向算法是一种推理算法,用于计算所有隐藏状态变量(分布)。此推理任务通常称为平滑。该算法利用动态规划原理,高效计算两次获得后验边际分布所需的值。第一遍在时间上前进,而第二遍在时间上倒退;因此得名正向-后向算法。它是上面解释的正向和后向算法的组合。该算法计算给定 HMM 的观察序列的概率。该概率可用于对识别应用中的观察序列进行分类。

四、维特比算法

        对于包含隐藏变量的 HMM,确定哪个变量序列是某些观察序列最有可能的基础源的任务称为解码任务。解码器的任务是在有经过训练的模型和一些观察到的数据时找到最佳隐藏序列。更正式地说,给定作为输入 a 作为 A 和 B 和一个观察序列 O = o₁, o₂, ..., ot,找到最可能的状态序列 S = s₁, s₂, . . . .圣。

        我们当然可以使用前向算法来找到所有可能的序列,并在最大可能性上选择最好的序列,但这无法做到,因为存在指数级数量的状态序列。

        与前向算法一样,它估计 vt(j) 在看到第一个 t 观测值并通过最可能的状态序列 s₁、s₂、. .圣。每个单元格 vt( j) 的值是递归计算的,采用可能将我们引向该单元格的最可能路径。形式上,每个单元格表示以下概率

        我们可以通过一个例子更好地理解这一点,

五、HMM 模型

        假设我们有一个 HMM 模型,如图所示。我们总是从太阳(x),云(y)开始,以雪(z)结束。现在,您已经观察了前向算法问题中的序列。生成此路径的最可能的序列是什么?

        选项包括:

手动计算

在这种情况下,粗体路径是维特比路径。当您从上一个状态返回时,您可以看到这一点:0.3*0.4*0.136 > 0.7*0.4*0.024

同样,0.4*0.5*0.4 > 0.7*0.4*0.2

因此,最可能的序列是 xxyz。

请注意,可以有多个可能的最佳序列。

由于每个状态仅取决于之前的状态,因此您可以逐步获得最可能的路径。在每一步中,您都会计算最终进入状态 x、状态 y、状态 z 的可能性。在那之后,你是如何到达那里的并不重要。

六、鲍姆-韦尔奇算法

        该算法为“在什么参数化下观察到的序列最有可能?

        鲍姆-韦尔奇算法是期望最大化(EM)算法的一个特例。它利用前向-后向算法来计算特定步骤的统计信息。其目的是调整HMM的参数,即状态转移矩阵,发射矩阵和初始状态分布。

  • 从过渡和发射矩阵的随机初始估计开始。
  • 计算每个跃迁/发射的使用频率的预期。我们将估计潜在变量 [ ξ, γ ]
  • 根据这些估计值重新计算跃迁和发射矩阵的概率。
  • 重复直到收敛

潜在变量γ的表达式

γ是给定观察到的序列 Y 和参数 theta 时处于状态 i 的概率

潜在变量 ξ 的表达式

ξ 是给定观察到的序列 Y 和参数 theta 时处于状态 i,j 的概率

参数 (A, B) 更新如下

更新 A 或转换矩阵

更新 B 或发射矩阵

七、HMM的优势

  • NLP中使用的HMM标记器训练起来非常简单(只需要从训练语料库中编译计数)。
  • 性能相对较好(命名实体的性能超过 90%)。
  • 它消除了标签偏差问题
  • 由于每个 HMM 仅使用正数据,因此它们可以很好地扩展;因为可以在不影响学习的 HMM 的情况下添加新单词。
  • 我们可以初始化模型,使其接近被认为是正确的。

八、HMM的缺点

  • 为了定义观察和标签序列的联合概率,HMM需要枚举所有可能的观察序列。
  • 表示多个重叠要素和长期依赖关系是不切实际的。
  • 要评估的参数数量巨大。因此,它需要一个大型数据集进行训练。
  • HMM,训练涉及最大化属于类的示例的观察到的概率。但它并没有最小化观察其他类实例的概率,因为它只使用正数据。
  • 它采用了马尔可夫假设,该假设不能很好地映射到许多现实世界的域

九、隐马尔可夫模型在哪里使用?

  • 分析生物序列,特别是DNA[2]
  • 时间序列分析
  • 手写识别
  • 语音识别[1]

如果您想阅读有关该主题的更多信息,请提供一些链接:

  1. https://youtube.com/playlist?list=PLM8wYQRetTxBkdvBtz-gw8b9lcVkdXQKV
  2. https://www.cs.cmu.edu/~aarti/Class/10701_Spring14/slides/HMM.pdf

参考和引用

[1] L. R. Rabiner,“隐马尔可夫模型教程和语音识别中的选定应用”,载于 IEEE 论文集,第 77 卷,第 2 期,第 257–286 页,1989 年 10 月,doi:1109.5/18626.2。
[22]什么是隐马尔可夫模型?Nat Biotechnol 1315, 1316–2004 (10).https://doi.org/1038.1004/nbt1315-<>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/794404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习之线性判别分析(Linear Discriminant Analysis)

1 线性判别分析介绍 1.1 什么是线性判别分析 线性判别分析&#xff08;Linear Discriminant Analysis&#xff0c;简称LDA&#xff09;是一种经典的监督学习算法&#xff0c;也称"Fisher 判别分析"。LDA在模式识别领域&#xff08;比如人脸识别&#xff0c;舰艇识别…

解决报错Avoid using non-primitive value as key, use string/number value instead.

找到图中画圈的文件这个错误信息的意思是要避免使用非基本值作为键&#xff0c;而是使用字符串/数字值代替。 [1] 这个错误通常出现在使用<el-select>中的<el-option>进行循环遍历值时。 [2] 这个错误的解决方案是检查是否有重复的键值&#xff0c;并确保使用字符…

C++ 引用(别名)

1.引用变量的定义&#xff1a; 类型&引用变量名称变量名称&#xff1b; &和类型结合称之为引用符号&#xff0c;不是取地址符&#xff0c;而是代表别名的意思。 #include<iostream> using namespace std; int main() {int a 10; //定义一个整型变量a并初始化为…

Java 实现提取富文本中包含特定字符串的图片 src 属性值

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

数据库触发器简介——修改数据的触发器、删除数据的触发器

1.修改数据的触发器 修改数据的触发器 create trigger tb_user_update_triggerafter update on tb_user for each row begininsert int user_logs(id,operation,operate_time,operate_id,operate_params)VALUES(null,update,now(),new.id,concat(更新之前的数据&#xff1a;i…

2023年的深度学习入门指南(20) - LLaMA 2模型解析

2023年的深度学习入门指南(20) - LLaMA 2模型解析 上一节我们把LLaMA 2的生成过程以及封装的过程的代码简单介绍了下。还差LLaMA 2的模型部分没有介绍。这一节我们就来介绍下LLaMA 2的模型部分。 这一部分需要一些深度神经网络的基础知识&#xff0c;不懂的话不用着急&#xf…

工厂方法模式——多态工厂的实现

1、简介 1.1、概述 在工厂方法模式中&#xff0c;不再提供一个统一的工厂类来创建所有的产品对象&#xff0c;而是针对不同的产品提供不同的工厂&#xff0c;系统提供一个与产品等级结构对应的工厂等级结构。 1.2、定义 工厂方法模式&#xff08;Factory Method Pattern&am…

与 ChatGPT 进行有效交互的几种策略

在这篇文章中&#xff0c;您将了解即时工程。尤其&#xff0c; 如何在提示中提供对响应影响最大的信息什么是角色、正面和负面提示、零样本提示等如何迭代使用提示来利用 ChatGPT 的对话性质 废话不多说直接开始吧&#xff01;&#xff01;&#xff01; 提示原则 快速工程是有…

跃焱邵隼网站demo

xdm 网站的代码开源了。 今年迷上摄影和剪辑了&#xff0c;所以很少投入到网站的维护。 然后经过群友的一些反馈&#xff0c;所以决定 将网站上demo开源放出来了。 后面有机会再出一些好玩的东西。 哦 对了 3d 编辑器我已经融入地图了 年底搞一些好玩的东西出来。 可以关注…

常用的镜像命令

docker images 列出本地主机上的镜像 各个选项说明: REPOSITORY&#xff1a;表示镜像的仓库源 TAG&#xff1a;镜像的标签版本号 IMAGE ID&#xff1a;镜像ID CREATED&#xff1a;镜像创建时间 SIZE&#xff1a;镜像大小 同一仓库源可以有多个 TAG版本&#xff0c;代表这个仓…

EtherNet/IP转 Modbus网关实现AB PLC控制变频器案例

捷米特JM-EIP-RTU网关 Modbus转ETHERNET/IP用于将多个变频器连接到Ethernet/Ip主网&#xff0c;以便森兰变频器可以由AB PLC控制。 配备专用于JM-EIP-RTU网关的EDS文件&#xff0c;AB PLC主站可以控制森兰逆变器从站。 使用 AB 系统的配置方法 1&#xff0c; 运行 RSLogix 500…

复习之linux存储的基本管理

一、实验环境的设定 1. 实验环境的搭建 本节内容只需要一台虚拟机 westosa reset重置虚拟机&#xff0c;保证实验环境的纯净配置网络实现ssh连接 重置虚拟机后&#xff0c;配置网络&#xff0c;设定ip&#xff1a;172.25.254.100&#xff0c;保证与主机可以通信 实现ssh连接…

代码随想录day13 | 226.翻转二叉树 101.对称二叉树

文章目录 一、翻转二叉树二、对称二叉树 一、翻转二叉树 使用前、后序反转最为方便。 // 使用递归三部曲 class Solution { public:TreeNode *dfs(TreeNode *root){// 前序反转if (root nullptr)return root;swap(root->left, root->right);dfs(root->left);dfs(ro…

三子棋(超详解+完整码源)

三子棋 前言一&#xff0c;游戏规则二&#xff0c;所需文件三&#xff0c;创建菜单四&#xff0c;游戏核心内容实现1.棋盘初始化1.棋盘展示3.玩家下棋4.电脑下棋5.游戏胜负判断6.game&#xff08;&#xff09;函数内部具体实现 四&#xff0c;游戏运行实操 前言 C语言实现三子棋…

TEE GP(Global Platform)认证规范

TEE之GP(Global Platform)认证汇总 一、GP认证规范库 二、TEE GP认证规范文档 如果需要TEE对应的GP认证规范文档&#xff0c;请按照下方选择框选择TEE&#xff0c;然后Search&#xff0c;共查询到31个相关规范文档。 参考&#xff1a; GlobalPlatform Certification - Global…

利用python实现自增填充和脚本批量解压文件

和学弟整理学校档案 因为这个方法只用了一下午就干完了 净赚&#xffe5;300 写文章记录一下 需求分析 我要储存很多个文件(几万个文件) 而且要按照文件的顺序进行排序的编号 目的是解放一下双手只用简单的ctrl cv实现命名的自增 如果没有库的话就pip install 库名 import t…

第一启富金:美联储决议及讲话来袭、黄金不改趋势性看涨前景

第一启富金基本面分析&#xff1a; 中国纸黄金交易通显示&#xff0c;全球最大黄金上市交易基金(ETF)截至07月22日持仓量为919.00吨&#xff0c;较上日增持5.20吨&#xff0c;本月止净减持2.90吨。 周二美国公布的7月消费者信心指数为117&#xff0c;远高于预期的111.8&#xf…

Docker Compose介绍及部署

Docker Compose介绍及部署 一、Docker Compose介绍&#xff1a;1、Compose简介2. YAML 文件格式及编写注意事项3. YAML数据结构 二、Docker Compose部署1、 Docker Compose 环境安装2.、Docker Compose配置常用字段3、Docker Compose 常用命令4、Docker Compose 文件结构编写配…

第五章:通过对抗擦除的目标区域挖掘:一种简单的语义分割方法

0.摘要 我们研究了一种逐步挖掘具有鉴别性的物体区域的原则方法&#xff0c;使用分类网络来解决弱监督语义分割问题。分类网络只对感兴趣对象中的小而稀疏的鉴别性区域有响应&#xff0c;这与分割任务的要求相背离&#xff0c;分割任务需要定位密集、内部和完整的区域以进行像素…

C#——多线程之Task

C#——多线程之Task 前言一、Task是什么&#xff1f;二、各应用场景以及实例分析1.异步执行代码2.等待异步操作完成3.并行执行多个任务4.处理异常5.取消异步操作 三、一些其他问题1.WhenAll与WhenAny的区别 总结 前言 在代码编写过程中&#xff0c;经常会用到多线程的知识&…