强化学习——学习笔记2

在上一篇文章中对强化学习进行了基本的概述,在此篇文章中将继续深入强化学习的相关知识。

一、什么是DP、MC、TD?

动态规划法(DP):动态规划法离不开一个关键词,拆分 ,就是把求解的问题分解成若干个子阶段,前一问题的结果就是求解后一问题的子结构。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。
举一个简单的例子:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月的兔子总数为多少?

对于这个问题,我们可以根据月份把问题划分为n个阶段,每个月的兔子数,都会等于前一个月的兔子数加上这个月新出生的兔子数,
所以 第n个月的兔子数=第n-1个月的兔子数+新出生的兔子数,而 新出生的兔子数=有繁殖能力的兔子数=两个月前的兔子数,即:第n个月的兔子数=第n-1个月的兔子数+第n-2个月的兔子数。
看着有点混乱?
再举一个例子:
有一个背包,可以装载重量为5kg的物品。
​ 有4个物品,他们的重量和价值如下。
​ 背包:载重5kg
​ 物品1
​ 重量: 1kg
​ 价值:¥3
​ 物品2
​ 重量:2kg
​ 价值:¥4
​ 物品3:
​ 重量: 3kg
​ 价值:¥5
​ 物品4
​ 重量:4kg
​ 价值:¥6
​ 那么请问,在不得超过背包的承重的情况下,将哪些物品放入背包,可以使得总价值最大?

对于上题,总重量是5kg,从四个物品中选,我们要求的问题就是:F(5,4)。
对于第四个物品就只有两种情况,我们可以选择选,或者是不选,不选的话就还是5kg,只从前面三个物品去选,F(5,3)。选的话就是还剩下1kg,从前面三个去选,F(1,3)
则有如下状态转移计算:
F ( 5 , 4 ) = m a x { F ( 1 , 3 ) + 6 , F ( 5 , 3 ) } F(5,4) = max \{ F(1,3) + 6, F(5,3) \} F(5,4)=max{F(1,3)+6,F(5,3)}

F ( W , N ) = m a x { F ( W − W n , N − 1 ) + V n , F ( W , N − 1 ) } F(W,N) =max \{F(W-W_n, N-1)+V_n,F(W,N-1)\} F(W,N)=max{F(WWn,N1)+Vn,F(W,N1)}(w是重量,n是从前n个去选, W n W_n Wn是第n个的重量, V n V_n Vn是第n个的价值)
当重量只剩下0kg的时候,就没有能够选择的物品了,最大价值就是0,所以F(0,n)=0,
当只是剩下的重量大于0,但是已经遍历到从前1个物品中选择时,那么能选择的物品就只有第一个,最大价值就是3,即F(n,1)=3。

从上面两个问题可以看出,动态规划一般只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。

动态规划算法一般分为以下4个步骤:
1、描述最优解的结构
2、递归定义最优解的值
3、按自底向上的方式计算最优解的值 //此3步构成动态规划解的基础。
4、由计算出的结果构造一个最优解 //此步如果只要求计算最优解的值时,可省略

换言之,动态规划方法的最优化问题的两个要素:最优子结构性质,和子问题重叠性质

最优子结构
如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。意思就是,总问题包含很多个子问题,而这些子问题的解也是最优的。
重叠子问题
子问题重叠性质是指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在表格中简单地查看一下结果,从而获得较高的效率。

如果已经理解了上文中的动态规划算法基本知识,我们就可以蒋动态规划算法应用到强化学习中了。

求解最优策略 v ∗ ( s ) v_∗(s) v(s)
在这里插入图片描述

1、最优策略可以通过最大化 q π ( s , a ) q_π(s,a) qπ(s,a)找到。
在上一篇文章中提到如下公式:
在这里插入图片描述
在这里插入图片描述
2、从上面两个公式中可以看出,若想 q π ( s , a ) q_π(s,a) qπ(s,a)最大,则需要 π ∗ ( a ∣ s ) π_∗(a|s) π(as)最大,也就是 π ∗ ( a ∣ s ) = 1 π_∗(a|s)=1 π(as)=1

