基础算法篇(七),确定性策略的DPG与DDPG

我们在前面两章介绍了Policy Based范畴的经典策略梯度方法基于AC框架的PPO方法,在上述方法中,策略梯度都为如下形式:

  • J(θ)=EτP(τ;θ)[R(τ)t=1Tlogπθ(atst)]\nabla J\left(\theta\right)=E_{\tau\sim P\left(\tau;\theta\right)}\left[R\left(\tau\right)\sum_{t=1}^T\nabla\log\pi_\theta\left(a_t\left|s_t\right.\right)\right]

上面这个式子中包含了需要从状态空间采样的R(τ)R\left(\tau\right)和需要从行动空间采样的πθ(atst)\pi_\theta\left(a_t\left|s_t\right.\right)两个部分,因此,需要采样的量比较大。为了解决这一问题,DeepMind的David Silver等人提出了确定性策略梯度算法Deterministic policy gradient algorithms,将原有的概率性策略:

  • π(as)=P(at=ast=s)\pi\left(a\left|s\right.\right)=P\left(a_t=a\left|s_t=s\right.\right)

改为了确定性策略:

  • a=μ(s)a=\mu\left(s\right)

这样从理论上来说,需要采样的数据量就比之前要小。
但个人觉得随机性策略与确定性策略针对的其实是不同场景,例如棋类等某些对抗场景下,随机性策略要比确定性策略更有效,因此,并不存在谁好谁坏的问题。不管怎么说,下面我们开始介绍确定性策略相关内容。

确定性策略梯度DPG

首先我们将带参数θ\theta的确定性策略定义为如下形式:

  • μθSAθRn\mu_\theta:S\rightarrow A;\theta\in R^n

