强化学习的数学原理-09策略梯度

news/2024/11/13 19:19:21/文章来源:https://www.cnblogs.com/cxy8/p/18542049

目录
  • Basic idea of policy gradient
  • Metrics to define optimal policies
    • average value
    • average reward
  • Gradient of the metrics
  • Gradient-ascent algorithm(REINFORCE)

Basic idea of policy gradient

截至目前,所有的策略policy都是用表格表示的,如下图所示,每个状态对应一行动作。

1731378261773.png

现在由于策略梯度的方法是直接建立一个关于策略的函数,于是就要改变策略的形式。

现在需要引入一个参数\(\theta\),那么策略表示为一个关于参数的函数。

\[\pi(a \mid s,\theta), \quad where \; \theta \in \mathbb{R}^{m} \; is \; a \; parameter \; vector \]

  • 目前这个策略函数最广泛的形式就是神经网络,神经网络的输入是\(state \;\)输出是采用每个动作的概率,参数是\(\theta\)7c4cecf8b9f8bc241fd49cbc6164fa5.jpg
  • 引入函数的优点和之前的\(value \; function \; approximation\)是类似的,一方面是存储上\(function\)能在\(state \; space 、action \;space\)很大的时候节省很多空间,另一方面就是泛化能力会得到提升,主要是在\(storage和generalization\)两方面有较大的优点。

表格形式和函数形式上对于策略的几点区别

  1. 定义最优策略:表格形式最优策略定义是最优策略下的\(state \; value\)大于其他所有策略的,而函数形式下的最优策略引入了一个\(scalar \; metrics\)来衡量什么是最优策略
  2. 获取在s状态下,采取action的概率:表格形式直接查表即可,而函数形式需要通过神经网络进行一次推理得到。
  3. 改变策略:表格形式直接索引然后改变,函数形式通过改变参数\(\theta\)来改变策略

下面就看一下\(policy \; gradient\)最基本的思想

  1. 首先需要一个\(metrics\)或者\(objective \; function\)去定义最优策略\(J(\theta)\)
  2. 有了目标函数之后就可用梯度的算法做优化,去寻找最优策略\(\theta_{t+1}=\theta_{t}+\alpha \nabla_{\theta}J(\theta_t)\)

这就是策略梯度的思想,这个想法是很简单的,但是这其中会存在一些问题。

  1. 怎么选取目标函数
  2. 怎么去计算梯度?

Metrics to define optimal policies

主要有两大类\(metrics\)

average value

第一种:\(average \; state \; value\)或者被叫做\(average \; value\),于是就可以定义\(metrics\)

\[\bar{v_{\pi}}=\sum_{s \in S}d(s)v_{\pi}(s) \]

\(\bar{v_{\pi}}\)是策略的函数,不同策略对应的值不同,所以就可以去优化,找到一个最优的策略让这个值达到最大。

  • \(\bar{v_{\pi}}\)实际上是一个\(state \; value\)的加权平均
  • \(d(s) \ge 0\)是每个状态的权重
  • 因为\(\sum_{s \in S}d(s)=1\),我们可以把\(d(s)\)描述为概率分布。那么刚才的\(metrics\)就可以写成这个形式\(\bar{v_{\pi}}=\mathbb{E}[v_{\pi}(S)],S\)表示随机变量\(S \sim d\)

上面相乘再相加的形式可以写成一种更简洁的形式就是两个向量的内积

\[\bar{v_{\pi}}=\sum_{s \in S}d(s)v_{\pi}(s)=d^Tv_{\pi} \]

\(v_{\pi}=[...,v_{\pi}(s),...]^T\in \mathbb{R}^{\mathbb{S}}\)

\(d=[...,d(s),...]^T\in \mathbb{R}^{\mathbb{S}}\)


上面就结束了第一种\(metric\)总体思想,但是还有问题没有解决就是如何选择\(d\)

\(d\)的选择也有两种情况,一种是\(d\)是独立于\(\pi\)的,另一种就是依赖于\(\pi\)

第一种情况是简单的.

\[\bar{v_{\pi}}=\sum_{s \in S}d(s)v_{\pi}(s)=d^Tv_{\pi} \]

\[\nabla \bar{v_{\pi}} = d^T \nabla v_{\pi} \]

