隐马尔可夫模型

目录

1. 通信系统

2. 各种“马尔可夫”们

2.1 马尔可夫假设

2.2 马尔可夫链

2.3 隐马尔可夫模型

2.3.1 将隐马尔可夫模型应用于解码问题

2.3.2 如何训练隐马尔可夫模型

2.3.2.1 有监督的训练

2.3.2.2 无监督的训练


1. 通信系统

通信的本质就是一个【编码+传输+解码】的过程。典型的通信系统具有六大要素:发送者(信息源)、信道、接收者、信息、上下文、编解码。这六大要素关系如下所示:

其中 s_1, s_2, s_3... 表示发送者发出的原始信息,o_1, o_2, o_3, ... 表示将 s_1, s_2, s_3... 编码后的信息,接收者则要用特定的解码方式将 o_1, o_2, o_3, ... 还原成 s_1, s_2, s_3... 。上面这个通信系统表示的过程本质上就是自然语言处理的过程。

那如何才能成功解码呢?将 o_1, o_2, o_3, ... 解码成 s_1, s_2, s_3... 的过程,其实就是寻找能让这个条件概率 P(s_1, s_2, s_3, ... | o_1, o_2, o_3, ...) 达到最大值的 s_1, s_2, s_3... 用数学公式表达这个意思如下所示:

我们利用贝叶斯公式将这个条件概率展开,得:

其中,P(o_1, o_2, o_3, ...) 表示接收端收到 o_1, o_2, o_3, ... 的概率,这在真实场景中是一个可以被忽略的常数项(因为一旦需要启动解码 o_1, o_2, o_3, ... 的工作,就证明这个编码信息已经存在了,完全消除不确定性了)P(s_1, s_2, s_3...) 表示 s_1, s_2, s_3... 是一段合乎情理的有意义的话的概率。

因为 P(o_1, o_2, o_3, ...) 是一个常数,因此后续我们只要考虑分子的大小就行:

那如何估计上面的概率值呢?这个时候,就得请出隐马尔可夫模型(Hidden Markov Model)了。

2. 各种“马尔可夫”们

首先声明下,“隐马尔可夫模型”并非是19世纪俄罗斯数学家马尔可夫(Andrey Markov)提出的,而是由美国数学家鲍姆(LeonardE.Baum)等人在20世纪六七十年代提出的。之所以被称为“隐马尔可夫模型”,是因为这个模型是基于马尔可夫假设提出的。

2.1 马尔可夫假设

马尔可夫假设,听起来感觉高大上,但其实它描述了一个非常直观的概念。想象一下,我们要预测明天的天气“是晴还是雨”。马尔可夫假设就是说,明天的天气只与今天的天气有关,而与前天及以前的天气无关。

用更专业的语言来说,马尔可夫假设认为在给定时间段内,一个系统的未来状态只取决于它的当前状态,而与它过去的状态无关。这就像是在一个迷宫中,你只需要知道你现在在哪里,就可以推测出下一步应该往哪里走,而不需要关心你之前是怎么走到这里的。可以用下面的数学公式来表示马尔可夫假设:

即当前的状态 s_t 的出现概率只与前一个状态 s_{t-1} 直接相关,而与更早的状态无关。

2.2 马尔可夫链

马尔可夫链,简单来说,就是一系列遵循马尔可夫假设的随机事件或状态。这些事件或状态按照时间顺序排列,形成一个链条。在这个链条中,每个事件或状态的发生概率只取决于前一个事件或状态。作者举了如下一个简单的马尔可夫链:

其中 s_1=m_1,s_2= m_2, s_3=m_3, s_4=m_4  分别表示4种不同的状态,每条带有箭头的有向线段表示一种状态转变,线段上的数字表示转移概率。比如状态 m_2 后面有两条转化路径,一条是转化到状态 m_4 ,概率为0.4;另一条是转化到状态 m_3 ,概率为0.6。

2.3 隐马尔可夫模型

有些情况下,上面的状态 s_1=m_1,s_2= m_2, s_3=m_3, s_4=m_4  并不能直接观察到,能看到的则是与这些状态息息相关的信号 o_1, o_2, o_3, ... 。为了简化问题,统计学家们提出了“独立输出假设”,指在每个时刻 t ,模型会输出一个符号 o_t ,而且 o_t 跟 s_t 相关且仅跟 s_t 相关。如下图所示,作者展示了一个简单的隐马尔可夫模型:

