DDPG-强化学习算法

给你一囗甜甜゛ 提交于 2020-01-22 16:55:29

Background

DDPG是一种同时学习Q-函数和策略的算法。它使用off-policy的数据以及bellman方程去学习Q函数,然后用Q函数去学习策略。

这种方法与Q-learning联系密切,源于那么一种思路:如果你知道最优的动作值函数Q(s,a)Q^*(s,a), 则当给定状态,最优动作a(s)a^*(s)可以通过解决一下问题而找出:a(s)=argmaxaQ(s,a).a^*(s) = \arg \max_a Q^*(s,a).
DDPG将学习Q(s,a)Q^*(s,a)的近似与学习a(s)a^*(s)的近似进行交织,并且这样做的方式特别适合于具有连续动作空间的环境。但是,DDPG特别适合具有连续动作空间的环境是什么意思? 这关系到我们如何计算maxaQ(s,a)max_aQ^*(s,a)中的最大动作.

当离散动作数量有限时,最大值没有问题,因为我们可以分别计算每个动作的Q值并直接比较它们。 (这也立即为我们提供了最大化Q值的操作。)但是,当操作空间是连续的时,我们无法详尽地评估该空间,并且解决优化问题并不是容易的事情。 使用普通的优化算法会使计算maxaQ(s,a)max_aQ^*(s,a)成为昂贵的子程序。 而且由于每次代理要在环境中执行操作时都需要运行它,因此这是不可接受的。

因为动作空间是连续的,所以假设函数Q(s,a)Q^*(s,a)关于动作自变量是可微的。 这使我们能够为利用该事实的策略μ(s)\mu(s)设置有效的基于梯度的学习规则。 然后,不必每次都希望计算maxaQ(s,a)max_aQ(s,a)时运行昂贵的优化子过程,而是可以使用maxaQ(s,a)Q(s,μ(s))max_aQ(s,a)\approx Q(s,\mu(s))对其进行近似。 请参阅“关键方程式”部分的详细信息。

Quick Facts

  • DDPG是一个off-policy算法
  • DDPG仅能用于连续动作空间的环境
  • DDPG可以视为连续动作空间的Deep Q-learning
  • SpinningUP中的DDPG不支持并行运算

Key Equations

DDPG的Q-learning部分

首先,让我们回顾一下描述最佳作用值函数的Bellman方程, Q(s,a):Q^*(s,a):Q(s,a)=EsP[r(s,a)+γmaxaQ(s,a)]Q^*(s,a) = \underset{s' \sim P}{{\mathrm E}}\left[r(s,a) + \gamma \max_{a'} Q^*(s', a')\right] 其中sPs'\sim P是简称,即下一个状态ss'是从一个分布为P(s,a)P(\cdot|s,a)的环境中采样的。

Bellman方程是学习Q(s,a)Q^*(s,a)的起点。假设近似器是一个神经网络Qϕ(s,a)Q_\phi(s,a),参数为ϕ,\phi,我们收集了一个转移对(s,a,r,s,d)(s,a,r,s',d)集合D\mathcal D(q其中dd表示状态ss'是否终结)。我们设置一个均方Bellman误差(MSBE)函数,它告诉我们QϕQ_\phi满足Bellman 方程的程度:L(ϕ,D)=E(s,a,r,s,d)D[(Qϕ(s,a)(r+γ(1d)maxaQϕ(s,a)))2]L(\phi, {\mathcal D}) = \underset{(s,a,r,s',d) \sim {\mathcal D}}{{\mathrm E}}\left[ \Bigg( Q_{\phi}(s,a) - \left(r + \gamma (1 - d) \max_{a'} Q_{\phi}(s',a') \right) \Bigg)^2 \right]这里,在评估(1d)(1-d), 我们用了一个python惯例,True:1,False:0。当"d==True"表示当ss'是终结状态的时候,Q函数应该显示:代理不会得到额外奖励在这个状态之后。

Q-learning算法作为函数近似,比如说DQN(及其变种)和DDPG,都极大基于最小化MSBE损失函数。这里有两个主要的技巧值得说明,以及一个详细的DDPG细节。

  • 技巧1:回放缓存。所有蓄念一个深度神经网络其近似Q(s,a)Q^*(s,a)的标准算法都能用经验回放。这是一个先前经验的集合D\mathcal D。 未来让算法有稳定的表现,缓存应该足够大以包括一大范围的经验,但是任何经验都保留不一定总是好的。如果你只用经常出现的数据,你就会过拟合;如果你用太多经验,你可能会降低训练的速度。

