强化学习演进:GRPO 从何而来

news2025/2/27 8:13:56

强化学习(Reinforcement Learning, RL)是机器学习的一个分支,其核心是让智能体(Agent)通过与环境(Environment)的交互,学习如何采取最优行动(Action)以最大化长期累积奖励(Reward)。

传统强化学习

基本概念和框架

传统强化学习的基本概念和框架如下:

  • 智能体(Agent):学习和决策的主体,如机器人、游戏 AI 等。
  • 环境(Environment):智能体所处的情境,如游戏规则、物理世界等。
  • 状态(State):环境在某一时刻的具体情况,如棋盘布局、传感器数据。
  • 动作(Action):智能体可执行的操作,如移动、加速等。
  • 奖励(Reward):环境对智能体动作的即时反馈(数值信号),如得分增加、任务失败惩罚。
  • 策略(Policy):智能体的行为准则,即从状态到动作的映射,包括了:
    • 确定性策略:给定状态选择固定动作(如 a = π ( s ) a=\pi(s) a=π(s) )。
    • 随机性策略:按概率分布选择动作(如 π ( a ∣ s ) \pi(a|s) π(as))。
  • 价值函数(Value Function):评估状态或动作的长期价值。
    • 状态价值函数 V ( s ) V(s) V(s):在状态 s s s 下,遵循策略 π \pi π 的预期累积奖励。
    • 动作价值函数 Q ( s , a ) Q(s,a) Q(s,a):在状态 s s s 下执行动作 a a a 后的预期累积奖励。
  • 探索与利用(Exploration vs. Exploitation):
    • 探索:尝试新动作以发现潜在更高奖励。
    • 利用:根据已有知识选择当前最优动作。
    • 平衡两者是强化学习的关键挑战。
  • 马尔可夫决策过程(Markov Decision Process, MDP):MDP 是强化学习的数学模型,用于描述环境的状态转移和奖励机制。MDP 假设未来状态只依赖于当前状态和动作,而与过去状态无关,即假设当前状态包含所有历史信息(马尔可夫性),由五元组 ( S , A , P , R , γ ) (S,A,P,R,\gamma) (S,A,P,R,γ) 描述,其中:
    • S S S:状态集合(或状态空间),表示环境中所有可能的状态。状态 s ∈ S s\in S sS 是环境在某一时刻的具体表现。
    • A A A:动作集合(或动作空间),表示智能体在某一状态下可以采取的所有可能动作。动作 a ∈ A a\in A aA 是智能体的决策输出。
    • P P P:状态转移概率 P ( s ′ ∣ s , a ) P(s^\prime|s,a) P(ss,a),在当前状态 s s s 下执行动作 a a a 后转移到状态 s ′ s^\prime s 的概率。
    • R R R:奖励函数 R ( s , a , s ′ ) R(s,a,s^\prime) R(s,a,s),其中 s s s 当前状态, a a a 是智能体采取的动作, s ′ s^\prime s 是执行动作 a a a 后转移到的下一个状态。奖励函数是一个关键组成部分,它定义了智能体在特定状态下采取某个动作后,环境返回的即时奖励。奖励函数的作用是为智能体提供反馈,帮助其评估动作的好坏,从而学习最优策略。
    • γ \gamma γ:折扣因子,权衡即时与未来奖励,调节未来奖励的重要性,取值范围为 0 ≤ γ ≤ 1 0 \le \gamma \le 1 0γ1 γ \gamma γ 越接近 1,表示越重视未来奖励;越接近 0,表示越重视当前奖励。
  • 贝尔曼方程(Bellman Equation)
    贝尔曼方程是强化学习中的核心方程,用于描述价值函数的递归关系。状态价值函数的贝尔曼方程为:
    V ( s ) = ∑ a π ( a ∣ s ) ∑ s ′ P ( s ′ ∣ s , a ) [ R ( s , a , s ′ ) + γ V ( s ′ ) ] V(s) = \sum_a \pi(a|s) \sum_{s^\prime}P(s^\prime|s,a)[R(s,a,s^\prime)+\gamma V(s^\prime)] V(s)=aπ(as)sP(ss,a)[R(s,a,s)+γV(s)]

