从 "reward to go" 到 Actor Critic
回顾一下REINFORCE算法
其中reward to go 为
但这个reward to go有什么缺点呢?实际上这个reward to go只是估计了单个轨迹从开始的累积奖励,并不是一个期望的概念,因此方差较大。
<img src="figures/reward_to_go.png" alt="drawing" width="300"/>
那么应该如何改进以降低方差呢?
实际上我们希望理想的reward to go是
如果我们知道,那么策略梯度便是:
在上一节我们还讲到了应该添加一个baseline,以评估当前轨迹的累积奖励就平均而言有多好,因此添加了baseline的策略梯度是:
那么这个baseline如何决定呢?因为我们使用的是,那么理所应当减去的也应该是
。因此,最终Actor Critic的策略梯度为:
接下来我们要做的便是如何得到?
Estimate advantage
为了得到 advantage,我们可以直接拟合 ,但是通常不这么做,因为如果我们
具有下面的关系:
于是,advantage 可以通过这种方式近似求出:
这样 只是
的函数,而
是
的函数,所以如果拟合
,参数更少,更容易拟合,也更方便。
所以基于上面的分析,我们的思路是这样的:我们有一个神经网络,输入是 , 输出是
,下面就是如何训练这样一个神经网络。
Policy evaluation
进行policy evaluation 有两种方式,一种是Monte Carlo,另一种是temporal difference。
Monte Carlo Evaluation
接下来就是如何拟合,这个步骤称之为 Policy evaluation,因为这个网络做的是给定一个s,输出
,我们不考虑 Policy Improvement步骤。下面是
的定义:
如果我们拟合得到了 ,那么根据RL目标函数的定义
,我们也顺便得到了目标函数的表达式,岂不美哉?
那么如何获得训练目标数据呢?可以有下面两种方式:
第二种方式明显更好一点,其方差更小,但是其要求环境能够重置到特定的状态来进行采样。
于是我们的训练数据和损失函数就可以表达为:
Temporal Difference
下面对我们的真实标签 进行近似:
所以,进行了上面的两层近似,我们还可以使用 作为真实标签的近似,因此我们的训练数据如下:
这种方式也叫做 bootstrapped estimate。
总结一下,最终的 Batch Actor-Critic algorithm 如下:
-
(MC or Bootstrap)
discont factors
如果 T 是无穷大,那 就会变得无穷大,一种方法就是引入折扣因子
,那么
注意到 ,而当我们加上
之后,
,因此可以认为添加了一个以概率
进入的死亡状态
,进入死亡状态就没有奖励了。因此可以认为
没有改变MDP框架,只是改变了环境的转移概率
。
<img src="figures/gamma.png" alt="drawing" width="300"/>
option 1:
option 2:
option1 只对后面的奖励进行了折扣,option2不仅对奖励进行折扣,对梯度也进行了折扣。option1是我们在实际中使用的,option2的直觉含义是说:如果你遇到了死亡状态,那么后面的steps就不重要了。
discount factor 实际上也是一种降低方差的方式。
Actor-critic Algorithm design
-
(MC or Bootstrap)
-
.
但是这里的online actor-critic在实际中使用还有一些问题。方差大
Architecture design
实现actor-critic的网络架构有两种:
分别使用两个网络,容易训练一点,不需要调很多参数,但是比较慢。
使用共享的网络,这样如果输入的state是图像的话,可以共享某些特征信息。但是训练起来比较困难,因为共享网络存在两种梯度,分别对应于不同的单元。所以想让网络的更新稳定一些,需要在调参上多下功夫,例如网络参数的初始化以及学习率的设置上。
Lower the variance of online actor-critic algorithm
-
.
online actor-critic 的一个缺点就是在对 做更新的时候使用的是单个样本,因此方差较大。所以一种改善的方法就是构造更大的batch。有两种方式:
- 左图中表示同时有4个并行的进程同时采样,每次得到batch size=4个
,然后分别计算4个梯度并相加,用来更新
,注意这种同步采样,同步更新参数。
- 右图表示有3个异步的进程,每次计算完梯度,送到一个central parameter server,然后central parameter server累积一定timesteps的梯度,然后再更新参数,接着把新参数送给每一个进程。
Conclusion on estimating advantage
现在总结一下,我们讨论了actor-critic,并将其与policy gradient相比较:
- actor-critic
- low variance
- biased (if the critic is not perfect)
- policy gradient
- high variacne
- no bias
state-dependent baseline
简单的actor-critic方差小,但实际上是biased,而policy gradient虽然没有bias,但是具有较大的方差。所以思考可不可以把这两种方式结合起来,提出一种一种既没有bias,方差也较小的版本呢?下面就是一种符合上述要求的版本:
下面说明为什么上面的版本在累积奖励中减去一个state-dependent baseline是无偏差的。
首先注意到:
令 是一个依赖于
的baseline,因为期望条件依赖于
,因此我们有:
因此,我们可以从累积奖励中减去一个依赖于状态的baseline不会改变策略梯度的期望。
n-step returns & GAE
现在总结几种构造估计 advantage 的方式:
-
- higher bias if value is wrong(it always is)
- low variance
-
- no bias
- high variance
-
- no bias
- medium variance
-
与
的结合
-
- low bias
- low variance
- <img src="figures/eligibility traces.png" alt="drawing" width="300"/>
-
- low bias
- low variance
Generalized advantage estimation
从 到
bias 越来越小,但是variance越来越大。现在给每一个
加上一个权重
,就得到