策略算法与Actor-Critic网络

策略算法

教程链接

DataWhale强化学习课程JoyRL

https://johnjim0816.com/joyrl-book/#/ch7/main

策略梯度

与前面的基于价值的算法不同,这类算法直接对策略本身进行近似优化。

在这种情况下,我们可以将策略描述成一个带有参数 θ θ θ的连续函数,该函数将某个状态作为输入,输出的不再是某个确定性的离散动作,而是对应的动作概率分布,通常用 π θ ( a ∣ s ) \pi_{θ}(a|s) πθ(as) 表示,称作随机性策略。

价值算法缺点

  • 无法表示连续动作

由于 DQN 等算法是通过学习状态和动作的价值函数来间接指导策略的,因此它们只能处理离散动作空间的问题,无法表示连续动作空间的问题

  • 高方差

基于价值的方法通常都是通过采样的方式来估计价值函数,这样会导致估计的方差很高,从而影响算法的收敛性。尽管一些 DQN 改进算法,通过改善经验回放、目标网络等方式,可以在一定程度上减小方差,但是这些方法并不能完全解决这个问题。

  • 探索与利用的平衡问题

DQN 等算法在实现时通常选择贪心的确定性策略,而很多问题的最优策略是随机策略,即需要以不同的概率选择不同的动作。虽然可以通过 ϵ -greedy \epsilon\text{-greedy} ϵ-greedy 策略等方式来实现一定程度的随机策略,但是实际上这种方式并不是很理想,因为它并不能很好地平衡探索与利用的关系。

策略梯度算法

特点: 直接对策略进行优化算法,但是优化目标与基于价值一样,都是累积的价值期望 V ∗ ( s ) V^{*}(s) V(s)

轨迹产生的概率:

P θ ( τ ) = p ( s 0 ) π θ ( a 0 ∣ s 0 ) p ( s 1 ∣ s 0 , a 0 ) π θ ( a 1 ∣ s 1 ) p ( s 2 ∣ s 1 , a 1 ) ⋯ = p ( s 0 ) ∏ t = 0 T π θ ( a t ∣ s t ) p ( s t + 1 ∣ s t , a t ) (9.2) \tag{9.2} \begin{aligned} P_{\theta}(\tau) &=p(s_{0}) \pi_{\theta}(a_{0} | s_{0}) p(s_{1} | s_{0}, a_{0}) \pi_{\theta}(a_{1} | s_{1}) p(s_{2} | s_{1}, a_{1}) \cdots \\ &=p(s_{0}) \prod_{t=0}^{T} \pi_{\theta}\left(a_{t} | s_{t}\right) p\left(s_{t+1} | s_{t}, a_{t}\right) \end{aligned} Pθ(τ)=p(s0)πθ(a0s0)p(s1s0,a0)πθ(a1s1)p(s2s1,a1)=p(s0)t=0Tπθ(atst)p(st+1st,at)(9.2)

基于全期望公式得到价值的期望公式

J ( π θ ) = E τ ∼ π θ [ R ( τ ) ] = P θ ( τ 1 ) R ( τ 1 ) + P θ ( τ 2 ) R ( τ 2 ) + ⋯ = ∫ τ P θ ( τ ) R ( τ ) = E τ ∼ P θ ( τ ) [ ∑ t r ( s t , a t ) ] (9.3) \tag{9.3} \begin{aligned} J(\pi_{\theta}) = \underset{\tau \sim \pi_\theta}{E}[R(\tau)] & = P_{\theta}(\tau_{1})R(\tau_{1})+P_{\theta}(\tau_{2})R(\tau_{2})+\cdots \\ &=\int_\tau P_{\theta}(\tau) R(\tau) \\ &=E_{\tau \sim P_\theta(\tau)}[\sum_t r(s_t, a_t)] \end{aligned} J(πθ)=τπθE[R(τ)]=Pθ(τ1)R(τ1)+Pθ(τ2)R(τ2)+=τPθ(τ)R(τ)=EτPθ(τ)[tr(st,at)](9.3)

