理解策略梯度方法:从REINFORCE到PPO

今年2月的时候,导师突然告诉我Ron William离世了。他算是我导师的 a life time friend,关系很好,我做毕业论文的时候,他还来参与了论文的答辩。Ron是一个很友善的老头,和他在强化学习领域的影响力比起来,本人显得非常的低调,质朴。如果说Ron这个名字你很陌生,那么REINFORCE算法的你一定知道,对的,没错,Ron William就是那个paper的一作。

那之后,我一直就想写点什么,去回顾一下REINFORCE这个算法以及这个算法所开创的策略梯度学习,或是去单纯的纪念一下我和Ron的一面之缘。

引言

在强化学习中,策略梯度方法对于通过优化期望累积奖励直接学习最优策略至关重要。这些方法已经从最基础的REINFORCE算法发展到更复杂的方法,如信赖域策略优化(TRPO)和近端策略优化(PPO)。本文将探讨对数技巧的必要性、将轨迹积分转化为样本估计的方法,以及从REINFORCE到TRPO和PPO的演变过程。

对数技巧和样本估计

策略梯度方法的核心思想是通过优化策略参数来最大化期望奖励。然而,直接计算期望奖励的梯度通常是不可行的。这时对数技巧变得至关重要。通过使用对数技巧,我们可以将期望奖励的梯度表示为涉及策略对数概率梯度的期望:

∇θJ(θ)=Eτ∼πθ[∇θlog⁡πθ(τ)R(τ)]\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} [\nabla_\theta \log \pi_\theta(\tau) R(\tau)]∇θ​J(θ)=Eτ∼πθ​​[∇θ​logπθ​(τ)R(τ)]

其中,πθ\pi_\thetaπθ​ 是由参数 θ\thetaθ 参数化的策略,τ\tauτ 表示轨迹,R(τ)R(\tau)R(τ) 是轨迹的累积奖励。

这一转化将轨迹上的积分转化为样本估计,可以使用蒙特卡罗方法来逼近。通过从策略中采样轨迹,我们可以计算梯度的无偏估计,并相应地更新策略参数。

从REINFORCE到TRPO

REINFORCE的局限性

REINFORCE算法虽然简单直观,但存在一些局限性。由于它依赖于样本估计,策略的更新可能具有较高的方差,导致学习过程不稳定且低效。此外,REINFORCE不能保证更新后的策略质量,因此难以确保每次更新都能改善策略。

TRPO的思想

为了解决这些局限性,信赖域策略优化(TRPO)被引入,它建立在Kakade和Langford(2002)的基础成果之上。这个结果为策略优化中的信赖域方法提供了理论依据,表明两个策略的期望折扣奖励之间的差异可以准确地表示为在新策略上估计但由旧策略计算的期望优势

TRPO的核心思想是通过从旧策略采样来估计这种差异,因为直接计算这种差异是困难的,因为我们不能从新策略采样。TRPO引入了一个代理目标,使用旧策略的样本来估计新策略的性能。这是通过确保更新的策略与先前的策略保持接近,即维持在一个“信赖域”内来实现的。TRPO中的关键优化问题可以表述为:

max⁡θEτ∼πθold[πθ(τ)πθold(τ)R(τ)]\max_\theta \mathbb{E}_{\tau \sim \pi_{\theta_{\text{old}}}} \left[ \frac{\pi_\theta(\tau)}{\pi_{\theta_{\text{old}}}(\tau)} R(\tau) \right]maxθ​Eτ∼πθold​​​[πθold​​(τ)πθ​(τ)​R(τ)] subject to  Eτ∼πθold[DKL(πθold∥πθ)]≤δ\text{subject to} \; \mathbb{E}_{\tau \sim \pi_{\theta_{\text{old}}}} \left[ D_{KL}(\pi_{\theta_{\text{old}}} \| \pi_\theta) \right] \leq \deltasubject toEτ∼πθold​​​[DKL​(πθold​​∥πθ​)]≤δ

这一约束确保策略更新不会显著偏离先前的策略,从而提供更稳定和可靠的学习过程。TRPO的研究结果表明,只要新策略和旧策略足够接近,用在旧策略上计算的期望优势替代在新策略上的计算是可行的

有趣的是,TRPO最初尝试直接用KL惩罚进行优化。然而,这种方法被发现过于严格,导致作者放弃并改用直接优化,这显著增加了算法的复杂性。但是后来,在PPO中,作者发现了更灵活的KL惩罚项,从而又回归到了最初的形式之上。

从TRPO到PPO

用PPO简化TRPO

