【算法系列】隐马尔可夫链预测问题-从维特比到SLAM

前言

视频讲解在我女朋友的B站『隐马尔可夫链预测问题-从维特比到SLAM』

在上一篇文章《终于有人把隐马尔可夫链的前向后向算法讲懂了!》中,我们讲解了隐马尔科夫链中三个基本问题中的概率计算问题的前向后向求解方法:

  1. 概率计算问题:给定模型参数 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 x = { x 1 , x 2 , . . . , x n } x=\{x_1,x_2,...,x_n\} x={x1,x2,...,xn}计算在模型参数 λ \lambda λ下观测到x的概率 P ( x ∣ λ ) P(x|\lambda) P(xλ)(评估模型和观测序列之间的匹配程度)

  2. 预测问题:给定模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 x = { x 1 , x 2 , . . . , x n } x=\{x_1,x_2,...,x_n\} x={x1,x2,...,xn},求使得 P ( y ∣ x , λ ) P(y|x,\lambda) P(yx,λ)最大的状态观测序列 y = { y 1 , y 2 , . . . , y n } y=\{y_1,y_2,...,y_n\} y={y1,y2,...,yn}(根据观测序列推断最有可能的状态序列)

  3. 学习问题:给定观测序列 x = { x 1 , x 2 , . . . , x n } x=\{x_1,x_2,...,x_n\} x={x1,x2,...,xn},调整模型参数 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π),使得该序列出现的概率 P ( x ∣ λ ) P(x|\lambda) P(xλ)最大(训练模型使其更好地描述观测序列)

这篇文章将主要讲解维特比算法,维特比算法是用来解决预测问题的主要算法,其核心思想是动态规划,这个问题与SLAM问题相似,都是获得一组观测序列(地图点),然后求解一组状态(机器人位姿),使得在该位姿下获得该观测的概率最大,最后简要说明学习问题的求解算法。

1.预测问题-维特比算法

主要思想:利用动态规划求解概率最大路径,这里一条路径对应着一个状态序列。

如果最优路径 y ∗ y* y在t时刻通过结点 y t ∗ y_t* yt,那么这条路径从起始结点到结点 y t ∗ y_t* yt的路径中,局部路径 y 1 : t ∗ y_{1:t}* y1:t一定是最优的。(每个结点 y t ∗ y_t* yt对应一个最优路径)

假定从起始时刻到t时刻上各个状态的最优路径已经找到,那么在计算从起始时刻到t+1时刻上的某个状态 s j s_j sj的最优路径时,只需要考虑从起始时刻到上一时刻所有N个状态 s i s_i si的最优路径,以及从si到sj的“距离”。

我们定义中间变量 δ t ( i ) \delta_t(i) δt(i):在t时刻,隐马尔可夫链沿着一条路径到达状态i,并输出观测序列的最大概率。

路径变量 ϕ t ( i ) \phi_t(i) ϕt(i):表示该路径上状态i的前一个状态。

