【强化学习】一文读懂,on-policy和off-policy

news2025/8/6 3:42:37

一文读懂,on-policy和off-policy

我来谈一下我的理解,不一定对。本文以 Sarsa 和 Q-learning 为例

  • Sarsa:on-policy
  • Q-learning:off-policy

1. 什么是on-policy和off-policy?

我们有两个策略:行动策略和目标策略

  • on-policy: 行动策略目标策略是同一个策略
  • off-policy: 行动策略目标策略不是同一个策略

2. 什么是行动策略和目标策略?

  • 行动策略:就是每一步怎么选动作的方法,它产生经验样本
  • 目标策略:我们选什么样更新方式,去寻找最好的Q表

3. 以 Sarsa 和 Q-learning 为例

3.1 算法讲解

在这里插入图片描述
目标:更新S环境下,做出a动作后的Q(s,a)

① Q-learning算法和Sarsa算法都是从状态s开始,根据当前的Q表使用一定的策略(** Epsilon gready​)选择一个动作a**。

② 然后观测到下一个状态s’,此时这个状态下有个奖励r

③ 并再次根据Q表选择动作a’。只不过两者选取a’的方法不同

  • Q-learning: 使用贪心策略(gready​),即选取值最大的a’,此时只是计算出哪个a‘可以使Q(s,a)取到最大值,并没有真正采用这个动作a‘
  • Sarsa : 仍使用策略策略(Epsilon gready​),并真正采用了这个动作a‘ 。

④ 然后带入式子进行更新

3.2 总结

  • Q-learning: 行动策略是E-gready,但是目标策略,是gready,所以是off-policy
  • Sarsa: 行动策略是E-gready,但是目标策略,是E-gready,所以是on-policy

4 一些问题的个人理解

不一定对

4.1 为什么行动策略是产生经验样本

行动策略就是,用这个策略来指挥向哪里走。
在这里插入图片描述

比如 :

读书-读书-读书-奖励
读书-读书-电视-批评

行动策略决定怎么走,每个环境不同的动作,都是一条更新Q表的路径,也都是一个经验样本

4.2 off-policy,on-policy各自优缺点

off-policy学习的优点是:

  • 它可以从任何来源的数据中学习,不需要每次都使用最新的策略来收集数据,这样可以提高数据利用率和学习效率
  • 它可以同时探索和利用,因为它有两个策略:一个用于探索,一个用于利用。这样可以避免陷入局部最优解。
  • 它可以更容易地实现函数逼近和经验回放,因为它不依赖于当前执行的策略。

Off-policy学习的缺点是:

  • 它可能需要更多的计算资源和内存空间,因为它需要维护一个数据缓冲区和两个策略。
  • 它可能需要使用重要性采样或其他技术来纠正不同策略之间的偏差,这可能增加了复杂度和方差。
  • 它可能难以保证收敛性和稳定性,特别是在非静态环境中。

On-policy学习的优点是:

  • 它比较简单和直观,因为它只有一个策略,并且只从当前执行的策略中学习。
  • 它可以保证收敛到最优策略或接近最优策略的结果,如果满足一定的条件(如足够多的探索)。
  • 它可以适应动态变化的环境,因为它总是使用最新的数据来更新策略。

On-policy学习的缺点是:

  • 它可能浪费了很多有价值的数据,因为它只从当前执行的策略中学习,并且每次都需要使用最新的策略来收集数据。
  • 它可能难以平衡探索和利用之间的权衡,因为它只有一个策略,并且需要在每个状态下都进行一定程度的探索。
  • 它可能容易陷入局部最优解,特别是当初始状态或动作选择不合理时。

4.3 Off-policy 如何拿别人经验学习

Off-policy学习如何拿别人学习经验去学习的原理是,它可以从一个数据缓冲区中随机抽取一些之前收集的经验,这些经验可能来自于不同的策略。然后,它可以用这些经验来更新当前的策略,使其更接近最优策略。这样,它就不需要每次都使用最新的策略来收集数据,而是可以利用已有的数据来提高学习效率

我理解是的
【别人经验】
读书-读书-读书-奖励100
r[读书-读书-奖励100]=0+0+0.9 * 0.9 * 100=81

【现在】
看电视(-100)-读书-读书-奖励100

我后面就不用算了,因为如果走这条路,别人经验已经有81,直接更新就行

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

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

相关文章

【python】为你绘制玫瑰一束,爱意永存

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 若是有真情,爱意如溪水, 若是有真爱,爱意如阳光, 若是两情相悦,又岂在朝朝暮暮, 女子淡淡的情愫,深深地想念, 浓浓的爱意&a…

Linux :理解编译的四个阶段

目录一、了解编译二、认识编译的四个阶段(一)预处理(二)编译(三)汇编(四)链接1.静态链接2.动态链接三、分步编译(一)创建.c文件(二)预…

【项目】Java树形结构集合分页,java对list集合进行分页

Java树形结构集合分页需求难点实现第一步:查出所有树形集合数据 (需进行缓存处理)selectTree 方法步骤:TreeUtil类:第二步:分页 GoodsCategoryController分页getGoodsCategoryTree方法步骤:第三…

MySQL数据库基本操作-DQL