虽然TRPO为策略优化提供了一个强有力的框架,但它涉及求解一个约束优化问题,这可能在计算上昂贵且复杂。近端策略优化(PPO)通过使用一个裁剪的代理目标来简化这一过程,该目标近似于信赖域约束,而不需要复杂的优化过程:

Eτ∼πθold[min⁡(r(θ)A^,clip(r(θ),1−ϵ,1+ϵ)A^)]\mathbb{E}_{\tau \sim \pi_{\theta_{\text{old}}}} \left[ \min \left( r(\theta) \hat{A}, \text{clip}(r(\theta), 1 - \epsilon, 1 + \epsilon) \hat{A} \right) \right]Eτ∼πθold​​​[min(r(θ)A^,clip(r(θ),1−ϵ,1+ϵ)A^)]

其中,r(θ)=πθ(τ)πθold(τ)r(\theta) = \frac{\pi_\theta(\tau)}{\pi_{\theta_{\text{old}}}(\tau)}r(θ)=πθold​​(τ)πθ​(τ)​ 是概率比率,A^\hat{A}A^ 是优势估计。剪辑函数确保策略的更新不会偏离太多,有效地保持了信赖域的行为。

随机采样和重要性采样

与REINFORCE不同,TRPO和PPO都可以使用随机样本进行更新,而不是整个轨迹。这是通过重要性采样实现的,在这种方法中,使用旧策略的样本来估计当前策略的性能。通过根据概率比率重新加权这些样本,我们可以推导出当前策略梯度的无偏估计。这种新的采样方式也避免了使用对数技巧

实际应用和扩展

在实际中,TRPO和PPO由于其稳健性和效率而被广泛采用。例如,在像ChatGPT这样的大规模模型的训练中,目标通常需要改写为相对于先前策略的期望,以便于重要性采样并应用PPO框架。这种调整允许复杂模型的高效和稳定训练。

结论

从REINFORCE到TRPO和PPO的演变代表了策略梯度方法的重大进步。通过解决REINFORCE中高方差和不稳定的问题,TRPO引入了一种方法来确保策略更新保持在信赖域内,从而基于Kakade和Langford的基础成果提供更可靠的改进。PPO进一步简化了这种方法,使其在实际应用中更易于访问和高效。PPO中灵活的KL惩罚版本展示了策略梯度方法的迭代改进如何导致稳健和高效的算法。这些方法共同构成了现代强化学习的坚实基础,使得开发复杂和有效的策略成为可能。

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

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

相关文章

汽车信息安全--数据安全:图像脱敏

General 随着车联网的发展,汽车越来越智能化,就像是一部“装着四个轮子的手机”。 有人说,智能手机就如同一部窃听器,无论你开机或者关机,它都会无时不刻地监听着用户的一举一动。 可想而知,智能车辆上…

马工程刑法期末复习笔记重点2

马工程刑法期末复习笔记重点2

SpringBoot 参数校验