由于 R ( τ ) R(\tau) R(τ)与参数 θ \theta θ无关,一来问题就稍稍简化成了如何求解 P θ ( τ ) P_{\theta}(\tau) Pθ(τ) 的梯度了

后进行一系列推导

∇ θ P θ ( τ ) = P θ ( τ ) ∇ θ P θ ( τ ) P θ ( τ ) = P θ ( τ ) ∇ θ log ⁡ P θ ( τ ) (9.4) \tag{9.4} \nabla_\theta P_{\theta}(\tau)= P_{\theta}(\tau) \frac{\nabla_\theta P_{\theta}(\tau)}{P_{\theta}(\tau) }= P_{\theta}(\tau) \nabla_\theta \log P_{\theta}(\tau) θPθ(τ)=Pθ(τ)Pθ(τ)θPθ(τ)=Pθ(τ)θlogPθ(τ)(9.4)

log ⁡ P θ ( τ ) = log ⁡ p ( s 0 ) + ∑ t = 0 T ( log ⁡ π θ ( a t ∣ s t ) + log ⁡ p ( s t + 1 ∣ s t , a t ) ) (9.5) \tag{9.5} \log P_{\theta}(\tau)= \log p(s_{0}) + \sum_{t=0}^T(\log \pi_{\theta}(a_t \mid s_t)+\log p(s_{t+1} \mid s_t,a_t)) logPθ(τ)=logp(s0)+t=0T(logπθ(atst)+logp(st+1st,at))(9.5)

∇ θ log ⁡ P θ ( τ ) = ∇ θ log ⁡ ρ 0 ( s 0 ) + ∑ t = 0 T ( ∇ θ log ⁡ π θ ( a t ∣ s t ) + ∇ θ log ⁡ p ( s t + 1 ∣ s t , a t ) ) = 0 + ∑ t = 0 T ( ∇ θ log ⁡ π θ ( a t ∣ s t ) + 0 ) = ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) (9.6) \tag{9.6} \begin{aligned} \nabla_\theta \log P_{\theta}(\tau) &=\nabla_\theta \log \rho_0\left(s_0\right)+\sum_{t=0}^T\left(\nabla_\theta \log \pi_\theta\left(a_t \mid s_t\right)+\nabla_\theta \log p\left(s_{t+1} \mid s_t, a_t\right)\right) \\ &=0+\sum_{t=0}^T\left(\nabla_\theta \log \pi_\theta\left(a_t \mid s_t\right)+0\right) \\ &=\sum_{t=0}^T \nabla_\theta \log \pi_\theta\left(a_t \mid s_t\right) \end{aligned} θlogPθ(τ)=θlogρ0(s0)+t=0T(θlogπθ(atst)+θlogp(st+1st,at))=0+t=0T(θlogπθ(atst)+0)=t=0Tθlogπθ(atst)(9.6)

得到目标函数的梯度

∇ θ J ( π θ ) = ∇ θ E τ ∼ π θ [ R ( τ ) ] = ∇ θ ∫ τ P θ ( τ ) R ( τ ) = ∫ τ ∇ θ P θ ( τ ) R ( τ ) = ∫ τ P θ ( τ ) ∇ θ log ⁡ P θ ( τ ) R ( τ ) = E τ ∼ π θ [ ∇ θ log ⁡ P θ ( τ ) R ( τ ) ] = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) R ( τ ) ] (9.7) \tag{9.7} \begin{aligned} \nabla_\theta J\left(\pi_\theta\right) &=\nabla_\theta \underset{\tau \sim \pi_\theta}{\mathrm{E}}[R(\tau)] \\ &=\nabla_\theta \int_\tau P_{\theta}(\tau) R(\tau) \\ &=\int_\tau \nabla_\theta P_{\theta}(\tau) R(\tau) \\ &=\int_\tau P_{\theta}(\tau) \nabla_\theta \log P_{\theta}(\tau) R(\tau) \\ &=\underset{\tau \sim \pi_\theta}{\mathrm{E}}\left[\nabla_\theta \log P_{\theta}(\tau) R(\tau)\right]\\ &= \underset{\tau \sim \pi_\theta}{\mathrm{E}}\left[\sum_{t=0}^T \nabla_\theta \log \pi_\theta\left(a_t \mid s_t\right) R(\tau)\right] \end{aligned} θJ(πθ)=θτπθE[R(τ)]=θτPθ(τ)R(τ)=τθPθ(τ)R(τ)=τPθ(τ)θlogPθ(τ)R(τ)=τπθE[θlogPθ(τ)R(τ)]=τπθE[t=0Tθlogπθ(atst)R(τ)](9.7)

