策略梯度定理公式的详细推导
策略梯度定理公式的详细推导
以下是策略梯度定理公式从基础概率公式到最终形式的完整推导,帮助更清晰地理解推导过程中的每一个步骤。
1. 策略梯度的目标
我们希望最大化期望累积奖励 ( J ( θ ) J(\theta) J(θ) ),其定义为:
J ( θ ) = E π θ [ R t ] J(\theta) = \mathbb{E}_{\pi_\theta} \left[ R_t \right] J(θ)=Eπθ[Rt]
根据期望的定义,可以将 ( J ( θ ) J(\theta) J(θ) ) 写为积分形式:
J ( θ ) = ∫ τ P ( τ ; θ ) R t d τ J(\theta) = \int_{\tau} P(\tau; \theta) R_t \, d\tau J(θ)=∫τP(τ;θ)Rtdτ
其中:
- ( τ = ( s 0 , a 0 , s 1 , a 1 , … ) \tau = (s_0, a_0, s_1, a_1, \dots) τ=(s0,a0,s1,a1,…) ) 表示一条轨迹;
- ( P ( τ ; θ ) P(\tau; \theta) P(τ;θ) ) 是轨迹的概率分布。
接下来,我们对目标 ( J ( θ ) J(\theta) J(θ) ) 求梯度:
∇ θ J ( θ ) = ∇ θ ∫ τ P ( τ ; θ ) R t d τ \nabla_\theta J(\theta) = \nabla_\theta \int_{\tau} P(\tau; \theta) R_t \, d\tau ∇θJ(θ)=∇θ∫τP(τ;θ)Rtdτ
根据微积分中的交换求导与积分的规则,将梯度符号与积分符号交换位置:
∇ θ J ( θ ) = ∫ τ ∇ θ [ P ( τ ; θ ) R t ] d τ \nabla_\theta J(\theta) = \int_{\tau} \nabla_\theta \left[ P(\tau; \theta) R_t \right] d\tau ∇θJ(θ)=∫τ∇θ[P(τ;θ)Rt]dτ
因为 ( R t R_t Rt ) 不依赖于参数 ( θ \theta θ ),所以可以提取出来:
∇ θ J ( θ ) = ∫ τ R t ∇ θ P ( τ ; θ ) d τ \nabla_\theta J(\theta) = \int_{\tau} R_t \nabla_\theta P(\tau; \theta) \, d\tau ∇θJ(θ)=∫τRt∇θP(τ;θ)dτ
2. 引入对数梯度
为了化简 ( ∇ θ P ( τ ; θ ) \nabla_\theta P(\tau; \theta) ∇θP(τ;θ) ),我们引入对数梯度技巧:
∇ θ P ( τ ; θ ) = P ( τ ; θ ) ⋅ ∇ θ log P ( τ ; θ ) \nabla_\theta P(\tau; \theta) = P(\tau; \theta) \cdot \nabla_\theta \log P(\tau; \theta) ∇θP(τ;θ)=P(τ;θ)⋅∇θlogP(τ;θ)
将其代入梯度公式:
∇ θ J ( θ ) = ∫ τ R t ⋅ P ( τ ; θ ) ⋅ ∇ θ log P ( τ ; θ ) d τ \nabla_\theta J(\theta) = \int_{\tau} R_t \cdot P(\tau; \theta) \cdot \nabla_\theta \log P(\tau; \theta) \, d\tau ∇θJ(θ)=∫τRt⋅P(τ;θ)⋅∇θlogP(τ;θ)dτ
根据概率分布 ( P ( τ ; θ ) P(\tau; \theta) P(τ;θ) ) 的性质,可以用期望形式重新表示:
∇ θ J ( θ ) = E π θ [ R t ⋅ ∇ θ log P ( τ ; θ ) ] \nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta} \left[ R_t \cdot \nabla_\theta \log P(\tau; \theta) \right] ∇θJ(θ)=Eπθ[Rt⋅∇θlogP(τ;θ)]
这一步的重要性在于将积分转化为在策略 ( π θ \pi_\theta πθ ) 下的期望,使得后续计算能够通过采样来实现。
3. 轨迹概率分布的分解
轨迹 ( τ \tau τ ) 的概率 ( P ( τ ; θ ) P(\tau; \theta) P(τ;θ) ) 可以分解为以下形式:
P ( τ ; θ ) = P ( s 0 ) ∏ t = 0 ∞ π θ ( a t ∣ s t ) P ( s t + 1 ∣ s t , a t ) P(\tau; \theta) = P(s_0) \prod_{t=0}^{\infty} \pi_\theta(a_t | s_t) P(s_{t+1} | s_t, a_t) P(τ;θ)=P(s0)t=0∏∞πθ(at∣st)P(st+1∣st,at)
其中:
- ( P ( s 0 ) P(s_0) P(s0) ):初始状态的概率;
- ( π θ ( a t ∣ s t ) \pi_\theta(a_t | s_t) πθ(at∣st) ):策略分布,表示在状态 ( s t s_t st ) 下采取动作 ( a t a_t at ) 的概率;
- ( P ( s t + 1 ∣ s t , a t ) P(s_{t+1} | s_t, a_t) P(st+1∣st,at) ):环境的状态转移概率。
对 ( log P ( τ ; θ ) \log P(\tau; \theta) logP(τ;θ) ) 求导时,仅有 ( π θ ( a t ∣ s t ) \pi_\theta(a_t | s_t) πθ(at∣st) ) 与参数 ( θ \theta θ ) 相关,因此可化简为:
∇ θ log P ( τ ; θ ) = ∑ t = 0 ∞ ∇ θ log π θ ( a t ∣ s t ) \nabla_\theta \log P(\tau; \theta) = \sum_{t=0}^{\infty} \nabla_\theta \log \pi_\theta(a_t | s_t) ∇θlogP(τ;θ)=t=0∑∞∇θlogπθ(at∣st)
将此结果代入梯度公式:
∇ θ J ( θ ) = E π θ [ R t ⋅ ∑ t = 0 ∞ ∇ θ log π θ ( a t ∣ s t ) ] \nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta} \left[ R_t \cdot \sum_{t=0}^{\infty} \nabla_\theta \log \pi_\theta(a_t | s_t) \right] ∇θJ(θ)=Eπθ[Rt⋅t=0∑∞∇θlogπθ(at∣st)]
4. 化简最终公式
将期望中的求和移到外部,可以得到:
∇ θ J ( θ ) = ∑ t = 0 ∞ E π θ [ R t ⋅ ∇ θ log π θ ( a t ∣ s t ) ] \nabla_\theta J(\theta) = \sum_{t=0}^{\infty} \mathbb{E}_{\pi_\theta} \left[ R_t \cdot \nabla_\theta \log \pi_\theta(a_t | s_t) \right] ∇θJ(θ)=t=0∑∞Eπθ[Rt⋅∇θlogπθ(at∣st)]
在每个时间步 ( t t t ),我们只需要计算与当前动作 ( a t a_t at ) 和状态 ( s t s_t st ) 相关的对数梯度,从而得到:
∇ θ J ( θ ) = E π θ [ R t ⋅ ∇ θ log π θ ( a t ∣ s t ) ] \nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta} \left[ R_t \cdot \nabla_\theta \log \pi_\theta(a_t | s_t) \right] ∇θJ(θ)=Eπθ[Rt⋅∇θlogπθ(at∣st)]
这就是策略梯度定理的最终公式。
5. 使用对数梯度性质验证
策略梯度公式的核心在于以下对数梯度性质:
∇ θ π θ ( a t ∣ s t ) = π θ ( a t ∣ s t ) ⋅ ∇ θ log π θ ( a t ∣ s t ) \nabla_\theta \pi_\theta(a_t | s_t) = \pi_\theta(a_t | s_t) \cdot \nabla_\theta \log \pi_\theta(a_t | s_t) ∇θπθ(at∣st)=πθ(at∣st)⋅∇θlogπθ(at∣st)
证明如下:
- 根据对数定义, ( log x \log x logx ) 的导数为 ( 1 x \frac{1}{x} x1 );
- 对 ( π θ ( a t ∣ s t ) \pi_\theta(a_t | s_t) πθ(at∣st) ) 求梯度:
∇ θ log π θ ( a t ∣ s t ) = 1 π θ ( a t ∣ s t ) ⋅ ∇ θ π θ ( a t ∣ s t ) \nabla_\theta \log \pi_\theta(a_t | s_t) = \frac{1}{\pi_\theta(a_t | s_t)} \cdot \nabla_\theta \pi_\theta(a_t | s_t) ∇θlogπθ(at∣st)=πθ(at∣st)1⋅∇θπθ(at∣st)
两边乘以 ( π θ ( a t ∣ s t ) \pi_\theta(a_t | s_t) πθ(at∣st) ):
∇ θ π θ ( a t ∣ s t ) = π θ ( a t ∣ s t ) ⋅ ∇ θ log π θ ( a t ∣ s t ) \nabla_\theta \pi_\theta(a_t | s_t) = \pi_\theta(a_t | s_t) \cdot \nabla_\theta \log \pi_\theta(a_t | s_t) ∇θπθ(at∣st)=πθ(at∣st)⋅∇θlogπθ(at∣st)
将此性质代入公式,概率 ( π θ ( a t ∣ s t ) \pi_\theta(a_t | s_t) πθ(at∣st) ) 被约去,得到:
∇ θ J ( θ ) = E π θ [ R t ⋅ ∇ θ log π θ ( a t ∣ s t ) ] \nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta} \left[ R_t \cdot \nabla_\theta \log \pi_\theta(a_t | s_t) \right] ∇θJ(θ)=Eπθ[Rt⋅∇θlogπθ(at∣st)]
总结
通过以上详细推导,可以看出策略梯度定理的核心在于以下两点:
- 引入对数梯度性质:将复杂的概率梯度转化为对数形式;
- 利用轨迹概率分布的分解:化简梯度公式,使得计算集中在策略部分 ( π θ ( a t ∣ s t ) \pi_\theta(a_t | s_t) πθ(at∣st) )。
最终的策略梯度公式为:
∇ θ J ( θ ) = E π θ [ R t ⋅ ∇ θ log π θ ( a t ∣ s t ) ] \nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta} \left[ R_t \cdot \nabla_\theta \log \pi_\theta(a_t | s_t) \right] ∇θJ(θ)=Eπθ[Rt⋅∇θlogπθ(at∣st)]
这一公式既简洁又高效,是策略梯度方法的理论基础。
后记
2024年12月12日17点00分于上海,在GPT4o大模型辅助下完成。
相关文章:
策略梯度定理公式的详细推导
策略梯度定理公式的详细推导 以下是策略梯度定理公式从基础概率公式到最终形式的完整推导,帮助更清晰地理解推导过程中的每一个步骤。 1. 策略梯度的目标 我们希望最大化期望累积奖励 ( J ( θ ) J(\theta) J(θ) ),其定义为: J ( θ ) E…...
力扣-图论-10【算法学习day.60】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...
《Python WEB安全 库全解析》
《Python WEB安全 库全解析》 一、Python WEB安全 库概述二、常见的 Python WEB安全 库介绍1. Jiasule2. Awesome Python Security3. Flask-Security4. Flask-SeaSurf 三、Python WEB 安全库的优缺点1. 优点2. 缺点 四、Python WEB 安全库的使用场景1. 开发 Web 应用2. 处理敏感…...
Linux yum-config-manager命令异常
错误信息 使用 yum-config-manager命令时错误信息如下 sudo yum-config-manager \ > --add-repo \ > https://download.docker.com/linux/centos/docker-ce.repo sudo: yum-config-manager: command not found 解决办法 第一步: sudo yum -y install yum-u…...
ios 开发配置蓝牙
如果使用了蓝牙功能, 又没有配置, 会出现以下错误: This app has crashed because it attempted to access privacy-sensitive data without a usage description. The apps Info.plist must contain an NSBluetoothAlwaysUsageDescription key with a string value explaini…...
geoserver(1) 发布sql 图层 支持自定义参数
前提使用postgis 数据库支持关联 join 支持 in,not in,like,及其他sql原生函数 新增sql图层 编写自定义sql 编辑sql语句必须输出带有geom数据 正则表达式去除 设置id以及坐标参考系 预览sql图层效果 拼接sql参数 http://xxx.com/geoserver/weather/wms?SERVICEWMS&VERSI…...
Linux:network:添加ip的时候自动添加一个本地路由
文章目录 问题问题 最近在看一个路由的问题,顺便看内核代码,发现在添加IP的时候,内核会自动添加一个local route。 net/ipv4/devinet.c inet_rtm_newaddr->__inet_insert_ifa /* Send message first, then call notifier.Notifier will trigger FIB update, so thatlis…...
go 集成nacos注册中心、配置中心
使用限制 Go>v1.15 Nacos>2.x 安装 使用go get安装SDK: go get -u github.com/nacos-group/nacos-sdk-go/v2 快速使用 初始化客户端配置ClientConfig constant.ClientConfig{TimeoutMs uint64 // 请求Nacos服务端的超时时间,默…...
ssd202d-badblock-坏块检测
这边文章讲述的是坏快检测功能 思路: 1.第一次烧录固件会实现跳坏块,但是后续使用会导致坏块的产生; 于是我在uboot环境变量添加了两个变量来控制坏快 lb_badnum //坏块个数 lb_badoff //坏块所在位置 2.第一次开机会根据lb_badnum是否…...
MySQL-练习-数据介绍
文章目录 一. 数据介绍1. 数据结构2. 创建数据库,数据表3. 员工表(employees)练习1 4. 顾客表(customers)练习2 5. 商品(products)和商品类别(categories)表练习3 6. 供应商表(suppliers)练习4 7. 订单和订单明细表练习5 二. 数据汇总三. 使用CASE WHEN …...
React框架:解锁现代化Web开发的新维度
在当今前端开发领域,React 无疑是一颗璀璨的明星。React 是由 Facebook 开发的用于构建用户界面的 JavaScript 库,它在前端开发中占据着重要的地位,为开发者提供了一种高效、灵活且可维护的方式来构建复杂的用户界面。 一、React 的背景与开…...
电阻功率,限流,等效电阻
1 电阻额定功率 2 电阻限流作用 3 电阻并联等效电阻...
Qt | 开发工具(top1)
Qt Creator 跨平台、完整的集成开发环境(IDE),供应用程序开发者创建用于多个桌面、嵌入式和移动设备平台的应用程序。 Qt Linguist 一套将Qt C和Qt Quick应用程序翻译成本地语言的工具。 qmake Qt自动化构建工具,简化了不同平台的构建过程。…...
Node.js express
1. express 介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架,官方网址:https://www.expressjs.com.cn/简单来说,express 是一个封装好的工具包,封装了很多功能,便于我们开发 WEB 应用ÿ…...
ios h5中在fixed元素中的input被focus时,键盘遮挡input (van-popup、van-feild)
问题描述: 前提:我使用的是vant组件库,其中一个页面中有一个van-popup组件,van-popup组件中又嵌套了一个van-field组件预期结果:当点击van-feild输入框时,键盘弹起,输入框显示在键盘上方实际结…...
springboot整合lua脚本在Redis实现商品库存扣减
1、目的 使用lua脚本,可以保证多条命令的操作原子性;同时可以减少操作IO(比如说判断redis对应数据是否小于0,小于0就重置为100,这个场景一般是取出来再判断,再存放进行,就至少存在2次IO,用lua脚…...
MySQL ON DUPLICATE KEY UPDATE影响行数
目录 分析为什么Updates返回7 总结 数据库更新日志如下 insertOrUpdateList|> Preparing: INSERT INTO clue_user_tag (vuid, tag_id, tag_type, content) VALUES (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) ON DUPLICATE KEY UPDATE …...
uniapp小程序 slot中无法传递外部参数的解决方案
最近在封装一个List组件,外部传给我数据,我循环后将每个Item部分slot到外部,由调用者自己去写item布局,类似ElementUI、iView的Tabe列表。 List: <view v-if"list.length > 0" class"list-scroll__item&quo…...
umi实现动态获取菜单权限
文章目录 前景登录组件编写登录逻辑菜单的时机动态路由页面刷新手动修改地址 前景 不同用户拥有不同的菜单权限,现在我们实现登录动态获取权限菜单。 登录组件编写 //当我们需要使用dva的dispatch函数时,除了通过connect函数包裹组件还可以使用这种方…...
Pytest-Bdd-Playwright 系列教程(14):Docstring 参数
Pytest-Bdd-Playwright 系列教程(14):Docstring 参数 前言一、什么是docstring?二、基本语法三、主要特点四、实际例子五、注意事项六、使用建议总结 前言 在自动化测试的过程中,我们经常需要处理复杂的测试数据或需要输入多行文…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
