文章地址:
PPG:Phasic Policy Gradient
一. PPG资料
PPG相关BLOG①
PPG相关Demo(PyTorch版)
二. PPG原理简述
2.1 背景
PPG是一种相对于PPO来说,提升sample efficiency的算法。
传统on-policy actor-critic方法,可通过共享网络或单独的网络来分别表示policy和value function:用单独的网络分别表示policy和value function的好处是可以避免训练目标之间的干扰;用共享网络的方式可以用来共享有用的特征信息。
PPG文中给出了用共享网络训练policy net和value function net的优势:每个目标训练的特征可以用来更好的优化另一个目标。但是共享网络存在的劣势就是:任何想要用同一个网络去优化这两个目标的方法都必须为每个目标分配一个相对的权重,但是不管超参数调整的多么好,都无法阻止两个优化目标之间的相互干扰;其次就是使用共享网络来优化policy 和 value function就需要用同样的数据来训练这两个网络,并且数据的sample reuse也一致,这并不是理想的情况。
对于on-policy actor-critic算法有两个特性:
2.2原理
PPG就解决了上述这两个问题
PPG是一种能够保持 policy net 和 value function net 之间特征共享且能够解耦这两个网络训练的算法,那么文中是如何解决这两个问题的呢,首先来看解耦两个网络训练这个操作,实际上就是分别用两个网络训练policy和value function,如下图所示(先不管policy net输出的
V
θ
π
(
s
)
V_\theta{_\pi}(s)
Vθπ(s)):
接下来看是如何实现所谓的特征共享从而加快收敛,简单的概括一下就是让policy net输出的
V
θ
π
(
s
)
V_\theta{_\pi}(s)
Vθπ(s)逼近 value function net输出的
V
θ
v
(
s
)
V_\theta{_v}(s)
Vθv(s),同时通过KL散度来约束policy不会更新的太多,amazing。
PPG算法训练总体分为两个阶段:先是policy phase,接着是auxiliary phase,这两个阶段交替进行:在policy phase中采用PPO的更新方式,如下图所示:
在auxiliary phase中按照下式进行更新,这样就巧妙的近似实现了“共享”:
最终得到的PPG算法如下:
从算法伪代码中可以看出,value net也可以训练更多的次数,没有必要必须与policy net的训练次数保持一致,这也解决了之前共享网络时所存在的问题。
先写到这里吧