蒙特卡洛策略梯度算法

由于环境的初始状态为随机的,智能体的每次采样动作也是随机的,从而导致每条轨迹可能不一样。考虑采样数量足够多的轨迹,然后利用这些轨迹的平均值来近似求解目标函数的梯度。

∇ J θ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n G t n ∇ log ⁡ π θ ( a t n ∣ s t n ) (9.8) \tag{9.8} \nabla J_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}} G_{t}^{n} \nabla \log \pi_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right) JθN1n=1Nt=1TnGtnlogπθ(atnstn)(9.8)

这里我们假定目标是使每回合的累积价值最大。

但是实际每回合的累积奖励或回报会受到很多因素的影响。后引入优势量来进行评估价值。

作业题

  1. 基于价值和基于策略的算法各有什么优缺点?

基于价值的算法的优点包括:

  • 可以收敛到全局最优策略,而不是局部最优。

  • 可以利用贪心策略或者epsilon-greedy策略来平衡探索和利用。

  • 可以用于离散或者连续的状态空间。

基于价值的算法的缺点包括:

  • 对于高维或者连续的动作空间,难以找到最优的动作。
  • 需要存储和更新一个大的值函数表格或者近似函数,计算量较大。
  • 不能很好地处理随机策略。

策略梯度算法优点:

  • 适配连续动作空间。在将策略函数设计的时候我们已经展开过,这里不再赘述。
  • 适配随机策略。由于策略梯度算法是基于策略函数的,因此可以适配随机策略,而基于价值的算法则需要一个确定的策略。此外其计算出来的策略梯度是无偏的,而基于价值的算法则是有偏的。

策略梯度算法缺点

  • 采样效率低。由于使用的是蒙特卡洛估计,与基于价值算法的时序差分估计相比其采样速度必然是要慢很多的,这个问题在前面相关章节中也提到过。
  • 高方差。虽然跟基于价值的算法一样都会导致高方差,但是策略梯度算法通常是在估计梯度时蒙特卡洛采样引起的高方差,这样的方差甚至比基于价值的算法还要高。
  • 收敛性差。容易陷入局部最优,策略梯度方法并不保证全局最优解,因为它们可能会陷入局部最优点。策略空间可能非常复杂,存在多个局部最优点,因此算法可能会在局部最优点附近停滞。
  • 难以处理高维离散动作空间:对于离散动作空间,采样的效率可能会受到限制,因为对每个动作的采样都需要计算一次策略。当动作空间非常大时,这可能会导致计算成本的急剧增加。
  1. 马尔可夫平稳分布需要满足什么条件?
  • 非周期性:由于马尔可夫链需要收敛,那么就一定不能是周期性的,实际上我们处理的问题基本上都是非周期性的,这点不需要做过多的考虑。
  • 状态连通性:即存在概率转移矩阵P,能够使得任意状态S0经过有限次转移到达状态s,反之亦然。
  1. REINFORCE 算法会比 Q-learning 算法训练速度更快吗?为什么?

