Nature DQN与Double DQN

本文介绍了DQN算法的两种改进版本:NatureDQN和DoubleDQN。NatureDQN通过引入目标网络提高收敛速度,而DoubleDQN则解决了Q-learning的过拟合问题,通过两个网络分别选择动作和计算目标值,避免了价值估计的过高。两者都在原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技术栈】

更多精彩内容请关注扫码

<think>嗯,用户想找Double DQN模型的架构图或者框图。首先,我需要回忆一下Double DQN的基本原理和结构。根据之前的资料,Double DQN主要是为了解决DQN中的过估计问题,通过将动作选择和目标Q值计算分离。具体来说,它使用了两个网络:原网络和目标网络。原网络用来选择动作,而目标网络用来计算目标Q值,这样可以减少过估计的问题。 用户提到的引用[2]中提到Nature DQN使用了两个网络,一个原网络和一个目标网络,参数异步更新。而Double DQN可能在此基础上做了一些调整,比如动作选择使用原网络,而目标Q值计算使用目标网络中的值,但可能结构图类似,需要明确区别。 用户提供的引用[3]中提到了分布式Q函数,但用户的问题是关于Double DQN的架构图,可能需要集中在这两个网络的交互上。可能需要描述原网络和目标网络如何协作,比如在更新Q值时,原网络选择动作,目标网络计算目标值,然后结合这两个步骤的图示。 另外,用户可能需要示意图,但由于无法直接提供图片,需要用文字描述结构,并建议参考特定论文或资料中的图表。例如,可以指出在Double DQN的原始论文或相关教程中常见的结构,比如原网络和目标网络的结构相同,参数定期复制,以及它们如何分别用于动作选择和目标计算。 还需要考虑用户可能的深层需求:是否想了解Double DQNDQN的区别?或者如何在实际中实现这样的结构?因此,在回答时应该明确Double DQN的关键改进点,并通过对比说明其架构的不同之处,比如两个网络的分工,参数更新方式等。 总结:用户需要的是Double DQN的架构图,但由于无法提供图片,需用文字详细描述,并引用相关资源。需要确保描述正确,符合引用中的内容,并可能建议查阅原始论文或特定教程中的图示。</think>### Double DQN 模型架构解析 Double DQNDQN 的改进版本,核心思想是通过**分离动作选择和目标值计算**来减少 Q 值的高估问题[^1]。其架构主要包含以下两个关键组件: 1. **原网络(Online Network)** 负责选择当前状态下的最优动作,并定期将参数同步到目标网络。 输入:状态 $s_t$ 输出:动作价值函数 $Q(s_t, a; \theta)$ 2. **目标网络(Target Network)** 仅用于计算目标 Q 值,参数更新延迟于原网络(异步更新)。 输入:状态 $s_{t+1}$ 输出:目标值 $Q'(s_{t+1}, \arg\max_a Q(s_{t+1},a;\theta); \theta^-)$[^2] 更新公式为: $$ Q_{\text{target}} = r + \gamma Q'\left(s_{t+1}, \arg\max_a Q(s_{t+1},a;\theta); \theta^-\right) $$ 这里 $\theta$ 是原网络参数,$\theta^-$ 是目标网络参数。 ### 架构示意图描述 ``` +----------------+ 选择动作 +----------------+ | | ------------> | | | 原网络 θ | | 目标网络 θ^- | | | <------------ | | +----------------+ 参数异步更新 +----------------+ | | | Q(s,a) | Q'(s',a') v v 状态 s_t ----> 动作选择 ----> 环境交互 ----> 目标值计算 ``` (注:实际架构图可参考 [Hasselt et al. 2015](https://arxiv.org/abs/1509.06461) 或 [EasyRL 教程](https://datawhalechina.github.io/easy-rl/#/chapter7/chapter7)) ### 关键改进点 - **动作选择目标解耦**:用原网络选择动作,用目标网络计算目标值,避免单一网络导致的偏差放大[^1]。 - **参数延迟更新**:目标网络参数 $\theta^-$ 每隔 $C$ 步从原网络复制,提升稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值