我们已经提到DDPG是一种off-policy算法:这一点与突出显示原因和方式一样重要。 请注意,重播缓冲区应包含旧的体验,即使它们是使用过时的策略获得的也是如此。 为什么我们完全可以使用这些? 原因是Bellman方程式并不关心使用了哪个转换元组,或如何选择动作,或在给定的转移后会发生什么,因为对于所有可能的转换,最佳Q函数都应满足Bellman方程式。 因此,当尝试通过MSBE最小化拟合Q函数时,我们经历的任何转移对都是公平的游戏。

  • 技巧2:目标网络。 Q-learning算法使用目标网络,式子r+γ(1d)maxaQϕ(s,a)r + \gamma (1 - d) \max_{a'} Q_{\phi}(s',a')叫做目标,英文当我们最小化MSBE损失的时候,我们尝试去使Q-函数更像目标。问题在于,目标取决于我们尝试训练的相同参数:ϕ\phi。 这使得MSBE最小化不稳定。 解决方案是使用一组参数,这些参数接近ϕ\phi,但是具有时间延迟,也就是说,第二个网络(称为目标网络)之后于第一个网络。 目标网络的参数表示为ϕtarg\phi_{\text{targ}}

在基于DQN的算法中,每隔一定数量的步骤,目标网络就从主网络复制一次。 在DDPG风格的算法中,通过每次主网络通过polyak平均更新,就更新一次目标网络:ϕtargρϕtarg+(1ρ)ϕ,\phi_{\text{targ}} \leftarrow \rho \phi_{\text{targ}} + (1 - \rho) \phi,其中ρ\rho是一个在0,1之间的参数(通常接近1)。这个超参数在spoinningup叫做polyakpolyak

DDPG细节:计算目标动作的最大动作。在连续动作空间中计算这个是个难点。DDPG 解决这个问题通过用目标策略网络计算一个动作,这个动作近似地最大化Qϕtarg.Q_{\phi_{targ}}.目标策略网络正如目标Q-function:在训练过程中通过polyakpolyak平均化策略参数。

综上,DDPG的Q-learning通过随机梯度下降最小化下面的MSBE损失:L(ϕ,D)=E(s,a,r,s,d)D[(Qϕ(s,a)(r+γ(1d)Qϕtarg(s,μθtarg(s))))2],L(\phi, {\mathcal D}) = \underset{(s,a,r,s',d) \sim {\mathcal D}}{{\mathrm E}}\left[ \Bigg( Q_{\phi}(s,a) - \left(r + \gamma (1 - d) Q_{\phi_{\text{targ}}}(s', \mu_{\theta_{\text{targ}}}(s')) \right) \Bigg)^2 \right],其中μθtarg\mu_{\theta_{targ}}是目标策略。

DDPG的策略学习部分

DDPG的策略学习是相对简单的。我们想去学习一个确定性网络μθ(s)\mu_\theta(s),它给出了最大化Qϕ(s,a)Q_\phi(s,a)的动作。因为动作空间是连续的,我们假设Q-function是关于动作可导的,我们用梯度上升(只针对策略参数)去解决:maxθEsD[Qϕ(s,μθ(s))].\max_{\theta} \underset{s \sim {\mathcal D}}{{\mathrm E}}\left[ Q_{\phi}(s, \mu_{\theta}(s)) \right].注意到Q-function参数在这里被视为常量。

Exploration vs. Exploitation(探索vs.利用)

DDPG训练一个确定性策略以一个off-policy的方式。因为策略是确定的,如果代理要on-policy探索,一开始它可能不会尝试足够多分支的动作去找到有用的学习信号。为了让DDPG策略探索得更好,我们加入了噪声给它的那些动作在训练的时候。原始DDPG的作者建议时间相关的 OU 噪声,但是最近更多的结果表明,不相干的非0高斯噪声也能很好起作用。因为这个形式更简单,更被偏好。为了更好地得到高质量的训练数据,你可以在训练的时候减少噪声的幅度。(我们在执行过程中不执行此操作,并且在整个过程中保持噪声等级固定)

在测试时,要查看策略如何充分利用它所学到的知识,我们不会在操作中增加噪音。

我们的DDPG实施在培训开始时使用了一个技巧来改进探索。 对于开始时有固定数量的步骤(使用start_steps关键字参数设置),代理将从有效动作的均匀随机分布中采样动作。 之后,它将返回到正常的DDPG探索。

在这里插入图片描述

Documentation

spinup.ddpg(env_fn, actor_critic=, ac_kwargs={}, seed=0, steps_per_epoch=5000, epochs=100, replay_size=1000000, gamma=0.99, polyak=0.995, pi_lr=0.001, q_lr=0.001, batch_size=100, start_steps=10000, act_noise=0.1, max_ep_len=1000, logger_kwargs={}, save_freq=1)
https://spinningup.openai.com/en/latest/_modules/spinup/algos/ddpg/ddpg.html#ddpg

Paramemeters:

  • env_fn – A function which creates a copy of the environment. The environment must satisfy the OpenAI Gym API.
  • actor_critic - A function which takes in placeholder symbols for state and action, and returns the main outputs from the agent’s computation
  • ac_kwargs (dict) – Any kwargs appropriate for the actor_critic function you provided to DDPG.
  • seed (int) – Seed for random number generators.
  • steps_per_epoch (int) – Number of steps of interaction (state-action pairs) for the agent and the environment in each epoch.
  • epochs (int) – Number of epochs to run and train agent.
  • replay_size (int) – Maximum length of replay buffer.
  • gamma (float) – Discount factor. (Always between 0 and 1.)
  • polyak (float) – Interpolation factor in polyak averaging for target networks. Target networks are updated towards main networks according to:θtargρθtarg+(1ρ)θ\theta_{targ}\leftarrow\rho\theta_{targ}+(1-\rho)\thetawhere ρ\rho is polyak. (Always between 0 and 1, usually close to 1.)
  • pi_lr (float) – Learning rate for policy.
  • q_lr (float) – Learning rate for Q-networks.
  • batch_size (int) – Minibatch size for SGD.
  • start_steps (int) – Number of steps for uniform-random action selection, before running real policy. Helps exploration.
  • act_noise (float) – Stddev for Gaussian exploration noise added to policy at training time. (At test time, no noise is added.)
  • max_ep_len (int) – Maximum length of trajectory / episode / rollout.
  • logger_kwargs (dict) – Keyword args for EpochLogger.
  • save_freq (int) – How often (in terms of gap between epochs) to save the current policy and value function.

References

Deterministic Policy Gradient Algorithms, Silver et al. 2014
Continuous Control With Deep Reinforcement Learning, Lillicrap et al. 2016

Why These Papers?

Silver 2014 is included because it establishes the theory underlying deterministic policy gradients (DPG). Lillicrap 2016 is included because it adapts the theoretically-grounded DPG algorithm to the deep RL setting, giving DDPG.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!