策略梯度本质上是一种同策略模型,即学习的模型和与环境交互的模型是一个模型。这种方法的缺点是所采样的数据只能使用一次,因为使用梯度上升的方法来最大化策略模型的奖励期望,这必须保证策略是正在学习的模型做出的,即必须保证决策是从模型的决策分布中采样的

梯度依赖与模型和输入位置而存在,使用其他模型的梯度来更新自己,无异于东施效颦。

但由于我们在计算梯度的过程中使用了均值近似,所以只要我们保证均值的期望是实际的期望,即可避免这种拙劣的模仿,而这种“差距”可以通过修正所采样的分布而修正。

本节我们讨论如何利用从别的决策分布中采样的数据进行训练。

重要性采样

原理

假设我们有一个函数 $f(x)$,要计算从分布 $p$ 采样 $x$,再把 $x$ 代入 $f$ ,得到 $f(x)$。我们该怎么计算 $f(x)$ 的期望值呢?

假设我们不能对分布 $p$ 做积分,但可以从分布 $p$ 采样一些数据 $x^i$。把 $x^i$ 代入 $f(x)$, 取它的平均值,就可以近似 $f(x)$ 的期望值。

现在有另外一个问题,假设我们不能从分布 $p$ 采样数据,只能从另外一个分布 $q$ 采样数据$x$, $q$ 可以是任何分布,此时该如何计算呢?

考虑如下变换:

可得:

这样,我们就完成了分布修正!即可以从一个分布采样,并使用重要性权重将其修正成另一个分布,使得我们计算的期望没有误差。

和之前的梯度策略公式相结合,我们可以得到:

这里的 $\theta$ ,是要学习的模型,$\theta’$ 是实际采样的模型$\frac{p_\theta(\tau)}{p_{\theta’}(\tau)}$ 是用来修正分布的重要性权重。

实现

与策略梯度的实现结合,我们可以通过一下公式将同策略转化为异策略:

接下来,我们可以拆解 $p_\theta\left(s_t,a_t\right)$ 和 $p_{\theta^{\prime}}\left(s_t,a_t\right)$ ,即

于是我们可得

这里需要做的一件事情是,假设模型是 $\theta$ 的时候,我们看到 $s_t$ 的概率,与模型是 $\theta^{\prime}$ 的时候,我们看到 $s_t$ 的概率是一样的,即 $p_\theta(s_t)=p_\theta(s_t)$ 。因为 $p_\theta(s_t)$ 和 $p_{\theta^{\prime}}(s_t)$ 是一样的,所以我们可得

Q:为什么假设成一样的?

因为我们会看到状态往往与采取的动作是没有太大的关系的,更直接的理由就是 $p_\theta(s_t)$ 很难 $p_\theta(s_t)$ 有一个参数 $\theta$ ,
我们根本没有办法估计 $p_\theta(s_t)$,所以干脆就无视这个问题。

所以实际上,当我们使用重要性采样的时候,要去优化的目标函数为

括号里面的 $\theta$ 代表我们要去优化的参数,$\theta^{\prime}$ 是指我们用 $\theta^{\prime}$ 做示范。

近端策略优化

虽然重要性采样在理想情况下是正确的,即期望是相同的,但方差会有显著影响:如果$\frac{p(x)}{q(x)}$差距很大,$f(x)\frac{p(x)}{q(x)}$的方差就会很大,进而如果我们采样的次数不够多,我们就有可能得到差别非常大的结果!

怎么避免它们相差太多呢?简单地,我们可以使用信任区域策略优化(trust region policy optimization,TRPO):

即,只使用相差不大的$\theta’$来优化$\theta$,公式中的KL散度(Kullback-Leibler Divergence),也称为相对熵,是一个用于衡量两个概率分布差异的统计量。它量化了一个概率分布P与另一个参考概率分布Q之间的差异。

更进一步,我们可以使用近端策略优化(proximal policy optimization,PPO) :

即,在目标函数中加入了 KL 散度的约束,类似于正则化的手段。