这样说可能很晦涩,我们实例演示一下就很容易明白:

  1. 假设只有第一个观测-红球,那么最可能得到这个观测的状态是0还是1呢?我们分别计算它们的概率:假设第一个状态为0,概率为: δ 1 ( 0 ) = π ( 0 ) ∗ B 00 = 0.25 \delta_1(0)=\pi(0)*B_{00}=0.25 δ1(0)=π(0)B00=0.25;假设第一个状态为1,概率为: δ 1 ( 1 ) = π ( 1 ) ∗ B 10 = 0 \delta_1(1)=\pi(1)*B_{10}=0 δ1(1)=π(1)B10=0.显然如果只有一个观测,最优状态是0.

  2. 加入一个状态,第二个观测为黑球,第二个状态可能为0/1,我们分别计算第二个状态为0/1情况下,得到观测为黑球的概率:

  • 如果第二个状态为0,它可能由第一个状态为0/1转移而来,这时我们要取一个概率更大的情况: δ 2 ( 0 ) = m a x ( δ 1 ( 0 ) ∗ A 00 ∗ B 01 , δ 1 ( 1 ) ∗ A 10 ∗ B 01 ) = 0 \delta_2(0)=max(\delta_1(0)*A_{00}*B_{01},\delta_1(1)*A_{10}*B_{01})=0 δ2(0)=max(δ1(0)A00B01,δ1(1)A10B01)=0,两种情况概率一样大,记录最优前一个节点 ϕ 2 ( 0 ) = 0 , 1 \phi_2(0)=0,1 ϕ2(0)=0,1

  • 如果第二个状态为1,它可能由第一个状态为0/1转移而来,这时我们要取一个概率更大的情况: δ 2 ( 1 ) = m a x ( δ 1 ( 0 ) ∗ A 01 ∗ B 11 , δ 1 ( 1 ) ∗ A 11 ∗ B 11 ) = 0 \delta_2(1)=max(\delta_1(0)*A_{01}*B_{11},\delta_1(1)*A_{11}*B_{11})=0 δ2(1)=max(δ1(0)A01B11,δ1(1)A11B11)=0,第一种情况更大,记录最优前一个节点 ϕ 2 ( 1 ) = 0 \phi_2(1)=0 ϕ2(1)=0

  1. 依次类推,我们最终计算出了最后一个节点的情况: δ 5 ( 0 ) = m a x ( δ 4 ( 0 ) ∗ A 00 ∗ B 00 , δ 4 ( 1 ) ∗ A 10 ∗ B 00 ) = 0.015625 \delta_5(0)=max(\delta_4(0)*A_{00}*B_{00},\delta_4(1)*A_{10}*B_{00})=0.015625 δ5(0)=max(δ4(0)A00B00,δ4(1)A10B00)=0.015625 ϕ 5 ( 0 ) = 1 \phi_5(0)=1 ϕ5(0)=1 δ 5 ( 1 ) = m a x ( δ 4 ( 0 ) ∗ A 01 ∗ B 10 , δ 4 ( 1 ) ∗ A 11 ∗ B 10 ) = 0 \delta_5(1)=max(\delta_4(0)*A_{01}*B_{10},\delta_4(1)*A_{11}*B_{10})=0 δ5(1)=max(δ4(0)A01B10,δ4(1)A11B10)=0 ϕ 5 ( 0 ) = 0 , 1 \phi_5(0)=0,1 ϕ5(0)=01

  1. 回溯:我们发现最后一个节点 δ 5 ( 0 ) \delta_5(0) δ5(0)概率更大,我们确定最后一个状态为0更好,然后根据 ϕ 5 ( 0 ) = 1 \phi_5(0)=1 ϕ5(0)=1回溯,其指向前一个最优状态 δ 4 ( 1 ) \delta_4(1) δ4(1),所以第4个状态确定为1,然后再根据 ϕ 4 ( 1 ) = 1 \phi_4(1)=1 ϕ4(1)=1回溯,指向前一个最优状态 δ 3 ( 0 ) 或 \delta_3(0)或 δ3(0)\delta_3(1)$,然后我们对两条路径分别重复上述回溯,就可以得到最终路径:

0->1->0->1->0或0->1->1->1->0

2.学习问题

学习问题的主要解决目标是学习参数,主要方法是用模式识别中基于参数估计的方法区估计其中的参数,常用的方法有:基于参数估计的极大似然估计、贝叶斯估计;基于半参数估计的EM算法,分为有监督方法和无监督方法。

(1)有监督方法

训练数据包含𝑆个长度相同的观测序列和对应的状态序列 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x s , y s ) } \{(x_1,y_1),(x_2, y_2),...,(x_s,y_s)\} {(x1,y1),(x2,y2),...,(xs,ys)},利用极大似然法估计隐马尔可夫模型的参数。也就是P(X,Y)最大似然估计。

(2)无监督方法

将观测序列看作观测数据𝒳,状态序列看作不可观测的隐数据𝒴,隐马尔可夫模型等价
于含有隐变量的概率模型。

相应的参数学习可以由EM算法实现

总结

通过三篇文章,我们详细的介绍了马尔科夫链中的相关概念,以及三个基本问题的解法,马尔科夫链是各个领域应用十分广泛的数学工具,其结合了图论和概率论的相关算法模型,特别是在SLAM领域,很多现代的算法都是在马尔科夫链基础上发展而来,希望大家通过这三篇文章的讲解,可以比较好的理解相关内容!

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

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

相关文章

Linux---网络套接字

端口号 端口号 端口号是一个2字节16位的整数; 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理; IP地址 端口号能够标识网络上的某一台主机的某一个进程; 一个端口号只能被一个进程占用 在公网上,IP地址能表示唯一的一台主机&…

人工智能如何彻底改变身份欺诈

据 AuthenticID 称,近一半的企业报告合成身份欺诈有所增加,而生物识别欺骗和伪造 ID 欺诈尝试也有所增加。 在当今的数字化存在中,消费者和企业都面临着新的挑战,从考虑数字身份的影响到应对生成人工智能等新工具的使用和流行。与…

【小沐学GIS】基于WebGL绘制三维数字地球Earth(OpenGL)

🍺三维数字地球系列相关文章如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第二期3【小沐学GIS】…

【C语言】C的整理记录

前言 该笔记是建立在已经系统学习过C语言的基础上,笔者对C语言的知识和注意事项进行整理记录,便于后期查阅,反复琢磨。C语言是一种面向过程的编程语言。 原想在此阐述一下C语言的作用,然而发觉这些是编程语言所共通的作用&#…

一键打造属于自己漏扫系统

0x01 工具介绍 本系统是对Web中间件和Web框架进行自动化渗透的一个系统,根据扫描选项去自动化收集资产,然后进行POC扫描,POC扫描时会根据指纹选择POC插件去扫描,POC插件扫描用异步方式扫描.前端采用vue技术,后端采用python fastapi。 0x02 安装与使用 1、Docker部署环境 编译…

