[RL/Policy Optimization] PPO

符号定义#

符号含义
$\pi_\theta(a|s)$参数为$\theta$的策略概率
$\theta_{old}$用于采样时的旧策略
$r_t(\theta)$概率比率,借鉴重要性采样的思想
$A_t$优势函数,衡量某动作相对于baseline的好坏
$\epsilon$截断阈值

目标函数#

定义单步的伪目标:

$$L^{CLIP}(\theta)=\mathbb{E}[\min(r_t(\theta)\hat A_t,clip(r_t(\theta),1-\epsilon,1+\epsilon)\hat A_t)]$$

式中,

$$r_t(\theta)=\frac{\pi_\theta(a_t|s_t)}{\pi_{old}(a_t|s_t)}$$

总体策略是最大化$\mathbb{E}_t[L^{CLIP}(\theta)]$

通常实际训练将最小化下面的loss,即

$$L(\theta)=-E_t[L_t^{CLIP}(\theta)]+c_1 E_t[(V_\theta(s_t)-R_t)^2]-c_2 E_t[H(\pi_\theta(\cdot|s_t))]$$

  • 第一项:策略目标
  • 第二项:值函数回归损失,$c_1$为value coeff
  • 第三项:熵奖励,鼓励探索,$c_2$ 为entropy coeff

优势 $A_t$ 估计#

常用Generalized Advantage Estimation来估计$A_t$:

$$\delta_t=r_t+\gamma V(s_{t+1})-V(s_t)$$

$$A_t=\sum_{l=0}^{\infty} (\gamma\lambda)^l \delta_{t+l}$$

返回,即target of value通常为:

$$R_t=A_t+V(s_t)$$

或直接使用n-step return。必做标准化。

算法流程#

  1. 用当前策略$\pi_{\theta_{old}}$与环境交互,收集一批轨迹/步,譬如T步或N traj
  2. 计算每个timestep的$\log \pi_{\theta_{old}}(a|s)$,奖励$r$、$V(s)$、GAE advantage $A_t$以及返回 $R_t$
  3. 将这批数据随机打乱,分为minibatches
  4. 对每个minibatch重复多次epoch:用$\theta$重新计算新的log-prob、ratio $r_t$,计算上面的loss并做梯度下降
  5. 更新 $\theta_{old}\leftarrow \theta$,开始收集下一轮数据