强化学习策略梯度推导

本文主角:

∇ θ J ( θ ) ∝ ∑ s ∈ S μ π θ ( s ) ∑ a ∈ A Q π θ ( s , a ) ∇ θ π θ ( a ∣ s ) \nabla_{\theta}J(\theta) \propto \sum_{s \in \mathcal{S}} \mu^{\pi_{\theta}}(s) \sum_{a \in \mathcal{A}} Q^{\pi_{\theta}}(s, a) \nabla_{\theta}\pi_{\theta}(a|s) θJ(θ)sSμπθ(s)aAQπθ(s,a)θπθ(as)

这个公式是策略梯度定理的表述,它表明一个策略的性能梯度(即优化目标函数 J ( θ ) J(\theta) J(θ)的梯度)与在该策略下各状态的访问频率 μ π θ ( s ) \mu^{\pi_{\theta}}(s) μπθ(s),以及在这些状态下,采取不同动作的价值 Q π θ ( s , a ) Q^{\pi_{\theta}}(s, a) Qπθ(s,a)和采取这些动作的策略概率的梯度 ∇ θ π θ ( a ∣ s ) \nabla_{\theta}\pi_{\theta}(a|s) θπθ(as)的乘积之和成正比。

在强化学习中,这个公式是用来指导如何调整策略参数 θ \theta θ,以便最大化长期奖励。通过梯度上升算法,我们可以改善策略,使得在高价值 Q Q Q​下采取的动作更加频繁,从而提高整体策略的期望回报。

在这里插入图片描述

