上一篇 从采样轨迹构造了 policy gradient 和 advantage estimate。这篇接着回答:策略已经变化后,旧数据还能怎么用,以及一轮更新应该走多远。沿用 𝜋𝜃(𝑎∣𝑠) 表示当前策略,ˆA(𝑠,𝑎) 表示求导时固定的 advantage estimate;轨迹记为 𝜏,总 reward 为 𝑟(𝜏)。
系列导读 · 上一篇 · 下一篇
有了 advantage estimate,还要决定如何使用一批轨迹更新策略。先看旧数据与当前策略之间的分布差异,再看 TRPO 和 PPO 如何限制单轮更新的幅度。
Off-Policy Policy Gradients
上一篇的梯度估计 使用 on-policy 数据。但真实在训练的时候,我们很难做到稍稍改一点 𝜃,就重新生成一堆新的 𝜏。这样是非常 inefficient 的。
所以现在可能的问题是,我们没有关于 𝜏∼𝜋𝜃 的数据,但是我们可能有一个其他的 distribution,通过这个 distribution 来 sample 出的数据。也就是 𝜏∼――𝜋。
我们需要使用的一个 trick 叫做 importance sampling:
𝔼𝑥∼𝑝(𝑥)[𝑓(𝑥)]=∫𝑝(𝑥)𝑓(𝑥)d𝑥=∫𝑞(𝑥)𝑝(𝑥)𝑞(𝑥)𝑓(𝑥)d𝑥=𝔼𝑥∼𝑞(𝑥)[𝑝(𝑥)𝑞(𝑥)𝑓(𝑥)]
所以说我们的 RL objective 可以改成:
J(𝜃)=𝔼𝜏∼――𝜋[𝜋𝜃(𝜏)――𝜋(𝜏)𝑟(𝜏)]=𝔼𝜏∼――𝜋[𝑝(𝑠1)∏𝑇𝑡=1𝜋𝜃(𝑎𝑡∣𝑠𝑡)𝑝(𝑠𝑡+1∣𝑠𝑡,𝑎𝑡)𝑝(𝑠1)∏𝑇𝑡=1――𝜋(𝑎𝑡∣𝑠𝑡)𝑝(𝑠𝑡+1∣𝑠𝑡,𝑎𝑡)𝑟(𝜏)]=𝔼𝜏∼――𝜋[𝑟(𝜏)𝑇∏𝑡=1𝜋𝜃(𝑎𝑡∣𝑠𝑡)――𝜋(𝑎𝑡∣𝑠𝑡)]
所以说我们可以推导梯度
∇𝜃J(𝜃)=𝔼𝜏∼――𝜋[𝜋𝜃(𝜏)――𝜋(𝜏)∇𝜃log𝜋𝜃(𝜏)𝑟(𝜏)]=𝔼𝜏∼――𝜋[(𝑇∏𝑡=1𝜋𝜃(𝑎𝑡∣𝑠𝑡)――𝜋(𝑎𝑡∣𝑠𝑡))(𝑇∑𝑡=1∇𝜃log𝜋𝜃(𝑎𝑡∣𝑠𝑡))(𝑇∑𝑡=1𝑟(𝑠𝑡,𝑎𝑡))]=𝔼𝜏∼――𝜋[𝑇∑𝑡=1∇𝜃log𝜋𝜃(𝑎𝑡∣𝑠𝑡)(𝑡∏𝑡′=1𝜋𝜃(𝑎𝑡′∣𝑠𝑡′)――𝜋(𝑎𝑡′∣𝑠𝑡′))⋅(𝑇∑𝑡′=𝑡𝑟(𝑠𝑡′,𝑎𝑡′)𝑡′∏𝑡″=𝑡+1𝜋𝜃(𝑎𝑡″∣𝑠𝑡″)――𝜋(𝑎𝑡″∣𝑠𝑡″))]
完整 trajectory ratio 给出了复用数据的理论起点,但长轨迹上的乘积权重可能难以使用。接下来转向旧策略访问的 state 上的 surrogate,并限制新旧策略之间的变化。
Trust Region Policy Optimization
TRPO (Schulman et al., 2015) / Spinning Up tutorial (Achiam, 2018)。
𝜃𝑘+1=argmax𝜃L𝜃𝑘(𝜃)s.t.――𝐷KL(𝜃𝑘‖𝜃)≤𝛿.
其中
L𝜃𝑘(𝜃)=𝔼(𝑠,𝑎)∼𝜋𝜃𝑘[𝜋𝜃(𝑎∣𝑠)𝜋𝜃𝑘(𝑎∣𝑠)ˆA𝜋𝜃𝑘(𝑠,𝑎)],
――𝐷KL(𝜃𝑘‖𝜃)=𝔼𝑠∼𝜋𝜃𝑘[𝐷KL(𝜋𝜃𝑘(⋅∣𝑠)‖𝜋𝜃(⋅∣𝑠))].
这里的 state 分布来自旧策略的访问分布;一轮优化中,采样数据、旧策略与 advantage estimates 都固定。
Proximal Policy Optimization
PPO paper (Schulman et al., 2017) / OpenAI tutorial (Achiam, 2018) / Hugging Face tutorial (Simonini & Sanseviero, 2023)。
TRPO 这么复杂,主要是因为它的限制和 L 是分开的。文章提出了两种把更新限制放进 surrogate objective 的方法:PPO-Penalty 和 PPO-Clip。
PPO-Clip
我们对式子略加修改。先记概率比
𝜌𝜃(𝑠,𝑎)=𝜋𝜃(𝑎∣𝑠)𝜋𝜃𝑘(𝑎∣𝑠).
那么
𝜃𝑘+1=argmax𝜃𝔼(𝑠,𝑎)∼𝜋𝜃𝑘[min{𝜌𝜃(𝑠,𝑎)ˆA(𝑠,𝑎),clip(𝜌𝜃(𝑠,𝑎),1−𝜖,1+𝜖)ˆA(𝑠,𝑎)}].
其中
clip(𝑥,𝑙,𝑢)=⎧{
{⎨{
{⎩𝑙,𝑥<𝑙,𝑥,𝑙≤𝑥≤𝑢,𝑢,𝑥>𝑢.
大概感性理解是这样的:ˆA>0 时,我们希望增大这个 action 的概率;ˆA<0 时,希望减小它的概率。但是当概率比沿着有利方向变化太多,就不再继续奖励这个变化。具体地,正 advantage 在 𝜌𝜃>1+𝜖 时截平,负 advantage 在 𝜌𝜃<1−𝜖 时截平。
它不是把所有概率比硬限制在区间里;共享参数下,其他样本的梯度仍可能继续改变这个 action 的概率。
PPO-Penalty
非常直觉的式子:
𝜃𝑘+1=argmax𝜃{𝔼(𝑠,𝑎)∼𝜋𝜃𝑘[𝜌𝜃(𝑠,𝑎)ˆA(𝑠,𝑎)]−𝛽――𝐷KL(𝜃𝑘‖𝜃)}.
但是捏,固定一个 𝛽 不一定合适。我们既想优化前面那部分,又想控制每一步离旧策略多远。那咋搞呢,就是让 𝛽 动起来。跑一段优化,就去康康这个
𝑑=̂𝔼𝑠∼𝜋𝜃𝑘[𝐷KL(𝜋𝜃𝑘(⋅∣𝑠)‖𝜋𝜃(⋅∣𝑠))].
直觉上就是这玩意儿如果大了,就说明太远了,那我们得稍微调高一下 𝛽;如果太小,就可以把 𝛽 搞低,允许更大的更新。
所以说我们可以定一个阈值 𝑑targ:
𝛽←⎧{
{⎨{
{⎩𝛽/2,𝑑<𝑑targ/1.5,𝛽,𝑑targ/1.5≤𝑑≤1.5𝑑targ,2𝛽,𝑑>1.5𝑑targ.
系列导读 · 上一篇 · 下一篇
References
Achiam, J. (2018).
Spinning Up in Deep Reinforcement Learning.
spinningup.openai.com
Schulman, J., Levine, S., Moritz, P., Jordan, M., & Abbeel, P. (2015). Trust region policy optimization.
Proceedings of the 32nd International Conference on International Conference on Machine Learning - Volume 37, 1889–1897.
proceedings.mlr.press
Schulman, J., Wolski, F., Dhariwal, P., Radford, A., & Klimov, O. (2017). Proximal policy optimization algorithms.
arXiv Preprint arXiv:1707.06347.
arxiv.org
Simonini, T., & Sanseviero, O. (2023). The Hugging Face Deep Reinforcement Learning Class. In
GitHub repository. GitHub.
github.com