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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