结合上面两个理论可以得出下式:
在这里插入图片描述
同时在上一篇文章中提出下式:
在这里插入图片描述
综合以上两个公式我们最终得出:
在这里插入图片描述
回归到DP问题,相当于当知道奖励函数和状态转换函数时,便可以根据下一个状态的价值来更新当前状态的价值,意味着可以把计算下一个可能状态的价值当成一个子问题,而把计算当前状态的价值看做当前问题。
下面展示DP求解最优策略的算法流程
在这里插入图片描述
蒙特卡洛法(MC):也称为统计模拟方法,就是通过大量的随机样本来估算或近似真实值,比如近似估算圆的面经、近似定积分、近似期望、近似随机梯度。
有如下例子:
可以通过这个式子来近似计算:圆的面积/ 正方形的面积 = 圆中点的个数/正方形中点的个数
在这里插入图片描述
类似的,也可以用蒙特卡洛法来估计一个策略在一个马尔可夫决策过程中的状态价值。考虑到 一个状态的价值是它的期望回报,那么如果我们用策略在马尔科夫决策过程上采样很多条序列,然后计算从这个状态出发的回报再求其期望。公式如下:
在这里插入图片描述
时序差分法(TD):
当面对状态价值函数的求解时
在这里插入图片描述
动态规划(DP)会把上述第三个等式的估计值作为目标,不是因为DP要求需要环境模型本身提供期望值,而是因为真实的 v π ( S t + 1 ) v_π(S_{t+1}) vπ(St+1)是未知的,所以只能使用当前的估计值 v π ( S t + 1 ) v_π(S_{t+1}) vπ(St+1)来替代:
在这里插入图片描述
且DP求解状态 S t S_t St的状态值函数时,需要利用所有后续状态 S t + 1 S_{t+1} St+1
在这里插入图片描述
蒙特卡洛方法(MC)会上述把第一个等式的估计值作为目标,毕竟第一个等式中的期望值是未知的,所以我们用样本回报来代替实际的期望回报。但MC求解状态 S t S_t St的状态值函数时,需要等一个完整序列结束,因为只有到此时, G t G_t Gt才是已知的:
在这里插入图片描述
而时序差分(TD)既要采样得到上述第一个等式的期望值,而且还要通过使用上述第三个等式中当前的估计值V来替代真实值 v π v_π vπ且TD每过一个time step就利用奖励 R t + 1 R_{t+1} Rt+1和值函数 V ( S t + 1 ) V(S_{t+1}) V(St+1)更新一次(当然,这里所说的one-step TD 方法,也可以两步一更新,三步一更新….)

考虑到 G t = R t + 1 + γ V ( S t + 1 ) G_t=R_t+1+γV(S_{t+1}) Gt=Rt+1+γV(St+1),可得:
在这里插入图片描述
TD与DP一致的是,时序差分方法也无需等待交互的最终结果,而可以基于下一个时刻的收益 R t + 1 R_{t+1} Rt+1和估计值 V ( S t + 1 ) V(S_{t+1}) V(St+1)就可以更新当前状态的价值函数,不需像MC等到N步以后即等一个完整序列结束后才能更新 V ( S t ) V(S_t) V(St)

总之,TD结合了DP和MC,与DP一致的点是与MC不一致,与DP不一致的点恰又与MC一致,某种意义上来说,结合了前两大方法各自的优点,从而使得在实际使用中更灵活,具体而言如下图所示:
在这里插入图片描述
顺带再举一个例子,好比行军打仗时,为了得到更好的行军路线,将军派一人前去探路
MC的做法相当于一条道走到黑 没走个10公里不回头;
DP相当于所有道比如10条道 每条道都走个1公里 不错过任何一条可能成为最好道的可能,最后10条道都走完1公里后才返回汇报;
TD则相当于先选一条道走个1公里即返回汇报,之后再走下一条道的1公里;

参考自:https://blog.csdn.net/v_JULY_v/article/details/128965854

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

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

相关文章

解读:Mint Blockchain 最新路线图,释放 NFT 生态重磅发展计划

作者:Mint Ecosystem 关于 Mint Blockchain:Mint Blockchain 是一个以太坊原生 L2 网络,核心是发展 NFT 生态和产业,促进 NFT 领域的 Mass Adoption 产生。MintCore 团队致力于将 Mint Blockchain 打造成一个围绕服务 NFT 资产的…

GIT 新建分支和合并分支

文章目录 前言一、新建分支二、切回老分支,保留新分支的更改三、合并分支 前言 本文主要针对以下场景进行介绍: 场景一:创建新的分支 当前分支(dev_1)已经开发完毕,下一期的需求需要在新分支(dev_2)上进行开发,如何创…

Java整合EasyExcel实战——2 导出复杂表头

