CS294 Lecture 6-Actor Critic

作者: 丰谷数 | 来源:发表于2019-05-11 16:01 被阅读0次

从 "reward to go" 到 Actor Critic

回顾一下REINFORCE算法
\begin{array}{l} {\text { 1. sample }\left\{\tau^{i}\right\} \text { from } \pi_{\theta}\left(a_{t} | s_{t}\right) \text { (run the policy) }} \\ {\text { 2. } \nabla_{\theta} J(\theta) \approx \sum_{i}\left(\sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(a_{i, t} | s_{i, t}\right)\left(\sum_{t^{\prime}=t}^{T} r\left(s_{i, t'}, a_{i, t'}\right)\right)\right)} \\ {\text { 3. } \theta \leftarrow \theta+\alpha \nabla_{\theta} J(\theta)} \end{array}
其中reward to go 为
\hat{Q}_{t} = \sum_{t^{\prime}=t}^{T} r\left(s_{t'}, a_{t'}\right) \quad; \text{single estimate of true reward to go}
但这个reward to go有什么缺点呢?实际上这个reward to go只是估计了单个轨迹从s_{t},a_{t}开始的累积奖励,并不是一个期望的概念,因此方差较大。

reward_to_go.png

那么应该如何改进以降低方差呢?实际上我们希望理想的reward to go是
Q(s_t,a_t) \approx \sum_{t^{\prime}=t}^{T} \mathbb{E}_{s_{t'}, a_{t'} \sim \pi_{\theta}}\left[r\left(s_{t^{\prime}}, a_{t^{\prime}}\right) | s_{t}, a_{t}\right] \quad; \text{true reward to go}
如果我们知道Q(s_t,a_t),那么策略梯度便是:
\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(a_{i, t} | s_{i, t}\right) Q\left(s_{i, t}, a_{i, t}\right) \quad; \text{true reward to go}

在上一节我们还讲到了应该添加一个baseline,以评估当前轨迹的累积奖励就平均而言有多好,因此添加了baseline的策略梯度是:
\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(a_{i, t} | s_{i, t}\right)\left(Q\left(s_{i, t}, a_{i, t}\right)-b\right) \quad; \text{true reward to go + baseline}
那么这个baseline如何决定呢?因为我们使用的是Q\left(s_{i, t}, a_{i, t}\right),那么理所应当减去的也应该是 V(s)。因此,最终Actor Critic的策略梯度为:
\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(a_{i, t} | s_{i, t}\right) A^{\pi}\left(s_{i, t}, a_{i, t}\right)

接下来我们要做的便是如何得到A^\pi(s,a)

如何估计 advantage?

为了得到 advantage,我们可以直接拟合 A(s,a),但是通常不这么做,因为如果我们 Q(s,a) 具有下面的关系:
\begin{aligned} Q^{\pi}\left(s_{t}, a_{t}\right)&=r\left(s_{t}, a_{t}\right)+\mathbb{E}_{s_{t+1} \sim p\left(s_{t+1} | s_{t}, a_{t}\right)}\left[V^{\pi}\left(s_{t+1}\right)\right] \\ &\approx r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)+V^{\pi}\left(\mathbf{s}_{t+1}\right) \quad; \text{unbiased, a little variance}\\ \end{aligned}

于是,advantage 可以通过这种方式近似求出:
A^{\pi}\left(s_{t}, a_{t}\right) \approx r\left(s_{t}, a_{t}\right)+V^{\pi}\left(s_{t+1}\right)-V^{\pi}\left(s_{t}\right)
这样 V^\pi(s)只是 s 的函数,而 A^\pi(s,a)(s,a) 的函数,所以如果拟合 V,参数更少,更容易拟合,也更方便。

所以基于上面的分析,我们的思路是这样的:我们有一个神经网络,输入是 s, 输出是 \hat{V}^\pi(s),下面就是如何训练这样一个神经网络。


Policy evaluation

进行policy evaluation 有两种方式,一种是Monte Carlo,另一种是temporal difference。

Monte Carlo Evaluation

接下来就是如何拟合V^\pi(s),这个步骤称之为 Policy evaluation,因为这个网络做的是给定一个s,输出V(s),我们不考虑 Policy Improvement步骤。下面是 V^\pi(s_t) 的定义:
V^{\pi}\left(s_{t}\right)=\sum_{t^{\prime}=t}^{T} \mathbb{E}_{\pi_{\theta}}\left[r\left(\mathbf{s}_{t^{\prime}}, \mathbf{a}_{t^{\prime}}\right) | \mathbf{s}_{t}\right]

