A3C、PPO、GAE笔记

一、 重要性采样TRPO和PPO主要思想的数学基础是重要性采样

重要性采样:$x_i $是从$p(x)$分布中采样得到的, 但是$p(x)$的值往往无法直接获得,需要通过其他分布$q(x)$进行间接采样获得。

条件:

$p$分布与$q$分布需要相近,才能得到较好的效果。

用在强化学习里面:

由于策略梯度原始公式中的 新策略分布难以得到,因而使用旧策略进行间接采样,以使得未知项变成可估计的已知项进行计算。

二、 梯度与参数更新1. 回报的期望:最大化全部采样轨迹上的策略回报值,$R(\tau)$ 表示某一个轨迹$\tau$的回报值
2. 回报的期望的梯度:(第三个等号用到的公式:$\nabla f(x) = f(x) \nabla \log f(x)​$)
式中

$N​$表示采样了$N​$条trajectory, $T_n​$表示每条trajectory的step数量。

关于$p_{\theta}(\tau)$
由两部分组成一部分是来自环境的 $p_\theta(s_{t+1}|s_t, a)$, 一部分是来自agent的 $p_\theta {(a_t|s_t)}$, 其中来自环境的部分不带入计算,策略更新只考虑agent这部分。所以最后一步并没有$t+1$这部分。

  1. 参数更新:

三、 实际算法中对策略梯度的处理方法
策略梯度方法:
加入baseline

$b$ 的加入保证reward不是恒大于0的,若reward一直大于0,则会导致未被采样的action无法得到提升,但其实该action并不是不好而是未被采样。

状态值函数估计轨迹回报:
$R(\tau^n)-b$ 部分使用状态值函数来替代

优势函数估计轨迹回报:
$R(\tau^n)-b​$ 部分用以下Advantage function来替代

TD-Error估计轨迹回报:(A3C)使用值网络估计值,引入bias减小variance
$R(\tau^n)-b​$ 部分用以下TD-Error 代替

四、GAE(Generalized Advantage Estimation)
GAE的作用

GAE的意思是泛化优势估计,因而他是用来优化Advantage Function优势函数的。
GAE的存在是用来权衡variance和bias问题的:
On-policy直接交互并用每一时刻的回报作为长期回报的估计$\sum_{t’=t}^{T} \gamma^{t’-t}r_{t’}$ 会产生较大的方差,Variance较大。
而通过基于优势函数的AC方法来进行回报值估计,则会产生方差较小,而Bias较大的问题。

GAE 推导
满足$\gamma$-just条件。(未完待续)

GAE形式
GAE的形式为多个价值估计的加权平均数。
运用GAE公式进行优势函数的估计:

​ 为了快速估计序列中所有时刻的估计值,采用倒序计算,从t+1时刻估计t时刻:

五、PPO关于策略梯度的目标函数以上所述的策略梯度算法属于on-policy的算法,而PPO属于off-policy的算法

on-policy: 使用当前策略$\pi_\theta$收集数据,当参数$\theta$更新后,必须重新采样。

off-policy: 可以从可重用的样本数据中获取样本来训练当前的策略$\pi _\theta​$,下式用了重要性采样。

  1. PPO目标函数
    对于PPO而言,轨迹回报通过采用Advantage function的方式进行估计,因而其梯度更新方式为:
    ​ 其中,从第二个等式用的是重要性采样,第三到第四个约等式由于$\frac{p_\theta(s_t)}{p_\theta^\prime(s_t)}​$这一项来源于重要性采样,前提假设两个分布差别不大,近似为1,且不易计算,故省略,后面的$\nabla \log p_\theta({a_t^n|s_t^n})​$ ,根据公式$\nabla f(x) = f(x) \nabla \log f(x)​$转换。
    ​ 因而,定义目标函数为:
  2. PPO对于重要性采样约束的处理
    ​ 为了保证$p_\theta(s_t,a_t) ​$ 与 $p_\theta^\prime(s_t,a_t)​$ 分布的差别不会太大,采用以下约束:

TRPO: 使用约束 $KL(\theta,\theta’)<\delta$,在分布上进行约束。
PPO1(Adaptive KL):使用$J_{PPO}^{\theta’}(\theta)=J^{\theta’}(\theta)-\beta KL(\theta,\theta’)$,在目标函数上加一个正则项进行约束,注意,这里KL散度衡量的是action之间的距离,而不是参数$\theta$与$\theta’$之间的距离。
PPO2 (Clip,论文中推荐的):使用$J_{PPO_2}^{\theta’}(\theta)=\sum_{(s_t,a_t)}\min{([\frac{p_\theta(a_t|s_t)}{p_\theta^\prime(a_t|s_t)}A^{\theta^\prime}(s_t,a_t)], [clip(\frac{p_\theta(a_t|s_t)}{p_\theta^\prime(a_t|s_t)},1-\epsilon,1+\epsilon)A^{\theta^\prime}(s_t,a_t)])}​$, 来约束分布距离。

使用GAE对优势函数进行优化

六、 PPO的目标函数PPO的最终目标函数由三部分组成,可使用梯度下降求解,而不是像TRPO一样使用共轭梯度法:

策略梯度目标函数: $L_t^{CLIP}(\theta)​$
值函数目标函数:$L_t^{VF}(\theta)=(V_\theta(s_t)-V_t^{target})^2=((r+\gamma v(s_{t+1}))-v(s_t))^2$
策略模型的熵: $S_{[\pi_\theta]}(s_t)=-\pi_\theta(a|s)\log\pi_\theta(a|s)​$

完整的形式如下:
这部分相应的代码如下:

七、Actor-CriticA2C、A3C等方法采用的是TD方法来替代R-b部分

A3C

方法:

启动N个线程,Agent在N线程中同时进行环境交互收集样本;
收集完样本后,每一个线程将独立完成训练并得到参数更新量,异步更新到全局的模型参数中;
下一次训练的时候,线程的模型参数将与全局参数完成同步,使用新的参数进行下一次训练。

目标函数:
使用TD-$\lambda$减小TD带来的偏差,可以在训练早期更快的提升价值模型。为了增加模型的探索性,目标函数中引入了策略的熵。

A2C
与A3C不同的是参数更新全部在全局master完成,每个子线程只负责env.step()进行探索。