策略梯度方法

news2025/1/18 16:50:27

策略梯度方法

数学背景

给定一个标量函数 J ( θ ) J\left(\theta\right) J(θ),利用梯度上升法,使其最大化,此时的 π θ \pi_\theta πθ就是最优策略。
θ t + 1 = θ t + α ∇ θ J ( θ t ) \theta_{t+1}=\theta_t+\alpha \nabla_\theta J(\theta_t) θt+1=θt+αθJ(θt)

标量函数 J ( θ ) J(\theta) J(θ)

就是上面提到的最优指标 J J J,一般有以下几种定义:

  1. 平均状态价值
    v ˉ π = ∑ s ∈ S d π ( s ) v π ( s ) = E [ v π ( S ) ] \bar v_\pi =\sum_{s\in\mathcal{S}}d_\pi(s)v_\pi(s) =\mathbb{E}\left[ v_\pi(S) \right] vˉπ=sSdπ(s)vπ(s)=E[vπ(S)]
    如果 d d d π \pi π无关,那么记 d π = d 0 d_\pi=d_0 dπ=d0,就Grid World问题,由于状态价值 v v v是回报的期望,考虑两种具体情况:

    • 起始在随机位置,均匀考虑每个状态价值: d 0 = 1 / ∣ S ∣ d_0=1/|\mathcal{S}| d0=1/∣S
    • 起始在固定位置,只考虑 s 0 s_0 s0状态价值即可: d 0 ( s 0 ) = 1 ,   d 0 ( s ≠ s 0 ) d_0(s_0)=1,\ d_0(s\neq s_0) d0(s0)=1, d0(s=s0)

    如果 d d d π \pi π有关,求解 d π T P π = d π T d_\pi^TP_\pi=d_\pi^T dπTPπ=dπT得到 d π d_\pi dπ,其中 P π P_\pi Pπ是在策略 π \pi π下的状态转移矩阵。此时,如果一个状态经常出现,对应的 d ( s ) d(s) d(s)就会变大。

  2. 平均瞬时奖励
    r ˉ π = ∑ s ∈ S d π ( s ) r π ( s ) = E [ r π ( S ) ] \bar r_\pi=\sum_{s\in \mathcal{S}}d_\pi(s)r_\pi(s)=\mathbb{E}\left[r_\pi(S)\right] rˉπ=sSdπ(s)rπ(s)=E[rπ(S)]

    其中 r π ( s ) r_\pi(s) rπ(s)是agent在某状态按策略 π \pi π在动作空间中采取动作的瞬时奖励
    r π ( s ) = ∑ a ∈ A π ( s ∣ a ) r ( s , a ) r_\pi(s)=\sum_{a\in \mathcal{A}}\pi(s\mid a)r(s,a) rπ(s)=aAπ(sa)r(s,a)

    此定义与episode reward等价,即当episode长度无限大时, s s s d π d_\pi dπ分布,即
    lim ⁡ n → ∞ 1 n E [ ∑ k = 1 n R t + k ]    ⟺    r ˉ π \lim_{n\to\infty}\frac{1}{n}\mathbb{E}[\sum_{k=1}^{n}R_{t+k}] \iff \bar r_\pi nlimn1E[k=1nRt+k]rˉπ

J ( θ ) J(\theta) J(θ)的梯度

上面两类指标函数的梯度都可以写成:
∇ θ J ( θ ) = ∑ s ∈ S η ( s ) ∑ a ∈ A ∇ θ π ( a ∣ s , θ ) q π ( s , a ) = ∑ s ∈ S η ( s ) ∑ a ∈ A π ( a ∣ s , θ ) ∇ θ log ⁡ π ( a ∣ s , θ ) q π ( s , a ) = E [ ∇ θ log ⁡ π ( A ∣ S , θ ) q π ( S , A ) ] \begin{aligned} \nabla_\theta J(\theta) &=\sum_{s\in \mathcal{S}}\eta(s)\sum_{a\in \mathcal{A}} \nabla_\theta \pi(a|s,\theta)q_\pi(s,a)\\ &=\sum_{s\in \mathcal{S}}\eta(s)\sum_{a\in \mathcal{A}} \pi(a|s,\theta)\nabla_\theta \log\pi(a|s,\theta)q_\pi(s,a)\\ &=\mathbb{E}[\nabla_\theta \log\pi(A|S,\theta)q_\pi(S,A)] \end{aligned} θJ(θ)=sSη(s)aAθπ(as,θ)qπ(s,a)=sSη(s)aAπ(as,θ)θlogπ(as,θ)qπ(s,a)=E[θlogπ(AS,θ)qπ(S,A)]
其中, S ∼ η S\sim \eta Sη A ∼ π ( a ∣ s , θ ) A\sim \pi(a|s,\theta) Aπ(as,θ)

训练时,使用随机近似的梯度:
∇ θ J ≈ ∇ θ log ⁡ π ( a ∣ s , θ ) q π ( s , a ) \nabla_\theta J\approx\nabla_\theta \log\pi(a|s,\theta)q_\pi(s,a) θJθlogπ(as,θ)qπ(s,a)

REINFORCE伪代码

image-20230818220237197

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

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

相关文章

C++并发及互斥保护示例

最近要写一个多线程的并发数据库,主要是希望使用读写锁实现库的并发访问,同时考虑到其他平台(如Iar)没有C的读写锁,需要操作系统提供,就将读写锁封装起来。整个过程还是比较曲折的,碰到了不少问题,在此就简…

iOS中一种超简单的路由实现方式

看了很多的路由实现方式,发现实现的都太复杂,越是复杂的东西越是难以维护,当然复杂的东西好处就是覆盖面比较全。而本文则是使用一种比较简单的方式实现路由的,当然如有建议或者想法可以及时跟我沟通,让我也能有更好的…

reeds_sheep运动规划算法Python源码分析

本文用于记录Python版本zhm-real / PathPlanning运动规划库中reeds_sheep算法的源码分析 关于reeds sheep算法的原理介绍前文已经介绍过了,链接如下所示: 《Reeds-Shepp曲线学习笔记及相关思考》 《Reeds-Shepp曲线基础运动公式推导过程》 正文&#xff…

vite初始化vue3项目(配置自动格式化工具与git提交规范工具)

初始化项目 vite构建vue项目还是比较简单的,简单配置选择一下就行了 初始化命令 npm init vuelatest初始化最新版本vue项目 2. 基本选项含义 Add TypeScript 是否添加TSADD JSX是否支持JSXADD Vue Router是否添加Vue Router路由管理工具ADD Pinia 是否添加pinia…

直方图均衡化和自适应直方图均衡化

前言: Hello大家好,我是Dream。 均衡化是数字图像处理中常用的一种技术,用于增强图像的视觉效果和对比度。,今天我们将实现对同一张图像的直方图均衡化和自适应直方图均衡化处理,学习一下两者的的基本原理和实现过程&a…

docker搭建redis主从复制

docker安装redis docker pull redis:latest创建目录结构 用于挂载数据卷配置文件等 运行redis容器 主redis配置 下面这种方式挂载的配置文件不生效。 docker run -d \--name master_redis_6379 \-p 6379:6379 \--restart unless-stopped \-v /mydata/master_redis/data:/da…

集简云本周新增/更新:新增3大功能,集成19款应用,更新5款应用,新增近290个动作

本周更新概要 功能更新 ◉ 新增功能:语聚AI开放API功能 ◉ 新增功能:数据表表格公开分享功能 ◉ 新增功能:浏览器页面操作页面内容读取(增强版本) 应用新增 新增应用:赛捷CRM 新增应用:快跑者 新增应…

LeGO-Loam代码解析(一) 项目介绍、论文解读、配置安装

