精华内容
下载资源
问答
  • Double DQN

    2020-07-06 14:11:36
    使用 DQN的改进版本(Double DQN)能够产生更准确的值估计,减少 DQN 的过高估计,从而在游戏中获得更高的分数。 给定策略 π\piπ ,在状态 s 采用动作 a 的真实值为: 标准 Q-learning 算法的参数更新方式: ...

    论文链接:https://arxiv.org/abs/1509.06461

    由于深度神经网络提供了灵活的函数逼近与低渐近逼近误差的潜力,DQN 在 Atari 2600 游戏中的带来了更好的性能。但是,DQN有时也会大大高估行动的价值。使用 DQN的改进版本(Double DQN)能够产生更准确的值估计,减少 DQN 的过高估计,从而在游戏中获得更高的分数。

    给定策略 π\pi ,在状态 s 采用动作 a 的真实值为:
    在这里插入图片描述
    标准 Q-learning 算法的参数更新方式:
    在这里插入图片描述
    在这里插入图片描述

    DQN 的目标Y值为:
    在这里插入图片描述
    标准 Q-learning 和 DQN 的目标Y值计算中使用了 max 操作(公式2和3),其使用了相同的值来选择和估计动作。这使得它更有可能选择高估计的值,从而导致值的高估计。为了避免这种情况的发生,将选择动作和求值进行解耦。这就是 Double DQN 的核心。

    Double DQN 使用行为网络选择出value最大的action,用目标网络来估计它的值。对应的,公式(2)的目标改写为:

    在这里插入图片描述

    Double DQN 的算法伪代码与 DQN 一致,仅仅是目标Y的公式进行了修改:
    在这里插入图片描述

    展开全文
  • 2.double dqn.ipynb

    2019-09-02 12:17:28
    关于double dqn的例子,适合初学者对深度强化学习double dqn的认识和了解
  • Nature DQNDouble DQN

    2020-02-03 09:08:00
    在前面的文章强化学习DQN算法中,介绍了经典的DQN算法,然而DQN也存在一些问题。Nature DQNDouble DQN的提出就是为了解决这些问题,下面笔者将介绍这个两种改进的算法...

    在前面的文章强化学习DQN算法中,介绍了经典的DQN算法,然而DQN也存在一些问题。Nature DQN与Double DQN的提出就是为了解决这些问题,下面笔者将介绍这个两种改进的算法。

    Nature DQN算法

    Nature DQN的提出是为了提升原版DQN的收敛速度。在原版DQN中,计算目标Q值的公式

    如下:

    由于在计算目标时,使用的是当前要训练的网络,而网络的更新使用的又是目标,两者的相关性太强了,不利于收敛。

    为了解决这个问题,Nature DQN提出了一个改进,使用两个网络来计算目标值。这两个网络的结构一样,但是参数不一样。其中一个网络被称为当前网络,主要用来选择动作,并更新模型参数。另一个网络被称为目标网络,仅仅用来计算目标值,它的参数是直接从当前网络复制而来,且目标网络的参数会比当前网络延迟。因此,新的计算目标值的公式如下:

    除了目标值的计算不一样之外,其他的流程和原版DQN没什么区别。

    Nature DQN算法流程

    1. 初始化一个存储容量为的记忆池,同时随机初始化一个当前网络,参数为,一个目标网络,参数为,并令

    2. 按以下流程迭代轮。

      1. 通过-greedy算法根据状态从动作空间中得到动作,通过网络选择动作的公式如下。

      2. 执行动作并观测环境,得到奖励以及图片

      3. 设置并对提取特征得到

      4. 将状态存储到记忆池中。

      5. 随机从记忆池中选择一组的记忆,并根据以下公式计算收获:

      6. 通过来计算损失,并通过梯度更新网络的参数。

      7. 每隔个迭代,更新

      8. 初始化状态为第一个状态,并进行处理得到特征向量

      9. 按以下流程迭代轮。

    Double DQN算法

    Double DQN算法的提出是为了解决Q-learning,DQN包括Nature DQN的一个通病,即过拟合。过拟合发生的原因,是因为在更新值时,使用的是算法。以Nature DQN为例,目标值的计算公式如下:

    由于每次估计下一个状态值时都选择最大的,因此会导致高估的情况,不一定是最接近真实的值,对应的动作不一定是最佳的动作。如此,就会在每一次迭代中产生一些误差,这些误差不断累积,最终产生了过拟合。

    为了解决这个问题,Double DQN提出两个网络解耦目标值动作的选择和目标值的计算这两步,并修改了值的计算方式。

    Double DQN的两个网络和Nature DQN的一致,目标值的计算方式如下:

    对于非终结状态的值的计算可以分为一下两个步骤:

    1. 通过当前网络估计在状态下的最大的值对应的动作,用公式表示如下。

    2. 带入以下公式计算

    由于动作是由当前网络估计出的,在一定程度上,更接近最佳的动作,因此对应的值也会更接近真实值,从而避免了过高的估计。Double DQN的其他流程和Nature DQN没有什么太大的区别,就不过多介绍了。

    关注【Java与Android技术栈】

    更多精彩内容请关注扫码

    展开全文
  • double dqn report

    千次阅读 2016-12-21 20:56:08
    double dqn report@(paper reading)Double DQN (https://arxiv.org/abs/1509.06461)Thrun & Schwartz (1993) 在那个古老的年代就已经指出Q-learning中存在过度估计 (overestimation)问题。因为DQN本质上是基于Q-...

    double dqn report

    @(paper reading)

    Double DQN (https://arxiv.org/abs/1509.06461)


    Thrun & Schwartz (1993) 在那个古老的年代就已经指出Q-learning中存在过度估计 (overestimation)问题。因为DQN本质上是基于Q-learning的,那么DQN中也一定存在过度估计的问题,并且一定程度上会影响DQN的性能。

    由此,作者提出了Double DQN。由下表可以看到,相比Nature DQN,Double DQN的性能得到了进一步提升。
    这里写图片描述


    什么是overestimation?

    这种现象是由Q-learning中的max操作带来的。

    可以通过假设的一个例子来理解这个问题:

    假设当前状态下,对于所有动作,它们实际的return value都应当是0。但是因为估计必定存在误差,所以一些动作可能返回正值,而另一些动作可能返回负值 (这里不妨假设为+0.5及-0.5)。Q-learning中用Q function返回估计值,为当前状态下的所有动作计算估计值,并选择拥有最大Q值的动作。那么问题就来了,这个最大值是+0.5,而不是0,并且每一步(在每个状态下)都会出现这个问题。这也就是Q-learning中的overestimation。随着迭代的进行,这种overestimation可能会导致策略逐渐变为一个次优解。


    Double DQN

    结合double q-learning的目的在于减少overestimation。

    其基本思想为:将target Q中选择和评估动作分离,让它们使用不同的Q网络。

    nature dqn中YQtRt+1+γmaxaQ(St+1,a;θt)
    double dqn中YDoubleQtRt+1+γQ(St+1,argmaxaQ(St+1,a;θt);θt)
    其中Yt为target,注意这两者的不同,double dqn中计算target使用了两个不同的θ,分别来自current q-network 以及 target q-network。current q-network负责选择动作,而带有delayed θ的target q-network来计算target Q值。
    Alt text

    因为nature dqn引入了单独的target q-network,等于已经是double q了,所以double dqn在原有的架构上,基本不需要做什么改动。
    至于θ的更新,文中说 This second set of weights can be updated symmetrically by switching the roles of θ and θ. 这里应该仍旧指每D步从current Q更新一次。

    为什么将selection和evaluation分离可以减少overestimation?

    这块感觉文章自己也没讲清楚。

    接着上面的例子,把现在需要计算的Q function叫做Q1。如果用另一个同样有噪声问题的Q2来选择动作,带入到Q1中去,留意上面的等式,这里的Q1并没有取max的操作,所以得到的结果可正可负,平均下来就会接近于0,得到一个相对无偏的结果。


    存在问题

    overestimation是个老问题,但是显然之前都没有意识到它是这么common and severe,故而double dqn是一次比较大的提升。

    然而,虽然这篇文章里没有提到,但作者在他10年的double q-learning一文里表示,double q-learning虽然能有有效降低overestimation的问题,但是有时也会导致underestimation。

    double DQN会不会反而导致underestimation的出现?有没有可能实现一种unbiased q-learning?


    ps: 为什么编辑的公式后面会有个竖线??

    展开全文
  • 本篇介绍三种DQN的变体,分别是从参数更新部分改进的Double DQN,从经验回放部分改进的Prioritized DQN,从神经网络结构部分改进的Dueling DQNDouble DQN 上一篇提到的DQN是基于Q-learning,更新也是基于贪婪...

    本篇介绍三种DQN的变体,分别是从参数更新部分改进的Double DQN,从经验回放部分改进的Prioritized DQN,从神经网络结构部分改进的Dueling DQN。

    Double DQN

    上一篇提到的DQN是基于Q-learning,更新也是基于贪婪算法,$Q \leftarrow Q + \alpha (R + \gamma \max Q' - Q)$。虽然可以快速让Q值向可能的优化目标靠拢,但是很容易过度估计(Overestimation)。因为算法每次更新包括了比估计的Q值更大的后一步的max值,这往往倾向于高估Q值。为了解决这个问题, Double DQN[1]通过将,选择Q值对应的动作和评估动作对应的Q值,这两步分隔开来,消除贪婪算法带来的过度估计,得到更精确的Q值估计,从而使学习更加稳定和可靠。

    首先来回顾一下DQN的更新方式。DQN基于两个神经网络,在训练神经网络$Q$中,针对参数更新的目标值$y_j$,利用梯度下降来更新参数$\theta$,

    \[{({y_j} - Q({\phi _j},{a_j};\theta ))^2}\]

    其中参数更新的目标值$y_j$是从目标神经网络$Q'$的下一步的max中寻找,

    \[{y_j} = \left\{ \begin{array}{l}
    {r_j}\\
    {r_j} + \gamma {\max _{a'}}Q'({\phi _{j + 1}},a';\theta ')
    \end{array} \right.\]

    在DQN的基础上,Double DQN不直接从目标神经网络$Q'$中找到参数更新的目标值$y_j$,而是现在训练神经网络$Q$中找到最大Q值对应的动作,再利用这个选择出来的动作a在目标神经网络$Q'$中计算参数更新的目标值$y_j$,

    \[\begin{array}{l}
    a{'_{\max }} = \mathop {\arg \max }\limits_a Q({\phi _{j + 1}},a;\theta )\\
    {y_j} = {r_j} + \gamma {\max _{a'}}Q'({\phi _{j + 1}},a{'_{\max }};\theta ')
    \end{array}\]

    Prioritized DQN

    Double DQN改进了DQN的参数更新部分,针对DQN的随机经验回放,Prioritized DQN[2]利用带优先级的经验回放,赋予了不同样本不一样的重要性,加快了收敛速度,使学习更加有效。比如说,对于一些最相关的转移隐藏在大量冗余的失败转移中的学习任务,我们应该采用带优先级的经验回放策略,而不是均匀随机采样,更重视一些少量但是值得学习的样本,提高了收敛速度,避免了一些没有价值的冗余迭代,从而提高了学习的效率。

    怎样评估经验,给予不同的权重呢?DQN系列的更新过程和Q-learning一样,利用TD-error $R + \gamma \max Q'- Q$来更新Q。TD-error越大,证明这次更新越“惊喜”越出乎意料,这类似与集成的Boosting思想,对错误的样本关注度更大,从而尽可能纠正这些错误。

    但是如果是完全贪婪的TD-error优先级会带来一些问题。首先为了避免对整个记忆全部回放更新,只对重放的记忆更新TD-error,这导致了如果第一次得到了一个低的TD-error,就可能长时间都无法被回放。其次这样的机制对噪声很敏感,并且随着bootstrapping会恶化,导致拟合误差。最后贪婪优先级只关注了经验的小部分,高错误的样本会频繁回放,这就使系统缺乏多样性从而过拟合。

    为了避免这些问题,我们引入了随机采样方法来折中完全贪婪的优先采样和均匀随机采样。我们确保在采样过程中,优先级越高,被采样的概率也越高,同时保证对于最低优先级的记忆也存在一定的非零概率被采样。具体而言,我们定义概率如下,

    \[P(i) = \frac{{p_i^\alpha }}{{\sum\nolimits_k {p_k^\alpha } }}\]

    我们在分析算法时,偶然发现了另一种现象,回想起来很明显。有些存储的记忆在他们因为记忆的滑动窗口被丢掉时都从来没有被回放过,大部分的记忆在距离第一次存储很久之后才会被回放,而且均匀随机抽样倾向于过时抽样。带优先级的回放解决了第一个有些记忆不会被回放的问题,因为直接给了一定的概率。对于第二个过时采样的问题,Prioritized DQN则更倾向于新的记忆,因为旧的记忆已经被纠正很多次了,新的记忆往往有更大的TD-error。

    那我们如何有效地根据P来抽样呢? 如果每次抽样都需要针对P对所有样本排序,这将会是一件非常消耗计算能力的事。于是文献[2]利用SumTree这样的二叉树结构来存储样本,实现带优先级的快速经验回放,

    如上图所示,底下的八个子节点存储了相应的不同优先级的八个样本。不同的P值决定了样本所占的区间长度,区间越长,优先级越高。母结点是相应两个子节点的和,从下至上,根节点的值为42。除最小面的子节点保存样本之外,其余节点只保留数值。取样时,从区间[0, 42]内均匀采样,比如我们采样得到了24。从上至下,24和左边的29相比,比它小,就用24从该节点继续往下;和左边的13比,24比它大,用24-13=11,从右边的节点继续往下;和左边的12比,11比它小,最终落到第三个优先级为12的节点,也就是对应采样到第三个样本数据。如果要采6个样本,就从[0-7], [7-14], [14-21], [21-28], [28-35], [35-42],这6个区间内均匀采样6次,按照上面的步骤继续。

     

    Dueling DQN

    Double DQN改进了DQN的参数更新部分,Prioritized DQN改进了DQN的经验回放部分,Dueling DQN则是通过优化神经网络的结构来优化算法。在许多基于视觉的感知的DRL任务中,不同的状态动作对的值函数是不同的,但是在某些状态下,值函数的大小与动作无关。因此Dueling DQN把Q值更新分开成两个部分,一个是状态v函数,一个是独立于状态的动作优势函数。比如对于避撞游戏,道路上如果暂时没有出现障碍,向左或向右的动作估计意义不大。所以对于很多状态来说,没有必要估计每个动作的Q值。但是对于基于自举的算法来说,对于状态的值估计是很有必要的。为此我们设计了一个新的网络结构,称之为Dueling network。不同于全连接层,该网络有两条估计路径(stream),分别对状态值估计和动作优势函数估计。最后两者合起来成为Q-network的输出。

    \[Q(s,a;\theta ,\alpha ,\beta ) = V(s;\theta ,\beta ) + A(s,a;\theta ,\alpha )\]

    其中$\theta$是蓝色部分公共卷积层的参数,$\alpha$和$\beta$分别是红色两个stream独有网络层的参数,最后通过绿色部分加起来。

    我们最终的目标是对$Q(s,a;\theta ,\alpha ,\beta ) $估计准确,不只是对$V(s;\theta ,\beta )$或者$A(s,a;\theta ,\alpha )$。直接利用相加的Q值是不可辨识的,也就是我们是无法分离V和A来选择动作的,这就很不实用了。因此,对同一个状态,我们固定状态值估计$V(s;\theta ,\beta )$,更新动作优势函数,

    \[Q(s,a;\theta ,\alpha ,\beta ) = V(s;\theta ,\beta ) + \left( {A(s,a;\theta ,\alpha ) - \mathop {\max }\limits_{a' \in \left| A \right|} A(s,a';\theta ,\alpha )} \right)\]

    而在实际中,一般要将动作优势流设置为单独动作优势函数减去某状态下所有动作优势函数的平均值,这样做可以保证该状态下各动作的优势函数相对排序不变,而且可以缩小 Q 值的范围,去除多余的自由度,提高算法稳定性,

    \[Q(s,a;\theta ,\alpha ,\beta ) = V(s;\theta ,\beta ) + \left( {A(s,a;\theta ,\alpha ) - \frac{1}{{\left| A \right|}}\sum\limits_{a'} {A(s,a';\theta ,\alpha )} } \right)\]

    论文中按照Double DQN[1] 的更新方式更新参数$\theta, \alpha, \beta$

     

    参考:

    [1] Van Hasselt H, Guez A, Silver D, et al. Deep reinforcement learning with double Q-Learning[J]. national conference on artificial intelligence, 2016: 2094-2100.
    [2] Schaul T, Quan J, Antonoglou I, et al. Prioritized Experience Replay[J]. international conference on learning representations, 2016.
    [3] Wang Z, Schaul T, Hessel M, et al. Dueling network architectures for deep reinforcement learning[J]. international conference on machine learning, 2016: 1995-2003.
     
     

    转载于:https://www.cnblogs.com/yijuncheng/p/10289615.html

    展开全文
  • Double DQN——解决DQN中的过估计问题

    千次阅读 2019-07-23 09:35:56
    文章目录1.前言2.算法2.1更新方法2.2 记录Q值2.3对比结果 ...接下来我们说说为什么会有Double DQN这种算法,所以我们从Double DQN相对于Natural DQN(传统DQN)的优势说起。 一句话概括,DQN基于Q-Learning,...
  • 本文主要讲解有关Double DQN算法、Prioritized Experience Replay DQN 算法和 Dueling DQN 算法的相关内容。 对于 DQN 算法的改进主要有三种——Double DQN算法、Prioritized Experience Replay ...
  • Double DQN论文笔记

    2021-04-12 21:47:11
    Double DQN论文笔记AbstractBackgroundTechnologySummary二级目录 Abstract 在DQN中,DeepMind通过采用两个相同的神经网络来 Background Technology Summary 二级目录 DRL、连续控制问题、单智能体、off-policy、值...
  • 目录 深度强化学习目录 ...于是我们使用Double DQN来缓解这个问题。 Double DQN 什么叫过度高估Q值函数?举个例子,我们用DQN玩游戏,在状态s的时候训练得到的Q值是100,而实际玩了一盘下来发现远不到100
  • Double DQN with Prioritized Experience ReplyDouble DQN部分Prioritized Experience Reply部分其他compute_nstep_return()函数 主要是学习了一下tianshou的源代码来增加一些水平。看看好的开源库总是不错的。记录...
  • ROS开发笔记(10)——ROS 深度强化学习dqn应用之tensorflow版本(double dqn/dueling dqn/prioritized replay dqn) 在ROS开发笔记(9)中keras版本DQN算法基础上,参考莫烦强化学习的视频教程与代码,编写了应用在...
  • :person_running: [强化学习]在Atari Breakout游戏上执行的Deep Q Network(DQN),决斗DQNDouble DQN的张量流实现 安装 键入以下命令以安装OpenAI Gym Atari环境。 $ pip3 install opencv-python gym gym[atari...
  • TD3与DPG、DDPG、Double DQN解析 文章目录TD3与DPG、DDPG、Double DQN解析0 - 前言1 - 回顾DPG2 - 回顾DDPG3 - 回顾Double DQN4 - TD3算法 0 - 前言 本文是对【上海交通-陈伟哲】的哔站TD3讲解视频做的笔记,图片均...
  • Double DQN 在深度强化学习(5)我们讲了DQNDQN的框架仍然是Qlearning。DQN 只是利⽤了卷积神经⽹络表⽰动作值函数,并利用了经验回放和单独设立目标网络这两个技巧。DQN无法克服Qlearning 本身所固有的缺点——...
  • 强化学习(三):DQN、Nature DQNDouble DQN,附源码解读 这不最近在学莫烦的强化学习嘛,有一点好处就是他讲的课虽然有一些一知半解,但是在网上再查查博客结合一下他的代码就能有比较清晰的理解了。 这篇文章就...
  • DQN,deep Q-network,用一个深度网络来拟合强化学习中的Q值Double DQN,分为主网络和target网络,主网络选择动作,target网络拟合Q值。主网络的变化浮动大,target网络变化浮动小。q_target = reward + gamma * np....
  • 第九章 深度强化学习-Double DQN

    千次阅读 2019-12-13 19:45:06
    文章目录第九章 深度强化学习-Double DQN9.1 回顾9.2 过高估计9.3 Double DQNReferences 第九章 深度强化学习-Double DQN   目前流行的Q-learning算法会过高的估计在特定条件下的动作值。实际上,在实践中,这种...
  • DQN & Double DQN

    2020-09-26 19:59:43
    variable('b2', [1, self.n_actions], initializer=b_initializer, collections=c_names) self.q_next = tf.matmul(l1, w2) + b2 Double DQN: 解决overestimate问题 if self.double_q: max_act4next = np.argmax(q_...
  • 强化学习(十)Double DQN (DDQN)

    千次阅读 2019-08-01 10:22:28
    在强化学习(九)Deep Q-Learning进阶之Nature DQN...但是还是有其他值得优化的点,文本就关注于Nature DQN的一个改进版本: Double DQN算法(以下简称DDQN)。  本章内容主要参考了ICML 2016的deep RL tutorial和...
  • Double DQN算法实战

    2020-12-22 15:29:01
    Double-DQN是2016年提出的算法,灵感源自2010年的Double-Qlearning,可参考论文Deep Reinforcement Learning with Double Q-learning。 跟Nature DQN一样,Double-DQN也用了两个网络,一个当前网络(对应用QQQ表示),...
  • Double DQN and Dueling DQN

    2020-02-25 23:38:21
    不是很清楚的可以先看看这篇简洁版DQN介绍 只讲思想,不讲原理 1.Over-estimate 一般的Q-Learning中总会存在一些问题,由于下图中maxamax_amaxa​的存在,总是会过大的估计Q-VALUE。 Q-value是一个神经网络,因此...
  • 但是还是有其他值得优化的点,文本就关注于Nature DQN的一个改进版本: Double DQN算法(以下简称DDQN)。 本章内容主要参考了ICML 2016的deep RL tutorial和DDQN的论文< Deep Reinforcement Learning with Double...
  • 莫烦python强化学习系列-Double DQN学习

    千次阅读 2019-01-08 10:23:48
    DQN 的神经网络部分可以看成一个 最新的神经网络 + 老神经网络, 他们有相同的结构, 但内部的参数更新却有时差.... 所以 Double DQN 的想法就是引入另一个神经网络来打消一些最大误差的影响. 而 ...
  • Double DQN 看完了,收获还是不小的吧,虽然公式早就知道,不过把为什么DQN会高估和怎么解决的思路介绍的比较清楚了。 2 Motivation 其实吧,DQN 存在的高估问题和 Q-learning 是一样的,所以 Q-learning 是...
  • DQN介绍 DQN算法是在Q-learning基础上的改进,在Q-learning中必须存在一张Q表。当时当环境变得极其复杂时,Q表的数据量会相当大,更新过程会变得异常复杂。在经过深度网络的学习之后,我们就可以利用神经网络来代替Q...
  • 深度强化学习系列(7): Double DQN(DDQN)原理及实现

    千次阅读 多人点赞 2019-12-17 17:15:29
    论文地址: https://arxiv.org/pdf/1509.06461.pdf ...作者Hado van Hasselt在其2010年发表的Double Q-learning算法工作的基础上结合了DQN的思想,提出了本文的state-of-the-art的Double DQN...
  • Q learning进阶: Double DQN和 Dulling DQN

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 994
精华内容 397
关键字:

doubledqn