• Q 学习算法有一个缺陷:用 Q 学习训练出的 DQN 会高估真实的价值,而且高估通常是非均匀的。
  • 这个缺陷导致 DQN 的表现很差。
  • 高估问题并不是 DQN 本身的缺陷,而是训练 DQN 用的 Q 学习算法的缺陷。

1 自举(bootstrapping)导致的偏差传播

1.1 DQN参数更新(回顾)

        Q-learning 算法每次从经验回放数组 (Replay Buffffer) 中抽取一个四元组。然后执行以下步骤,对 DQN 的参数做一轮更新:
  • 1,计算TD目标

——> 的后一项基于DQN自己做出的估计

  • 2,定义损失函数

——>让DQN去拟合,也即用DQN自己做出的估计去拟合自己

  • 3,进行梯度下降,更新参数

1.2 自举对DQN训练的影响

  • 是对价值的近似
  • 最理想的情况下,=
  • 但如果 低估/高估了 ,那么:

换句话说,这种低估/高估会不断地传播下去

2 最大化对DQN训练的影响

2.1 一个数学结论

为任意d个实数,往中加入任意均值为0的随机噪声,得到随机变量

2.2 回到DQN

公式说明尽管 DQN 是对真实价值的无偏估计,但如果求最大化,DQN 则会高估真实价值。

——>这说明TD目标通常是对真实价值的高估(即使DQN是真实值Q*的无偏估计)

TD算法鼓励接近TD目标

——>这会导致高估真实值

3 不均匀高估的危害

  • 高估本身是无害的,除非高估是非均匀的

    • 举个例子,动作空间是 A = {,,}。给定当前状态 s,每个动作有一个真实价值:
    • 智能体应当选择动作“上”,因为“上”的价值最高。
    • 假如高估是均匀的,所有的价值都 被高估了 100:
    • 那么动作“上”仍然有最大的价值,智能体会选择“上”。这个例子说明高估本身不是问题,只要所有动作价值被同等高估。

但在实践中,所有的动作价值不一定会被同等高估

  • 每当取出一个四元组用来更新一次DQN,就可能会加重DQN对Q*(s,a)的高估。
  • 对于同一个状态s,(s,左),(s,右),(s,上)出现在经验回放数组中的频率是不同的
  • ——>三种动作的价值被高估的程度是不同的
  • 加入最终:
  • 那么智能体agent会选择“右”,这却反而是实际价值最小的action
想要避免 DQN 的高估,要么切断“自举”,要么避免最大化造成高估。
注意,高估并不是 DQN 自身的属性;高估纯粹是算法造成的。想要避免高估,就要用更好的算法替代原始的 Q 学习算法。

4 target network

想要避免 DQN 的高估,一种可行的方法是切断“自举”。

在Q-learning中,TD目标是这么计算的:

想要切断自举,可以用另一个神经网络来计算TD目标,而不是用DQN自己来计算TD目标。

——>另一个神经网络被称为目标网络(target network),我们记为

——> 他的神经网络结构和DQN完全相同,只是参数不同于w

4.1 使用目标网络之后的Q-learning

  • 每一次随机从经验回放中取出一个四元组
  • 令DQN和目标网络的当前参数分别为
  • 第6步这种方式叫做soft-replacing
而这种方法并不可能完全避免自举,原因是目标网络的参数仍然与 DQN 相关。

就是因为的高估/低估导致的高估/低估是还存在的,但是不会像不适用target network那样的Q-learning一样这种高估/低估传递下去

5 双Q学习方法 (double DQN)

  • 在 Q 学习算法中使用目标网络,可以缓解自举造成的偏差,但是无助于缓解最大化造成的高估。
  • Q 学习 (Double Q Learning) 算法在目标网络的基础上做改进,缓解最大化造成的高估。

5.1 重新审视Q-learning 中的TD目标

我们可以把最大化拆分成两步

5.2 重新审视Q-learning+target network中的TD目标

5.3 double DQN

第一步的选择用 DQN,第二步的求值用目标网络

为什么双 Q 学习可以缓解最大化造成的高估呢?

(因为a*不一定是参数下的argmaxQ)

所以

——>double DQN缓解了高估

5.4 double DQN下的Q-learning

  • 每一次随机从经验回放中取出一个四元组
  • 令DQN和目标网络的当前参数分别为

和target network+DQN不一样的也就是第二第三步

6 总结

  • DQN 的高估不是 DQN 模型造成的,不是 DQN 的本质属性;高估只是因为原始 Q 学习算法不好
  • Q 学习算法产生高估的原因有两个:
    • 第一,自举导致偏差从一个 (s, a) 二元组传播到更多的二元组;
    • 第二,最大化造成 TD 目标高估真实价值。

如果是 SARSA 算法强化学习笔记:Sarsa算法_UQI-LIUWJ的博客-CSDN博客_sarsa算法,那么自举的问题依然存在,但是在SARSA中不存在最大化造成高估的问题,所以只需要target network即可