只需要对后面的\(v_{\pi}\)求梯度,为了表明\(d\)\(\pi\)没有关系就把\(d\)写成\(d_0\),\(\bar{v_{\pi}}\)就写成\(\bar{v_{\pi}^0}\)

\(d\)\(\pi\)没有关系那么如何选择\(d\)呢?

  • 最简单的就是把所有的状态认为是\(equally \; important\),所以\(d_0(s)=\frac{1}{|S|}\)
  • 如何我们关注某些特殊的状态,就可以给某些状态较大的\(d\)

第二种情况就是和策略有关系

一种选择\(d\)的方式是选择在\(\pi\)策略下的\(stationary \; distribution\)

然后这个概率可以直接计算出来

\[d^T_{\pi}P_{\pi}=d^T_{\pi} \]

\(P_{\pi}\)是状态转移概率矩阵


average reward

第二种就是\(average \; one-step \; reward\)

\[\bar{v_{\pi}}=\sum_{s \in S}d(s)r_{\pi}(s)=\mathbb{E}[r_{\pi}(S)] \]

\(where \; S \sim d_{\pi}\)

\[r_{\pi}(s)=\sum_{a \in A}\pi(s|a)r(s,a) \]

\[r(s,a)=\mathbb{E}[R|s,a]=\sum_r rp(r|s,a) \]

1731385397757.png

这部分还有一点数学形式待完善...

Gradient of the metrics

计算梯度是\(policy \; gradient \; methods\)最麻烦的部分

首先这里有很多不同的\(metrics(objective \; function) \; \bar{v_{\pi}}、\bar{r_{\pi}}、\bar{v^0_{\pi}}\)

还需要区分\(discounted \; case\)\(undiscounted \; case\)

这里只给出一个总结的情况

\[\nabla_{\theta}J(\theta) = \sum_{s \in S} \eta(s) \sum_{a \in A}\nabla_{\theta}\pi(a|s,\theta)q(s,a) \]

1731395302500.png

1731395385877.png


\[\begin{align}\nabla_{\theta}J(\theta) &= \sum_{s \in S} \eta(s) \sum_{a \in A}\nabla_{\theta}\pi(a|s,\theta)q(s,a) \\ &= \mathbb{E}[\nabla_{\theta} \ln\pi(A|S,\theta)q_{\pi}(S,A)] \end{align} \]

\(where \; S \sim \eta \; and \; A \sim \pi(A|S,\theta)\)

上面这个式子是有用的,因为有期望,所以可以通过采样的方式去近似。这个就是\(stochastic \; gradient \; descent\)的思路。

如何得到上面的等式呢?

\[\nabla_{\theta}\ln \pi(a|s,\theta) = \frac{\nabla_{\theta }\pi(a|s,\theta)}{\pi(a|s,\theta)} \]

上面这个式子实际就是复合函数求导的链式法则

然后把等式右边的分母乘到左边去

\[{\pi(a|s,\theta)}\nabla_{\theta}\ln \pi(a|s,\theta) = {\nabla_{\theta }\pi(a|s,\theta)} \]

把这个式子带入到

\[\begin{align}\nabla_{\theta}J&=\sum_sd(s)\sum_a\nabla_{\theta}\pi(a|s,\theta)q_{\pi}(s,a)\\ &=\sum_sd(s)\sum_a\pi(a|s,\theta) \nabla_{\theta}\ln\pi(a|s,\theta)q_{\pi}(s,a) \\ &=\mathbb{E}_{S \sim d}[\sum_a\pi(a|S,\theta) \nabla_{\theta}\ln\pi(a|S,\theta)q_{\pi}(S,a)] \\ &= \mathbb{E}_{s \sim d, A \sim\pi} [\nabla_{\theta} \ln\pi(A|S,\theta)q_{\pi}(S,A)] \\ &= \mathbb{E} [\nabla_{\theta} \ln\pi(A|S,\theta)q_{\pi}(S,A)]\end{align} \]

分析一下上面的一些点

因为需要计算\(\ln\pi(a|s,\theta)\),所以必须确保对于所有\(s,a,\theta\)

\[\pi(a|s,\theta) \mathbb{>} 0 \]

但是之前我们的\(gready \; policy\)和其他的\(demestic \; policy\)出现过\(\pi(a|s,\theta) \mathbb{=} 0\)的一些情况如何去避免的,这里可以使用\(softmax\)这个\(function\)去解决。

