David Silver 增强学习——Lecture 7 策略梯度算法(二)

David Silver 增强学习——Lecture 7 策略梯度算法(二)

其他Lecture

【1】搬砖的旺财:David Silver 增强学习——笔记合集(持续更新)


拓展

李宏毅老师的DRL课程,受益匪浅:

PPTspeech.ee.ntu.edu.tw/~t

视频https://www.bilibili.com/video/av24724071/?p=6


目录

1、减少方差
····1.1 引入基线
········1.1.1 怎么选择基线
····1.2 修改回报函数
2、Actor-Critic
····2.1 实际更新算法
····2.2 MC策略梯度(REINFORCE)
····2.3 使用Critic函数减小方差
····2.4 使用优势函数减小方差
····2.5 使用TD误差替代优势函数
····2.6 广义优势函数(Generalized Advantage Estimation, GAE)
····2.7 带资格迹的策略梯度
········2.7.1 前向视角 \mathrm{TD}\left( \lambda \right)
········2.7.2 后向视角 \mathrm{TD}\left( \lambda \right)
····2.8 小结
····2.9 A2C
········2.9.1 伪代码
········2.9.2 A2C算法框架
········2.9.3 代码详解
3、Asynchronous Advantage Actor-Critic (A3C)

1、减少方差

方差大的原因:

如果所有的 R\left( \tau \right) 都是正的,那么所有轨迹出现的概率都会增加。
(比如,一个比较好的动作没有被采样到,而采样到的不好的动作得到了一个比较小的正reward,那么没有被采样到的好动作的出现概率会越来越小,这显然是不合适的)

因此需要增加一个奖励的基线,让reward有正有负。可以通过以下的方法去减少方差:

引入基线(baseline)
修改回报函数
Actor-Critic方法
优势函数
...
  • 1.1 引入基线

首先要证明引入基线,不影响策略梯度

\begin{align*}  \nabla_{\theta}U\left( \theta \right)&\approx\frac{1}{m}\sum_{i=1}^m\nabla_{\theta}{\textrm{log}}p_{\theta}\left( \tau \right)R\left( \tau \right)\\ &=\frac{1}{m}\sum_{i=1}^m\nabla_{\theta}{\textrm{log}}p_{\theta}\left( \tau\right)\left( R\left( \tau \right)-b \right)\\ \end{align*}

展开,对后面一部分求期望

\begin{align*} {\Bbb E}\left[ \nabla_{\theta}{\textrm{log}}p_{\theta}\left( \tau \right)b \right] &=\sum_{\tau}p_{\theta}\left( \tau\right)\nabla_{\theta}{\textrm{log}}p_{\theta}\left( \tau \right)b\  \  \  {\scriptsize {求期望等于概率密度加权求和}}\\  &=\sum_{\tau}p_{\theta}\left( \tau \right)\frac{\nabla_{\theta}p_{\theta}\left( \tau \right)b}{p_{\theta}\left( \tau \right)}\\ &=\sum_{\tau}\nabla_{\theta}p_{\theta}\left( \tau \right)b\\ &{\scriptsize {求和项收敛时,对梯度求和等于对和求梯度}}\\ &=\nabla_{\theta}\left( \sum_{\tau}p_{\theta}\left( \tau \right)b \right)\\ &=b\nabla_{\theta}\left( \sum_{\tau}p_{\theta}\left( \tau \right) \right)\\ &{\scriptsize {概率分布加权求和等于1}}\\ &=b\nabla_{\theta}1\\ &=0 \end{align*}

(注:对不影响策略梯度作出说明,不是说对策略梯度一点影响都没有,只是说,当轨迹变得足够多的情况下,它的期望不会发生变化。对于某一条轨迹而言,假如所有的回报值都是正的,baseline刚好取回报值的平均值,那么每一条轨迹的求出来的策略梯度值都发生了变化,但是把它们加在一起,正负会抵消)
  • 1.1.1 怎么选择基线

选择回报值函数的期望值:

b={\Bbb E}\left[ R\left( \tau \right) \right] \approx \frac{1}{m}\sum_{i=1}^{m}R\left( \tau^{\left( i \right)} \right)

最小方差:

b=\frac{\sum_{i=1}^{m}\left[ \left( \sum_{t=0}^{T}\nabla_\theta{\textrm{log}p_\theta\left( a_t^{\left( i \right)}|s_t^{\left( i \right)} \right)} \right)^2R\left( \tau^{\left( i \right)} \right) \right]}{\sum_{i=1}^{m}\left[ \left( \sum_{t=0}^{T}\nabla_\theta{\textrm{log}p_\theta\left( a_t^{\left( i \right)}|s_t^{\left( i \right)} \right)} \right)^2 \right]}

