一、传统强化算法的局限性
- 步长极度敏感,训练稳定性极差
- 样本利用率极低
- 梯度方差过大
1.1 前置:策略梯度算法的核心逻辑
- 强化学习目标 :
J(θ)=Eτ∼πθ(a∣s)[∑t=0Tγtytrt]J(θ)=E_{τ∼π_θ(a∣s)}[∑_{t=0}^{T} γ^ty_tr_t]J(θ)=Eτ∼πθ(a∣s)[t=0∑Tγtytrt]
这是策略梯度方法中要优化的目标函数。它计算了策略 𝜋𝜃(𝑎∣𝑠)𝜋_𝜃(𝑎∣𝑠)𝜋𝜃(a∣s)在参数 𝜃下的期望回报(奖励)。
- 𝐸表示期望值。
- 𝜏∼𝜋𝜃(𝑎∣𝑠)𝜏∼𝜋_𝜃(𝑎∣𝑠)𝜏∼𝜋𝜃(a∣s)表示根据策略 𝜋𝜃(𝑎∣𝑠)𝜋_𝜃(𝑎∣𝑠)𝜋𝜃(a∣s)采样得到的轨迹 𝜏。
- 累加和 ∑𝑡=0𝑇𝛾𝑡𝑦𝑡𝑟𝑡∑_{𝑡=0}^𝑇𝛾^𝑡𝑦_𝑡𝑟_𝑡∑t=0T𝛾tytrt 表示时间上的折扣累积奖励,其中:
- 𝛾𝑡𝛾^𝑡𝛾t是时间步 𝑡 的折扣因子。
- 𝑟𝑡𝑟_𝑡rt 是时间步的奖励。
- 𝑦𝑡𝑦_𝑡yt可能是一个权重因子(在标准强化学习中通常设为 1)。
该函数量化了策略在一段时间内根据所获得的奖励的整体表现。
- 策略梯度定理简化后的梯度公式:
∇θJ(θ)=E(st,at)∼πθ[∇θlogπθ(at∣st)⋅At]∇θJ(θ)=E{(st,at)∼π_θ}[∇_θlogπ_θ(a_t∣s_t)⋅A_t]∇θJ(θ)=E(st,at)∼πθ[∇θlogπθ(at∣st)⋅At]
- 它给出了目标函数 𝐽(𝜃)对策略参数 𝜃的梯度,通常用于更新策略。
- ∇𝜃𝐽(𝜃)∇_𝜃𝐽(𝜃)∇𝜃J(𝜃)是目标函数 𝐽(𝜃)对策略参数 𝜃的梯度。
- 𝐸(𝑠𝑡,𝑎𝑡)∼𝜋𝜃𝐸_{(𝑠_𝑡,𝑎_𝑡)∼𝜋_𝜃}E(st,at)∼𝜋𝜃表示我们是在当前策略 𝜋𝜃(𝑎𝑡∣𝑠𝑡)下𝜋_𝜃(𝑎_𝑡∣𝑠_𝑡)下𝜋𝜃(at∣st)下,对状态 𝑠𝑡𝑠_𝑡st和动作𝑎𝑡𝑎_𝑡at进行采样后的期望。
- ∇𝜃log𝜋𝜃(𝑎𝑡∣𝑠𝑡)∇_𝜃log𝜋_𝜃(𝑎_𝑡∣𝑠_𝑡)∇𝜃log𝜋𝜃(at∣st)是策略概率的对数的梯度,表示策略参数的变化对选择动作 𝑎𝑡𝑎𝑡at的影响程度。
- 𝐴𝑡𝐴_𝑡At是优势函数,它表示在给定状态 𝑠𝑡𝑠_𝑡st下,采取动作 𝑎𝑡𝑎_𝑡at相较于其他可能动作的优势。它本质上衡量了某个动作相对于该状态下的平均动作的相对优势。
核心含义:
- log𝜋𝜃(𝑎𝑡∣𝑠𝑡)log𝜋_𝜃(𝑎_𝑡∣𝑠_𝑡)log𝜋𝜃(at∣st): 这个项表示在状态𝑠𝑡𝑠_𝑡st下采取动作𝑎𝑡𝑎_𝑡at的对数概率,它反映了在给定状态下选择动作𝑎𝑡𝑎_𝑡at的可能性。
-𝐴𝑡𝐴_𝑡At: 优势函数,帮助改善策略。它通过指示采取的动作相较于其他动作在该状态下的表现是否更好来调整策略。如果该动作表现更好,𝐴𝑡𝐴_𝑡At为正值,鼓励策略在未来采取类似的动作。
1.2 TRPO
通过限制策略更新的幅度 ,使得每次更新都在"信任区域"内进行,解决步长敏感,避免了大步长更新带来的不稳定性。
- 信任区域:KL散度约束 :TRPO通过限制新策略和旧策略之间的KL散度(Kullback-Leibler Divergence),确保新策略不会偏离旧策略太远。KL散度衡量了两个概率分布之间的差异。
- 二阶优化:TRPO使用二阶优化方法(如共轭梯度法)来计算更新方向,进一步提高了优化的效率和稳定性。
- 优化目标 :TRPO的优化目标是最大化期望回报,同时施加KL散度约束,确保策略更新不会过大。
maxθEst,at∼πθ[πθ(at∣st)πθold(at∣st)At]\max_\theta\mathbb{E}{s_t,a_t\sim\pi\theta}\begin{bmatrix}\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{\mathrm{old}}}(a_t|s_t)}A_t\end{bmatrix}θmaxEst,at∼πθ[πθold(at∣st)πθ(at∣st)At]
其中,πθold\pi_\mathrm{\theta_\mathrm{old}}πθold是当前的策略,πθ\pi_\mathrm{\theta}πθ是新策略,AtA_tAt是优势函数,KL散度约束确保
E[\mathbb{E} [E[KL(πθold∣∣πθ)]≤δ( \pi _{\theta _\mathrm{old}}| | \pi _\theta ) ] \leq \delta(πθold∣∣πθ)]≤δ (δ\deltaδ是预设的最大KL散度) 。
1.3 PPO
二阶优化方法,计算和实现较为复杂,PPO在TRPO的基础上进行改进,保留了信任区域 的思想,通过 裁剪clipping 来近似TRPO的KL散度约束,从而在保证稳定性的同时简化了优化过程。
核心思想 :
PPO通过限制策略更新的比率 (而不是直接控制KL散度)来约束策略变化。具体来
说,PPO通过修改目标函数,引入一个裁剪项,确保更新不会过大。优化目标可以写成如下形式:
Et[min(rt(θ)At,clip(rt(θ),1−ϵ,1+ϵ)At)]\mathbb{E}_t\left[\min\left(r_t(\theta)A_t,\mathrm{clip}(r_t(\theta),1-\epsilon,1+\epsilon)A_t\right)\right]Et[min(rt(θ)At,clip(rt(θ),1−ϵ,1+ϵ)At)]
- rt(θ)r_t(\theta)rt(θ)是当前策略与旧策略在状态𝑠𝑡𝑠_𝑡st下选择动作a𝑡a_𝑡at的比率,衡量两者差异:πθ(at∣st)πθold(at∣st)\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_\mathrm{old}}(a_t|s_t)}πθold(at∣st)πθ(at∣st)
- 裁剪操作:通过限制比率rt(θ)r_t(\theta)rt(θ)的变化范围在[1−ϵ,1+ϵ][1-\epsilon,1+\epsilon][1−ϵ,1+ϵ]内,PPO避免了策略变化过大的问题。