【ChatGPT 默认强化学习策略】PPO 近端策略优化算法

PPO 近端策略优化算法

    • PPO = 概率比率裁剪 + 演员-评论家算法
      • 演员-评论家算法:多智能体强化学习核心框架
      • 概率比率裁剪:逐步进行变化的方法
        • PPO 目标函数的设计
          • 重要性采样
          • KL散度

 


PPO = 概率比率裁剪 + 演员-评论家算法

论文链接:https://arxiv.org/abs/1707.06347

OpenAI 提出 PPO 旨在解决一些在策略梯度方法中常见的问题,特别是与训练稳定性和样本效率有关的问题。

能在提高学习效率和保持训练稳定性之间找到平衡。

策略梯度方法的问题:

  1. 策略更新过快
    在传统的策略梯度方法中,如果每次更新都大幅度改变策略,可能会导致学习过程变得非常不稳定。
    这种大幅更新可能会使得智能体忘记之前有效的策略,或者探索到低效的行为区域。

  2. 数据利用率低
    许多强化学习算法,特别是那些基于样本的算法,需要大量的数据才能学到有效的策略。
    PPO试图通过更有效地使用数据来缓解这个问题,使得从每个数据样本中学到更多信息。

  3. 训练周期长
    由于数据利用率低,传统的强化学习算法通常需要很长的训练周期才能收敛到一个好的策略。
    PPO通过改进学习算法来减少所需的训练时间。

PPO算法在演员-评论家的框架基础上,使用了 概率比率裁剪 技巧来控制策略更新的幅度,以确保训练的稳定性和性能。

演员-评论家算法:多智能体强化学习核心框架

请猛击:演员-评论家算法:多智能体强化学习核心框架

 


概率比率裁剪:逐步进行变化的方法

想象你有两个不同的蛋糕配方,这个比率就像是告诉你,使用新配方做蛋糕的可能性与旧配方相比有多大的变化。

如果我们的新策略和旧策略差别太大,那就像是突然完全改变蛋糕的配方,可能会做出一个很不一样的蛋糕,我们不确定它会好吃,还是不好吃。

所以,PPO通过计算概率比率来确保新策略不会偏离旧策略太远。

在每次策略更新时,它计算新策略和旧策略之间的比率,并通过限制这个比率的大小来裁剪更新幅度,以防止过大的改变。

解决如何安全地逐步进行变化,控制变化的方法。

具体请见目标函数的设计。

PPO 目标函数的设计


在测试中,PPO 基本在每个任务都是第一梯队。

那我们说一下 PPO 到底做了什么,居然比 A2C (另一种演员-评论家的改进算法)还要好。

近端,主要体现在其目标函数的设计上。

在PPO(近端策略优化)算法中,结合使用重要性采样和KL散度实现了主要的目标。

重要性采样:

  • 探索与利用的平衡:重要性采样帮助算法判断新策略(新动作)与旧策略(旧动作)相比的效果。如果新策略比旧的好,算法会更倾向于采用新策略(这是“利用”)。但同时,算法也会尝试一些不同的策略(这是“探索”),以找到可能更好的解决方案。
  • 渐进式更新:通过重要性采样,PPO能够逐渐、小心地改进策略,而不是一次性做出巨大的改变。这样的逐步改进有助于算法稳定地学习和适应新策略。

KL散度:

  • 防止过度探索:KL散度用于确保新策略不会偏离旧策略太远。这个约束防止了算法在探索新策略时过度激进,从而避免了可能导致性能下降的大幅度策略变动。
  • 维持学习的稳定性:通过限制新旧策略之间的差异,KL散度有助于保持学习过程的稳定性。这种稳定性对于复杂的学习任务特别重要,因为它减少了学习过程中的不确定性和波动。
重要性采样

你正在玩一个跳舞游戏。

在这个游戏里,你有一系列的舞蹈动作可以选择。

刚开始时,你只会一些基础的动作(这是你的“旧策略”)。

现在,你学会了一些新的、酷炫的舞蹈动作(这是你的“新策略”)。

