强化学习策略梯度算法梳理:从REINFORCE到PPO2(REINFORCE、QAC、A2C、Off-Policy AC、PP01、PPO2))
强化学习策略梯度算法:从REINFORCE到PPO2
0 策略梯度算法对比总览
J(θ)=∑stdπθ(st)∑atπθ(at∣st)Qπθ(st,at)J(\theta) = \sum_{s_t} d^{\pi_{\theta}}(s_t) \sum_{a_t} \pi_{\theta}(a_t|s_t) Q^{\pi_{\theta}}(s_t, a_t)J(θ)=st∑dπθ(st)at∑πθ(at∣st)Qπθ(st,at)
算法名称 | 核心思想 | 关键改进点 | 目标函数 (期望形式) | 主要优势 | 主要劣势 |
---|---|---|---|---|---|
REINFORCE | 蒙特卡洛策略梯度 | 直接使用轨迹回报 | J(θ)=Eτ∼πθ[R(τ)]J(\theta) = \mathbb{E}_{\tau \sim \pi_{\theta}} [R(\tau)]J(θ)=Eτ∼πθ[R(τ)] | 无偏,实现简单 | 高方差,样本效率低,必须回合更新 |
QAC | 引入时序差分学习 | Actor-Critic架构,用Q值代替回报,单步更新 | Jactor(θ)=Est∼dπθ,at∼πθ[Qπθ(st,at)]J_{actor}({\theta}) = \mathbb{E}_{s_t \sim d^{\pi_{\theta}}, a_t \sim \pi_{\theta}} [Q^{\pi_{\theta}}(s_t, a_t)]Jactor(θ)=Est∼dπθ,at∼πθ[Qπθ(st,at)] | 方差降低,在线学习 | 引入偏差,On-Policy |
A2C | 引入优势函数 | 用A值代替Q值,进一步降低方差 | Jactor(θ)=Est∼dπθ,at∼πθ[Aπθ(st,at)]J_{actor}({\theta}) = \mathbb{E}_{s_t \sim d^{\pi_{\theta}}, a_t \sim \pi_{\theta}} [A^{\pi_{\theta}}(s_t, a_t)]Jactor(θ)=Est∼dπθ,at∼πθ[Aπθ(st,at)] | 方差更低,学习更快 | Critic误差影响Actor,on-policy样本效率有限 |
Off-Policy AC | 引入重要性采样 | 可复用历史数据,off-policy | Jactor(θ)=Est∼dβ,at∼β[rt(θ)Aπθ]J_{actor}({\theta}) = \mathbb{E}_{s_t \sim d^{\beta}, a_t \sim \beta} \left[r_t(\theta) A_{\pi_{\theta}} \right]Jactor(θ)=Est∼dβ,at∼β[rt(θ)Aπθ] | 样本效率高 | 高方差,不稳定 |
PPO1 | 限制策略更新幅度 | KL散度约束 | Jactor(θ)=Est∼dπθold,at∼πθold[rt(θ)Aπθ−βKL]]J_{actor}({\theta}) = \mathbb{E}_{s_t \sim d^{\pi_{\theta_{old}}}, a_t \sim \pi_{\theta_{old}}} \left[ r_t(\theta) A_{\pi_{\theta}} - \beta \text{KL}] \right]Jactor(θ)=Est∼dπθold,at∼πθold[rt(θ)Aπθ−βKL]] | 训练稳定,方差低 | 计算成本高 |
PPO2 | 裁剪简化算法 | 简化PPO1,裁剪代替KL约束 | Jactor(θ)=Est,at[min(rtAAπθ,clip(rt,1ϵ,1+ϵ)Aπθ)]J_{actor}({\theta})=\mathbb{E}_{s_t,a_t} [\min(r_t AA_{\pi_{\theta}}, \text{clip}(r_t,1\epsilon,1+\epsilon) A_{\pi_{\theta}})]Jactor(θ)=Est,at[min(rtAAπθ,clip(rt,1ϵ,1+ϵ)Aπθ)] | 简单高效,稳定 | 超参数敏感 |
1 REINFORCE算法:蒙特卡洛策略梯度
1.目标函数
-
初始目标函数(期望形式):
J(θ)=Eτ∼πθ[R(τ)]J(\theta) = \mathbb{E}_{\tau \sim \pi_{\theta}} [R(\tau)]J(θ)=Eτ∼πθ[R(τ)] -
初始目标函数(展开形式):
J(θ)=∑τP(τ;θ)R(τ)J(\theta) = \sum_{\tau} P(\tau;\theta) R(\tau)J(θ)=τ∑P(τ;θ)R(τ)
2.梯度函数
-
目标函数的梯度(期望形式):
∇θJ(θ)=Eτ∼πθ[∑t=0T∇θlogπθ(at∣st)⋅Gt]\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ \sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a_t|s_t) \cdot G_t \right]∇θJ(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅Gt] -
目标函数的梯度(展开形式):
∇θJ(θ)=∑τP(τ;θ)[∑t=0T∇θlogπθ(at∣st)⋅Gt]\nabla_{\theta} J(\theta) = \sum_{\tau} P(\tau;\theta) \left[ \sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a_t|s_t) \cdot G_t \right]∇θJ(θ)=τ∑P(τ;θ)[t=0∑T∇θlogπθ(at∣st)⋅Gt]
3.符号解释
符号解释:
- τ\tauτ: 轨迹
- P(τ;θ)P(\tau;\theta)P(τ;θ): 轨迹τ\tauτ的发生概率
- R(τ)R(\tau)R(τ): 轨迹的累积回报
- πθ(at∣st)\pi_{\theta}(a_t|s_t)πθ(at∣st): 策略函数
- GtG_tGt: 从时间步t开始的回报
4.优缺点
优点:
- 概念简单直观,易于实现
- 直接优化策略,适用于连续和离散动作空间
- 具有理论上的无偏性
缺点:
- 方差非常高
- 样本效率低
- 收敛速度慢,且训练不稳定
5.解决的问题
策略梯度定理给出了一个理论可行的方法,可以直接优化策略,适用于连续动作空间,可学习随机策略。reinforce算法提供了策略梯度定理的一个具体实现方案,但没有解决高方差问题
2 QAC算法:引入时序差分学习
1.目标函数
-
初始目标函数(期望形式):
J(θ)=Est∼dπθ,at∼πθ[Qπθ(st,at)]J(\theta) = \mathbb{E}_{s_t \sim d^{\pi_{\theta}}, a_t \sim \pi_{\theta}} [Q^{\pi_{\theta}}(s_t, a_t)]J(θ)=Est∼dπθ,at∼πθ[Qπθ(st,at)] -
初始目标函数(展开形式):
J(θ)=∑stdπθ(st)∑atπθ(at∣st)Qπθ(st,at)J(\theta) = \sum_{s_t} d^{\pi_{\theta}}(s_t) \sum_{a_t} \pi_{\theta}(a_t|s_t) Q^{\pi_{\theta}}(s_t, a_t)J(θ)=st∑dπθ(st)at∑πθ(at∣st)Qπθ(st,at)
2.梯度函数
-
目标函数的梯度(期望形式):
∇θJ(θ)=Est∼dπθ,at∼πθ[∇θlogπθ(at∣st)⋅Qw(st,at)]\nabla_{\theta} J(\theta) = \mathbb{E}_{s_t \sim d^{\pi_{\theta}}, a_t \sim \pi_{\theta}} \left[ \nabla_{\theta} \log \pi_{\theta}(a_t|s_t) \cdot Q_w(s_t, a_t) \right]∇θJ(θ)=Est∼dπθ,at∼πθ[∇θlogπθ(at∣st)⋅Qw(st,at)] -
目标函数的梯度(展开形式):
∇θJ(θ)=∑stdπθ(st)∑atπθ(at∣st)∇θlogπθ(at∣st)⋅Qw(st,at)\nabla_{\theta} J(\theta) = \sum_{s_t} d^{\pi_{\theta}}(s_t) \sum_{a_t} \pi_{\theta}(a_t|s_t) \nabla_{\theta} \log \pi_{\theta}(a_t|s_t) \cdot Q_w(s_t, a_t)∇θJ(θ)=st∑dπθ(st)at∑πθ(at∣st)∇θlogπθ(at∣st)⋅Qw(st,at)
3.符号解释
符号解释:
- dπθ(st)d^{\pi_{\theta}}(s_t)dπθ(st): 策略πθ\pi_{\theta}πθ下的状态分布
- Qw(st,at)Q_w(s_t, a_t)Qw(st,at): 由参数w近似的动作价值函数
4.优缺点
优点:
- 方差显著降低
- 样本效率提高
- 学习更稳定
缺点:
- 引入了估计偏差
- 对函数近似器的选择敏感
- 仍然是On-Policy
5.解决的问题
引入时序差分的思想,用Q值代替回报,单步更新,降低方差,提高样本效率
3 A2C算法:引入优势函数
1.目标函数
-
初始目标函数(期望形式):
J(θ)=Est∼dπθ,at∼πθ[Aπθ(st,at)]J(\theta) = \mathbb{E}_{s_t \sim d^{\pi_{\theta}}, a_t \sim \pi_{\theta}} [A^{\pi_{\theta}}(s_t, a_t)]J(θ)=Est∼dπθ,at∼πθ[Aπθ(st,at)] -
初始目标函数(展开形式):
J(θ)=∑stdπθ(st)∑atπθ(at∣st)Aπθ(st,at)J(\theta) = \sum_{s_t} d^{\pi_{\theta}}(s_t) \sum_{a_t} \pi_{\theta}(a_t|s_t) A^{\pi_{\theta}}(s_t, a_t)J(θ)=st∑dπθ(st)at∑πθ(at∣st)Aπθ(st,at)
2.梯度函数
-
目标函数的梯度(期望形式):
∇θJ(θ)=Est∼dπθ,at∼πθ[∇θlogπθ(at∣st)⋅Aπθ(st,at)]\nabla_{\theta} J(\theta) = \mathbb{E}_{s_t \sim d^{\pi_{\theta}}, a_t \sim \pi_{\theta}} \left[ \nabla_{\theta} \log \pi_{\theta}(a_t|s_t) \cdot A^{\pi_{\theta}}(s_t, a_t) \right]∇θJ(θ)=Est∼dπθ,at∼πθ[∇θlogπθ(at∣st)⋅Aπθ(st,at)] -
目标函数的梯度(展开形式):
∇θJ(θ)=∑stdπθ(st)∑atπθ(at∣st)∇θlogπθ(at∣st)⋅Aπθ(st,at)\nabla_{\theta} J(\theta) = \sum_{s_t} d^{\pi_{\theta}}(s_t) \sum_{a_t} \pi_{\theta}(a_t|s_t) \nabla_{\theta} \log \pi_{\theta}(a_t|s_t) \cdot A^{\pi_{\theta}}(s_t, a_t)∇θJ(θ)=st∑dπθ(st)at∑πθ(at∣st)∇θlogπθ(at∣st)⋅Aπθ(st,at)
3.符号解释
符号解释:
- Aπθ(st,at)A^{\pi_{\theta}}(s_t, a_t)Aπθ(st,at): 优势函数,Aπθ=Qπθ(st,at)−Vπθ(st)A^{\pi_{\theta}} = Q^{\pi_{\theta}}(s_t,a_t) - V^{\pi_{\theta}}(s_t)Aπθ=Qπθ(st,at)−Vπθ(st)
4.优缺点
优点:
- 方差进一步降低
- 学习更稳定、更快
- 探索性更好
缺点:
- 需要同时学习V和π
- 仍受限于On-Policy
5.解决的问题
引入基线,构造优势函数,用A值代替Q值,进一步降方差
4 Off-policy AC算法:引入重要性采样
1.目标函数
-
初始目标函数(期望形式):
J(θ)=Est∼dβ,at∼β[rt(θ)Aπθ]J(\theta) = \mathbb{E}_{s_t \sim d^{\beta}, a_t \sim \beta} \left[r_t(\theta) A_{\pi_{\theta}} \right]J(θ)=Est∼dβ,at∼β[rt(θ)Aπθ]
rt(θ)=πθ(at∣st)β(at∣st)r_t(\theta) = \frac{\pi_{\theta}(a_t|s_t)}{\beta(a_t|s_t)}rt(θ)=β(at∣st)πθ(at∣st)
Aπθ=Qπθ(st,at)−Vπθ(st)A_{\pi_{\theta}}=Q_{\pi_{\theta}}(s_t,a_t)-V_{\pi_{\theta}}(s_t)Aπθ=Qπθ(st,at)−Vπθ(st) -
初始目标函数(展开形式):
J(θ)=∑stdβ(st)∑atβ(at∣st)πθ(at∣st)β(at∣st)Aπθ(st,at)J(\theta) = \sum_{s_t} d^{\beta}(s_t) \sum_{a_t} \beta(a_t|s_t) \frac{\pi_{\theta}(a_t|s_t)}{\beta(a_t|s_t)} A_{\pi_{\theta}}(s_t, a_t)J(θ)=st∑dβ(st)at∑β(at∣st)β(at∣st)πθ(at∣st)Aπθ(st,at)
2.梯度函数
-
目标函数的梯度(期望形式):
∇θJ(θ)=Est∼dβ,at∼β[πθ(at∣st)β(at∣st)∇θlogπθ(at∣st)⋅Aπθ]\nabla_{\theta} J(\theta) = \mathbb{E}_{s_t \sim d^{\beta}, a_t \sim \beta} \left[ \frac{\pi_{\theta}(a_t|s_t)}{\beta(a_t|s_t)} \nabla_{\theta} \log \pi_{\theta}(a_t|s_t) \cdot A_{\pi_{\theta}} \right]∇θJ(θ)=Est∼dβ,at∼β[β(at∣st)πθ(at∣st)∇θlogπθ(at∣st)⋅Aπθ] -
目标函数的梯度(展开形式):
∇θJ(θ)=∑stdβ(st)∑atβ(at∣st)(πθ(at∣st)β(at∣st)∇θlogπθ(at∣st)⋅Aπθ)\nabla_{\theta} J(\theta) = \sum_{s_t} d^{\beta}(s_t) \sum_{a_t} \beta(a_t|s_t) \left( \frac{\pi_{\theta}(a_t|s_t)}{\beta(a_t|s_t)} \nabla_{\theta} \log \pi_{\theta}(a_t|s_t) \cdot A_{\pi_{\theta}} \right)∇θJ(θ)=st∑dβ(st)at∑β(at∣st)(β(at∣st)πθ(at∣st)∇θlogπθ(at∣st)⋅Aπθ)
3.符号解释
符号解释:
- β(at∣st)\beta(a_t|s_t)β(at∣st): 行为策略
- πθ(at∣st)β(at∣st)\frac{\pi_{\theta}(a_t|s_t)}{\beta(a_t|s_t)}β(at∣st)πθ(at∣st): 重要性采样比率
4.优缺点
优点:
- 极高的样本效率
- 探索与利用分离
- 适用于大规模问题
缺点:
- 高方差问题
- 数值不稳定
- 理论复杂
5.解决的问题
引入重要采样,可复用历史数据,将on-policy的AC方法转化为off-policy的方法
5 PPO1算法:限制策略更新幅度
1.目标函数
- 初始目标函数(期望形式):
J(θ)=Est∼dπθold,at∼πθold[rt(θ)Aπθ−β⋅KL[πθold(⋅∣st)∣∣πθ(⋅∣st)]]J(\theta) = \mathbb{E}_{s_t \sim d^{\pi_{\theta_{old}}}, a_t \sim \pi_{\theta_{old}}} \left[ r_t(\theta) A_{\pi_{\theta}} - \beta \cdot \text{KL}[\pi_{\theta_{old}}(\cdot|s_t) || \pi_{\theta}(\cdot|s_t)] \right]J(θ)=Est∼dπθold,at∼πθold[rt(θ)Aπθ−β⋅KL[πθold(⋅∣st)∣∣πθ(⋅∣st)]]
rt(θ)=πθ(at∣st)β(at∣st)r_t(\theta) = \frac{\pi_{\theta}(a_t|s_t)}{\beta(a_t|s_t)}rt(θ)=β(at∣st)πθ(at∣st)
Aπθ=Q(st,at)−V(st)A_{\pi_{\theta}}=Q(s_t,a_t)-V(s_t)Aπθ=Q(st,at)−V(st)
2.梯度函数
- 目标函数的梯度:涉及约束优化,无简单形式,用的不多,后续补上
3.符号解释
符号解释:
- πθold\pi_{\theta_{old}}πθold: 旧策略
- KL\text{KL}KL: KL散度
- β\betaβ: 惩罚系数
4.优缺点
优点:
- 训练稳定
- 方差更低
- 更少的超参数调优
缺点:
- 计算成本较高
- 性能可能稍逊于TRPO
5.解决的问题
引入信任域思想,约束策略变化,
6 PPO2算法:引入裁剪简化算法
- 初始目标函数(期望形式):
Jactor(θ)=Est∼dπθold,at∼πθold[min(rt(θ)Aπθ,clip(rt(θ),1−ϵ,1+ϵ)Aπθ)]J_{actor}({\theta}) = \mathbb{E}_{s_t \sim d^{\pi_{\theta_{old}}}, a_t \sim \pi_{\theta_{old}}} \left[ \min \left( r_t(\theta) A_{\pi_{\theta}}, \text{clip} \left( r_t(\theta), 1-\epsilon, 1+\epsilon \right) A_{\pi_{\theta}} \right) \right]Jactor(θ)=Est∼dπθold,at∼πθold[min(rt(θ)Aπθ,clip(rt(θ),1−ϵ,1+ϵ)Aπθ)]
rt(θ)=πθ(at∣st)πθold(at∣st)r_t(\theta) = \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}rt(θ)=πθold(at∣st)πθ(at∣st)
Aπθ=Q(st,at)−V(st)A_{\pi_{\theta}}=Q(s_t,a_t)-V(s_t)Aπθ=Q(st,at)−V(st) - 目标函数的梯度:通过自动微分计算
符号解释:
- clip\text{clip}clip: 裁剪函数
- ϵ\epsilonϵ: 裁剪幅度超参数
- AπθA_{\pi_{\theta}}Aπθ优势函数,PPO实际上采用的是GAE版本的优势函数,可参考博客:深入解析强化学习中的 Generalized Advantage Estimation (GAE)
优点:
- 实现简单,计算高效
- 训练非常稳定
- 成为主流算法
缺点:
- 超参数ϵ\epsilonϵ敏感
- 可能限制探索
7 总结
从REINFORCE到PPO2的演进过程,清晰地展示了深度强化学习算法在发展中所追求的核心目标:在保持无偏或可控偏差的前提下,不断降低方差、提高样本效率、增强训练稳定性。
- REINFORCE 作为起点,奠定了策略梯度的基础,但其高方差和低样本效率是主要瓶颈。
- QAC 和 A2C 通过引入价值函数近似和优势函数,有效降低了方差并实现了更高效的在线更新。
- Off-policy AC 利用重要性采样打破了on-policy的限制,大幅提升了样本效率,但引入了新的方差问题。
- PPO1 和 PPO2 通过限制策略更新幅度(KL约束或裁剪),极大地增强了训练的稳定性,使算法更易于使用和调参,最终成为当前最流行的策略梯度算法之一。
后记
在deepseek辅助下完成。