文章目录
- [近端策略优化PPO(Proximal Policy Optimization)算法](#近端策略优化PPO(Proximal Policy Optimization)算法)
-
- 一、主要思想
- 二、符号说明
-
- [1. 核心概念与定义](#1. 核心概念与定义)
- [2. 关键参数与符号说明](#2. 关键参数与符号说明)
- 三、算法训练步骤
-
- [1. 初始化阶段](#1. 初始化阶段)
- [2. 数据收集阶段](#2. 数据收集阶段)
- [3. 优势与回报计算阶段](#3. 优势与回报计算阶段)
- [4. 策略与价值更新阶段](#4. 策略与价值更新阶段)
- [为什么要在 PPO 中加入策略熵](#为什么要在 PPO 中加入策略熵)
- [5. 循环迭代](#5. 循环迭代)
- [四、PPO 总损失函数各部分作用](#四、PPO 总损失函数各部分作用)
-
- [1. 裁剪策略目标 L C L I P ( θ ) L^{CLIP}(θ) LCLIP(θ)](#1. 裁剪策略目标 L C L I P ( θ ) L^{CLIP}(θ) LCLIP(θ))
- [2. Critic 价值损失 L V F ( ϕ ) L^{VF}(ϕ) LVF(ϕ)](#2. Critic 价值损失 L V F ( ϕ ) L^{VF}(ϕ) LVF(ϕ))
- [3. 策略熵 S [ π θ ] S[π_θ] S[πθ]](#3. 策略熵 S [ π θ ] S[π_θ] S[πθ])
- [4. 权重系数的典型取值与平衡逻辑](#4. 权重系数的典型取值与平衡逻辑)
近端策略优化PPO(Proximal Policy Optimization)算法
一、主要思想
在强化学习中,直接优化策略会导致不稳定的训练,模型可能因为过大的参数更新而崩溃。PPO(Proximal Policy Optimization)通过限制策略更新幅度,使得每一步训练都不会偏离当前策略太多,同时高效利用采样数据。
二、符号说明
1. 核心概念与定义
| 概念 | 公式 | 说明 |
|---|---|---|
| 目标函数 | J ( θ ) = E π θ ∑ t = 0 ∞ γ t r t J(θ)=\mathbb E_{\pi_{\theta}}∑_{t=0}^{\infin}\gamma^{t}r_t J(θ)=Eπθ∑t=0∞γtrt | Actor 优化目标,最大化轨迹期望累积奖励 |
| 状态价值函数 | V π ( s ) = E π θ [ ∑ k = 0 ∞ γ k r t + k ∣ s t = s ] V^π(s)=\mathbb E_{π_{θ}}[∑{k=0}^∞γ^kr{t+k}∣s_t=s] Vπ(s)=Eπθ[∑k=0∞γkrt+k∣st=s] | 从状态 s s s出发,遵循策略 π π π 的期望回报 |
| 动作价值函数 | Q π ( s , a ) = E π θ [ ∑ k = 0 ∞ γ k r t + k ∣ s t = s , a t = a ] Q^π(s,a)=E_{\pi_{\theta}}[∑{k=0}^∞γ^kr{t+k}∣s_t=s,a_t=a] Qπ(s,a)=Eπθ[∑k=0∞γkrt+k∣st=s,at=a] | 状态 s s s执行动作 a a a后,遵循 π π π的期望回报 |
| 优势函数 | A π ( s , a ) = Q π ( s , a ) − V π ( s ) A^π(s,a)=Q^π(s,a)−V^π(s) Aπ(s,a)=Qπ(s,a)−Vπ(s) | 衡量动作 a a a相对平均水平的优劣,核心降方差工具 |
| TD 误差 | δ t = r t + γ V ϕ ( s t + 1 ) − V ϕ ( s t ) δ_t=r_t+γV_ϕ(s_{t+1})−V_ϕ(s_t) δt=rt+γVϕ(st+1)−Vϕ(st) | 单步价值预测误差,可近似单步优势函数 |
2. 关键参数与符号说明
| 符号 | 含义 | 符号 | 含义 |
|---|---|---|---|
| θ θ θ | Actor 网络参数 | ϕ ϕ ϕ | Critic 网络参数 |
| γ γ γ | 折扣因子(0≤γ≤1) | α , β α,β α,β | Actor/Critic 学习率 |
| π θ ( a ∣ s ) π_θ(a∣s) πθ(a∣s) | 随机策略(离散 / 连续动作概率分布) | μ θ ( s ) μ_θ(s) μθ(s) | 确定性策略(连续动作输出) |
| λ λ λ | GAE 权衡系数 | ϵ ϵ ϵ | PPO 裁剪系数 |
三、算法训练步骤
1. 初始化阶段
-
初始化 Actor 网络 π θ ( a ∣ s ) π_θ(a∣s) πθ(a∣s)(策略网络)和 Critic 网络 V ϕ ( s ) V_ϕ(s) Vϕ(s)(价值网络)的参数 θ , ϕ θ,ϕ θ,ϕ。
-
设定超参数:裁剪系数 ϵ ϵ ϵ(如 0.2)、折扣因子 γ γ γ、GAE 系数 λ λ λ、迭代轮次、批次大小等。
2. 数据收集阶段
-
使用当前策略 π θ π_θ πθ 与环境交互,收集一批轨迹数据: τ = { ( s 0 , a 0 , r 0 ) , ( s 1 , a 1 , r 1 ) , ... , ( s T , a T , r T ) } τ=\{(s_0,a_0,r_0),(s_1,a_1,r_1),...,(s_T,a_T,r_T)\} τ={(s0,a0,r0),(s1,a1,r1),...,(sT,aT,rT)}
-
保存旧策略参数 θ o l d ← θ θ_{old}←θ θold←θ,用于后续计算策略比值。
3. 优势与回报计算阶段
-
计算状态价值估计:用 Critic 网络 V ϕ ( s t ) V_ϕ(s_t) Vϕ(st) 估计每个状态 s t s_t st 的价值。
-
计算优势估计:常用 GAE(广义优势估计)来计算优势函数 A t ^ \hat{A_t} At^,公式为: A ^ t = ∑ k = 0 ∞ ( γ λ ) k δ t + k , δ t = r t + γ V ϕ ( s t + 1 ) − V ϕ ( s t ) \hat{A}t=∑{k=0}^∞(γλ)^kδ_{t+k},δ_t=r_t+γV_ϕ(s_{t+1})−V_ϕ(s_t) A^t=∑k=0∞(γλ)kδt+k,δt=rt+γVϕ(st+1)−Vϕ(st)
GAE(Generalized Advantage Estimation)是强化学习中一种更鲁棒的优势函数估计方法,它通过结合单步 TD 误差和多步回报,在偏差和方差之间取得了更好的平衡。
优势函数的定义:
A t π = Q t π − V t π A_t^\pi=Q_t^\pi-V_t^\pi Atπ=Qtπ−Vtπ
直接用蒙特卡洛回报估计 Q t π Q_t^\pi Qtπ方差很高,而用单步 TD 误差估计又偏差较大。GAE 通过引入折扣系数 γ 和GAE 系数 λ,把多步 TD 误差做加权组合,从而在偏差和方差之间做灵活的权衡。
公式推导:
首先定义单步 TD 误差:
δ t = r t + γ V ( s t + 1 ) − V ( s t ) δ_t=r_t+γV(s_{t+1})−V(s_t) δt=rt+γV(st+1)−V(st)
GAE 的优势估计为:
A ^ t G A E ( γ , λ ) = ∑ k = 0 ∞ ( γ λ ) k δ t + k \hat{A}t^{GAE(γ,λ)}=∑{k=0}^∞(γλ)^kδ_{t+k} A^tGAE(γ,λ)=k=0∑∞(γλ)kδt+k
-
当 λ = 0 λ=0 λ=0 时, A ^ t = δ t \hat{A}_t=δ_t A^t=δt,退化为单步 TD 误差(方差小,但偏差大)。
-
当 λ = 1 λ=1 λ=1 时, A ^ t = ∑ k = 0 ∞ γ k δ t + k \hat{A}t=∑{k=0}^∞γ^kδ_{t+k} A^t=∑k=0∞γkδt+k,等价于蒙特卡洛优势估计(偏差小,但方差大)。
-
当 0 < λ < 1 0<λ<1 0<λ<1时,就是两者的加权组合,实现偏差 - 方差的平衡。
-
-
计算目标回报:计算每个状态的目标回报(用于更新 Critic): R ^ t = r t + γ r t + 1 + ⋯ + γ T − t r T \hat{R}t=r_t+γr{t+1}+⋯+γ^{T−t}r_T R^t=rt+γrt+1+⋯+γT−trT
4. 策略与价值更新阶段
-
固定旧策略:在本轮更新中,保持 θ o l d θ_{old} θold 不变。
-
构建 PPO 裁剪目标函数: L C L I P ( θ ) = E [ min ( r t ( θ ) A ^ t , c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) ] L^{CLIP}(θ)=\mathbb E[\min(r_t(θ)\hat{A}_t,clip(r_t(θ),1−ϵ,1+ϵ)\hat{A}_t)] LCLIP(θ)=E[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)]
其中 r t ( θ ) = π θ ( a t ∣ s t ) μ θ o l d ( a t ∣ s t ) r_t(\theta)=\frac {\pi_\theta (a_t|s_t)}{\mu_{\theta_{old}}(a_t|s_t)} rt(θ)=μθold(at∣st)πθ(at∣st)。
-
r t ( θ ) A ^ t r_t(θ)\hat{A}_t rt(θ)A^t是原始策略梯度目标
-
r t ( θ ) r_t(\theta) rt(θ)是新旧策略在 ( s t , a t ) (s_t,a_t) (st,at)处的概率比值
-
A ^ t \hat{A}_t A^t是优势函数的估计值(通常用TD误差近似)
-
这个项的含义是:用新策略相对旧策略的概率比,去加权优势估计,代表原始的策略梯度目标。
-
-
c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t clip(r_t(θ),1−ϵ,1+ϵ)\hat{A}_t clip(rt(θ),1−ϵ,1+ϵ)A^t把 r t ( θ ) r_t(\theta) rt(θ)限制在 [ 1 − ϵ , 1 + ϵ ] [1−ϵ,1+ϵ] [1−ϵ,1+ϵ]区间内(例如ϵ=0.2时就是[0.8,1.2])
- 这个项的含义是:对策略比值做裁剪后,再去加权优势估计,用来限制策略更新的幅度。
-
min()取最小值的作用
min()的核心目的是对目标函数做保守裁剪,避免策略更新幅度过大导致训练震荡。-
当 A ^ t > 0 \hat{A}_t>0 A^t>0(动作比平均好,要提升该动作概率)
-
我们希望 rt(θ) 尽可能大,但
clip()会把它上限设为 1+ϵ。 -
m i n ( r t ( θ ) A ^ t , c l i p ( r t ( θ ) , . . . ) A ^ t ) min(r_t(\theta)\hat{A}_t,\; clip(r_t(\theta),...)\hat{A}_t) min(rt(θ)A^t,clip(rt(θ),...)A^t)会取较小的那个值,也就是被裁剪后的结果,从而避免新策略概率提升过多。
-
-
当 A ^ t < 0 \hat{A}_t<0 A^t<0(动作比平均差,要降低该动作概率)
-
我们希望 rt(θ) 尽可能小,但
clip()会把它下限设为 1−ϵ。 -
m i n ( r t ( θ ) A ^ t , ; c l i p ( r t ( θ ) , . . . ) A ^ t ) min(r_t(\theta)\hat{A}_t,; clip(r_t(\theta),...)\hat{A}_t) min(rt(θ)A^t,;clip(rt(θ),...)A^t)同样会取较小的那个值,也就是被裁剪后的结果,从而避免新策略概率下降过多。
-
-
-
期望 E [ ⋅ ] \mathbb E[⋅] E[⋅]
-
是对整个数据集的平均,它把单步的保守约束推广到了整个批次的轨迹上。
-
这确保了在整个策略更新过程中,所有样本的策略更新幅度都被限制在安全范围内,从而让训练过程更稳定、收敛更可靠。
-
-
为什么 r t ( θ ) A ^ t r_t(θ)\hat{A}_t rt(θ)A^t是原始策略梯度目标
原始策略梯度目标是策略梯度算法的核心优化目标,它的本质是最大化策略在环境中获得的长期期望累积奖励,并通过梯度上升的方式更新策略参数。原始策略梯度的核心梯度表达式是:
J ( θ ) = E τ ∼ π θ [ ∑ k = 0 ∞ ( γ t r t ) ] J(\theta)=\mathbb E_{\tau∼π_{\theta}}\left[∑_{k=0}^∞(γ^tr_t) \right] J(θ)=Eτ∼πθ[k=0∑∞(γtrt)]
通过对数导数技巧,我们得到梯度:
∇ θ J ( θ ) = E π θ [ ∇ θ l o g π θ ( a t ∣ s t ) Q π θ ( s t , a t ) ] ∇θJ(θ)=\mathbb E{π_{\theta}}\left[∇θlogπ_θ(a_t∣s_t)Q^{π{\theta}}(s_t,a_t)\right] ∇θJ(θ)=Eπθ[∇θlogπθ(at∣st)Qπθ(st,at)]
在实际算法中,用优势函数 A ^ t \hat{A}t A^t 近似 Q π θ ( a t ∣ s t ) Q^{π{\theta}}(a_t∣s_t) Qπθ(at∣st),简化为:
∇ θ J ( θ ) = E π θ [ ∇ θ l o g π θ ( a t ∣ s t ) A ^ t ] ∇θJ(θ)=\mathbb E{\pi_{\theta}}[∇_θlogπ_θ(a_t∣s_t)\hat{A}_t] ∇θJ(θ)=Eπθ[∇θlogπθ(at∣st)A^t]
对目标函数 J ( θ ) J(θ) J(θ) 做等价变形,我们可以用重要性采样 ,把期望从新策略 π θ π_θ πθ 转到旧策略 π θ o l d π_{θ_{old}} πθold 上:
J ( θ ) = E π θ o l d [ π θ ( a t ∣ s t ) μ θ o l d ( a t ∣ s t ) A ^ t ] J(\theta)=\mathbb E_{\pi_{\theta_{old}}}\left[\frac {\pi_\theta (a_t|s_t)}{\mu_{\theta_{old}}(a_t|s_t)} \hat{A}_t\right] J(θ)=Eπθold[μθold(at∣st)πθ(at∣st)A^t]
代入 r t ( θ ) r_t(θ) rt(θ) 的定义,就得到:
J ( θ ) = E [ r t ( θ ) A ^ t ] J(\theta)=\mathbb E\left[r_t(\theta) \hat{A}_t\right] J(θ)=E[rt(θ)A^t]
这就说明 r t ( θ ) A ^ t r_t(θ)\hat{A}_t rt(θ)A^t 正是用重要性采样改写后的原始策略梯度目标的核心项,它和原始策略梯度的优化目标是完全等价的。
- 原始策略梯度的本质是 "用优势函数 A ^ t \hat{A}_t A^t加权,让好的动作概率上升、差的动作概率下降"。
- r t ( θ ) A ^ t r_t(θ)\hat{A}_t rt(θ)A^t只是换了一种写法,通过新旧策略的概率比 r t ( θ ) r_t(θ) rt(θ)来体现这种加权逻辑,最终的优化目标和原始策略梯度完全一致。
- 唯一的区别是它用重要性采样复用了旧策略的数据,避免了每次更新都重新收集数据的问题,但没有解决原始策略梯度更新幅度过大的问题 ,这也是 PPO 要引入
clip()和min()的原因。
-
-
构建 Critic 损失函数(MSE 损失): L V F ( ϕ ) = E [ ( R ^ t − V ϕ ( s t ) ) 2 ] L^{VF}(ϕ)=\mathbb E[(\hat{R}_t−V_ϕ(s_t))^2] LVF(ϕ)=E[(R^t−Vϕ(st))2]
-
总损失函数: L ( θ , ϕ ) = L C L I P ( θ ) − c 1 L V F ( ϕ ) + c 2 S [ π θ ] L(θ,ϕ)=L^{CLIP}(θ)−c_1L^{VF}(ϕ)+c_2S[π_θ] L(θ,ϕ)=LCLIP(θ)−c1LVF(ϕ)+c2S[πθ]( c 1 , c 2 c1,c2 c1,c2为权重, S [ π θ ] S[π_θ] S[πθ] 是策略熵,用于鼓励探索)
-
梯度上升 / 下降优化:对 Actor 网络执行梯度上升以最大化 L C L I P ( θ ) L^{CLIP}(θ) LCLIP(θ),对 Critic 网络执行梯度下降以最小化 L V F ( ϕ ) L^{VF}(ϕ) LVF(ϕ)。
策略熵是信息论中熵的概念在强化学习策略上的应用,用来衡量策略的随机程度。
对于离散动作空间,策略熵的定义为:
S [ π θ ] = − E s ∼ D , a ∼ π θ [ l o g π θ ( a ∣ s ) ] S[π_θ]=-\mathbb E_{s∼\mathcal D,a∼π_{\theta}}\left[logπ_θ(a∣s)\right] S[πθ]=−Es∼D,a∼πθ[logπθ(a∣s)]
- 如果策略让每个动作的概率都比较平均,熵就高,说明策略更随机、探索性强。
- 如果策略只给少数动作分配高概率,熵就低,说明策略更确定、探索性弱。
为什么要在 PPO 中加入策略熵
在 PPO 的总损失函数里,策略熵项通常是加在损失中作为正则项 。它的核心作用是鼓励探索,避免策略过早收敛到局部最优:
- 训练初期:策略熵较高,算法会倾向于尝试更多动作,从而收集到更丰富的环境信息。
- 训练后期:策略会逐渐变得确定,熵会自然下降。此时熵项仍能防止策略完全 "固化",保留一定的探索能力。
- 如果没有熵项,策略可能很快就 "贪" 于当前的高回报动作,不再尝试其他可能更优的动作,导致陷入局部最优。
- 加入熵项后,算法在追求高奖励的同时,会 "奖励" 那些更随机的策略,从而平衡 "探索未知动作" 与 "利用已知最优动作"。
5. 循环迭代
- 重复步骤 2--4,直到达到预设的训练轮次或性能指标。
四、PPO 总损失函数各部分作用
1. 裁剪策略目标 L C L I P ( θ ) L^{CLIP}(θ) LCLIP(θ)
-
角色:Actor(策略网络)的核心优化目标
-
作用:
- 最大化策略的长期期望奖励,同时通过
clip()和min()约束新旧策略的差异,避免更新幅度过大。 - 保证策略平稳迭代,是 PPO 稳定训练的核心。
- 最大化策略的长期期望奖励,同时通过
-
权重:默认系数为 1,是损失函数的主导项。
2. Critic 价值损失 L V F ( ϕ ) L^{VF}(ϕ) LVF(ϕ)
-
角色:Critic(价值网络)的优化目标
-
作用:
- 用均方误差衡量价值网络预测值 V ϕ ( s t ) V_ϕ(s_t) Vϕ(st)与真实回报 R ^ t \hat{R}_t R^t的差距。
- 最小化该损失可以让价值网络更准确地评估状态价值,为优势函数提供可靠的基准值。
-
权重 :由系数 c 1 c_1 c1控制(例如常见取值 0.5),负号表示通过梯度下降最小化该损失。
3. 策略熵 S [ π θ ] S[π_θ] S[πθ]
-
角色:探索鼓励的正则项
-
作用:
- 衡量策略的随机程度,熵越高表示策略越倾向于探索更多动作。
- 防止策略过早收敛到局部最优,平衡探索与利用。
-
权重 :由系数 c 2 c_2 c2控制(例如常见取值 0.01),正号表示通过梯度上升最大化该熵值。
4. 权重系数的典型取值与平衡逻辑
| 系数 | 典型值 | 作用 |
|---|---|---|
| c 1 c_1 c1 | 0.5 | 控制价值损失的权重,避免其过度主导训练 |
| c 2 c_2 c2 | 0.01 | 控制熵奖励的强度,防止探索过度或不足 |
-
核心平衡:
-
L C L I P ( θ ) L^{CLIP}(θ) LCLIP(θ)负责提升策略性能,
-
L V F ( ϕ ) L^{VF}(ϕ) LVF(ϕ)负责提供准确的价值评估,
-
S [ π θ ] S[π_θ] S[πθ]负责维持探索能力,
三者协同保证算法在稳定训练的同时高效收敛。
-