\(softmax \; function\)这个函数主要做的内容就是去归一化去把一个\((-\infty, +\infty)\)映射到\((0,1)\)

1731397121259.png

因为\(\pi(a|s,\theta) \mathbb{>} 0\)所以这个策略是\(stochastic\)\(exploratory\)

Gradient-ascent algorithm(REINFORCE)

\[\begin{align*} \theta_{t+1}&=\theta_t + \alpha \nabla_{\theta} J(\theta)\\ &= \theta_t + \alpha \mathbb{E}[\nabla_{\theta} \ln \pi(A|S, \theta_t)q_{\pi}(S,A)]\end{align*} \]

这个公式是没有办法应用的,因为公式中有期望,所以需要通过随机的梯度来代替真实梯度。

\[\begin{align*} \theta_{t+1}&=\theta_t+\alpha \nabla_{\theta} \ln\pi(a_t|s_t,\theta_t)q_{\pi}(s_t,a_t) \end{align*} \]

但是上面的式子仍然是无法应用的,因为上面的式子里面涉及了\(q_{\pi}(s_t,a_t)\)是真实的\(action \; value\)

为了解决上面的问题,这里是对这个\(q\)进行采样,用\(q_t(s_t,a_t)\)来代替

关于怎么采样于是又有两种方法。

  • 一种是\(Monte-Carlo \; based\),被称为\(REINFORCE\)
  • 还有就是其他算法,比如\(TD\),这就和后面\(Actor-Critic\)有关了

上面就是梯度上升算法,下面是一些关于其中细节的实操

\[\mathbb{E}_{S \sim d, A \sim \pi}[\nabla_{\theta} \ln \pi(A|S, \theta_t)q_{\pi}(S,A)] \rightarrow \nabla_{\theta} \ln\pi(a|s,\theta_t)q_{\pi}(s,a) \]

如何\(sample \; S\)

  • \(S \sim d\)\(d\)在按策略\(\pi\)下长期运行后得到的一个稳定的状态

如何\(sample \; A\)

  • \(A \sim \pi(A|S,\theta)\)因此\(a_t \; should \; be \; sampled \; following \; \pi(\theta_t) \; at \; s_t\)
  • 所以\(PG\)\(on-policy\)

如何从另一个角度去理解这个算法

因为

\[\nabla_{\theta}\ln\pi(a_t|s_t,\theta_t)=\frac{\nabla_{\theta}\pi(a_t|s_t,\theta_{t})}{\pi(a_t|s_t,\theta_{t})} \]

因此上面的梯度上升算法可以重写为

\[\begin{align} \theta_{t+1} &= \theta_t + \alpha \nabla_{\theta}\ln_{\pi}(a_t|s_t,\theta_t)q_t(s_t,a_t) \\ &= \theta_t + \alpha (\frac{q_t(s_t, a_t)}{\pi(a_t|s_t,\theta_t)}) \nabla_{\theta}\pi(a_t|s_t,\theta_t)\end{align} \]

然后可以把$ \beta_t = (\frac{q_t(s_t, a_t)}{\pi(a_t|s_t,\theta_t)}) $

于是上面的式子就可以化为

\[\theta_{t+1} = \theta_t + \alpha \beta_t \nabla_{\theta} \pi(a_t|s_t,\theta_t) \]

上面这个式子是在优化\(\pi(a_t,s_t)\)的值通过改变\(\theta\)

1731393875552.png


\[\begin{align} \theta_{t+1} &= \theta_t + \alpha \nabla_{\theta}\ln_{\pi}(a_t|s_t,\theta_t)q_{\pi}(s_t,a_t) \\ \end{align} \]

\(q\)通过采样的方法去替代真实的值

\[\begin{align} \theta_{t+1} &= \theta_t + \alpha \nabla_{\theta}\ln_{\pi}(a_t|s_t,\theta_t)q_t(s_t,a_t) \\ \end{align} \]

如何\(q_{\pi}(s_t,a_t)\)是通过蒙特卡洛方法得到的就把这个算法叫做\(REINFORCE\)


\(REINFORCE\)的伪代码

16c38323294a8f5d10168501dcbf466.png

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

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

相关文章

1. 初始认识 Spring Cloud

