SARSA和Q-Learning

news/2025/3/25 20:27:56/文章来源:https://www.cnblogs.com/outs/p/18788548

在强化学习中,SARSAQ-Learning是两种经典的时间差分(TD)控制算法,用于优化智能体的策略。它们的核心区别在于目标Q值的计算方式,分别对应在线策略(On-Policy)离线策略(Off-Policy)的学习范式。以下是两者的详细介绍和对比:

一、Q-Learning 算法

1. 核心思想

  • 离线策略:学习的是最优策略的Q值(即假设下一步采取当前认为的最优动作,无论实际策略如何选择动作)。
  • 更新公式
    [
    Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[ r_t + \gamma \max_{a'} Q(s_{t+1}, a') - Q(s_t, a_t) \right]
    ]
    其中:
    • ( \alpha ) 是学习率,( \gamma ) 是折扣因子;
    • ( \max_{a'} Q(s_{t+1}, a') ) 表示下一状态 ( s_{t+1} ) 的最优动作值。

2. 特点

  • 探索与利用:通常结合 ( \epsilon )-贪心策略(以 ( \epsilon ) 概率随机探索,( 1-\epsilon ) 概率选择当前最优动作)。
  • 收敛性:在有限状态-动作空间下,Q-Learning 收敛到最优策略的Q值(前提是所有状态-动作对被无限次访问)。
  • 应用场景:适合环境模型未知且需要直接优化最优策略的场景(如Atari游戏、围棋等)。

二、SARSA 算法

1. 核心思想

  • 在线策略:学习的是当前策略的Q值(即下一步实际采取的动作 ( a_{t+1} ) 由当前策略生成)。
  • 更新公式
    [
    Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[ r_t + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t) \right]
    ]
    其中:
    • ( a_{t+1} ) 是根据当前策略(如 ( \epsilon )-贪心)选择的下一动作。

2. 特点

  • 策略一致性:更新依赖于当前策略生成的动作序列(( s_t, a_t \rightarrow s_{t+1}, a_{t+1} )),因此更保守。
  • 收敛性:收敛到当前策略(如 ( \epsilon )-贪心策略)的Q值,而非最优策略。
  • 应用场景:适合连续动作空间需要严格遵循当前策略的场景(如机器人控制、路径规划等)。

三、对比:SARSA vs. Q-Learning

维度 Q-Learning SARSA
策略类型 离线策略(学习最优策略) 在线策略(学习当前策略)
目标Q值 下一状态的最优动作值(( \max Q(s', a') )) 下一状态的实际动作值(( Q(s', a') ))
探索方式 基于最优动作的估计(可能过度乐观) 基于当前策略的动作(更谨慎)
收敛目标 最优Q值(( Q^*)) 当前策略的Q值(( Q^\pi ))
样本效率 较低(依赖最优估计的偏差) 较高(样本与策略一致)
风险偏好 更冒险(追求潜在最优) 更保守(避免未知风险)

四、总结

  • Q-Learning:通过“想象”最优动作来更新,适合探索未知环境并直接优化最优策略。
  • SARSA:通过“执行”当前策略的动作来更新,适合需要策略一致性的场景(如安全敏感任务)。

一句话记忆

  • Q-Learning:“看着最好的路走”(离线最优)。
  • SARSA:“沿着自己的路走”(在线策略)。

五、示例(表格更新对比)

