【深度强化学习】策略梯度方法:REINFORCE、Actor-Critic

news2024/12/22 19:39:25
参考 
Reinforcement Learning, Second Edition  
An Introduction 
By Richard S. Sutton and Andrew G. Barto

非策略梯度方法的问题

之前的算法,无论是 MC,TD,SARSA,Q-learning, 还是 DQN、Double DQN、Dueling DQN,有至少两个问题:

  1. 都是处理离散状态、离散动作空间的问题,当需要处理连续状态 / 连续动作的时候,如果要使用这些算法,就只能把状态 / 动作离散化处理,这会导致实际相邻的 Q ( s , a ) Q(s,a) Q(s,a) 的值没有联系,变化不光滑,并且随着离散空间变大,max 的比较操作需要的计算量增大,这导致不能把离散化的分辨率无限地增高。
  2. 都利用对 V π V_\pi Vπ Q π Q_\pi Qπ arg max ⁡ a \argmax_a argmaxa 来得到策略 π \pi π,会导致只会选最优的动作,尽管有次优的动作,算法也不会去选,只会选最好的,在某些需要随机性的场景(如:非完全信息博弈(军事、牌类游戏))会产生大问题,因为行为比较有可预测性,很容易被针对。(即使有 ϵ \epsilon ϵ-贪心)

在非完全信息的纸牌游戏中,最优的策略一般是以特定的概率选择两种不同玩法,例如德州扑克中的虚张声势

我们想要的是右边的策略,它能够给出一个所有动作概率都介于(0,1)的分布,并从中进行随机采样一个动作,而不是只有一个动作的值是最突出的

策略梯度

策略梯度可以同时解决以上两个问题。
我们将策略参数化为 π ( a ∣ s , θ ) \pi(a|s, \theta) π(as,θ)(可以是简单的线性模型+softmax,也可以是神经网络),这个策略可以被关于 θ \theta θ求导: ∇ θ π ( a ∣ s , θ ) \nabla_\theta \pi(a|s,\theta) θπ(as,θ),简写为 ∇ π ( a ∣ s ) \nabla \pi(a|s) π(as)

策略梯度的直觉

我们实际上想找到一个更新策略 π ( a ∣ s , θ ) \pi(a|s,\theta) π(as,θ) 的方法,它在 θ \theta θ参数空间里面:

  • 如果往一个方向走,能对给定的 ( s t , a t ) (s_t,a_t) (st,at)获得正的回报 G t G_t Gt,就往这个方向走,并且回报绝对值越大走的步子越大
  • 如果往一个方向走,能对给定的 ( s t , a t ) (s_t,a_t) (st,at)获得负的回报 G t G_t Gt,就不往这个方向走,并且回报绝对值越大走的步子越大

和梯度下降类似,可以得到:
θ t + 1 ← θ t + α G t ∇ π ( a t ∣ s t ) \theta_{t+1} \leftarrow \theta_t + \alpha G_t \nabla \pi(a_t|s_t) θt+1θt+αGtπ(atst)

除以 π \pi π 变成 Ln

单纯这样更新会有问题,因为如果 π \pi π被初始化为存在一个次优动作(具有正回报),并且概率很大,而最优动作的概率很小,那么这个次优动作就很可能被不断地强化,导致无法学习到最优动作。

如果有三个动作,奖励是10,5,-7,对应的概率和箭头长度相同,那么5这个动作会被不断强化,因为它的初始采样概率很大
因此我们要除一个动作的概率,得到修正后的版本:

θ t + 1 ← θ t + α G t ∇ π ( a t ∣ s t ) π ( a t ∣ s t ) \theta_{t+1} \leftarrow \theta_t + \alpha G_t \frac{\nabla \pi(a_t|s_t)}{\pi(a_t|s_t)} θt+1θt+αGtπ(atst)π(atst)

也就是
θ t + 1 ← θ t + α G t ∇ ln ⁡ π ( a t ∣ s t ) \theta_{t+1} \leftarrow \theta_t + \alpha G_t \nabla \ln{\pi(a_t|s_t)} θt+1θt+αGtlnπ(atst)

REINFORCE

如果这个 G t G_t Gt 是由 MC 采样整个序列得到的,那么就得到了 REINFORCE 算法:
在这里插入图片描述

带基线的 REINFORCE

在这里插入图片描述
唯一的区别:TD target 从 G t G_t Gt 变成 G t − v ^ ( S t , w ) G_t - \hat v(S_t,\mathbf{w}) Gtv^(St,w),并且多一个价值网络,也进行跟更新。
好处:

  1. 减小方差
  2. 加快收敛速度

基线的直觉:
把 TD target 从全为正变成有正有负,更新的时候更有区分度。

Actor-Critic

