一起自学SLAM算法:11.5 强化学习与自主导航

news2025/5/23 17:23:49

连载文章,长期更新,欢迎关注:

强化学习(Reinforcement Learning,RL)[21]属于机器学习领域的一个分支,其学习目标是获得最大回报。在10.3.1节中已经讨论过,机器学习过程主要涉及四个要素:数据、模型、学习策略和学习算法,有监督学习、无监督学习和强化学习都是指学习策略。有监督学习以最小化误差为学习目标,也就是让预测值尽量逼近于训练样本监督标签,这样预测与样本监督标签之间的误差才会越小。虽然无监督学习不像有监督学习那样有明确的学习目标,但无监督学习也有指导其学习的评价准则,比如让系统趋于平衡态、让系统组织最简化等。强化学习以最大化回报为学习目标,是一种不断试错并追求长期回报的算法。

拿有监督学习和强化学习对比,前者解决的是逼近问题,而后者解决的是决策问题。比如在车牌识别问题中,有监督学习关心输入图片中的数字是否能被准确识别,输入与输出之间有明确对应关系(正确答案唯一)。而在围棋问题中,强化学习关心当前棋局下采取什么落子方式能最终赢得比赛,输入与输出之间没有唯一对应关系(正确答案不唯一),你可以采用多种落子方式只要能争取到更多获胜机会就可以了。不过强化学习与其他学习之间并没有绝对的界限,反而是在不断融合走向统一的趋势,比如深度强化学习就是很好的例子。

强化学习特别适合用于解决决策问题,比如复杂控制、人机对话、无人驾驶、打游戏等决策场景。更准确点说应该是解决序贯决策问题,就是需要持续不断做出决策以便能实现最终目标的问题。机器人自主导航是典型的序贯决策问题,通过单次决策仅能让机器人移动一小段距离,要持续不断做决策才能让机器人一步一步逐渐抵达指定地点。基于强化学习的方法不需要构建具有确定物理意义的模型也不需要设计专门的控制器,只需要构建一个强化学习算法让算法自动在环境交互中学习,学成后强化学习算法就获得了控制机器人自动移动到指定地点的自主导航能力。

11.5.1 强化学习

强化学习的过程,如图11-35所示。其中智能体就是承载强化学习算法的主体,比如机器人。智能体与环境之间通过状态s和行动a实现交互,同时环境会对智能体的每次行动给予回报r。假设智能体为机器人,智能体的任务是完成在地图中自主导航,那么状态s就代表机器人在地图中的位置以及周围障碍情况,行动a就代表机器人的线速度和角速度。回报r则是对机器人当前行动a表现好坏的评价,比如行动a执行后使得机器人处于不利状态(靠近障碍物、与障碍物发生碰撞、远离导航目标点等)时回报为负数值,而行动a执行后使得机器人处于有利状态(远离障碍物、靠近导航目标点等)时回报为正数值。当然定义回报的形式并不唯一,可以根据实际任务及需求来定义。连接状态与行动关系的就是策略\pi (a|s),连接行动与状态关系的则是状态转移P(s_{t+1}|s_{t},a_{t})。在没有学习之前,策略\pi (a|s)对环境一无所知(比如无论状态s是什么,它都输出控制机器人向前移动的相同行动a)。现在让机器人与环境进行交互来学习,交互过程可以用式(11-27)这条状态-行动链条表示,交互过程直到终止条件(比如机器人抵达目标点、机器人与障碍物发生碰撞)发生时为止,式中状态下的数值为回报。

 由于此时策略\pi (a|s)对环境一无所知,依照此策略产生的状态-行动链条获得总回报极低,因为这种盲目行动很容易碰撞到障碍物而获得负数值回报的惩罚。那么就必须要利于本次交互的回报数据对策略\pi (a|s)进行调整,也就是调整sa的映射关系。可能最容易想到的调整方法是将那些表现不利的映射关系改变一下,但下文即将介绍的实际方法要复杂得多,这也是强化学习中各种算法讨论的重点。当策略\pi (a|s)经过调整后,继续进行交互学习,得到如式(11-28)所示的状态-行动链条。

可以发现式(11-28)的总回报(-1+1+1-1 = 0)比式(11-27)的总回报(-1+1-1 = -1)有所提高,当然用更新后的策略做交互试验产生的回报也可能会降低。不管单次交互试验回报提高还是降低,经过大量交互试验后回报一般会收敛到某个较高的值,而此次对应的策略\pi (a|s)就是强化学习学到的东西。因为每步动作都获得最大回报,那么整个交互链条的总回报也必然最大。反过来,能使交互链条总回报最大化的策略必然也能使每步动作回报最大化,到这里应该就不难理解为什么说强化学习的学习目标是获得最大回报了吧。由于交互试验次数的限制和策略更新方法的缺陷等因素,强化学习实际上只求取了局部最优解。当然很多场合利用局部最优解策略\pi (a|s)就已经能工作起来了,此时可以利用工作产生的交互数据继续改进策略或者改进策略更新方法。

 图11-35  强化学习的过程

 1.马尔可夫决策过程