假设状态 ( s ),动作 ( a ),奖励 ( r ),下一状态 ( s' ):

算法 动作选择(当前策略) 更新目标(下一状态Q值) 公式简写
Q-Learning ( \epsilon )-贪心 ( \max_a Q(s', a) ) ( Q(s,a) \leftarrow r + \gamma \max Q' - Q )
SARSA ( \epsilon )-贪心 ( Q(s', a') )(实际选择的 ( a' )) ( Q(s,a) \leftarrow r + \gamma Q' - Q )

六、应用案例

  • Q-Learning:Atari游戏(如《太空侵略者》)、棋盘游戏(如井字棋)。
  • SARSA:机器人导航(连续动作空间)、经典控制问题(如悬崖行走)。

通过选择合适的算法,智能体可以在探索与利用之间平衡,逐步优化策略以最大化累积奖励。两者均为强化学习的基础算法,后续的改进(如深度强化学习中的DQN、SAC等)均基于这些思想扩展而来。

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

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

相关文章

USTCPC 2025 游记

队名 合肥一中能不能多请点OI教练,二人队。队长 @包涵宇 ,省队爷。 Day -inf~0 随机写了几道有意思的 cf 。 bhy 又在做黑的插头 dp 。膜拜。 Day 1 早上被父母逼着学习文化课,结果作业做不完直接半红温状态,, 加上昨天做了 ~8h 文化课作业只完成了 1/2 ,然后直接不做了…

AI运维助手-LinuxAgent

介绍 LinuxAgent是基于LLM大模型的智能运维助手,通过接入DeepSeek API实现对Linux终端的自然语言控制,可以实现高效的运维工作。目前已经更新到2.0.5版本。 LinuxAgent能够理解用户的自然语言指令,只要描述需求,系统自动解析意图并执行,支持中文、英语等,可以理解复杂的多…

微服务Elasticsearch

Elasticsearch中倒排索引 为什么查询效率高 比如说一个商品 在一百万条数据中 你如果要搜的话 他会从一百万条数据中去寻找 比如说你要搜小米手机 但是倒排索引是这样的 //倒排 { "小米": [1], "手机": [1,2,3,4], } 他在给定的文档范围内去搜索 比如说正…

20242825 2024-2025-2 《网络攻防实践》第四周作业

@目录一. 实验内容1.1 实验内容概述1.2 实验相关知识概述二. 实验过程2.1 ARP缓存欺骗攻击2.1.1 实验环境配置2.1.2 连通性测试2.1.3 继续实验实验亮点出现问题检查问题解决问题2.2 ICMP重定向攻击2.2.1 实验环境配置2.2.2 连通性测试发现问题检查问题解决问题2.2.3 继续实验…

论文解读-Advances in 3D Generation: A Survey

论文介绍 题目: Advances in 3D Generation: A Survey 发表年份是 2024年,综述性质的文章,是看到腾讯发布了混元3D大模型所以来看看这个论文主要贡献 论文主要根据当前研究领域内不同的3D资产的生成方法进行了一个分类,将3D生成算法分为:前馈生成,基于优化的生成,基于过…

大数据技术

Hadoop Hadoop是一个能够对大量数据进行分布式处理的软件框架 HDFS ​ HDFS(Hadoop Distributed File System,Hadoop的分布式文件管理系统),是Hadoop的两大核心之一,用于管理数据和文件 Hadoop安装 ​ Hadoop可以在Window系统上运行,但其官方支持的操作系统只有Liunx,所以…

User\main.c(7): error: #5: cannot open source input file ds18b02.h: No such file or directory

报错截图解决途径 复制报错信息上网搜索,一般的解决办法:在c/c++选项中的Include Paths中包含头文件,将移植过来的代码放到指定的文件夹里,在Floder Setup中设置新移植的文件路径。很可惜我确认过我包含了头文件,但仍然报同样错误。 最后发现我代码里面是 #include"d…

Bean注入几种方式 (放入Spring容器)

目录 1、XML方式注入set方式注入构造方法注入2、注解方式注入@Component + @ComponentScan@Configuration + @Bean + @ComponentScan@Import3、实现ImportBeanDefinitionRegistrar接口 4、实现FactoryBean 5、实现BeanDefinitionRegistryPostProcessor 一、XML方式注入 在现在这…

自然资源数据要素支撑场景建设

自然资源数据要素与场景建设是推动经济社会高质量发展的重要途径。随着数字经济的快速发展,自然资源数据已成为关键的生产要素,其价值挖掘和利用成为推动经济社会发展的关键。自然资源数据要素的重要性自然资源数据要素包括地理、土地、矿产、海洋等多源数据,是支撑经济社会…

C语言分支与循环基础应用编程

实验任务1#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 5int main() {int number;int i;srand(time(0));for(i=0;i<N;++i){number=rand()%100+1;printf("20490042%04d\n",number);}return 0; }问题1:生成一个1~100的随机…

NSSCTF Round#28 Team web题解

真是让人操心,但是又无法转移视线ez_ssrf 很简单的ssrf,知识点在网上搜都能搜到 payload http://node3.anna.nssctf.cn:28658@127.255.255.254/flag ez_php 第一部分有个非预期,直接/file就能出flag is_numeric绕过和md5强比较,很简单的知识点,这里就不细说了 第二部分网上…

Netty源码—4.客户端接入流程

大纲 1.关于Netty客户端连接接入问题整理 2.Reactor线程模型和服务端启动流程 3.Netty新连接接入的整体处理逻辑 4.新连接接入之检测新连接 5.新连接接入之创建NioSocketChannel 6.新连接接入之绑定NioEventLoop线程 7.新连接接入之注册Selector和注册读事件 8.注册Reactor线程…