如果我们拟合得到了 V^\pi(s_t),那么根据RL目标函数的定义 J(\theta)=E_{\mathbf{s}_{1} \sim p\left(\mathbf{s}_{1}\right)}\left[V^{\pi}\left(\mathbf{s}_{1}\right)\right],我们也顺便得到了目标函数的表达式,岂不美哉?

那么如何获得训练目标数据呢?可以有下面两种方式:
\begin{aligned} V^{\pi}\left(s_{t}\right) &\approx \sum_{t^{\prime}=t}^{T} r\left(s_{t^{\prime}}, a_{t^{\prime}}\right) \quad; \text{single sample} \\ V^{\pi}\left(\mathbf{s}_{t}\right) &\approx \frac{1}{N} \sum_{i=1}^{N} \sum_{l^{\prime}=t}^{T} r\left(\mathbf{s}_{t^{\prime}}, \mathbf{a}_{t^{\prime}}\right) \quad; \text{multiple samples, requires us to reset the simulator} \end{aligned}
第二种方式明显更好一点,其方差更小,但是其要求环境能够重置到特定的状态s_t来进行采样。

于是我们的训练数据和损失函数就可以表达为:
\text{training data: }\Big\{ \Big(\mathbf{s}_{i, t}, \underbrace{\sum_{t^{\prime}=t}^{T} r\left(\mathbf{s}_{i, t^{\prime}}, \mathbf{a}_{i, t^{\prime}}\right)}_{y_{i,t}}\Big)\Big\} \\ \text{supervised regression: } \mathcal{L}(\phi)=\frac{1}{2} \sum_{i}\left\|\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{i}\right)-y_{i}\right\|^{2}

Temporal Difference

下面对我们的真实标签 y_{i,t} 进行近似:
\begin{aligned} y_{i, t}&=\sum_{t^{\prime}=t}^{T} \mathbb{E}_{\pi_{\theta}}\left[r\left(\mathbf{s}_{t^{\prime}}, \mathbf{a}_{t^{\prime}}\right) | \mathbf{s}_{i, t}\right] \\ &\approx r\left(\mathbf{s}_{i, t}, \mathbf{a}_{i, t}\right)+\sum_{t^{\prime}=t+1}^{T} \mathbb{E}_{\pi_{\theta}}\left[r\left(\mathbf{s}_{t^{\prime}}, \mathbf{a}_{t^{\prime}}\right) | \mathbf{s}_{i, t+1}\right] \\ &= r\left(\mathbf{s}_{i, t}, \mathbf{a}_{i, t}\right)+V^{\pi}\left(\mathbf{s}_{i, t+1}\right) \\ &\approx r\left(\mathbf{s}_{i, t}, \mathbf{a}_{i, t}\right)+\hat{V}_{\Phi}^{\pi}\left(\mathbf{s}_{i, t+1}\right) \end{aligned}

所以,进行了上面的两层近似,我们还可以使用 r\left(\mathbf{s}_{i, t}, \mathbf{a}_{i, t}\right)+\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{i, t+1}\right)作为真实标签的近似,因此我们的训练数据如下:
\left\{\left(\mathbf{s}_{i, t}, r\left(\mathbf{s}_{i, t}, \mathbf{a}_{i, t}\right)+\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{i, t+1}\right)\right)\right\}
这种方式也叫做 bootstrapped estimate。

总结一下,最终的 Batch Actor-Critic algorithm 如下:

  1. {\text {sample }\left\{\mathbf{s}_{i}, \mathbf{a}_{i}\right\} \text { from } \pi_{\theta}(\mathbf{a} | \mathbf{s})(\text { run it on the robot) }}
  2. {\text{fit } \hat{V}_{\phi}^{\pi}(\mathbf{s}) \text { to sampled reward sums }}(MC or Bootstrap)
  3. {\text {evaluate } \hat{A}^{\pi}\left(\mathbf{s}_{i}, \mathbf{a}_{i}\right)=r\left(\mathbf{s}_{i}, \mathbf{a}_{i}\right)+\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{i}^{\prime}\right)-\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{i}\right)}
  4. {\nabla_{\theta} J(\theta) \approx \sum_{i} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i} | \mathbf{s}_{i}\right) \hat{A}^{\pi}\left(\mathbf{s}_{i}, \mathbf{a}_{i}\right)}
  5. {\theta \leftarrow \theta+\alpha \nabla_{\theta} J(\theta)}

