强化学习 —— 广义优势估计GAE

δ t = r t + γ V ( s t + 1 ) − V ( s t ) \delta_t=r_t+\gamma V(s_{t+1})-V(s_t) δt=rt+γV(st+1)V(st)表示时序差分误差,公式中的 V V V表示一个已经学习的状态价值函数,根据多步时序差分的思想,有: A t ( 1 ) = δ t = − V ( s t ) + r t + γ V ( s t + 1 ) A t ( 2 ) = δ t + γ δ t + 1 = − V ( s t ) + r t + γ r t + 1 + γ 2 V ( s t + 2 ) A t ( 3 ) = δ t + γ δ t + 1 + γ 2 δ t + 2 = − V ( s t ) + r t + γ r t + 1 + γ 2 r t + 2 + γ 3 V ( s t + 3 ) ⋮ ⋮ A t ( k ) = ∑ l = 0 k − 1 γ l δ t + l = − V ( s t ) + r t + γ r t + 1 + … + γ k − 1 r t + k − 1 + γ k V ( s t + k ) \begin{array}{ll} A_t^{(1)}=\delta_t & =-V\left(s_t\right)+r_t+\gamma V\left(s_{t+1}\right) \\ A_t^{(2)}=\delta_t+\gamma \delta_{t+1} & =-V\left(s_t\right)+r_t+\gamma r_{t+1}+\gamma^2 V\left(s_{t+2}\right) \\ A_t^{(3)}=\delta_t+\gamma \delta_{t+1}+\gamma^2 \delta_{t+2} & =-V\left(s_t\right)+r_t+\gamma r_{t+1}+\gamma^2 r_{t+2}+\gamma^3 V\left(s_{t+3}\right) \\ \vdots & \vdots \\ A_t^{(k)}=\sum_{l=0}^{k-1} \gamma^l \delta_{t+l} & =-V\left(s_t\right)+r_t+\gamma r_{t+1}+\ldots+\gamma^{k-1} r_{t+k-1}+\gamma^k V\left(s_{t+k}\right) \end{array} At(1)=δtAt(2)=δt+γδt+1At(3)=δt+γδt+1+γ2δt+2At(k)=l=0k1γlδt+l=V(st)+rt+γV(st+1)=V(st)+rt+γrt+1+γ2V(st+2)=V(st)+rt+γrt+1+γ2rt+2+γ3V(st+3)=V(st)+rt+γrt+1++γk1rt+k1+γkV(st+k)

简单解释一下上面的公式,根据 δ \delta δ的定义,有: δ t = r t + γ V ( s t + 1 ) − V ( s t ) \delta_t=r_t+\gamma V(s_{t+1})-V(s_t) δt=rt+γV(st+1)V(st) δ t + 1 = r t + 1 + γ V ( s t + 2 ) − V ( s t + 1 ) \delta_{t+1}=r_{t+1} + \gamma V(s_{t+2}) -V(s_{t+1}) δt+1=rt+1+γV(st+2)V(st+1)

根据这两个公式,可以得到: A t ( 2 ) = δ t + γ δ t + 1 = r t + γ V ( s t + 1 ) − V ( s t ) + γ ( r t + 1 + γ V ( s t + 2 ) − V ( s t + 1 ) ) = r t + γ V ( s t + 1 ) − V ( s t ) + γ r t + 1 + γ 2 V ( s t + 2 ) − γ V ( s t + 1 ) = − V ( s t ) + r t + γ r t + 1 + γ 2 V ( s t + 2 ) \begin{align*} A_t^{(2)} = \delta_{t} + \gamma \delta_{t+1} &= r_t+\gamma V(s_{t+1})-V(s_t) + \gamma(r_{t+1} + \gamma V(s_{t+2}) -V(s_{t+1}))\\ &= r_t+\gamma V(s_{t+1})-V(s_t) + \gamma r_{t+1} + \gamma ^{2} V(s_{t+2}) - \gamma V(s_{t+1})\\ &= -V(s_t) + r_t + \gamma r_{t+1} + \gamma ^{2} V(s_{t+2}) \end{align*} At(2)=δt+γδt+1=rt+γV(st+1)V(st)+γ(rt+1+γV(st+2)V(st+1))=rt+γV(st+1)V(st)+γrt+1+γ2V(st+2)γV(st+1)=V(st)+rt+γrt+1+γ2V(st+2)其余部分的 A t ( k ) A^{(k)}_t At(k)可以通过类似的方法推导得到。

GAE的原理是将这些不同步数的优势估计进行指数加权平均,这里先通过简单的例子介绍一下指数加权平均。

