强化学习:策略梯度法

news2024/10/7 7:25:06

策略梯度法的思路

  之前我们是用表格的形式来表达策略,现在我们同样可以用函数来表达策略。之前学的所有的方法都是被称为 value-based,接来下学的叫 policy-based 。接下来我们来看一下 策略梯度法的思路。之前学的的策略全都是用表格来表示的,如下:
在这里插入图片描述
  现在,我们把表格改成函数,那么 π π π 的写法也会发生改变,如下:
在这里插入图片描述
其中, θ θ θ 是一个向量可以用来表示 π π π 这个函数里边的参数。

  用表格与函数表示不同之处还在于获取一个 action 的概率。 表格形式直接通过索引查表,而用函数会稍微麻烦一点,不能直接去索引了,需要计算对应的 π ( a ∣ s , θ ) π(a|s,\theta) π(as,θ)

  用表格与函数表示不同之处还在于更新策略的方式。表格中直接通过修改表格中的值就可以了。当用参数化函数表示时,策略 π π π 只能通过修改参数 θ \theta θ 去更新策略。

.
策略梯度法的思路:
  用函数表示时,我们会建立某些标量的目标函数 J ( θ ) J(\theta) J(θ),通过优化目标函数使得策略 π π π 达到最优,如下:
在这里插入图片描述

标量的目标函数的选取

  上面我们知道要建立一个标量的目标函数,那么这个标量的目标函数是什么呢?通常,我们常用两大类标量的目标函数。

  第一个是状态值平均值,或者简单地称为平均值,其实就是 state value 的一 个加权平均,如下:
在这里插入图片描述
v ˉ \bar v vˉ 是 state value 的加权平均
d ( s ) d(s) d(s) 代表了状态 s s s 被选中的概率

以上的形式我们还可以写成一种更简洁形式,就是两个向量的内积:
在这里插入图片描述
.

  那么,我们怎么去选择 d ( s ) d(s) d(s) 呢?我们分两种情况 ,一是 d d d π π π 没有关系;而是 d d d π π π 有关系。

  当 d d d π π π 没有关系时,我们分别用 d 0 d_0 d0 π ˉ 0 \bar π_0 πˉ0 表示,同样的我们可以采取均匀分布 d 0 ( s ) = 1 / ∣ S ∣ = 1 / n d_0(s)=1/|S|=1/n d0(s)=1/∣S=1/n ,如果某一状态比较重要,那么我们可以将其权重提高。

  当 d d d π π π 有关系时,常用的方法选择平稳分布,如下:
在这里插入图片描述
.
  第二个是即时奖励平均值 ,就是即时奖励的一 个加权平均,如下:
在这里插入图片描述

上面是 reward 的第一种形式,我们经常会看到 reward 的另外一种形式,如下:
在这里插入图片描述
其中,我们假设遵循给定的策略并生成一个轨迹,得到一系列的奖励 ( R t + 1 , R t + 2 , … … ) (R_{t+1},R_{t+2},……) (Rt+1,Rt+2,……) ;在跑了无穷多步之后, s 0 s_0 s0 已经不重要了,所以最后把 s 0 s_0 s0 去掉了
.

  上面我们介绍了两种标量的目标函数的选取方式,接下来我们对这两个标量做进行进一步的总结:
  1、他们都是策略 π π π 的函数
  2、策略 π π π 是一个函数的形式,它的参数是 θ \theta θ ,不同的 θ \theta θ 会得到不同的值
  3、可以通过找到最优的 θ \theta θ 去最大化标量的值
   4、 r ˉ π \bar r_π rˉπ v ˉ π \bar v_π vˉπ 是等价的,对其中一个做优化的时候另外也进行了优化。在折扣系数 γ < 1 γ<1 γ<1 是,有 r ˉ π = ( 1 − γ ) v ˉ π \bar r_π=(1-γ)\bar v_π rˉπ=(1γ)vˉπ

策略梯度求解

   得到一个策略标量后,计算出其梯度。然后,应用基于梯度的方法进行优化,其中,梯度计算是最复杂部分之一。那是因为,首先,我们需要区分不同的 v ˉ π \bar v_π vˉπ r ˉ π \bar r_π rˉπ v ˉ π 0 \bar v_π^0 vˉπ0 ;其次,我们需要区分折扣和未折扣。梯度的计算,这里我们就做比较简要的介绍。

