深度确定性策略梯度DDPG

在前面的文章强化学习Actor-Critic算法中介绍了Actor-Critic算法。Actor-Critic算法可以解决随机决策的连续动作空间的强化学习算法,但其缺点也很明显,Critic网络难以收敛。此外,当连续动作空间维度非常高的时候,采样所耗费的成本也会比较高。

因此,DeepMind在提出了一种增强算法,即深度确定性策略梯度DDPG。DDPG对Actor-Critic算法的进行了增强,它将Actor的输出由随机策略变为了确定性的策略,且使用“soft”的方式来更新参数以及一些探索噪声加快收敛速度。

算法思想

在DDPG之前,Actor的输出是每一个动作被采取的概率,真正执行的动作需要基于这个概率分布进行采样来得到,最终的策略是一个随机决策。可以使用如下公式表示:

πθ(as)=P(as;θ)\pi_\theta(a|s)=P(a|s;\theta)

在DDPG中,使用如下的公式来替代原本的采样方式,输出一个确定性的策略:

a=μθ(s)a=\mu_\theta(s)

由于是直接输出的确定性的动作,没有采样的这个过程,因此即使动作空间维度非常高,预测成本也不会提高太多。

网络结构

DDPG也拥有Actor网络和Critic网络,不同之处在于,这里的Actor和Critic网络都分为了两个网络,即target-net和eval-net。这一点是参考之前的网络结构,双网络结构往往会使算法更加稳定。因此,DDPG一共有四个网络。但是其中真正需要通过样本来更新参数的网络只有两个,即Actor和Critic对应的eval-net。

这里target-net的更新方式和之前介绍的双网络结构不同。之前介绍的双网络结构一般采用"hard"模式来更新,每隔一段时间直接从eval-net拷贝一份。DDPG则采用了"soft"模式,在每一个迭代中,少量部分的更新target-net的参数。

此外,在训练的过程中,会添加一些噪声来增加探索空间,作用在Actor网络的输出上,将网络的输出改写为下面这个公式:

μ(st)=μ(stθtμ)+N^\mu'(s_t)=\mu(s_t|\theta^\mu_t)+\hat{N}

其中N^\hat{N}表示噪声。

目标函数

在DDPG中,Critic的目标函数与之前一样,没有什么变化:

yj=ri+γQ(si+1,μ(si+1θμ)θQ)L=1Ni(yiQ(si,ai;θQ))2\begin{gathered} y_j=r_i+\gamma Q'(s_{i+1},\mu'(s_{i+1}|\theta^{\mu'})|\theta^{Q'})\\ L=\frac{1}{N}\sum_i(y_i-Q(s_i,a_i;\theta^Q))^2 \end{gathered}

Actor的目标函数如下:

θμJ1NiaQ(s,aθQ)s=si,a=μ(si)θμμ(sθμ)si\nabla_{\theta^\mu}J\approx\frac{1}{N}\sum_i\nabla_aQ(s,a|\theta^Q)|_{s=s_i,a=\mu(si)}\nabla_{\theta^\mu}\mu(s|\theta^\mu)|_{s_i}

实际上和之前的也差不多,根据Critic的评价,根据QQ值对动作进行促进或者抑制。这里有一个需要注意的地方,由于Actor的目标函数需要对动作aa求梯度,因此DDPG不适用于离散动作空间的强化学习问题,离散动作无法求梯度。

算法流程

主要迭代流程如下:

  1. 通过Actor网络选择动作a_t=\mu(s_t|\theta^\mu)+\N_t。

  2. 执行动作ata_t并得到奖励rtr_t和观测状态st+1s_{t+1}

  3. 将新的记忆(st,at,rt,st+1)(s_t,a_t,r_t,s_{t+1})存到记忆池RR中。

  4. 随机从RR中选择NN个记忆。

  5. 通过以下公式计算QQ值:

    yi=ri+γQ(si+1,μ(si+1θμ)θQ)y_i=r_i+\gamma Q'(s_{i+1},\mu'(s_{i+1}|\theta^{\mu'})|\theta^{Q'})

  6. 更新Critic网络参数:

    L=1Ni(yiQ(si,aiθQ))2L=\frac{1}{N}\sum_i(y_i-Q(s_i,a_i|\theta^Q))^2

  7. 计算Actor梯度:

    θμJ1NiaQ(s,aθQ)s=si,a=μ(si)θμμ(sθμ)si\nabla_{\theta^\mu}J\approx\frac{1}{N}\sum_i\nabla_aQ(s,a|\theta^Q)|_{s=s_i,a=\mu(s_i)}\nabla_{\theta^\mu}\mu(s|\theta^\mu)|_{s_i}

  8. 更新Actor网络参数:

    θQ=τθQ+(1τ)θQθμ=τθμ+(1τ)θμ\begin{gathered} \theta^{Q'}=\tau\theta^Q+(1-\tau)\theta^{Q'} \\ \theta^{\mu'}=\tau\theta^\mu+(1-\tau)\theta^{\mu'} \end{gathered}

坚持原创技术分享,您的支持将鼓励我继续创作!
  • 本文作者:bdqfork
  • 本文链接:/articles/52
  • 版权声明:本博客所有文章除特别声明外,均采用BY-NC-SA 许可协议。转载请注明出处!
表情 |预览
快来做第一个评论的人吧~