简单示意图

强化学习示意图

深度强化学习

顾名思义,即深度学习技术和强化学习技术结合,一方面将深度学习模型嵌入到强化学习框架中,从而能够处理开放域复杂推理(如文本生成、逻辑推理)等无限状态空间的决策问题,另一方面,利用强化学习技术训练深度学习模型,能极大提升模型性能。这一技术的典型应用为2022年底OpenAI发布的大模型ChatGPT,其训练中应用了强化学习技术(RLHF),之后强化学习在大模型的训练中受到了越来越多的关注和重视,目前已经成为了训练大模型的必要技术。

基本概念

对应于传统强化学习,大模型背景下的深度强化学习的一些基本概念如下:

  • 智能体:大模型
  • 环境:开放式环境
  • 状态:各种可能的输入数据
  • 动作:各种可能的输出
  • 奖励:大模型输出的得分(一般与人类偏好对齐)
  • 策略:同智能体,一般也叫策略模型或者Actor,产生何种输出是由大模型本身参数决定的
  • 价值函数:与策略模型同等参数的另一个模型

算法演进

奖励是训练信号的来源,决定了RL的优化方向。因此,对于奖励函数的设置至关重要,不合理的奖励函数会导致各种各样的问题。
这里将强化学习训练过程类比为小学考试场景,从奖励函数的优化看看强化学习算法的发展,类比关系如下:

  • 学生(需要训练的策略模型):通过优化策略(学习)追求高回报(考试成绩)。
  • 教师(奖励模型,RM):评估生成内容质量,提供即时反馈(考试评分)。
  • 家长(Critic):基于 RM 反馈生成长期价值评估(零花钱发放规则),指导策略优化方向。

只使用奖励

假设哥哥和弟弟在同一个小学班级。老师对学生考试评分并给出“绝对分数”。哥哥得分通常为 80 分以上(满分 100 分),而弟弟的得分通常为 30 分左右。然后他们直接把这些分数拿给爸爸,向他要零花钱——这意味着他们的“奖励”只是原始考试成绩。谁的分数更高,谁就能得到更多的零花钱。
咋看起来挺好的,但其实有两个大问题:

  • 不公平:弟弟通过很大的努力成绩从30提高到60,但仍然比不上哥哥的80+,奖励依然比哥哥少,他没有得到应用的奖励,导致弟弟觉得不值得(对应于RL中,模型不往这个方向优化,因为奖励不够)。
  • 不稳定:追求更高的分数可能会导致哥哥采取极端的学习方法(例如,整天死记硬背、熬夜等),而这也会导致哥哥状态不稳定,影响了成绩的稳定性(对应于RL中,模型倾向于选择一些极端的动作,导致奖励波动降到,模型训练不稳定)。

在RL中,如果只是简单地优化最终的奖励,也就是最大化下面的目标函数:
J naive ( θ ) = E q , o ∼ ( d a t a , π θ ) [ r ( o ) ] \mathcal{J}_{\text{naive}}(\theta) = \mathbb{E}_{q,o \sim (data,\pi_\theta)}[r(o)] Jnaive(θ)=Eq,o(data,πθ)[r(o)]
那么就会遇到高方差和部分改进动力不足的问题。也就是说,Actor缺乏与自身当前水平相匹配的基线,从而阻碍了训练效率。

引入评论家Critic

发现到这个问题后,爸爸意识到“这不仅仅关乎绝对的分数,还关乎你相对于现有水平进步了多少”。

于是他决定: 把哥哥的“预计分数线”定为 80 分,把弟弟的定为 40 分。如果考试成绩超过这些分数线,就能得到更多的零花钱;如果没有,得到的零花钱就很少,甚至一分钱都没有。

