大数跨境
0
0

PPO为何稳赢Policy Gradient?答案藏在这刀“黄金剪裁”

PPO为何稳赢Policy Gradient?答案藏在这刀“黄金剪裁” 极市平台
2025-08-27
2
导读:↑ 点击蓝字 关注极市平台作者丨Cheney来源丨PaperWeekly编辑丨极市平台极市导读 调参总翻车?
↑ 点击蓝字 关注极市平台
作者丨Cheney
来源丨PaperWeekly
编辑丨极市平台

极市导读

 

调参总翻车?PPO 用“一刀剪”把策略更新锁死在安全区:比率超 ε 直接剪掉,既稳又快,还省掉 TRPO 复杂的二阶优化,RL 落地首选。 >>加入极市CV技术交流群,走在计算机视觉的最前沿

训练老是翻车,调参像在碰运气?多数时候问题出在策略更新的“步子”迈得太大。Policy Gradient 简单直接却极易不稳,TRPO 在稳定性上更有保障,却因复杂实现难以普及。

PPO 则在两者之间找到黄金分割点:它用“一刀剪”锁住策略更新的幅度,多轮复用同一批数据,提高效率,还不需要繁琐的二阶优化。这样的设计,让 PPO 成为学术界和工业界应用最广的强化学习算法之一。

接下来,我们先从 RL 的基本直觉出发,看看它为什么能迅速走红。

01 引言:强化学习的“痛”

什么是强化学习?(快速回顾)

想象一下,你是一个刚刚出生的婴儿,对这个世界一无所知。你饿了会哭,舒服了会笑。你的父母(环境)会根据你的行为(哭/笑)给出反馈(喂奶/爱的抱抱)。通过无数次的尝试和反馈,你慢慢学会了如何与环境互动,如何让自己更舒服,如何获得更多“奖励”(比如糖果,或者父母的赞许)。

这就是强化学习(Reinforcement Learning,RL)的核心思想:一个 智能体(Agent) 在环境(Environment)中通过行动(Action)来最大化累积奖励(Reward)。

智能体根据当前状态(State)选择行动环境则根据行动给出奖励和新的状态。这个过程周而复始,智能体通过不断试错来学习一个最优的策略(Policy),这个策略就是告诉智能体在任何给定状态下应该采取什么行动的“行为准则”。

策略梯度:直觉与挑战

在强化学习中,我们通常有两种学习策略的方式:

1. 基于价值(Value-based):先学习每个状态或状态-动作对的“价值”(即未来能获得的累积奖励),然后根据价值选择最优动作。比如 Q-learning、DQN。
2. 基于策略(Policy-based):直接学习一个策略函数,这个函数可以直接输出在某个状态下采取每个动作的概率。比如 REINFORCE、A2C。

策略梯度(Policy Gradient)方法就是基于策略学习的典型代表。它的核心思想非常直观:如果某个动作导致了高奖励,我们就增加这个动作在未来被选中的概率;如果导致了低奖励(或者惩罚),就降低它的概率。

数学上,我们希望最大化期望的累积奖励:

其中,  是一个轨迹(状态-动作-奖励序列),  是由参数   定义的策略,  是轨迹的总奖励。

策略梯度定理告诉我们,可以通过梯度上升来更新策略参数   :

这里,  是优势函数  (Advantage Function),它衡量了在状态   下采取动作   比平均水平好多少。如果   ,我们就增加   的值(即增加   的概率);如果   ,就减少它。

听起来很美妙,对吧?直接优化策略,简单粗暴!但现实是骨感的,策略梯度方法有一个致命的问题:不稳定性

为什么需要PPO?——“步子迈大了,容易扯着蛋”的问题

想象一下,你正在学习骑自行车。你尝试着蹬了一脚,结果车子歪了,你摔了个狗吃屎。按照策略梯度的逻辑,你可能会想:“哦,这一脚蹬得太猛了,下次轻点!”然后你下次真的轻点了,结果车子纹丝不动。你又想:“嗯,看来还是得猛点!”

问题在于,策略梯度方法在更新策略时,步长(学习率)的选择非常关键。如果步长太小,学习会非常慢,效率低下,就好像一个蜗牛在爬珠穆朗玛峰,猴年马月才能到顶啊。

