从DQN到Double DQN:分离动作选择与价值评估,解决强化学习中的Q值过估计问题

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,1000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 2015年DQN在Atari游戏中突破,但Q值过估计问题浮现。因max操作放大噪声,智能体盲目自信“黄金动作”。根源在于动作选择与价值评估由同一网络完成,导致最大化偏差。

2015年DQN在Atari游戏上取得突破性进展,从此以后强化学习终于能处理复杂环境了,但没多久研究者就注意到一些奇怪的现象:

Q值会莫名其妙地增长到很大,智能体变得异常自信,坚信某些动作价值极高。实际跑起来却发现这些"黄金动作"根本靠不住,部分游戏的表现甚至开始崩盘。

问题出在哪?答案是DQN更新机制里隐藏的最大化偏差(maximization bias),这是个很微妙的统计学陷阱。

DQN的偏差来源

我们先看DQN的目标函数:

这里有个致命问题:用同一套Q值既做动作选择又做价值评估。

当Q值本身带噪声时(神经网络近似必然有噪声),max操作会系统性地挑出那些被高估的值。就像让10个人猜股价,真实价格50块,猜测结果分散在45到55之间,取最大值55肯定会偏高。

设 \hat{Q}(s, a) 是真实值 Q^*(s, a) 的噪声估计,噪声项 ε_a 均值为零。

DQN的目标值:

这个不等式源于序统计量的经典结果——噪声估计的最大值天然向上偏移。

Double Q-learning的核心思路

Double Q-learning给出了解法:把选择和评估分开。

用一个网络选动作而用另一个网络评估这个动作的价值,这样就避免了单个网络自我强化误差的问题。

Double DQN的更新规则

改进后的目标函数:

具体分工是:

  • 在线网络 Q(·; θ) 负责选动作
  • 目标网络 Q(·; θ^-) 负责评估价值
  • 网络结构完全相同,只是在公式里扮演不同角色

整个训练过程如下:

初始化经验池D,在线网络 Q(s, a; θ) 和目标网络 Q(s, a; θ^−)。

每个episode里循环执行:用ε-greedy策略从在线网络选动作,执行后观察奖励r和新状态s′,把这条经验存进池子。然后从池里随机采样一批数据,用DDQN规则算目标值,对下面这个损失做梯度下降:

隔C步同步一次参数:θ^− ← θ。

数值例子说明

1、原始DQN的过估计

假设下个状态的Q值估计:

在线网络/目标网络给出:

  • Q(s′, a_1) = 5.0
  • Q(s′, a_2) = 6.0

而真实价值其实是:

  • Q^∗(s′, a_1) = 5.0
  • Q^∗(s′, a_2) = 5.5

取奖励r = 1,折扣因子γ = 0.9。

DQN计算的目标:

真实应该是:

偏差达到 6.4 − 5.95 = 0.45,智能体认为动作比实际好得多。

2、Double DQN如何修正

同样的场景DDQN分离了选择和评估过程。

第一步,在线网络选出最优动作:

第二步,目标网络评估这个动作的价值:假设目标网络估计 Q(s′, a_2; θ^−) = 5.5。

第三步,计算DDQN目标:

这次结果完全准确,过估计消失了。

总结

这个看似简单的改动带来了明显的提升:Atari游戏分数大幅上涨,智能体不再出现那种"幻觉式"的高估,训练稳定性也改善不少。

强化学习就是这样,一个很小的数学调整可能就能解决大问题。

DQN的过估计源于max操作符偏好噪声中的高值。Double DQN把动作选择(在线网络θ)和价值评估(目标网络θ^−)分开处理,让目标值更接近真实情况,稳定性和性能都得到改善。前面两个数值例子清楚展示了偏差是如何被消除的。

作者:Satyam Mishra

目录
相关文章
|
机器学习/深度学习 存储 算法
使用深度强化学习预测股票:DQN 、Double DQN和Dueling Double DQN对比和代码示例
深度强化学习可以将深度学习与强化学习相结合:深度学习擅长从原始数据中学习复杂的表示,强化学习则使代理能够通过反复试验在给定环境中学习最佳动作。通过DRL,研究人员和投资者可以开发能够分析历史数据的模型,理解复杂的市场动态,并对股票购买、销售或持有做出明智的决策。
393 4
|
机器学习/深度学习 算法
深度强化学习中Double DQN算法(Q-Learning+CNN)的讲解及在Asterix游戏上的实战(超详细 附源码)
深度强化学习中Double DQN算法(Q-Learning+CNN)的讲解及在Asterix游戏上的实战(超详细 附源码)
824 0
|
机器学习/深度学习 存储 算法
强化学习从基础到进阶-案例与实践[4]:深度Q网络-DQN、double DQN、经验回放、rainbow、分布式DQN
强化学习从基础到进阶-案例与实践[4]:深度Q网络-DQN、double DQN、经验回放、rainbow、分布式DQN
强化学习从基础到进阶-案例与实践[4]:深度Q网络-DQN、double DQN、经验回放、rainbow、分布式DQN
|
机器学习/深度学习 存储 编解码
强化学习从基础到进阶-常见问题和面试必知必答[4]::深度Q网络-DQN、double DQN、经验回放、rainbow、分布式DQN
强化学习从基础到进阶-常见问题和面试必知必答[4]::深度Q网络-DQN、double DQN、经验回放、rainbow、分布式DQN
|
机器学习/深度学习 人工智能 算法
动手强化学习(七):DQN 改进算法——Double DQN
DQN 算法敲开了深度强化学习的大门,但是作为先驱性的工作,其本身存在着一些问题以及一些可以改进的地方。于是,在 DQN 之后,学术界涌现出了非常多的改进算法。本章将介绍其中两个非常著名的算法:Double DQN 和 Dueling DQN,这两个算法的实现非常简单,只需要在 DQN 的基础上稍加修改,它们能在一定程度上改善 DQN 的效果。
1211 0
|
存储 Java
百度搜索:蓝易云【Java语言之float、double内存存储方式】
由于使用IEEE 754标准进行存储,float和double类型可以表示非常大或非常小的浮点数,并且具有一定的精度。然而,由于浮点数的特性,它们在进行精确计算时可能会存在舍入误差。在编写Java程序时,需要注意使
205 0
|
11月前
|
存储 关系型数据库 MySQL
double ,FLOAT还是double(m,n)--深入解析MySQL数据库中双精度浮点数的使用
本文探讨了在MySQL中使用`float`和`double`时指定精度和刻度的影响。对于`float`,指定精度会影响存储大小:0-23位使用4字节单精度存储,24-53位使用8字节双精度存储。而对于`double`,指定精度和刻度对存储空间没有影响,但可以限制数值的输入范围,提高数据的规范性和业务意义。从性能角度看,`float`和`double`的区别不大,但在存储空间和数据输入方面,指定精度和刻度有助于优化和约束。
1652 5
|
存储 C语言
C 语言实例 - 计算 int, float, double 和 char 字节大小
C 语言实例 - 计算 int, float, double 和 char 字节大小。
179 1
|
存储 C语言
计算 int, float, double 和 char 字节大小
计算 int, float, double 和 char 字节大小。
251 3
|
存储 编译器 C++
C++从遗忘到入门问题之float、double 和 long double 之间的主要区别是什么
C++从遗忘到入门问题之float、double 和 long double 之间的主要区别是什么
220 0