最小方差证明
X=\frac{1}{m}\nabla_{\theta}{\textrm{log}}p_{\theta}\left( \tau^{\left( i \right)} \right)\left( R\left( \tau^{\left( i \right)} \right)-b \right) ,则方差为 \textrm{Var}\left( X \right)={\Bbb E}\left( X-{\Bbb E}\left( X \right) \right)^2={\Bbb E}\left( X-\overline X \right)^2={\Bbb E}\left[ X^2 \right]-{\overline X}^2
方差最小时即导数 \frac{\partial {\textrm{Var}}\left( X \right)}{\partial b}={\Bbb E}\left( X\frac{\partial X}{\partial b} \right)=0
\overline Xb 无关,因为加入baseline后平均值没有发生变化,则 \frac{\partial \left( {\overline X}^2 \right)}{\partial b}=0
由此得到 b=\frac{\sum_{i=1}^{m}\left[ \left( \sum_{t=0}^{T}\nabla_\theta{\textrm{log}p_\theta\left( a_t^{\left( i \right)}|s_t^{\left( i \right)} \right)} \right)^2R\left( \tau^{\left( i \right)} \right) \right]}{\sum_{i=1}^{m}\left[ \left( \sum_{t=0}^{T}\nabla_\theta{\textrm{log}p_\theta\left( a_t^{\left( i \right)}|s_t^{\left( i \right)} \right)} \right)^2 \right]}
详细证明请参考:Variance Reduction Techniques for Gradient Estimates in Reinforcement Learning
  • 1.2 修改回报函数

当前的估计值:

\begin{align*} \hat\eta &=\frac{1}{m}\sum_{i=1}^m\nabla_{\theta}{\textrm{log}}p_{\theta}\left( \tau^{\left( i \right)} \right)\left( R\left( \tau^{\left( i \right)} \right)-b \right){\scriptsize {除了减小b还能对前项进行处理}}\\ &\scriptsize{R\left( \tau \right)指的是一条轨迹上的回报值,现在我们表示成每一时刻的回报值相加}\\ &\scriptsize{前面证明得到\nabla_\theta{\textrm{log}}p_{\theta}\left( \tau^{\left( i \right)};\theta \right) =\sum_{t=0}^{T}\nabla_\theta{\textrm{log}}p_\theta\left( a_{t}^{\left( i \right)}| s_{t}^{\left( i \right)}\right)}\\ &=\frac{1}{m}\sum_{i=1}^m \left( \sum_{t=1}^{T}\nabla_{\theta}{\textrm{log}}p_\theta\left( a_{t}^{\left( i \right)}|s_{t}^{\left( i \right)} \right) \right)\left( \sum_{t=1}^{T}R\left( s_{t}^{\left( i \right)},a_{t}^{\left( i \right)} \right)-b \right)\\ \end{align*}

在一个 \tau 中,每一个 (s_t,a_t) 贡献的reward是不一样的,让它们都乘上同样的 R(\tau) (weight)其实是不公平的,比如下图 \tau_1=\{s_a,a_1,s_b,a_2,s_c,a_3\}R(\tau_1)=+3 主要来自于 (s_a,a_1) ,但是最后 (s_a,a_1)(s_b,a_2)(s_c,a_3) 都乘上 R(\tau_1)=+3 。不过,如果采样的次数足够多,就可以解决该问题,比如下图 \tau_2=\{s_a,a_2,s_b,a_2,s_c,a_3\}R(\tau_2)=-7 ,那么 (s_a,a_1)(s_b,a_2)(s_c,a_3) 都乘上 R(\tau_2)=-7(s_b,a_2)(s_c,a_3) 第一次乘上 R(\tau_1)=+3 ,第二次乘上 R(\tau_2)=-7 ,采样的次数足够多意味着可以把它们所包含的情况都采样到~

问题的关键就在于给予 (s_t,a_t) 合理的credit contribution。

一个解决的方法是,将来的动作不依赖过去的奖励(即对 t 时刻做更新的时候,不用考虑 t 时刻以前的奖励值,只考虑 t 时刻以后的奖励值),因此我们可以修改回报值来降低方差:

\begin{align*} \hat\eta &=\frac{1}{m}\sum_{i=1}^m \left( \sum_{t=0}^{T}\nabla_{\theta}{\textrm{log}}p_\theta\left( a_{t}^{\left( i \right)}|s_{t}^{\left( i \right)} \right) \right)\left( \sum_{t=0}^{T}R\left( s_{t}^{\left( i \right)},a_{t}^{\left( i \right)} \right)-b \right)\\  &=\frac{1}{m}\sum_{i=1}^m \left( \sum_{t=0}^{T}\nabla_{\theta}{\textrm{log}}p_\theta\left( a_{t}^{\left( i \right)}|s_{t}^{\left( i \right)} \right) \right)\left( \left( \sum_{k=0}^{t-1}R\left( s_{k}^{\left( i \right)},a_{k}^{\left( i \right)} \right)-b \right)+\left( \sum_{k=t}^{T}R\left( s_{k}^{\left( i \right)},a_{k}^{\left( i \right)} \right)-b \right) \right)\\ &=\frac{1}{m}\sum_{i=1}^m\sum_{t=0}^{T}\nabla_{\theta}{\textrm{log}}p_\theta\left( a_{t}^{\left( i \right)}|s_{t}^{\left( i \right)} \right) \left( \sum_{k=t}^{T}R\left( s_{k}^{\left( i \right)},a_{k}^{\left( i \right)} \right)-b\left( s_{k}^{\left( i \right)} \right) \right) \end{align*}

这里并没有考虑 \gamma 值,如果要考虑 \gamma 值,可以写做:

\begin{align*}  \hat\eta &=\frac{1}{m}\sum_{i=1}^m\sum_{t=0}^{T}\nabla_{\theta}{\textrm{log}}p_\theta\left( a_{t}^{\left( i \right)}|s_{t}^{\left( i \right)} \right) \left( \sum_{k=t}^{T}\gamma^{k-t} R\left( s_{k}^{\left( i \right)},a_{k}^{\left( i \right)} \right)-b\left( s_{k}^{\left( i \right)} \right) \right)  \end{align*}


2、Actor-Critic

  • 2.1 实际更新算法

实际更新时:

考虑单条轨迹(之前算法的弊端在于每次更新都要收集 m 条轨迹,现在的目的是为了每一步都能进行更新):

\begin{align*} \hat\eta &=\sum_{t=0}^{T}\nabla_{\theta}{\textrm{log}}p_\theta\left( a_{t}|s_{t} \right) \left( \sum_{k=t}^{T}\gamma^{k-t}R\left( s_{k},a_{k} \right) \right) \end{align*}

考虑单步更新:

\begin{align*} \hat\eta_t &=\nabla_{\theta}{\textrm{log}}p_\theta\left( a_{t}|s_{t} \right) \left( \sum_{k=t}^{T}\gamma^{k-t}R\left( s_{k},a_{k} \right) \right) \end{align*}

  • 2.2 MC策略梯度(REINFORCE)

使用梯度上升算法(最大化目标函数)更新参数 \theta

使用采样回报值 g_t 估计真实回报值 \begin{align*} \Delta\theta_t &=\alpha\nabla_{\theta}{\textrm{log}}p_\theta\left( a_{t}|s_{t} \right)g_t \end{align*}

伪代码如下:

  • 2.3 使用Critic函数减小方差

(注: \begin{align*} \Delta\theta_t &=\alpha\nabla_{\theta}{\textrm{log}}p_\theta\left( a_{t}|s_{t} \right)g_t \end{align*} 中影响方差的其实是 g_t ,如下图所示,在state s 执行action a ,最后能获得的奖励的差异是很大的,不过有很多方法去计算它的期望值)

先回顾一下动作价值函数 {q_\pi}(s,a) 的定义:

表示在执行策略 \pi 时,对当前状态 s 执行某一具体行为 a 所能得到的收获的期望,公式描述为:{q_\pi}(s,a)=\Bbb E_\pi [G_t|{S_t}=s,{A_t}=a]
详情请参考:搬砖的旺财:David Silver 增强学习——Lecture 2 马尔可夫决策过程

所以,可以用Q函数(Critic函数)去计算 g_t 的期望, Q_{\textbf{w}}\left( s_k,a_k \right) \approx \sum_{k=t}^T\left( \gamma^{k-t}R\left( s_k,a_k \right) \right) ,从而减小方差。

Actor-Critic算法(学习策略的同时学习值函数)维持两个参数:

Critic更新Q函数的参数 \textbf w
Actor使用Critic的方向更新策略参数 \theta