但如果步长太大,策略可能会发生剧烈变化,导致性能急剧下降,甚至“灾难性遗忘”(Catastrophic Forgetting)。这就像你骑自行车,一不小心蹬得太猛,直接冲下悬崖,再也回不来了。

核心问题:如何才能在保证学习效率的同时,又避免策略更新过大导致“翻车”?

这就是 PPO 要解决的核心问题。它就像一个经验丰富的教练,在教你骑自行车时,既鼓励你大胆尝试,又在你快要摔倒时及时扶你一把,确保你始终在安全的范围内学习。

02 PPO解决了什么问题?——“稳健”与“高效”的平衡艺术

在深入讲解 PPO 的之前,我们先来明确它在强化学习的演进中扮演了什么角色,解决了哪些前人留下的“历史遗留问题”。

策略梯度方法的最大问题:不稳定性

我们前面提到了策略梯度方法的不稳定性。这是因为它们通常是在线(On-Policy)学习算法。这意味着它们用当前策略   收集数据,然后用这些数据来更新 

一旦策略更新了,之前收集的数据就“过期”了,因为它们不再符合新的策略分布。如果新旧策略差异太大,那么用旧数据计算出的梯度方向可能对新策略来说是完全错误的,导致策略朝着错误的方向“狂奔”,最终“崩盘”。

这就像你用一套旧的、过时的地图(旧策略)来规划你的旅行路线(收集数据),然后根据这次旅行的经验(更新策略)来修改地图。如果你的修改幅度太大,地图变得面目全非,那么下次你再用这张新地图去旅行时,很可能发现自己迷失在荒野中,甚至掉进陷阱。

信赖域方法(TRPO)的“救赎”:理论优雅,实现复杂

为了解决策略梯度不稳定性问题,研究者们提出了信赖域策略优化(Trust Region Policy Optimization,TRPO)算法。

TRPO 的核心思想是:每次策略更新,都必须保证新策略与旧策略之间的差异在一个“信赖域”之内。这个差异通常用 KL 散度(Kullback-Leibler Divergence)来衡量,它量化了两个概率分布之间的距离。

TRPO 的目标函数可以概括为:

其中,  是 KL 散度,  是信赖域的半径。

TRPO 的理论非常优雅,它保证了每次更新都能提升策略性能,并且不会出现灾难性的性能下降。

然而,TRPO 有一个致命的缺点:实现起来非常复杂。它需要计算二阶导数(Hessian 矩阵),或者使用共轭梯度法(Conjugate Gradient)来近似求解,这在计算上非常昂贵,而且难以与深度学习框架(如 PyTorch)的自动微分机制完美结合。

PPO的登场:在优雅与实用之间找到“黄金分割点”

就在 TRPO 让大家望而却步的时候,OpenAI 在 2017 年推出了 PPO。PPO 的目标非常明确:在保持 TRPO 稳定性的同时,大大简化其实现难度,使其能够像普通的策略梯度方法一样,使用一阶优化器(如 Adam)进行训练

PPO 不再需要计算复杂的二阶导数,而是通过一个巧妙的“剪裁(Clipping)”机制,在目标函数中直接限制新旧策略的差异。

PPO 解决了什么问题?

1. 策略梯度方法的不稳定性:通过限制策略更新的幅度,避免了“步子迈太大扯着蛋”的问题。

2. TRPO 的复杂性:用一个简单的一阶优化目标替代了复杂的二阶优化和约束求解,使得算法更容易实现和调优。

3. 在线学习的样本效率问题(部分解决):虽然 PPO 仍然是 On-Policy 算法,但它允许在收集到一批数据后,对这些数据进行多次迭代更新(Multiple Epochs),从而在一定程度上提高了样本利用率,减少了与环境的交互次数。

简而言之,PPO 在算法的稳定性、实现复杂度、以及样本效率之间找到了一个近乎完美的平衡点。它既不像 REINFORCE 那样“鲁莽”,也不像 TRPO 那样“高冷”,而是成为了一个“刚刚好”的算法,因此迅速成为了强化学习领域最受欢迎、应用最广泛的算法之一。

03 PPO用了什么方法?——优雅的策略修剪术

PPO 之所以能成为强化学习的“网红”,离不开它背后一系列巧妙而实用的设计。让我们一层一层地揭开它的神秘面纱。

核心思想:限制策略更新的幅度