在这个游戏里,你想要知道这些新动作是否真的比旧的好。

但是,你不能一次就完全改变你的舞蹈风格,因为这样你可能会跳得很差。

所以,你需要一种方法来慢慢地、安全地加入新动作。

使用重要性采样,你可以基于旧动作的经验来估计新动作的效果。

比如,如果新动作只是在旧动作的基础上做了一些小改动(比如多举了一下手),你可以推测这个新动作会有类似的效果。

通过比较,你可以决定哪些新动作真的相似,值得加入到你的舞蹈里,同时确保你的整体舞蹈还是很流畅。

不仅链接了新旧动作,还是渐进式更新。

在这个过程中,你不需要每次都完全重新学习动作。

相反,你只是在旧动作的基础上做一些小的调整。

这样,你可以逐渐地、稳步地改进你的动作,而不是一下子完全改变。

KL散度

你的舞蹈老师给了你一个规则:虽然可以尝试新动作,但是不能让你的舞蹈风格变化太大,否则会失去控制,可能跳得一团糟。

KL散度就像是舞蹈老师的一条规则,它告诉你新舞蹈和旧舞蹈之间的差别。

如果差别太大,就意味着你可能偏离了舞蹈的基本风格太远,需要调整一下。

这样,你就可以在尝试新动作的同时,保持你的舞蹈整体风格和质量。

仅仅使用重要性采样可能会导致策略变化过大,特别是在新策略与旧策略差异显著时。

KL散度提供了一种衡量策略之间差异的方法。

通过限制新旧策略之间的KL散度,PPO能够保证学习过程的连续性和平滑性,减少策略更新的剧烈波动。

数学公式:

  • J P P O θ ′ ( θ ) = J θ ′ ( θ ) − β K L ( θ , θ ′ ) ⏟ Regularization = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] − β K L ( θ , θ ′ ) \begin{aligned} J_{\mathrm{PPO}}^{\theta^{\prime}}(\theta)& =J^{\theta^{\prime}}(\theta)-\underbrace{\beta\mathrm{KL}(\theta,\theta^{\prime})}_{\text{Regularization}} \\ &=\mathbb{E}_{(s_t,a_t)\sim\pi_{\theta^{\prime}}}\left[\frac{p_\theta\left(a_t\mid s_t\right)}{p_{\theta^{\prime}}\left(a_t\mid s_t\right)}A^{\theta^{\prime}}\left(s_t,a_t\right)\right]-\beta\mathrm{KL}(\theta,\theta^{\prime}) \end{aligned} JPPOθ(θ)=Jθ(θ)Regularization βKL(θ,θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]βKL(θ,θ)

