策略梯度简明教程

news2024/11/23 15:05:24

策略梯度方法 (PG:Policy Gradient) 是强化学习 (RL:Reinforcement Learning) 中常用的算法。

1、从库里的本能开始

PG的原理很简单:我们观察,然后行动。人类根据观察采取行动。 引用斯蒂芬·库里的一句话:

你必须依靠这样一个事实:你付出了努力来创造肌肉记忆,然后相信它会发挥作用。你如此多地练习和努力的原因是,在比赛过程中你的直觉会在一定程度上发挥作用。 如果你没有以正确的方式去做,就会感觉很奇怪。

不断的练习是运动员建立肌肉记忆的关键。 对于 PG,我们训练一个基于观察来采取行动的策略。 PG 中的训练使得高奖励的行动更有可能发生,反之亦然。

我们保留有效的,丢弃无效的。

在策略梯度方法中,库里是我们的代理人。

  • 他观察环境的状态。
  • 他根据自己对状态 s 的本能(策略 π)采取行动(u)。
  • 他移动,对手做出反应。 一个新的状态形成了。
  • 他根据观察到的状态采取进一步的行动。
  • 经过 运动轨迹τ 后,他根据收到的总奖励 R(τ) 调整自己的本能。

库里看到了情况并立即知道该怎么做。 多年的训练完善了最大化回报的本能。 在强化学习中,本能可以在数学上描述为:

即在给定状态 s 的情况下采取动作 u 的概率。 π 是强化学习中的策略。 例如,当你看到前面有车时转弯或停车的机会有多大:

2、策略梯度的学习目标

我们如何用数学方式制定我们的目标? 期望得到的奖励等于轨迹的概率×相应奖励之和:

我们的目标是找到策略 θ,使其可以创建轨迹 τ :

而轨迹τ能够最大化预期回报:

3、输入特征和奖励

策略梯度方法的输入(即状态s)可以是手工制作的状态特征(如机械臂关节的角度、速度等),但在某些问题领域,强化学习已经足够成熟,可以直接处理原始图像。 π 可以是一个确定性策略,它输出要采取的确切操作(如向左或向右移动操纵杆),也可以是一个随机策略,它输出它可能采取的行动的可能性。

我们记录每个时间步给出的奖励 r。 在篮球比赛中,除了终止状态为0、1、2或3外,其他状态均为0。

我们再引入一个术语 H,称为地平线。 我们可以无限期地运行模拟过程(h→∞),直到达到终止状态,或者我们对 H 步设置限制。

4、优化问题

首先,让我们回顾一下深度学习和强化学习中常见且重要的技巧,函数 f(x) (R.H.S.) 的偏微分等于 f(x) 乘以 log(f(x)) 的偏微分:

将 f(x) 替换为 π,得到:

另外,对于连续空间,期望可以表示为:

现在,让我们用数学形式形式化我们的优化问题。 我们想要建立一个策略模型,该模型能够产生最大化总回报的轨迹:

然而,要使用梯度下降来优化我们的问题,我们是否需要对奖励函数 r 求导,而该导数可能不可微分或形式化?

让我们将目标函数 J 重写为:

梯度(策略梯度)变成:

好消息! 策略梯度可以表示为期望, 这意味着我们可以使用采样来近似它。 此外,我们对 r 的值进行采样,但不对其进行微分。 这是有道理的,因为奖励并不直接取决于我们如何参数化模型,但轨迹 τ 是。 那么log π(τ) 的偏导数是多少。

π(τ) 定义为:

取对数:

第一项和最后一项不依赖于 θ,可以删除。

所以策略梯度:

变成:

我们使用这个策略梯度来更新策略θ。

5、关于梯度更新的直觉

我们如何理解这些公式?

下划线项是最大对数似然。 在深度学习中,它测量观察到的数据的可能性。 在我们的背景下,它衡量当前策略下轨迹的可能性。 通过将其与奖励相乘,如果轨迹产生高额正奖励,我们希望增加策略的可能性。 相反,如果一个策略导致较高的负面回报,我们希望降低该策略的可能性。 简而言之,保留有效的,丢弃无效的。

如果爬上山意味着更高的奖励,我们将更改模型参数(策略)以增加轨迹向上移动的可能性:

策略梯度有一件重要的事情。 轨迹的概率定义为:

轨迹中的状态密切相关。 在深度学习中,与强相关因子的长序列相乘很容易触发梯度消失或梯度爆炸。 然而,策略梯度只是对梯度进行求和,从而打破了长序列相乘的诅咒。

这使用了一个小技巧:

创建最大对数似然,并且对数打破了长链策略相乘的诅咒。

6、基于蒙特卡洛走子的策略梯度

下面是使用Monte Carlo rollouts来计算奖励的强化学习算法。 即播放整个情节(episode)来计算总奖励:

可以使用许多深度学习软件包轻松计算策略梯度。 例如,这是 TensorFlow 的部分代码:

是的,通常情况下,编码看起来比解释更简单。

7、使用高斯策略进行连续控制

我们如何建立连续控制模型?

假设动作的值是高斯分布的:

该策略是使用高斯分布定义的,其平均值是根据深度网络计算得出的:

以及:

我们可以将 log π 的偏微分计算为:

所以我们可以反向传播:

通过策略网络π来更新策略θ。 该算法看起来与以前完全相同。 只需以稍微不同的方式开始计算策略的对数即可:

8、策略梯度改进

策略梯度存在高方差和低收敛性的问题。

蒙特卡洛播放整个轨迹并记录轨迹的确切奖励。 然而,随机政策可能在不同时期采取不同的行动。 一个小转弯就可以完全改变结果。 所以蒙特卡罗没有偏差(bias),但方差(variance)很高。 方差会损害深度学习优化。 方差为模型学习提供了冲突的下降方向。 一个采样的奖励可能想要增加对数可能性,而另一个采样的奖励可能想要减少它。 这会损害收敛性。 为了减少由动作引起的方差,我们希望减少采样奖励的方差。

增加 PG 中的批大小可以减少方差。

然而,增加批大小会显着降低样本效率。 所以我们不能将其增加太多,我们需要额外的机制来减少方差。

8.1 基线

我们可以在优化问题中减去一项,只要该项与 θ 无关。 因此,我们不使用总奖励,而是用 V(s) 减去它。

我们定义优势函数 A 并根据 A 重写策略梯度:

在深度学习中,我们希望输入特征以零为中心。 直观上,强化学习感兴趣的是了解某个动作是否执行得比平均值更好。 如果奖励总是正数(R>0),PG 总是尝试增加轨迹概率,即使它收到的奖励比其他人少得多。 考虑两种不同的情况:

  • 情况1:轨迹A获得+10奖励,轨迹B获得-10奖励。
  • 情况2:轨迹A获得+10奖励,轨迹B获得+1奖励。

在第一种情况下,PG会增加轨迹A的概率,同时减少B的概率。在第二种情况下,它将增加两者。 作为人类,我们可能会降低这两种情况下轨迹 B 的可能性。

通过引入 V 这样的基线,我们可以重新调整相对于平均动作的奖励。

8.2 普通策略梯度算法

这是使用基线 b 的策略梯度算法的通用算法。

8.3 因果性

未来的行动不应改变过去的决定。 当前的行动只会影响未来。 因此,我们可以改变我们的目标函数来反映这一点:

8.4 奖励折扣

奖励折扣减少了差异,从而减少了远期操作的影响。 这里,使用不同的公式来计算总奖励:

相应的目标函数变为:


原文链接:策略梯度简明教程 - BimAnt

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

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

相关文章

SQL Server 数据库,创建数据库并使用索引查询学员考试成绩

5.1索引 索引提供指针以指向存储在表中指定列的数据值,然后根据指定的次序排列这些指针,再跟随 指针到达包含该值的行。 5.1.1什么是索引 数据库中的索引与书籍中的目录类似。在一本书中,无须阅读整本书,利用目录就可以快速查 找…

如何实现加盐加密

自己实现 传统MD5可通过彩虹表暴力破解, 加盐加密算法是一种常用的密码保护方法,它将一个随机字符串(盐)添加到原始密码中,然后再进行加密处理。 1. 每次调用方法产生一个唯一盐值(UUID )密码…

海关查验到底查些什么,又有哪些注意事项呢?

“海关查验”是什么? 海关查验是指海关在接受报关单位的申报后,依法为确定进出境货物的性质、原产地、货物状况、数量和价值是否与货物申报单上已填报的详细内容相符,对货物进行实际检查的行政执法行为。查验是国家赋予海关的一种依法行政的…

显卡算力总结

2023年12月 显卡天梯图 FP32浮点性能 性能排行榜 | TopCPU.net2023年12月 最新的显卡天梯图和 FP32浮点性能 性能排行榜,包括浮点性能排名、测试得分和规格数据。跑分对比、基准测试比较。 https://www.topcpu.net/cpu-r5 显卡显存(G)浮点算…

电商用户行为可视化分析

