PPO算法的核心思想是通过限制新旧策略之间的变化,防止策略更新过度。具体来说,PPO通过以下目标函数来更新策略:
L CLIP ( θ ) = E t [ min ( r t ( θ ) A ^ t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) ] 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) \hat{A}_t \right) \right] LCLIP(θ)=Et[min(rt(θ)A^t, clip(rt(θ),1−ϵ,1+ϵ)A^t)]
其中:
- r t ( θ ) = π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) r_t(\theta) = \dfrac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)} rt(θ)=πθold(at∣st)πθ(at∣st) 表示新旧策略的概率比。
- A ^ t \hat{A}_t A^t 是优势函数的估计。
- ϵ \epsilon ϵ 是控制策略更新幅度的超参数。
2.1 优势函数估计
优势函数 A ^ t \hat{A}_t A^t 可以通过广义优势估计(Generalized Advantage Estimation,GAE)来计算:
A ^ t = δ t + ( γ λ ) δ t + 1 + ( γ λ ) 2 δ t + 2 + … \hat{A}_t = \delta_t + (\gamma \lambda) \delta_{t+1} + (\gamma \lambda)^2 \delta_{t+2} + \dots A^t=δt+(γλ)δt+1+(γλ)2δt+2+…
其中,TD残差 δ t \delta_t δt 定义为:
δ t = r t + γ V ( s t + 1 ) − V ( s t ) \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) δt=rt+γV(st+1)−V(st)
γ \gamma γ 是折扣因子, λ \lambda λ 是用于平衡偏差和方差的超参数。
2.2 策略更新
PPO的策略更新通过最大化 L CLIP ( θ ) L^{\text{CLIP}}(\theta) LCLIP(θ) 来实现。由于引入了 clip \text{clip} clip 操作,损失函数对 r t ( θ ) r_t(\theta) rt(θ) 的变化在 [ 1 − ϵ , 1 + ϵ ] [1 - \epsilon, 1 + \epsilon] [1−ϵ,1+ϵ] 范围之外不再敏感,从而限制了每次更新的步幅。
2.3 价值网络更新
除了策略网络,PPO还使用价值网络来估计状态值函数 V ( s ) V(s) V(s),其损失函数为:
L VF ( θ ) = E t [ ( V θ ( s t ) − V t target ) 2 ] L^{\text{VF}}(\theta) = \mathbb{E}_t \left[ \left( V_\theta(s_t) - V_t^{\text{target}} \right)^2 \right] LVF(θ)=Et[(Vθ(st)−Vttarget)2]
其中, V t target V_t^{\text{target}} Vttarget 是对真实价值的估计,例如使用TD目标:
V t target = r t + γ V ( s t + 1 ) V_t^{\text{target}} = r_t + \gamma V(s_{t+1}) Vttarget=rt+γV(st+1)
2.4 总损失函数
综合考虑策略损失和价值函数损失,以及可能的熵正则项,PPO的总损失函数为:
L ( θ ) = L CLIP ( θ ) − c 1 L VF ( θ ) + c 2 S [ π θ ] ( s t ) L(\theta) = L^{\text{CLIP}}(\theta) - c_1 L^{\text{VF}}(\theta) + c_2 S[\pi_\theta](s_t) L(θ)=LCLIP(θ)−c1LVF(θ)+c2S[πθ](st)
其中:
- c 1 c_1 c1 和 c 2 c_2 c2 是权衡各项损失的系数。
- S [ π θ ] ( s t ) S[\pi_\theta](s_t) S[πθ](st) 是策略的熵,鼓励探索。