在这里插入图片描述
J ( θ ) J(\theta) J(θ) 可以是 v ˉ π \bar v_π vˉπ r ˉ π \bar r_π rˉπ v ˉ π 0 \bar v_π^0 vˉπ0
η η η 是分布概率或权重
"=” 可以表示严格相等、近似或与成正比

v ˉ π \bar v_π vˉπ r ˉ π \bar r_π rˉπ v ˉ π 0 \bar v_π^0 vˉπ0 相应的梯度公式如下:
在这里插入图片描述
.
梯度公式分析:
   上面的式子我们可以写成如下形式:
在这里插入图片描述

S 服从 η 分布 S服从η分布 S服从η分布 A 服从 π ( A ∣ S , θ ) 分布 A服从π(A|S,\theta)分布 A服从π(AS,θ)分布

为什么我们需要这样一个式子呢?这是因为真实的梯度含有期望 E E E ,而期望 E E E 是不知道的,所以我们可以通过采样来近似来做优化,如下:
在这里插入图片描述

补充说明:
   因为要计算 l n π ( a ∣ s , θ ) lnπ(a|s,\theta) l(as,θ),所以要求 π ( a ∣ s , θ ) > 0 π(a|s,\theta)>0 π(as,θ)>0 ,怎么确保所有的 π π π 对所有的 a a a 全都是大于0呢?使用 softmax function 进行归一化,如下:
在这里插入图片描述

那么, π π π 的表达形式如下:
在这里插入图片描述
h ( s , a , θ ) h(s,a,\theta) h(s,a,θ) 是另一个函数,通常由神经网络得到。

梯度上升和REINFORCE

   梯度上升算法的基本思路是,真实的梯度有期望 E E E ,所以用随机的梯度来代替真实梯度,但还有一个 q π ( s , a ) q_π(s,a) qπ(s,a) 即策略 π π π 所对应的真实的 action value 是不知道的,同样的我们用一个方法来近似或者对 q π q_π qπ 进行采样,方法是与MC结合——reinforce ,如下:

在这里插入图片描述
.
我们是用随机的梯度来代替真实梯度,那么我们怎么对随机变量 ( S , A ) (S,A) (S,A) 采样呢?首先对 S S S 采样,因为 S 服从 η 分布 S服从η分布 S服从η分布 它要求大量的数据,在现实中等难以达到平稳的状态,所以在实际当中一般是不太考虑的。那怎么对 A A A 采样呢?因为 A 服从 π ( A ∣ S , θ ) 分布 A服从π(A|S,\theta)分布 A服从π(AS,θ)分布 ,因此,在 s t s_t st 应该根据策略 π ( θ ) π(\theta) π(θ) a t a_t at 进行取样。所有这里的策略梯度属于 on-policy 算法。
在这里插入图片描述

算法理解
在这里插入图片描述
要求 α β t \alpha\beta_t αβt 较小,可以发现 β t \beta_t βt 能够平衡算法发 探索 和 数据利用。因为 β t \beta_t βt q t ( s t , a t ) q_t(s_t,a_t) qt(st,at) 成正比,因此,当 q t ( s t , a t ) q_t(s_t,a_t) qt(st,at) 较大时 β t \beta_t βt 也会比较大,意味着 π t ( s t , a t ) π_t(s_t,a_t) πt(st,at) 有较大的概率被选择。 β t \beta_t βt π ( a t ∣ s t , θ t ) π(a_t|s_t,\theta_t) π(atst,θt) 成反比,因此,当 β t \beta_t βt 较大时 π ( a t ∣ s t , θ t ) π(a_t|s_t,\theta_t) π(atst,θt) 会比较小,意味着如果之前我选择 π t ( s t , a t ) π_t(s_t,a_t) πt(st,at) 的概率是比较小的,下一时刻给它更大的概率去选择它。

β t > 0 \beta_t>0 βt>0 时,这是 π ( a t ∣ s t , θ ) π(a_t|s_t,θ) π(atst,θ) 梯度上升算法,有:
在这里插入图片描述
β t < 0 \beta_t<0 βt<0 时,这是 π ( a t ∣ s t , θ ) π(a_t|s_t,θ) π(atst,θ) 梯度下降算法,有:
在这里插入图片描述
.

reinforce 算法

   用 q t ( s t , a t ) q_t(s_t,a_t) qt(st,at) 去近似代替 q π ( s t , a t ) q_π(s_t,a_t) qπ(st,at) q t ( s t , a t ) q_t(s_t,a_t) qt(st,at) 是用蒙特卡洛的方法求得,即就是从 ( s t , a t ) (s_t,a_t) (st,at) 出发得到一个 episode ,然后把这个episode 的 return 赋给 q t q_t qt,这种就是 reinforce 算法。