这里与前面不同的就是,策略由原有的概率函数,变为一个确定性函数。同时,定义我们的状态转移概率为如下形式:

  • p(ss,  t,  μ)p\left(s\rightarrow s',\;t,\;\mu\right)

这个状态转移函数,其实和前面的时一样的,它是和环境相关,但同时也和策略本身相关。那么,确定性策略的目标函数就可以写成如下形式:

  • J(μθ)=E[r1γ  μ]                    =Sρμ(s)r(s,  μθ(s))ds                    =Esρμ[r(s,  μθ(s))]J\left(\mu_\theta\right)=E\left[r_1^\gamma\;\left|\mu\right.\right]\\\;\;\;\;\;\;\;\;\;\;=\int_S\rho^\mu\left(s\right)r\left(s,\;\mu_\theta\left(s\right)\right)\operatorname ds\\\;\;\;\;\;\;\;\;\;\;=E_{s\sim\rho^\mu}\left[r\left(s,\;\mu_\theta\left(s\right)\right)\right]

由上式可以看出,这里的定义与随机策略其实是一致的,即不同策略下折扣收益的均值,同时可以表示为不同状态分布下的收益。那么,基于这个目标函数,如果要对参数θ\theta进行调整,以使目标函数最大,那么其策略梯度就可以表示为如下形式:

  • θJ(μθ)  =Sρμ(s)θμθ(s)aQμ(s,a)a=μθ(s)ds                                =Esρμ[θμθ(s)aQμ(s,a)a=μθ(s)]\nabla_\theta J\left(\mu_\theta\right)\;=\int_S\rho^\mu\left(s\right)\nabla_\theta\mu_\theta\left(s\right)\nabla_aQ^\mu\left(s,a\right)\vert_{a=\mu_\theta\left(s\right)}\operatorname ds\\\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;=E_{s\sim\rho^\mu}\left[\nabla_\theta\mu_\theta\left(s\right)\nabla_aQ^\mu\left(s,a\right)\vert_{a=\mu_\theta\left(s\right)}\right]

在David Silver的论文中,也没有讲具体的推导过程,但好像是在附录中对成立的条件进行了说明。其实具体推导,可以参见我们前面的经典策略梯度方法中相关推导,比较类似,只是在这里利用了链式求导法则。
根据上面的策略梯度,我们就可以得到on-policy Deterministic Actor-Critic的更新公式如下所示:

  • δt=rt+γQω(st+1,at+1)Qω(st,at)\delta_t=r_t+\gamma Q^\omega\left(s_{t+1},a_{t+1}\right)-Q^\omega\left(s_t,a_t\right) (1)
  • ωt+1=ωt+αωδtωQω(st,at)\omega_{t+1}=\omega_t+\alpha_\omega\delta_t\nabla_\omega Q^\omega\left(s_t,a_t\right) (2)
  • θt+1=θt+αθθμθ(st)aQμ(st,at)a=μθ(s)\theta_{t+1}=\theta_t+\alpha_\theta\nabla_\theta\mu_\theta\left(s_t\right)\nabla_aQ^\mu\left(s_t,a_t\right)\vert_{a=\mu_\theta\left(s\right)} (3)

同时,off-policy Deterministic Actor-Critic的更新公式如下所示:

  • δt=rt+γQω(st+1,μθ(st+1))Qω(st,at)\delta_t=r_t+\gamma Q^\omega\left(s_{t+1},\mu_\theta\left(s_{t+1}\right)\right)-Q^\omega\left(s_t,a_t\right) (4)
  • ωt+1=ωt+αωδtωQω(st,at)\omega_{t+1}=\omega_t+\alpha_\omega\delta_t\nabla_\omega Q^\omega\left(s_t,a_t\right) (5)
  • θt+1=θt+αθθμθ(st)aQμ(st,at)a=μθ(s)\theta_{t+1}=\theta_t+\alpha_\theta\nabla_\theta\mu_\theta\left(s_t\right)\nabla_aQ^\mu\left(s_t,a_t\right)\vert_{a=\mu_\theta\left(s\right)} (6)

上面两组更新式子中,唯一的区别就是(1)式和(4)式的中间项,变成了μθ(st+1)\mu_\theta\left(s_{t+1}\right),这个可以看作是一个Target Actor,这也是off-policy的特点,即将用来计算更新值的策略与环境互动的策略分开,我理解这个直观的感觉是起一个稳定器的感觉。

深度确定性策略梯度DDPG

其实DDPG和DPG的关系,就好像Q-Learning和DQN的关系一样,用深度神经网络来拟合上面的Critic和Actor,用深度神经网络的权重,来代替前面的ω\omegaθ\theta。提出这个算法的文章Continuous Control with Deep Reinforcement Learning的作者还是DeepMind的一票人,其中也包括了DPG的David Silver等。
其思路和DQN对Q-Learning的扩展基本一致,同时也使用了经验回放独⽴的目标网络两个DQN中使用的技巧,同时,为了解决确定性策略的Exploration和策略更新的稳定性问题,还增加了随机量soft-replace。具体算法伪代码如下所示:
基础算法篇(七),确定性策略的DPG与DDPG

  1. 由上面算法的第一和第二行可以看出,DDPG建立了两个Actor网络,这是前面DPG算法中off-policy的部分;同时,还建立了两个Critic网络,这个就是模仿DQN建立的目标网络部分,用这个目标网络来计算TD目标值;
  2. 算法第八行中的NtN_t就是为解决策略Exploration所添加的随机量;
  3. 第十行这里就是存储每步的状态,为后面update中使用经验回放作准备。
  4. 算法最后两行,就是soft-replace部分,不是完全更新,而是只更新网络中很小的一部分τ\tau,按照算法中的介绍,需要满足条件:τ<<1\tau<<1

总结

DDPG算法如果按照类别来分,应该为policy based & model-free & off-policy & actor-critic算法,和我们前面讲的PPO不同点很多,其中最重要的有两个:

  • 一是在输出策略方面,DDPG输出的是确定性策略,PPO则是概率分布;
  • 二是在AC结构方面,PPO中的Critic输出是价值函数,输入只有state;而DDPG中的Critic输出是类似于DQN的行为-状态值,所以输入包含action。这也直接导致了DDPG中的Critic在更新计算TD差分值时,使用到了目标策略网络Actor的输出,而PPO中的Critic是自己独立更新的。