假定现在需要用指数加权平均计算100天的平均温度值: 22 , 24 , 25 , 27 , 33 , 24 , . . . , 25 22,24,25,27,33,24,...,25 22,24,25,27,33,24,...,25。指数加权平均的计算公式为: v t = λ v t − 1 + ( 1 − λ ) θ t v_t=\lambda v_{t-1} + (1-\lambda)\theta_t vt=λvt1+(1λ)θt公式中的 v t v_t vt表示到第 t t t天的平均温度值, θ t \theta_t θt表示第 t t t天的温度值, λ \lambda λ表示可调节的超参数值。

假定 λ = 0.9 \lambda=0.9 λ=0.9,通过指数加权平均得到的平均温度如下: v 100 = 0.9 ∗ v 99 + 0.1 ∗ θ 100 v 99 = 0.9 ∗ v 98 + 0.1 ∗ θ 99 v 98 = 0.9 ∗ v 97 + 0.1 ∗ θ 98 ⋮ v 1 = 0.9 ∗ v 0 + 0.1 ∗ θ 1 v 0 = 0.1 ∗ θ 0 \begin{align*} v_{100} &= 0.9*v_{99} + 0.1*\theta_{100}\\ v_{99}&= 0.9 * v_{98} + 0.1*\theta_{99}\\ v_{98}&= 0.9 * v_{97} + 0.1*\theta_{98} \\ \vdots \\ v_{1}&= 0.9 * v_{0} + 0.1*\theta_{1} \\ v_{0}&= 0.1*\theta_{0} \\ \end{align*} v100v99v98v1v0=0.9v99+0.1θ100=0.9v98+0.1θ99=0.9v97+0.1θ98=0.9v0+0.1θ1=0.1θ0

将上面公式进行转换可以得到 v 100 = 0.1 ∗ θ 100 + 0.1 ∗ 0.9 ∗ θ 99 + 0.1 ∗ 0. 9 2 ∗ θ 99 + . . . + 0.1 ∗ 0. 9 100 ∗ θ 0 = 0.1 ∗ ( θ 100 + 0.9 ∗ θ 99 + 0. 9 2 ∗ θ 98 + . . . + 0. 9 100 ∗ θ 0 ) = ( 1 − λ ) ∗ ( θ 100 + λ ∗ θ 99 + λ 2 ∗ θ 98 + . . . + λ 100 ∗ θ 0 ) \begin{align*} v_{100} &= 0.1*\theta_{100} + 0.1 * 0.9*\theta_{99} + 0.1 * 0.9^2*\theta_{99} + ... + 0.1 * 0.9^{100}*\theta_0 \\ &=0.1 * (\theta_{100} + 0.9 * \theta_{99} + 0.9^2 * \theta_{98} + ... + 0.9 ^{100}*\theta_0) \\ &=(1-\lambda) * (\theta_{100} + \lambda* \theta_{99} + \lambda^2 * \theta_{98} + ... + \lambda^{100}*\theta_0) \end{align*} v100=0.1θ100+0.10.9θ99+0.10.92θ99+...+0.10.9100θ0=0.1(θ100+0.9θ99+0.92θ98+...+0.9100θ0)=(1λ)(θ100+λθ99+λ2θ98+...+λ100θ0)

将其类比到GAE中,可以得到: A t G A E = ( 1 − λ ) ( A t ( 1 ) + λ A t ( 2 ) + λ 2 A t ( 3 ) + ⋯ ) = ( 1 − λ ) ( δ t + λ ( δ t + γ δ t + 1 ) + λ 2 ( δ t + γ δ t + 1 + γ 2 δ t + 2 ) + ⋯ ) = ( 1 − λ ) ( δ ( 1 + λ + λ 2 + ⋯ ) + γ δ t + 1 ( λ + λ 2 + λ 3 + ⋯ ) + γ 2 δ t + 2 ( λ 2 + λ 3 + λ 4 + ⋯ ) + ⋯ ) = ( 1 − λ ) ( δ t 1 1 − λ + γ δ t + 1 λ 1 − λ + γ 2 δ t + 2 λ 2 1 − λ + ⋯ ) = ∑ l = 0 ∞ ( γ λ ) l δ t + l \begin{aligned} A_t^{G A E} & =(1-\lambda)\left(A_t^{(1)}+\lambda A_t^{(2)}+\lambda^2 A_t^{(3)}+\cdots\right) \\ & =(1-\lambda)\left(\delta_t+\lambda\left(\delta_t+\gamma \delta_{t+1}\right)+\lambda^2\left(\delta_t+\gamma \delta_{t+1}+\gamma^2 \delta_{t+2}\right)+\cdots\right) \\ & =(1-\lambda)\left(\delta\left(1+\lambda+\lambda^2+\cdots\right)+\gamma \delta_{t+1}\left(\lambda+\lambda^2+\lambda^3+\cdots\right)+\gamma^2 \delta_{t+2}\left(\lambda^2+\lambda^3+\lambda^4+\cdots\right)+\cdots\right) \\ & =(1-\lambda)\left(\delta_t \frac{1}{1-\lambda}+\gamma \delta_{t+1} \frac{\lambda}{1-\lambda}+\gamma^2 \delta_{t+2} \frac{\lambda^2}{1-\lambda}+\cdots\right) \\ & =\sum_{l=0}^{\infty}(\gamma \lambda)^l \delta_{t+l} \end{aligned} AtGAE=(1λ)(At(1)+λAt(2)+λ2At(3)+)=(1λ)(δt+λ(δt+γδt+1)+λ2(δt+γδt+1+γ2δt+2)+)=(1λ)(δ(1+λ+λ2+)+γδt+1(λ+λ2+λ3+)+γ2δt+2(λ2+λ3+λ4+)+)=(1λ)(δt1λ1+γδt+11λλ+γ2δt+21λλ2+)=l=0(γλ)lδt+l

上面公式中的 λ ∈ [ 0 , 1 ] \lambda \in [0,1] λ[0,1]是在GAE中引入的超参数。当 λ = 0 \lambda=0 λ=0,可以得到 A t G A E = A t ( 1 ) = δ t = r t + γ V ( s t + 1 ) − V ( s t ) A_t^{G A E}=A_t^{(1)}=\delta_t=r_t+\gamma V(s_{t+1})-V(s_t) AtGAE=At(1)=δt=rt+γV(st+1)V(st)即只看到一步差分得到的优势值,当 λ \lambda λ趋向于1时,GAE会考虑更多步差分的平均值。

下面是一段GAE的实现代码,给定折扣系数 γ \gamma γ、GAE超参数 λ \lambda λ、回合中时间步 δ t \delta_t δt序列,根据上述公式可以进行优势估计:

# 基于 pytorch
def compute_advantage(gamma, lmbda, td_delta):td_delta = td_delta.detach().numpy()advantage_list = []advantage = 0.0for delta in td_delta[::-1]:advantage = gamma * lmbda * advantage + deltaadvantage_list.append(advantage)advantage_list.reverse()return torch.tensor(advantage_list, dtype=torch.float)# 基于tensorflow
def compute_advantage(gamma, lmbda, td_delta):td_delta = tf.stop_gradient(td_delta)advantage_list = []advantage = 0.0for delta in tf.reverse(td_delta, axis=[0]):advantage = gamma * lmbda * advantage + deltaadvantage_list.append(advantage)advantage_list.reverse()return tf.convert_to_tensor(advantage_list, dtype=tf.float32)

参考资料:动手学强化学习

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

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

相关文章

7_分类算法—逻辑回归