C语言学习记录

牛牛学说话之-字符_牛客题霸_牛客网 (nowcoder.com) 总结: 字符定义为char,对应%c 整数定义为int,对应%d 分数对应float,对应%f,内存小,速度快 分数对应double,对应%lf,范围广,精度高 保留几位小数就是…

C++入门学习(二十七)跳转语句—break语句

1、与switch语句联合使用 C入门学习&#xff08;二十三&#xff09;选择结构-switch语句-CSDN博客 #include <iostream> #include <string> using namespace std;int main() { int number;cout<<"请为《斗萝大路》打星(1~5※)&#xff1a;" &…

Linux操作系统基础(十一):RPM软件包管理器

文章目录 RPM软件包管理器 一、rpm包的卸载 二、rpm包的安装 RPM软件包管理器 rpm&#xff08;英文全拼&#xff1a;redhat package manager&#xff09; 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项软件包的程序&#xff0c;由于它遵循GPL规则且功能强大方便&…

单片机学习笔记---AT24C02(I2C总线)

目录 有关储存器的介绍 存储器的简介 存储器简化模型 AT24C02介绍 AT24C02引脚及应用电路 I2C总线介绍 I2C电路规范 开漏输出模式和弱上拉模式 其中一个设备的内部结构 I2C通信是怎么实现的 I2C时序结构 起始条件和终止条件 发送一个字节 接收一个字节 发送应答…

Stable Diffusion 模型下载:ToonYou(平涂卡通)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 ToonYou 是一个平涂风格的卡通模型&#xff0c;它的画风独特、光感强烈、画面…

Ubuntu Desktop - Details (设备详情)

Ubuntu Desktop - Details [设备详情] 1. OverviewReferences 1. Overview System Settings -> Details -> Overview ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

单片机在物联网中的应用

单片机&#xff0c;这个小巧的电子设备&#xff0c;可能听起来有点技术性&#xff0c;但它实际上是物联网世界中的一个超级英雄。简单来说&#xff0c;单片机就像是各种智能设备的大脑&#xff0c;它能让设备“思考”和“行动”。由于其体积小、成本低、功耗低、易于编程等特点…

【C++第二阶段】赋值运算符重载

你好你好&#xff01; 以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 赋值运算符重载 赋值运算符重载 实验①&#xff0c;还没有对析构运算符重载时 #include<iostream> #include<string> using namespace std;clas…

失去中国市场的三星仍是全球第一,但中国手机无法失去海外市场

随着2023年分析机构公布全球手机市场和中国手机市场的数据&#xff0c;业界终于看清中国市场早已没有以前那么重要&#xff0c;三星、苹果这些国际品牌对中国市场的依赖没有他们想象的那么严重&#xff0c;相反中国手机对海外市场比以往任何时候都要更依赖了。 三星在2023年被苹…

消息队列使用的四种场景介绍

一、简介 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削锋等问题。 实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。 使用较多的消息队列有ActiveMQ&#xff0c;RabbitMQ&#xff0c;ZeroMQ…

【开源】SpringBoot框架开发个人健康管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 健康档案模块2.2 体检档案模块2.3 健康咨询模块 三、系统展示四、核心代码4.1 查询健康档案4.2 新增健康档案4.3 查询体检档案4.4 新增体检档案4.5 新增健康咨询 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpri…

docker之centos7容器常用命令和服务安装

一、前言 以前我们如果想在windows环境下使用linux系统&#xff0c;最早的是一台主机上安装双机系统&#xff0c;再后来我们有了VMware&#xff0c;可以通过workstations虚拟化平台安装虚拟机。现在我们还可以通过docker安装linux容器&#xff0c;容器更轻量也更便捷。不过凡事…

SpringCloud-高级篇(二十一)

前面解决了消息的可靠性、消息的延迟问题&#xff0c;下面研究一下消息的堆积的问题&#xff1a; &#xff08;1&#xff09;消息堆积问题 消息产生堆积&#xff0c;上限后&#xff0c;最早的消息成为死信&#xff0c;有消息被丢弃&#xff0c;这对安全性较高的业务中是不行的…

HiveSQL——条件判断语句嵌套windows子句的应用

注&#xff1a;参考文章&#xff1a; SQL条件判断语句嵌套window子句的应用【易错点】--HiveSql面试题25_sql剁成嵌套判断-CSDN博客文章浏览阅读920次&#xff0c;点赞4次&#xff0c;收藏4次。0 需求分析需求&#xff1a;表如下user_idgood_namegoods_typerk1hadoop1011hive1…

JAVA设计模式之迭代器模式详解

迭代器模式 1 迭代器模式介绍 迭代器模式是我们学习一个设计时很少用到的、但编码实现时却经常使用到的行为型设计模式。在绝大多数编程语言中&#xff0c;迭代器已经成为一个基础的类库&#xff0c;直接用来遍历集合对象。在平时开发中&#xff0c;我们更多的是直接使用它&a…