PPO(Proximal Policy Optimization)算法介绍

引言

       Proximal Policy Optimization(PPO) 算法,是强化学习领域的一种先进算法,由OpenAI的研究人员在2017年提出。它以其高效性、稳定性和易于实现等优点,广泛应用于各类强化学习任务,尤其是在大规模模型的策略优化中。

一、背景与动机

       在策略优化的强化学习中,目标是找到一个策略,使得在与环境交互时获得的累计奖励最大。早期的策略梯度方法如REINFORCE,虽然概念简单,但在实践中可能出现学习效率低、收敛慢等问题。

       为了解决策略更新过程中可能出现的剧烈变化和不稳定性,研究人员提出了 信赖域策略优化(Trust Region Policy Optimization,TRPO) 算法。TRPO通过限制新旧策略的KL散度,保证每次更新不会偏离过远。但TRPO实现复杂,计算代价高,不易于大规模应用。

       PPO的提出旨在以一种更简单、高效的方式,实现类似于TRPO的效果,避免策略更新过大导致的性能下降,同时保持实现上的简洁性。

二、PPO的核心思想

       PPO的核心思想是在策略更新时,通过修改损失函数,限制新旧策略之间的差异,从而防止策略更新过大导致不稳定性。这种方法被称为“接近策略优化”(Proximal Policy Optimization),因为每次更新都使得新策略仅在“接近”于旧策略的范围内改进。

三、PPO的关键技术细节

3.1 概率比率(Probability Ratio)

       在策略梯度方法中,我们通常需要计算策略的梯度。PPO引入了概率比率来度量新旧策略在某个状态下采取某动作的概率之比:

r t ( θ ) = π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)} rt(θ)=πθold(atst)πθ(atst)

π θ \pi_\theta πθ:参数为 θ \theta θ 的新策略。
π θ old \pi_{\theta_{\text{old}}} πθold:旧策略。

3.2 损失函数设计

       PPO定义了一个新型的剪辑(Clipped)损失函数,以限制策略更新的范围:

L CLIP ( θ ) = E t [ min ⁡ ( r t ( θ ) A ^ t ,  clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) ] L^{\text{CLIP}}(\theta) = \mathbb{E}_t \left[ \min \left( r_t(\theta) \hat{A}_t, \ \text{clip}\left( r_t(\theta), 1 - \epsilon, 1 + \epsilon \right) \hat{A}_t \right) \right] LCLIP(θ)=Et[min(rt(θ)A^t, clip(rt(θ),1ϵ,1+ϵ)A^t)]

  • A ^ t \hat{A}_t A^t:优势函数的估计,表示在状态 s t s_t st 采取动作 a t a_t at 相对于某基准策略的优势。
  • ϵ \epsilon ϵ:一个很小的正数,通常取值如0.1或0.2,用于限制策略更新的幅度。
  • clip ( ⋅ ) \text{clip}(\cdot) clip():剪辑函数,将概率比率 r t ( θ ) r_t(\theta) rt(θ)限制在 [ 1 − ϵ , 1 + ϵ ] [1 - \epsilon, 1 + \epsilon] [1ϵ,1+ϵ] 范围内。

剪辑机制的作用:
       当 r t ( θ ) r_t(\theta) rt(θ) 偏离1的程度超过 ϵ \epsilon ϵ时,损失函数会被剪辑,以避免对策略参数的过度更新。这种机制在增大收敛速度的同时,保证了策略更新的稳定性。

3.3 优化目标

       PPO的优化目标是最大化上述剪辑损失函数,即:

θ new = arg ⁡ max ⁡ θ L CLIP ( θ ) \theta_{\text{new}} = \arg\max_\theta L^{\text{CLIP}}(\theta) θnew=argθmaxLCLIP(θ)

通过梯度上升方法,对策略参数 ( \theta ) 进行迭代更新。

四、PPO的工作流程

  • 1.采集数据: 在当前策略 π θ old \pi_{\theta_{\text{old}}} πθold 下,与环境交互,生成一系列状态、动作、奖励数据。

  • 2.计算优势函数 A ^ t \hat{A}_t A^t 利用时间差分(TD)方法或广义优势估计(GAE)来估计优势函数。

  • 3.计算概率比率 r t ( θ ) r_t(\theta) rt(θ) 根据新旧策略计算概率比率。

  • 4.更新策略参数 θ \theta θ 通过优化剪辑损失函数 L CLIP ( θ ) L^{\text{CLIP}}(\theta) LCLIP(θ),使用梯度上升或优化器(如Adam)更新策略参数。

  • 5.重复迭代: 更新后的策略作为新的旧策略,重复上述过程,直到收敛或达到预定的训练轮数。

