文章目录

  • Background
  • Quick Facts
  • Key Equations
    • DDPG的Q-learning部分
    • DDPG的策略学习部分
    • Exploration vs. Exploitation(探索vs.利用)
    • Documentation
  • References
    • Why These Papers?

Background

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

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

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

因为动作空间是连续的,所以假设函数Q∗(s,a)Q^*(s,a)Q∗(s,a)关于动作自变量是可微的。 这使我们能够为利用该事实的策略μ(s)\mu(s)μ(s)设置有效的基于梯度的学习规则。 然后,不必每次都希望计算maxaQ(s,a)max_aQ(s,a)maxa​Q(s,a)时运行昂贵的优化子过程,而是可以使用maxaQ(s,a)≈Q(s,μ(s))max_aQ(s,a)\approx Q(s,\mu(s))maxa​Q(s,a)≈Q(s,μ(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):Q∗(s,a)=Es′∼P[r(s,a)+γmax⁡a′Q∗(s′,a′)]Q^*(s,a) = \underset{s' \sim P}{{\mathrm E}}\left[r(s,a) + \gamma \max_{a'} Q^*(s', a')\right] Q∗(s,a)=s′∼PE​[r(s,a)+γa′max​Q∗(s′,a′)]其中s′∼Ps'\sim Ps′∼P是简称,即下一个状态s′s's′是从一个分布为P(⋅∣s,a)P(\cdot|s,a)P(⋅∣s,a)的环境中采样的。