目录 1.项目介绍 2. 论文解读 LeGO-LOAM:轻量级且地面优化的可变地形激光里程计与建图 2.1 摘要 2.2 介绍 2.3 正文部分1 --- System Review 2.4 正文部分2 --- Segmatation(地面点角面点分离) 2.5 Feature Extraction 正文部分3 ---…

QT Quick之quick与C++混合编程

Qt quick能够生成非常绚丽界面,但有其局限性的,对于一些业务逻辑和复杂算法,比如低阶的网络编程如 QTcpSocket ,多线程,又如 XML 文档处理类库 QXmlStreamReader / QXmlStreamWriter 等等,在 QML 中要么不可…

【操作系统考点汇集】操作系统考点汇集

关于操作系统可能考察的知识点 操作系统基本原理 什么是操作系统? 操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和它软件方便的接口和环境,是计算机系统中最基…

【C语言学习】参数传递

调用函数 1.如果函数有参数,调用函数时必须传递给它数量、类型正确的的值。 2.可以传递给函数的值是表达式的结果,包括: 字面量 变量 函数的返回值 计算的结果 int a,b,c; a5; b6; cmax(10,12); cmax(a,b); cmax(c,23); cmax(max(23,45),a);…

opencv实战项目-停车位计数

手势识别系列文章目录 手势识别是一种人机交互技术,通过识别人的手势动作,从而实现对计算机、智能手机、智能电视等设备的操作和控制。 1. opencv实现手部追踪(定位手部关键点) 2.opencv实战项目 实现手势跟踪并返回位置信息&a…

前端基础(JavaScript语法)

前言:今天学习JavaScript的基本语法,包括变量、函数、对象、数组。 目录 JavaScript 变量 函数 对象 数组 JavaScript 变量 定义变量 判断语句 判断等于: 判断不等于:! if else语句 if(vavb){ console.log("…

Harmony OS教程学习笔记

基础知识 1.如何修改程序启动的第一个页面? 不想使用创建的默认的页面,这时需要修改启动页面,修改的地方在EntryAbility文件中的onWindowStageCreate方法中。 onWindowStageCreate(windowStage: window.WindowStage) {// Main window is cr…

解决无法访问 Github 问题

GitHub作为程序员访问最频繁的网站,程序员们经常需要访问 Github找开源项目、学习新框架、管理自己的个人开源项目等等。 github加速器 因为GitHub属于国外的网站,直接访问的话,速度非常慢,甚至访问不了, 今天给大家…

centos下使用jemalloc解决Mysql内存泄漏问题

参考: MySQL bug:https://bugs.mysql.com/bug.php?id83047&tdsourcetags_pcqq_aiomsg https://github.com/jemalloc/jemalloc/blob/dev/INSTALL.md (1)ptmalloc 是glibc的内存分配管理 (2)tcmalloc…

如何批量修改图片名为不同名称

如何批量修改图片名为不同名称?当今社会,因为人们都养成了随手拍照的习惯,所以拥有上千上万张照片的相册已经司空见惯不足为奇。然而,我们在保存这些照片时往往都会碰到一个大难题——电脑中的图片名称千奇百怪,让整个…

打开软件提示mfc100u.dll缺失是什么意思?要怎么处理?

当你打开某个软件或者运行游戏,系统提示mfc100u.dll丢失,此时这个软件或者游戏根本无法运行。其实,mfc100u.dll是动态库文件,它是VS2010编译的软件所产生的,如果电脑运行程序时提示缺少mfc100u.dll文件,程序…

由“美”出发 听艺术家林曦关于美育与智慧的探讨

不久前,林曦老师与我们的老朋友「十点读书」进行了一次线上直播,有关林曦老师十余年的书法教学,和传统美育的心得,以及因此诞生的新书《无用之美》。      这一次的直播,由“美”的主题出发,延伸出美育…

微服务参数透传实现

说明:在微服务架构中,用户身份经网关验证后,我们可以将用户信息,如ID加入到请求头上。后面的微服务中,可以设置一个拦截器,拦截请求,获取请求头上的用户ID,加入到ThreadLocal中。 最…