Prioritized Replay DQN与Dueling DQN

在前面的文章Nature DQN与Double DQN中介绍了对DQN算法的两种改进,Nature DQN加快了收敛速度,Double DQN有效的解决了过拟合的现象,本篇文章将继续介绍一些对于DQN算法的改进。

Prioritized Replay DQN

Prioritized Replay DQN对于DQN的改进主要是针对训练过程中样本的选择。在以往的训练中,训练样本被存放在记忆池中,在更新参数的时候随机取出一组来更新。由于是随机取出的,可能会导致一些对训练有促进作用的样本学习的不够充分(例如TD误差较大的样本),而某些无意义的样本却多次被学习(例如TD误差较小的样本),影响收敛速度。因此,Prioritized Replay DQN提出了一种对训练样本进行有选择训练的方法。

Prioritized Replay DQN会对每一个样本的TD误差计算绝对值 ,并根据 的大小设置优先级,使得 越高的样本更容易得到训练。这样以来,记忆池中需要保存的样本属性就增加了一个优先级了,为了更方便的处理样本,记忆池需要采用其他的数据结构进行处理。很容易想到的就是数据结构优先队列了,但是优先队列存在着一个问题,那就是不好更新样本的优先级。

由于网络是在不断的学习的,随着网络的能力越来越强,原本比较难以学习的样本会变得不再困难,所以需要不断的更新样本的优先级。为了解决这个问题,Prioritized Replay DQN使用SumTree树结构来存储记忆,如下图所示:

SumTree只有叶子节点保存样本以及样本的优先级(上图中节点上的数字),非叶子节点存储的是字节点优先级之和。也就是说,只要叶子节点优先级发生更新,相应的父节点只要冒泡更新即可。

将样本存到SumTree之后,可以按照如下步骤来取出样本,以上图为例:

  1. 从0到42随机选择一个数字,例如26。

  2. 从根节点开始搜索到叶子节点,找到26所属的区间对应的叶子节点。即25-29对应的节点4。

  3. 返回样本

注意到,每个叶子节点所对应的区间是不同的,且区间大小正比于优先级。这样以来,在进行样本选择时,区间大的叶子节点被选择的概率就会大一些,区间小的叶子节点被选择的概率就会小一些。因此,在采样次数足够的情况下,每个样本都可以得到学习,同时重要的样本也会有所偏好。

除此之外,在目标函数上,Prioritized Replay DQN也作了调整,如下所示:

其中 表示相应的优先级。其他地方与Double DQN没什么区别,其算法流程如下:

Dueling DQN

Prioritized Replay DQN从样本选择的角度优化了DQN算法,Dueling DQN则从网络结构优化了DQN。之前的DQN网络都是之间输出的 值,而Dueling DQN则不然。它将网络的输出作为两个分支,一个分支输出仅仅与状态相关的价值函数 ,另一个分支输出与状态和动作都相关的优势函数 。然后将两者相加,得到最终的输出,如下式所示:

其中 表示两个分支公共的参数, 表示相应的不同的参数,其网络结构如下:

传统DQN(上),Dueling DQN(下)

然而,上面的公式在计算 值时会出现一个unidentifiable问题:给定一个 ,是无法得到唯一的 的。比如, 分别加上和减去一个值能够得到同样的 ,但反过来显然无法由 得到唯一的 。进而导致无法对动作作出选择。

为了解决这个问题,可以强制令所选择贪婪动作的优势函数为0:

这样以来就可以通过下式得到唯一的值函数:

此外还可以采取使用优势函数的平均值替代 部分,即:

虽然这种方法,使得 值和 值的语义不是那么的清晰,但是比较稳定。

Dueling DQN主要是修改了网络结构,其他部分的流程是一样的,在此不再赘述。

关注【Java与Android技术栈】

更多精彩内容请关注扫码

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值