五、PPO在RLHF中的应用

       在RLHF中,PPO被用于微调预训练语言模型的策略,使其生成的内容更符合人类偏好。

  1. 策略模型 π θ \pi_\theta πθ
  • 预训练的语言模型,被视为生成文本的策略,其参数为 θ \theta θ
  1. 奖励模型( R )
  • 奖通过人类反馈训练得到的模型,用于评估策略模型生成的文本质量,输出一个奖励值。
  1. 优化过程
  • 生成文本:策略模型根据输入提示生成回复。
  • 计算奖励:奖励模型评估生成的回复,得到奖励值 R ( s t , a t ) R(s_t, a_t) R(st,at)
  • 优势估计:计算优势函数 A ^ t \hat{A}_t A^t,通常基于奖励和价值函数估计。
  • 策略更新:使用PPO算法,优化策略模型的参数 θ \theta θ,最大化预期奖励。
  1. 优势
  • 效率:PPO的高效性使得在大规模模型上进行策略优化成为可能。
  • 稳定性:剪辑机制保证了策略更新的稳定性,避免了生成质量的大幅波动。
  • 可控性:通过奖励模型,结合PPO,可以精细地调控模型生成的行为,使其更符合人类偏好。

六、PPO的优点与局限

优点

  • 易于实现:相比于TRPO等算法,PPO的实现更加简单明了。
  • 高效稳定:在保证策略更新稳定性的同时,保持了较高的样本效率。
  • 适用广泛:适用于离散和连续动作空间的任务。

局限

  • 超参数敏感:需要仔细调节超参数 ϵ \epsilon ϵ 以及学习率等。
  • 样本相关性:需要足够多的样本来估计优势函数,否则可能影响收敛性能。

七、总结

       PPO通过引入剪辑损失函数,有效地限制了策略更新的幅度,兼顾了学习效率和更新稳定性。在RLHF中,PPO作为微调预训练语言模型的关键算法,发挥了重要作用,使得模型能够从人类反馈中高效学习,生成更符合人类期望的内容。

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

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

相关文章

ES8388 —— 带耳机放大器的低功耗立体声音频编解码器(4)

接前一篇文章:ES8388 —— 带耳机放大器的低功耗立体声音频编解码器(3) 二、详细描述 5. 微控制器配置接口 该设备支持标准SPI和2线(I2C)微控制器配置接口。外部微控制器可以通过写入内部配置寄存器来完全配置设备。…

Python实例:爱心代码

前言 在编程的奇妙世界里,代码不仅仅是冰冷的指令集合,它还可以成为表达情感、传递温暖的独特方式。今天,我们将一同探索用 Python 语言绘制爱心的神奇之旅。 爱心,这个象征着爱与温暖的符号,一直以来都在人类的情感世界中占据着特殊的地位。而通过 Python 的强大功能,…

部署stable-diffusion3.5 大模型,文生图

UI 使用推荐的ComfyUI,GitHub 地址,huggingface 需要注册登录,需要下载的文件下面有说明 Dockerfile 文件如下: FROM nvidia/cuda:12.4.0-base-ubuntu22.04 RUN apt-get update && apt-get install python3 pip git --n…

glibc 内存分配与释放机制详解

作者:来自 vivo 互联网存储团队- Wang Yuzhi 本文以一次线上故障为基础介绍了使用 glibc 进行内存管理可能碰到问题,进而对库中内存分配与释放机制进行分析,最后提供了相应问题的解决方案。 一、引言 内存对象的分配与释放一直是后端开发人…

SpringBoot框架在城镇住房保障中的应用

3系统分析 3.1可行性分析 通过对本城镇保障性住房管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本城镇保障性住房管理系统采用SSM框架,JA…

Openlayers高级交互(20/20):超级数据聚合,页面不再混乱

本示例在vue+openlayers中使用cluster生成聚合数据的效果。在OpenLayers中实现点聚合(clustering)是一个常见的需求,特别是在处理大量地理数据点时。聚合可以提高地图的性能并减少视觉上的混乱。 一、示例效果图 专栏名称内容介绍Openlayers基础实战 (72篇)专栏提供73篇文…

内网渗透-信息收集篇

通过webshell或其他方式拿下一台机器,并且存在内网环境,这个时候就在准备进行内网渗透,而在内网渗透之前需要对本地机器进行信息收集,才能够更好的进行内网渗透。 目录 Windows本地基础信息收集 权限查看 判断域存在 查看防火…

诗林工作室(编号:mb0005)分享:HTML模版Paxton,一款自适应响应式图集、博客设计开发模板

这是来自国外一款HTML网页模板,适合Web开发人员做前端站点设计参考使用。全站模版倾向于图集、博客等多行业的平台模版开发。此模版适合各大CMS的主题模版开发参考,如常见的Wordpress主题开发、Z-Blog模板开发、Typecho模板开发、DiscuzX模板开发、Jooml…

