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