一、 Rainbow

参考链接:
https://blog.csdn.net/tianjuewudi/article/details/120580521
https://zhuanlan.zhihu.com/p/261322143
https://www.jianshu.com/p/1dfd84cd2e69
https://datawhalechina.github.io/easy-rl/#/chapter7/chapter7

1、 DQN

利用神经网络来代替表格法,我们可以输入S并输出多个Q,每个Q对应一个A。神经网络只需要储存有限的网络参数,我们的任务就是不断调整这些参数,使得输入输出符合我们的预期,而且状态可以泛化,相似的状态输出也差不多。

DQN有两大创新点,一个是经验回放,一个是固定Q目标。经验回放是指探索的数据特征形成一组组数据,并且可以随机打乱,使得神经网络可以重复多次地进行学习。这样可以打乱样本的关联性,而且能提高样本利用率。固定Q目标是指我们把Q值固定一段时间来训练参数,我们需要另外一个一样的网络(target Q网络),Q网络的作用是产生一个Q预测值,直接用来决策。而target Q是产生一个Q目标值,我们通过这个目标值的Q t + 1 计算Q网络Q t ,target Q往往固定一段时间来使Q网络得到充分训练。

存在的问题:高估计
最大化:

使用了 max 操作,当具有误差时,最大化会导致高估。
Bootstrapping:如果当前时刻高估了Q值,则进行更新时,会用高估的值更新Q值,导致高估更严重。

2、 DDQN

DDQN和DQN一样,也有一样的两个Q网络结构。下面是DQN的更新公式:

DDQN采用的是一种使更新公式更稳定的方法:

也就是说DDQN与DQN的不同之处在于用来更新Q网络的Target Q中Q ( St+1 , a )的选择方式,DQN直接用Target Q网络中t+1时刻可选Q的最大值用来更新,而DDQN用的是根据Q网络t+1时刻的最大Q来选择对应的action,然后用这个action来对应决定Target Q网络中的Q值,这样更新的Q值就会小于等于DQN更新的Q值,改善overestimate的问题。

Q网络负责选择动作,Target Q网络负责计算更新目标值
动作选择采取Q网络中值最大的动作,动作值评估采用Target Q网络
其核心思想是将动作选择和动作评估分别用不用的值函数来实现。

3、Dueling DQN

Dueling DQN的思想是把神经网络中Q价值的输出分成两部分,第一部分是状态价值V,这部分价值由状态直接决定和Action无关。第二部分就是动作价值和状态价值的差值A,每一个Action都存在一个差值。

Dueling DQN改变了网络的架构,网络的输出从Q(s, a)改成了V(s)+A(s, a)。使用该方法是因为,在某些状态St ,无论做什么动作at, 对下一个状态s t+1都没多大影响,当前状态动作函数也与当前动作选择不太相关。在这种情况下,dueling DQN更适用,比DQN学习更快,收敛效果更好。

A(s, a)需要添加一定的约束,如每列的和为0,A(s, a)需要进行一定的归一化操作,如:A=A-mean(A)。将传统的Q值分解为V值和优势函数A(s, a),可以区分哪些是状态引起的奖励,哪些是动作得到的奖励。由于A有约束,所以网络通常会优先更新V值,再调整A值。在实际操作中,我们通常需要减去一个平均值:

采用这种方法,虽然使得值函数V和优势函数A不再完美的表示值函数和优势函数(在语义上的表示),但是这种操作提高了稳定性。而且,并没有改变值函数V和优势函数A的本质表示。如果只是简单相加,由于动作类型的不同,具有不同的偏置量,可能无法得到很好的学习,通过在一个节点内的输出加入另一个节点的信息,可以让神经网络在误差传递的过程中得到更加充分的学习。

4、Prioritized replay(基于优先级的复用池)

在传统DQN中,经验池中的数据采样都是随机的,但其实不同样本的价值是不同的,需要给样本一个优先级,并根据样本的优先级进行采样

这里需要用到一个指标——TD误差。设目标网络产生的Q值为Q现实值, 预测Q网络产生的Q值为Q估计值。那么TD误差就是Q现实值-Q估计值。用来衡量优先学习的程度,如果TD误差越大,就代表预测精度还有很多的上升空间,这个样本就越需要被学习,即优先级p越高。

如果我们每次抽样都对p进行排序选取其中的最大值,会浪费大量的计算资源,从而使得训练时间变长。常用的解决方法是使用SumTree的树形结构来储存数据。这种树状结构本质上也是采用了概率式的选择方式,优先级p的大小跟选中的概率成正比,和线性的结构相比,这种方法不用逐一检查数据,大大提高了运行效率。

首先我们要对所有的数据建立一个树状结构,叶子节点储存每个样本的优先级p,每个树枝节点只有两个分叉,节点的值是两个分支的和。这样最上面的一层的一个节点是所有优先级p的和。

在抽样的时候,我们会将p的和分成batch_size个区间,然后再每个区间中随机选择一个数。例如我们在[21,28]的区间中选择了24,就按照42往下搜索,从左往右对比,如果这个数比节点小就继续往下走,比节点大则用这个数减去节点的数字然后继续往右进行对比。这里24比13大,因此往右搜索,数字变成24-13=11,11比16小,因此往下走,11比12小,因此我们最终选取的是优先级为12的这组数据。

5、Distributional DQN

在传统DQN中,网络输出的是动作价值Q的估计,但是其实还是忽略了很多信息。假如两个动作能够获得的价值期望相同都是20,第一个动作有90%的情况是10,10%的情况下是110,第二个动作的50%的情况下是25,50%的情况下是15,那么虽然期望一样,但是要想减少风险,就应该选择后一种动作,只输出期望值看不到背后隐含的风险。

如果采用分布视角(distributional perspective)来建模DRL的模型,可以的得到更好更稳定的结果。我们可以把价值限定在[ Vmin,Vmax]之间,选择N个等距的价值采样点,通过神经网络输出这N个采样点的概率,通过Q和TargetQ网络得到估计的价值分布和目标的价值分布,计算两个分布之间的差距。

现在的问题是如何表示这个分布,首先抛弃高斯分布,因为是单峰的,Distributional DQN的论文作者提出了一个叫做C51的算法,用51个等间距的atoms来描述一个分布,类似直方图,选择点的范围和个数取决于你的应用。

这时候网络的架构需要做一定的调整,原DQN输入的是状态s,输出的是一个包含各个动作价值的向量 (Q(s,a1),Q(s,a2),…,Q(s, am))。在Distributional DQN中,输入不变,输出变成一个矩阵,每一行代表一个动作,而列则代表了直方图中的每一条柱子,这个分布的范围是人为确定的,例如atoms有51个,范围为(0,50),则atoms是0 , 1 , 2 , . . . , 49 , 50。而神经网络输出的每一个动作对应每一个atoms的概率,有N个atoms则有N个概率,相加为1,每个概率和对应的atoms的值相乘可以得到动作价值的期望,即原本的Q值。

分布式Q函数是对分布(distribution)建模,怎么做呢?如图a所示,在原来的Q函数里面,假设我们只能采取 a1、a2、a3 这3 个动作,我们输入一个状态,输出 3 个值。这3 个值分别代表 3 个动作的 Q 值,但是这些 Q 值是一个分布的期望值。所以分布式Q函数就是直接输出分布。实际上的做法如图 b 所示,假设分布的值就分布在某一个范围里面,比如 −10 ~ 10,把 −10 ~ 10 拆成一个一个的长条。例如,每一个动作的奖励空间拆成 5 个长条。假设奖励空间可以拆成 5 个长条,Q函数的输出就是要预测我们在某一个状态采取某一个动作得到的奖励,其落在某一个长条里面的概率。所以绿色长条概率的和应该是 1,其高度代表在某一个状态采取某一个动作的时候,它落在某一个长条内的概率。绿色的代表动作a1,红色的代表动作 a2,蓝色的代表动作 a3。所以我们就可以用Q函数去估计a1 的分布、a2 的分布、a3 的分布。实际上在做测试的时候,我们选平均值最大的动作执行。

除了选平均值最大的动作以外,我们还可以对分布建模。例如,我们可以考虑动作的分布,如果分布方差很大,这代表采取这个动作虽然平均而言很不错,但也许风险很高,我们可以训练一个网络来规避风险。在两个动作平均值都差不多的情况下,也许可以选一个风险比较小的动作来执行,这就是分布式Q函数的好处。

为什么分布式深度Q网络不会高估奖励,反而会低估奖励呢?因为分布式深度Q网络输出的是一个分布的范围,输出的范围不可能是无限的,我们一定会设一个限制, 比如最大输出范围就是从 −10 ~ 10。假设得到的奖励超过 10,比如 100 怎么办?我们就当作没看到这件事,所以奖励很极端的值、很大的值是会被丢弃的,用分布式深度Q网络的时候,我们不会高估奖励,反而会低估奖励。

6、multi-step learning

