11. PPO(Proximal Policy Optimization)¶
本章介绍PPO,PPO要解决的问题说到底就是使用了重要性采样使得Policy Gradient由on-policy变为off-policy的时候,用于sample的policy的参数和agent的policy的参数不能相差太大,因此通过引入KL散度,为了让两个policy的参数尽可能接近,通过引入KL散度的方法的不同又可以分为TRPO,PPO-Penalty,PPO-Clip。
11.1. KL Divergence¶
直观理解: 刻画两种概率分布之间的“差距”。如果真实分布是\(p\)\(\) ,但你错误地以为分布是\(q\) ,你会损失多少信息。
定义: 假设有两个概率分布 \(p\) 和 \(q\),定义在同一个集合上。KL 散度为:
如果是连续分布,求和换成积分:
当两个分布完全相同时\(D_{KL}=0\)。
11.2. GAE(Generalized Advantage Estimation)¶
一种用于求Advantage的方法,在MC方法和TD方法中的trade-off。
优势函数的定义:
- 用TD方法求(A2C的做法):
$$ \hat{A}t^{(1)} = \delta_t = r{t+1} + \gamma v(s_{t+1}) - v(s_t) $$
偏差大,严重依赖当前价值函数 \(v(s, w)\) 的准确性。如果 \(v\) 估得不对,优势函数步步皆错。
- 用完整的MC回报:
$$ \hat{A}t^{(\infty)} = \left( \sum{k=0}^{\infty} \gamma^k r_{t+k+1} \right) - v(s_t) = G_t - v(s_t) $$
方差高,涉及整个 Episode 的所有随机变量,如果环境随机性大或 Episode 很长,方差会爆炸。
- GAE方法:
$$ \hat{A}t^{GAE} = \delta_t + \gamma \lambda \delta{t+1} + (\gamma \lambda)^2 \delta_{t+2} + \cdots = \sum_{l=0}^{\infty} (\gamma \lambda)^l \delta_{t+l} $$
💡其意义在于保证优势的数值准确的同时稳定。
11.3. TRPO (Trust Region Policy Optimization)¶
TRPO 目标函数:
约束条件(置信区域) :
11.4. PPO-Penalty¶
初始化:
- 初始化策略参数 \(\theta^0\)。
每一轮迭代:
- 使用当前策略 \(\theta^k\) 与环境交互,收集轨迹数据 \(\{s_t, a_t\}\) 并计算优势函数 \(A^{\theta^k}(s_t, a_t)\)。
- 寻找最优的 \(\theta\) 来最大化 \(J_{PPO}(\theta)\)。
核心目标函数:
替代目标函数 (Surrogate Objective) :
自适应 KL 惩罚系数更新:
- 如果 \(KL(\theta, \theta^k) > KL_{max}\),增大 \(\beta\)(惩罚更严厉,减小步长)。
- 如果 \(KL(\theta, \theta^k) < KL_{min}\),减小 \(\beta\)(放宽限制,允许更大步长)。
11.5. PPO-Clip¶
与PPO-Penalty的区别为将目标函数中的KL散度使用了简单了Clip机制进行刻画:
PPO-Clip 的 Loss 梯度形式:
-
定义:
概率比率:
\[ r_t(\theta)= \frac{\pi(a_t|s_t,\theta)} {\pi(a_t|s_t,\theta_{old})} \]优势函数:
\[ \hat A_t \] -
Policy Loss:
PPO-Clip 目标函数:
\[ L^{CLIP}(\theta) = \mathbb{E}_t \left[ \min \left( r_t(\theta)\hat A_t,\; ext{clip}(r_t(\theta),1-\epsilon,1+\epsilon)\hat A_t \right) \right] \]Policy 梯度:
由于\(\pi(a_t|s_t,\theta_{old})\)是常数,因此
\[ \nabla_\theta r_t(\theta) = r_t(\theta) \nabla_\theta \log \pi(a_t|s_t,\theta) \]因此:
\[ \nabla_\theta L^{CLIP} = \mathbb{E}_t \left[ g_t \hat A_t \nabla_\theta \log \pi(a_t|s_t,\theta) \right] \]其中:
\[ g_t= \begin{cases} r_t(\theta), & \text{if not clipped} \\ 0, & \text{if clipped} \end{cases} \] -
Critic Loss:
价值函数损失:
\[ L^{critic}(\phi) = \mathbb{E}_t \left[ (V(s_t,\phi)-\hat R_t)^2 \right] \]Critic 梯度:
\[ \nabla_\phi L^{critic} = \mathbb{E}_t \left[ 2 \big( V(s_t,\phi)-\hat R_t \big) \nabla_\phi V(s_t,\phi) \right] \] -
Actor 加上 Entropy:
\[ L^{actor} = L^{CLIP} + c_{ent} \mathbb{E}_t \left[ H(\pi(\cdot|s_t)) \right] \]梯度:
\[ \nabla_\theta L^{actor} = \nabla_\theta L^{CLIP} + c_{ent} \nabla_\theta H(\pi) \] -
最终参数更新:
Actor:
\[ heta \leftarrow heta + \alpha_\theta \nabla_\theta L^{actor} \]Critic:
\[ \phi \leftarrow \phi - \alpha_\phi \nabla_\phi L^{critic} \]