1、导包 import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt import pyecharts.options as opts from pyecharts.charts import Line from pyecharts.charts import Grid 2、导数据 t_f_user pd.read_csv("tianchi_fresh…

提高企业邮箱安全性的策略与技巧

提高企业邮箱的安全性的方法大体相同,每家邮箱供应商也可能会有自己独有防护措施。 为了增强Zoho Mail企业邮箱的安全性,您可参考以下建议: 采用强密码:创建包含大写字母、小写字母、数字和特殊字符的复杂密码,并定期…

基于SSM的图书馆管理系统运行部署教程

基于SSM的图书馆管理系统运行部署教程 1、下载2、数据准备-导入sql文件3、项目导入idea4、项目运行5、测试6、日志乱码问题 1、下载 源码下载地址: https://download.csdn.net/download/weixin_44796239/85072348下载之后,会得到一个压缩包: …

Windows驱动中校验数字签名(使用 ci.dll)

1.背景 对于常规应用程序来说,校验数字签名认证在应用层可以使用 WinVerifyTrust, 在驱动层使用常规的 API无法使用,自己分析数据又太麻烦。 在内核中 ci.dll 包装了数据签名验证相关的功能,我们可以使用该 dll 来实现我们的数字签名验证。 详…

2023年度亚太客户中心产业发展论坛——鸿联九五荣获亚太区卓越客服大赛客户运营管理类铂金大奖

11月27-28日, 2023年度亚太客户中心产业发展论坛暨亚太区卓越客服大赛在马来西亚吉隆坡举行。来自中国、澳大利亚、马来西亚、新加坡、中国香港、印度尼西亚和泰国等多个国家及地区的优秀企业代表齐聚吉隆坡。 论坛首日活动以“Experience Excellence, Meet the Cha…

JavaScript代码压缩的功效与作用

JavaScript代码压缩可实现3大功能:减小体积、优化逻辑、提升执行效率 专业的JavaScript代码压缩,绝不仅仅是去除回车使代码挤到一行,而是用真正的技术减小代码体积、提升代码性能。 下面,以JShaman的JavaScript代码压缩功能为例…

辐射校正、辐射定标、大气校正关系

文章目录 前言一、基本概念二、辐射校正三、辐射定标四、大气校正 1.是否需要大气校正2.大气校正模型 五、参考链接 前言 完整的辐射校正包括遥感器校准、大气校正、太阳高度和地形校正。本文主要介绍辐射校正基本概念及区分辐射校正、辐射定标、大气校正。 一、基本概念 DN&a…

Java 将word转为PDF的三种方式和处理在服务器上下载后乱码的格式

我这边是因为业务需要将之前导出的word文档转换为PDF文件,然后页面预览下载这样的情况。之前导出word文档又不是我做的,所以为了不影响业务,只是将最后在输出流时转换成了PDF,当时本地调用没什么问题,一切正常&#xf…

挂耳式蓝牙耳机性价比排行榜吗,排名靠前的几款耳机推荐

当涉及挂耳式蓝牙耳机的选择时,消费者常常陷入选择困境,面对市场上琳琅满目的产品,很难找到性价比兼具的理想之选,为了帮助大家在众多选择中快速定位高性价比的耳机,我们精心整理了一份挂耳式蓝牙耳机性价比排行榜&…

javaWebssh图书系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

系统前景 图书有很多,老的图书书的管理靠纸介质,浪费人力和物力,给图书管理者带来极大的资源浪费。随着计算机信息化的普及,对图书的管理带来本质的改变,图书的销售情况以及,图书管理,以及年终对…

搜不到你想找的资料?那是你还没有掌握这些搜索技巧

文章目录 Google搜索命令sitefiletypeintitleinauthor:define:related:OR:- (减号):.. (两个点):weather:stocks:movie:link: 示例site:filetype:intitle:inauthor:define:related:OR:- (减号):.. (两个点):*** (星号):**cache:info:weather:stocks:movie:link: 补充 Google搜索…

解析操作系统是如何启动起来的?

操作系统被称为“第一个程序”,the first programme,原因很简单,只有当操作系统启动起来后才能运行我们编写的程序,那么你有没有想过这个问题:操作系统是怎样启动起来的呢?实际上这个过程就像发射火箭一样有…

解决vue ssr服务端渲染运行时报错:net::ERR_PROXY_CONNECTION_FAILED

现象: 从代码里找了半天也没有找到问题,但是由于ssr服务端渲染配置本身非常复杂,步骤又繁琐, 而且报错又很多,不知道哪里出了问题。 感觉是header或者cookie丢失造成的,因为据说ssr本身有这样的缺陷&…

NHN和SuiFrens合作的限量版配饰正式发售

SuiFrens那些可爱、富有想象力的生物,即将迎来全新装扮,而你也可以一同享受。今天,限量版NHN x SuiFrens Pebble City幸运配饰系列正式推出,同时还有机会在SuiFrens商店免费领取独家限量版NHN帽子。 NHN x SuiFens Pebble City配饰…

17、pytest自动使用fixture

官方实例 # content of test_autouse_fixture.py import pytestpytest.fixture def first_entry():return "a"pytest.fixture def order():return []pytest.fixture(autouseTrue) def append_first(order, first_entry):return order.append(first_entry)def test_s…

CVE初探之漏洞反弹Shell(CVE-2019-6250)

概述 ZMQ(Zero Message Queue)是一种基于消息队列得多线程网络库,C编写,可以使得Socket编程更加简单高效。 该编号为CVE-2019-6250的远程执行漏洞,主要出现在ZMQ的核心引擎libzmq(4.2.x以及4.3.1之后的4.3.x)定义的ZMTP v2.0协议中。 这一…