强化学习笔记-08 Planning and Learning

news2024/11/20 16:26:39

 前几篇我们介绍了一个重点概念model-base和model-free,其中model-base是建立在存在某个环境模型,从模型中可以获得状态、动作、奖励的转移信息,比如动态规划方法,当我们确定了状态动作的转换概率,此时我们可以通过递归的方式,迅速获得价值函数的估计。

Q(s,a)\\ =\sum P(s',r|s,a)(r+V(s'))\\ =\sum P(s',r|s,a)(r+ \sum \pi (a'|s')Q(s',a'))

在价值函数的更新过程中,一种方式是遍历所有状态-动作来完成更新,但如果状态-动作太多,而某些状态对于我们目标达成完全没有用,遍历所有状态进行更新的效率非常低,另一方面各状态的价值函数更新存在相互依赖,因此其更新顺序也会影响训练的效率,因为所谓的planning是合理地规划状态更新步骤。

而当我们对于环境模型是完全未知时,就必须要通过同环境进行交互采样来获得真实累积收益G_t,然后通过其来更新价值函数,这种方法称为model-free,MC和TD算法就属于此类,其通过采样来学习。这类方法的好处是其获得的收益是真实无偏的,但其训练速度要远慢于model-base的方法,特别是当同真实环境交互采样的代价很高时。

Q_t(s,a)=Q_{t-1}(s,a) + \alpha (G_t(s,a) - Q_{t-1}(s,a))

因此本节介绍一种通用的方式将两种策略进行结合,在对于环境完全未知的情况下,通过构建一个可学习的环境模型,一方面环境模型也可通过真实采样来学习,另一方面通过环境模型进行仿真采样,并也可以通过仿真采样来更新价值函数。

 上图描述整体结构,一方面通过真实环境采样去直接学习价值函数,另一方面通过真实环境采样去学习环境模型,然后通过环境模型来间接学习价值函数。

1. Dyna算法

Dyna算法是上述模型最为基本的实现,其假设了环境状态转移是确定的,还不是概率的,即:

P(s',r|s,a)=1\text{ or }0

因此在Dyna算法,其用一个表格来表示环境模型Model(S,A)=[S',R]其指向了另一个确定状态。

Dyna算法将训练过程分为多个迭代轮数,在每个迭代轮数,会进行一轮真实环境采样,并更新价值函数,同时根据采样结果来更新环境模型,之后再根据环境模型来迭代更新价值函数n次。

2. Dyna-Q+ 

在Dyna算法中假设了模型在学习某个状态及动作之后就不会变化,换而言之模型不会更新或出错,但当这种情况发生时,那么Dyna算法中(f)过程的间接学习就会有问题,因此Dyna-Q+在该过程中引入了启发式算法,其将环境模型表示为Model(S,A)=[S',R,T],其中T表示更新时间。价值函数更新所用于R值会随着未更新时间越长而增加。从而鼓励去探索长时间未探索的状态。

R_t=R+k\sqrt{t-T}

3. Prioritized Sweeping

在Dyna算法中,当完成真实采样后,价值函数几乎没有变化,此时再通过模型来进行仿真训练是没有意义的,因为此时价值函数也不会有更新。因此Prioritized Sweeping思想通过真实采样后价值函数是否变化来判断是否需要通过模型来进行仿真训练。另一方面只会考虑该状态所影响的其他状态来进行更新。

4. Expected vs. Sample Updates 

在通过模型来进行仿真训练中,价值函数更新方式有两种,通过动态规划中的期望更新:

Q(s,a)=\sum p(s',r|s,a)(r + \gamma \sum\pi (a'|s') Q(s',a'))

或类似于Q-learning中采样更新的方式:

Q_t(s,a)=Q_{t-1}(s,a)+\alpha (R+\lambda \text{ }\underset{a'}{max}\text{ }Q_{t-1}(s',a')-Q_{t-1}(s,a))

后者相比于前者来说,单次迭代其计算量要小很多,但是前者的收敛速度更快,而后者要经过多次更新。然而当状态-动态很多时,采样更新由于计算量较少,其整体的收敛速度会更快。

5. Trajectory Sampling

采样方式存在两种一种是通过on-policy进行采样,一种直接均匀采样,我们可以直观的感觉通过on-policy方式加快模型训练,但另一方面可能会漏探索某些状态,导致无法达到最优点。

上图比较了on-policy采样和直接均匀采样的效果不同,首先on-policy收敛速度更快,特别是当状态数增加时效果更明显,另外左图可以看出当分支较多时(当前状态的下一可能状态的数量),on-policy可能无法达到最优点。

6. Real-time Dynamic Programming

RTDP通过上述提到on-policy Trajectory Sampling方式来加快原始DP算法的收敛速度,原始的价值函数更新公式为:

V(s) =\sum \pi(s|a)\sum P(s',r|s,a)(r+ V(s'))

而RTDP的价值函数更新公式为:

V(s) =\underset{a}{max} \ \sum P(s',r|s,a)(r+ V(s'))

7. Monte Carlo Tree Search

传统的Monte Carlo方法,需要遍历全部的状态-动作空间,这么做的效率非常低,特别是当状态空间特别大时,更是很难实现。因此Tree Search的方式是通过树结构来存储历史状态访问路径,每个状态都是树上的一结点,从某个根结点出来来访问后续状态,这种方式避免大量无效状态的访问。

我们假设对于Monte Carlo Tree中的某个状态结点,其存在三种情况:

  • 终结点:该结点是终结点
  • 中间结点:该结点存在后续结点且已经被完全探索
  • 探索点:该结点存在后续结点且已经未被完全探索

Monte Carlo Tree Search从某根结点开始,迭代按下面四个步骤运行:

  1. select:从根结点出发,依次向下探索,当遇到中间结点时,根据Tree Policy来选择某个子结点,直到遇到终结点(更新整个路径状态的价值函数)或者遇到探索点
  2. Expansion:当遇到探索点时,从中选择一个未完全探索的子结点

  3. Simulation:未完全探索的子结点通过Rollout Policy来选择后续的状态动作,直到遇到终结点

  4. Backup:遇到终结点,更新整个路径上状态-动作的价值函数。

 

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

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

相关文章

寄存器某个位赋值、宏定义、头文件的条件编译及全局声明extern的使用

一、给寄存器的某个位进行赋值 C语言基础知识&#xff08;位操作&#xff09; 运算符含义运算符含义&按位与~按位取反|按位或<<左移^按位异或>>右移 我们定义一个32位的寄存器变量&#xff1a;unit32_t temp0; 从左到右依次是第1位&#xff0c;第2位......第…

网络层:地址解析协议ARP

网络层&#xff1a;地址解析协议ARP 笔记来源&#xff1a; 湖科大教书匠&#xff1a;ARP协议 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 B知道C的IP地址但如果不知道其对应的MAC地址&#xff0c;就无法将数据包发送给C&#xff0c;如何解决这个…

新款Model 3长什么样?特斯拉已经开始降价?

作者 | Amy 编辑 | 德新 马斯克时隔三年再次访华&#xff0c;期间会见了多部委领导及重量级人物&#xff0c;在北京和上海短暂停留了44小时后便离开了中国。 此前曾有多家媒体猜测马斯克可能会在中国发布/展示改款Model 3。但据彭博社报道&#xff0c;马斯克只是在上海工厂看了…

面向对象编程 实验三 sduwh 子窗口与控件的基本用法、资源的使用 参考实验报告2

源自网络收集&#xff0c;仅供参考 实验三收集到两份完整报告&#xff0c;这是其二&#xff0c;另一份见本专栏上一篇文章。 1 实验要求 整体目的&#xff1a;理解、窗口之间的消息传送、调用栈&#xff1b;掌握光标、图标、菜单的制作和使用方 式 &#xff1b; 掌 握 菜 单…

【Vue】三:Vue核心处理---vue的其它指令和自定义指令

文章目录 1.vue的其它指令1.1v-text 和 v-html1.2 v-cloak1.3 v-once1.4 v-pre 2. 自定义指令2.1 函数式2.2 对象式2.3.定义全局的指令 1.vue的其它指令 1.1v-text 和 v-html v-text&#xff1a;当做文件解析。 v-html&#xff1a;当做 HTML 代码解析。 1.2 v-cloak v-cloa…

在自定义数据集上训练 YOLOv8——完整教程

Ultralytics 最近发布了 YOLOv8 系列对象检测模型。这些模型在 COCO 数据集上的速度和准确性都优于之前版本的 YOLO 模型。但是自定义数据集的性能如何呢?为了回答这个问题,我们将在自定义数据集上训练 YOLOv8 模型。具体来说,我们将在大规模坑洞检测数据集上对其进行训练。…

电子模块|压力传感器模块HX711---C51STM32驱动

电子模块|压力传感器模块HX711---硬件介绍与C51&&STM32驱动 实物照片模块简介模块特点 软件驱动C51软件代码STM32软件代码 实物照片 模块简介 HX711是一款专为高精度称重传感器而设计的24位A/D转换器芯片。与同类型其它芯片相比&#xff0c;该芯片集成了包括稳压电源、…

Rust 标准库字符串类型String及其46种常用方法

Rust字符串 Rust主要有两种类型的字符串&#xff1a;&str和String &str 由&[u8]表示&#xff0c;UTF-8编码的字符串的引用&#xff0c;字符串字面值&#xff0c;也称作字符串切片。&#xff06;str用于查看字符串中的数据。它的大小是固定的&#xff0c;即它不能…

网络层:IP地址

网络层&#xff1a;IP地址 笔记来源&#xff1a; 湖科大教书匠&#xff1a;IP地址 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 IP地址是因特网(Internet)上的主机和路由器所使用的地址&#xff0c;用于标识两部分信息&#xff1a; 网络编号&am…

Allegro16.6详细教程(一)

第一章User Interface 本章的主要內容介紹allegro操作介面,透過本章學習可以對Allegro的工作介面有了大致的瞭解,同時也能體驗出Allegro PCB Layout時的強大功能。 A.程式的啟動 除了以上Allegro主程式,我們還會常用到以下幾個常用工具: • Padstack Designer (Padstack…

《代码日记》

代码日记 Project :Space1、new_method.py new2.pynew3.pynew4.pynew5.py new5.1.pynew6.py Project :Space 都是在D001289数据集上的测试 1、new_method.py 先划分训练集和测试集 通过稀疏自编码器进行降维至20维度 自编器参数&#xff1a; # 训练自编码器模型autoencoder …

JavaEE进阶 Spring AOP(6/1)

目录 1.什么是AOP 2.Spring AOP可以干什么 3.AOP的组成成分 4.SpringAOP实现步骤 5.SpringAOP的原理 1.什么是AOP AOP是面向切面编程&#xff0c;是一种思想 Spring AOP是一种具体的技术 2.Spring AOP可以干什么 1.用户登录状态的判断 2.统一的日志记录&#xff08;比如记录…

基于深度学习的高精度牙齿健康检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度牙齿健康检测识别系统可用于日常生活中检测牙齿健康状况&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的牙齿目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数…

c++代码实现一个线程池(清晰明了,一看就懂)

线程池的应用 在我认知中&#xff0c;任何网络服务器都是一个死循环。这个死循环长下面这个样子。 基本上服务器框架都是基于这个架构而不断开发拓展的。 这个死循环总共分为四个步骤&#xff0c;可以涵盖所有客户端的需求&#xff0c;然而目前绝大多数企业不会用这样的架构。…

带有 Utopia Messenger 的免费 ChatGPT 助手

全世界都喜欢 ChatGPT&#xff01;而且这个工具从未如此易于访问。没有限制、没有VPN、没有代理和佣金。现在您可以使用 Utopia Messenger 的传奇聊天的全部功能。 ChatGPT是每个线上用户的必备工具。它为我们提供任何所需的数据&#xff0c;生成内容&#xff0c;并解决多项任…

[数据集][目标检测]目标检测数据集黄瓜数据集VOC格式1309张

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;1308 标注数量(xml文件个数)&#xff1a;1308 标注类别数&#xff1a;1 标注类别名称:["cucumber"] 每…

图论与算法(1)图论概念

1. 图论与算法 在计算机科学中&#xff0c;图论与算法是两个重要且紧密相关的领域。图论研究图的性质和特征&#xff0c;而算法设计和分析解决问题的方法和步骤。图论提供了一种形式化的方法来描述和分析各种关系和连接&#xff0c;而算法则为解决图相关的问题提供了有效的解决…

【刷题之路】单调栈秒解每日温度

一、题目描述 原题链接&#xff1a;https://leetcode.cn/problems/daily-temperatures/ 题目描述&#xff1a; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高…

【JVM】什么是双亲委派机制?

一、为什么会有这种机制&#xff1f; 类加载器将.class类加载到内存中时&#xff0c;为了避免重复加载&#xff08;确保Class对象的唯一性&#xff09;以及JVM的安全性&#xff0c;需要使用某一种方式来实现只加载一次&#xff0c;加载过就不能被修改或再次加载。 二、什么是双…

docker安装 sqlserver2017 或者 2008

一、必要条件 服务器的运行内存必须大于2GB 二、拉取2017镜像 docker pull mcr.microsoft.com/mssql/server:2017-latest三、启动镜像 docker run --name sqlserver2017 --restart always -v /home/ceshi1:/var/opt/mssql -d -e ACCEPT_EULAY -e SA_PASSWORDqwer!#123 -…