在这里插入图片描述
再把 TD target 变化一下,从多步(MC)变成单步(TD),其他和 REINFORCE 一样。
之所以叫做 Actor-Critic 就是把基线 v ^ ( S , w ) \hat v(S,\mathbf{w}) v^(S,w) 当作评论家,它评价状态的好坏;而 π ( A ∣ S ) \pi(A|S) π(AS) 当作演员,尝试去按照评论家的喜好(体现为 TD target 用评论家来进行估计)来做动作。

总结

REINFORCE:MC,更新慢
δ = G t \delta =\red{ G_t} δ=Gt
θ t + 1 ← θ t + α δ ∇ ln ⁡ π ( A t ∣ S t ) \theta_{t+1} \leftarrow \theta_t + \alpha \delta \nabla \ln{\pi(A_t|S_t)} θt+1θt+αδlnπ(AtSt)
基线 REINFORCE:MC,更新慢,但是有基线,方差较小,收敛快,调参难度大一些
δ = G t − v ^ ( S t , w ) \delta = \red{G_t-\hat v(S_{t},\mathbf{w})} δ=Gtv^(St,w)
w t + 1 ← w t + α w δ ∇ v ^ ( S t ) \blue{\mathbf{w}_{t+1} \leftarrow \mathbf{w}_t + \alpha_{\mathbf{w}} \delta \nabla {\hat v(S_t)}} wt+1wt+αwδv^(St)
θ t + 1 ← θ t + α θ δ ∇ ln ⁡ π ( A t ∣ S t ) \theta_{t+1} \leftarrow \theta_t + \alpha_{\theta} \delta \nabla \ln{\pi(A_t|S_t)} θt+1θt+αθδlnπ(AtSt)
Actor-Critic:TD,更新快,调参难度大一些
δ = R t + γ v ^ ( S t ′ , w ) − v ^ ( S t , w ) \delta = \red{R_t+\gamma \hat v(S'_{t},\mathbf{w})-\hat v(S_{t},\mathbf{w})} δ=Rt+γv^(St,w)v^(St,w)
w t + 1 ← w t + α w δ ∇ v ^ ( S t ) \blue{\mathbf{w}_{t+1} \leftarrow \mathbf{w}_t + \alpha_{\mathbf{w}} \delta \nabla {\hat v(S_t)}} wt+1wt+αwδv^(St)
θ t + 1 ← θ t + α θ δ ∇ ln ⁡ π ( A t ∣ S t ) \theta_{t+1} \leftarrow \theta_t + \alpha_{\theta} \delta \nabla \ln{\pi(A_t|S_t)} θt+1θt+αθδlnπ(AtSt)

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

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

相关文章

day02-报表技术POI

1、基于模板导出列表数据 1.1、需求 按照以下样式导出excel 1.2、思路 首先准备一个excel模板,这个模板把复杂的样式和固定的内容先准备好并且放入到项目中,然后读取到模板后向里面放入数据。 1.3、实现 第一步:准备一个excel作为导出的…

ShuffleNet V1+V2(pytorch)

V1 V1根本思想: 1.GConv替换resnet的普通1*1Conv 2.GConv后加channel shuffle模块 对GConv的不同组进行重新组合。channel_shuffle a是resnet模块,b,c是ShuffleNetV1的block,在V1版中,两模块branch2的第一个1*1卷积…

i春秋云镜之Tsclient

首先拿到目标:39.99.137.155 首先通过Fscan扫描目标: 可以看到扫描出来了一个SqlServer的弱口令。 账号是sa,密码是1qaz!QAZ。 这里就不使用navicat进行连接了,这里使用impacket-mssqlclient进行连接。 impacket-mssqlclient sa:1qaz!QAZ39.99.137.…

Electron框架:构建跨平台桌面应用的终极解决方案

文章目录 一、Electron框架简介二、Electron框架的优势1. 开发效率高2. 跨平台性能好3. 易于维护4. 强大的原生能力 三、如何使用Electron框架快速开发跨平台桌面应用1. 安装Electron2. 创建项目文件夹3. 编写主进程代码4. 编写界面代码5. 运行应用 《Electron入门与实战》编辑…

Chromadb词向量数据库总结

简介 Chroma 词向量数据库是一个用于自然语言处理(NLP)和机器学习的工具,它主要用于词嵌入(word embeddings)。词向量是将单词转换为向量表示的技术,可以捕获单词之间的语义和语法关系,使得计算…

linux日志管理_日志轮转logrotate

10.2 日志轮转logrotate 10.2.1 简介 日志:记录了程序运行时各种信息。通过日志可以分析用户行为,记录运行轨迹,查找程序问题。 ​ 但由于磁盘的空间是有限的,日志轮转就像飞机里的黑匣子,记录的信息再重要也只能记录…

漏刻有时百度地图API实战开发(12)(切片工具的使用、添加自定义图层TileLayer)

TileLayer向地图中添加自定义图层 var tileLayer new BMap.TileLayer();tileLayer.getTilesUrl function (tileCoord, zoom) {var x tileCoord.x;var y tileCoord.y;return images/tiles/ zoom /tile- x _ y .png;}var lockMap new BMap.MapType(lock_map, tileLaye…

[ 8 种有效方法] 如何在没有备份的情况下恢复 Android 上永久删除的照片?

我们生命中最重要的时刻,但这样做有缺点,其中之一就是数据丢失的风险。您可能倾向于定期删除无意义的照片,同时保存可爱的照片,从而使您的 Android 设备井井有条。然而,有些人在删除自己珍视的图像时不小心犯了错误。您…

安卓跳转页面闪屏,方法里需要传View 参数

/*** 跳转到首页的公共方法* */public void ToIndexpage(View v){//设置跳转的页面Intent intent new Intent(this, MainActivity.class);//实行跳转startActivity(intent);}

【PHP入门】1.1-PHP初步语法

-PHP语法初步- PHP是一种运行在服务器端的脚本语言&#xff0c;可以嵌入到HTML中。 1.1.1PHP代码标记 在PHP历史发展中&#xff0c;可以使用多种标记来区分PHP脚本 ASP标记&#xff1a; <% php代码 %>短标记&#xff1a; <? Php代码 ?>&#xff0c;以上两种…

解锁数据探索新时代,JetBrains DataGrip 2023 Mac/win中文版下载

JetBrains DataGrip 2023 Mac/win&#xff0c;作为一款全新的数据库管理和开发工具&#xff0c;为数据工程师、分析师和开发人员提供了强大的功能和工具&#xff0c;帮助他们更高效地处理和分析数据。无论你是使用Mac还是Windows系统&#xff0c;都能够通过这款软件轻松驾驭数据…

Spring MVC 中的常用注解和用法

目录 一、什么是 Spring MVC 二、MVC定义 三、简述 SpringMVC 起到的作用有哪些? 四、注解 五、请求转发或请求重定向 一、什么是 Spring MVC Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架&#xff0c;从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web…

css 使用flex 完成瀑布流布局

瀑布流布局在商城类、文章类 app、网页中都是常用的&#xff0c;使用这样的形式&#xff0c;能过让整个页面更加的活波&#xff0c;也能让图片根据实际的大小来显示&#xff0c;更好的展示图片内容。那么代码如何实现呢 实现的效果 代码 <template><view class"…

【Python节日系列】慢慢画一棵粉红色的圣诞树(完整代码)

写在前面 本期内容:慢慢画一棵粉红色的圣诞树,圣诞节快乐吖! 目录 目录 写在前面 目录 环境需求 粉红色圣诞树

谈谈spring中AOP

概述 在软件业&#xff0c;AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方 式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续&#xff0c;是软件开发中的一个热点&#xff0c;也是Spring框架中…

尚硅谷JavaWeb电子书城项目(Java+Mysql+Tomcat+Jsp)

自己写的在线电子书城项目&#xff0c;可改写&#xff0c;添加功能&#xff0c;如打折&#xff0c;分类&#xff0c;用户管理&#xff0c;评论等功能。 使用方法&#xff1a; 1.使用idea导入项目。 2.数据库要用项目resource文件里的book.sql文件建立。 3.修改jdbc.properi…

Text2SQL学习整理(一) 综述

数据库由一张或多张表格构成&#xff0c;表格之间的关系通过共同的列&#xff08;外键&#xff09;关联&#xff0c;人们使用数据库来方便的记录和存储信息。SQL是广泛应用的关系型数据库查询语言&#xff0c;但是对于普通用户而言&#xff0c;编写SQL语句有一定的难度。 Text…

时序分解 | Matlab实现SSA-ICEEMDAN麻雀算法优化ICEEMDAN时间序列信号分解

时序分解 | Matlab实现SSA-ICEEMDAN麻雀算法优化ICEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现SSA-ICEEMDAN麻雀算法优化ICEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现SSA-ICEEMDAN麻雀算法优化ICEEMDAN时间序列信号分解 可…

【Linux】键盘高级操作技巧

命令行最为珍视的目标之一就是懒惰&#xff1a;用最少的击键次数来完成最多的工作。另一个目标是你的手指永 远不必离开键盘&#xff0c;永不触摸鼠标。因此&#xff0c;我们有必要了解一些键盘操作&#xff0c;使我们用起来更加的迅速和高效。 移动光标 在前面介绍过上下左右…

【Spring】之Ioc和Aop快速了解

这里写目录标题 1.Spring框架是什么&#xff1f;简介&#xff1a;总结&#xff1a;Spring框架&#xff0c;可以理解为是一个管理者&#xff1a;管理整个分层架构&#xff08;MVC&#xff09;中的每一个对象&#xff1b;&#xff08;每一个对象称之为bean&#xff09; 2.Spring框…