详情代码 实体类 Data public class ComplexHeadData {ExcelProperty({"主标题", "字符串标题"})private String string;ExcelProperty({"主标题", "日期标题"})private Date date;ExcelProperty({"主标题", "数字标…

UE5 Cesium2 最新使用地理配准子关卡构造全球场景

参考官方最新教程:Building Global Scenes with Georeferenced Sublevels – Cesium 创建持久关卡(主关卡) 这里一般包含DynamicPawn、CesiumSunSky 和 Cesium World Terrain 全球场景通用的对象。子关卡的创立,官方教程分为了两…

“揭秘:为什么羊驼Ollama成为计算机运行大型语言模型的最佳拍档?“

最近,AIM 评测了在计算机上本地运行大语言模型(LLM)的最佳工具,Ollama 脱颖而出,成为最高效的解决方案,提供了无与伦比的灵活性。Ollama 是 Jeffrey Morgan 开发的一款开源工具,它正在彻底改变爱…

Prometheus Operator创建告警规则并接入钉钉报警

prometheus之钉钉报警 前言1. 添加prometheus报警规则1.2 添加自定义报警规则文件 2. 配置钉钉报警2.2 部署dingding插件 3. 编写alertmanager配置文件 前言 在kubenetes上安装了kube-promethues(包含Prometheus Operator),程序正常跑起来了&#xff0c…

expect自动交互

在执行命令或脚本的时候,当控制台提示我们需要输入账号密码、参数等信息的时候,expect可以将预设的参数值自动输入到控制台,实现了自动交互。 1. 安装expect yum install expect 2. 案例: 创建 demo.exp 文件,并添…

BEVFusion的相机工作流中,图像编码之后FPN+ADP网络的作用

在BEVFusion的相机工作流中,图像编码之后会经过一个FPNADP的网络,那么这个结构的作用是什么呢 FPN大家都很熟悉,就是特征金字塔。但是这里还是贴一些来自GPT的废话 在Bird’s Eye View (BEV) 算法中使用的特征金字塔网络(FPN, Feature Pyrami…

C++容器之栈(std::stack)

目录 1 概述2 使用实例3 接口使用3.1 construct3.2 empty3.3 size3.4 top3.5 push3.6 emplace3.7 pop3.8 swap1 概述 堆栈是一种容器适配器,专门设计用于在后进先出(后进先出)环境中操作,其中元素仅从容器的一端插入和提取。   堆栈被实现为容器适配器,容器适配器是使用…

再创佳绩丨达梦数据库一体机荣获2024数字中国创新大赛·信创赛道总决赛一等奖

5月24日,第七届数字中国建设峰会在福州盛大开幕,峰会内容安排包含开幕式、主论坛、分论坛、数字中国创新大赛、现场体验区及成果发布和专业工作会议等。武汉达梦数据库股份有限公司(以下简称达梦数据)受邀参加并在展、会、赛等多个环节深度参与。达梦全栈…

在winnas中使用docker desktop遇到的问题及解决方法记录

最近在尝试从群晖转向winnas,一些简单的服务依然计划使用docker来部署。群晖的docker简单易用且稳定,在win上使用docker desktop过程中遇到了不少问题,在此记录一下以供后来人参考。 一、安装docker desktop后启动时遇到无法启动docker引擎 …

自回归模型(二):具有自回归误差的回归

让我们考虑一个问题,其中我们有一个y变量和多个x变量,它们都被测量为时间序列。举个例子,我们可以将y设定为高速公路上每月的事故数量,而x则表示每月在高速公路上的交通量,观测时间为连续的120个月。一个多元&#xff…

Git Large File Storage (LFS) 的安装与使用

Git Large File Storage [LFS] 的安装与使用 1. An open source Git extension for versioning large files2. Installing on Linux using packagecloud3. Getting Started4. Error: Failed to call git rev-parse --git-dir: exit status 128References 1. An open source Git…

Python的selenium爬取

1.selenium 1.1.前言 使用python的requests模块还是存在很大的局限性,例如:只发一次请求;针对ajax动态加载的网页则无法获取数据等等问题。特此,本章节将通过selenium模拟浏览器来完成更高级的爬虫抓取任务。 1.2.什么是seleniu…

关于C++的IO流简单总结

基础IO流 C的IO以面向对象的形式实现, 同时兼容了C语言面向过程的IO方式 C 标准库提供了四个基本流对象: cin:用于从标准输入(通常是键盘)读取数据。 cout:用于向标准输出(通常是控制台)写入…

C语言之枚举

系列文章目录 C语言之枚举 C语言之枚举 系列文章目录一、枚举概念二、定义三、优点四、示例应用 一、枚举概念 枚举(Enumeration,简称Enum)是一种编程语言中用于定义数值常量集合的数据类型。它为一组相关的常量提供了一个清晰、可读性强的命…

Java面试八股之多线程编程中什么是上下文切换

多线程编程中什么是上下文切换 上下文切换(Context Switch)是操作系统为了实现多线程或进程并发执行而采取的一种机制。在Java多线程环境中,上下文切换具体指的是CPU控制权从一个正在运行的线程转移到另一个就绪并等待CPU执行权的线程的过程…

5月30日在线研讨会 | 面向智能网联汽车的产教融合解决方案

随着智能网联汽车技术的快速发展,产业对高素质技术技能人才的需求日益增长。为了促进智能网联汽车行业的健康发展,推动教育链、人才链与产业链、创新链的深度融合,经纬恒润推出产教融合相关方案,旨在通过促进教育链与产业链的深度…

Qt | QTabBar 类(选项卡栏)

01、上节回顾 Qt | QStackedLayout 类(分组布局或栈布局)、QStackedWidget02、简介 1、QTabBar类直接继承自 QWidget。该类提供了一个选项卡栏,该类仅提供了一个选项卡, 并没有为每个选项卡提供相应的页面,因此要使选项卡栏实际可用,需要自行为每个选项卡设置需要显示的页…

怎么使用Stable diffusion中的models

Stable diffusion中的models Stable diffusion model也可以叫做checkpoint model,是预先训练好的Stable diffusion权重,用于生成特定风格的图像。模型生成的图像类型取决于训练图像。 如果训练数据中从未出现过猫的图像,模型就无法生成猫的…