discont factors

如果 T 是无穷大,那 \hat{V}_{\phi}^{\pi} 就会变得无穷大,一种方法就是引入折扣因子 \gamma \in [0,1],那么
\begin{aligned} {y_{i, t} \approx r\left(\mathbf{s}_{i, t}, \mathbf{a}_{i, t}\right)+\gamma \hat{V}_{\Phi}^{\pi}\left(\mathbf{s}_{i, t+1}\right)} \\ \end{aligned}

注意到 \sum_{s'}p(s'|s,a)=1,而当我们加上 \gamma 之后,\sum_{s'} \gamma p(s'|s,a)=\gamma,因此可以认为添加了一个以概率 1-\gamma 进入的死亡状态 s^*,进入死亡状态就没有奖励了。因此可以认为 \gamma 没有改变MDP框架,只是改变了环境的转移概率 p(s'|s,a)

gamma.png
  1. option 1:
    \nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} | \mathbf{s}_{i, t}\right)\left(\sum_{t^{\prime}=t}^{T} \gamma^{t^{\prime}-t} r\left(\mathbf{s}_{i, t^{\prime}}, \mathbf{a}_{i, t^{\prime}}\right)\right) \quad; \text{reward to go 加上gamma最自然的方式}

  2. option 2:

\begin{aligned} \nabla_{\theta} J(\theta) &\approx \frac{1}{N} \sum_{i=1}^{N}\sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} | \mathbf{s}_{i, t}\right)\left(\sum_{t'=t}^{T} \gamma^{t'-1} r\left(\mathbf{s}_{i, t'}, \mathbf{a}_{i, t'}\right)\right) \quad; \text{reward to go 加上 gamma 的另一种方式} \\ &=\frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \gamma^{t-1} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} | \mathbf{s}_{i, t}\right)\left(\sum_{t^{\prime}=t}^{T} \gamma^{t^{\prime}-t} r\left(\mathbf{s}_{i, t^{\prime}}, \mathbf{a}_{i, t^{\prime}}\right)\right) \\ \end{aligned}

option1 只对后面的奖励进行了折扣,option2不仅对奖励进行折扣,对梯度也进行了折扣。option1是我们在实际中使用的,option2的直觉含义是说:如果你遇到了死亡状态,那么后面的steps就不重要了。

Actor-critic Algorithm design

\text{batch actor-critic algorithm:}

  1. {\text {sample }\left\{\mathbf{s}_{i}, \mathbf{a}_{i}\right\} \text { from } \pi_{\theta}(\mathbf{a} | \mathbf{s})(\text { run it on the robot) }}
  2. {\text{fit } \hat{V}_{\phi}^{\pi}(\mathbf{s}) \text { to sampled reward sums }}(MC or Bootstrap)
  3. {\text {evaluate } \hat{A}^{\pi}\left(\mathbf{s}_{i}, \mathbf{a}_{i}\right)=r\left(\mathbf{s}_{i}, \mathbf{a}_{i}\right)+\gamma \hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{i}^{\prime}\right)-\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{i}\right)}
  4. {\nabla_{\theta} J(\theta) \approx \sum_{i} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i} | \mathbf{s}_{i}\right) \hat{A}^{\pi}\left(\mathbf{s}_{i}, \mathbf{a}_{i}\right)}
  5. {\theta \leftarrow \theta+\alpha \nabla_{\theta} J(\theta)}

\text{online actor-critic algorithm:}

  1. \text{take action }\mathbf{a} \sim \pi_{\theta}(\mathbf{a} | \mathbf{s}), \text { get }\left(\mathbf{s}, \mathbf{a}, \mathbf{s}^{\prime}, r\right).
  2. \text{update }\hat{V}_{\phi}^{\pi} \text { using target } r+\gamma \hat{V}_{\phi}^{\pi}\left(\mathbf{s}^{\prime}\right)
  3. \text{evaluate }\hat{A}^{\pi}(\mathbf{s}, \mathbf{a})=r(\mathbf{s}, \mathbf{a})+\gamma \hat{V}_{\phi}^{\pi}\left(\mathbf{s}^{\prime}\right)-\hat{V}_{\phi}^{\pi}(\mathbf{s})
  4. \nabla_{\theta} J(\theta) \approx \nabla_{\theta} \log \pi_{\theta}(\mathbf{a} | \mathbf{s}) \hat{A}^{\pi}(\mathbf{s}, \mathbf{a})
  5. {\theta \leftarrow \theta+\alpha \nabla_{\theta} J(\theta)}

但是这里的online actor-critic在实际中使用还有一些问题。方差大

Architecture design

实现actor-critic的网络架构有两种:

  • 分别使用两个网络,容易训练一点,不需要调很多参数,但是比较慢。!

  • 使用共享的网络,这样如果输入的state是图像的话,可以共享某些特征信息。但是训练起来比较困难,因为共享网络存在两种梯度,分别对应于不同的单元。所以想让网络的更新稳定一些,需要在调参上多下功夫,例如网络参数的初始化以及学习率的设置上。

Lower the variance of online actor-critic algorithm

\text{online actor-critic algorithm:}

  1. \text{take action }\mathbf{a} \sim \pi_{\theta}(\mathbf{a} | \mathbf{s}), \text { get }\left(\mathbf{s}, \mathbf{a}, \mathbf{s}^{\prime}, r\right).
  2. \text{update }\hat{V}_{\phi}^{\pi} \text { using target } r+\gamma \hat{V}_{\phi}^{\pi}\left(\mathbf{s}^{\prime}\right)
  3. \text{evaluate }\hat{A}^{\pi}(\mathbf{s}, \mathbf{a})=r(\mathbf{s}, \mathbf{a})+\gamma \hat{V}_{\phi}^{\pi}\left(\mathbf{s}^{\prime}\right)-\hat{V}_{\phi}^{\pi}(\mathbf{s})
  4. \nabla_{\theta} J(\theta) \approx \nabla_{\theta} \log \pi_{\theta}(\mathbf{a} | \mathbf{s}) \hat{A}^{\pi}(\mathbf{s}, \mathbf{a})
  5. {\theta \leftarrow \theta+\alpha \nabla_{\theta} J(\theta)}

online actor-critic 的一个缺点就是在对 \hat{V}_\phi^\pi 做更新的时候使用的是单个样本,因此方差较大。所以一种改善的方法就是构造更大的batch。有两种方式:

  • 左图中表示同时有4个并行的进程同时采样,每次得到batch size=4个(s,a,s',r),然后分别计算4个梯度并相加,用来更新\theta,注意这种同步采样,同步更新参数。
  • 右图表示有3个异步的进程,每次计算完梯度,送到一个central parameter server,然后central parameter server累积一定timesteps的梯度,然后再更新参数,接着把新参数送给每一个进程。
sync-async-actor-critic.png

Critics as state-dependent baselines

现在总结一下,我们讨论了actor-critic,并将其与policy gradient相比较:

  • actor-critic
    • \nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} | \mathbf{s}_{i, t}\right)\left(r\left(\mathbf{s}_{i, t}, \mathbf{a}_{i, t}\right)+\gamma \hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{i, t+1}\right)-\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{i, t}\right)\right)
    • low variance
    • biased (if the critic is not perfect)
  • policy gradient
    • \nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta}) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_{\boldsymbol{\theta}} \log \pi_{\theta}\left(\mathbf{a}_{i, t} | \mathbf{s}_{i, t}\right)\left(\left(\sum_{t^{\prime}=t}^{T} \gamma^{t^{\prime}-t} r\left(\mathbf{s}_{i, t^{\prime}}, \mathbf{a}_{i, t^{\prime}}\right)\right)-b\right)
    • high variacne
    • no bias
  • Better version
    • \nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} | \mathbf{s}_{i, t}\right)\left(\left(\sum_{t'=t}^{T} \gamma^{t^{\prime}-t} r\left(\mathbf{s}_{i, t^{\prime}}, \mathbf{a}_{i, t^{\prime}}\right)\right)-\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{i, t}\right)\right)
    • no bias
    • low variance

Eligibility trances & n-step returns

下面的两种方式各有特点,并且优缺点互补,那么就很自然会去想能够将这两种方式结合起来,实现bias和variance之间的一种权衡?

  • \hat{A}_{\mathrm{C}}^{\pi}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)=r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)+\gamma \hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{t+1}\right)-\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{t}\right)

    • lower variance
    • higher bias if value is wrong(it always is)
  • \hat{A}_{\mathrm{MC}}^{\pi}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)=\sum_{t^{\prime}=t}^{\infty} \gamma^{t^{\prime}-t} r\left(\mathbf{s}_{t^{\prime}}, \mathbf{a}_{t^{\prime}}\right)-\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{t}\right)

    • no bias
    • higher variance
  • \hat{A}_{\mathrm{n}}^{\pi}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)=\sum_{t^{\prime}=t}^{t+n} \gamma^{t^{\prime}-t} r\left(\mathbf{s}_{t^{\prime}}, \mathbf{a}_{t^{\prime}}\right)+\gamma ^n\hat{V}^\pi_\phi(s_{t+n})-\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{t}\right) \quad; \text{n steps}

    • 样本轨迹的前几个timestep的方差较小,越往后越大
    • 这样就和之前学习的MC的variance比较大,但是unbiased;而TD的variance比较小,但是biased。所以使用n-step return进行估计,实现bias和variance的一个平衡。
    • discount的一个作用就是降低variance,因为越将来的奖励是越不确定的,而gamma正好降低了其重要性。
