基于时态差分法的强化学习:Sarsa和Q-learning

news2024/11/27 7:41:25

时态差分法(Temporal Difference, TD)是一类在强化学习中广泛应用的算法,用于学习价值函数或策略。Sarsa和Q-learning都是基于时态差分法的重要算法,用于解决马尔可夫决策过程(Markov Decision Process, MDP)中的强化学习问题。

下面是最简单的TD方法更新:

它只使用当前行动之后的奖励值和下一个状态的值作为目标。Sarsa(State-Action-Reward-State-Action)和Q-learning是都是基于时态差分法的强化学习方法。

Sarsa和Q-learning的区别

Sarsa代表State-Action-Reward-State-Action。是一种基于策略的方法,即使用正在学习的策略来生成训练数据。Q-learning是一种非策略方法它使用不同的策略为正在学习的值函数的策略生成训练数据。

Sarsa的更新规则如下:

其中:

  • Q(s, a) 是在状态s下采取动作a的值函数估计。
  • α 是学习率,控制每次更新的步长大小。
  • r 是在状态s下采取动作a后获得的即时奖励。
  • γ 是折扣因子,表示未来奖励的折现率。
  • s’ 是在执行动作a后得到的新状态。
  • a’ 是在新状态s’下选择的下一个动作。

Q-learning是另一种基于时态差分法的增强学习算法,用于学习一个值函数,表示在状态s下采取最优动作得到的期望累积奖励。Q-learning的更新规则如下:

其中:max(Q(s’, a’)) 表示在新状态s’下选择下一个动作a’时的最大值函数估计。

从上面的更新可以看出这两个方法非常相似,主要区别在于它们的更新策略。在Sarsa中,更新策略考虑了在新状态下采取的下一个动作,而在Q-learning中,更新策略总是选择了新状态下使值函数最大化的动作。因此,Sarsa更倾向于跟随当前策略进行学习,而Q-learning更倾向于学习最优策略。

cliff walking环境下的表现

这是RL书中描述的一个简单环境,如下面的截图所示。

  • 事件开始于状态S,我们的代理开始于这种状态
  • 一个事件在状态G结束,也就是这是终态。
  • 在S和G之间的最下面一行的状态是悬崖状态
  • 从悬崖状态以外的任何状态转换的奖励为-1,并且代理会移动到邻近的状态
  • 悬崖状的奖励为-100,并且代理移动到开始状态S,也就是说结束了
  • 当代理到达终端状态G,走了100步或者最终处于悬崖状态时,就代表结束了
  • 图中蓝色路径是安全的,但不是最优的,因为它需要很多步才能到达目标状态
  • 红色路径是最优的,但它是非常危险的,因为代理可能会发现自己在悬崖边缘

从环境的描述来看,代理的目标是最大化累积奖励,即采取尽可能少的步数,因为每一步的值为-1。最优路径是悬崖上方的那条,因为它只需要13步,值为-13。我使用上面的2td(0)方法来确定它们是否在上面以获得最优路径。

实验环境如下:

在训练中使用以下超参数:

  • episodes:2000
  • discounting factor:1
  • Alpha: 0.1,这是学习率
  • Epsilon: 0.1, 选择具有相同概率的所有动作的概率,用于ε贪婪算法

结果:

Sarsa和Q-learning在收敛的时间上大致相同,但Q-learning能够学习13个步骤的最优路径。Sarsa无法学习最优路径,它会选择避开悬崖。这是因为它的更新函数是使用贪婪的方式来获取下一个状态-动作值,因此悬崖上方的状态值较低。

Q-learning在更新中使用了下一个状态动作值的最大值,因此它能够小心地沿着边缘移动到目标状态G。下图显示了每个训练论测的学习步骤数量。为了使图表更加平滑,这里将步骤数按20个一组取平均值。我们可以清楚地看到,Q-learning能够找到最优路径。

下图显示了2种算法的在线性能*这些值再次以20组为单位进行平均)。我们可以看到,Sarsa的性能比Q-learning更好。这是因为随着Q-learning学习获得最优路径,偶尔会发现自己陷入绝境,因为要更新的状态动作对的生成遵循了贪婪算法。而Sarsa学会了避开靠近悬崖的状态,从而减少了靠近悬崖的机会。

总结

这个简单的例子说明了Sarsa和Q-learning之间的比较,我们总结两个算法的区别:

Sarsa和Q-learning都是基于时态差分法的强化学习算法,它们在解决马尔可夫决策过程(MDP)中的强化学习问题时有一些重要的区别。

  1. 更新策略:- Sarsa:在Sarsa中,更新策略是"状态-动作-奖励-下一个状态-下一个动作",即更新后的动作与下一个状态相关。这意味着Sarsa在更新值函数时会考虑在新状态下采取的下一个动作,因此其学习过程更加稳定,可以学习到策略的各种特征。- Q-learning:Q-learning的更新策略是"状态-动作-奖励-最大值动作",即更新后的动作是在新状态下具有最大值函数估计的动作。这使得Q-learning更加倾向于学习最优策略,但也可能导致其学习过程不稳定,容易受到噪声干扰。
  2. 学习方式:- Sarsa:由于Sarsa在更新时会考虑在新状态下执行的下一个动作,它更适合于在线学习和与环境进行交互时的应用。Sarsa在实际应用中可能更加稳定,但也可能会收敛较慢。- Q-learning:Q-learning更倾向于学习最优策略,但由于其更新策略不考虑实际执行的下一个动作,可能在一些情况下收敛更快,但也更容易受到噪声的影响。
  3. 探索策略:- Sarsa:由于Sarsa考虑了在新状态下执行的下一个动作,它在学习过程中倾向于跟随当前策略进行探索,可能更适合于需要较多探索的任务。- Q-learning:Q-learning在更新时不受当前策略的影响,更容易在学习过程中进行探索。然而,这种无关探索策略可能导致Q-learning在某些情况下过度探索,陷入不收敛的状态。
  4. 应用场景:- Sarsa:适用于需要稳定学习过程、重视探索的任务,或者在与环境进行交互时进行在线学习的情况。- Q-learning:适用于倾向于学习最优策略的任务,或者在需要快速收敛时的情况。

这两种算法只是强化学习领域众多算法中的两种,还有其他更高级的算法如Deep Q Network (DQN)、Actor-Critic等,可以根据问题的复杂度和要求选择适当的算法。

最后如果你想自行进行试验,这里是本文两个试验的源代码

https://avoid.overfit.cn/post/b7ecfa32ef354a4e9e0c9e2e5da7376d

作者:Kim Rodgers

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

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

相关文章

LoadRunner(2)

一、Controller 1.1场景设计 1.通过VUG打开 施压机器:发起请求的角色(用户本地电脑) 被压机器:处理请求的角色(服务器) 2.直接双击Controller 场景设计:需要关注三个部分 第一部分: 第二部分: 2.1运行场景…

11-数据结构-栈和队列的应用(C语言)