下面是完整推导:

  • 定义状态值函数的梯度:
    ∇ θ V π ( s ) = ∇ θ ( ∑ a ∈ A π ( a ∣ s ) Q π ( s , a ) ) \nabla_{\theta}V^{\pi}(s) = \nabla_{\theta}\left(\sum_{a \in A} \pi(a|s)Q^{\pi}(s, a)\right) θVπ(s)=θ(aAπ(as)Qπ(s,a))
    这一步基于状态值函数 V π ( s ) V^{\pi}(s) Vπ(s)的定义,即给定策略 π \pi π下,在状态 s s s采取所有可能动作 a a a的期望回报的总和。这里, π ( a ∣ s ) \pi(a|s) π(as)是在状态 s s s下选择动作 a a a的策略概率,而 Q π ( s , a ) Q^{\pi}(s, a) Qπ(s,a)是执行动作 a a a并遵循策略 π \pi π的期望回报。

  • 应用梯度和乘积规则:
    = ∑ a ∈ A ( ∇ θ π ( a ∣ s ) Q π ( s , a ) + π ( a ∣ s ) ∇ θ Q π ( s , a ) ) = \sum_{a \in A}\left(\nabla_{\theta}\pi(a|s)Q^{\pi}(s, a) + \pi(a|s)\nabla_{\theta}Q^{\pi}(s, a)\right) =aA(θπ(as)Qπ(s,a)+π(as)θQπ(s,a))
    这一步通过应用梯度运算符和乘积规则( ∇ ( x y ) = x ∇ y + y ∇ x \nabla(xy) = x\nabla y + y\nabla x (xy)=xy+yx)来分解每个项。第一项考虑了策略 π ( a ∣ s ) \pi(a|s) π(as)对参数 θ \theta θ的直接依赖,而第二项考虑了行为值函数 Q π ( s , a ) Q^{\pi}(s, a) Qπ(s,a) θ \theta θ的依赖。

  • 行为值函数的梯度展开:
    = ∑ a ∈ A ( ∇ θ π ( a ∣ s ) Q π ( s , a ) + π ( a ∣ s ) ∇ θ ∑ s ′ , r P ( s ′ , r ∣ s , a ) ( r + γ V π ( s ′ ) ) ) = \sum_{a \in A}\left(\nabla_{\theta}\pi(a|s)Q^{\pi}(s, a) + \pi(a|s)\nabla_{\theta}\sum_{s', r}P(s', r|s, a)\left(r + \gamma V^{\pi}(s')\right)\right) =aA(θπ(as)Qπ(s,a)+π(as)θs,rP(s,rs,a)(r+γVπ(s)))
    这里将 Q π ( s , a ) Q^{\pi}(s, a) Qπ(s,a)按其定义展开,即为给定状态 s s s和动作 a a a后的即时奖励 r r r加上折扣后的未来奖励的期望值。梯度作用于整个表达式,注意到 r r r γ \gamma γ是常数,梯度只作用于 V π ( s ′ ) V^{\pi}(s') Vπ(s)

  • 简化即时奖励的影响:
    = ∑ a ∈ A ( ∇ θ π ( a ∣ s ) Q π ( s , a ) + γ π ( a ∣ s ) ∑ s ′ , r P ( s ′ , r ∣ s , a ) ∇ θ V π ( s ′ ) ) = \sum_{a \in A}\left(\nabla_{\theta}\pi(a|s)Q^{\pi}(s, a) + \gamma\pi(a|s)\sum_{s', r}P(s', r|s, a)\nabla_{\theta}V^{\pi}(s')\right) =aA(θπ(as)Qπ(s,a)+γπ(as)s,rP(s,rs,a)θVπ(s))
    在这一步中,即时奖励 r r r被省略,因为它不依赖于 θ \theta θ,因此其梯度为零。只有未来奖励的部分,即 γ V π ( s ′ ) \gamma V^{\pi}(s') γVπ(s),对 θ \theta θ有依赖,因此梯度只作用于这部分。

  • 进一步简化概率项:
    = ∑ a ∈ A ( ∇ θ π ( a ∣ s ) Q π ( s , a ) + γ π ( a ∣ s ) ∑ s ′ P ( s ′ ∣ s , a ) ∇ θ V π ( s ′ ) ) = \sum_{a \in A}\left(\nabla_{\theta}\pi(a|s)Q^{\pi}(s, a) + \gamma\pi(a|s)\sum_{s'}P(s'|s, a)\nabla_{\theta}V^{\pi}(s')\right) =aA(θπ(as)Qπ(s,a)+γπ(as)sP(ss,a)θVπ(s))


  • 从策略梯度的定义开始:
    ∇ θ V π ( s ) = ϕ ( s ) + γ ∑ a π ( a ∣ s ) ∑ s ′ P ( s ′ ∣ s , a ) ∇ θ V π ( s ′ ) \nabla_{\theta}V^{\pi}(s) = \phi(s) + \gamma\sum_{a} \pi(a|s)\sum_{s'}P(s'|s, a)\nabla_{\theta}V^{\pi}(s') θVπ(s)=ϕ(s)+γaπ(as)sP(ss,a)θVπ(s)
    这里, ϕ ( s ) = ∑ a ∈ A ∇ θ π θ ( a ∣ s ) Q π θ ( s , a ) \phi(s)= \sum_{a \in A} \nabla_{\theta}\pi_{\theta}(a|s)Q^{\pi_{\theta}}(s, a) ϕ(s)=aAθπθ(as)Qπθ(s,a)代表了状态 s s s的特征向量,它是策略梯度的一部分。接着,考虑了在当前策略下,从状态 s s s采取动作 a a a转移到状态 s ′ s' s的概率,以及从状态 s ′ s' s开始并遵循策略 π \pi π​的状态值函数的梯度。
  • 展开状态值函数的梯度:
    ∇ θ V π ( s ) = ϕ ( s ) + γ ∑ s ′ d π ( s → s ′ , 1 ) ∇ θ V π ( s ′ ) \nabla_{\theta}V^{\pi}(s) = \phi(s) + \gamma\sum_{s'} d^{\pi}(s \rightarrow s', 1)\nabla_{\theta}V^{\pi}(s') θVπ(s)=ϕ(s)+γsdπ(ss,1)θVπ(s)
    d π ( s → s ′ , 1 ) d^{\pi}(s \rightarrow s', 1) dπ(ss,1)表示在一步转移中从状态 s s s到状态 s ′ s' s的折扣后的状态转移概率。它是一个概率分布,考虑了所有可能的动作。
  • 递归地展开状态值函数的梯度:
    ∇ θ V π ( s ) = ϕ ( s ) + γ ∑ s ′ d π ( s → s ′ , 1 ) ϕ ( s ′ ) + γ 2 ∑ s ′ ′ d π ( s → s ′ ′ , 2 ) ∇ θ V π ( s ′ ′ ) \nabla_{\theta}V^{\pi}(s) = \phi(s) + \gamma\sum_{s'} d^{\pi}(s \rightarrow s', 1)\phi(s') + \gamma^2\sum_{s''} d^{\pi}(s \rightarrow s'', 2)\nabla_{\theta}V^{\pi}(s'') θVπ(s)=ϕ(s)+γsdπ(ss,1)ϕ(s)+γ2s′′dπ(ss′′,2)θVπ(s′′)
    这一步递归地应用了上一步的逻辑,但这次是对两步转移后的状态 s ′ ′ s'' s′′。这表明每一步都会增加一个更深层次的期望和一个更高的折扣因子 γ \gamma γ
  • 继续无限递归:
    ∇ θ V π ( s ) = ϕ ( s ) + γ ∑ s ′ d π ( s → s ′ , 1 ) ϕ ( s ′ ) + γ 2 ∑ s ′ ′ d π ( s → s ′ ′ , 2 ) ϕ ( s ′ ′ ) + … \nabla_{\theta}V^{\pi}(s) = \phi(s) + \gamma\sum_{s'} d^{\pi}(s \rightarrow s', 1)\phi(s') + \gamma^2\sum_{s''} d^{\pi}(s \rightarrow s'', 2)\phi(s'') + \ldots θVπ(s)=ϕ(s)+γsdπ(ss,1)ϕ(s)+γ2s′′dπ(ss′′,2)ϕ(s′′)+
    推导继续进行,考虑到所有可能的未来状态和它们对应的特征向量,乘以它们的转移概率和适当的折扣因子。
  • 总结为无限和:
    ∇ θ V π ( s ) = ∑ x ∈ S ∑ k = 0 ∞ γ k d π ( s → x , k ) ϕ ( x ) \nabla_{\theta}V^{\pi}(s) = \sum_{x \in S}\sum_{k=0}^{\infty}\gamma^k d^{\pi}(s \rightarrow x, k)\phi(x) θVπ(s)=xSk=0γkdπ(sx,k)ϕ(x)
    最后一步是将所有无限递归的项总结为一个无限序列和。这里 d π ( s → x , k ) d^{\pi}(s \rightarrow x, k) dπ(sx,k)是从状态 s s s到状态 x x x k k k​步内的折扣后的转移概率。这个无限和形式的期望值是对状态值函数的梯度的完整描述。

  • 目标函数的梯度:
    ∇ θ J ( θ ) = ∇ θ E s 0 [ V π θ ( s 0 ) ] \nabla_{\theta}J(\theta) = \nabla_{\theta} \mathbb{E}_{s_0}[V^{\pi_{\theta}}(s_0)] θJ(θ)=θEs0[Vπθ(s0)]
    这一步定义了目标函数 J ( θ ) J(\theta) J(θ)作为初始状态 s 0 s_0 s0下的状态值函数 V π θ ( s 0 ) V^{\pi_{\theta}}(s_0) Vπθ(s0)的期望值的梯度。

  • 引入状态转移概率:
    = ∑ s E s 0 [ ∑ k = 0 ∞ γ k d π θ ( s 0 → s , k ) ] ϕ ( s ) = \sum_s \mathbb{E}_{s_0} \left[ \sum_{k=0}^{\infty} \gamma^k d^{\pi_{\theta}}(s_0 \rightarrow s, k) \right] \phi(s) =sEs0[k=0γkdπθ(s0s,k)]ϕ(s)
    此处,将目标函数中的期望展开,包含从初始状态 s 0 s_0 s0到任意状态 s s s的折扣转移概率 d π θ ( s 0 → s , k ) d^{\pi_{\theta}}(s_0 \rightarrow s, k) dπθ(s0s,k),乘以状态 s s s的特征向量 ϕ ( s ) \phi(s) ϕ(s)。每个状态的特征向量与它被访问的概率加权求和。

  • 引入状态分布 η ( s ) \eta(s) η(s):
    = ∑ s η ( s ) ϕ ( s ) = \sum_s \eta(s) \phi(s) =sη(s)ϕ(s)
    这里, η ( s ) \eta(s) η(s)是在策略 π θ \pi_{\theta} πθ下访问状态 s s s的稳态分布。它是从任何初始状态出发,经过无限步骤后到达状态 s s s的概率。

  • 状态分布的规范化:
    ∝ ∑ s η ( s ) ∑ s ′ η ( s ′ ) ϕ ( s ) \propto \sum_s \frac{\eta(s)}{\sum_{s'} \eta(s')} \phi(s) ssη(s)η(s)ϕ(s)
    这一步表明状态分布被规范化了,使得所有状态的分布之和为1。这是为了将状态分布转化为概率分布。

  • 使用 η ( s ) \eta(s) η(s)的定义:
    = ∑ s μ ( s ) ∑ a Q π θ ( s , a ) ∇ θ π θ ( a ∣ s ) = \sum_s \mu(s) \sum_a Q^{\pi_{\theta}}(s, a) \nabla_{\theta} \pi_{\theta}(a|s) =sμ(s)aQπθ(s,a)θπθ(as)
    最终,我们得到了策略梯度定理的标准形式。这里 μ ( s ) \mu(s) μ(s)代表状态 s s s在策略 π θ \pi_{\theta} πθ下的访问频率,而 Q π θ ( s , a ) Q^{\pi_{\theta}}(s, a) Qπθ(s,a)是在状态 s s s下采取动作 a a a的行为值函数。梯度 ∇ θ π θ ( a ∣ s ) \nabla_{\theta} \pi_{\theta}(a|s) θπθ(as)表示策略对参数的依赖性。

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

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

相关文章

Unity UGUI的DrawCall优化

Unity UGUI是一种强大的用户界面设计工具,它可以帮助开发者快速创建各种界面元素,从按钮和文本到滑块和面板等。然而,在使用UGUI时,一个常见的性能瓶颈就是DrawCall过多导致的性能下降。在本文中,我们将深入探讨UGUI的…

华为配置直连三层组网直接转发示例

华为配置直连三层组网直接转发示例 组网图形 图1 配置直连三层组网直接转发示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户接入WLAN网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff…

springboot206基于SpringBoot的农商对接系统的设计与实现

基于Spring Boot的农商对接系统的设计与实现 Design and implementation of agricultural business docking system based on Spring Boot 摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离…

Vue 实现当前页的刷新

Vue 在缓存的基础上实现当前页的刷新 前进刷新,后退不刷新 一、Bus的实现 Bus.js 二、利用Bus实现不同页面的事件传播 1.引入Bus.js(传递)例如:A页面 2.引入Bus.js(接收)例如:B页面 3.路由组件设…

appium实现自动化测试原理

目录 1、Appium原理 1.1、Android Appium原理图文解析 1.1.2、原理详解 1.1.2.1、脚本端 1.1.2.2、appium-server 1.1.2.3、中间件bootstrap.jar 1.1.2.4、驱动引擎uiautomator 1.2、 IOS Appium原理 1、Appium原理 1.1、Android Appium原理图文解析 执行测试脚本全过…

OpenGL学习——17.模型

前情提要:本文代码源自Github上的学习文档“LearnOpenGL”,我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动,一切著作权归原作者所有,本文仅供学习交流,如有侵权,请联系我删除。L…

【递归】【后续遍历】【迭代】【队列】Leetcode 101 对称二叉树 100. 相同的树

【递归】【后续遍历】Leetcode 101 对称二叉树 100 相同的树 101. 对称二叉树解法一: 递归:后序遍历 左右中解法二: 迭代法,用了单端队列 100. 相同的树解法一:深度优先 ---------------🎈🎈对称…

WordPress管理员修改自己用户名的插件Username

有一些站长在刚开搭建WordPress网站时,对于管理员的用户名是随意输入,后来想要修改时发现不懂得如何下手。其实,修改WordPress管理员用户名最快速的方法就是进入数据库直接修改,详见『通过phpMyAdmin直接修改WordPress用户名的图文…

详解 leetcode_078. 合并K个升序链表.小顶堆实现

/*** 构造单链表节点*/ class ListNode{int value;//节点值ListNode next;//指向后继节点的引用public ListNode(){}public ListNode(int value){this.valuevalue;}public ListNode(int value,ListNode next){this.valuevalue;this.nextnext;} }package com.ag; import java.ut…

Dockerfile文件中只指定挂载点会发生什么?

当你在VOLUME指令中只指定容器内的路径(挂载点)而不指定宿主机的目录时,Docker会为该挂载点自动生成一个匿名卷。这个匿名卷存储在宿主机的某个位置,但这个具体位置是由Docker自动管理的,用户通常不需要关心这个存储位…

安装unget包 sqlsugar时报错,完整的报错解决

前置 .net6的开发环境 问题 ? 打开unget官网,搜索报错的依赖Oracle.ManagedDataAccess.Core unget官网 通过unget搜索Oracle.ManagedDataAccess.Core查看该依赖的依赖 发现应该是需要的依赖Oracle.ManagedDataAccess.Core(>3.21.100)不支持.net6的环境 解…

类和对象 01【C++】

目录 一、 类的引入1. 类的定义2. 类的访问限定符及封装(1) 访问限定符(2) 封装 3. 类的实例化4. 类对象模型(1) 计算类对象的大小(2) 类对象的存储方式 5. this指针 二、 类的6个默认成员函数1. 构造函数2. 析构函数3. 拷贝构造函数4. 赋值运算符重载5. 取地址重载6. const取地…

蓝桥杯:C++队列、优先队列、链表

C普通队列 算法竞赛中一般用静态数组来模拟队列,或者使用STL queue。使用C的STL queue时,由于不用自己管理队列,因此代码很简洁。队列的部分操作如下。 C优先队列 很多算法需要用到一种特殊的队列:优先队列。它的特点是最优数据…

前端canvas项目实战——简历制作网站(四)——右侧属性栏(线条端点样式)

目录 前言一、效果展示二、实现步骤1. 实现线条和端点的组装模块2. 修复一个fabric自身的bug3. 实现属性栏中的编辑模块4. 把UI操作和画布更新连接起来 三、Show u the code后记 前言 上一篇博文中,我们扩充了线条对象(fabric.Line)的属性列…

构建企业数据安全的根基:深入解析数据安全治理能力评估与实践框架

随着数字化转型深入各行各业,数据安全已成为企业不可或缺的重要议题。在这一背景下,有效的数据安全治理框架成为确保企业数据安全的基石。 一、数据安全治理框架 中国互联网协会于 2021 年发布 T/SC-0011-2021《数据安全治理能力评估方法》&#xff0c…

windows10|音视频剪辑|FFMPEG录屏和网络推流源初步的生成

前言: FFMPEG的功能强大是毋庸置疑的,那么录屏的需求大家在某些时候大家可能是非常需要的,例如,现有的项目需要演示,因此录制一段演示视频;亦或者做内容分发直播的,比如游戏主播,需…

MySQL 学习记录 1

原文:https://blog.iyatt.com/?p12631 1 前言 去年年初报考 3 月的计算机二级(C 语言)【https://blog.iyatt.com/?p9266 】考过了,这次打算报考 3 月的计算机三级(数据库)。数据库这一块,很…

Kubernetes(K8s)的基础概念

K8s的概念 K8S 的全称为 Kubernetes (K12345678S) (简化全称) Kubernetes 是一个可移植、可扩展的开源平台,用于 管理容器化工作负载和服务,有助于声明式配置和自动化。它拥有庞大且快速发展的生态系统。Kubernetes 服务、支持和…

SQL防止注入工具类,可能用于SQL注入的字符有哪些

SQL注入是一种攻击技术,攻击者试图通过在输入中注入恶意的SQL代码来干扰应用程序的数据库查询。为了防止SQL注入,你需要了解可能用于注入的一些常见字符和技术。以下是一些常见的SQL注入字符和技术: 单引号 ​: 攻击者可能会尝试…

【前端工程化面试题】webpack proxy的工作原理,为什么能解决跨域问题

在 webpack 的配置文件 webpack.config.js 中有一个配置项 devServer 里面有一个属性是 proxy,这里面可以配置代理服务器,解决跨域问题,请参考官网。 一般来说 webpack 的代理就是说的开发服务器 webpack-dev-server。 其实不光是 webpack 其…