传统DQN使用当前的即时奖励和下一时刻的价值估计来判断目标的价值,然而这种方法在训练的前期网络参数偏差较大时会导致得到的目标价值也会偏大,进而导致目标价值的估计偏差较大,因此出现了多步学习来解决这个问题。在多步学习中,即时奖励会通过与环境交互确切得到,所以训练前期的目标价值可以得到更准确的估计,从而加快训练的速度。

原DQN使用的是时序差分的更新策略即TD。loss公式为:

以上是one-step的TD算法。我们采用multi-step方法,对于N步的情况,loss公式变为:

先看看多步方法的好处,之前只采样了某一个步骤,所以得到的数据是真实的,接下来都是 Q 值估测出来的。现在采样比较多的步骤,采样 N个步骤才估测值,所以估测的部分所造成的影响就会比较小。当然多步方法的坏处因为 r有比较多项,所以我们把 N 项的 r加起来,方差就会比较大。但是我们可以调整 N 的值,在方差与不精确的 Q 值之间取得一个平衡。N就是一个超参数,我们可以对其进行调整。

7、Nosiy Net

我们还可以改进探索。ε-贪心这样的探索就是在动作的空间上加噪声,但是有一个更好的方法称为噪声网络(noisy net),它是在参数的空间上加噪声。噪声网络是指,每一次在一个回合开始的时候,在智能体要与环境交互的时候,智能体使用Q函数来采取动作,Q函数里面就是一个网络,我们在网络的每一个参数上加上一个高斯噪声(Gaussian noise),就把原来的Q函数变成Q~ 。因为我们已经用Q^ 来表示目标网络,所以我们用Q~ 来表示噪声Q函数(noisy Q-function)。我们把每一个参数都加上一个高斯噪声,就得到一个新的网络Q~。

这里要注意,在每个回合开始的时候,与环境交互之前,我们就采样噪声。接下来我们用固定的噪声网络玩游戏,直到游戏结束,才重新采样新的噪声,噪声在一个回合中是不能被改变的。OpenAI 与 DeepMind 在同时间提出了几乎一模一样的噪声网络方法,并且对应的两篇论文都发表在 ICLR 2018 会议中。不一样的地方是,他们用不同的方法加噪声。OpenAI 的方法比较简单,直接加一个高斯噪声,也就是把每一个参数、每一个权重(weight)都加一个高斯噪声。DeepMind 的方法比较复杂,该方法中的噪声是由一组参数控制的,网络可以自己决定噪声要加多大。但是两种方法的概念都是一样的,总之,我们就是对Q函数里面的网络加上一些噪声,把它变得有点儿不一样,即与原来的Q函数不一样,然后与环境交互。两篇论文里面都强调,参数虽然会被加上噪声,但在同一个回合里面参数是固定的。我们在换回合、玩另一场新的游戏的时候,才会重新采样噪声。在同一场游戏里面就是同一个噪声Q网络在玩该场游戏,这非常重要。因为这导致了噪声网络与原来的ε-贪心或其他在动作上做采样的方法的本质上的差异。

有什么本质上的差异呢?在原来采样的方法中,比如ε-贪心中,就算给定同样的状态,智能体采取的动作也不一定是一样的。因为智能体通过采样来决定动作,给定同一个状态,智能体根据Q函数的网络来输出一个动作,或者采样到随机来输出一个动作。所以给定相同的状态,如果是用ε-贪心的方法,智能体可能会执行不同的动作。但实际上策略并不是这样的,一个真实世界的策略,给定同样的状态,它应该有同样的回应。而不是给定同样的状态,它有时候执行Q函数,有时候又是随机的,这是一个不正常的动作,是在真实的情况下不会出现的动作。但是如果我们是在Q函数的网络的参数上加噪声, 就不会出现这种情况。因为如果在Q函数的网络的参数上加噪声,在整个交互的过程中,在同一个回合里面,它的网络的参数总是固定的,所以看到相同或类似的状态,就会采取相同的动作,这是比较正常的。这被称为依赖状态的探索(state-dependent exploration),我们虽然会做探索这件事,但是探索是与状态有关系的,看到同样的状态,就会采取同样的探索的方式,而噪声(noisy)的动作只是随机乱试。但如果我们是在参数下加噪声,在同一个回合里面,参数是固定的,我们就是系统地尝试。比如,我们每次在某一个状态,都向左试试看。在下一次在玩同样游戏的时候,看到同样的状态,我再向右试试看,是系统地在探索环境。

8、彩虹

