【算法系列】隐马尔可夫链预测问题-从维特比到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.hqwc.cn/news/465681.html

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

相关文章

【后端高频面试题--设计模式下篇】

🚀 作者 :“码上有前” 🚀 文章简介 :后端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 后端高频面试题--设计模式下篇 后端高频面试题--设计模式上篇设计模式总览模板方法模式怎么理解模…

《乱弹篇(十四)香火旺》

连日来,“大年初一烧香祈福,北京雍和宫人山人海”这一词条登上社交网站热搜,对这一现象的描述多为“初一凌晨 民众在雍和宫前排大队”,“大年初一,雍和宫内人山人海,烟雾缭绕”,“雍和宫迎来6万…

《UE5_C++多人TPS完整教程》学习笔记4 ——《P5 局域网连接(LAN Connection)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P5 局域网连接(LAN Connection)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者&…

【开源】SpringBoot框架开发APK检测管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 开放平台模块2.3 软件档案模块2.4 软件检测模块2.5 软件举报模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 开放平台表3.2.2 软件档案表3.2.3 软件检测表3.2.4 软件举报表 四、系统展示五、核心代…

【更新】企业数字化转型-年度报告175个词频、文本统计

数据说明: 这份数据含数字化转型175个词频、各维度水平,保留2000-2021年数据。参考吴非、赵宸宇两位老师做法,根据上市公司年报文本,整理数字化转型175个词频数据,希望对大家有所帮助。 参考管理世界中吴非&#xff…

前端JavaScript篇之对象创建的方式有哪些?

目录 对象创建的方式有哪些?1. 工厂模式:2. 构造函数模式:3. 原型模式:4. 混合模式:5. 动态原型模式:6. 寄生构造函数模式:7. 字面量方式: 对象创建的方式有哪些? JavaS…

微软和苏黎世联邦理工学院开源SliceGPT创新压缩技术节省大量部署资源;OpenAI成立儿童安全团队,防AI误用

🦉 AI新闻 🚀 微软和苏黎世联邦理工学院开源SliceGPT创新压缩技术节省大量部署资源 摘要:微软和苏黎世联邦理工学院研究人员开源了SliceGPT,通过对大模型的权重矩阵进行压缩切片,实现了模型紧缩,节省了部…

【MySQL】-18 MySQL综合-4(MySQL储存引擎精讲+MySQL数据类型简介+MySQL整数类型+MySQL小数类型)

MySQL储存引擎精讲MySQL数据类型简介MySQL整数类型MySQL小数类型 十一 MySQL存储引擎精讲11.1 什么是存储引擎11.2 MySQL 5.7 支持的存储引擎11.3 如何选择 MySQL 存储引擎11.4 MySQL 默认存储引擎 十二 MySQL数据类型简介12.1 MySQL 常见数据类型1) 整数类型2) 日期/时间类型3…

C语言--------数据在内存中的存储

1.整数在内存中的存储 整数在内存是以补码的形式存在的; 整型家族包括char,int ,long long,short类型; 因为char类型是以ASCII值形式存在,所以也是整形家族; 这四种都包括signed,unsigned两种,即有符号和无符号&am…

nodejs爬虫框架

nodejs爬虫框架 在Node.js中,有一些常用的爬虫框架可以帮助你实现网页抓取和数据提取的任务。以下是几个流行的Node.js爬虫框架: 1. **Puppeteer**: Puppeteer 是由 Google 开发的一个用于控制 headless Chrome 或 Chromium 浏览器的 Node.js 库。它提供…

数据库管理-第149期 Oracle Vector DB AI-01(20240210)

数据库管理149期 2024-02-10 数据库管理-第149期 Oracle Vector DB & AI-01(20240210)1 机器学习2 向量3 向量嵌入4 向量检索5 向量数据库5 专用向量数据库的问题总结 数据库管理-第149期 Oracle Vector DB & AI-01(20240210&#xf…