DQN三个经典的变种:Double DQN、Dueling DQN、Prioritized Replay Buffer。

Double-DQN:将动作选择和价值估计分开,避免价值过高估计。

Dueling-DQN:将Q值分解为状态价值和优势函数,得到更多有用信息。

Prioritized Replay Buffer:将经验池中的经验按照优先级进行采样。

1.Double DQN

(1)为什么提出Double DQN ?

为了解决原始DQN存在的过估计问题。

(2)什么是过估计?

过估计是指估计的值函数比真实的值函数大。

(3)为什么DQN存在过估计的问题?

因为DQN是一种off-policy的方法,每次学习时,不是使用下一次交互的真实动作,而是使用当前认为价值最大的动作来更新目标值函数,所以会出现对Q值的过高估计。通过基于函数逼近方法的值函数更新公式可以看出:

(4)怎么解决这个问题?

为了解决过估计的问题,Hasselt提出了Double Q Learning方法,将此方法应用到DQN中,就是Double DQN,即DDQN。所谓的Double Q Learning是将动作的选择和动作的评估分别用不同的值函数来实现。

动作的选择:选择该状态下动作值函数最大的动作,即

。动作的选择所用的动作值函数:

动作的评估:选出

后,利用
处的动作值函数构造TD目标,TD目标公式为:

2.经验回放(Prioritized Replay)

DQN的经验回放采用均匀分布,而均匀分布采样并不能高效利用数据。因为agent的经验就是经历过的数据,但这些数据对于训练并不是具有同等重要的意义,agent在某些状态的学习效率比其他状态的学习效率高。

优先回放的基本思想:打破均匀采样,赋予学习效率高的状态以更大的采样权重。

如何选择权重?

一个理想的标准是agent学习的效率越高,权重越大。TD偏差越大,说明该状态处的值函数与TD目标的差距越大,agent的更新量越大,因此该处的学习效率越高。

(如果TD-error越大, 就代表我们的预测精度还有很多上升空间, 那么这个样本就越需要被学习, 也就是优先级p越高。)

有了 TD-error 就有了优先级 p, 那我们如何有效地根据 p 来抽样呢?

如果每次抽样都需要针对 p 对所有样本排序, 这将会是一件非常消耗计算能力的事. 可以采用更高级的算法——SumTree方法。

SumTree是一种树形结构,每片树叶存储每个样本的优先级P,每个树枝节点只有两个分叉,节点的值是两个分叉的和,所以SumTree的顶端就是所有p的和。

抽样时,将 p 的总合除以 batch size, 分成batch size个区间。

比如p的总和是42的话, 如果抽6个样本,划分成区间[0-7], [7-14], [14-21], [21-28], [28-35], [35-42]。然后在每个区间里随机选取一个数。

(i)比如在区间 [21-28] 里选到了24, 就按照这个 24 从最顶上的42开始向下搜索.。

(ii)首先顶端42 下面有两个子结点,先对比左边的子结点, 如果比24大, 那就走左边这条路。

(iii)接着再对比 29 下面的左边子结点,13比24小, 那就走右边的路, 并且初始值24根据 13 修改, 变成 24-13 = 11。

(iiii)接着拿着 11 和 16 左子结点比,12 比 11 大, 选 12 当做这次选到的 priority, 并且选择 12 对应的一条数据.

简而言之,每次我们都选较大的节点数,因为每个父节点都是两个子节点的和,那么父节点较大的数也对应着较大的子节点数。

3.Dueling-DQN

Dueling-DQN从网络结构上改进了DQN,动作值函数可以分为状态值函数和优势函数,即

,对这两个函数分别利用神经网络逼近。
原始DQN(上)和Dueling DQN(下)

什么是优势函数?

状态值函数

可以理解为:在该状态下所有可能动作所对应的动作值函数乘以采取该动作的概率的和。更通俗的讲,值函数
是该状态下所有动作值函数关于动作概率的平均值;

动作值函数

是单个动作所对应的值函数;

优势函数

能评价当前动作值函数相对于平均值的大小。所以,这里的优势指的是动作值函数相比于当前状态的值函数的优势。如果优势函数大于零,则说明该动作比平均动作好,如果优势函数小于零,则说明当前动作还不如平均动作好。
优势函数示意图

本节涉及到的论文:

1.Deep Reinforcement Learning with Double Q-learning(https://arxiv.org/pdf/1509.06461v3.pdf)

2.PRIORITIZED EXPERIENCE REPLAY(https://arxiv.org/pdf/1511.05952.pdf)

3.Dueling Network Architectures for Deep Reinforcement Learning(https://arxiv.org/pdf/1511.06581.pdf)

dueling dqn 和 double dqn_强化学习(十一)--DQN三个经典的变种相关推荐

  1. dqn系列梳理_强化学习:DQN与Double DQN讨论

    1 DQN方法 强化学习逐渐引起公众的注意要归功于谷歌的DeepMind公司.DeepMind公司最初是由Demis Hassabis, Shane Legg和Mustafa Suleyman于201 ...

  2. dqn 应用案例_强化学习(十二) Dueling DQN

    在强化学习(十一) Prioritized Replay DQN中,我们讨论了对DQN的经验回放池按权重采样来优化DQN算法的方法,本文讨论另一种优化方法,Dueling DQN.本章内容主要参考了I ...

  3. 【强化学习】DQN 的三种改进在运筹学中的应用

    这篇文章主要介绍 DQN 的三种改进:Nature DQN.Double DQN.Dueling DQN 在运筹学中的应用,并给出三者的对比,同时也会给出不同增量学习下的效果. 这三种具体的改进方式可 ...

  4. 强化学习之DQN超级进化版Rainbow

    阅读本文前可以先了解我前三篇文章<强化学习之DQN><强化学习之DDQN>.<强化学习之 Dueling DQN>. Rainbow结合了DQN算法的6个扩展改进, ...

  5. 快乐的强化学习2——DQN及其实现方法

    快乐的强化学习2--DQN及其实现方法 学习前言 简介 DQN算法的实现 具体实现代码 学习前言 刚刚从大学毕业,近来闲来无事,开始了机器学习的旅程,深度学习是机器学习的重要一环,其可以使得机器自我尝 ...

  6. 【强化学习】DQN与Double DQN

    文章目录 一.DQN 1.1 Q网络和目标网络 1.2 经验回放 1.3 DQN流程 1.4 DQN的Q估值过高问题 二.Double DQN 一.DQN 1.1 Q网络和目标网络 Q π ( s t ...

  7. 【强化学习】DQN及其延伸算法

    目录 DQN算法 价值函数的近似表示 提出背景: 近似表示: 状态价值函数 动作价值函数 概述 经验回放(experience replay) 算法流程 小结 Nature DQN算法 概述 Natu ...

  8. 初探强化学习(14)DQN类算法的值高估问题的笔记

    关于DQN算法的一些细节,可以查看这个博客,讲的很细节. 主要参考博客 https://zhuanlan.zhihu.com/p/443807831 https://itpcb.com/a/16274 ...

  9. dqn 应用案例_强化学习(九)Deep Q-Learning进阶之Nature DQN

    在强化学习(八)价值函数的近似表示与Deep Q-Learning中,我们讲到了Deep Q-Learning(NIPS 2013)的算法和代码,在这个算法基础上,有很多Deep Q-Learning ...

最新文章

  1. 苹果手表可以运行 ruby 脚本了
  2. 小鱼易连获腾讯数亿C轮投资,云视频布局产业互联网
  3. np.asarray和np.array、np.nanmean和np.mean、np.diff、
  4. vijos 1030 重叠的方框
  5. [py2neo]Ubuntu14 安装py2neo失败问题解决
  6. mybatis sql中有中文处理
  7. 算法:字符串消除问题的数学证明
  8. Go语言编程—Go语言实现文件拷贝
  9. 洛谷P2486 [SDOI2011]染色(树链剖分+线段树判断边界)
  10. 【译】索引进阶(八):SQL SERVER唯一索引
  11. Php程序监控邮件提醒linux,Linux ping命令实现网络监控 并邮件提醒管理员
  12. 基于STM32设计的掌上游戏机(运行NES游戏模拟器)详细开发过程
  13. 一个简单标注库的插件化开发实践
  14. Ubuntu破解密码
  15. pdf转word工具大全
  16. Facet Kernel详解、Random Walk随机游走算法详解
  17. 一维数组新老数据对比修改字段
  18. 4.8 期货每日早盘操作建议
  19. 开机自启动夜神模拟器全屏并打开指定apk
  20. 一级计算机考试计算,全国计算机一级MS OFFICE等级考试计算题(3)

热门文章

  1. 小红书去水印代码_小红书关键词排名如何进行优化
  2. python 多线程 线程如何获得返回值 (重写threading.Thread类)
  3. python 将YOLO(txt)格式的标注数据批量转换为PascalVOC(XML)格式的标注数据
  4. python numpy矩阵切片和索引的用法(冒号:和省略号...)
  5. varnish介绍以及虚拟机的封装
  6. 浅谈AQS(AbstractQueuedSynchronizer,同步队列)
  7. 蓝桥杯C++ AB组辅导课 第六讲 双指针、BFS与图论 Acwing
  8. Odd Grasshopper 奇偶找规律
  9. docker环境安装mysql
  10. mysql 交集_MySQL 查询结果取交集的实现方法