这个公式是近端策略优化(PPO)算法中的一个重要部分,它包含了重要性采样和KL散度。

  1. 重要性采样

    • 公式的这部分: p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) \frac{p_\theta(a_t | s_t)}{p_{\theta'}(a_t | s_t)} pθ(atst)pθ(atst),表示的是重要性采样比率。
    • 这里, p θ ′ ( a t ∣ s t ) p_{\theta'}(a_t | s_t) pθ(atst) 是旧策略(即上一次更新前的策略)在状态(s_t)下选择动作(a_t)的概率。
    • p θ ( a t ∣ s t ) p_\theta(a_t | s_t) pθ(atst) 是新策略(即当前更新的策略)在相同状态下选择同一动作的概率。
    • 通过这个比率,我们可以量化新旧策略之间在选择特定动作上的差异。
  2. 优势函数 A θ ′ ( s t , a t ) A^{\theta'}(s_t, a_t) Aθ(st,at)

    • 公式中的 A θ ′ ( s t , a t ) A^{\theta'}(s_t, a_t) Aθ(st,at) 是优势函数,它评估在特定状态下采取某个动作相对于平均情况的好坏。
    • 优势函数用于量化一个特定动作比平均情况要好或坏多少。
  3. 期望值 E \mathbb{E} E

    • E ( s t , a t ) ∼ π θ ′ [ … ] \mathbb{E}_{(s_t,a_t)\sim\pi_{\theta'}}[…] E(st,at)πθ[] 表示对于由旧策略 π θ ′ \pi_{\theta'} πθ 生成的状态和动作的期望值。
    • 这意味着我们在计算这个公式时,考虑的是在旧策略下可能发生的所有状态和动作组合。
  4. KL散度

    • 公式中的 K L ( θ , θ ′ ) \mathrm{KL}(\theta, \theta') KL(θ,θ) 代表KL散度,它是一种衡量两个概率分布差异的方法。
    • 在这里,它用来衡量新策略和旧策略之间的差异。
    • β \beta β是一个调节参数,它控制了我们对策略变化的惩罚强度。KL散度越大,意味着新旧策略差异越大。
  5. 整体公式

    • 整个公式的第一部分, E ( s t , a t ) ∼ π θ ′ [ … ] \mathbb{E}_{(s_t,a_t)\sim\pi_{\theta'}}[…] E(st,at)πθ[],计算的是在旧策略下,采用新策略能带来多少优势。
    • 第二部分, − β K L ( θ , θ ′ ) -\beta\mathrm{KL}(\theta, \theta') βKL(θ,θ),则是在控制新策略不要偏离旧策略太远的约束。

所以,这个公式基本上是在做两件事:

  • 一方面,它试图找到一个新策略,使得在旧策略下的表现更好;
  • 另一方面,它确保新策略不会与旧策略差异太大,从而保持学习的稳定性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

12. 整数转罗马数字

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 …

Filezilla使用

服务端 点击安装包 点击我接受 点击下一步 点击下一步 点击下一步 点击安装即可 配置用户组,点击编辑,出现组点击 点击添加,点击确定即可 配置用户,点击编辑点击用户 点击添加,设置用户名&#xff…

打印9*9乘法口诀

一. main函数实现 1.参数n表示乘法口诀表总共有多少行 2.设定两个循环 外层循环控制总共有多少行 内层循环控制每行有多少个表达式以及表达式中的内容 #include<stdio.h> int main() {int n 0;scanf("%d", &n);for (int i 1; i < n; …

丢失VCRUNTIME140_1.dll怎么办,多种dll问题解决方法分享

丢失VCRUNTIME140_1.dll是许多计算机用户经常遇到的问题之一。VCRUNTIME140_1.dll是一个动态链接库文件&#xff0c;它是Visual C Redistributable Package的一部分。Visual C Redistributable Package是微软为了支持运行使用Visual C编写的软件而提供的一个可再发行组件包。当…

Django 学习教程- Hello world入门案例

系列 Django学习教程-介绍与安装 欢迎来到第Djagno学习教程第二章Hello World 入门案例。 在本教程中&#xff0c;我将引导您完成django的Hello World入门案例。 让我们开始吧&#xff01; 版本 Django 5.0Python 3.10 创建项目 安装 Django 之后&#xff0c;您现在应该…

RK3568平台开发系列讲解(Linux系统篇)PWM系统编程

🚀返回专栏总目录 文章目录 一、什么是PWM二、PWM相关节点三、PWM应用编程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 PWM 的系统编程。 一、什么是PWM PWM,即脉冲宽度调制(Pulse Width Modulation)

CSS 纵向底部往上动画

<template><div class"container" mouseenter"startAnimation" mouseleave"stopAnimation"><!-- 旋方块 --><div class"box" :class"{ scale-up-ver-bottom: isAnimating }"><!-- 元素内容 --&g…

线性代数基础知识

计算机视觉一些算法中常会用到线性代数的一些知识&#xff0c;为了便于理解和快速回忆&#xff0c;博主这边对常用的一些知识点做下整理&#xff0c;主要来源于如下这本书籍。 1. 矩阵不仅仅是数字排列而已&#xff0c;不然也不会有那么大精力研究它。其可以表示一种映射 关于…

lenovo联想拯救者8.8英寸掌上游戏机Legion Go 8APU1(83E1)原装出厂Windows11预装系统

链接&#xff1a;https://pan.baidu.com/s/1d586XWXcAWVxlLyV2Oku7Q?pwdd74t 提取码&#xff1a;d74t 系统自带所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件大小&#xff1a;…

Xgboost分类模型的完整示例

往期精彩推荐 数据科学知识库机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归PySpark大数据处理详细教程 定义问题 UCI的蘑菇数据集的主要目的是为了分类任务&#xff0c;特别是区分蘑菇是可食用还是有毒。这个数据集包含了蘑菇的各种特征&#xff0c;如…

vue3基础知识一,安装及使用

一、安装vue3 需要安装node&#xff0c;然后在项目所在目录命令行执行以下代码。 npm create vuelatest 回车后需要配置以下内容。 二、安装所需的依赖包并运行 cd到项目目录&#xff0c;执行以下代码安装依赖包 npm i 运行项目 npm run dev 打开浏览器查看结果 ok&#…

Linux系统安装DockerDocker-Compose

1、Docker安装 下载Docker依赖的组件 yum -y install yum-utils device-mapper-persistent-data lvm2 设置下载Docker服务的镜像源&#xff0c;设置为阿里云 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装Docker服务 …

LTPI协议的理解——4、LTPI链路初始化以及运行

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 LTPI协议的理解——4、LTPI链路初始化以及运行 前言状态图Link TrainingLink DetectLink SpeedLink Training Example Link ConfigurationAdvertiseConfigure & AcceptLi…

Git:常用命令(二)

查看提交历史 1 git log 撤消操作 任何时候&#xff0c;你都有可能需要撤消刚才所做的某些操作。接下来&#xff0c;我们会介绍一些基本的撤消操作相关的命令。请注意&#xff0c;有些操作并不总是可以撤消的&#xff0c;所以请务必谨慎小心&#xff0c;一旦失误&#xff0c…

Django 后台与便签

1. 什么是后台管理 后台管理是网页管理员利用网页的后台程序管理和更新网站上网页的内容。各网站里网页内容更新就是通过网站管理员通过后台管理更新的。 2. 创建超级用户 1. python .\manage.py createsuperuser 2. 输入账号密码等信息 Username (leave blank to use syl…

jsp结合servlet

servlet配置 环境配置2023.12.31 idea配置搭建 创建一个普通的java项目 由于新版idea去除了add framework support的ui显示&#xff0c;可以在左边项目栏中使用快捷键shiftk或者setting中搜索add framework support在修改对应的快捷键 点击ok然后应该就是下面这样的结果 这里…

大数据背景下基于联邦学习的小微企业信用风险评估研究

摘要&#xff1a; 小微企业信用风险评估难是制约其融资和发展的一个主要障碍。基于大数据的小微企业信用风险评估依然面临着单机构数据片面、跨机构数据共享难、模型不稳定等诸多挑战。针对相关问题和挑战&#xff0c;本项目拟在多主体所有权数据隐私保护与安全共享的背景下&am…

AI4Green开源ELN(电子实验记录本)

AI4Green是一个开源的电子实验记录本&#xff0c;官网&#xff1a;https://github.com/AI4Green/ai4green 国内镜像&#xff1a; skywalk163/AI4Green - AI4Green - OpenI - 启智AI开源社区提供普惠算力&#xff01; 论文地址&#xff1a;https://pubs.acs.org/doi/10.1021/…

Python开发环境[PycharmEclipseAnaconda]

Pycharm配置Python开发环境 每种语言的开发工具都有很多&#xff0c;如果写一些小的脚本或者小的工具&#xff0c;建议直接使用命令行或者Python自带的IDLE&#xff0c;如果进行大型的开发工作建议使用Pycharm&#xff0c;当然这属于个人喜好。 虽然Pycharm给了我们一个美观的…

安全加固指南:如何更改 SSH 服务器的默认端口号

在 Linux 系统中修改 SSH 服务的默认端口号是一项重要的安全措施&#xff0c;它可以帮助增强系统的安全性。这个过程相对简单&#xff0c;但必须由具有管理员权限的用户来执行。下面&#xff0c;我将向大家介绍如何安全地更改 SSH 端口的具体步骤。 1 备份 SSH 配置文件 在修改…