【算法系列】隐马尔可夫链预测问题-从维特比到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,一经查实,立即删除!

相关文章

LeetCode 399:除法求值(图的bfs遍历)

题目 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。 另有一些以数组 queries 表示的问题,其中 quer…

Linux---网络套接字

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

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

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

MySQL进阶查询篇(8)-存储过程的编写与调用

MySQL 是一种开源的关系型数据库管理系统,在开发过程中,我们通常需要编写存储过程来实现复杂的业务逻辑。本文将介绍如何使用 MySQL 编写和调用存储过程。 存储过程的概念和作用 存储过程是一组预编译的 SQL 语句的集合,类似于函数&#xf…

锐捷(二十)DHCP Snooping + IP Source guard + ARP-check防ARP欺骗方案

DHCP Snooping IP Source guard ARP-check防ARP欺骗方案:在用户PC动态获取IP地址的过程中,通过接入层交换机的DHCP Snooping功能将用户DHCP获取到的,正确的IP与MAC信息记录到交换机的DHCP Snooping软件表;然后通过IP Source gua…

【小沐学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语言的作用,然而发觉这些是编程语言所共通的作用&#…

Tdesign 常用知识

Mock数据中的常见随机数: mock 数据中, 开头的是 Mock.js 的语法。Mock.js 是一个用于生成随机数据的库,它提供了一些特殊的语法,可以方便地生成各种类型的随机数据。 在这个 mock 数据中,使用了以下语法&#xff1a…

C语言如何应⽤ gets()函数?

一、问题 输⼊字符串使⽤的是 gets()函数,其作⽤是将读取的字符串保存在形式参数 str 变量中。那么该如何使⽤该函数呢? 二、解答 gets()函数将⼀直读取字符串,直到出现新的⼀⾏为⽌。其中,新的⼀⾏的换⾏字符将会转化为字符串中…

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

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

C语言学习记录

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

【JAVA WEB】JavaScipt-1

目录 JavaScipt是什么? JavaScipt能做什么? JavaScipt与HTML、CSS之间的关系 JavaScipt运行过程 JavaScipt的组成 JavaScipt的书写方式 1.行内式 2.内嵌式 3.外部式 语法概览 变量的使用 基本用法 动态类型 什么是强类型变量什么是弱类型…

【MySQL】-21 MySQL综合-7(MySQL主键+MySQL外检约束+MySQL唯一约束+MySQL检查约束)

MySQL主键MySQL外检约束MySQL唯一约束MySQL检查约束 MySQL主键选取设置主键约束的字段在创建表时设置主键约束在创建表时设置复合主键在修改表时添加主键约束 MySQL外键约束选取设置 MySQL 外键约束的字段在创建表时设置外键约束在修改表时添加外键约束删除外键约束 MySQL唯一约…

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

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

分支解决冲突 分支管理策略 git merge命令详解

git merge详解 git merge 命令用于合并两个分支的更改。以下是 git merge 命令的一些常用参数&#xff1a; git merge <分支名>&#xff1a; 将指定分支的更改合并到当前分支。 git merge feature-branchgit merge --no-ff <分支名>&#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时序结构 起始条件和终止条件 发送一个字节 接收一个字节 发送应答…

MySQL优化及索引

MySQL优化一般会从以下几方面进行入手:引擎&#xff08;MySAM、InnoDB等引擎的选择&#xff09;、表设计&#xff08;可以反三范式添加冗余字段提高检索效率&#xff09;、字段的数据类型&#xff08;数值型字段优于字符串字段&#xff09;、sql书写、索引等方面进行优化&#…

虚拟机ens33没有显示ip

1.然后输入命令 cd /etc/sysconfig/network-scripts或&#xff1a; vim /etc/sysconfig/network-scripts/ifcfg-ens33 2.先按 i 开始【编辑】&#xff1b; 3.再用方向键把光标移到ONBOOT这里,把no改成yes&#xff1b; 4.按esc退出编辑模式, 5.按shift: 【输入wq】保…

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

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