是的。REINFORCE 算法直接优化一个参数化的策略函数,而不需要估计一个值函数.Q-learning 算法是一种基于价值的算法,它通过学习一个状态-动作值函数来评估不同动作的优劣,然后根据这个函数来选择最优的动作。

  1. 确定性策略与随机性策略的区别?
  • 确定性策略是指在每个状态下,只选择一个固定的动作,不考虑其他可能的动作。确定性策略可以用一个函数来表示,即 a = μ ( s ) a = \mu(s) a=μ(s) ,其中 a 是动作,s 是状态, μ \mu μ是策略函数。
  • 随机性策略是指在每个状态下,按照一定的概率分布来选择动作,而不是唯一确定的。随机性策略可以用一个条件概率来表示,即 π ( a ∣ s ) \pi(a|s) π(as),其中 π \pi π是策略函数,表示在状态 s 下选择动作 a 的概率。

随机性策略可以更好地探索环境,避免陷入局部最优,而确定性策略可以更高效地利用已知的信息,减少计算量。

Actor-Ctitic算法

策略梯度算法优缺点:

  • 适配连续动作空间。在将策略函数设计的时候我们已经展开过,这里不再赘述。
  • 适配随机策略。由于策略梯度算法是基于策略函数的,因此可以适配随机策略,而基于价值的算法则需要一个确定的策略。此外其计算出来的策略梯度是无偏的,而基于价值的算法则是有偏的。

但同样的,策略梯度算法也有其缺点。

  • 采样效率低。由于使用的是蒙特卡洛估计,与基于价值算法的时序差分估计相比其采样速度必然是要慢很多的,这个问题在前面相关章节中也提到过。
  • 高方差。虽然跟基于价值的算法一样都会导致高方差,但是策略梯度算法通常是在估计梯度时蒙特卡洛采样引起的高方差,这样的方差甚至比基于价值的算法还要高。
  • 收敛性差。容易陷入局部最优,策略梯度方法并不保证全局最优解,因为它们可能会陷入局部最优点。策略空间可能非常复杂,存在多个局部最优点,因此算法可能会在局部最优点附近停滞。
  • 难以处理高维离散动作空间:对于离散动作空间,采样的效率可能会受到限制,因为对每个动作的采样都需要计算一次策略。当动作空间非常大时,这可能会导致计算成本的急剧增加。

结合策略梯度与值函数的Actor-Critic算法能够同时兼顾两者的优点,甚至还能缓解两种方法都很难解决的高方差问题。

策略梯度算法高方差来源为 直接对策略参数化,相当于既要利用策略与环境进行交互采样,又要利用采样去估计策略梯度。

价值函数算法高方差来源为 需要与环境交互采样来估计值函数。

而两者结合后,Actor网络部分还是负责估计策略梯度和采样,但是Critic网络 也就是原来的值函数部分就不需要采样只负责估计值函数,并且由于它估计的值函数为策略函数的只,相当于带来了一个更稳定的估计用于指导Actor的更新,反而能够缓解策略梯度估计带来的高方差。

img

由于AC网络并不能彻底解决策略梯度算法的高方差问题,所以为了进一步缓解高方差问题,引入了一个优势函数,用来表示当前状态-动作对相当于平均水平的优势

KaTeX parse error: \tag works only in display equations

这里优势函数相当于减去了一个基线,可以自由选择,但是通常选择状态价值函数使得梯度估计更加稳定。即A2C算法。而A3C算法是在A2C基础上引入了多线程的概念提高训练效率。原先的 A2C 算法相当于只有一个全局网络并持续与环境交互更新。而 A3C 算法中增加了多个进程,每一个进程都拥有一个独立的网络和环境以供交互,并且每个进程每隔一段时间都会将自己的参数同步到全局网络中,这样就能提高训练效率。

img

作业题

  1. 相比于 REINFORCE 算法, A2C 主要的改进点在哪里,为什么能提高速度?

A2C引入了优势函数与AC演员评论家网络。A2C 算法是一种演员-评论家算法,它引入了一个值函数作为评论家,可以在每一步或者每几步就根据优势函数来更新策略和值函数。可以衡量一个动作相对于平均水平的优劣。这些改进使得 A2C 算法能够更快地收敛到最优策略,提高了训练的速度和效果。

  1. A2C 算法是 on-policy 的吗?为什么?

什么能提高速度?