此时的近似策略梯度 \begin{align*} \Delta\theta &=\alpha\nabla_{\theta}{\textrm{log}}p_\theta\left( a|s \right)Q_{\textbf w}\left( s,a \right) \end{align*}

  • 2.4 使用优势函数减小方差

同理,我们希望在 \begin{align*} \Delta\theta &=\alpha\nabla_{\theta}{\textrm{log}}p_\theta\left( a|s \right)Q_{\textbf w}\left( s,a \right) \end{align*} 的基础上可以减去一个baseline,由此引入优势函数: A=Q-V

(注:优势函数为正,代表做这个动作是高于平均量的;优势函数为负,代表做这个动作是低于平均量的)

举个例子:

在state s 遵循policy \pi 选择action a ,共有两个选择, a_1a_2 ,选择 a_1 的动作价值函数为 Q_{\pi}(s,a_1) ,选择 a_2 的动作价值函数为 Q_{\pi}(s,a_2) ,动作价值函数可以理解为单个动作所对应的值函数。
根据贝尔曼方程,state的价值函数 v_\pi(s) 可以理解为所有动作价值函数关于动作概率的平均值,写作: v_\pi(s)=\pi(a_1|s)Q_{\pi}(s,a_1)+\pi(a_2|s)Q_{\pi}(s,a_2)
那么优势函数 A_{\pi}(s,a_1)=Q_{\pi}(s,a_1)-v_{\pi}(s)A_{\pi}(s,a_2)=Q_{\pi}(s,a_2)-v_{\pi}(s) 就能评价当前动作值函数相对于平均值的大小。

即通过 V 函数估计baseline,用 Q 函数估计回报函数:

V_\textbf{v}\left( s \right)=V^{\pi_\theta}\left( s \right)
Q_{\textbf w}\left( s,a \right) \approx Q^{\pi_\theta}\left( s,a \right)
A\left( s,a \right)=Q_{\textbf w}\left( s,a \right)-V_\textbf{v}\left( s \right)

此时的近似策略梯度 \begin{align*} \Delta\theta &=\alpha\nabla_{\theta}{\textrm{log}}p_\theta\left( a|s \right)A\left( s,a \right) \end{align*}

  • 2.5 使用TD误差替代优势函数
对于 \begin{align*} \Delta\theta &=\alpha\nabla_{\theta}{\textrm{log}}p_\theta\left( a|s \right)A\left( s,a \right) \end{align*} 而言,我们既要估计 V 函数,又要估计 Q 函数,相当于有两倍的风险会估计不准确,由此希望只估计一个函数。