概念 数据库管理系统一个重要功能就是数据查询,数据查询不应只是简单返回数据库中存储的数据,还应该根据需要对数据进行筛选以及确定数据以什么样的格式显示。 MySQL提供了功能强大、灵活的语句来实现这些操作。 MySQL数据库使用select语句来查询数据 语…

ansible组件介绍和简单playbook测试

一、ansible inventory 在大规模的配置管理工作中,管理不同业务的机器,机器的信息都存放在ansible的inventory组件里面。在工作中,配置部署针对的主机必须先存放在Inventory里面,然后ansible才能对它进行操作。默认的Ansible的in…

docker常用命令,基于linux+centos7

启动docker systemctl start docker 重启docker systemctl restart docker docker自启动 systemctl enable docker 查看所有docker,包括正在运行的和关闭的 docker ps -a 查看正在运行的docker docker ps 停止正在运行的docker。通过id或者docker名称 do…

Ceph介绍

分布式存储概述 常用的存储可以分为DAS、NAS和SAN三类 DAS:直接连接存储,是指通过SCSI接口或FC接口直接连接到一台计算机上,常见的就是服务器的硬盘NAS:网络附加存储,是指将存储设备通过标准的网络拓扑结构&#xff…

client打包升级

目录 前言 一、client如何打包升级? 二、使用步骤 1.先进行改版本 2.执行打包升级命令 总结 前言 本文章主要记录一下,日常开发中,常需要进行打包升级的步骤。 一、client如何打包升级? # 升级发布版本 ## 修改版本 * 父p…

链表经典面试题【典中典】

💯💯💯链表经典面试题❗❗❗炒鸡经典,本篇带有图文解析,建议动手刷几遍。🟥1.反转链表🟧2.合并两个有序链表🟨3.链表分割🟩4.链表的回文结构🟦5.相交链表&…

74. ‘pip‘不是内部或外部命令,也不是可运行的程序-解决办法

74. pip’不是内部或外部命令,也不是可运行的程序-解决办法 文章目录74. pip不是内部或外部命令,也不是可运行的程序-解决办法1. 课题导入2. 手动配置环境变量1. 准备工作2. 配置步骤3. 命令行安装1. 课题导入 有的同学在使用pip安装第三方库时&#xf…

elasticsearch 分布式搜索引擎1

1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: 在GitHub搜索代码 在电商网站搜索商品 在百度搜索答案 在…

WorksPace一款简化修改IP繁琐重复性工作的高效工具

WorksPace简介 workspace软件中文版是一个集成修改网卡IP、网络扫描、记事本、快速启动的效率工具,前端使用Flutter,后端主要是Dart,少量的后台功能用以前Golang,数据存储使用SQLite。主要是为了简化我在日常工作中的频繁重复操作…

app里未读消息已读、未读是怎么设计的?

也不知道大家目前都用的java编程软件有哪些,毕竟在应用程序中,未读和已读消息的设计取决于应用程序的需求和目标。下面是一些常见的设计模式:一、简单的未读/已读标记简单的未读/已读标记:这是最常见的设计,用户打开应…

Linux - Linux系统优化思路

文章目录影响Linux性能的因素CPU内存磁盘I/O性能网络宽带操作系统相关资源系统安装优化内核参数优化文件系统优化应用程序软件资源系统性能分析工具vmstat命令iostat命令sar命令系统性能分析标准小结影响Linux性能的因素 CPU CPU是操作系统稳定运行的根本,CPU的速…

一元导数与多元求导数总结

前序:文章结构 1.一元导数 ①一般函数求导 因为太简单的原因,事实上一般函数求导不会单独出现,大多数都是出现在各种特殊的求导过程中。只要掌握16个基本求导公式没问题。 ②复合函数求导(主要链式法则) 这种一般是…

流量监管与整形

流量监管与整形概览流量监管介绍流量监管令牌桶流量监管的具体实现单桶单速流量监管双桶单速流量监管双桶双速流量监管流量整形介绍GTS(Generic Traffic Shaping)LR(Line Rate)流量整形与流量监管的区别概览 流量整形是对报文的速…

某美颜app sig参数分析

之前转载过该app的文章,今天翻版重新整理下,版本号:576O5Zu56eA56eAYXBwIHY5MDgw (base64 解码)。 上来先抓个包: jadx搜索关键词 "sigTime",然后定位到这里 看这行代码 cVar.addForm(INoCaptchaComponent.sig, genera…

NAST概述

一、NATS介绍 NATS是由CloudFoundry的架构师Derek开发的一个开源的、轻量级、高性能的,支持发布、订阅机制的分布式消息队列系统。它的核心基于EventMachine开发,代码量不多,可以下载下来慢慢研究。 不同于Java社区的kafka,nats…

C++小白入门

1.1编写程序四步走&#xff1a;创建项目创建文件编写代码运行程序解决方案资源管理器&#xff1a;在新创建的项目下右键“源文件”-添加-“新建项”-“C文件&#xff08;.cpp&#xff09;”&#xff0c;给文件取名#include <iostream> using namespace std;int main() {c…

JavaScript新手学习手册-基础代码(二)

与上篇博客相接 一&#xff1a;函数&#xff1a; 案例&#xff1a;通过函数实现绝对值的输出 方法一&#xff1a; function absoluate(x){if(x>0){return x;}else{ return -x;}} 在控制台调用函数 方法二&#xff1a; var demo1 function(x){if(x>0){return x;}els…