简而言之,可以将【隐马尔可夫模型】看做是【马尔可夫假设】+【独立输出假设】结合的产物。

2.3.1 将隐马尔可夫模型应用于解码问题

请注意,上图中表示的隐马尔可夫模型,本质上能够表达一种映射关系(即原文 s_1, s_2, s_3, ...与其编码后的 o_1, o_2, o_3, ... 的映射关系),正因为这个特性,隐马尔可夫模型可被用于通信的解码问题,即我们可以计算出信息源发出某个特定的消息序列 s_1, s_2, s_3, ... 产生出特定的符号序列 o_1, o_2, o_3, ... 的概率,其数学公式的表达形式如下:

其中:

大家是不是觉得眼熟?是的,上面的公式正是通信系统的解码过程中的目标函数,目的就是找到使P(s_1, s_2, s_3, ... , o_1, o_2, o_3, ...) 值最大时对应的原文句子 s_1, s_2, s_3, ... 。隐马尔可夫模型给我们提供了一个简单易行的估计 P(s_1, s_2, s_3, ... , o_1, o_2, o_3, ...)  值的方法,但至于如何能快速找到最大的 P 值,就得利用维特比算法(Viterbi Algorithm)了,这里面的细节我们会在后面的读书笔记中介绍。

2.3.2 如何训练隐马尔可夫模型

作者提出,围绕隐马尔可夫模型有三个基本问题:

1)如何计算给定模型下特定输出序列 o_1, o_2, o_3, ... 的概率?
2)如何找到给定模型和特定输出序列下最可能的状态序列 s_1, s_2, s_3, ... ?
3)如何利用大量观测数据来估计隐马尔可夫模型的参数?

问题一最简单,这通常通过前向算法(Forward Algorithm)或后向算法(Backward Algorithm)来计算,就类似于初中求解概率值的问题。

问题二就用前面的提到的维特比算法进行求解,这个后续章节会介绍。

问题三就涉及到如何训练隐马尔可夫模型的问题了。通常,隐马尔可夫模型的参数主要有两个:

1)转移概率:从前一个状态 s_{t-1} 转移到下一个状态 s_t 的概率,即 P(s_t|s_{t-1}) 。

2)生成概率:每个状态 s_t 产生输出符号 o_t 的概率,即 P(o_t|s_t) 。

现在参数明确了,接下来的问题就是如何去估计这两个参数。

2.3.2.1 有监督的训练

将 P(s_t|s_{t-1})  和 P(o_t|s_t) 用贝叶斯公式展开,得:

如果我们有足够多的人工标注数据,就能数出状态 s_t 出现的次数 \#s_t,再统计出状态 s_t 输出符号 o_t 的次数 \#(s_t, o_t) ,最后相除,即可估算出上面参数之一的生成概率 P(o_t|s_t) 的值:

至于转移概率 P(s_t|s_{t-1}) 的估算,对前面几章读书笔记还有印象的同学应该能反应过来,这个其实表示的就是统计语言模型。因此,基于训练语料库,可以用下面的公式进行估计:

尽管有监督的训练方法因其直接性而易于理解,但其核心挑战在于高质量的人工标注数据的稀缺性。并非所有现实问题都能轻松找到相应的人工标注数据。为了应对这一挑战,科学家们提出了无监督的训练方法,旨在无需人工标注的情况下从数据中学习模式。

2.3.2.2 无监督的训练

隐马尔可夫模型最常用的无监督训练算法当属鲍姆-韦尔奇算法(Baum-WelchAlgorithm),它通过迭代方法估计模型参数,使得观测序列 o_1, o_2, o_3, ... 的概率最大化。该算法是一种期望最大化(Expectation-Maximization, EM)算法的实现。它的基本思想是通过迭代来估计模型参数,每次迭代都包括一个E步(Expectation Step)和一个M步(Maximization Step)

