技术博客
强化学习原理训练

三分钟看懂强化学习PPO算法

LSST2026-08-03 09:15
三分钟看懂强化学习PPO算法

三分钟看懂强化学习PPO算法:为什么它能让机器人稳定学会走路?

在强化学习领域,PPO几乎是一个绕不开的算法。

无论是训练机器人行走、机械臂操作,还是让智能体玩游戏,我们经常都会看到PPO的身影。

PPO的全称是:

Proximal Policy Optimization
近端策略优化

它由OpenAI提出,核心目标可以概括为一句话:

每次更新策略时可以进步,但不能一下子改得太猛。

这听起来很简单,但恰好解决了策略梯度算法中最常见的问题:训练过程不稳定。


一、强化学习究竟在学什么?

在监督学习中,模型通常会获得明确的正确答案。

例如:

输入:一张猫的图片
标签:猫

模型只需要不断缩小预测结果与正确标签之间的差距。

但强化学习通常没有现成的标准答案。

智能体需要在环境中不断尝试动作,并根据环境返回的奖励判断动作好不好。

一个典型的强化学习交互过程可以表示为:

观察当前状态
      ↓
策略输出动作
      ↓
环境执行动作
      ↓
返回新状态和奖励
      ↓
继续下一轮交互

例如,一台机器人正在学习走路:

  • 状态:机器人身体姿态、关节角度和关节速度;

  • 动作:各个关节应该施加多大的控制量;

  • 奖励:向前移动得到正奖励,摔倒得到负奖励;

  • 目标:最大化长期累计奖励。

使用符号表示:

状态 s_t
   ↓
策略 π 输出动作 a_t
   ↓
环境返回奖励 r_t 和下一状态 s_(t+1)

强化学习真正要学习的,就是一个从状态到动作的策略:

a_t = π(s_t)

其中:

  • s_t 表示当前状态;

  • a_t 表示当前动作;

  • π 表示智能体的策略。


二、什么是策略梯度?

PPO属于策略梯度算法。

所谓策略梯度,就是直接调整策略网络的参数,让能够获得高奖励的动作以后更容易被选择。

假设智能体在某个状态下执行了一个动作。

如果这个动作最终带来了较高收益,那么就提高该动作再次被选择的概率;如果这个动作带来了较低收益,就降低它再次被选择的概率。

可以通俗地表示为:

表现好的动作 → 提高出现概率

表现差的动作 → 降低出现概率

例如,机器人抬起右腿后成功站上台阶,那么策略会认为这次动作比较好。

下一次遇到相似状态时,机器人更有可能再次选择类似动作。

但这里存在一个问题:

一次训练更新,到底应该把动作概率调整多少?

如果调整得太小,模型学习速度很慢;如果调整得太大,新策略可能完全破坏旧策略已经学会的能力。

PPO的核心,就是控制这个更新幅度。


三、普通策略梯度为什么容易不稳定?

假设机器人已经学会勉强向前走路。

当前策略虽然还不完美,但至少不会立刻摔倒。

如果进行一次幅度过大的参数更新,新策略可能突然变成:

  • 抬腿幅度过大;

  • 两条腿同时离地;

  • 关节动作过于激进;

  • 身体重心快速偏移;

  • 机器人直接摔倒。

也就是说,策略更新并不一定总是朝着好的方向稳定前进。

可能出现这样的训练过程:

第100轮:已经可以缓慢行走

第101轮:策略更新幅度过大

第102轮:机器人重新学会摔倒

这是因为神经网络的参数彼此耦合。

即使只修改一次网络参数,也可能同时影响大量状态下的动作输出。

因此,一个好的策略优化算法不仅要问:

怎样让奖励提高?

还要问:

怎样在不破坏旧策略的情况下提高奖励?

PPO正是围绕这个问题设计的。


四、PPO的核心思想是什么?

PPO会保留两个策略:

旧策略 π_old

新策略 π_new

旧策略负责采集一批训练数据,新策略则根据这些数据进行更新。

