强化学习 — PPO策略优化算法
1.PPO 算法概述
1.PPO 的提出背景
我们还是以智能体如何控制飞船落地的小游戏为例,智能体的目标是通过一系列操作(如向左移动或向右移动)实现平稳着陆。在训练初期,智能体并不知道应该如何操作,它需要通过反复的试探操作,从环境中不断获得反馈并调整策略,最终掌握一套“高奖励”操作方式。
虽然游戏过程在视觉上看起来非常快速,但实际上每一步都包含了大量计算与判断,比如,当前所处位置(状态);当前可执行的动作;作执行后的环境反馈;下一步动作的选择。
1.策略优化
这些操作正是强化学习(Reinforcement Learning, RL)中策略优化需要解决的问题,即通过训练不断调整策略参数,使得智能体在与环境交互中获得的长期累积奖励最大化。
策略优化的基本流程:
- 初始化策略 $πθ$
- 与环境交互,收集轨迹(状态-动作-奖励序列)
- 评估当前策略的表现(如回报或优势值)
- 根据表现更新策略参数 $θ$
- 重复步骤 2~4,直到收敛
2.常见的策略优化方法
方法 | 简介 | 问题 |
---|---|---|
REINFORCE (Policy Gradient, 1992) | 最基本的策略梯度算法,通过采样轨迹直接优化策略期望收益 | 高方差、收敛慢 |
Actor-Critic (A2C/A3C) | 使用一个 Critic 网络评估当前策略,减少 REINFORCE 的方差 | 依然可能导致策略不稳定、易陷入局部最优 |
Trust Region Policy Optimization (TRPO) (2015) | 引入信赖域约束,通过限制新旧策略 KL 散度,稳定策略更新 | 数学推导复杂,实际实现困难,约束不易控制 |
PPO (2017) | 使用剪切目标函数(clip objective)近似信赖域,保持 TRPO 的稳定性优势,同时实现更简单高效的更新 |
TRPO(Trust Region Policy Optimization) 是第一个明确提出“策略更新不能太大”的强化学习方法。它通过约束策略之间的 KL 散度来控制新旧策略之间的距离,使训练更稳定。但还有如下问题:
- 需要进行二阶优化(如共轭梯度法)计算 Fisher 信息矩阵,复杂且效率低。
- 实际应用中,不容易调节 KL 散度阈值,易导致过拟合或崩溃。
PPO(Proximal Policy Optimization) 正是为了解决 TRPO 的工程复杂性和策略优化的稳定性问题而提出的,目标是在保持 TRPO 稳定性的同时简化实现和提高效率。即可以不断试探 —— 收集经验 —— 调整策略,让策略更可能选择“能拿高奖励的动作”。
2.强化学习中的基本要素
1.原始五要素
要理解 PPO 首先还要再熟悉一下强化学习框架中的五个基本要素,这源自经典马尔可夫决策过程(MDP)的定义,它们一起共同组成了基本强化学习交互系统。
- 智能体(Agent):决策者。负责观察环境状态,基于当前策略选择动作。在 PPO 中,智能体由一个策略网络(通常是神经网络)表示,通过优化它的参数 $θ$ 来提升表现。
- 环境(Environment):智能体所处的世界,它接收智能体的动作,并返回新的状态和奖励。在 PPO 中,环境通常由 Gym 或 Unity ML 等平台提供。
作用:- 根据动作决定下一状态 $s_{t+1}$
- 给出即时奖励 $r_t$
- 判断是否结束一轮游戏(done)
- 状态(State, $s_t$):环境在某一时刻的观察值。它反映了当前的环境信息。在 PPO 中,状态作为策略网络的输入,用来决定当前应采取的动作。
举例:- 棋盘的当前布局
- 游戏中小人的位置、速度、血量
- 自动驾驶中摄像头或雷达的观测数据
- 动作(Action, $a_t$):智能体在状态 $s_t$ 下可以选择的行为。在 PPO 中,策略网络输出的是一个概率分布 $\pi_\theta(a|s)$,训练中通过采样 $a_t \sim \pi_\theta(\cdot|s_t)$决定行为,动作影响后续状态与奖励,因此是优化的核心变量。
两种类型:- 离散动作:如“向左/右移动”、“跳跃”
- 连续动作:如“车速 = 0.8”,“关节角度 = 35°”
- 奖励(Reward, $r_t$):环境对智能体行为的反馈。奖励的累积值衡量策略的好坏。在 PPO 中,奖励用来估计“优势函数” $A_t$,决定某个动作比平均行为好多少,从而更新策略。
举例:- 玩游戏得分 +1
- 棋局胜利奖励 +10
- 撞墙或掉入坑中给予负奖励 -1
2.算法增强要素
在实际强化学习算法(如 PPO)中,会引入两个额外要素(策略和回报与价值函数),用来辅助或实现优化目标,这两个是算法层面引入的学习结构,在现代 RL 中非常关键,尤其是在 PPO、A2C 等基于策略梯度的方法中。
- 策略(Policy, $\pi(a|s)$):智能体选择动作的行为准则。可能是确定性的,也可能是概率性的。在 PPO 中,策略是可微的神经网络:$\pi_\theta(a|s)$。PPO 的目标是通过“剪切目标函数”更新策略,使其选择更优动作但又不剧烈偏移
- 回报与价值函数(Return,$R_t$; Value Function):回报 $R_t$,从时刻 t 开始未来累计奖励(可折扣),价值函数,某个动作相比平均行为好多少。在 PPO 中,价值函数用于构造优化目标,一般会结合 GAE(Generalized Advantage Estimation)进行平滑估计。
3.交互流程
状态 $s_t$ → 策略 $πθ$ → 采样动作 $a_t$ → 交互环境 → 得到 $r_t$ 和 $s_{t+1}$ → 存储轨迹 → 策略更新
强化学习的核心是一个智能体根据策略与环境互动,在状态下选择动作、获得奖励,并用这些经验不断优化策略。而PPO 等策略优化算法正是这种优化过程中的关键方法。
3.PPO 的核心任务与设计理念
1.核心任务
PPO 属于策略优化类强化学习算法,其核心任务是:在智能体与环境的交互中,通过采样获得的经验轨迹,不断更新策略函数 πθ,使其输出更优的动作选择概率分布,从而最大化长期累积奖励。
这意味着 PPO 的目标是实现:
- 策略更新要有方向感 → 即优化方向要对
- 策略更新不能太激进 → 防止训练发散或性能崩塌
- 策略更新还要高效 → 能在大规模神经网络下快速迭代
2.设计理念
PPO 的提出,是对早期策略梯度方法的一系列关键性改进与简化。它的设计理念可以归结为以下三点:
1.稳定策略更新:不要走太远
在早期策略优化中(如 REINFORCE、A2C),策略每次更新都可能偏离旧策略太远,导致性能不稳定或策略崩溃。
PPO 的理念:学习应该“靠近旧策略附近”,防止策略剧烈变化。这是对 TRPO “信赖域”思想的继承。
- PPO 不使用复杂的二阶优化和 KL 约束
- 而是引入 Clip 策略比值函数,控制策略更新的幅度
核心思想:限制策略比值的范围 $r_t = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)}$ 不要偏离 1 太多
2.设计剪切目标函数:软约束代替硬约束
PPO 用如下的目标函数来近似信赖域的思想:
$$L^{\text{CLIP}}(\theta) = \mathbb{E}_t \left[ \min\left(r_t(\theta) \hat{A}_t,; \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) \cdot \hat{A}_t\right) \right]$$
其中:
- $r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)}$:其中$\pi_\theta(a_t|s_t)$ 表示当前的新策略概率。 其中$\pi_{\theta_{old}}(a_t|s_t)$ 表示旧策略的概率(用来收集数据)。整体表示随着策略参数$\theta$的改变,新策略选这个动作的概率,相比旧策略高了多少,如果 $r_t$ = 1.2,新策略更偏爱这个动作,如果 $r_t$ = 0.7,新策略则不喜欢这个动作
- $\hat{A}_t$:优势函数(动作好坏的估计),表示这个动作比平均水平好多少;$\hat{A}_t$ > 0:这是一个“好动作”,我们希望新策略更倾向它。$\hat{A}_t$ < 0:这是“坏动作”,我们希望新策略更少选它
- $\epsilon$:限制更新幅度的一小常数,通常设为 0.1 或 0.2
- $\text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon)$:如果 $r_t(\theta)$ 落在 $[1 - \epsilon, 1 + \epsilon]$,就不变;如果超过了,就限制到边界上;这就像给更新加了“保险绳”,不要一次跳太远,比如新策略一下把概率提高太多,反而不稳定
- $\min\left( r_t(\theta)\hat{A}_t,\ \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \cdot \hat{A}_t \right)$ 表达的是一个 保守策略:如果没有超过边界,我们就正常优化;如果超过边界,我们就用“剪切后的版本”替代;哪个小用哪个,从而防止策略过度更新
举个简单例子,假设,优势函数 $\hat{A}_t$ = 5,旧策略选某动作概率是 0.2,新策略更新后变成 0.4,那么$r_t$ = 0.4 / 0.2 = 2.0,设置 $\epsilon$ = 0.2,则 clip 后为 1.2,计算得到:$min(2.05, 1.25)$ = 6。
当策略改变幅度适中时按正常梯度优化;当策略改变太大(超出剪切阈值)时抑制过度优化,截断回报。这就是 PPO 名称中 “Proximal”(邻近)的含义:策略的变化始终控制在邻近区域,防止训练不稳定。
3.简洁实用:适配现代深度学习系统
PPO 在设计上强调“工程上好用”,这也是它能在工业界广泛落地的关键:
对比项 | TRPO | PPO |
---|---|---|
使用的优化器 | 共轭梯度法(二阶优化) | 任意一阶优化器(Adam 等) |
是否需要 KL 约束 | 是,显式添加 KL 散度限制 | 否,使用剪切函数近似控制 |
代码复杂度 | 高,难以调参 | 低,容易调试 |
样本效率 | 高 | 较高 |
稳定性 | 高 | 稳定且高效 |
PPO 被称为“TRPO 的近似简化版”,但其实际表现往往与甚至超过 TRPO。
4.PPO 的整体目标函数
PPO 的实际损失函数通常包括三项:
$$L^{\text{PPO}}(\theta) = \mathbb{E}_t \left[ L^{\text{CLIP}}_t(\theta) - c_1 \cdot \text{VF Loss}_t + c_2 \cdot \text{Entropy Bonus}_t \right]$$
- $L^{\text{CLIP}}_t(\theta)$:剪切后的策略优化目标(核心)
- $VF Loss$:值函数损失(用于训练 Critic)
- $Entropy Bonus$:鼓励策略的探索性(增加随机性)
这体现了 PPO 的三个核心关注点:
- 优化策略但别太过火
- 训练 Critic 提高估值准确性
- 鼓励探索避免陷入局部最优
PPO 的核心任务是稳定高效地优化策略函数,其设计理念是在保持性能提升的同时,通过“剪切目标函数”防止策略剧烈变化,从而实现训练过程中的稳健性、可控性与实用性。
2.PPO 策略网络与环境交互
在 PPO算法中,策略网络的核心任务是通过与环境的持续交互,从状态中提取信息,采样动作,并依据经验数据不断优化策略。下面我们围绕“智能体如何感知、决策与收集经验”这条主线,分三部分:
1.状态、动作与策略网络建模
策略优化的前提是智能体必须能够准确理解当前所处的状态,并基于状态做出合理的动作决策。下面说说在 PPO 中,如何建模状态、动作以及策略网络,构建整个感知——决策链路。
1.状态空间(State Space)
状态是智能体感知环境的输入,是决策的基础。在不同的任务中,状态可以是:
任务类型 | 状态示例 |
---|---|
经典控制 | 位置、速度、角度等数值数组(如 CartPole 的 4 维向量) |
棋类游戏 | 当前棋盘的二维数组或编码 |
图像输入 | 原始像素矩阵(如 RGB 图像) |
自定义环境 | 环境描述符、特征向量、传感器数据等 |
在 PPO 中,我们通常将状态 $s$ 作为一个固定维度的向量输入策略网络,以便网络进行前向传播和策略输出。
2.动作空间(Action Space)
动作定义了智能体可以对环境采取的行为,其建模方式取决于环境类型:
1. 离散动作空间(Discrete)
- 例如:飞船落地case中动作只有两个(左或右)
- PPO 中策略网络最后输出一组 softmax 概率分布,对所有可能动作进行建模
- 示例输出:$\pi_\theta(a|s)$ = [0.4, 0.6],表示选择动作 1 的概率为 60%
2.连续动作空间(Continuous)
- 例如:机器人控制中的加速度、关节角度等
- PPO 中策略网络不直接输出动作,而是输出动作分布的参数
- 常见方式是:输出一个均值向量 μ 和对数标准差 logσ
- 动作从该分布中采样:$a \sim \mathcal{N}(\mu, \sigma)$
- 这种设计允许策略保持随机性,且便于求导
3.策略网络建模(Policy Network)
策略网络是 PPO 的核心部分,它是一个参数化函数 $\pi_\theta(a|s)$,用于对给定状态生成动作概率分布。
PPO 中策略网络常用结构如下:
类型 | 结构示意 | 应用场景 |
---|---|---|
MLP(多层感知机) | state → Linear → ReLU → Linear → Softmax | 状态为向量型任务,如控制类环境 |
CNN(卷积网络) | image → Conv → Pool → Flatten → Linear → Softmax | 状态为图像,如 Atari 游戏 |
Actor-Critic 共用前缀 | shared → actor head / critic head | 提高参数共享与训练效率 |
PPO 通常采用 Actor-Critic 框架,即:
- Actor 网络:策略网络 $\pi_\theta$,主要是根据当前状态 s 生成动作 a 的概率分布
- Critic 网络:值函数估计器 $V_\phi(s)$,用于估计当前状态的“好坏”,即预期的累计回报
有时两者共享前几层网络,只在最后分出两个输出头(Head),分别输出动作分布参数与状态值。
4.模型建模的关键要点
模块 | 建模技巧 |
---|---|
输入归一化 | 状态输入需归一化到相似尺度(如 [0, 1] 或 [-1, 1])以稳定训练 |
输出处理 | 离散动作需加 softmax,连续动作需生成正态分布参数 |
初始化 | 用适当权重初始化策略输出层(如小权重、防止初期策略过于确定) |
探索性 | PPO 天然支持随机策略,但也可在输出中控制熵(entropy)来增强探索 |
5.总结
PPO 中策略建模的三大核心:
- 状态建模:将环境状态编码为数值向量,作为策略网络输入
- 动作建模:依据任务类型,输出动作概率分布或动作分布参数
- 策略网络结构:采用深度神经网络建模 $\pi_\theta$,支持高维输入与复杂策略表达
通过这套建模体系,PPO 的智能体才能在环境中感知状态、做出行动,并基于经验不断优化策略,实现强化学习的核心目标。
2.游戏生命周期与轨迹采样
在强化学习中,智能体的学习是建立在与环境反复交互所产生的“经验轨迹”之上的。下面介绍下PPO 中一个 episode(游戏生命周期)的全过程,以及如何通过与环境交互采样轨迹数据用于策略优化的。
1.游戏生命周期(Episode Lifecycle)
在 PPO 中,每一次与环境完整交互的过程称为一个 episode,也可以理解为一局“游戏”。每一局游戏的生命周期如下:
1 | 初始化环境 |
这一过程体现了 RL 的核心闭环:状态 → 动作 → 奖励 + 新状态 → 再决策。
2.轨迹与经验采样
PPO 是一种on-policy 策略梯度算法,它依赖于当前策略下采样的真实轨迹数据进行优化。因此,轨迹采样的质量直接影响训练效果。
1.什么是轨迹(Trajectory)?
轨迹 τ表示智能体与环境的一次完整交互序列,包含状态、动作、奖励三元组,一条轨迹通常表示为:$\tau = { (s_0, a_0, r_0), (s_1, a_1, r_1), \dots, (s_T, a_T, r_T)}$
如果策略是随机的,轨迹本质上是从策略分布中采样得到的一条路径:$\tau \sim \pi_\theta$
概念:
- 初始 (s0,a0,r0):由环境初始化,策略选择第一个动作,环境返回第一个奖励
- 终止 (sT,aT,rT):最后一个有效状态,可能影响最终奖励,之后环境终止
轨迹是强化学习的核心数据单元,其质量直接影响训练效果。PPO 等 on-policy 算法尤其依赖当前策略采样的新鲜轨迹进行优化。
2.PPO 中采样轨迹的目的
采样轨迹(Trajectories)的核心目的是为策略优化提供真实交互数据,确保策略更新的稳定性和高效性。
采样的轨迹数据用于以下关键计算:
- 优势函数 $\hat{A}_t$ :动作好坏的估计。动作的惊喜程度(实际分 vs 预期分)
- 目标值函数 $\hat{V}_t$ 或 $R_t$:$\hat{V}_t$预测当前状态$st$的未来总得分期望值(预测),$R_t$实际从$st$开始到结束的真实总得分(真实结果)。预期分 vs 真实分
- 策略旧概率 $\pi_{\theta_{\text{old}}}(a_t|s_t)$,用于构造剪切比值,记录更新策略前,在$st$状态下选择$at$的原始概率。更新策略时的”安全带”,防止AI瞎改
3.轨迹采样中的细节设计
在 PPO 中,为了增强训练稳定性和样本利用效率,轨迹采样有以下几个常见设计点:
- 多环境并行采样:使用多个环境实例(如 vectorized Gym)同时生成轨迹,提高样本效率
- 固定步长而非固定局数:PPO 通常采样固定步数(如 2048 步),不管中间 episode 是否终止
- 状态标准化:对状态输入进行归一化处理,保持数值稳定
- 记录旧策略概率:每一步记录旧策略下的动作概率,用于后续剪切目标计算
- 缓存格式:使用 RolloutBuffer 等结构缓存状态、动作、奖励、done、log_prob、value 等信息
智能体通过当前策略网络与环境反复交互,采样轨迹;利用采样数据估计策略梯度与值函数误差;进而优化策略网络,实现强化学习闭环。
3.数据采集流程与交互代码示例
在 PPO 中,数据采集是策略优化的第一步。通过策略网络与环境的交互,采集大量高质量的状态-动作-奖励轨迹,是后续学习曲线收敛的关键。
一个完整的数据采样流程,通常包括以下核心步骤:
- 初始化环境与策略网络
- 在当前策略下循环交互:
- 根据状态 $s_t$,用策略网络输出动作 $a_t$
- 用该动作与环境交互,获得 $r_t$, $s_{t+1}$, done
- 将交互信息缓存至采样缓冲区
- 重复以上过程直到采样足够时间步(如 2048)
- 结束本轮采样,开始策略优化阶段
1.采样结构设计:Rollout Buffer
为了高效组织采样的数据,我们通常使用一个数据结构 —— Rollout Buffer,用于存储每一轮采样的经验。
典型缓存字段包括:
- states:状态序列
- actions:动作序列
- rewards:即时奖励
- dones:是否终止标志
- log_probs:旧策略的动作概率(用于 Clip 比值)
- values:值函数预测(用于计算优势)
- next_states(可选):用于 TD 估计
2.PyTorch + Gym 环境下的数据采样代码示例
以下是一个简化的 PPO 数据采样代码流程,支持离散动作环境(如 CartPole):
1 | class RolloutBuffer: |
策略与环境交互采样过程如下:
1 | def collect_trajectories(env, policy, buffer, rollout_steps): |
3.一些细节
点位 | 描述 |
---|---|
保持策略随机性 | 必须使用 sample() 而非 argmax,以保证策略梯度的可导性 |
记录 log_prob | 是 PPO 中 $r_t = π_θ(a_t)$ |
环境重置 | 遇到 done=True 时应立即 env.reset(),否则状态将失效 |
状态归一化(可选) | 统一状态维度、缩放数值区间,提高训练稳定性 |
采样步数设定 | PPO 通常使用固定步数采样(如 2048)而非固定局数 |
3.PPO 的优化目标与策略梯度
在强化学习中,智能体的学习核心是策略优化,而策略优化的本质就是不断提升策略网络参数,使其在与环境的交互中获得更高的长期回报。本章将系统梳理强化学习中的优化目标,以及如何通过策略梯度方法实现对策略的可导性学习
1.强化学习的目标函数定义
在RL中,智能体的目标并不是像监督学习那样最小化某个损失函数,而是最大化从环境中获得的长期累计奖励。下面将从基本原理出发,系统地推导并解释强化学习中策略优化的目标函数形式。
1.策略优化的本质目标
强化学习中的策略由一个参数化的函数 $\pi_\theta(a|s)$ 表示,它给定当前状态 $s$ 时输出动作 $a$ 的概率分布。我们希望学习一组参数 $\theta$,使得该策略在环境中表现得尽可能好。
强化学习的优化目标是 最大化期望回报(Expected Return):
$$J(\theta) = \mathbb{E}{\tau \sim \pi\theta} \left[ \sum_{t=0}^{T} \gamma^t r_t \right]$$
其中:
- $\theta$:策略网络的参数
- $\tau = (s_0, a_0, r_0, s_1, \dots)$:表示一条轨迹 trajectory
- $\gamma \in (0, 1]$:折扣因子,用于权衡长期与短期奖励
- $r_t$:智能体在第 t 步获得的即时奖励
- $\mathbb{E}{\tau \sim \pi\theta}[\cdot]$:在当前策略下,对所有可能轨迹取期望
2.目标函数直观理解
这个目标函数代表了智能体在当前策略下,预计可以获得的平均长期奖励。最大化它,就意味着让智能体倾向于采取能长期带来更高奖励的行为策略。
换句话说:
强化学习 ≈ 找到一套动作决策规则,使得智能体在环境中获得的总奖励期望值最大化。
3.状态价值函数与动作价值函数
为了更细致地描述不同状态或动作的好坏,我们引入两个关键函数,它们都是目标函数的局部展开:
1.状态价值函数(State Value Function)
$V^\pi(s) = \mathbb{E}\pi \left[ \sum{t=0}^\infty \gamma^t r_t ,\middle|, s_0 = s \right]$
表示在状态 $s$ 下,使用策略 $\pi$ 所能获得的预期总奖励。
2.动作价值函数(Action Value Function)
$Q^\pi(s, a) = \mathbb{E}\pi \left[ \sum{t=0}^\infty \gamma^t r_t ,\middle|, s_0 = s, a_0 = a \right]$
表示在状态 $s$ 下选择动作 $a$,之后按照策略 $\pi$ 行动,能获得的期望回报。
这两个函数会在后续优势函数和策略梯度中反复出现。
4.PPO 中使用的目标函数特点
在 PPO 训练过程中,虽然最终优化的是剪切策略目标(Clip Objective),但仍然是围绕这个“期望回报最大化”的原始目标函数进行近似优化。这个原始目标提供了:
- 理论基础:PPO 的损失项是从 $J(\theta)$ 推导出来的
- 导数依据:策略梯度就是对 $J(\theta)$ 求导数
- 稳定性参考:值函数分支用于估计状态回报 $V(s)$ 以减少方差
5.与监督学习目标的对比
对比项 | 监督学习 | 强化学习 |
---|---|---|
目标函数 | 最小化预测误差(如 MSE) | 最大化期望回报 $J(\theta)$ |
标签 | 明确给定的 ground truth | 奖励由环境反馈,不稳定 |
样本依赖 | 样本独立 $i.i.d.$ | 样本依赖于策略,非独立 |
难点 | 特征建模 | 时序性、稀疏奖励、探索-利用权衡 |
2.期望计算与采样估计
在强化学习中,我们的目标是最大化如下策略目标函数:
$J(\theta) = \mathbb{E}{\tau \sim \pi\theta} \left[ \sum_{t=0}^{T} \gamma^t r_t \right]$
但由于轨迹分布$\tau \sim \pi_\theta$涉及环境动态与策略随机性,这个期望在实际中无法精确求解,因此必须通过采样近似来计算。
1.为什么需要采样估计?
强化学习不像监督学习那样拥有固定训练集。环境是一个黑箱,策略在其中不断与环境交互产生样本,因此:
- 分布不可知:轨迹 $\tau$ 的真实分布 $p(\tau)$ 无法直接获得
- 动态生成数据:只能通过当前策略与环境互动收集数据
- 期望不易解析:数学上无法求出对策略参数 $\theta$ 的解析梯度
因此,我们必须依赖经验采样方式,用近似值替代期望与梯度。
2.采样估计策略目标函数
我们用经验平均值(Monte Carlo 估计) 来代替对轨迹的期望:
$J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \left[ \sum_{t=0}^{T_i} \gamma^t r_t^{(i)} \right]$
其中:
- $N$:采样轨迹的数量
- $T_i$:第 $i$ 条轨迹的终止时间步
- $r_t^{(i)}$:第 i 条轨迹第 $t$ 步获得的奖励
通过这种方式,我们可以估计在当前策略 $\pi_\theta$ 下,策略执行的表现。
4.策略更新与训练流程
1.多轮交互 + 多轮策略微调
一次完整的策略训练过程包含两大阶段:
- 与环境的交互采样阶段(rollout phase):策略根据当前参数 $\theta$ 与环境互动,生成多个 episode 或 trajectory,每个时间步采集三类数据:状态 $s_t$、动作 $a_t$、回报/优势 $A_t$。
- 策略更新阶段(policy optimization phase):使用采集到的样本数据,进行多次 epoch 的策略微调,即训练 PPO 的目标函数。
1.多轮交互的目的
在传统的策略梯度方法(如 REINFORCE)中,通常每轮训练只使用一次采样数据,造成:
- 样本利用率极低
- 更新方向受噪声影响大
- 不利于收敛与稳定性
而 PPO 的改进之一是:一次采样数据可以用来进行多轮策略更新(Multiple Epochs),极大提高训练效率。
2.多轮策略微调
PPO 借助其 clip 剪切机制,可以在 不改变旧策略分布过快的前提下,使用同一批采样数据多次训练:
- 将采样数据分为若干 minibatch(小批次);
- 对每个小批次进行 3~10 轮更新(称为 multiple epochs);
- 每次更新计算目标函数:$L^{\text{CLIP}}(\theta) = \mathbb{E}_{(s,a) \sim \mathcal{D}} \left[ \min \left( r(\theta) A, \text{clip}(r(\theta), 1-\epsilon, 1+\epsilon) A \right) \right]$,其中 $\mathcal{D}$ 是采样的数据集。
PPO 的训练采用 “一次采样 + 多轮更新” 的方式,在保持策略分布稳定的前提下,大大提高了样本利用效率,是其效率与稳定性兼得的核心优势。
2.优势函数与稳定性优化
1.什么是优势函数(Advantage Function)?
优势函数 $A_t$ 是强化学习中用于衡量一个动作相对“平均水平”好坏的重要指标,定义为:
$A_t = Q(s_t, a_t) - V(s_t)$
其中:
- $Q(s_t, a_t)$:表示在状态 $s_t$ 执行动作 $a_t$ 后的总期望回报
- $V(s_t)$:表示在状态 $s_t$ 下采取任意策略的平均回报
- 所以 $A_t$ 表示「当前动作比平均水平好多少」
若 $A_t$ > 0,说明当前动作优于平均水平;反之则劣于平均。
2.为什么 PPO 要使用优势函数?
PPO 的目标是最大化:
$L^{\text{CLIP}}(\theta) = \mathbb{E}_t \left[ \min(r_t(\theta) A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t) \right]$
可以看出:
- PPO 的策略梯度方向完全依赖于 $A_t$
- 准确估计 $A_t$ 是训练稳定性与收敛性的关键
3.如何估计优势函数?
在实践中,我们无法直接得到 $Q(s_t, a_t)$,所以通常用经验回报 $R_t$ 与状态值函数 $V(s_t)$ 的差值近似:
$A_t = R_t - V(s_t)$
但这样会带来高方差问题。于是,提出了一种更平滑的优势估计方法——广义优势估计(GAE)。
PPO 中的优势函数不仅决定了策略的更新方向,还通过 GAE、归一化等方法提升了训练的稳定性与收敛速度,是连接策略目标与实际更新之间的“稳定桥梁”。
3.训练中的常见技巧与超参数设置
在强化学习中,尤其是 PPO 这样的 on-policy 策略优化方法,由于每一次更新都依赖新鲜采样数据,因此训练效率和稳定性尤为重要。本节总结了一系列实践中广泛使用的技巧与推荐超参数,帮助你在实现 PPO 时取得更好效果。常见训练技巧有:
1.标准化优势函数(Advantage Normalization)
- 作用:消除优势值的数值尺度影响,避免策略梯度方向失衡,通常效果显著,建议始终启用。
- 做法:每个训练批次上,将优势函数 A_t 标准化为:$A_t \leftarrow \frac{A_t - \mu}{\sigma + \epsilon}$
2.熵奖励(Entropy Bonus)
- 作用:增加策略的随机性,防止策略过早陷入确定性,提升探索能力。
- 添加到目标函数 中,完整形式为:$L^{\text{PPO}} = L^{\text{CLIP}} - c_1 \cdot \text{VF Loss} + c_2 \cdot \text{Entropy Bonus}$
- 超参数 $c_2$ 控制熵奖励权重,典型值为:0.001 ~ 0.02
3.梯度裁剪(Gradient Clipping)
- 作用:防止策略梯度爆炸,保证每步更新平稳
- 做法:对所有梯度统一做 L2 范数裁剪
1 | # max_grad_norm 推荐值 0.5 |
4.Reward Normalization(回报归一化)
- 特别适用于 reward 数值波动较大或不同任务 reward 分布差异大的情况
- 可提升学习稳定性,但在 reward 分布已稳定时可略去
5.周期性评估与 early stopping
- 在训练周期中设定验证环境,用于评估策略性能趋势
- 若策略在评估环境中长期不提升,可早停或调整学习率策略
6.PPO 中关键超参数推荐
以下为 PPO 中常用的重要超参数及其典型建议范围(可依据任务微调):
超参数 | 描述 | 推荐值 |
---|---|---|
γ | 折扣因子 | 0.99 |
λ | GAE 参数,控制 bias-variance 平衡 | 0.95 |
ε | PPO 剪切阈值 | 0.1 ~ 0.3 |
K_epochs | 每轮数据的微调轮数 | 4 ~ 10 |
mini_batch_size | 小批次样本大小 | 64 ~ 1024 |
learning_rate | 学习率 | 1e-4 ~ 3e-4 |
c1 | 值函数损失权重 | 0.5 |
c2 | 熵正则项权重 | 0.01 |
max_grad_norm | 梯度裁剪上限 | 0.5 |
这些超参数会根据任务复杂度、action space 维度和 reward scale 做适当调整。
5.总结
PPO(Proximal Policy Optimization)是一种高效稳定的策略优化算法,通过剪切目标函数(clip objective)限制策略更新幅度,在保持训练稳定性的同时简化实现。
其核心设计包括:
- 用策略比值剪切替代复杂的KL约束,防止策略突变
- 采用广义优势估计(GAE)平衡偏差与方差
- 支持多轮数据复用提升样本效率
PPO通过Actor-Critic框架交互采样,结合值函数损失和熵奖励项,实现策略的渐进式优化。典型超参数如剪切阈值ε=0.2、折扣因子γ=0.99、GAE参数λ=0.95,配合梯度裁剪和优势归一化等技巧,使其在连续/离散动作任务中均表现优异,成为强化学习领域的基准算法。