A2C引入了优势函数与AC演员评论家网络。A2C 算法是一种演员-评论家算法,它引入了一个值函数作为评论家,可以在每一步或者每几步就根据优势函数来更新策略和值函数。可以衡量一个动作相对于平均水平的优劣。这些改进使得 A2C 算法能够更快地收敛到最优策略,提高了训练的速度和效果。

  1. A2C 算法是 on-policy 的吗?为什么?

是的。 A2C 算法的目标是最大化累积回报的期望,而这个期望是基于当前的策略分布的,如果使用不同的策略分布来采样数据,那么就会导致偏差和不一致。

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

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

相关文章

与 PCIe 相比,CXL为何低延迟高带宽?

文章目录 前言1. LatencyPCIE 生产者消费则模型结论Flit 包PCIE/CXL.ioCXL.cace & .mem总结 2. BandWidth常见开销CXL.IO Link efficiencyPCIe Link efficiencyCXL.IO bandwidthCXL.mem/.cache bandwidth 参考 前言 CXL 规范里没有具体描述与PCIe 相比低延时高带宽的原因&…

Java基于springoot开发的企业招聘求职网站

演示视频: https://www.bilibili.com/video/BV1xw411n7Tu/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 技术:springootmysqlvuejsbootstrappoi制作word模板 主要功能:求职者可以注册发布简历,选择简…

Echarts+vue+java+mysql实现数据可视化

一、折线图,柱状图 https://echarts.apache.org/zh/index.html echarts 官网 更多配置项可以去官网查看 在开始项目之前,确保您已经安装了以下工具和技术: MySQL 数据库:用于存储和管理数据。Java 后端:用于创建后端应…

解决api-ms-win-crt-runtime-l1-1-0.dll丢失的问题,全是干货分享

今天我的电脑中突然出现关于“api-ms-win-crt-runtime-l1-1-0.dll”的错误提示,关闭提示后再次打开程序依然不能正常打开,出现这样的问题突然不知道是因为什么,于是就去了解了关于出现api-ms-win-crt-runtime-l1-1-0.dll错误的问题&#xff0…

elFinder ZIP 参数注入导致命令注入 (CVE-2021-32682)

漏洞描述 elFinder 是一个用于 Web 的开源文件管理器,使用 jQuery UI 用 JavaScript 编写。 在 elFinder 2.1.48 及更早版本中发现一个参数注入漏洞。此漏洞可能允许攻击者在托管 elFinder PHP 连接器的服务器上执行任意命令,即使配置最少也是如此。这…

matlab画双坐标图的样式

matlab画双坐标图的样式 %% clc,clear,close all; t0:0.1:9*pi; figure; [AX,Ha,Hb]plotyy(t,sin(t),t,exp(t)); % 绘图并创建句柄 % ----------------- 设置刻度 set(AX(1),yTick,[-1.250:0.25:1.25]) % 设置左边Y轴的刻度 set(AX(2),yTick,[0:50:350]) …

Alivia 1.0 正式版来了,打造更懂企业的营销「工具箱」

上周,「Whale 帷幄」2023 秋季发布会圆满落下帷幕。发布会上,帷幄创始人 & CEO 叶生晅重磅发布了专为营销和销售设计的企业级 AGI 工具——Alivia 1.0 正式版,获得了广泛的反响和好评。 在这一年里,帷幄在 AGI 产品创新及落地…

Redis 命令处理过程

我们知道 Redis 是一个基于内存的高性能键值数据库, 它支持多种数据结构, 提供了丰富的命令, 可以用来实现缓存、消息队列、分布式锁等功能。 而在享受 Redis 带来的种种好处时, 是否曾好奇过 Redis 是如何处理我们发往它的命令的呢? 本文将以伪代码的形式简单分析…

基于SSM的高校学生实习管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

Unity之ARFoundation如何实现BodyTracking人体跟踪