SSLHandshakeException错误解决方案

1、错误提示 调用Http工具报如下异常信息: cn.hutool.core.io.IORuntimeException: SSLHandshakeException: Received fatal alert: handshake_failure2、查询问题 一开始我以为是代码bug,网络bug甚至是配置环境未生效,找了一大圈&#xf…

VBA07-方法

一、方法的定义 方法指对象所能执行的动作,它是一个动词。 二、方法的表达方式 三、关于工作簿的方法操作 3-1、新增一个工作簿 示例1: 此时,新增的工作簿的名字是系统默认的。 示例2: 【注意】: 当你尝试将工作簿…

MyBatis3-获取参数值的方式、查询功能及特殊SQL执行

目录 准备工作 获取参数值的方式(重点) 查询功能 查询一个实体类对象 查询一个list集合 查询单个数据 查询一条数据为map集合 查询多条数据为map集合 特殊SQL执行 模糊查询 批量删除 动态设置表名 添加功能获取自增的主键 准备工作 模块My…

构建基于 DCGM-Exporter, Node exporter,PROMETHEUS 和 GRAFANA 构建算力监控系统

目录 引言工具作用概述DCGM-ExporterNode exporterPROMETHEUSGRAFANA小结 部署单容器DCGM-ExporterNode exporterPROMETHEUSGRAFANANode exporterDCGM-Exporter 多容器Node exporterDCGM-ExporterDocker Compose 参考 引言 本文的是适用对象,是希望通过完全基于Doc…

基因组学与个性化健康:精准医疗的未来方向

基因组学(Genomics)是指对基因组,即一个生物体的全部基因和遗传信息进行分析和研究的科学,旨在探索基因在生物体中的功能、相互作用及其对健康和疾病的影响。个性化健康(Personalized Health)则是基于个体的…

阅读个位数?1分钟学会用AI做爆款,轻松涨粉不是梦

从去年开始,AI造就的视觉艺术就在各个平台上疯狂蔓延,人类用AI一年生成的内容,比过往几千年加起来都多。 网络上铺天盖地都是搞AI,但大部分人真的是在搞AI吗?并不尽然,大部分人只是想用AI搞钱。 更多实操…

发现 API 的 5 种方法

在处理目标时,最值得测试的部分是其 API。API 是动态的,它们比应用程序的其他部分更新得更频繁,并且负责许多后端繁重的工作。在现代应用程序中,我们通常会看到 REST API,但也会看到其他形式,例如 GraphQL …

Netty 如何自动探测内存泄露的发生

本文基于 Netty 4.1.112.Final 版本进行讨论 本文是 Netty 内存管理系列的最后一篇文章,在第一篇文章 《聊一聊 Netty 数据搬运工 ByteBuf 体系的设计与实现》 中,笔者以 UnpooledByteBuf 为例,从整个内存管理的外围对 ByteBuf 的整个设计体系…

51单片机教程(六)- LED流水灯

1 项目分析 基于点亮LED灯、LED灯闪烁,扩展到构成最简单、花样流水灯。 2 技术准备 1 流水灯硬件及原理图 流水灯是由多个LED灯组成的 2 C语言知识点 数组 数组声明:长度不可变 数据类型 数组名称[长度n] // 整数型默认为0,小数型默认…

基础算法——排序算法(冒泡排序,选择排序,堆排序,插入排序,希尔排序,归并排序,快速排序,计数排序,桶排序,基数排序,Java排序)

1.概述 比较排序算法 算法最好最坏平均空间稳定思想注意事项冒泡O(n)O( n 2 n^2 n2)O( n 2 n^2 n2)O(1)Y比较最好情况需要额外判断选择O( n 2 n^2 n2)O( n 2 n^2 n2)O( n 2 n^2 n2)O(1)N比较交换次数一般少于冒泡堆O( n l o g n nlogn nlogn)O( n l o g n nlogn nlogn)O( n l…

SpringBoot基础系列学习(四):Thymeleaf模板

文章目录 一丶什么是模板引擎二丶Thymeleaf 介绍三丶使用引入依赖代码html页面响应 一丶什么是模板引擎 模板引擎是一种将数据和模板结合起来生成最终结果的工具,它将一个模板和一个数据对象作为输入,通过模板解析和渲染生成最终的结果。通俗地说&#…

模块化开发 webpack

模块化开发 & webpack 1、模块化开发 & webpack1.1 webpack 执行过程1.1.1 初始化1.1.2 编译1.1.3 输出 2.1 webpack 基础配置2.1.1 Entry2.1.1.1 context2.1.1.2 Entry类型 2.1.2 output2.1.2.1 filename2.1.2.2 publicPath2.1.2.3 path2.1.2.4 libraryTarget 和 libr…