强化学习:TRPO,PPO,GRPO算法(一文深度解析deepseek中的强化学习算法)——手把手教你入门强化学习(九)

前言

在上期我们介绍了策略梯度(PG算法),这期我们将继续深入PG算法,从TRPO、PPO,到最后最近大火的deepseek中的强化学习算法GRPO。

前期回顾


强化学习:基础知识篇(包含Gym库的简单实践)——手把手教你入门强化学习(一)
强化学习:Markov决策过程(MDP)——手把手教你入门强化学习(二)
强化学习:实践理解Markov决策过程(MDP)——手把手教你入门强化学习(三)
强化学习:动态规划求解最优状态价值函数——手把手教你入门强化学习(四)
强化学习:蒙特卡罗求解最优状态价值函数——手把手教你入门强化学习(五)
强化学习:时间差分(TD)(SARSA算法和Q-Learning算法)——手把手教你入门强化学习(六)
强化学习:一文通透DQN算法及其变种(你要的深度强化学习算法)——手把手教你入门强化学习(七)
强化学习:策略梯度算法(PG算法族)——手把手教你入门强化学习(八)

一、理论基础

KL散度

在学习之前,首先我们需要先了解一下KL散度,KL 散度是信息论中的概念,它是用来两个概率分布差异的指标。我们先看一下公式:
在这里插入图片描述

  • 若P和Q一致,则KL散度为0
  • 若P和Q差异越大,则KL散度越高。
    一般在强化学习中,我们比它用于新旧策略 π o l d \pi_{old} πold π n e w \pi_{new} πnew的差异度量,防止策略突变。

KL惩罚

KL惩罚则是将KL散度作为正则项加入到目标函数中,控制策略更新的幅度。在强化学习中,我们会将KL散度作为正则项加入优化目标,限制策略更新幅度。类似这样,加在目标函数中。
在这里插入图片描述
β \beta β:权衡策略性能与保守性的系数。
很好理解,当差异越大时,目标函数就会变小,防止因策略变换太大,目标函数急剧增大。

自然梯度

这里我就不详细展开了,简单说一下,自然梯度通过引入概率分布的几何结构,修正普通梯度的方向,使其更符合策略分布的“真实”变化,核心思想是用KL散度衡量策略分布的差异,并基于此重新定义梯度方向。主要解决了传统梯度更新方向不匹配,步长难以控制两个问题,因为在传统梯度下降中,参数的更新方向由损失函数的梯度决定,参数空间是欧氏空间(即参数变化对策略的影响是均匀的)。然而,在强化学习中,策略是一个概率分布 π θ ( a ∣ s ) \pi_{\theta}(a|s) πθ(as),参数空间与策略分布空间的几何结构并不一致。
简单来说,我们用自然梯度在更新策略函数的时候,能更符合策略分布的“真实”变化。
公式如下:
在这里插入图片描述
∇ θ L ( θ ) \nabla_{\theta}L(\theta) θL(θ)是普通梯度
F 是Fisher信息矩阵,反映策略分布的局部曲率。
在这里插入图片描述
Fisher矩阵度量了策略分布 π θ \pi_{\theta} πθ对参数 θ \theta θ 变化的敏感度。

  • 若某参数方向导致策略分布剧烈变化,Fisher矩阵在该方向上的值较大。
  • 若某参数方向对策略分布影响微弱,Fisher矩阵在该方向上的值较小。

二、TRPO算法

 在了解了KL散度,KL惩罚,自然梯度之后,我们来学习TRPO算法,TRPO是英文单词Trust Region Policy Optimization的简称,翻译成中文是“置信域策略优化”​。它的主要思想就是,如果策略更新,那它必须在以旧策略为中心的“信任域”内(KL散度 ≤ δ),就是新策略更新要有个范围。我们可以看一下它的数学形式。我们希望最大化优势函数,并且新策略的性能不比旧策略差。
不过在推导数学公式之前,我们需要先了解一下重要性采样系数
在这里插入图片描述
通过重要性采样系数,将旧策略的数据分布 “校正” 为新策略的分布。例如,旧策略选动作 A 的概率是 0.2,新策略选 A 的概率是 0.4,重要性采样系数 2 表示新策略对该动作的 “重视程度” 是旧策略的 2 倍,通过放大旧数据中该动作的优势,近似新策略的期望。
若新策略多执行优势为正的动作,少执行优势为负的动作,整体回报就会提升。因此,最大化优势函数的期望,本质是引导策略向 “高价值动作” 倾斜。
我们再看一下在旧策略下优势函数:
在这里插入图片描述
在旧策略 a π ( θ k ) ( S , A ) a_{\pi(\theta_{k})}(S,A) aπ(θk)(S,A)收集的状态 - 动作对中,某个动作 A 在状态 S 下,相较于 “平均表现” 的额外收益。

在这里插入图片描述
但是,自然梯度算法并没有直接求解这个问题,而是求解了一个近似的问题。因为如果用自然梯度算法求解的话,在高维或非线性策略空间中,KL散度的局部形状可能非二次,导致自然梯度方向不准确,同时近似可能也不是最优,甚至变差。为了解决这一个问题,我们先需要采用共轭梯度法求解自然梯度,我们看最终迭代式扩展为:
在这里插入图片描述
信任域策略优化算法则用以下方法确定j的值:j从非负整数到0,1,2,…中依次寻找首个满足期望KL散度约束并且能提升代理梯度的值。
对此,我们看一下TRPO如何进行求解的。
(1) 初始化参数:θ←任意值(策略参数),w←任意值(价值函数参数);
(2) 时序差分更新:对每个回合执行以下操作:
  1)用策略π(θ)生成轨迹;使用当前策略π(θ)与环境交互,生成轨迹数据。
  2)用生成的轨迹和由w确定的价值函数估计θ处的策略梯度g和优势函数A。
  优势函数:A(s,a) = Q(s,a) - V ω ( s ) V_{\omega}(s) Vω(s),Q值通过TD算法求得,V值由价值网络预测产生。
  策略梯度:通过轨迹数据计算,表示策略性能提升的方向。在这里插入图片描述
3 共轭梯度法求解自然梯度和最终更新量
用共轭梯度算法迭代得到x自然梯度方向,再结合信任域约束求得缩放因子得到最终更新量 2 δ x T F X x \sqrt{\frac{2\delta}{x^{T}FX}}x xTFX2δ x;
4 策略更新
确定j的值,使得新策略在信任域内,并且代理优势有提升。
更新策略参数 θ ← θ + α j 2 δ x T F x x \theta \leftarrow \theta +\alpha_{j} \sqrt{\frac{2\delta}{x^{T}Fx}}x θθ+αjxTFx2δ x
5 价值函数更新
更新w以减小价值函数的误差,最小化时序差分误差(TD Error)。
在这里插入图片描述
通过梯度下降更新w,提升优势函数估计的准确性。

三、PPO算法

由于TRPO 通过求解带 KL 散度约束的优化问题(需计算 Hessian 矩阵和共轭梯度),计算复杂度高(O (n³)),工程实现困难。在PPO(近端策略优化)算法中,引入了剪切比率以及自适应 KL 控制。
我们看一下它的具体改进:
1 它通过剪裁概率比来近似实现TRPO算法中的KL散度的约束,从而避免复杂的二阶优化。
在这里插入图片描述
其中
在这里插入图片描述
表示新旧策略在该动作上的概率比。如果该比值偏离 1 太远,它将被裁剪在 ( [ 1 − ε , 1 + ε ] ([1-\varepsilon,1+\varepsilon] ([1ε,1+ε]范围内,这限制了策略在一次更新中可以变化的程度。
优势:无需显式计算 KL 散度和 Hessian,仅用一阶梯度下降(如 Adam),计算复杂度降至 O (n),代码量减少 90% 以上。
2 PPO采用自适应 KL 控制,PPO-KL惩罚
TRPO 的问题:手动设定 KL 散度阈值 δ \delta δ需反复调参,过小导致收敛慢,过大易退化。
在 PPO 中,这通过添加对参考模型(初始策略)的 KL 惩罚来体现。具体来说,我们在损失函数中加入类似以下内容:
在这里插入图片描述
目标函数变为:
在这里插入图片描述
通过监测 KL 值自动调整 β \beta β(如 KL 超过目标值则增大 β \beta β,反之减小),避免手动调参。

四、GRPO算法

GRPO算法——组相对策略优化,用“多次模拟平均值”替代价值函数,为什么要消除价值函数呢,因为PPO 依赖价值网络(Critic)估计状态价值,需同时训练策略和价值两个模型,显存占用高(如 32B 模型需额外 20GB 显存),且价值函数误差易导致策略退化。
 那我们用什么替代价值函数呢,用“多次模拟平均值”替代价值函数。直接删除 Critic,对每个输入生成K 个候选输出,用组内平均奖励作为基线计算相对优势。简单来讲,现在我们用策略函数随机生成多个输出,在再组内求个平均,作为基准。举个例子:我们做数学题前,先生成 8 个解题步骤,奖励最高的候选优势为正,最低的为负,通过组内比较消除绝对奖励偏差。我们看一下公式。
在这里插入图片描述
同时,GRPO保留了 PPO 的裁剪和 KL 机制,以确保稳定、合规的更新。我们看一下目标函数公式:
在这里插入图片描述
通过计算同一问题的多个输出的平均值并进行标准化,得出“相对分数”。这样,我们不再需要专用的价值函数,但仍能获得动态的“分数线”,简化训练并节省资源。
GRPO 通过砍掉价值函数、用分组替代单样本、极简奖励,在大模型时代找到了 “少即是多” 的路径:牺牲部分生成效率,换取显存、训练成本和推理质量的突破。

总结

这期我们从TRPO入手,讲了KL散度约束以及在约束下,最大期望优势函数,之后PPO在TRPO的基础上,采用了剪裁概率,进行了计算复杂度的改进,以及引入可自适应的KL惩罚,在这基础之上,GRPO通过组相对策略优化,直接消除了价值函数。
希望本文能帮助你自然地理解 TRPO,PPO 以及 GRPO。


写在文末

 如果想要更深入学习强化学习的内容,关注我,下期更精彩

请大家一定一定要关注!!!
请大家一定一定要关注!!!
请大家一定一定要关注!!!
友友们,你们的支持是我持续更新的动力~

创作不易,求关注,点赞,收藏,谢谢~
### TRPO算法原理 TRPO(Trust Region Policy Optimization)是强化学习领域的一个重要里程碑,通过信赖域限制优化策略更新方式,在稳定性和性能提升之间提供良好平衡[^2]。“信任区域”是TRPO算法的核心概念之一,它引入了一个关键思想用于控制策略更新的幅度,以确保训练的稳定性和可控性。此方法旨在解决深度强化学习中的一个重要问题:即如何在不影响策略稳定性的情况下实现有效的策略改进。 当采用常规梯度下降法时,如果参数更新幅度过大,则可能导致模型不稳定或者发散;而过小又会使得学习效率低下。为了克服这些问题并保持每次迭代都能朝着更优解前进而不破坏当前已有的好结果,TRPO采用了基于KL散度的信任区间来限定新旧两个分布之间的差异程度不得超过一定阈值。具体来说就是让新的概率密度函数p_new与之前的版本p_old相比变化量不超过ε范围内的时候才接受这次改变作为有效尝试的一部分[^4]。 对于TRPO而言,其基本思路在于构建一个替代优势函数,并利用重要性采样技术处理状态转移过程中产生的偏差问题。该算法还定义了一些常用的变量以便更好地描述整个流程以及设定具体的优化目标。最终目的是寻找能够使预期回报最大化的行动方案的同时维持系统的平稳过渡特性[^1]。 此外,TRPO 使用 MM (Minorize-Maximization) 优化过程推导出目标函数。这一过程涉及到创建一个更容易求解但始终低于实际成本表面的新曲面,并不断重复最小化这个代理问题直到达到满意的解决方案为止[^3]。 ```python import gym from stable_baselines3 import TRPO env = gym.make('LunarLander-v2') model = TRPO('MlpPolicy', env, verbose=1) # Train the agent model.learn(total_timesteps=int(2e5)) ``` 上述代码展示了如何使用 `stable-baselines3` 库中的 TRPO 实现对 LunarLander 游戏环境的学习过程。这不仅体现了理论上的优越性也证明了实践应用价值所在。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wxchyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值