上面只是用非常通俗的语言对强化学习的过程进行了描述,但要设计具体算法时就必须借助数学语言进行描述了。强化学习主要用来解决序贯决策问题,而序贯决策问题通常用马尔可夫决策过程(Markov Decision Process,MDP)来描述,下面对马尔可夫决策过程的数学形式进行介绍。

(1)马尔可夫性、马尔可夫过程和马尔可夫决策过程

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

(2)价值函数

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

(3)贝尔曼方程

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

(4)贝尔曼最优方程

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

(5)马尔可夫决策过程求解方法

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

2.动态规划方法

通过上面的内容已经知道马尔可夫决策过程根据不同的讨论维度可以分为不同类别的具体问题。有限状态空间、有限动作空间、有模型的问题是马尔可夫决策过程最简单的一种形式,虽然这种形式的求解方法在实际中用处并不大,但透过它可以帮助我们很好地理解强化学习算法的工作原理,这正是首先要介绍这种形式的求解方法的原因。

对于有限状态空间、有限动作空间、有模型的马尔可夫决策过程普遍采用动态规划来求解,动态规划具体分为策略迭代和价值迭代,策略迭代和价值迭代又包含同步和异步两种算法,如图11-41所示。这里解释一下有限状态空间和有限动作空间中“有限”的含义。对于包含离散且个数可数状态的状态空间(比如S=\left \{ s_{1},s_{2},s_{3} \right \})就称为有限状态空间,包含离散但个数不可数状态或者连续状态的状态空间称为非有限状态空间。类似地,对于包含离散且个数可数动作的动作空间(比如A=\left \{ a_{1},a_{2},a_{3} \right \})就称为有限动作空间,包含离散但个数不可数动作或者连续动作的动作空间称为非有限动作空间。有模型就不多说了,是指环境状态概率转移模型P(s_{t+1}|s_{t},a_{t})已知。另外动态规划包含两大要素,一个要素是整个优化问题可以分解成多个子优化问题,另一个要素是子优化问题的解可以存储下来并能被重复利用,这两个要素将在下面所介绍的具体算法中体现出来。

 图11-41  动态规划方法

(1)策略迭代

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

(2)价值迭代

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

(3)广义策略迭代

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

3.采样方法

在环境状态概率转移模型P(s_{t+1}|s_{t},a_{t})已知时,动态规划方法中可以直接用贝尔曼方程来求解策略的价值函数。但真实应用场景的环境状态概率转移模型P(s_{t+1}|s_{t},a_{t})往往是未知的,那么就不能直接用贝尔曼方程来求解策略的价值函数了。采样方法其实是用采样所得统计样本的平均回报来近似期望回报,可以说采样方法采用统计学来计算价值函数,而动态规划方法采用概率学来计算价值函数。这里以求解随机变量x的期望值来说明概率学期望与统计学平均的关系,对于随机变量x的概率分布P(x)已知的情况,可以直接用式(11-57)期望的定义来求x的期望值;当随机变量x的概率分布P(x)未知时,只能通过反复测量x得到多个样本,并用式(11-58)求这些样本的平均值。根据大数定律,在样本足够多时平均值\bar{x}能逼近期望值E[x]。除了计算价值函数的方法不同外,采样方法与动态规划方法基本一样,也包括策略评估和策略改进两个步骤。