Bellman方程是学习Q∗(s,a)Q^*(s,a)Q∗(s,a)的起点。假设近似器是一个神经网络Qϕ(s,a)Q_\phi(s,a)Qϕ​(s,a),参数为ϕ,\phi,ϕ,我们收集了一个转移对(s,a,r,s′,d)(s,a,r,s',d)(s,a,r,s′,d)集合D\mathcal DD(q其中ddd表示状态s′s's′是否终结)。我们设置一个均方Bellman误差(MSBE)函数,它告诉我们QϕQ_\phiQϕ​满足Bellman 方程的程度:L(ϕ,D)=E(s,a,r,s′,d)∼D[(Qϕ(s,a)−(r+γ(1−d)max⁡a′Qϕ(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]L(ϕ,D)=(s,a,r,s′,d)∼DE​⎣⎡​(Qϕ​(s,a)−(r+γ(1−d)a′max​Qϕ​(s′,a′)))2⎦⎤​这里,在评估(1−d)(1-d)(1−d), 我们用了一个python惯例,True:1,False:0。当"d==True"表示当s′s's′是终结状态的时候,Q函数应该显示:代理不会得到额外奖励在这个状态之后。

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

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

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

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

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

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

综上,DDPG的Q-learning通过随机梯度下降最小化下面的MSBE损失:L(ϕ,D)=E(s,a,r,s′,d)∼D[(Qϕ(s,a)−(r+γ(1−d)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],L(ϕ,D)=(s,a,r,s′,d)∼DE​⎣⎡​(Qϕ​(s,a)−(r+γ(1−d)Qϕtarg​​(s′,μθtarg​​(s′))))2⎦⎤​,其中μθtarg\mu_{\theta_{targ}}μθtarg​​是目标策略。

DDPG的策略学习部分

DDPG的策略学习是相对简单的。我们想去学习一个确定性网络μθ(s)\mu_\theta(s)μθ​(s),它给出了最大化Qϕ(s,a)Q_\phi(s,a)Qϕ​(s,a)的动作。因为动作空间是连续的,我们假设Q-function是关于动作可导的,我们用梯度上升(只针对策略参数)去解决:max⁡θEs∼D[Qϕ(s,μθ(s))].\max_{\theta} \underset{s \sim {\mathcal D}}{{\mathrm E}}\left[ Q_{\phi}(s, \mu_{\theta}(s)) \right].θmax​s∼DE​[Qϕ​(s,μθ​(s))].注意到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)\thetaθtarg​←ρθtarg​+(1−ρ)θwhere ρ\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.

DDPG-强化学习算法相关推荐

  1. 17种深度强化学习算法用Pytorch实现(附链接)

    来源:新智元 本文约1300字,建议阅读5分钟. 本文为你介绍一个用PyTorch实现了17种深度强化学习算法的教程和代码库,帮助大家在实践中理解深度RL算法. [ 导读 ]深度强化学习已经在许多领域 ...

  2. openssl 添加自定义算法_GitHub:用PyTorch实现17种深度强化学习算法

    [新智元导读]深度强化学习已经在许多领域取得了瞩目的成就,并且仍是各大领域受热捧的方向之一.本文推荐一个用 PyTorch 实现了 17 种深度强化学习算法的教程和代码库,帮助大家在实践中理解深度 R ...

  3. 【强化学习实战】基于gym和tensorflow的强化学习算法实现

    [新智元导读]知乎专栏强化学习大讲堂作者郭宪博士开讲<强化学习从入门到进阶>,我们为您节选了其中的第二节<基于gym和tensorflow的强化学习算法实现>,希望对您有所帮助 ...

  4. 7个流行的强化学习算法及代码实现

    目前流行的强化学习算法包括 Q-learning.SARSA.DDPG.A2C.PPO.DQN 和 TRPO. 这些算法已被用于在游戏.机器人和决策制定等各种应用中,并且这些流行的算法还在不断发展和改 ...

  5. 简述7个流行的强化学习算法及代码实现!

    目前流行的强化学习算法包括 Q-learning.SARSA.DDPG.A2C.PPO.DQN 和 TRPO.这些算法已被用于在游戏.机器人和决策制定等各种应用中,并且这些流行的算法还在不断发展和改进 ...

  6. 用多智能体强化学习算法MADDPG解决“老鹰捉小鸡“问题

    点击左上方蓝字关注我们 [飞桨开发者说]郑博培:北京联合大学机器人学院2018级自动化专业本科生,深圳市柴火创客空间认证会员,百度大脑智能对话训练师,百度强化学习7日营学员 MADDPG算法是强化学习 ...

  7. 目前最好用的大规模强化学习算法训练库是什么?

    点击蓝字  关注我们 本文整理自知乎问答,仅用于学术分享,著作权归作者所有.如有侵权,请联系后台作删文处理. 本文精选知乎问题"目前最好用的大规模强化学习算法训练库是什么?"评论区 ...

  8. 只用1/500数据就打败人类!一种采样高效的强化学习算法 | 报告详解

    [栏目:前沿进展]近日,清华大学交叉信息研究院高阳研究组在强化学习领域中取得突破,研究组所提出的模型EfficientZero首次在雅达利(Atari )游戏数据上超过同等游戏时长的人类平均水平.Ef ...

  9. 上交张伟楠副教授:基于模型的强化学习算法,基本原理以及前沿进展(附视频)

    2020 北京智源大会 本文属于2020北京智源大会嘉宾演讲的整理报道系列.北京智源大会是北京智源人工智能研究院主办的年度国际性人工智能高端学术交流活动,以国际性.权威性.专业性和前瞻性的" ...

  10. 【重磅】Tensorflow2.0实现29种深度强化学习算法大汇总

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要3分钟 Follow小博主,每天更新前沿干货 来源:深度强化学习实验室 作者:王健树 [导读]今天给大家推荐一个超赞的强化学习项目资料,该项目 ...

最新文章

  1. 被神话的大数据——从大数据(big data)到深度数据(deep data)思维转变
  2. Consumer is not subscribed to any topics
  3. 在WildFly上将JPA和CDI Bean与骆驼一起使用
  4. linux如何安装python环境变量中,Windows和linux环境下python安装及环境变量的配置
  5. CComPtr对象作为参数进行 1.值传递 2.引用传递 3.做为返回值的注意事项
  6. 语言孪生素数问题_刘建亚教授讲述“素数的故事”
  7. .net发送带附件邮件
  8. java编译sql存过_SQL SERVER 临时表导致存储过程重编译(recompile)的一些探讨
  9. 【修正】Q93:PLY文件对应图形法向量反向问题——以bunny10K为例
  10. 使用 T-SQL 实现 base64 解码
  11. linux下隐藏tomcat版本号
  12. Java通过月份获取当月工作日
  13. 前端如何进行seo优化
  14. 渗透技巧总结、渗透技巧
  15. hello heaven
  16. iOS开发之响应式编程RAC
  17. 航空公司VIP客户查询 (25 分)
  18. 企业微信的IM架构设计揭秘:消息模型、万人群、已读回执、消息撤回等
  19. SSM疫情防控志愿者管理系统 志愿者服务信息系统 大学志愿者管理系统Java
  20. Step7编程语言编程概述结构

热门文章

  1. 微信小程序之scroll-view-导航栏左右滑动
  2. 前端笔试题(附答案)
  3. proe输入数字时成双出现_天猫双11花呗可提额,支付宝输入几个数字,试试就知道...
  4. springboot整合shiro+mybatis-plus
  5. excel通过js导入到页面_基于Excel和Java自动化工作流程:发票生成器示例
  6. 树莓派运行python import os未找到命令_通过pip指令在树莓派上基于Python3安装OpenCV...
  7. 【uniapp】swiper 自定义轮播图指示点
  8. 【spring boot】【thymeleaf】SPEL处理 null 值
  9. 【maven】配置多个仓库
  10. php5.0 aes加解密,PHP的aes加解密算法