PPO
abstract
PPO通过与环境交互来采样数据和使用随机梯度上升优化"替代"目标函数之间交替使用。鉴于标准策略梯度方法对每个数据严格不能执行一次梯度更新,本文章提出了一个新的目标函数,该函数支持多个epochs的小批量更新。
Introduction
本文使用的算法在仅使用一阶优化的情况下,可实现TRPO的数据效率和可靠性能。本文提出了一种新的具有截断概率比的目标,形成了策略性能的下界。为了优化策略,本文在从策略中采样数据和对采样数据执行优化之间及逆行交替。
Background: Policy Optimization
在trpo中,目标函数是在约束下对目标进行最大化策略更新。即,
\(\theta_{old}\)是更新前策略参数的向量。在对目标进行线性近似和对约束进行二次近似后,可以使用共轭梯度算法有效地近似求解该问题,也可以将上述的问题转化为下面无约束的问题
对于上述问题,能够实现的前提是,上述目标( 计算状态上的最大KL散度而不是平均值)能够对策略\(\pi\)的性能估计形成了下界,这个和参数\(\beta\)相关。但是在TRPO使用硬约束而不是惩罚,因此很难选择一个\(\beta\)的值,使得该值在不同的问题中表现良好,甚至在单个问题中表现良好。因此为了实现模拟TRPO单调改进的一阶算法的目标,实验表明,仅仅选择一个固定的惩罚系数\(\beta\)并用SGD优化惩罚目标方程是不够的,需要进行额外的修改。
Clipped Surrogate Objective
首先令\(r_t(\theta)=\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}\),显然\(r_t(\theta_{old})=1\)
那么TRPO的优化目标可以修改为;\(L^{CPI}(\theta)=\widehat E_t[\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}\widehat A_t]=\widehat E_t[r_t(\theta)\widehat A_t]\)
上述CPI指的是保守策略迭代,如果没有约束,\(L^{CPI}\)的最大化将导致过大的策略更新;因此,现在考虑如何修改目标,能够惩罚\(r_t(\theta)\)远离1时的策略变化。
因此,为了完成上述目标。提出来的目标如下:
\[L^{CLIP}(\theta)=\widehat E_t\{min[r_t(\theta)\widehat A_t,clip(r_t(\theta),1-\epsilon,1+\epsilon)\widehat A_t]\} \]其中\(\epsilon\)为超参数.
Adaptive KL Penalty Coeffcient
还有另外一种方法,可以用作裁剪代理目标的替代,或作用补充,即对KL散度进行惩罚并调整惩罚系数,以使我们在每次策略更新时实现KL散度的某个目标值。最简单的算法流程如下:
- 使用小批量更新SGD,优化KL-惩罚目标:
- \(L^{KLPEN}(\theta)=\widehat E_t[\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}\widehat A_t-\beta KL[\pi_{\theta_{old}}(\cdot|s_t),\pi_\theta(\cdot|s_t)]]\)
- 计算\(d=\widehat E_t[ KL[\pi_{\theta_{old}}(\cdot|s_t),\pi_\theta(\cdot|s_t)]]\)
- 如果\(d<d_{targ}/1.5,\beta\leftarrow\beta/2\)
- 如果\(d>d_{targ}/1.5,\beta\leftarrow \beta\times2\)
使用上述方法,我们偶尔会看到KL散度明显异于\(d_{targ}\)的情况下进行更新,但是这种情况是少见的,并且\(\beta\) 会快速调整。上述公式中的1.5和2也是启发式选择的,但是算法对它们不是很敏感。\(\beta\)的初始值是另一个超参数,但实际上并不重要,因为算法会快速调整它。
Algorithm
对于损失函数的定义,如果使用在策略和值函数之间共享参数的神经网络结构,则必须使用结合策略代理和值函数误差项的损失函数。
结合以前的工作,可以构建以下的目标函数,该目标在每次迭代中近似最大化:
\[L^{CLIP+VF+S}_t(\theta)=\widehat E_t[L_t^{CLIP}(\theta)-c_1L^{VF}_t(\theta)+c_2S[\pi_\theta](s_t)] \]其中\(c_1、c_2\)是超参数,S是轨迹的回报,\(L_t^{VF}\)是一个平方误差\((V_\theta(s_t)-V_t^{targ})^2\)
在之前中的工作中提出了一种策略梯度实现方法为针对T个时间步长运行策略,并使用收集的样本进行更新。可以表示为如下的形式:
\[\widehat A_t =-V(s_t)+r_t+\gamma r_{t+1}+\cdots+\gamma^{T-t-1}r_{T-1}+\gamma^{T-t}V(s_t) \]对上述形式进行推广,可以使用广义优势估计的截断版本:
\[\widehat A_t=\delta_t+(\gamma\lambda)\delta_{t+1}+\cdots+\cdots+(\gamma\lambda)^{T-t+1}\delta_{T-1} \\where\ \ \ \delta_t=r_t+\gamma V(s_{t+1})-V(s_t) \]那么PPO-clip的伪代码为: