策略梯度优化之TRPO/PPO/AC/A2C/GRPO

强强化学习基础:强化学习分类,强化学习表示,值函数,策略迭代/值迭代, 主要的强化学习技术(蒙特卡洛学习/时间差分学习,DQN.REINFORCE,策略梯度/PPO/AC/A2C/TRPO)

策略梯度法问题和优化

引用GAE论文的观点,策略梯度法存在的两个方面问题:

  • 样本利用率低,由于样本利用率低需要大量采样;
  • 算法训练不稳定,需要让算法在变化的数据分布中稳定提升;

目前比较常用的四种置信域方法TRPO、ACER、ACKTR、PPO,就是围绕策略梯度法的上述两方面问题进行改进和优化。
在这里插入图片描述
参考:置信域方法总结——TRPO、ACER、ACKTR、PPO

一 置信域策略梯度优化TRPO(Trust Region Policy Optimization)

策略梯度算法即沿着梯度方向迭代更新策略参数 。但是这种算法有一个明显的缺点:
当策略网络沿着策略梯度更新参数,可能由于步长太长,策略突然显著变差,进而影响训练效果。

针对以上问题,考虑在更新时找到一块信任区域(trust region),在这个区域上更新策略时能够得到某种策略性能的安全性保证,这就是信任区域策略优化(trust region policy optimization,TRPO)算法的主要思想。
它通过约束策略更新的步幅,防止策略的剧烈变化,从而提高训练的稳定性和效率。

参考:TRPO论文推导

1.1 重写η(π) ——写成增量式

TRPO有2种变体:
single-path:就是我们用来学习非线性策略π \piπ的model-free算法。
vine:仅仅用于仿真。

这篇论文中开始将RL的目标——期望累计奖励,用符号η(π)表示:
在这里插入图片描述
我们通常用值函数来表示目标:
在这里插入图片描述

TRPO算法的核心就是去考虑如何学习一个策略从而让性能度量J单调不减。那么一个很直观的思想就是将新策略的性能度量
J( π~)拆成前一个时间步旧的性能度量J(θ)加上某个东西G。即J(π ~)=J(π)+G。那么如果每次更新都能保证G非负,就能保证策略的单调性。那么其实这个等式是存在的:
在这里插入图片描述
A 为优势函数,我们在A2C、Dueling-network中都遇到过,满足:
在这里插入图片描述
上述式子还有2个特性,根据《Sutton强化学习》有
在这里插入图片描述

式(1)告诉我们:新旧策略的回报差是存在的,它等于
在这里插入图片描述
显然这个回报差可能正也可能负。
将新旧策略回报差利用“多变量展开”:
在这里插入图片描述
注意:
在这里插入图片描述

1.2 进一步改写 η(π)——显式的写出 s 和 a

在这里插入图片描述
在这里插入图片描述

1.3 第一次近似与证明

在这里插入图片描述

证明1

在这里插入图片描述

证明2

在这里插入图片描述在这里插入图片描述

1.4 策略更新的定量描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3. 优缺点

优点:

  • 更新稳定性高: TRPO 避免了策略更新幅度过大的问题,通过 KL 散度约束实现训练稳定性。
  • 高性能: 在复杂环境中,TRPO 能有效提高策略的收敛速度和最终性能。
  • 适用于高维和连续动作空间: TRPO 能在高维状态和连续动作空间表现良好,适用范围更广。
  • 降低梯度估计的方差: 借助优势函数 A_t,TRPO 能降低策略梯度的高方差问题。

缺点:

  • 实现复杂: TRPO 涉及二阶优化(如共轭梯度法)和线性搜索,代码实现复杂度较高。
  • 计算成本高:每次策略更新需计算 KL 散度、梯度和黑塞矩阵的乘积,共轭梯度法和线性搜索进一步增加计算成本。
  • 不适合大规模环境: 在稀疏奖励或高维离散动作环境中,TRPO 的性能可能受限,且计算开销较大。

TRPO 是一种在策略梯度基础上的改进算法,通过限制策略更新的幅度来提高训练的稳定性。与 DQN 和 Actor-Critic 比较,TRPO 在高维和连续动作空间中表现良好,但计算成本较高,且实现复杂。TRPO 常被用于解决复杂控制任务和需要高稳定性的强化学习问题,是现代深度强化学习算法的重要组成部分。

  • TRPO最吸引人的地方在于策略的单调递增特性。也就是说策略的每一个step的对于值函数的提升是单调的增加的(严谨的说法是保证不减)。有的同学可能就会有疑问,我们之前的RL算法基于策略提升不都是递增的嘛。比如policy-based的算法中使用的策略梯度上升算法:θ ← θ + η ⋅ Δ θ,其中性能度量J(θ),我们一般采用值函数,那么根据梯度上升,我们的值函数应该是递增的,那么问题出在哪了呢?关键在于这个学习率η。由于这个是个超参数,实践中需要我们进行调节,η过大或者过小都会引起策略向着不好的方向发展,
    TRPO也无法做到避免第一种情况——局部最优。但是它可以避免传统RL算法因为η过大导致策略提升失效。对于不同的task,多大的η才是大的学习率呢?因此传统的RL算法就需要不断的调整学习率,总的来说不是个容易的事。但是TRPO可以避免这个情况,从而不用费劲去调节η。因为TRPO保证了策略的每一次更新π → π ∗都使得值函数是单调不减的。
  • TRPO是一种On-policy的随机性策略算法。
  • TRPO属于Policy-based系列算法。
  • TRPO还有一个优点是不需要调节超参数

1.4. 与 DQN、策略梯度、Actor-Critic 的比较

在这里插入图片描述

二 近端策略优化 PPO

2.1 PG的问题

经典的策略梯度(PG)算法,存在两个问题:
一是需要完整序列
二是一次采集的数据,不能够重复使用,学习效率极低还难以收敛

虽然基于策略的方法已经可以比较真实地进行建模,但是容易陷入局部最优。这是因为策略的设计的粒度太粗,缺乏精致的惩罚。

PPO(Proximal Policy Optimization) 是一种用于强化学习的策略优化算法,由 OpenAI 提出。它通过限制策略更新的幅度,确保训练过程的稳定性。

核心思想
PPO 的核心在于限制策略更新的幅度,避免因更新过大导致性能下降。它通过引入“裁剪”机制,控制新旧策略之间的差异

2.2 解决PG的问题–重要性采样–从onpolicy到offpolicy

Important-sampling,重要性采样技术
从分布q(x)中进行抽样的数据来估计f(x), x~p(x)的期望.
在这里插入图片描述
p(x)/q(x)为重要性权重(IW:importance weight)
原有的按照p 采样的均值,就可以采用q 采样的均值来代替

2.3 PPO/TRPO–引入KL

近端策略优化(Proximal Policy Optimization,PPO)通过对目标函数 施加惩罚来解决这个问题。对于每个回合内的每个t,我们都算一下新策略和旧策略的KL散度,这样可以确保搜索参数的区域小,在比回合更小的粒度(iteration粒度)上调整策略。
这样,回合中的坏策略会在t级别受到惩罚(就是立刻受到惩罚),而不是过了一整个回合才受到惩罚。

近端策略优化PPO–KL限制重要性采样的分布
置信域策略梯度优化TRPO–KL约束信任区域

在这里插入图片描述

还有一种ppo2算法,其作用也是为了减少θ,θk之间差别,其中clip的式子就是图中蓝色的线,一直是取蓝色和绿色线的最小值。使得无论是A是偏大还是偏小,都不要使得θ,θk之间差别过大
在这里插入图片描述

这种策略本质是一种Actor-critic(参与者-批评者)模型,也就是有惩罚的参与者模型。很自然的就可以发现,策略就是actor,惩罚项就是critic。

2.4 PPO步骤

  • 采样:使用当前策略与环境交互,收集数据,在语言模型中,可以类比为生成补全(generating completions)。
  • 计算优势值:基于收集的数据计算优势值函数 。
  • 优化目标函数:通过梯度上升优化目标函数 。
  • 更新策略:重复上述步骤,直到策略收敛。

2.5 优势函数

Advantage函数用于衡量在某个状态(State)下,采取某个动作(Action)相对于平均表现的优劣程在这里插入图片描述

作用
Advantage函数用于指导策略更新:
如果A(s,a) > 0 ,说明动作a 比平均表现更好,策略应该更倾向于选择这个动作;
如果 A(s,a) < 0 ,说明动作a比平均表现更差,策略应该减少选择这个动作的概率。
在PPO等算法中,Advantage函数通常通过GAE(Generalized Advantage Estimation)来估计

直观理解
Advantage函数就像一个“评分”,告诉模型某个动作在当前状态下是好还是坏,以及好(或坏)的程度。

2.6 KL penalty

KL Penalty是基于KL散度(Kullback-Leibler Divergence)的一种正则化手段。
KL散度用于衡量两个概率分布之间的差异。
在强化学习中,KL Penalty通常用于限制当前策略 兀和参考策略 兀ref之间的差异。其数学定义为:
在这里插入图片描述
其中: 兀是当前策略(由模型参数 决定)。 兀ref是参考策略(通常是更新前的策略或某个基线策略)。 DKL是KL散度,用于衡量两个策略之间的差异。

KL Penalty用于防止策略更新过大,确保当前策略不会偏离参考策略太远。
这样可以避免训练过程中的不稳定现象(如策略崩溃)。
在PPO等算法中,KL Penalty通常被添加到目标函数中,作为正则化项。直观理解KL Penalty就像一个“约束”,告诉模型在更新策略时不要“步子迈得太大”,以免失去稳定性。

2.7 Advantage和KL Penalty的关系

Advantage 用于指导策略更新,告诉模型哪些动作更好。
KL Penalty 用于约束策略更新,防止策略变化过大。
在PPO等算法中,Advantage和KL Penalty共同作用,既鼓励模型选择更好的动作,又确保更新过程稳定可靠。

假设我们训练一个机器人走迷宫:
Advantage:机器人发现“向右转”比“向左转”更容易找到出口,于是Advantage函数会给“向右转”一个正的值,鼓励策略更倾向于选择“向右转”。
KL Penalty:为了防止策略突然变得只选择“向右转”而忽略其他可能性,KL Penalty会限制策略的变化幅度,确保策略更新是平滑的。

总结
Advantage(优势函数):衡量某个动作比平均表现好多少,用于指导策略更新。
KL Penalty(KL散度惩罚):限制策略更新的幅度,确保训练过程的稳定性。

三 GRPO

GRPO 是一种在线学习算法(online learning algorithm),这意味着它通过使用训练过程中由训练模型自身生成的数据来迭代改进。GRPO 的目标直觉是最大化生成补全(completions)的优势函数(advantage),同时确保模型保持在参考策略(reference policy)附近。

为了理解 GRPO 的工作原理,可以将其分解为四个主要步骤:
生成补全(Generating completions)
计算优势值(Computing the advantage)
估计KL散度(Estimating the KL divergence)
计算损失(Computing the loss)

3.1. 生成补全(Generating completions)

在每一个训练步骤中,我们从提示(prompts)中采样一个批次(batch),并为每个提示生成一组 G个补全(completions)(记为 oi o_i o_i )。

3.2. 计算优势值(Computing the advantage)

对于每一个 G序列,使用奖励模型(reward model)计算其奖励(reward)。
为了与奖励模型的比较性质保持一致——通常奖励模型是基于同一问题的输出之间的比较数据集进行训练的——优势的计算反映了这些相对比较。
其归一化公式如下:A
在这里插入图片描述
这种方法赋予了该方法其名称:群体相对策略优化(Group Relative Policy Optimization, GRPO)
在这里插入图片描述

GRPO通过优化PPO算法,解决了计算优势值时需要同时依赖奖励模型(reward model)和价值模型(value model)的问题,成功移除了value model(价值模型),显著降低了推理时的内存占用和时间开销。Advantage(优势值)的核心价值在于为模型输出提供更精准的评估,不仅衡量答案的绝对质量,还通过相对比较(与其他回答的对比)来更全面地定位其优劣。

3.3. 估计KL散度(Estimating the KL divergence)

在实际算法实现中,直接计算KL散度可能会面临一些挑战:

  • 计算复杂度高:KL散度的定义涉及对两个概率分布的对数比值的期望计算。对于复杂的策略分布,直接计算KL散度可能需要大量的计算资源;
  • 数值稳定性:在实际计算中,直接计算KL散度可能会遇到数值不稳定的问题,尤其是当两个策略的概率分布非常接近时,对数比值可能会趋近于零或无穷大。近似器可以通过引入一些数值稳定性的技巧(如截断或平滑)来避免这些问题;
  • 在线学习:在强化学习中,策略通常需要在每一步或每几步更新一次。如果每次更新都需要精确计算KL散度,可能会导致训练过程变得非常缓慢。近似器可以快速估计KL散度,从而支持在线学习和实时更新。

Schulman et al. (2020) Approximating KL Divergence
提出的近似器可以根据当前策略和参考策略的差异动态调整估计的精度,从而在保证计算效率的同时,尽可能减少估计误差,其定义如下
在这里插入图片描述
这个近似器的核心思想是通过对当前策略和参考策略的概率比值的简单变换来估计KL散度。
具体来说:
在这里插入图片描述
这个近似器的优势在于它只需要计算当前策略和参考策略的概率比值,而不需要直接计算KL散度的积分或期望。因此,它可以在保证一定精度的同时,显著降低计算复杂度。

近似器的直观理解
这个近似器的设计灵感来自于泰勒展开。KL散度可以看作是两个分布之间的某种“距离”,而这个近似器通过一阶或二阶近似来估计这个距离。具体来说:
当兀与兀ref非常接近时,log(兀/兀ref)近似器的值趋近于零,符合KL散度的性质。
当兀与兀ref差异较大时,近似器会给出一个较大的正值,反映出两个分布之间的差异。

3.4. 计算损失(Computing the loss)

这一步的目标是最大化优势,同时确保模型保持在参考策略附近。因此,损失定义如下:
在这里插入图片描述
其中第一项表示缩放后的优势,
第二项通过KL散度惩罚与参考策略的偏离。

在原始论文中,该公式被推广为在每次生成后通过利用裁剪替代目标(clipped surrogate objective)进行多次更新:
在这里插入图片描述
其中 clip(⋅,1−ϵ,1+ϵ) 通过将策略比率限制在 1−ϵ 和 1+ϵ 之间,确保更新不会过度偏离参考策略。

在很多代码实现,比如Huggingface的TRL中,与原始论文一样每次生成只进行一次更新,因此可以将损失简化为第一种形式。

3.5 总结

GRPO通过优化PPO算法,移除了价值模型,降低了计算开销,同时利用群体相对优势函数和KL散度惩罚,确保策略更新既高效又稳定。

想象一下,你是个销售员,这个月业绩10万块,
PPO算法就像个精明的老会计,拿着算盘噼里啪啦一顿算,考虑市场行情、产品类型,最后得出结论:“嗯,这10万还算靠谱,但GAE一算,发现你的优势值还不够高,还得再加把劲啊”
而GRPO呢,就像老板直接搞了个“内卷大赛”,把所有销售员拉到一个群里,每天晒业绩:“你10万,他15万,她20万……”老板还时不时发个红包,刺激大家继续卷。你的10万块在群里瞬间被淹没,老板摇摇头:“你这水平,还得加把劲啊!”
GRPO这招绝了,它把PPO的“算盘”扔了,省了不少计算功夫,直接搞“内卷PK”,用KL散度惩罚来确保大家别躺平。这样一来,策略更新既快又稳,老板再也不用担心有人摸鱼了,毕竟大家都在拼命卷,谁敢松懈?

总结一下:
PPO是“单打独斗看实力”,
GRPO是“内卷大赛拼到死”,
最后GRPO还省了算盘钱,老板笑得合不拢嘴,而我们只能默默加班,继续卷。

GRPO的核心思想是通过组内相对奖励来估计基线(baseline),从而避免使用额外的价值函数模型(critic model)。
传统的PPO算法需要训练一个价值函数来估计优势函数(advantage function),而GRPO通过从同一问题的多个输出中计算平均奖励来替代这一过程,显著减少了内存和计算资源的消耗。
在这里插入图片描述

1. 框架图

首先看一下PPO 与GRPO 的比较图。
在这里插入图片描述

从图上可以看出,GRPO 与PPO 的主要区别有:
GRPO 省略了 value function model.
GRPO reward 计算,改成了一个q 生成多个r, 然后reward 打分。
PPO 优势函数计算时,KL 是包含在GAE内部的。 GRPO 直接挪到了外面,同时修改了计算方法。

2. 算法原理

2.1 PPO 复习

直接上原文,首先是PPO 的目标函数:
在这里插入图片描述
这个比较熟悉,策略概率比与优势函数的乘积。 同时做了clip限制了参数更新范围。
在这里插入图片描述

在这里插入图片描述
公式2 是PPO 中优势函数的计算。 在reward 打分上,加一个per-token 的KL 散度惩罚。
在这里插入图片描述

2.2 GRPO的优化

由于 PPO 中使用的价值函数通常是与策略模型大小相当的另一个模型,因此会带来大量的内存和计算负担。此外,在强化学习(RL)训练期间,价值函数被视为计算优势以减少方差的基线。

然而,在大语言模型(LLM)的背景下,通常只有最后一个 Token 会被奖励模型赋予奖励分数,这可能会使在每个 Token 上都准确的价值函数的训练变得复杂。为了解决这个问题,我们提出了组相对策略优化(GRPO),它无需像 PPO 那样进行额外的价值函数近似,而是使用针对同一问题生成的多个采样输出的平均奖励作为基线。

去除value function , reward 直接对单个q生成的response进行打分,归一化后,作为替代的优势函数。
在这里插入图片描述
在这里插入图片描述

GRPO 利用组相对方式计算优势,与奖励模型的比较性质非常吻合,因为奖励模型通常在同一问题的输出比较数据集上进行训练。
另请注意,GRPO 不是在奖励中添加 KL 惩罚,而是通过直接将训练策略和参考策略之间的 KL 散度添加到损失中进行正则化,从而避免了Ait的计算复杂化。与PPO中使用的 KL 惩罚项不同,我们使用以下无偏估计器估计 KL 散度:将KL散度抑制,移到了优势函数计算的外面。可以见公式4. 为了保证KL散度为正值。在这里插入图片描述

下图是基于group reward 计算优势函数的,归一化公式:
在这里插入图片描述

下面是GRPO 的计算伪代码:
在这里插入图片描述

GRPO的计算流程包括:

  • 采样一组输出并计算每个输出的奖励。
  • 对组内奖励进行归一化处理。
  • 使用归一化后的奖励计算优势函数。
  • 通过最大化目标函数更新策略模型。
  • 迭代训练,逐步优化策略模型。

GRPO通过组内相对奖励估计基线,避免了传统PPO中价值函数的使用,显著减少了训练资源消耗,同时提升了模型在数学推理等复杂任务中的表现。

3. GRPO 计算总结

在这里插入图片描述
在这里插入图片描述
这里的公式缺了一部分,不要在意。可以查看查看原文截图。
在这里插入图片描述

GRPO 的确节约了显存和计算资源。 但是是否真的提升复杂任务能力保留疑问。

4. GRPO对比

4.1 为什么说GRPO中的概率比是重要性采样?

  1. 重要性采样的基本概念:
    重要性采样是一种通过调整样本权重,用旧分布(旧策略)的样本来估计新分布(新策略)期望值的方法。其核心公式为:
    在这里插入图片描述
  2. GRPO中的重要性采样应用:
    在这里插入图片描述
  3. 与经典策略梯度方法的对比:
    传统策略梯度(如提到的Policy Gradient)直接通过蒙特卡洛采样估计梯度,但需要大量新策略的样本。而GRPO通过重要性采样,复用旧策略的样本来估计新策略的改进方向,显著降低了训练成本。

四 REINFORCE++

REINFORCE++ 的一个关键优势是,它比 GRPO 更加稳定,比 PPO 更加高效。

REINFORCE 是强化学习中一种重要且简单的策略梯度方法,旨在通过直接优化策略来最大化期望的累积奖励。该算法采用蒙特卡洛方法,按以下步骤执行:
在这里插入图片描述

4.1 REINFORCE++ 中的关键优化技巧

参考:

为了稳定模型训练,REINFORCE++ 中引入了多个优化技巧:

Token 级别的 KL 惩罚
Token 级别的 KL 惩罚的优势在于,它可以与过程奖励模型(PRM)无缝结合,实现信用分配,只需在奖励 Token 的位置添加 即可。最近,有研究者发现,在 REINFORCE++ 中与 GRPO 一起使用外部 KL 损失也能取得良好效果

小批量更新
小批量更新通过以下方式提高了训练效率和稳定性:将训练数据分成更小的批次,而不是使用整个数据集进行更新。允许每个小批次进行多个参数更新,从而加速收敛并减少内存消耗。引入随机性,帮助避免局部最优解,并提高模型的泛化能力。

奖励归一化与截断
该方法通过以下两种方式解决了奖励信号的波动性问题:奖励归一化:对奖励进行标准化(例如,减去均值并除以标准差),使奖励信号更加平滑,增强训练的稳定性。奖励截断:将奖励值限制在一定范围内,减少极端奖励对模型更新的影响,避免梯度爆炸。

优势归一化
优势归一化有助于管理 REINFORCE++ 中优势函数的方差。该优势函数的估计公式如下:

PPO-Clip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值