最后一个技巧称为彩虹(rainbow),如图所示,假设每个方法有一种自己的颜色(如果每一个单一颜色的线代表只用某一个方法),把所有的颜色组合起来,就变成“彩虹”,我们把原来的深度Q网络也算作一种方法,故有 7 种颜色。异步优势演员-评论员(asynchronous advantage actor-critic,A3C)是演员-评论员的方法,A3C算法又被译作异步优势动作评价算法,图中没有多步方法,这是因为异步优势演员-评论员算法本身内部就有多步方法,所以实现异步优势演员-评论员算法就等同于实现多步方法,我们可以把异步优势演员-评论员算法的结果看成多步方法的结果。这些方法本身之间是没有冲突的,我们把全部方法都用上就变成了七彩的方法,即彩虹方法,彩虹方法的性能很好。

【Rainbow——强化学习之DQN进化版】相关推荐

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

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

  2. 强化学习圣经:《强化学习导论》第二版(附PDF下载)

    今天推荐 Richard S. Sutton 教授与 Andrew G. Barto 教授合著的<强化学习导论(第二版)>, Richard S. Sutton 就职于iCORE大学计算机 ...

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

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

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

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

  5. 深度强化学习-Double DQN算法原理与代码

    深度强化学习-Double DQN算法原理与代码 引言 1 DDQN算法简介 2 DDQN算法原理 3 DDQN算法伪代码 4 仿真验证 引言 Double Deep Q Network(DDQN)是 ...

  6. dqn在训练过程中loss越来越大_深度强化学习——从DQN到DDPG

    想了解更多好玩的人工智能应用,请关注公众号"机器AI学习 数据AI挖掘","智能应用"菜单中包括:颜值检测.植物花卉识别.文字识别.人脸美妆等有趣的智能应用.. ...

  7. 强化学习之DQN进阶的三大法宝(Pytorch)

    三大法宝: ①:DDQN:改变Nature DQN中TD目标值中a'的产生方式. ②:Prioritized experience reply:改变从经验池采样的方式. ③:Dueling DQN:改 ...

  8. 14. 深度强化学习(DQN)

    深度Q网络 14.1 用深度强化学习玩Atari 14.1.1 介绍 14.1.2 背景 14.1.3 相关工作 14.1.4 深度强化学习 1. 预处理和模型架构 14.1.5 实验 1. 训练和稳 ...

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

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

最新文章

  1. 【ACM】杭电OJ 2064(汉诺塔III)
  2. Linux Named 进程启动、停止脚本
  3. R语言sample函数数据对象采样实战
  4. 图灵访谈系列之九:CNode社区谈Node.js技术及生态
  5. 使用node.js构建命令行工具
  6. mysql表一定要主键吗_最滋补五脏的食物表,一定要给家人存下
  7. Pylearn2之YAML
  8. detachedcriteria查询去重_2020考研初试成绩查询:安徽研究生考试成绩查询入口
  9. 你真的了解低代码平台吗?
  10. 2.0版本中如何取得当前的控制器和方法
  11. Spark DataSource API
  12. php 写入sql server,php将图片直接写入SQLServer2008
  13. 员工主动辞职公司也要支付经济补偿金的17种情况
  14. [学习笔记]数据库设计概览
  15. 单元测试框架TestableMock快速入门(三):校验Mock调用
  16. win10专业版有必要吗_Win10有哪些版本 Win10各版本有什么区别【区别介绍】
  17. 3元特卖好课AngularJs基础视频教程 大漠穷秋AngularJs基础教程 AngularJs入门教程
  18. oracle12c 兼容,12c(oracle12c兼容11g吗)
  19. sigmod 函数与softmax 函数对比
  20. html打印页面不要网页地址,打印网页时去掉标题、页码、网页地址方法

热门文章

  1. Listview.Subitem.BackColor.ForeColor改变字体颜色和背景
  2. 梦幻模拟战 java,梦幻模拟战手游:抽SSR真的难!你抽到几个SSR英雄?
  3. 韵达详细物流用这个工具能批量查询
  4. 操作系统-最近最久未使用置换算法
  5. Jenkins安装配置及插件安装使用
  6. JSP药品进销存管理系统JSP药品管理系统JSP药品进销存系统)JSP医药进销存系统JSP药品药店管理
  7. c语言如何读取mp3歌曲信息,VC中读取mp3文件信息的方法
  8. poweroff命令
  9. MC-Net: multi-scale context-attention network for medical CT image segmentation
  10. 打印机无法扫描解决方案