PPO 的核心思想非常简单粗暴,但又极其有效:我允许你更新策略,但你不能“跑偏”太多!它不像 TRPO 那样通过 KL 散度来严格约束,而是通过一个更直接的方式——剪裁(Clipping),来限制新旧策略之间的比率。

想象一下,你是一个正在学习画画的学徒。你的老师(PPO)告诉你:“你可以自由发挥,但你的画风不能离我教你的基础风格(旧策略)太远。如果你画得太离谱,我就把你画的这部分‘剪掉’,只保留接近我风格的部分。”

策略比率(Probability Ratio):衡量“新旧”策略的差异

在 PPO 中,我们首先定义一个策略比率(Probability Ratio),用来衡量新策略   在给定状态   下采取动作   的概率,相对于旧策略   的比值:

这里的   是当前正在优化的策略参数,而   是在收集数据时使用的策略参数(通常是上一次迭代的策略参数)。

这个比率   告诉我们,新策略相对于旧策略,在   采取   的可能性是增大了还是减小了,以及增大了多少倍或减小了多少倍。

  • 如果   ,说明新策略更倾向于采取   。
  • 如果   ,说明新策略更不倾向于采取   。
  • 如果   ,说明新旧策略对   的偏好程度一样。

剪裁(Clipping)机制:给策略更新戴上“紧箍咒”

PPO 最核心的创新点就在于这个"剪裁"机制。它修改了传统的策略梯度目标函数,引入了一个剪裁项,确保策略比率   不会超出某个预设的范围   。这里的   是一个超参数,通常取 0.1 或 0.2 。

目标函数:PPO-Clip 的数学表达

PPO 的目标函数(通常称为 PPO-Clip 目标)是这样的:

其中:

  •  表示对时间步   的期望,实际上是在一批(batch)数据上求平均。
  •  是策略比率。
  •  是优势函数,衡量在状态   下采取动作   的"好坏"(稍后会详细解释)。
  • clip(  , min_val,max_val)是一个剪裁函数,它将   的值限制在 [min_val,max_val]之间。如果   min_val,则返回 min_val ;如果   max_val,则返回 max_val;否则返回   。

这个目标函数看起来有点复杂,但我们来拆解一下它的含义。它包含两个项,然后取它们的最小值:

1.原始策略梯度项

  • 这基本上就是传统的策略梯度目标,只是用比率   替代了 
  • 如果  (动作是好的),我们希望   越大越好(即新策略更倾向于这个动作)。
  • 如果  (动作是坏的),我们希望   越小越好(即新策略更不倾向于这个动作)。

2.剪裁后的策略梯度项: 

  • 这一项对策略比率   进行了剪裁。
  • 如果   超出了   的范围,它就会被强制拉回到这个范围内。

剪裁的直观理解:为什么 min 函数是关键?

现在,关键来了:为什么我们要取这两个项的最小值(min)?

让我们分两种情况来讨论   的符号:

情况一 (当前动作   是"好"的,值得鼓励)

  • 我们希望新策略   更多地采取这个动作,即希望   增大。

  • 此时,目标函数是   。

  • 由于   ,这个   操作实际上是在限制   的上限

  • 如果   增长得太快,超过了   ,那么   就会把   限制在   。

  • 此时,目标函数会选择   。

  • 这意味着,即使新策略非常非常想采取这个动作,它的奖励贡献也最多只能是   。 PPO 会"惩罚"那些试图让   超过   的更新,因为这会导致目标函数不再增加。

  • 直观理解:当一个动作是好的,PPO 鼓励你增加它的概率,但如果你增加得“太过分”了(超过   倍),PPO 就会说:“停!你已经足够好了,再好我也不会给你更多奖励了。别跑偏了!”这就像一个老师给学生加分,加到满分 100 分后,即使学生表现再好,也不会给他 101 分。

情况二 (当前动作   是"坏"的,应该避免)

【声明】内容源于网络
0
0
极市平台
为计算机视觉开发者提供全流程算法开发训练平台,以及大咖技术分享、社区交流、竞赛实践等丰富的内容与服务。
内容 8155
粉丝 0
极市平台 为计算机视觉开发者提供全流程算法开发训练平台,以及大咖技术分享、社区交流、竞赛实践等丰富的内容与服务。
总阅读3.2k
粉丝0
内容8.2k