源代码:https://github.com/higgsfield/RL-Adventure

在Pytorch1.4.0上解决bug后的复现版本:https://github.com/lucifer2859/DQN

DQN Adventure: from Zero to State of the Art

This is easy-to-follow step-by-step Deep Q Learning tutorial with clean readable code.

The deep reinforcement learning community has made several independent improvements to the DQN algorithm. This tutorial presents latest extensions to the DQN algorithm in the following order:

1. Playing Atari with Deep Reinforcement Learning(DQN with experience replay)

[[arxiv]](https://www.cs.toronto.edu/~vmnih/docs/dqn.pdfCoRR 2013

[[code]](https://github.com/higgsfield/RL-Adventure/blob/master/1.dqn.ipynb)

本文提出了基于经验回放的DQN,标志着DQN的诞生,也标志着深度强化学习的诞生。

经验回放(experience replay):将经验(即历史的状态、动作、奖励等)存储起来,再在存储的经验中按一定的规则采样。

经验回放主要有"存储"和"采样回放"两大关键步骤。

  • 存储:将轨迹以(St,At,Rt+1,St+1)等形式存储起来;
  • 采样回放:使用某种规则从存储的(St,At,Rt+1,St+1)中随机取出一条或多条经验。

经验回放有以下好处。

  • 在训练Q网络时,可以消除数据的关联,使得数据更像是独立同分布的(独立同分布是很多有监督学习的证明条件)。这样可以减小参数更新的方差,加快收敛。
  • 能够重复使用经验,对于数据获取困难的情况尤其有用。

2. Human-level control through deep reinforcement learning(DQN with target network)

[[arxiv]](https://www.nature.com/articles/nature14236) Nature 2015

[[code]](https://github.com/devsisters/DQN-tensorflow)

本文提出了目标网络(target network)这一概念,目标网络是在原有的神经网络之外再搭建一份结构完全相同的网络。原先就有的神经网络称为评估网络(evaluation network)。在学习的过程中,使用目标网络来进行自益得到回报的评估值,作为学习的目标。在权重更新的过程中,只更新评估网络的权重,而不更新目标网络的权重。这样,更新权重时针对的目标就不会再每次迭代都变化,是一个固定的目标。在完成一定次数的更新后,再将评估网络的权重值赋给目标网络,进而进行下一批更新。这样,目标网络也能得到更新。由于在目标网络没有变化的一段时间内回报的估计是相对固定的。目标网络的引入增加了学习的稳定性。所以,目标网络目前已经成为深度Q学习的主流做法。

3. Deep Reinforcement Learning with Double Q-learning(Double DQN)

[[arxiv]](https://arxiv.org/abs/1509.06461) AAAI 2016

[[code]](https://github.com/higgsfield/RL-Adventure/blob/master/2.double%20dqn.ipynb)

双重Q学习可以消除最大化偏差(maximization bias)。

本文将双重Q学习用于DQN,得到双重DQN(Double DQN,DDQN)。考虑到DQN已经有了评估网络和目标网络两个网络,所以双重DQN在估计回报时只需要用评估网络确定动作,用目标网络确定回报的估计即可。

4. Dueling Network Architectures for Deep Reinforcement Learning(Dueling DQN)

[[arxiv]](https://arxiv.org/abs/1511.06581) ICML 2016

[[code]](https://github.com/higgsfield/RL-Adventure/blob/master/3.dueling%20dqn.ipynb)

本文提出了一种神经网络结构——对偶网络(dual network)。

对偶网络理论利用动作价值函数和状态价值函数之差定义了一个新的函数——优势函数A(advantage function):

由于同一个Q函数事实上存在着无穷多种分解为V函数和A函数的方式。为了不给训练带来不必要的麻烦,往往可以通过增加一个由优势函数导出的量,使得等效的优势函数满足固定的特征,使得分解唯一。常见的方法有以下两种:

  • 考虑优势函数的最大值,令
  • 考虑优势函数的平均值,令

5. Prioritized Experience Replay(PER,Prioritized DQN

[[arxiv]](https://arxiv.org/abs/1511.05952ICLR 2016

[[code]](https://github.com/higgsfield/RL-Adventure/blob/master/4.prioritized%20dqn.ipynb)

本文提出了优先回放。优先回放的思想是为经验池里的经验指定一个优先级,在选取经验时更倾向于选择优先级高的经验。

6. Noisy Networks for Exploration(Noisy DQN)

[[arxiv]](https://arxiv.org/abs/1706.10295ICLR 2018

[[code]](https://github.com/higgsfield/RL-Adventure/blob/master/5.noisy%20dqn.ipynb)

[[blog]](https://zhuanlan.zhihu.com/p/138504673)

本文提出了一种将参数化的噪音加入到神经网络权重上去的方法来增加强化学习中的探索,称为NoisyNet。

用于探索的NoisyNet可以替代原本的ε-贪婪策略(DQN -> NoisyNet-DQN)。

Noisy Linear Layer:

The NoisyNet-DQN Loss:

The NoisyNet-Dueling Loss:

7. A Distributional Perspective on Reinforcement Learning(C51)

[[arxiv]](https://arxiv.org/pdf/1707.06887.pdf) ICML 2017

[[code]](https://github.com/higgsfield/RL-Adventure/blob/master/6.categorical%20dqn.ipynb)

[[blog]](https://www.cnblogs.com/lucifer1997/p/13278861.html)

本文主张采用分布观点来进行强化学习,研究的主要对象是期望价值为Q的随机回报Z。此随机回报也由递归方程描述,但具有分布性质:

8. Rainbow: Combining Improvements in Deep Reinforcement Learning

[[arxiv]](https://arxiv.org/abs/1710.02298AAAI 2018

[[code]](https://github.com/higgsfield/RL-Adventure/blob/master/7.rainbow%20dqn.ipynb)

源代码缺乏关键的多步回报以及优先重播的实现。

[[code]](https://github.com/Kaixhin/Rainbow)

9. Dopamine: A Research Framework for Deep Reinforcement Learning

[[arxiv]](https://arxiv.org/abs/1812.06110)

[[code]](https://github.com/google/dopamine)

Dopamine Rainbow智能体(Castro et al., 2018),是对原始Rainbow智能体的开源实现(Hessel et al., 2018),但是做出了一些简化的设计选择。原始智能体通过使用(a) 分布学习目标,(b) 多步回报,(c) Adam优化器,(d) 优先回放,(e) 双重Q学习,(f) 对偶结构,以及(g) 带噪的探索网络。Dopamine Rainbow智能体仅使用这些调整的前四个,在Hessel et al. (2018)的原始分析中被确定为该智能体最重要的方面。

10. Distributional Reinforcement Learning with Quantile Regression(QR-DQN)

[[arxiv]](https://arxiv.org/pdf/1710.10044.pdf) AAAI 2018

[[code]](https://github.com/higgsfield/RL-Adventure/blob/master/8.quantile%20regression%20dqn.ipynb)

[[blog]](https://www.cnblogs.com/lucifer1997/p/13278817.html)

首先,本文将现有结果扩展到近似分布设置。其次,本文提出了一种与理论公式相一致的新颖的分布强化学习算法。

11. Hierarchical Deep Reinforcement Learning: Integrating Temporal Abstraction and Intrinsic Motivation

[[arxiv]](https://arxiv.org/abs/1604.06057) NIPS 2016

[[code]](https://github.com/higgsfield/RL-Adventure/blob/master/9.hierarchical%20dqn.ipynb)

12. Neural Episodic Control

[[arxiv]](https://arxiv.org/pdf/1703.01988.pdf) ICML 2017

[[code]](#)

强化学习模型实现RL-Adventure的更多相关文章

  1. 论文:利用深度强化学习模型定位新物体(VISUAL SEMANTIC NAVIGATION USING SCENE PRIORS)

    这是一篇被ICLR 2019 接收的论文.论文讨论了如何利用场景先验知识 (scene priors)来定位一个新场景(novel scene)中未曾见过的物体(unseen objects).举例来 ...

  2. 基于TORCS和Torch7实现端到端连续动作自动驾驶深度强化学习模型(A3C)的训练

    基于TORCS(C++)和Torch7(lua)实现自动驾驶端到端深度强化学习模型(A3C-连续动作)的训练 先占坑,后续内容有空慢慢往里填 训练系统框架 先占坑,后续内容有空慢慢往里填 训练系统核心 ...

  3. 强化学习之五:基于模型的强化学习(Model-based RL)

    本文是对Arthur Juliani在Medium平台发布的强化学习系列教程的个人中文翻译,该翻译是基于个人分享知识的目的进行的,欢迎交流!(This article is my personal t ...

  4. 强化学习(十七) 基于模型的强化学习与Dyna算法框架

    在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL),本篇我们讨论最后一种强化学习流派,基于模型的强化学习(Model Base ...

  5. 深度学习-强化学习(RL)概述笔记

    强化学习(Reinforcement Learning)简介 强化学习是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益.其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予 ...

  6. 强化学习 3—— 使用蒙特卡洛采样法(MC)解决无模型预测与控制问题

    一.问题引入 回顾上篇强化学习 2 -- 用动态规划求解 MDP我们使用策略迭代和价值迭代来求解MDP问题 1.策略迭代过程: 1.评估价值 (Evaluate) \[v_{i}(s) = \sum_ ...

  7. 【整理】强化学习与MDP

    [入门,来自wiki] 强化学习是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益.其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的 ...

  8. (转) 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文)

    本文转自:http://mp.weixin.qq.com/s/aAHbybdbs_GtY8OyU6h5WA 专题 | 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文) 原创 201 ...

  9. 强化学习论文(Scalable agent alignment via reward modeling: a research direction)

     原文地址: https://arxiv.org/pdf/1811.07871.pdf ======================================================== ...

随机推荐

  1. Python之生成器、迭代器

    生成器 生成器类似返回值为数组的一个函数,这个函数可以接受参数,可被调用,但只能产生一个值,所以大大节省内存. 生成器表达式的语法非常简单,只需要将列表推导式的中括号改成小括号就可以了 [x+x fo ...

  2. 4-Pandas之数据类型与数据筛选

    一.数据类型 1.Pandas的数据类型主要结合了pandas和numpy两个模块中的数据类型,包括以下几种: float int bool datetime64[ns]------>日期类型 ...

  3. PHP pi() 函数

    实例 返回圆周率 PI 的值: <?phpecho(pi());?>高佣联盟 www.cgewang.com 定义和用法 pi() 函数返回圆周率 PI 的值. 提示:命名常量 M_PI ...

  4. PHP xpath() 函数

    定义和用法 xpath() 函数运行对 XML 文档的 XPath 查询.高佣联盟 www.cgewang.com 如果成功,该函数返回 SimpleXMLElements 对象的一个数组.如果失败, ...

  5. 牛客挑战赛40 VMware和基站 set 二分 启发式合并 区间覆盖

    LINK:VMware和基站 一道 做法并不常见的题目 看起来很难写 其实set维护线段就可以解决了. 容易想到 第二个操作借用启发式合并可以得到一个很不错的复杂度 不过利用线段树维护这个东西 在区间 ...

  6. Raft协议理解

    raft协议最关键的部分是领导选举和日志复制 日志复制 日志匹配原则:如果两个日志在相同索引位置的entry的任期号相同,那么这两个日志从头到这个索引位置之前完全相同. 日志匹配原则可以解释为如下两条 ...

  7. C++ 中可调用的且有函数功能的东东

    第一个:函数     其实函数在声明的时候都有个名字: 这个名字可以看作是是指针,将其直接赋值给函数指针 也可以看作是可取指的对其& 再赋值给函数指针 第二个:函数指针   通过其被赋值的方式 ...

  8. 【FZYZOJ】「Paladin」瀑布 题解(期望+递推)

    题目描述 CX在Minecraft里建造了一个刷怪塔来杀僵尸.刷怪塔的是一个极高极高的空中浮塔,边缘是瀑布.如果僵尸被冲入瀑布中,就会掉下浮塔摔死.浮塔每天只能工作 $t$秒,刷怪笼只能生成 $N$  ...

  9. 云服务器远程连接mysql数据库

    首先需要在云服务器上,下载安装好mysql与Navicat. mysql下载好以后,打开云端的开始,找到mysql的命令窗,进入输入自己的mysql密码,稍等片刻进入mysql数据库 进入之后输入下列 ...

  10. 手把手教你使用Python网络爬虫获取招聘信息

    1.前言 现在在疫情阶段,想找一份不错的工作变得更为困难,很多人会选择去网上看招聘信息.可是招聘信息有一些是错综复杂的.而且不能把全部的信息全部罗列出来,以外卖的58招聘网站来看,资料整理的不清晰. ...