动态规划方法用于求解有限状态空间、有限动作空间、有模型的马尔可夫决策过程这种理想形式,虽然动态规划方法实际用处不大,但动态规划方法是后面各种实用强化学习方法的理论基石。而采样方法用于求解有限状态空间、有限动作空间、无模型的马尔可夫决策过程这种更实际形式,采样方法具体分为蒙特卡洛和时间差分,蒙特卡洛和时间差分又包含同策略和异策略两种算法,如图11-43所示。

 图11-43  采样方法

 (1)蒙特卡洛

 (先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

(2)时间差分

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

4.价值函数逼近

无论是动态规划还是采样方法,所解决问题的前提条件都是有限状态空间和有限动作空间。也就是说算法中出现的价值函数实际是以表格的形式呈现,而并非函数解析式的形式呈现,因此动态规划方法和采样方法也被称为表格型方法。假如包含5个状态的有限状态空间为S=\left \{ s_{1},s_{2},s_{3},s_{4},s_{5} \right \},包含3个动作的有限动作空间为A=\left \{ a_{1},a_{2},a_{3} \right \}。那么s\rightarrow v(s)的函数映射实际上是用如表11-2所示的一张\left | S \right |维大小的表格来记录的,表格的索引是状态s,表格的取值是状态的价值v(s)。同样地,<s,a>\rightarrow q(s,a)的函数映射实际上是用如表11-3所示的一张\left | S \right |\times \left | A \right |维大小的表格来记录的,表格的索引是状态s与动作a,表格的取值是状态-行动的价值q(s,a)。从表11-2和11-3展示的价值函数v(s)q(s,a)的呈现形式,就应该理解为何要将动态规划方法和采样方法也被称为表格型方法了吧。

表11-2  状态的价值函数v(s)

 表11-3  状态-行动的价值函数q(s,a)的表格记录

...

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

...

 5.策略搜索

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

11.5.2 基于强化学习的自主导航

接下来就以论文[29,30,31]给出的三种算法(AutoRL、PRM-RL和AutoRL+PRM-RL)为例,来介绍用强化学习实现自主导航的大致思路。当然基于机器学习(特别是强化学习)的自主导航算法有很多优秀例子,感兴趣的话可以阅读相关文献[32,33,34,35,36],由于篇幅限制就不一一介绍了。

1.AutoRL

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

2.PRM-RL

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

参考文献

【1】 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.

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

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

相关文章

【Java并发详解】

参考书目&#xff1a; 堆和方法区中的数据是可以被共享的 堆中的数据是被栈中的变量所持用的&#xff0c;栈是线程隔离的&#xff0c;每个线程私有一个栈&#xff0c;所以栈中的数据不共享 调用a方法时&#xff0c;jvm会给a方法创建一块内存区&#xff0c;让其入栈&#xff…

UIRecorder安装、录制、回放

Github地址&#xff1a;https://github.com/alibaba/uirecorder/blob/master/README_zh-cn.md 支持 android ios 和pc端的自动化脚本录制。无线native app(Android, iOS)录制是&#xff0c;是基于macaca实现的&#xff1a;https://macacajs.com 整体组成架构 UIRecorder录制功…

Dubbo服务开发和运行流程【java面试】

(1)问题分析&#xff1a;考官主要想考核dubbo的原理&#xff0c;还有dubbo在项目中的使用。(2)核心答案讲解&#xff1a;dubbo服务开发流程&#xff1a;maven工程中pom文件先导入dubbo依赖jar包搭建zookeeper注册中心写好服务端工程并配置dubbo服务端配置&#xff0c;并关联上z…

Spring概览——最佳入门实践

1、Spring Framework Spring 基础框架&#xff0c;可以视为 Spring 基础设施&#xff0c;基本上任何其他 Spring 项目都是以 Spring Framework 为基础的。 1.1、Spring Framework特性 建议新手先看完的最佳实践&#xff0c;再回头看这一段。 非侵入式&#xff1a;使用 Spri…

Java List按照某字段去重

Java List按照某字段去重嘚吧嘚distinct示例一示例二根据某个字段去重Collectors.collectingAndThen()嘚吧嘚 Java8流的新类java.util.stream.Collectors实现了java.util.stream.Collector接口&#xff0c;同时又提供了大量的方法对流(stream)的元素执行各种统计操作。 distinc…

实战: 跨年烟花代码的实现(附源码)

目录 前言 一、pandas是什么&#xff1f; 二、代码结构 1.介绍主html代码 2. js文件介绍 GameCanvas.js script.js 运行效果 前言 本文章将介绍跨年烟花代码的实现以及源代码 提示&#xff1a;以下是本篇文章正文内容 一、pandas是什么&#xff1f; 示例&#xff1a;pandas …

css3-动画

目录语法转换平移旋转缩放复合属性的顺序问题过渡动画帧动画案例案例1-热点图dot(缩放)案例2-热点图dot(缩放)案例3-开红包(旋转)问题问题1-transform不起作用问题2 - 过渡动画不起效果语法 转换 css3中的转换允许我们对元素进行旋转、缩放、移动或倾斜。它分为2D转换 或 3D转…

开箱即用的物联网平台-IoTLink

物联网平台是物联网生态系统的重要组成部分&#xff0c;也是一个快速增长的市场&#xff0c;物联网平台为企业提供了巨大的价值&#xff0c;使他们能够降低开发成本、加速启动和简化流程。 一个完整的物联网系统需要硬件、连接、软件、用户界面等。在较高的层面上&#xff0c;…

menuconfig的执行过程

menuconfig &#xff08;1&#xff09;首先在uboot源码顶层目录下的Makefile文件中查找config&#xff08;%表示省略&#xff09; &#xff08;2&#xff09;执行make menuconfig&#xff0c;分别打印输出$(MAKE)、$(bulid)、$可知其对应的内容&#xff0c;如上图所示 总结&a…

用docker部署django后台作为webstack的后台管理系统-其二

0 序言 在之前的博客中&#xff1a; 用docker部署webstack导航网站-其一https://blog.csdn.net/qq_41938259/article/details/128736551?spm1001.2014.3001.5501我成功的将webstack官方推荐的docker容器部署了出来&#xff0c;但是官方的docker容器后端使用的是PHP&#xff0…

08_FreeRTOS列表和列表项讲解

目录 列表和列表项的简介 列表 列表项 迷你列表项 列表和列表项的关系 列表相关API函数介绍 初始化列表vListInitialise函数详解 列表项的初始化函数vListInitialiseItem函数 列表项的插入vListInsert函数 列表项末尾插入vListInsertEnd函数 列表项的删除函数uxLis…

零入门容器云网络实战-5->路由知识总结

本篇文章主要用于收集、整理、总结路由相关知识点。 1、路由分为几种&#xff1f; 直连路由静态路由&#xff08;基本静态路由&#xff0c;等价静态路由&#xff0c;活动静态路由&#xff0c;缺省静态路由&#xff09;动态路由 通过路由协议从相邻路由器学习到的。路由协议&am…

一,SpringMVC入门

0 MVC设计模式 View&#xff08;视图&#xff09;&#xff1a;页面&#xff08;jsp、html&#xff09;&#xff0c;接收用户数据和显示结果。 Controller&#xff08;控制器&#xff09;&#xff1a;action&#xff0c;接收请求&#xff0c;决定程序执行流程。 Model&#xf…

【深度学习】——循环神经网络RNN及实例气温预测

引言 密集连接网络和卷积神经网络都有主要的特点&#xff0c;那就是它们没有记忆。它们单独处理每个输入&#xff0c;在输入和输入之间没有保存任何状态。举个例子&#xff1a;当你在阅读一个句子的时候&#xff0c;你需要记住之前的内容&#xff0c;我们才能动态的了解这个句子…

三、SqlSession的创建以及执行流程

简介 SqlSession接口提供了查询&#xff0c;插入&#xff0c;更新&#xff0c;删除方法&#xff0c;Mybatis中所有的数据库交互都由SqlSession来完成。SqlSession 对象完全包含以数据库为背景的所有执行 SQL 操作的方法&#xff0c;它的底层封装了 JDBC 连接&#xff0c;可以用…

微服务链路追踪SkyWalking学习笔记

目录 1、skywalking是什么 1.2 链路追踪框架对比 1.3 性能对比 1.4 Skywalking主要功能特性 2、 SkyWalking 环境搭建部署 2.1 下载 SkyWalking 2.2 搭建SkyWalking OAP 服务 2.3 SkyWalking中三个概念 3、 SkyWalking 接入微服务 3.1 linux环境—通过jar包方式接入 …

SAP ADM100-2.5 系统启动:日志文件

本节将介绍SAP ABAP系统启动时最重要的log文件和Trce文件,以掌握通过使用系统启动log文件和trace文件分析系统问题。 1、记录系统启动过程 启动过程是一个特别重要的阶段,因此该过程将被操作系统、SAP系统、数据库记录。如果SAP系统没有启动,那么你将在log日志文件中发现相…

C#使用IronPython调用Python

一、前言以下摘自百度百科&#xff1a;IronPython 是一种在 NET 和 Mono 上实现的 Python 语言&#xff0c;由 Jim Hugunin&#xff08;同时也是 Jython 创造者&#xff09;所创造。1.0 版于2006年9月5日发布。随后&#xff0c;在 2007 年&#xff0c;开发者决定改写架构&#…

音视频xxxx

文章目录前言编解码硬件解码(高级)软解码(低级)软、硬解码对比视频解码有四个步骤Android 系统中编解码器的命名方式查看当前设备支持的硬解码基础知识RGB色彩空间常见的格式对比YUV索引格式分离RGB24像素数据中的R、G、B分量BMP 文件格式格式组成像素排列顺序RGB24格式像素数据…

Apache Solr 9.1-(三)集群模式下通过Http API操作Apache Solr

Apache Solr 9.1-&#xff08;三&#xff09;集群模式下通过Http API操作Apache Solr Solr是一个基于Apache Lucene的搜索服务器&#xff0c;Apache Lucene是开源的、基于Java的信息检索库&#xff0c;Solr能为用户提供无论在任何时候都可以根据用户的查询请求返回结果&#xf…