eligibility traces.png

Generalized advantage estimation

\begin{array}{ll}{\hat{A}_{t}^{(1)} :=\delta_{t}^{V}} & {=-V\left(s_{t}\right)+r_{t}+\gamma V\left(s_{t+1}\right)} \\ {\hat{A}_{t}^{(2)} :=\delta_{t}^{V}+\gamma \delta_{t+1}^{V}} & {=-V\left(s_{t}\right)+r_{t}+\gamma r_{t+1}+\gamma^{2} V\left(s_{t+2}\right)} \\ {\hat{A}_{t}^{(3)} :=\delta_{t}^{V}+\gamma \delta_{t+1}^{V}+\gamma^{2} \delta_{t+2}^{V}} & {=-V\left(s_{t}\right)+r_{t}+\gamma r_{t+1}+\gamma^{2} r_{t+2}+\gamma^{3} V\left(s_{t+3}\right)}\\ \hat{A}_{t}^{(k)} :=\sum_{l=0}^{k-1} \gamma^{l} \delta_{t+l}^{V}&=-V\left(s_{t}\right)+r_{t}+\gamma r_{t+1}+\cdots+\gamma^{k-1} r_{t+k-1}+\gamma^{k} V\left(s_{t+k}\right) \\ &\vdots \\ \hat{A}_{t}^{(\infty)}=\sum_{l=0}^{\infty} \gamma^{l} \delta_{t+l}^{V}&=-V\left(s_{t}\right)+\sum_{l=0}^{\infty} \gamma^{l} r_{t+l} \end{array}

\hat{A}_t^{(1)}\hat{A}_t^{(k)} bias 越来越小,但是variance越来越大。现在给每一个 \hat{A}_t^{(k)} 加上一个权重 \lambda^k,就得到
\begin{aligned} \hat{A}_{t}^{\operatorname{GAE}(\gamma, \lambda)} & :=(1-\lambda)\left(\hat{A}_{t}^{(1)}+\lambda \hat{A}_{t}^{(2)}+\lambda^{2} \hat{A}_{t}^{(3)}+\ldots\right) \\ &=(1-\lambda)\left(\delta_{t}^{V}+\lambda\left(\delta_{t}^{V}+\gamma \delta_{t+1}^{V}\right)+\lambda^{2}\left(\delta_{t}^{V}+\gamma \delta_{t+1}^{V}+\gamma^{2} \delta_{t+2}^{V}\right)+\ldots\right) \\ &=(1-\lambda)\left(\delta_{t}^{V}\left(1+\lambda+\lambda^{2}+\ldots\right)+\gamma \delta_{t+1}^{V}\left(\lambda+\lambda^{2}+\lambda^{3}+\ldots\right)\right. +\gamma^{2} \delta_{t+2}^{V}\left(\lambda^{2}+\lambda^{4}+\lambda^{4}+\ldots\right)+\ldots ) \\ &=(1-\lambda)\left(\delta_{t}^{V}\left(\frac{1}{1-\lambda}\right)+\gamma \delta_{t+1}^{V}\left(\frac{\lambda}{1-\lambda}\right)+\gamma^{2} \delta_{t+2}^{V}\left(\frac{\lambda^{2}}{1-\lambda}\right)+\ldots\right) \\ &=\sum_{l=0}^{\infty}(\gamma \lambda)^{l} \delta_{t+l}^{V} \end{aligned}

相关文章

网友评论

    本文标题:CS294 Lecture 6-Actor Critic

    本文链接:https://www.haomeiwen.com/subject/sywxaqtx.html