在这里插入图片描述
.
reinforce 算法,其伪代码如下:
在这里插入图片描述
在进行第 k k k 次迭代时,先选定一个初始的 s t a t e state state 根据当前的策略 π ( θ k ) π(\theta _k) π(θk) 和环境进行交互就得到一个 episode ,针对这个episode 当中的每一个元素我们要过一遍。然后对每一个元素进行操作,分为两步。第一步是做 value update,就是用蒙特卡洛的方法去估计 q t q_t qt ,从 ( s t , a t ) (s_t,a_t) (st,at) 出发把后边所得到的所有的 reward 相加。接下来就是 policy update ,将得到的 q t q_t qt 代到公式里去更新 θ t θ_t θt ,最后把最后所得到的 θ T θ_T θT 作为一个新的 θ k θ_k θk 进行迭代更新。

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

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

相关文章

win 安装 C++运行环境 - MinGW

目录 一、下载二、安装四、检查是否安装成功五、参考文章 一、下载 官网地址&#xff1a;https://www.mingw-w64.org/downloads/ 1.1点击【MingW-W64-builds】 1.2点击【Github】 1.3下载 如果下载太慢&#xff0c;可以使用GitHub Proxy 代理加速 (ghproxy.com) 二、安装 …

c++为什么支持函数重载?

前言 在c语言中&#xff0c;函数名是不可以重复的&#xff0c;在同一作用域中函数名称都是唯一的。这也使得我们的函数调用充满了种种麻烦。 而c则支持通过函数重载解决了这个问题 函数重载&#xff1a;是函数的一种特殊情况&#xff0c;C允许在同一作用域中声明几个功能类似的…

如何在Microsoft Excel中移动列的位置

若要在 Excel 中移动列,请使用 shift 键或“插入剪切单元格”。你还可以神奇地更改所有列的顺序。 一、Shift 键 要在不覆盖现有数据的情况下快速移动 Excel 中的列,请按住键盘上的 shift 键。 移动单列: 1、首先,选择一列。 2、将鼠标悬停在所选内容的边界上。此时会出…

建立本地题库

建立试题库文件json 第一步&#xff1a; 按标准格式保存试题到本地,文件名为.json. import json import osimage_path os.path.join(C:\\, Users, 123, PycharmProjects, pythonProject1, test01, imges, jxn_0900.png)# 准备要保存的数据 data [{"id": 1,"…

基于深度学习的高精度动物园动物检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度动物园动物&#xff08;水牛、斑马、大象、水豚、海龟、猫、奶牛、鹿、狗、火烈鸟、长颈鹿、捷豹、袋鼠、狮子、鹦鹉、企鹅、犀牛、羊、老虎&#xff09;检测识别系统可用于日常生活中或野外来检测与定位动物园动物&#xff0c;利用深度学…

【Java可执行命令】(五)打包部署工具 jar:深入解析应用程序打包、分发和部署工具jar ~

Java可执行命令详解之jar 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式&#xff1a;创建jar文件3.1.1 参数&#xff1a;-cf3.1.2 参数&#xff1a;-tf3.1.3 参数&#xff1a;-i3.1.4 参数&#xff1a;-v3.1.5 参数&#xff1a;-e 3.2 运行jar文件 4️⃣ 应用场景5️⃣ 注…

Qt实现电子商城系统

用Qt实现的电子商城系统&#xff1a; 1.功能包括&#xff1a; 1)管理员账户 2)用户管理 3)用户登录 4)商品管理 5)商品出售 6)软件打包 2.商品包括&#xff1a;程序源码、开发教程和程序讲解&#xff1b;也可以根据需求进行功能更改 3.试用链接 链接&#xff1a;https://pan.…

华硕无畏14pro设置指纹登录

正常的流程如下 打开一个文件夹&#xff0c;在左侧找到此电脑&#xff0c;点击右键&#xff0c;找到属性 在搜索框中搜索&#xff1a;设置指纹登录 找到指纹识别&#xff0c;左键点击即可展开&#xff0c;点击&#xff1a;添加手指 点击&#xff1a;开始 输入PIN&#xff08;开…

Oracle Linux 迷途知返

Oracle Linux 6.9 发布了。Oracle 已经宣布发布 Oracle Linux 6 发行版的更新了。 新版本 Oracle Linux 6 Update 9&#xff0c;包括多个已更新的内核&#xff0c;以及两个新的 "Unbreakable Enterprise Kernel" 包和一个 "Red Hat Compatible Kernel" 包…

SAP 后台配置之FM基金管理篇

SAP FM基金管理后台配置及应用 1 二话不说先上后台配置&#xff0c;能跑通为先1.1 基础设置1.1.1 维护财务管理区1.1.2 分配财务管理区1.1.3 激活全局基金管理功能1.1.4 定义全局参数1.1.5 定义编号区间编号并分配1.1.6 创建更改层次变式1.1.3 激活科目分配元素1.1.4 设置允许空…

3 款适合您手机或平板电脑的最佳 Android 和 iOS 修复工具

让我们面对现实&#xff1a;技术不可能总是完美的&#xff0c;您的智能手机也是如此&#xff0c;尽管更容易爱上它。毕竟&#xff0c;它只是一台机器&#xff01; 无论您使用的是 Android 还是 iOS 系统的智能手机或平板电脑&#xff0c;当您第一次带回家时&#xff0c;它都能…

搭建帮助中心需要用到哪些工具

随着企业的发展和客户需求的增加&#xff0c;为了提供更好的客户支持和服务&#xff0c;许多企业决定搭建帮助中心。一个完善的帮助中心可以为客户提供详细的产品信息、常见问题解答和使用指南等&#xff0c;帮助他们快速解决问题并提高客户满意度。在本文中&#xff0c;我们将…

优秀的测试工程师养成记,庸碌四年的点工,“我“要进阶了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 怎么才能成为优秀…

运动耳机哪种戴着舒服、值得推荐的五款运动耳机

在运动中享受最佳声音和舒适感受。这些耳机不仅具备防汗、抗水、稳定舒适的特点&#xff0c;而且还拥有出色的音质和智能功能&#xff0c;帮助你充分释放潜能&#xff0c;突破自我。无论你是专业运动员还是热爱户外活动的人&#xff0c;这些运动耳机将成为你的最佳伙伴&#xf…

Spring AOP 源码探索 之 链式调用中的 ExposeInvocationInterceptor拦截器作用

文章目录 ExposeInvocationInterceptor 示例代码源码分析 extendAdvisorsmakeAdvisorChainAspectJCapableIfNecessary添加扩展拦截器的调用链作用示例总结相关学习路线 JAVA资深架构师成长路线->开源框架解读->Spring框架源码解读 ExposeInvocationInterceptor 从英文名字…

【Linux系列P5】gccg++与【动静态库】的美妙邂逅

前言 大家好吖&#xff0c;欢迎来到 YY 滴 Linux系列 &#xff0c;热烈欢迎&#xff01;本章主要内容面向接触过Linux的老铁&#xff0c;主要内容含 欢迎订阅 YY 滴Linux专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 订阅专栏阅读&#xff1a;YY的《…

exe的python文件打包

【步骤01】 【在命令行中用pip工具安装Pyinstaller模块】 pip install Pyinstaller 步骤02】 【切换命令行的路径到你要打包的Python源文件的文件夹路径下】 【下面是我要打包的Python源文件&#xff08;散点坐标图.py&#xff09;及其文件夹路径】 【步骤03】 【执行Pyi…

js使用replace保留两位小数,正则保留小数位,输入负数和小数正则自动校验

下面是方法,支持保留自定义小数位&#xff0c;这里使用的是截取&#xff0c;没有四舍五入&#xff0c;我的功能需求是只有两位小数的地方可以输入负数&#xff0c;所以只加在了num2的代码块里&#xff0c;如果你们需要所有数字都进行负号校验&#xff0c;可以吧if (isF)判断放在…

百度智驾,与车路协同说「再见」

作者 | 魏启扬 来源 | 洞见新研社 在经历了裁员&#xff0c;全员停发年终奖之后&#xff0c;百度对智能交通事业部&#xff08;ACE&#xff09;的治理还在继续。 不久前&#xff0c;有媒体爆料称&#xff0c;百度已经将智能交通事业部&#xff08;ACE&#xff09;从原来的智能…

smart Java——Netty实战(下):开发一个仿WeChat聊天工具SmartChat

文章目录 〇、代码逻辑一、搭建Server1.引入依赖2.搭建一个简单的Server 二、搭建WebSocket建立连接1.修改Server&#xff0c;增加一些支持2.自定义一个WebSocketHandler 三、功能实现——用户注册上线1.先定义一个工具类Result&#xff0c;用于封装服务端返回消息2.封装客户端…