对于真实的值函数 V^{p_\theta}\left( s \right) ,TD误差为 \delta^{\pi_\theta}=r+\gamma V^{p_\theta}\left( s' \right)-V^{p_\theta}\left( s \right)

TD误差是优势函数的无偏估计

\begin{align*} {\Bbb E}_{p_\theta}\left[ \delta^{p_\theta}|s,a \right] &={\Bbb E}_{p_\theta}\left[ r+\gamma V^{p_\theta}\left( s' \right)|s,a \right]-V^{p_\theta}\left( s \right)\\ &=Q^{p_\theta}\left( s,a \right)-V^{p_\theta}\left( s \right)\\ &=A^{p_\theta}\left( s,a \right) \end{align*}

所以,使用TD误差来计算策略梯度,得到 \begin{align*} \nabla_{\theta}{\textrm{log}}p_\theta\left( s,a \right)\delta^{\pi_\theta} \end{align*}

在实际的使用过程中,使用的是近似的TD误差 \delta_{\textbf v}=r+\gamma V_{\textbf v}\left( s' \right)-V_{\textbf v}\left( s \right)

通过这样的方法,我们只需要一个critic参数 {\textbf v}

  • 2.6 广义优势函数(Generalized Advantage Estimation, GAE)

优势函数的一步估计可写为: \[ \hat{A}_{t}^{\left(1\right)}:=\delta_{t}^{\textbf v}=-V\left(s_t\right)+r_t+\gamma V\left(s_{t+1}\right) \]

优势函数的2步估计及无穷步估计分别为:

 \hat{A}_{t}^{\left(2\right)}:=\delta_{t}^{\textbf v}+\gamma\delta_{t+1}^{\textbf v}=-V\left(s_t\right)+r_t+\gamma r_{t+1}+\gamma^2V\left(s_{t+2}\right)\\ \vdots \\ \hat{A}_{t}^{\left(k\right)}:=\sum_{l=0}^{k-1}{\gamma^l\delta_{t+l}^{\textbf v}=-V\left(s_t\right)+r_t+\gamma r_{t+1}+\cdots +\gamma^kV\left(s_{t+k}\right)} \\ \vdots \\ \hat{A}_{t}^{\left(\infty\right)}=\sum_{l=0}^{\infty}{\gamma^l\delta_{t+l}^{\textbf v}=-V\left(s_t\right)+\sum_{l=0}^{\infty}{\gamma^lr_{t+l}}}

从上面的公式我们看到,k越大,产生偏差的项 \gamma^kV\left(s_{t+k}\right) 越小,因此优势函数的估计偏差越小。但,相应的方差也会变大。

Shulman 提出广义优势函数估计 {\textrm{GAE}}\left(\gamma ,\lambda\right) ,利用指数加权平均从1步到无穷步的优势函数估计,即:

\hat{A}_{t}^{GAE\left(\gamma ,\lambda\right)}:=\left(1-\lambda\right)\left(\hat{A}_{t}^{\left(1\right)}+\lambda\hat{A}_{t}^{\left(2\right)}+\lambda^2\hat{A}_{t}^{\left(3\right)}+\cdots\right) \\ \\ \ =\left(1-\lambda\right)\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)+\cdots\right) \\ \ =\sum_{l=0}^{\infty}{\left(\gamma\lambda\right)^l\delta_{t+l}^{V}}

  • 2.7 带资格迹的策略梯度
  • 2.7.1 前向视角 \mathrm{TD}\left( \lambda \right)
\lambda 回报值去估计优势函数 \Delta\theta =\alpha\left( G_t^\lambda-V_{\textbf v}\left( s_t \right) \right)\nabla_{\theta}{\textrm{log}}p_\theta\left( a_t|s_t \right)
这里 G_t^\lambda-V_{\textbf v}\left( s_t \right) 是优势函数的有偏估计
  • 2.7.2 后向视角 \mathrm{TD}\left( \lambda \right)
\delta=r_{t+1}+\gamma V_{\textbf v}\left( s_{t+1} \right) -V_{\textbf v}\left( s_{t} \right)
e_t=\lambda e_{t-1}+\nabla_{\theta}{\textrm{log}}p_\theta\left( a_t|s_t \right)
\Delta \theta=\alpha\delta e_t
  • 2.8 小结

策略梯度有多种形式:

\begin{align*} \nabla_\theta J\left( \theta \right) &={\Bbb E}_{p_\theta}\left[ \nabla_{\theta}{\textrm{log}}p_\theta\left( a|s \right)g_t \right]&{\scriptsize \textrm{REINFORCE}}\\ &={\Bbb E}_{p_\theta}\left[ \nabla_{\theta}{\textrm{log}}p_\theta\left( a|s \right)Q_{\textbf w}\left( s,a \right) \right]&{\scriptsize \textrm{Q Actor-Critic}}\\ &={\Bbb E}_{p_\theta}\left[ \nabla_{\theta}{\textrm{log}}p_\theta\left( a|s \right)A_{\textbf {w,v}}\left( s,a \right) \right]&{\scriptsize \textrm{Advantage Actor-Critic  A2C}}\\ &={\Bbb E}_{p_\theta}\left[ \nabla_{\theta}{\textrm{log}}p_\theta\left( a|s \right)\delta_{\textbf v} \right]&{\scriptsize \textrm{TD Actor-Critic   A2C的实际操作版本}}\\ &={\Bbb E}_{p_\theta}\left[ \nabla_{\theta}{\textrm{log}}p_\theta\left( a|s \right)\delta_{\textbf v}e \right]&{\scriptsize {\mathrm{TD}\left( \lambda \right)}\  {\scriptsize \textrm{Actor-Critic}}}\\ \end{align*}

每种形式都能推导出随机梯度上升算法。

Critic使用了策略评价(MC或TD)来估计 Q^{p_\theta}\left( s,a \right)A^{p_\theta}\left( s,a \right)V^{p_\theta}\left( s \right)

  • 2.9 A2C
  • 2.9.1 伪代码
  • 2.9.2 A2C算法框架

未完待续~

  • 2.9.3 代码详解

未完待续~


3、Asynchronous Advantage Actor-Critic (A3C)

有一个主网络,还有许多Worker,每一个Worker也是一个A2C的net,A3C主要有两个操作,一个是pull,一个是push:

  • pull:把主网络的参数直接赋予Worker中的网络;
  • push:使用各Worker中的梯度,对主网络的参数进行更新。

请批评指正~

编辑于 2019-08-21

文章被以下专栏收录