因此,如果弟弟努力学习,成绩从 30 分跃升至 60 分,那么他就比“预计分数线”高出 20 分,这意味着他将获得丰厚的奖励。与此同时,如果哥哥成绩保持在 80 多分左右,奖励就会较小,所以哥哥不一定会比弟弟得到更多。这种安排鼓励每个人从自己的基线水平开始进步,而不是单纯比较绝对分数。

但是这个分数线不是一成不变的,爸爸需要不断地调整分数线以适应哥哥和弟弟的进步。如果弟弟水平达到了60分,那40分的分数线就不再合理和公平(这又会导致他进步动力不足,也会让哥哥觉得不公平)。同理哥哥的基线分数也需要调整。换句话说,爸爸也需要学习,特别是要了解哥哥和弟弟进步的情况。

在RL中,这个“分数线”被称为价值函数 V ψ ( s ) V_\psi(s) Vψ(s),它充当了基准,训练目标从“单纯的奖励”演变为“比基准表现好多少”,用优势(Advantage)来表达:
A t = r t − V ψ ( s t ) A_t = r_t -V_\psi(s_t) At=rtVψ(st)
对于给定的状态 s t s_t st 和动作 o t o_t ot,如果实际奖励超出了评价者的预期,则意味着该动作的表现优于预期(获得正 A t A_t At,也就是正激励,模型会提高选择该动作的概率)。如果低于预期,则该动作表现不佳( A t A_t At 为负,也就是负激励,模型会降低选择该动作的概率)。最简单的目标函数可以表示为:
J adv ( θ ) = E [ A ( o ) ] ,其中 A ( O ) = r ( o ) − V ψ ( s ) \mathcal{J}_{\text{adv}}(\theta) = \mathbb{E}[A(o)],\text{其中} A(O)=r(o)-V_\psi(s) Jadv(θ)=E[A(o)]其中A(O)=r(o)Vψ(s)
通过减去这条“分数线”,减少训练中的方差(优势相对单纯的奖励更稳定),对超出预期的行为给予更高的梯度信号,对未达到预期的行为进行惩罚。

添加 Clip 和 Min 操作

即使有了“分数线”,也会出现新的问题。例如:如果哥哥在某次考试中突然取得突破,获得 95 分或 100 分,爸爸就会给他巨大的奖励,这会鼓励哥哥在下次考试前采取过于激进的学习模式,使得其成绩可能会在两个极端(95 和 60)之间波动,从而导致巨大的奖励波动。

因此,爸爸决定对哥哥和弟弟每一步更新学习策略的幅度进行限制——他不会因为一次考得好就给与很多的零花钱。如果他给的太多,哥哥可能会陷入极端探索;如果他给的太少,哥哥又没有动力。所以他必须找到一个平衡点。
在强化学习算法 PPO(Proximal Policy Optimization)中,这种平衡是通过“Clip”机制实现的。PPO目标的核心包括:
min ⁡ ( r t ( θ ) A t , clip ( r t ( θ ) , 1 − ε , 1 + ε ) A t ) \min\Bigg(r_t(\theta)A_t, \text{clip}\bigg(r_t(\theta), 1-\varepsilon, 1+\varepsilon\bigg)A_t\Bigg) min(rt(θ)At,clip(rt(θ),1ε,1+ε)At)
其中 r t ( θ ) = π θ ( o t ∣ s t ) π θ old ( o t ∣ s t ) r_t(\theta)=\frac{\pi_\theta(o_t|s_t)}{\pi_{\theta_{\text{old}}}(o_t|s_t)} rt(θ)=πθold(otst)πθ(otst) 表示该动作的新旧策略之间的概率比。如果该比率偏离 1 太远,则会将其限制在 [ 1 − ε , 1 + ε ] [1-\varepsilon,1+\varepsilon] [1ε,1+ε] 范围内,这限制了策略在一次更新中可以移动的程度。

参考模型 Reference Model

即便如此,如果哥哥只关注高分,他可能会采取一些可疑的策略——例如,作弊或恐吓老师让他获得满分。显然,这违反了所有规则。在大模型领域,类似的情况是产生有害或虚构的内容以获取更高的奖励。