PPO会比较新旧策略对同一个动作给出的概率。

这个概率比可以写成:

r_t = π_new(a_t | s_t) / π_old(a_t | s_t)

其中:

  • π_old(a_t | s_t) 表示旧策略在状态 s_t 下选择动作 a_t 的概率;

  • π_new(a_t | s_t) 表示新策略选择同一动作的概率;

  • r_t 表示新旧策略的概率比。

如果:

r_t = 1

说明新策略和旧策略对这个动作的态度基本一致。

如果:

r_t > 1

说明新策略更加倾向选择这个动作。

如果:

r_t < 1

说明新策略降低了选择这个动作的概率。

例如:

旧策略选择某动作的概率:0.40

新策略选择某动作的概率:0.44

概率比:0.44 / 0.40 = 1.10

这说明新策略把该动作的概率提高了10%。


五、优势函数是什么?

仅仅知道动作概率发生了变化还不够。

PPO还需要判断这个动作到底是好还是坏。

这通常通过优势函数完成:

A_t = 实际表现 - 状态下的平均预期表现

优势函数可以简单理解为:

这次执行的动作,比通常情况下的表现好多少?

如果:

A_t > 0

说明这个动作比平均水平更好,应该提高它的概率。

如果:

A_t < 0

说明这个动作比平均水平更差,应该降低它的概率。

例如,机器人在某个状态下通常只能获得5分,但这次选择某个动作后获得了8分。

那么这个动作的优势大致可以理解为:

优势 = 8 - 5 = 3

这说明该动作值得鼓励。

因此,策略优化的基本思路可以写成:

优化目标 = 概率变化 × 动作优势

即:

L = r_t × A_t

如果某个动作优势为正,PPO会提高它的概率;如果优势为负,PPO会降低它的概率。


六、PPO为什么要进行裁剪?

如果只使用:

L = r_t × A_t

新策略可能会为了提高奖励,极端地改变某个动作的概率。

例如:

旧策略概率:0.10

新策略概率:0.90

概率比:9.0

新策略相当于突然把一个动作的选择概率提高了九倍。

虽然这个动作在当前数据中表现不错,但这种更新幅度太大,可能导致策略崩溃。

因此,PPO会给概率比设置一个允许范围。

例如:

允许范围:[0.8, 1.2]

当概率比超过范围时,PPO就会对它进行裁剪:

clip(r_t, 1-ε, 1+ε)

假设:

ε = 0.2

那么概率比会被限制在:

[0.8, 1.2]

例如:

原始概率比:1.10 → 保持1.10

原始概率比:1.50 → 裁剪为1.20

原始概率比:0.60 → 裁剪为0.80

这就是“近端策略优化”中“近端”的含义:

新策略不能距离旧策略太远。


七、PPO的目标函数是什么?

PPO最经典的裁剪目标函数可以写成:

L_clip =
min(
    r_t × A_t,
    clip(r_t, 1-ε, 1+ε) × A_t
)

这个公式看起来比较复杂,但本质上只做了一件事:

允许策略朝正确方向更新,但不允许更新幅度过大。

当动作优势为正时,PPO希望提高这个动作的概率,但提高到一定程度后就停止奖励继续增大。

当动作优势为负时,PPO希望降低这个动作的概率,但同样不允许一次降低得太多。

可以通俗地理解为:

好动作可以多选一点,但不要一下子变成必选。

坏动作可以少选一点,但不要一下子完全禁止。

PPO不是阻止策略学习,而是给策略更新增加一个“限速器”。


八、PPO为什么还有一个价值网络?

PPO通常采用Actor-Critic结构。

其中:

Actor:负责选择动作

Critic:负责评价当前状态

Actor回答的问题是:

当前状态下,我应该做什么?

Critic回答的问题是:

当前状态大概有多好?

价值网络通常会估计状态价值:

V(s_t) = 从当前状态开始,未来可能获得的累计奖励

例如,对机器人爬楼梯来说:

机器人正对楼梯、姿态稳定:
状态价值较高