文章目录 逻辑回归:1 Logistic回归(二分类问题)1.1 sigmoid函数1.2 Logistic回归及似然函数(求解)1.3 θ参数求解1.4 Logistic回归损失函数1.5 LogisticRegression总结 2 Softmax回归(多分类问题&#xff0…

Oracle安装与配置

一 把windows2003拖到vm里去 1.1 加一块虚拟网卡 1.2 把网卡信息改一下 配完之后点一下应用 这个地方改成一个不是1但是在255之内的数,就可以 二 后面调试很久,失败了 后面还有一些步骤,但是总的来说,这次安装失败了&#xf…

适合自己企业的erp系统怎么选?这8条关键因素缺一不可!

一文看懂:如何选择适合自己企业的ERP系统?选型过程中有哪些关键因素需要考虑? 无论你是多大规模的企业,看懂这一篇,你都能受用无穷。 哪怕你需求复杂,现成ERP系统无法满足,最后我也给出了一条…

设计模式之五:单例模式

有些对象只需要有一个,比如线程池、缓存和注册表等。 对比全局变量,其需要在程序开始就创建好对象,如果这个对象比较耗资源,而在后面的执行过程中又一直没有用到,就造成了浪费。 class Singleton {private:static Si…

windows自动备份审计日志

最近公司项目,遇到三级等保,需要windows跳板机也要搞日志审计,且需要备份审计日志,所有就有了下面的方案,自动化脚本备份windows审计日志 创建一个新的文本文件,并将其保存为.bat文件,例如backu…

政府大数据资源中心建设总体方案[56页PPT]

导读:原文《政府大数据资源中心建设总体方案[56页PPT]》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式: 如需…

uni-app开发微信小程序经常遇到的一些问题及解决方案

1.如何获取用户信息? 可以使用uni.getUserInfo接口获取用户信息。需要用户授权。 2.如何实现下拉刷新? 可以使用uni-app提供的页面组件内置下拉刷新功能,也可以自定义下拉刷新组件。 3.如何实现上拉加载更多? 可以在页面onReachBo…

configure 文件中测试Makefile 是否支持嵌套变量的代码注释

$ cat 2.sh #!/bin/bash #################################################################### # author: hjjdebug # date: 2023年 08月 07日 星期一 17:44:09 CST # configure 文件中测试Makefile 是否支持嵌套变量的代码注释. # 下面代码是从configure 脚本中择出的一小…

ReactNative 学习笔记

学习使用的开发工具 编译器 VSCode 开发语言工具 TypeScript 重要程度分类 一般 这个程度的知识点主要是达到熟练掌握即可,不用太深入研究和学习。 重要 这个程度的知识点主要是达到熟练掌握,并且内部的原理切要熟记,因为会关联到其他的知…

Zebec Protocol ,不止于 Web3 世界的 “Paypal”

Paypal是传统支付领域的巨头企业,在北美支付市场占有率约为77%以上。从具体的业务数据看,在8月初,Paypal公布的2023年第二季度财报显示,PayPal第二季度净营收为73亿美元,净利润为10.29亿美元。虽然Paypal的净利润相交去…

javaWeb项目--二级评论完整思路

先来看前端需要什么吧: 通过博客id,首先需要显示所有一级评论,包括评论者的头像,昵称,评论时间,评论内容 然后要显示每个一级评论下面的二级评论,包括,评论者的头像,昵称…

6.s081/6.1810(Fall 2022)Lab5: Copy-on-Write Fork for xv6

前言 本来往年这里还有个Lazy Allocation的,今年不知道为啥直接给跳过去了。. 其他篇章 环境搭建 Lab1: Utilities Lab2: System calls Lab3: Page tables Lab4: Traps Lab5: Copy-on-Write Fork for xv6 参考链接 官网链接 xv6手册链接,这个挺重要…

Windows下安装Scala(以Scala 2.11.12为例)

Windows下安装Scala(以Scala 2.11.12为例) 一、Scala2.11.12官网下载二、Scala2.11.12网盘下载三、Scala各版本下载地址四、Scala安装4.1、点击 scala-2.11.12.msi 文件安装4.2、设置环境变量 %SCALA_HOME%4.3、环境变量Path添加条目%SCALA_HOME%\bin 四…

1466. 重新规划路线

题目描述&#xff1a; 主要思路&#xff1a; 将所有有向边抽象为无向边&#xff0c;将原有的方向权重置为1&#xff0c;其余置为0。 从0开始遍历所有城市&#xff0c;ans权重和。 class Solution { public:vector<vector<int>> a,w;int ans0;bool book[500010];v…

使用yarn启动项目报错

使用yarn启动项目报错 解决方法&#xff1a; 1.点击“开始”菜单搜索找到 Windows PowerShell ISE并以管理员身份运行(注&#xff1a;不是以管理员的身份直接运行cmd) 2. 输入 set-ExecutionPolicy RemoteSigned 回车 3.输入&#xff08;选择全是&#xff09; 4.再输入get-Exe…

文本NLP噪音预处理(加拼写检查)

最近总结修改了下预处理方法&#xff0c;记录下 首先download需要的依赖 pip install pyenchantpip install nltk pyenchant 是用来检测拼写正确的&#xff0c;如果你的文本里面可能包含非正确拼写的单词&#xff0c;那就忽略它&#xff0c;nltk用来做分词的。 python -m nlt…

生成小程序二维码、小程序码

微信自定义生成二维码 使用微信云开发生成自定义二维码、小程序码话不多说&#xff0c;我们先来看最终的展示效果生成码有三种方式操作步骤1. 云环境的初始化2. 在页面上开辟一个容器来展示二维码&#xff08;包括预览和保存到相册的按钮&#xff09;3. 创建云函数4. 生成二维码…

WEB渗透WFUZZ攻击使用介绍

目录 介绍 语言 安装 可以挖到的漏洞 特性 功能枚举 爆破文件、目录

RabbitMQ的6种工作模式

RabbitMQ的6种工作模式 官方文档&#xff1a; http://www.rabbitmq.com/ https://www.rabbitmq.com/getstarted.html RabbitMQ 常见的 6 种工作模式&#xff1a; 1、simple简单模式 1)、消息产生后将消息放入队列。 2)、消息的消费者监听消息队列&#xff0c;如果队列中…

k8s的Namespace详解

简介 在一个K8s集群中可以拥有多个命名空间,它们在逻辑上彼此隔离 namespaces是对一组资源和对象的抽象集合,比如可以将系统内部的对象划分为不同的项目组或用户组 K8s在集群启动之后,会默认创建几个namespace默认namespace default:所有未指定Namespace的对象都会被分配在…