Nature DQN与Double 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技术栈】

更多精彩内容请关注扫码

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值