因此,爸爸又定了一条规则:“不管怎样,你都不能偏离自己原本诚实的学习方法太多。如果你偏离基准太远,即使你分数很高,我也会取消你的资格,扣留你的零花钱。”

这类似于从学期开始(即在最初的监督微调之后)标记一条“参考线”。你不能偏离原来的策略太远,否则你会面临处罚。
在 PPO 中,这通过针对参考模型(初始策略)添加 KL 惩罚来反映,具体的,在目标函数中会包含下面一项表达式:
− β D K L ( π θ ∣ ∣ π ref ) -\beta\mathbb{D}_{KL}(\pi_\theta||\pi_{\text{ref}}) βDKL(πθ∣∣πref)
这使得 Actor 不会偏离原始的合理策略太远,避免“作弊”或其他严重越界的行为。

GRPO

有一天,爸爸说:“我没时间一直评估你的学习进度,也无暇不断画新的分数线。为什么不先做五组模拟测试,然后取它们的平均分作为你的预期分数呢?如果你在实际考试中超过了平均成绩,说明你比自己的预期要好,所以我会奖励你。否则,你得不到多少。”所有人都可以依靠一套个人的模拟测试,而不是爸爸必须不断调整的外部评价。

到目前为止,我们看到 PPO 依赖于 Actor + Critic + Clip + KL 框架。然而,在大模型场景中,Critic 通常需要与 Actor 一样大才能准确评估状态,这可能是昂贵的,有时也不切实际——特别是如果你最后只有一个最终奖励(比如最终答案质量)。
因此,Group Relative Policy Optimization (GRPO)应运而生。其核心思想是:

  • 没有为Critic提供单独的价值网络
  • 对同一个问题从当前策略中采样多个输出
  • 将这些输出的平均奖励视为基线
  • 任何高于平均水平的输出都会产生“正优势”,任何低于平均水平的输出都会产生“负优势”

同时,GRPO 保留了 PPO 的 Clip 和 KL 机制,以确保稳定、合规的更新。
最终,GRPO的目标是最大化下面的函数:
J G R P O ( θ ) = E [ q ∼ P ( Q ) , { o i } i = 1 G ∼ π θ old ( O ∣ q ) ] 1 G ∑ i = 1 G ( min ⁡ ( π θ ( o i ∣ q ) π θ old ( o i ∣ q ) A i ,  clip ( π θ ( o i ∣ q ) π θ old ( o i ∣ q ) , 1 − ε , 1 + ε ) A i ) − β D KL ( π θ ∥ π ref ) ) , \begin{aligned} \mathcal{J}_{GRPO}(\theta) &= \mathbb{E}\left[ q \sim P(Q), \{ o_i \}_{i=1}^G \sim \pi_{\theta_{\text{old}}} (O|q) \right] \\ &\frac{1}{G} \sum_{i=1}^G \left( \min \left( \frac{\pi_\theta(o_i|q)}{\pi_{\theta_{\text{old}}}(o_i|q)} A_i, \ \text{clip}\left( \frac{\pi_\theta(o_i|q)}{\pi_{\theta_{\text{old}}}(o_i|q)}, 1 - \varepsilon, 1 + \varepsilon \right) A_i \right) - \beta \mathbb{D}_{\text{KL}} (\pi_\theta \parallel \pi_{\text{ref}}) \right), \end{aligned} JGRPO(θ)=E[qP(Q),{oi}i=1Gπθold(Oq)]G1i=1G(min(πθold(oiq)πθ(oiq)Ai, clip(πθold(oiq)πθ(oiq),1ε,1+ε)Ai)βDKL(πθπref)),
其中 A i = r i − mean ( { r 1 , r 2 , ⋯   , r G } ) std ( { r 1 , r 2 , ⋯   , r G } ) A_i = \frac{r_i-\text{mean}(\{r_1, r_2, \cdots, r_G\})}{\text{std}(\{r_1, r_2, \cdots, r_G\})} Ai=std({r1,r2,,rG})rimean({r1,r2,,rG})
通过对同一问题的多个输出的奖励取平均值并进行标准化来计算“相对分数”,这样,就不再需要专门的价值函数,但仍然可以获得动态“分数线”,并简化训练且节省资源。