机器人身体严重倾斜、足端打滑:
状态价值较低

价值网络的预测可以作为基准,用于计算优势函数:

优势 = 实际获得的回报 - 价值网络预测

因此,Actor和Critic的关系可以理解为:

Actor负责行动

Critic负责打分

Actor根据Critic的评价改进动作

九、GAE是什么?

在PPO中,经常会看到另一个名词:

GAE
Generalized Advantage Estimation
广义优势估计

GAE用于更加稳定地计算优势函数。

如果只看一步奖励,估计结果通常比较稳定,但无法反映动作对长期任务的影响。

如果直接使用整个回合的累计奖励,能够反映长期收益,但估计方差会非常大。

GAE通过一个参数在二者之间进行折中:

短期估计:偏差较大,但方差较小

长期估计:偏差较小,但方差较大

GAE:在两者之间取得平衡

其核心会使用时序差分误差:

δ_t = r_t + γV(s_(t+1)) - V(s_t)

其中:

  • r_t 表示当前奖励;

  • γ 表示折扣因子;

  • V(s_t) 表示当前状态价值;

  • V(s_(t+1)) 表示下一状态价值。

然后将未来多个时刻的误差进行加权:

A_t =
δ_t
+ γλδ_(t+1)
+ (γλ)^2 δ_(t+2)
+ ...

其中,λ负责控制优势估计更偏向短期还是长期。

在实际使用中,常见设置为:

γ = 0.99

λ = 0.95

十、PPO的训练流程是什么?

PPO的训练过程可以概括为以下几个步骤。

第一步:使用旧策略采集数据

智能体在环境中运行,记录:

当前状态 s_t

执行动作 a_t

获得奖励 r_t

下一状态 s_(t+1)

动作概率 log_prob

例如,机器人会同时在大量并行仿真环境中行走和摔倒,并记录这些交互数据。


第二步:计算回报和优势

根据奖励以及价值网络的输出,计算:

每个状态的目标回报

每个动作的优势 A_t

优势为正的动作会被鼓励,优势为负的动作会被抑制。


第三步:更新策略网络

使用PPO裁剪目标更新Actor:

L_actor =
min(
    r_t × A_t,
    clip(r_t, 1-ε, 1+ε) × A_t
)

这样可以防止新策略偏离旧策略太远。


第四步:更新价值网络

价值网络需要让预测价值接近真实回报。

可以表示为:

L_value =
(V(s_t) - 目标回报)^2

预测误差越大,价值损失越大。


第五步:加入熵奖励

为了避免策略过早变得确定,PPO通常会加入熵奖励。

熵可以理解为策略的随机程度:

熵较高:愿意探索不同动作

熵较低:总是选择少数固定动作

如果策略过早失去随机性,机器人可能只学会一个效果一般的动作模式,难以继续探索更好的方案。

因此,PPO的总损失通常包含:

总损失 =
策略损失
+ 价值损失
- 熵奖励

第六步:替换旧策略

更新完成后:

新策略 → 旧策略

然后使用更新后的策略重新采集数据,开始下一轮训练。

完整流程可以表示为:

使用策略采集环境数据
          ↓
计算累计回报和优势
          ↓
多轮更新Actor与Critic
          ↓
限制策略更新幅度
          ↓
使用新策略重新采集数据
          ↓
不断循环

十一、为什么PPO适合训练机器人?

PPO在机器人强化学习中非常常见,主要有以下几个原因。

1. 训练相对稳定

PPO通过裁剪概率比限制策略更新幅度。

这能够减少策略突然退化的问题,使训练曲线更加稳定。


2. 实现比较简单

与一些需要复杂约束优化的算法相比,PPO只需要在损失函数中加入裁剪操作。

因此,它比较容易实现、调试和复现。


3. 适合连续动作控制

机器人的动作通常是连续值,例如:

关节目标角度

关节力矩

关节速度

轮子转速

PPO可以使用高斯分布输出连续动作,因此很适合机器人控制任务。

例如:

策略网络输出动作均值 μ

同时学习或设置标准差 σ