栈和队列的应用 目录 栈和队列的应用 一、括号匹配(栈) 二、表达式的各种转换 (1)中缀转后缀(手工) (2)后缀转中缀表达式(手工) (3)中缀转后缀(栈) (4)中缀转后缀(树) (5)后缀表达式求值 (6)中缀表达式求值(栈…

2023杭电多校第8场J题-Rikka with Square Numbers

题目链接&#xff1a;csoj | J. Rikka with Square Numbers (scnu.edu.cn) 题目解析&#xff1a; 代码如下&#xff1a; #include<iostream> #include<math.h> #include<algorithm> using namespace std;int main() {ios::sync_with_stdio(0);cin.tie(0);c…

如何通过CSS选择器选择一个元素的子元素?如何选择第一个子元素和最后一个子元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 选择一个元素的子元素⭐ 选择第一个子元素和最后一个子元素⭐ 注意事项⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&…

【C语言】小游戏-三字棋

大家好&#xff0c;我是深鱼~ 目录 一、游戏介绍 二、文件分装 三、代码实现步骤 1.制作简易游戏菜单 2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑随机下棋 6.判断输赢 7.判断棋盘是否满了 四、完整代码 game.h(相关函数的声明&#xff0c;整个代码要引用的头文件以及宏…

五金仓库的管理数字化

随着信息技术的快速发展&#xff0c;数字化管理在各行各业中迅速普及。数字化管理可以让企业轻松高效地收集、存储和共享数据&#xff0c;并利用大数据分析和人工智能等工具进行精确分析和预测&#xff0c;从而更好地理解业务运作情况并做出相应调整&#xff0c;以提高企业效率…

已有公司将ChatGPT集成到客服中心以增强用户体验

Ozonetel正在利用ChatGPT来改善客户体验。该公司表示&#xff0c;他们通过使用ChatGPT收集与客户互动过程收集的“语料”能够更有针对性地提高服务效率&#xff0c;提供个性化的用户体验&#xff0c;并实现更高的客户满意度。[1] 通过这套解决方案&#xff0c;客服中心将拥有一…

IDEA之Debug调试

资料来源于韩老师视频 &#xff08;一&#xff09;初探debug 1、打断点的话&#xff1a;直接在该行前面单击左键&#xff0c;出现小红点就是断点了。 想要取消断点的话&#xff0c;再单击小红点即可。 运行debug时&#xff0c;右键选择"Debug…"而不是选“Run…”…

sip语音对讲终端怎么样?

sip语音对讲终端怎么样&#xff1f; IP语音对讲终端是一种通过网络进行语音通信的设备&#xff0c;具有以下特点&#xff1a; 1. 便捷性&#xff1a;IP语音对讲终端可以通过互联网实现远程通信&#xff0c;用户可在任何地点与他人进行语音交流&#xff0c;无需受到距离的限制…

MySql011——检索数据:过滤数据(使用正则表达式)

前提&#xff1a;使用《MySql006——检索数据&#xff1a;基础select语句》中创建的products表 一、正则表达式介绍 关于正则表达式的介绍大家可以看我的这一篇博客《Java038——正则表达式》&#xff0c;这里就不再累赘。 二、使用MySQL正则表达式 2.1、基本字符匹配 检索…

18-有假币

题目 居然有假币&#xff01; 现在猪肉涨了&#xff0c;但是农民的工资却不见涨啊&#xff0c;没钱怎么买猪肉啊。nowcoder这就去买猪肉&#xff0c;结果找来的零钱中有假币&#xff01;&#xff01;&#xff01;可惜nowcoder 一不小心把它混进了一堆真币里面去了。只知道假币…

Java项目-苍穹外卖-Day03

员工分页查询功能实现 需求分析和设计 代码开发 先设计类 将对应分页查询的传参类以及结果类进行封装 对应真正返回的为Result<PageResult>Controller /**** param employeePageQueryDTO* return*/GetMapping("/page")ApiOperation("员工分页查询&qu…

【C++】开源:glog日志库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍glog日志库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次…

Mac M1 安装Oracle Java 与 IEDA

文章目录 1 官网下载2 安装IDEA参考 1 官网下载 https://www.oracle.com/ 使用finder中的拖拽进行安装即可 2 安装IDEA https://www.jetbrains.com/zh-cn/idea/download/?sectionmac 同样的&#xff0c;下载完后拖拽安装即可 参考 Mac M1 安装Java 开发环境 https://blog.…

Cmder:从此告别记事本记命令的日子

前言 平时开发中遇到这样那样的命令需要记下来&#xff0c;一般做法是这样。 新建记事本将需要记下的关键命令保存。每次需要使用时&#xff0c;粘贴复制即可。 好像没什么毛病&#xff01;直到遇到了 Cmder。。。 当看到同事分析问题时在 Cmder 里命令快捷键刷刷一顿操作&…

体渲染原理及WebGL实现【Volume Rendering】

体渲染&#xff08;Volume Rendering&#xff09;是NeRF神经场辐射AI模型的基础&#xff0c;与传统渲染使用三角形来显示 3D 图形不同&#xff0c;体渲染使用其他方法&#xff0c;例如体积光线投射 (Volume Ray Casting)。本文介绍体渲染的原理并提供Three.js实现代码&#xff…

【AI底层逻辑】——篇章7(上):海量运算背后的算力支持

目录 引入 一、计算机芯片 1、芯片的制造 2、复杂指令集&精简指令集 3、并行计算的GPU 二、协作计算 1、分布式技术“三论文” 2、不可兼得的CAP定理 3、故障类型 续下篇... 往期精彩&#xff1a; 引入 早在2016年DeepMind就公布了AlphaGo的算法细节&#xff0…

易服客工作室:如何在WordPress网站中举办虚拟活动

您是否正在寻找举办和管理虚拟活动的最佳方式&#xff1f; 也许您想在线举行下一次会议或举办有关您的产品和服务的网络研讨会。您可能担心它太贵&#xff0c;或者您没有技术知识来实现​​它。 在本文中&#xff0c;我们将列出您所需的在线服务的所有设备&#xff0c;并教您…

ubuntu python 查看系统是否可用 cuda

ubuntu python 查看系统是否可用 cuda 初环境与设备查看环境演示效果 本篇文章将介绍ubuntu python 查看系统是否可用 cuda 初 希望能写一些简单的教程和案例分享给需要的人 环境与设备 系统&#xff1a;ubuntu 22.04 工具&#xff1a;python 3.10.6 设备&#xff1a;Nvidi…

JavaScript 运行机制详解:再谈Event Loop

一、为什么JavaScript是单线程&#xff1f; JavaScript语言的一大特点就是单线程&#xff0c;也就是说&#xff0c;同一个时间只能做一件事。那么&#xff0c;为什么JavaScript不能有多个线程呢&#xff1f;这样能提高效率啊。 JavaScript的单线程&#xff0c;与它的用途有关。…