目录

深度强化学习目录

简介

之前讲了Policy-based方法,讲了Value-based方法,现在来讲一下结合两种方法的Actor-Critic。

符号

  • rtr_t:t时刻的即时奖赏。
  • RθR_\theta:使用参数θ\theta时,某轮游戏的累积奖赏。
  • GtG_t:时间从t到结束的累积奖赏,由于t时刻的奖励是采取行动后t+1时刻才拥有的,所以GtG_t满足:Gt=rt+1+rt+2+G_t={r_{t+1}+r_{t+2}+\ldots}
  • Vπ(s)V_\pi(s):策略为π\pi的状态-值函数,即状态s下预计累计回报的期望值,满足:Vπ(s)=E[GtSt=s]V_\pi(s)=\mathbb{E}[G_t\vert S_t=s]
  • Qπ(s,a)Q_\pi(s,a):策略为π\pi的状态-动作值函数,即状态s下采取行动a预计累计回报的期望值,满足:Qπ(s,a)=E[GtSt=s,At=a]Q_\pi(s,a)=\mathbb{E}[G_t\vert S_t=s,A_t=a]

根据定义可以得到公式:Qπ(st,at)=E[rt+1+Vπ(st+1)]Q_\pi(s_t,a_t)=\mathbb{E}[r_{t+1}+V_\pi(s_{t+1})]

即t时刻在状态s下采取行动a得到的累积奖赏等于t+1时刻的即时奖赏加上下一个状态的值函数的期望值。
此外,如果在上标出现符号n,则代表第n轮游戏,如stns_t^n代表第n轮游戏在时刻t时的状态。

Advantage Actor-Critic(A2C)

回顾Policy Gradient那一章,我们得到了公式2.3:
Rˉθ=1Nn=1Nt=1TnAθ(st,at)logp(atnstn,θ)\nabla{\bar{R}_{\theta}}=\frac{1}{N}\sum_{n=1}^{N} \sum_{t=1}^{T_n}{A^\theta (s_t,a_t) \nabla logp(a_t^n\vert s_t^n,\theta)}

其中A是优势函数,Aθ(st,at)=t=tTnγttrtnbA^\theta (s_t,a_t)=\sum_{t'=t}^{T_n}\gamma^{t'-t} r_{t'}^n-b
上式在理论推导上无误,但是在实际操作中存在一个问题,即作为累积奖赏的Gtn=t=tTnγttrtnG_t^n=\sum_{t'=t}^{T_n}\gamma^{t'-t} r_{t'}^n会有较大误差。这是因为GtnG_t^n是由agent于环境互动得到的奖赏,而奖赏本身是有随机性的,GtnG_t^n方差极大,因此只有当采样次数充足时才能保证结果正确。遗憾的是,“充足”的采样次数太过庞大,大部分时候我们都无法达到这个采样次数。于是,我们就想通过估计GtnG_t^n期望值来代替采样值,即满足如下公式:Rˉθ=1Nn=1Nt=1Tn(E[Gtn]b)logp(atnstn,θ)\nabla{\bar{R}_{\theta}}=\frac{1}{N}\sum_{n=1}^{N} \sum_{t=1}^{T_n}{(\mathbb{E}[G_t^n]-b) \nabla logp(a_t^n\vert s_t^n,\theta)}

如何计算期望值?这就需要Value-based的方法,利用Q和V值来代替GG。在上式中我们看到已经给出了行为a和状态s,所以可以用Q来代替E(G),即E[Gtn]=Qπθ(stn,atn)\mathbb{E}[G_t^n]=Q_{\pi_\theta}(s_t^n,a_t^n),其中πθ\pi_\theta是以θ\theta为参数的策略π\pi
而公式里的baseline,b则可以用value函数来代替,即b=Vπθ(stn)b=V_{\pi_\theta}(s_t^n),这是因为Vπθ(stn)=E[Qπθ(stn,atn)]V_{\pi_\theta}(s_t^n)=\mathbb{E}[Q_{\pi_\theta}(s_t^n,a_t^n)],这样的baseline能保证优势函数有正有负。
所以公式变成这样:Rˉθ=1Nn=1Nt=1Tn(Qπθ(stn,atn)Vπθ(stn))logp(atnstn,θ)(8.1)\nabla{\bar{R}_{\theta}}=\frac{1}{N}\sum_{n=1}^{N} \sum_{t=1}^{T_n}{(Q_{\pi_\theta}(s_t^n,a_t^n)-V_{\pi_\theta}(s_t^n)) \nabla logp(a_t^n\vert s_t^n,\theta)} \tag{8.1}

公式到了这一步,已经可以直接开始训练了,只需要两个网络,一个训练Q,一个训练V。但实际上还可以优化。因为有公式Qπ(st,at)=E[rt+1+Vπ(st+1)]Q_\pi(s_t,a_t)=\mathbb{E}[r_{t+1}+V_\pi(s_{t+1})],我们不妨去掉期望值,直接假设Qπ(st,at)=rt+1+Vπ(st+1)Q_\pi(s_t,a_t)=r_{t+1}+V_\pi(s_{t+1}),那样公式就变成了:
Rˉθ=1Nn=1Nt=1Tn(rt+1n+Vπθ(st+1n)Vπθ(stn))logp(atnstn,θ)(8.2)\nabla{\bar{R}_{\theta}}=\frac{1}{N}\sum_{n=1}^{N} \sum_{t=1}^{T_n}{(r_{t+1}^n+V_{\pi_\theta}(s^n_{t+1})-V_{\pi_\theta}(s_t^n)) \nabla logp(a_t^n\vert s_t^n,\theta)} \tag{8.2}

为什么可以直接去掉期望值?不知道,但是实验结果测试下来,替代掉之后的公式8.2效果比需要训练两个网络的公式8.1要好,这就是原论文中的结论。
如此一来,我们只需要训练一个网络V,而使用r代替G也能使得方差变小,这就是A2C(Advantage Actor-Critic)。

Asynchronous Advantage Actor-Critic(A3C)

A3C比起A2C,多出了一个异步(Asynchronous)。什么意思呢?其实就是同时训练多个worker与环境交互,然后集中所有的经验来训练。
8.Actor-Critic+A2C+A3C
具体步骤如下:

  • worker 1从全局复制参数θ1\theta_1
  • 使用参数θ1\theta_1与环境进行互动。
  • 计算出梯度θ\nabla \theta
  • 更新全局参数θ2θ1+ηθ\theta_2 \leftarrow \theta_1+\eta \nabla \theta,其中η\eta是学习率。

以上步骤为所有worker并行的,因此可能出现写覆盖的情况,但实际操作下来问题不大。

总结

Actor-Critic算法在Policy-based的基础上加入了Value-based方法,用QV函数对累积奖赏作出估计,减少了采样数量,提高了训练效果和效率。

相关文章: