高估问题以及解决方法

两个原因:

1.计算TD target时,用到了最大化,造成计算的结果比真实值要大。

2.用高估的结果再去更新自己,在网络中一次次循环过程,该最大化会越来越大,导致高估。

DQN的高估是非均匀的,而这种非均匀的高估是有害的,因为不能选出最优的动作。

DQN的高估是非均匀的,原因如下:

DQN一般从队列中选取一个transition四元组去更新w,而TD target已经是对真实价值的高估,TD算法鼓励DQN的预测接近,但是已经是高估的,那么DQN这么做就会把DQN对的估计值给推高,s和a的二元组每次用来更新DQN,都会导致DQN倾向于高估s和a的价值,s和a的频率在队列中是不平均的,就会导致高估越来越严重。

有两种解决办法:

第一种方法是解决Bootstrapping,就是用一个新的神经网络targrt network(目标网络)来更新target。

第二种方法解决最大化,也是用targrt network(目标网络)但是用法稍有不同,也就是double DQN。

Target Network:

用两个DQN来生成网络,两个DQN结构一样,但是参数不一样。

第一个DQN用来控制agent和收集经验,经验就是四元组

第二个DQN专门用来计算TD target,这里的参数是,这里不用原来的DQN方案,自己计算TD target,而是用新的网络来计算TD target,缓解了高估问题。

TD算法在Target Network的运用:

用一个四元组来更新第一个DQN的参数w,然后用第二个DQN计算TD target,然后计算TD error,最后用梯度下降来更新第一个DQN的参数w,这里面更新的w全是第一个DQN里面的参数,而第二个DQN只用来计算TD target。

第二个DQN的参数会隔一段时间更新一次,主要有两种方法:

 

第一种是直接将第一个DQN的参数赋值给

第二种是将两者加权平均,然后赋值给

但是即使用了target network,仍然无法避免高估,这里可能会避免Bootstrapping,但是不能解决最大化问题。并且target network会用到DQN的参数,使其无法独立于DQN,所以仍然会导致最大化问题。

Double DQN:

三种方式对比:

1.原始的DQN计算方法:

 2.用target network计算方法:

 3.用double DQN计算方法:

区别就是double DQN在选择动作时用的是原始DQN的方法和参数,但是在计算TD target时则是用了第一步的动作,但是网络是第二个DQN,参数是

为什么double DQN更好(虽然仍没彻底解决问题):

 总结:

三者之double DQN效果最好(但是仍然没有彻底解决高估问题)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值