前言 ARBodyTracking,就是指通过手机AR扫描并精确的捕获人物的肢体部位的技术。如下图所示 这项技术目前是有苹果的ARKit提供,苹果的body tracking 功能需要使用配备 TrueDepth 摄像头的设备,配备 A12 仿生芯片、运行 iOS 13 或更高版本的设备,比如 iPhone X 及更新机型。…

可以在电脑桌面展示工作计划表的软件

很多上班族都表示自己在工作时,会面临大量且复杂的工作任务,这时候就会拖延工作,或者感觉时间不够用,所以需要有明确的工作计划来指导自己如何分类时间和精力,确保每项工作任务都能够按时完成。如果需要制定每天的工作…

YashanDB入选2023年世界互联网大会领先科技奖成果集《科技之魅》

近日,由深圳计算科学研究院自主研发的“崖山数据库系统YashanDB”入编2023年世界互联网大会领先科技奖成果集《科技之魅》。此次入选,充分彰显了YashanDB在数据库技术领域的突破性创新成果。 《科技之魅》是世界互联网大会领先科技奖的重要成果&#xff…

万字解析设计模式之桥接模式、外观模式

一、桥接模式 1.1概述 桥接模式是一种结构型设计模式,它的作用是将抽象部分和实现部分分离开来,使它们能够独立地变化。这样,抽象部分和实现部分可以分别进行扩展,而不会相互影响。它是用组合关系代替继承关系来实现,…

双指针算法(题目与答案讲解)

文章目录 题目移动零复写零两数之和N数之和(>2个数) 答案讲解移动零复写零两数之和N数之和 题目 力扣 移动零 1、移动零:题目链接 复写零 2、复写零:题目链接 两数之和 3、两数之和题目链接 N数之和(>2个数) 4、N数之和(三个数、四个数) 三个数:题目链接 四个数题目链接…

Windows10免安装PostgreSQL

1. PostgreSQL简介2. 下载3. 安装环境4. 安装 4.1. 初始化数据库4.2. 启动数据库4.3. 注册服务4.3. 卸载服务 1. PostgreSQL简介 PostgreSQL 是一种特性非常齐全的自由软件的对象-关系型数据库管理系统,是以加州大学计算机系开发的 POSTGRES 4.2版本为基础的对象关…

02-微服务的拆分规则和基于RestTemplate的远程调用

微服务的拆分与远程调用 创建父工程 任何分布式架构都离不开服务的拆分, 微服务也是一样 , 微服务的拆分遵守三个原则 微服务需要根据业务模块拆分,不同微服务不要重复开发相同业务每个微服务都有自己独立的数据库, 不要直接访问其他微服务的数据库微服务可以将自己的业务暴…

viple模拟器使用(三):unity模拟器中实现沿右墙迷宫算法

沿右墙迷宫算法原理 默认直行;右侧有路,则右转;前方无路,则左转。 由于unity模拟器中使用机器人移动动力控制和机器人转动角度控制来实现控制机器人前进、后退、暂停、左转、右转 。 程序编写 主机以及配置 通过内建事件初始化机…

查理·芒格之死对伯克希尔·哈撒韦公司意味着什么?

来源:猛兽财经 作者:猛兽财经 虽然查理芒格是伯克希尔哈撒韦公司首席执行官沃伦巴菲特的重要合作伙伴,但猛兽财经认为查理芒格的去世并不会对伯克希尔哈撒韦的正常运营产生太大的影响,因为该公司长期以来一直是由巴菲特主导的。 …

C/C++内存管理(含C++中new和delete的使用)

文章目录 C/C内存管理(含C中new和delete的使用)1、C/C内存分布2、C语言中动态内存管理方式:malloc/calloc/realloc/free3、C动态内存管理3.1、new/delete操作内置类型3.2、new/delete操作自定义类型 4、operator new与operator delete函数5、…

ChatGPT到底是如何运作?

自从2022年11月30日发布以来,ChatGPT一直占据着科技届的头条位置,随着苹果的创新能力下降,ChatGPT不断给大家带来震撼,2023年11月7日,首届OpenAI开发者大会在洛杉矶举行,业界普遍认为,OpenAI的开…