DQN笔记:高估问题 target network Double DQN相关推荐

  1. 强化学习—— Target Network Double DQN(解决高估问题,overestimate)

    强化学习-- Target Network & Double DQN(解决高估问题,overestimate) 1TD算法 2. 高估问题 2.1 Maximization 2.1.1 数学解 ...

  2. 【强化学习实战-04】DQN和Double DQN保姆级教程(2):以MountainCar-v0

    [强化学习实战-04]DQN和Double DQN保姆级教程(2):以MountainCar-v0 实战:用Double DQN求解MountainCar问题 MountainCar问题详解 Moun ...

  3. 深度强化学习-Double DQN算法原理与代码

    深度强化学习-Double DQN算法原理与代码 引言 1 DDQN算法简介 2 DDQN算法原理 3 DDQN算法伪代码 4 仿真验证 引言 Double Deep Q Network(DDQN)是 ...

  4. 【DQN高级技巧2】DQN高估问题:Target Network和Double DQN

    Bootstrapping 自举 在强化学习中,自举表示用一个估算去更新同类的估算 在更新梯度的时候我们用到了yty_tyt​,但yty_tyt​又部分基于DQN 即为了更新DQN在t时刻的估计,我们 ...

  5. DQN 笔记 double DQN

    1 DQN的问题 在DQN 笔记 State-action Value Function(Q-function)_UQI-LIUWJ的博客-CSDN博客 中,我们知道DQN的学习目标是 但是,这个Q的 ...

  6. ROS开发笔记(10)——ROS 深度强化学习dqn应用之tensorflow版本(double dqn/dueling dqn/prioritized replay dqn)

    ROS开发笔记(10)--ROS 深度强化学习dqn应用之tensorflow版本(double dqn/dueling dqn/prioritized replay dqn) 在ROS开发笔记(9) ...

  7. 强化学习DQN(Deep Q-Learning)、DDQN(Double DQN)

    强化学习DQN(Deep Q-Learning).DDQN(Double DQN) _学习记录-有错误感谢指出 Deep Q-Learning 的主要目的在于最小化以下目标函数: J ( ω ) = ...

  8. 从DQN到Double DQN和Dueling DQN——pytorch实操

    文章目录 DQN 直接代码附上 为什么会有改进 Double DQN 代码附上 Dueling DQN 话不多说直接给代码 改进究竟管用与否? 写这个文章的动机是一直没有人讲明白三种DQN之间的关系, ...

  9. 胜者的诅咒与double DQN

    最近在学习博弈论和DQN时,无意中发现胜者的诅咒和DQN中过估计现象相通.特此记录. 文章目录 胜者的诅咒 DQN Double DQN 反思回顾 胜者的诅咒 分析这个问题,假设每一个参与拍卖的买家对 ...

最新文章

  1. 配置dialog无标题的几种方法
  2. android 上传头像遇到的问题,Android 7.0 图片剪切问题,选择头像上传
  3. 现在编程语言的两大主流
  4. No JDK found. Please validate either IDEA_JDK, JDK_HOME or JAVA_HOME
  5. director.js实现前端路由
  6. hive 修改cluster by算法_Hive基础之导出数据
  7. pythonunicode和str_python unicode 和 str 类型的关系
  8. 【docker】3-配置阿里云加速
  9. 2021年网络工程师考试大纲
  10. kotlin-android-extensions扩展的导入
  11. 跨境转运常用运费计算方式
  12. 小米10获取root权限_安卓刷机搞机小能手必备的三款root神器 最后一款你肯定用过...
  13. 前端cookie 放到请求头_HTTP请求头:cookie cache
  14. Java Swing实现高仿电脑版微信
  15. 0xc000007b的解决办法(续)
  16. 复古派 Retropie=
  17. Macos中的Mercurial GUI工具Murky试用
  18. 高德地图和百度地图数据下载
  19. fedora11 文泉驿micro-hei字体设置
  20. 台式计算机更改bios密码,台式机或笔记本忘记Bios密码解决方法

热门文章

  1. python io模块
  2. DayDayUp:2019.01.24新东方年会—俞敏洪点赞并奖励吐槽神曲《释放自我》12万元!—附全歌词(牛逼的人在哪里都不会彷徨)
  3. 富勒烯|Fullerene C60 富勒石 CAS:131159-39-2 |瑞禧
  4. L1-005 考试座位号 (15 分)变量要设置对
  5. element el-upload 一次上传单张/多张图片(多选)
  6. 基于Vue+Vant的旅游WebApp的设计与实现
  7. 坐在宝座上圣洁羔羊(儿童诗班)
  8. python echo(msg) 字符串_python的subprocess模块
  9. python人工自动抠图_Python - AI自动抠图
  10. ta点读笔客户端_点读笔到底哪支好?12款点读笔评测:看完不再稀里糊涂