1. 初始认识 Spring Cloud @目录1. 初始认识 Spring Cloud前言2. Spring Cloud 基本介绍3. 系统架构的演变过程3.1 单机架构3.2 动静分离架构:静态缓存 + 文件存储3.3 分布式架构:业务拆分 + 负载均衡3.4 微服务架构:使用 Spring Cloud4. Spring Cloud 全面说明4.1 Spring C…

请问有哪些好用的项目管理工具?做个项目经理需要哪些能力?

常用的项目管理工具: 项目管理工具种类繁多,适用于不同规模和类型的项目。以下是一些常见且功能强大的项目管理工具: 1. Trello特点:看板式任务管理工具,简单易用,适合小型项目或团队。任务通过卡片和列表进行管理,可以灵活拖动和更新进度。 适用场景:适合小团队、创业…

大家做项目管理时都用的什么工具?

在项目管理中,常用的工具涵盖了从任务分配、团队协作、资源管理、时间追踪到进度跟踪等各个方面。下面我将介绍一些项目经理和团队常用的工具,按功能类别进行分类: 1. 任务管理和项目进度跟踪 这些工具帮助团队规划任务、设置优先级,并跟踪任务进度。Trello:基于看板的工具…

IDEA -去除 mapper.xml 中的 SQL 语句黄色下划线

问题描述 当我们使用idea开发java项目时,经常会与数据库打交道,一般在使用mybatis的时候需要写一大堆的mapper.xml以及SQL语句,每当写完SQL语句的时候总是有黄色下划线,看着很不舒服。 解决方案: setting---Editor----Inspections-----SQL 打开后找到图中的两个配置项,去…

项目管理有哪些常用的方法和工具?

在项目管理中,有许多方法和工具可以帮助项目经理有效地规划、执行和控制项目,确保项目按时、按预算和按质量标准完成。以下是一些常用的项目管理方法和工具: 1. 项目管理方法 1.1 瀑布法 (Waterfall)概述:瀑布法是一种传统的项目管理方法,它遵循线性、顺序的流程,每个阶段…

解决goland 导入项目后import里的包报红问题

1.Goland--->Preferences...--->Go--->GOPATH--->Project GOPATH下添加命令行go env下的GOPATH值,自行修改自己的Project GOPATH2.正常情况下我们不需要自己去处理外部包的代理,但是也有可能就是你不经意之间做了修改,这边也是通过setting进行配置:补充:GOLAN…

记录---前端Vue使用ffmpeg压缩视频再上传

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣保姆级操作步骤,从我实际运行中的项目中摘取的所有相关代码展示如下:1.Vue项目中安装插件ffmpeg 1.1 插件版本依赖配置 两个插件的版本 "@ffmpeg/core": "^0.10.0", "@ffmpeg/ffmpeg": &…

静电纺丝机PLC采集监控系统 —— 智能化生产利器

在现代化的工业生产中,数据采集与监控是提高效率、确保质量的关键。上海数采物联网科技有限公司凭借其在工业物联网数据采集领域的深厚底蕴,隆重推出静电纺丝机PLC采集监控系统,为纺织行业的智能化升级提供了强大动力。 一、产品优势高效数据采集:系统采用先进的PLC技术,…

工作任务管理有好用的工具推荐吗?

市场上有很多好用的工作任务管理工具,可以帮助提高个人和团队的生产力。不同的工具适用于不同的工作需求,比如任务跟踪、团队协作、项目管理等。以下是一些比较受欢迎的工作任务管理工具,供你参考: 1. 禅道 (ZenTao)特点:禅道是一款基于 Web 的项目管理工具,支持需求、任…

小白必看:2024年项目经理常犯的错误有哪些?

作为一名项目经理,无论是刚入职的新人还是经验丰富的老手,在项目管理过程中都可能遇到各种挑战。特别是对于新手来说,某些常见的错误可能会影响项目的顺利推进。以下是2024年项目经理常犯的一些错误以及如何避免这些错误的建议,帮助你在项目管理过程中更高效、专业。 1. 缺…

Nuxt.js 应用中的 vite:extendConfig 事件钩子详解

title: Nuxt.js 应用中的 vite:extendConfig 事件钩子详解 date: 2024/11/12 updated: 2024/11/12 author: cmdragon excerpt: vite:extendConfig 钩子允许开发者在 Vite 项目中扩展默认配置。这使得开发者可以根据特定需求自定义 Vite 的构建和开发行为,增强开发体验。 cate…