强化学习——学习笔记2

news2024/10/7 10:05:10

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

一、什么是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.coloradmin.cn/o/1710718.html

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

相关文章

[AIGC] Nginx常用变量详解

Nginx非常强大,其主要功能包括HTTP服务器、反向代理、负载均衡等。Nginx的配置中有许多内置的变量,你可以在配置文件中使用这些变量进行灵活的配置。在本篇文章中,我们将介绍一些Nginx中常见的变量,包括proxy_add_header。 常见变…

多旋翼无人机机场考哪些内容?

多旋翼无人机机场考试的内容主要包括理论和实飞两部分。 理论考试主要涵盖无人机相关的知识,包括无人机的原理、结构、操作规范等。 实飞考试则主要考察飞行技能,包括飞行操作、航线规划、飞行稳定性等。 具体来说,实飞部分可能包括使用GPS…

前端渲染页面的原理

之前一直不愿意写一篇关于原理的,因为说起来实在是太繁杂,要写得细,码字梳理,计算下来起码都要差不多三周。以前一直躲避这个事情,现在反正有时间,为了不荒废自己,那就从头捋一遍。也方便自己后…

【STL库源码剖析】list 简单实现

从此音尘各悄然 春山如黛草如烟 目录 list 的结点设计 list 的迭代器 list 的部分框架 迭代器的实现 容量相关相关函数 实现 insert 在指定位置插入 val 实现 push_back 在尾部进行插入 实现 erase 在指定位置删除 实现 pop_back 在尾部进行删除 实现 list 的头插、头删 实现…

循环buffer“一写多读“

1.往期回顾 一个简单实用的循环buffer,用于缓冲数据!测试500M数据,耗时1.3秒。 C语言版本的循环buffer比C版本的速度更快!测试500M数据0.5秒,达9.25Gbps左右! C 语言免拷贝版本循环 buffer 比拷贝版本快了…

熵值法(熵权法)

熵值法(Entropy Method)是一种多属性决策分析方法,主要用于权重确定、排序和评价。它在风险评估、资源配置、环境管理等领域得到广泛应用。熵值法的核心思想是基于信息熵的概念,利用信息熵来度量各属性对决策的贡献程度&#xff0…

农产品产品防伪防窜货+二维码防伪+溯源系统源码全平台一物一码数字化防伪防窜货和溯源查询系统

农产品产品防伪防防窜货二维码防伪溯源系统源码全平台一物一码数字化防伪防窜货和溯源查询系统 产品防伪防防窜货二维码防伪溯源系统源码,该系统采用最简单易用的phpMySQL进行搭建,拥有完善的网站前后台,通过对每件产品生产线上的单品、二级…

BIGO前端CICD平台

本文首发于:https://github.com/bigo-frontend/blog/ 欢迎关注、转载。 我是谁 BIGO前端CICD平台,是一个服务于前端团队的全研发周期管理平台,已经是我们团队日常都要使用的工具了。 该平台实现了一键创建项目、发布编排、新建迭代、checkl…

【微服务】部署mysql集群,主从复制,读写分离

两台服务器做如下操作 1.安装mysqldocker pull mysql:5.72.启动以及数据挂载 mkdir /root/mysql/data /root/mysql/log /root/mysql/conf touch my.conf //mysql的配置文件docker run --name mysql \ -e MYSQL_ROOT_PASSWORD123456 \ -v /root/mysql/data:/var/lib/mysql \ -v…

如何创建一个vue项目?详细教程,如何创建第一个vue项目?

已经安装node.js在自己找的到的地方新建一个文件夹用于存放项目,记住文件夹的存放路径,以我为例,我的文件夹路径为D:\tydic 打开cmd命令窗口,进入刚刚的新建文件夹 切换硬盘: D: 进入文件夹:cd tydic 使…

基于ViutualBox+Ubuntu(Linux)的开发环境搭建

实际在选择虚拟机的时候纠结了要用virualbox还是vmware,初步比较结果: 1.virualbox能够使用vmware的硬盘格式,因此可以自由选择。 2.都能够实现主机和宿主机之间的文件夹共享。 3.virualbox是自由软件,vmware是商业软件。 在功能上…

STM32 入门教程(江科大教材)#笔记2

3-4按键控制LED /** LED.c**/ #include "stm32f10x.h" // Device headervoid LED_Init(void) {/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_I…

go 微服务框架kratos使用中间件的方法

一、中间件的概念 在go语言中,中间件是一种用于处理http请求的开发模式,允许开发人员在请求到达处理程序之前或之后执行特定的操作,如日志记录、身份验证、错误处理等。 中间件通常是一个函数,它接收一个 http.Handler 作为参数…

解读makefile中$(patsubst pattern,replacement,text)

在 Makefile 中,$(patsubst pattern,replacement,text) 是一个用于模式替换的函数,它可以将文本中符合指定模式的部分替换为指定的字符串。这个函数通常用于对文件名或路径进行模式匹配和替换,非常适合在 Makefile 中进行文件名的转换操作。 …

队列的特性及代码实现(C语言)

目录 队列的定义 队列的实现分析 代码实现 Queue.h Queue.c 队列的定义 队列是只允许在一端进行插入操作,而在另一段进行删除操作的线性表。 首先,让我们来看一看生活中的队列,当我们去银行办理业务的时候,我们进入银行的时候…

CANDela studio使用小tips

打开软件的时候注意先选择英文,因为双击CDD/CDDT文件默认打开的是德文,所以最正确的打开方式是先打开CANDela studio,再导入CDD,不仅可以避免用德文打开,还能避免vector软件的bug。 不同的版本有不同的权限。 admin有…

【一竞技DOTA2】RAMZES666替补参加裂变联赛

1、根据主办方文件,RAMZES666将继续作为Tundra战队替补参加裂变联赛。该比赛为欧洲线上赛,于5月27日-30日举行,总奖金8万美元。 除此之外,Nigma战队在上个月宣布四号位Matthew离队后,也选择启用老队员GH参赛。而在本月初让ah fu转回教练、携替补Thiolicor出战PGL瓦拉几亚的Secr…

《Navi日语社》App支持日语翻译、日文OCR文字识别提取、文字转语音和语音识别功能!

随着中日交流日益频繁,学习日语和日语翻译的需求也愈发强烈。为满足广大用户的需求,《Navi日语社》App应运而生,成为您日语学习与翻译的不二之选! 日语翻译,准确无误。凭借先进的机器翻译技术,我们的App可…

Qt串口异步通信案例(从机线程)

文章目录 串口线程类初始化串口类打开串口并发送数据析构函数 窗口设置窗口函数实现 串口线程类 SlaveThread(从机线程) 目的:等待并响应来自主机的请求,然后发送预设的响应数据。 关键行为:线程启动后,通过…

打造爆款活动:确定目标受众与吸引策略的实战指南

身为一名文案策划经理,我深知在活动策划的海洋中,确定目标受众并设计出能触动他们心弦的策略是何等重要。 通过以下步骤,你可以更准确地确定目标受众,并制定出有效的吸引策略,确保活动的成功: 明确活动目…