1)初始化:首先,随机设定模型的初始参数,包括状态转移概率、符号生成概率等,得到初始化模型 M_{\theta_0} 。
2)E步骤:接着,初始化模型 M_{\theta_0} ,找到这个模型产生观测序列 o_1, o_2, o_3, ... 的所有可能的隐藏状态路径 s_1, s_2, s_3, ... 以及这些路径的概率。这些可能的路径,实际上记录了每个隐藏状态经历了多少次,到达了哪些其他的隐藏状态,对应输出了哪些符号,因此可以将它们看做是“标注的训练数据”。
3)M步骤:然后,根据E步骤中得到的所谓“标注的训练数据”,模仿上一节监督训练里的方式,计算新的转移概率和生成概率,进而得到新模型 M_{\theta_1} ,以使得模型生成观测序列的总概率增加。可以数学证明:

4)重复EM步骤:不断重复E步骤和M步骤,直到模型参数收敛,即参数的变化非常小,此时认为模型已经学习到了数据的统计特性。

此外,在实际操作中,通常会设置阈值来判断参数是否已足够接近最优解,或者设定最大迭代次数以防止无限循环。鲍姆-韦尔奇算法的本质是通过反复迭代,逐渐优化模型参数,最终找到能够较好解释观测数据的模型参数。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】STL:栈和队列模拟实现

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

【设计模式深度剖析】【2】【行为型】【命令模式】| 以打开文件按钮、宏命令、图形移动与撤销为例加深理解