从高斯分布中采样动作

即:

a_t ~ Normal(μ, σ)

4. 适合大规模并行仿真

在机器人训练中,可以同时运行几千个仿真环境。

例如:

4096个机器人同时训练

每个机器人探索不同动作

统一收集数据并更新PPO策略

这种方式可以快速获得大量交互数据,提高训练效率。


十二、PPO有哪些缺点?

虽然PPO非常实用,但它并不是万能算法。

1. 样本利用率不算高

PPO属于On-Policy算法。

它通常只能使用当前策略采集的数据进行训练。

策略更新后,旧数据很快就不能继续反复使用。

这意味着PPO往往需要大量环境交互。

对于仿真环境来说,这个问题相对容易解决;但在真实机器人上直接采集大量数据,成本会非常高。


2. 对奖励函数比较敏感

PPO只会优化设计者提供的奖励。

如果奖励函数设计不合理,智能体可能找到意料之外的“投机方法”。

例如,为机器人设置向前速度奖励后,它可能学会:

疯狂摆动身体获得瞬时速度

拖着脚向前滑动

通过摔倒向前移动

这些行为可能获得较高数学奖励,但并不是设计者真正想要的动作。


3. 超参数仍然需要调整

PPO常见的重要参数包括:

学习率

裁剪范围 ε

折扣因子 γ

GAE参数 λ

每批数据更新次数

熵系数

价值损失系数

如果更新轮数过多,策略可能过度拟合当前数据;如果更新轮数太少,数据又没有得到充分利用。


4. 裁剪不等于绝对安全

PPO限制的是动作概率变化,并不能保证神经网络在所有状态下的输出都只发生很小变化。

因此,即使使用了裁剪,训练过程中仍然可能出现策略退化、奖励震荡或局部最优。


十三、PPO和SAC有什么区别?

PPO和SAC都是连续控制中常见的强化学习算法,但二者思路不同。

PPO:On-Policy算法

SAC:Off-Policy算法

PPO通常使用当前策略采集的数据,训练完成后旧数据很快被丢弃。

SAC则会把数据存入经验回放池,并反复使用历史数据。

简单对比如下:

对比项目

PPO

SAC

数据类型

On-Policy

Off-Policy

样本利用率

相对较低

相对较高

训练稳定性

较好

较好但实现更复杂

并行仿真

非常适合

也可以使用

机器人运动控制

非常常见

也较常见

经验回放池

通常不使用

使用

策略特点

限制更新幅度

最大化奖励与策略熵

如果拥有大量高速并行仿真环境,PPO通常是一个非常可靠的选择。

如果真实环境数据昂贵,希望反复利用每一条数据,SAC可能更有优势。


十四、如何用一句话理解PPO?

可以把PPO想象成一个正在学习走路的人。

普通策略梯度可能会说:

这个动作效果好,下一次把它的概率提高十倍。

而PPO会说:

这个动作确实不错,但先只提高一点。

观察效果后,再继续调整。

因此,PPO真正解决的不是“怎样更新策略”,而是:

怎样以相对稳定、谨慎的方式更新策略。


总结

PPO是一种基于Actor-Critic结构的策略梯度算法。

它的核心过程是:

策略与环境交互
      ↓
计算动作优势
      ↓
提高好动作的概率
      ↓
降低差动作的概率
      ↓
通过裁剪限制更新幅度

PPO最关键的设计是概率比裁剪:

r_t = π_new(a_t | s_t) / π_old(a_t | s_t)

并将概率比限制在一定范围内:

clip(r_t, 1-ε, 1+ε)

它的核心思想可以概括为一句话:

让策略每次都朝更好的方向前进,但不要一次走得太远。

也正因为训练稳定、实现简单,并且适合连续动作与大规模并行仿真,PPO成为了机器人运动控制和强化学习研究中最常用的算法之一。

点赞收藏
// 评论1
0 / 500
Howard2026-08-11 10:00

对PPO的讲解由浅入深,循序渐进,逻辑清晰,新手友好。