参数校验 引入springvalidation依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>参数前添加Pattern public Result registry(Pattern(regexp &qu…

Java面向对象练习(2.商品类)(2024.7.4)

商品类 package Supermarket20240704;public class Commodity {private String name;private double price;private int inventory;public Commodity(){};public Commodity(String name, double price, int inventory){this.name name;this.price price;this.inventory inv…

Java核心技术【十九】Iterator与增强for循环

Java中的Iterator与增强for循环 在Java编程中&#xff0c;迭代是处理集合元素的一种常见操作。Java提供了多种迭代集合元素的方式&#xff0c;其中最常用的两种是Iterator和增强for循环&#xff08;也称为“for-each”循环&#xff09;。本文将深入探讨这两种迭代方式的特性和…

CLAM用于弱监督WSI分析

计算病理学&#xff08;computational pathology&#xff09;下的深度学习方法需要手动注释大型 WSI 数据集&#xff0c;并且通常存在领域适应性和可解释性较差的问题。作者报告了一种可解释的弱监督深度学习方法&#xff0c;只需要WSI级标签。将该方法命名为聚类约束注意力多实…

Perl 格式化输出:提升代码可读性的技巧

引言 Perl 是一种功能强大的脚本语言&#xff0c;广泛用于文本处理、系统管理、网络编程等多个领域。在 Perl 编程中&#xff0c;代码的格式化输出不仅有助于提升代码的可读性&#xff0c;还能增强程序的用户体验。本文将详细介绍如何在 Perl 中实现代码的格式化输出。 Perl …

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二十一)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 31 节&#xff09; P31《30.数据持久化-关系型数据库》 上一节中学习了使用用户首选项的方式实现数据持久化&#xff0c;但用户首…

微机原理 选择题

D C MOV、PUSH、POP、XLAT&#xff08;查表&#xff09;、IN、OUT不影响标志位 D B D C D C D B 1. (单选题, 5分)8位无符号数(字节)表示的数值范围是( ), 16位无符号数(字)表示的数值范围是( )。 A. 0~128 0~32768B. 0~255 0~655…

为什么 npm run serve 正常,npm run build 就报错:digital envelope routines::unsupported

这个错误通常与 Node.js 版本和使用的加密算法有关。让我解释一下原因和可能的解决方案&#xff1a; 错误原因 这个错误&#xff08;“error:0308010C:digital envelope routines::unsupported”&#xff09;通常发生在以下情况&#xff1a; 使用较新版本的 Node.js&#xf…

Vscode快捷键崩溃

Vscode快捷键崩溃 Linux虚拟机下使用vscode写代码【ctrlA&#xff0c;CtrlC&#xff0c;CtrlV】等快捷键都不能使用&#xff0c;还会出现“NO text insert“等抽象的指令&#xff0c;问题就是不知道什么时候装了一个VIM插件&#xff0c;让他滚出电脑》》》

监听 web 容器内的网络请求(错误的方案)

需求 iOS 项目中 wkwebview 实现的 web 容器&#xff0c;需要监听 web 容器内的所有网络请求 实现 在 iOS 项目中使用 WKWebView 实现的 Web 容器&#xff0c;监听 Web 容器内的网络请求是一个常见需求。可以通过实现 WKURLSchemeHandler 协议来处理自定义的 URL scheme&#…

通过 API 接口管理 Kafka

文章目录 前言Topic 管理配置管理消费者群组管理查看消费者群组修改消费者群组 为主题添加分区从主题中删除消息首领选举 前言 除了通过命令行和可视化界面对 kafka 进行管理&#xff0c;也可以通过 AdminClient的 API 对 kafka 进行管理。本文将介绍如何通过 AdminClient 进行…

[Vue学习]生命周期及其各阶段举例

当我们运行vue项目&#xff0c;看到了屏幕上显示的界面&#xff0c;看到了界面上显示的数据和标签&#xff0c;之后将这个界面叉掉&#xff0c;这一过程其实经历了一整个vue的生命周期的四个阶段&#xff0c;即创建阶段、挂载阶段、更新阶段以及销毁阶段, 而对于每个阶段的启动…

使用 pyecharts 渲染成图片程序报错: echarts is not defined问题处理

背景 之前写的使用 snapshot_selenium 来保存pyeacharts渲染成的网页截图&#xff0c;可以正常运行。程序搁置了半年&#xff0c;不知道动了电脑哪里&#xff0c;再次运行程序时&#xff0c;程序开始报错&#xff1a;JavascriptException: javascript error: echarts is not d…

【SQL】已解决:SQL分组去重并合并相同数据

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;SQL分组去重并合并相同数据 在数据库操作中&#xff0c;数据的分组、去重以及合并是常见需求。然而&#xff0c;初学者在编写SQL语句时&#xff0c;可能会遇到一…

正弦波与单位圆关系的可视化 包括源码

正弦波与单位圆关系的可视化 包括源码 flyfish 正弦波与单位圆的关系 正弦波可以通过单位圆上的点在直线&#xff08;通常是 y 轴&#xff09;上的投影来表示。具体来说&#xff0c;考虑一个单位圆&#xff0c;其半径为 1&#xff0c;圆心在原点。我们可以通过旋转一个角度 …

每日一道算法题 判断子序列

题目 判断子序列_牛客题霸_牛客网 (nowcoder.com) Python # # 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可 # # # param S string字符串 # param T string字符串 # return bool布尔型 # class Solution:def isSubseq…

【全网最全流程+所有代码】企业微信回调联调,开通企微回调和收到企微回调

流程图: 只是这里的消息回调,仅作为提示,群内有消息了。不是具体的消息,而是类似这样的结构,: 如果需要获取消息,还需要拉取企微群内消息方法,这个后续再更新。 好了,我们开始吧。 开启消息回调和接收消息回调,地址是一样的,只是 开启消息回调,get请求, 接受消…

人工智能在日常生活中的十大应用:从医疗到智能家居

人工智能已成为当今人类日常生活的重要组成部分&#xff0c;无论您是否意识到&#xff0c;它几乎在所有场景中都能提供帮助。每次您进行网络搜索、在线预订旅行、接收来自京东等购物平台的产品推荐又或是打开您的新浪、抖音时&#xff0c;都能看到影子&#xff0c;这些只是一些…