👈️上一篇:模板方法模式 | 下一篇:职责链模式👉️ 设计模式-专栏👈️ 文章目录 命令模式定义英文原话直译如何理解呢? 四个角色1. Command(命令接口)2. ConcreteCommand(具体命令类&…

linux进程间通讯指南-打通IPC大门,高效沟通无阻

在现代操作系统中,进程就像独立的个体,有时需要相互合作、数据共享,这就要求进程间能够高效通信。本文将为你揭开Linux进程间通信(IPC)的神秘面纱,探讨各种IPC工具的运作原理,同步机制的重要性,以及如何规避…

Ubuntu安装cuda

文章目录 前言一、安装NVIDIA驱动1.1 过程中的问题1.2 解决方法1.3 重启后出现 perform MOK management 二、安装Cuda2.1 检查是否安装显卡驱动2.2 安装Cuda2.3 验证CUDA是否安装成功 三、配置环境变量---未完2.4 图片居中加调整大学 总结 #pic_center 前言 只是为方便学习&…

淘宝扭蛋机源码解析:功能实现与技术细节

随着在线购物和娱乐的融合,淘宝扭蛋机作为一种创新的购物娱乐方式,受到了广大用户的喜爱。本文将深入解析淘宝扭蛋机的源码,探讨其功能实现与技术细节,以期为开发者们提供一些有价值的参考。 一、功能实现 1.用户登录与注册 淘宝…

win11通过网线分享网络到Ubuntu工控机

1.条件:一个能无线联网的win11,一根网线,一台Ubuntu工控机,并且使用网线连接两者 2.在win11电脑上 2.1 打开控制面板的网络和Internet 2.2 进入网络和共享中心,在左侧进入 更改适配器设置 2.3 在WLAN上右键&#xff0…

R语言数据探索和分析21-中国GDP及其影响因素多元线性回归分析

一、研究背景和意义 GDP 是宏观经济中最受关注的经济统计数字,目前我国国内生产总值年均增长率均明显高于同期美、日等发达经济体和巴 西、俄罗斯、南非、印度等其他金砖国家,成为世界经济增长的主力军,GDP 的增长对一个国家有着十分重要的意…

TSINGSEE青犀视频:城市道路积水智能监管,智慧城市的守护者

随着城市化进程的加快,城市道路网络日益复杂,尤其在夏季,由于暴雨频发,道路积水问题成为影响城市交通和市民生活的重要因素之一。传统的道路积水监测方式往往依赖于人工巡逻和简单的监控设备,这些方法存在效率低下、响…

软信天成:告别数据脏乱差!企业数据清洗实战方案分享

低质量数据普遍存在。据统计,数据质量问题每年给企业造成高达3.1万亿美元的损失。为了防范这种损失,越来越多的企业采用数据清洗来清洗数据,提高数据质量。 数据清洗,顾名思义是将数据上“脏”的部分清洗掉,让数据变得…

读《淘宝技术这10年》:从进化中感受技术的美与挑战

本文作者:小米,一个热爱技术分享的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是小米,一个29岁的程序员,喜欢分享技术干货。今天,我想和大家聊一聊我最近读的一本书——《淘宝技术这10年》。这本书让我深刻领悟…

JetBrains PhpStorm 激活码限时特惠 7.1 折快抢!

各位程序员,每天敲代码真的需要一款好用的 IDE,大名鼎鼎的 JetBrains 值得信赖!PHP 开发看过来,PhpStorm 个人版首年订阅 618 限时特惠 7.1 折,有需要的朋友一定不要错过! PhpStorm 汇集了众多效率功能和集…

【微信小程序】网络请求

出于安全性方面的考虑,小程序官方对数据接口的请求做出了如下两个限制: 只能请求HTTPS类型的接口必须将接口的域名添加到信任列表中 登录微信小程序管理后台->开发->开发设置->服务器域名->修改request合法域名。 注意事项: 域…

视频汇聚EasyCVR安防监控系统GA/T 1400协议视图库对接:技术实现与应用

随着信息技术的不断发展,各类协议标准在各个领域得到了广泛应用。GA/T1400协议作为公安视频监控系统中的一种重要标准,对于提升公安工作的信息化水平、加强社会治安防控具有重要意义。本文将重点探讨GA/T1400协议视图库对接的技术实现及应用价值。 一、…

领菲linfeeLNF96E多功能电力仪表智能数码液晶显示三相电压电流表

品牌 LINFEE 型号 LNF96E 货号 LNF96E 产地 中国大陆 省份 江苏省 地市 无锡市 装修及施工内容 安装工程 电源电路 交流电表 电表类型 多功能电度表 颜色分类 LNF96E-C,LNF96E-CM,LNF96E-CJ,LNF96E-CK,LNF96E-CJK,LNF96E-CMJK 多功能电力仪表,LNF96E三相多…

c语言练习:POJ 1003 宿醉(HangOver)

为什么写这篇文章 作为一名计算机相关方向的学生,本人的代码能力却十分差劲,这不能不让人万分羞愧。于是,决定从此好好学代码,每天坚持刷题。而C语言是计算机程序语言的基础,遂决定从c语言开始,提高自身编…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:中国舰船研究院

中国舰船研究院又称中国船舶重工集团公司第七研究院,隶属于中国船舶重工集团公司,是专门从事舰船研究、设计、开发的科学技术研究机构,是中国船舶重工集团公司的军品技术研究中心、科技开发中心;主要从事舰船武器装备发展战略研究…

图神经网络实战(12)——图同构网络(Graph Isomorphism Network, GIN)

图神经网络实战(12)——图同构网络 0. 前言1. 图同构网络原理2. 构建 GIN 模型执行图分类2.1 图分类任务2.2 PROTEINS 数据集分析2.3 构建 GIN 实现图分类2.4 GCN 与 GIN 性能差异分析 3. 提升模型性能小结系列链接 0. 前言 Weisfeiler-Leman (WL) 测试…

解决vscode终端不显示conda环境变量名称问题【详细步骤!实测可行!!】

最近在使用Visual Studio Code (VSCode) 时候,发现终端没有正确显示激活的conda环境名称,搜了一下,找到原因,记录一下,如果有人也遇到同样的问题,可以收藏一下。   分别两种情况,一是windows系…

GaussDB技术解读——GaussDB架构介绍(一)

目录 1 GaussDB 关键架构目标 2 GaussDB分布式架构 2.1 GaussDB 分布式关键技术架构 3 数据计算路由层(Coordinator)关键技术方案 3.1 分布式优化器 3.2 分布式执行框架 GaussDB是华为自主创新研发的关系型数据库,基于华为在数据库领域…

Python编程学习第一篇——制作一个小游戏休闲一下

到上期结束,我们已经学习了Python语言的基本数据结构,除了数值型没有介绍,数值型用的非常广,但也是最容易理解的,将在未来的学习中带大家直接接触和学习掌握。后续我们会开始学习这门语言的一些基础语法和编程技巧&…