深度强化学习演进图示

暂时无法在飞书文档外展示此内容

参考

DeepSeek-R1 Dissection: Understanding PPO & GRPO Without Any Prior Reinforcement Learning Knowledge

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

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

相关文章

AOP进阶-02.通知顺序

一.通知顺序 当有多个切面类中的切入点表达式一样时,这些切面类的执行顺序是怎样的呢?如图我们将定义两个切面类,一个MyAspect2,一个MyAspect3,一个MyAspect4。执行后我们发现, 对于目标方法前的通知方法&…

深入探讨K8s资源管理和性能优化

#作者:曹付江 文章目录 前言:1.监控 Kubernetes 集群的资源利用率1.1 Prometheus1.2 Kubernetes 度量服务器1.3 Grafana1.4 自定义指标 2. 识别资源瓶颈2.1. 监控工具2.2. 性能剖析2.3 Kubernetes 事件和日志2.4. 群集自动扩展2.5. 负载测试…

Buildroot 添加自定义模块-内置文件到文件系统

目录 概述实现步骤1. 创建包目录和文件结构2. 配置 Config.in3. 定义 cp_bin_files.mk4. 添加源文件install.shmy.conf 5. 配置与编译 概述 Buildroot 是一个高度可定制和模块化的嵌入式 Linux 构建系统,适用于从简单到复杂的各种嵌入式项目. buildroot的源码中bui…

形式化数学编程在AI医疗中的探索路径分析

一、引言 1.1 研究背景与意义 在数字化时代,形式化数学编程和 AI 形式化医疗作为前沿领域,正逐渐改变着我们的生活和医疗模式。形式化数学编程是一种运用数学逻辑和严格的形式化语言来描述和验证程序的技术,它通过数学的精确性和逻辑性,确保程序的正确性和可靠性。在软件…

HTML——前端基础1

目录 前端概述 前端能做的事情​编辑 两步完成一个网页程序 前端工具的选择与安装 HTML HTML5介绍 HTML5的DOCTYPE声明 HTML基本骨架 文字标签 标题之标签 标签之段落、换行、水平线 标签之图片 标签之超文本链接 标签之文本 列表标签之有序列表 列表标签之无序…

Blueprint —— Events

目录 一,Event Level Reset 二,Event Actor Begin Overlap 三,Event Actor End Overlap 四,Event Hit 五,Event Any Damage 六,Event Point Damage 七,Event Radial Damage 八&#xff…

Java一揽子集合整理

Java 集合框架 List ArrayList,底层Object数组,相关方法add,remove Vector,底层Object数组,线程安全,使用 synchronized 关键字进行同步处理 Stack,继承自Vector,是一个后进先出的…

第二十四:5.2【搭建 pinia 环境】axios 异步调用数据

第一步安装&#xff1a;npm install pinia 第二步&#xff1a;操作src/main.ts 改变里面的值的信息&#xff1a; <div class"count"><h2>当前求和为&#xff1a;{{ sum }}</h2><select v-model.number"n">  // .number 这里是…

HybridCLR+Adressable+Springboot热更

本文章会手把手教大家如何搭建HybridCLRAdressableSpringboot热更。 创作不易&#xff0c;动动发财的小手点个赞。 安装华佗 首先我们按照官网的快速上手指南搭建一个简易的项目&#xff1a; 快速上手 | HybridCLR 注意在热更的代码里添加程序集。把用到的工具放到程序集里…

金融行业专题|某基金公司基于超融合信创平台支持人大金仓数据库的性能评测

随着“自主可控”在 IT 基础设施领域不断深化&#xff0c;数据库的国产化替代也被很多金融机构提上日程。为了保证性能&#xff0c;大部分国产数据库都基于信创架构的裸金属服务器部署。在国产虚拟化/超融合平台上&#xff0c;国产数据库性能表现如何&#xff1f;尤其是搭配信创…

【2025全网最新最全】前端Vue3框架的搭建及工程目录详解

文章目录 安装软件Node.js搭建Vue工程创建Vue工程精简Vue项目文件 Vue工程目录的解读网页标题的设置设置全局样式路由配置 安装软件Node.js 下载地址&#xff1a;https://nodejs.org/zh-cn/ 安装完成后&#xff0c;打开cmd,查看环境是否准备好 node -v npm -vnpm使用之前一定…

R 语言科研绘图第 27 期 --- 密度图-分组

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

QT各种版本下载安装

参考链接&#xff1a; 【Qt】超详细&#xff01;Qt4.8.6和VS2010的配置及使用 由于QT官网一般现在进不去&#xff0c;所以下载一些QT版本只能通过镜像或者以前下载存储的安装包来进行&#xff0c;现在推荐两种方法 从参考链接中搬过来&#xff1a; 方案一&#xff1a;国内镜…

信息系统的安全防护

文章目录 引言**1. 物理安全****2. 网络安全****3. 数据安全****4. 身份认证与访问控制****5. 应用安全****6. 日志与监控****7. 人员与管理制度****8. 其他安全措施****9. 安全防护框架**引言 从技术、管理和人员三个方面综合考虑,构建多层次、多维度的安全防护体系。 信息…

如何解决svn st中出现!(冲突)的问题

在 SVN&#xff08;Subversion&#xff09;中&#xff0c;svn status 命令用于查看工作副本的状态。当你看到 ! 符号时&#xff0c;通常表示文件或目录在工作副本中丢失&#xff08;missing&#xff09;。以下是解决这个问题的步骤&#xff1a; 1. 理解 ! 的含义 ! 表示该文件…

Redis|复制 REPLICA

文章目录 是什么能干嘛怎么玩案例演示复制原理和工作流程复制的缺点 是什么 官网地址&#xff1a;https://redis.io/docs/management/replication/Redis 复制机制用于将数据从一个主节点&#xff08;Master&#xff09;复制到一个或多个从节点&#xff08;Slave&#xff09;&a…

水利 2月26日练习

测量前准备 使用数字万用表的蜂鸣器档&#xff0c;可以高速检验电解电容器的质量好坏。测量方法如图5-14所示。将数字万用表拨至蜂鸣器档&#xff0c;用两支表笔区分与被测电容器Cx的两个引脚接触&#xff0c;应能听到一阵急促的蜂鸣声&#xff0c;随即声响中止&#xff0c;同时…

[Web 安全] PHP 反序列化漏洞 —— PHP 序列化 反序列化

关注这个专栏的其他相关笔记&#xff1a;[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 0x01&#xff1a;PHP 序列化 — Serialize 序列化就是将对象的状态信息转化为可以存储或传输的形式的过程&#xff0c;在 PHP 中&#xff0c;通常使用 serialize() 函数来完成序列化的操作…

汽车免拆诊断案例 | 保时捷车发动机偶发熄火故障 2 例

案例1 2008款保时捷卡宴车行驶中发动机偶发熄火 故障现象  一辆2008款保时捷卡宴车&#xff0c;搭载4.8 L 自然吸气发动机&#xff0c;累计行驶里程约为21万km。车主反映&#xff0c;该车行驶中发动机偶发熄火&#xff1b;重新起动&#xff0c;发动机能够起动着机&#xff…

Python游戏编程之赛车游戏6-2

3.2 move()方法的定义 Player类的move()方法用于玩家控制汽车左右移动&#xff0c;当玩家点击键盘上的左右按键时&#xff0c;汽车会相应地进行左右移动。 move()方法的代码如图7所示。 图7 move()方法的代码 其中&#xff0c;第20行代码通过pygame.key.get_pressed()函数获…