Policy Gradients

传统TD算法的思路是先求出价值函数,然后根据价值函数选择策略,于是就有人开始考虑能不能直接优化策略,这就是Policy Gradients的思路,开始于REINFORCE。

REINFORCE

考虑MDP建模,考虑一个trajectory:
这一个trajectory的概率为:
得到的回报为:
从而得到总回报为:
我们考虑最大化它,求它的梯度为:
这样的积分形式不能使用MC,我们考虑恒等式:
得到:
考虑展开梯度:
第一项和第三项都和无关,我们得到:
因此我们得到:
考虑MC,为第次trajectory采样:
现在我们考虑这在做怎样一件事,考虑行为模仿算法,即最大似然:
注意到了吗,唯一的不同是少了奖励函数的加权,这是因为行为模仿算法,我们默认模仿的对象有最高的权重,而到了PG,行为数据是自己试探出来的,某些具有较高奖励,应该更多的学习,有些具有更低的奖励,应该更少的学习,而负的奖励则需要规避。

Variance Reduction

但是由于奖励通常在实数范围内取不同的值,因此方差是较大的,训练不够稳定,我们需要考虑降低方差的方式。
首先是,注意到记录了整个trajectory的全部奖励,但是,时刻的行为不能影响以前的奖励,因此根据这一个因果性,我们考虑将其调整为:
这一个操作具有严格的数学基础,考虑的奖励,我们可以发现:
显然可以写为:
显然第二个积分为0,于是得到:
因此梯度改写为:
第二个减小是引入Baseline,考虑任意函数,满足:
可以按照相同方法证明,最终的梯度为:
考虑最小化方差:
得到
不妨直接取为:
估计为:
因此得到:

Actor-Critic

REINFORCE的是MC采样估计量,是不够准确的,因此一种思路是使用真实的价值函数替换它,这就是Actor-Critic的思想。
考虑REINFORCE梯度的期望形式:
考虑:
那么梯度变为:
展开为:
定义驻留概率:
最后我们得到:
定义优势函数:
梯度变为:
这个公式的关键之处在于,代表环境信息的是不需要显示求梯度的,尽管变化时,由于变化,也在变化。
现在的考虑是训练,使用TD的思路:
其中。
接下来,根据Bellman公式:
从而得到优势函数的估计值:
从而利用该估计值更新actor。

GAE

注意到,当我们用去近似估计真实的时,由于引入一次偏差,到偏差被进一步放大了。
传统MC利用采样:
在采样下,虽然是无偏的,但是方差较大,这正是我们换成的原因,因此考虑一个trade-off自然想到:
于是:
发现:
因此有:
这个公式的问题在于,的值还是无法确定,GAE的思路是直接按照加权求和,归一化因子为:
进一步写为:
这就是GAE的,应当注意到的是,GAE要求必须是on-policy的。
实际中为了进一步减少方差,还要对做标准化,考虑:
这里和是全部(不同时间步,不同trajectory)采样的均值和方差。梯度为:

SAC

我们考虑off-policy的AC,或许直接考虑经验回放,即储存大量的,然后抽batch进行训练,但是这样会出问题。Q-learning不会出问题的原因是,Q-learning的期望中不包含,但是AC的期望中有,按道理样本应该采用生成的,才是无偏估计。
的要求首先来源于,它的靶子是,这里,这个期望是对求的,但是进入的数据不是来源于这个分布,因此实际上拟合的是旧分布,这是偏差来源。
方法是使用函数,根据的Bellman公式:
看到外层期望只和环境有关,因此可以直接replay,考虑估计为:
同时使用了第一个技巧,不是buffer里的值,而是通过buffer里面的重新采样的,因此利用Buffer可以计算出准确的,更新为:
但是因此我们不能算出Baseline,梯度变成:
这里的同样是重采样得到。但是这样的方差是较大的,Levine的意见是可以忍受。
但是,我们可以进一步考虑:
现在考虑我们的网络是一个高斯输出,即,利用重参数化技巧得到:
因此得到:
根据高斯采样的无偏性,可以估计为:

DPG

考虑SAC梯度:
考虑确定性,得到:
考虑链式法则:
这个公式我们称为Deterministic Actor Critic,显然,这个公式不需要对求期望,因此当利用不是策略而是策略进行采样时,不用考虑因此带来的偏移。
DPG的下一步就是利用深度学习,这就是DDPG,并且同时使用DQN的Experience Replay和TargetNetwork。
为了更进一步理解DDPG,我们考虑从DQN出发,考虑DQN梯度:
最大的问题是求的部分,对于连续空间,这个优化问题十分困难,考虑引入Actor,即,因此优化任务为:
求梯度,按照链式法则,自然得到:
因此DDPG也可以考虑为带Actor的DQN。Critic的更新为:

PPO

GAE有非常良好的性质,能不能保持GAE同时也能off-policy的训练呢?考虑过去模型参数为,训练后变成,我们考虑总损失:
但是现在的情况是,buffer中的样本采样于,在更新以后的参数已经变成了,于是通过IS技巧:
但是,考虑一个采样的,考虑是确定值,当,梯度上升会使得不断变大,但,梯度上升会使得不断趋于0,这都意味着变得越来越不同,这导致训练极端的不稳定,整个PPO家族都是通过不同方法来解决这个问题。
考虑梯度,利用对数技巧:
这样期望就变成对旧样本的期望了。考虑:
并且考虑:
得到:
现在我们考虑因果性,时刻的动作只影响以后的奖励,同样,时刻的求和只受到以前的IS的影响,因此:
因此奖励部分可以替换成,得到:
对于IS部分,考虑到如果偏差连乘会导致爆炸,我们做出这样一个近似,即只考虑时刻发生的IS:
损失估计为:

Clip

对于PPO-clip,思路非常简单,手动截断会使得差距拉大的梯度,即:
但是这样会引发一些问题,如果,反而呢,梯度会被截断,但是我们肯定希望增大,因此我们考虑再套一层:
当时,外层的两项相等,但是当时,如果时,我们本就不希望继续更新,因此自然截断到第二项,但是如果反过来,的值和的值的方向相反,就取到第一项,修正更新。
因此PPO-Clip的最后损失为:

KL

也可以考虑使用KL散度约束两个分布的距离:
第一项和无关,因此损失为:
 
RL Practice2RL Practice4
Loading...