介绍
这篇论文解决的是强化学习中一个非常重要但长期被忽视的问题:Q学习算法会系统性地高估动作的真实价值。
强化学习的目标是让智能体通过与环境交互,学习到一个能够最大化累积奖励的策略。Q学习是实现这一目标的核心算法之一,它通过学习每个"状态-动作"对的价值来指导决策。Q-learning算法由Watkins在1989年提出,它是一个off-policy算法,即我们在与环境交互时使用一个策略(比如 \varepsilon-贪婪策略,它会进行探索),但我们估计的Q值函数是针对最优策略 \pi^* 的动作价值函数 q^*(s, a),而不是针对我们实际使用的探索策略。换句话说,我们的目标是学习最优策略应该怎么做,而不是学习当前这个包含随机探索的策略的价值。这种分离允许我们使用一个探索性的策略来收集数据,同时直接学习最优策略的价值函数。我们不需要等到策略收敛到最优才能得到正确的Q值估计,理论上在探索充分的情况下,即使我们一直使用 \varepsilon-贪婪这样的探索策略与环境交互,Q-learning也能收敛到真实的最优动作价值函数 q^*(s, a)。但问题在于,当我们使用函数近似(特别是深度神经网络)来估计这些价值时,算法会倾向于给出过于乐观的估计,这种乐观来自于算法本身的缺陷。
这个过高估计(Overestimation)问题在实际训练中有非常明显的体现。在训练DQN的过程中,通常会出现这样的现象:训练初期,即使智能体处于非常随机的状态,游戏得分还能够稳步上涨。但到达某个临界点之后,得分反而开始持续下降,趋于平庸,训练效果越来越差,甚至还不如随机操控Agent玩游戏得到的分值。当DQN出现过高估计问题时,它基本就训不动了,会一路走下坡路,不再有任何提升。
过高估计的危害在于,它会让算法错误地认为某些状态或某些动作非常有价值,对它们进行过高的评价。但实际上,这些状态或动作并没有Agent想象的那么有价值。一旦产生了这种错误的高估,智能体就会做出错误的动作选择,出现非常不好的决策,甚至会朝着错误的方向不断学习,导致整体的Agent效果越来越差。当然,训练效果走下坡路也可能由其他原因造成,比如经验回放(Replay)中挑选的图像样本可能存在问题,不具有代表性,这也会导致越训练越差的情况。
理论基础
强化学习与价值函数
在状态 s 下采取动作 a,然后按照策略 \pi 行动,我们能获得的期望累积奖励定义为
这个公式表达的是:从当前状态 s 开始,执行动作 a,之后遵循策略 \pi,我们期望得到的总回报。这里 R_1, R_2, \ldots 是未来各个时刻的奖励,\gamma \in [0, 1] 是折扣因子,用来平衡即时奖励和长远奖励的重要性。当 \gamma 接近1时,我们更看重长期收益;当 \gamma 接近0时,我们更关注眼前利益。
最优价值函数 Q_*(s, a) = \max_{\pi} Q_{\pi}(s, a) 代表在所有可能策略中,能获得的最大期望回报。一旦我们知道了 Q_*,最优策略就很简单了:在每个状态选择价值最高的动作即可。
Q学习算法的系统性偏差
由于状态空间通常非常大(比如Atari游戏有数百万个可能的屏幕画面),我们无法为每个状态-动作对单独存储一个价值。因此需要用参数化函数 Q(s, a; \theta_t) 来近似,其中 \theta_t 是网络参数。
这种方法在状态空间较小且离散的情况下工作得很好,比如简单的网格世界或者棋盘游戏。但现实世界的很多问题远比这复杂。想象一下机器人控制问题,状态可能包含机器人各个关节的角度、速度、位置等连续变量;或者考虑图像作为输入的问题,一张图片就可能有数百万个像素。在这些情况下,状态空间可能是无限大的(如果状态是实数值的),或者虽然有限但大到无法枚举每一个状态。此时,为每个状态-动作对存储一个Q值的查表法(tabular method)变得要么效率极低,要么根本不可能实现。解决这个问题的关键思想是:不再为每个状态-动作对存储独立的Q值,而是建立一个参数化的模型 Q_{\Theta}(s, a),用参数向量 \Theta 来表示整个Q函数。这个参数化模型本质上是一个函数近似器(function approximator)。我们不再试图精确记住每一个状态-动作对的Q值,而是用一个参数化的函数来近似整个Q函数。为什么这样做能解决问题?首先,无论状态空间有多大(甚至是连续的无限空间),我们只需要存储有限个参数 \Theta。其次,这种参数化表示天然具有泛化能力:相似的状态-动作对会通过模型的内在结构产生相似的Q值估计,因为它们共享同一组参数。当我们在某个状态学习时,这个学习信号会通过参数 \Theta 的更新影响到所有相似状态的Q值估计。
在深入理解问题根源之前,我们需要回顾DQN中的双网络结构。DQN涉及两个网络:Policy Network和Target Network。Policy Network是实时更新参数权重的网络,而Target Network是定期从Policy Network复制参数权重的网络,相当于定期Copy了一份Policy Network。在TD误差计算中,Target Network负责计算目标值的前半部分,Policy Network则负责Q值预估的部分。
Q学习的更新规则是
这是一个梯度下降更新,其中 \alpha 是学习率,Y_t^Q - Q(S_t, A_t; \theta_t) 是时间差分误差(TD error)。关键在于目标值 Y_t^Q 的定义
这个目标值由两部分组成:即时奖励 R_{t+1} 和下一状态所有动作中最大价值的折扣。注意这里的核心:我们不再使用实际选择的下一个动作 a' 对应的 Q_t(s', a'),而是使用 \max_{a'} Q_t(s', a'),即在新状态 s' 中所有可能动作的Q值的最大值。因为最优策略的定义就是在每个状态都选择价值最高的动作,所以如果我们要估计最优策略的价值,就应该假设在 s' 状态会选择最优动作,也就是Q值最大的那个动作。这个 \max_{a'} 操作是Q-learning能够学习最优策略的关键。无论我们在与环境交互时实际选择了什么动作(可能是随机探索的结果),我们的更新都基于最优动作的假设。这就实现了行为策略(behavior policy,用于探索)和目标策略(target policy,要学习的最优策略)的分离。
为了更清楚地理解问题所在,我们需要将这个公式进一步细化。在选择动作时,我们要选择让Q函数最大化的那个动作。但在DQN中有两个网络,需要明确到底用的是哪个网络的Q值函数来选取使Q值最大的动作。
将max操作展开,我们可以更准确地表达DQN的目标值:
这里 \theta_t^- 代表Target Network的参数。这个公式的含义是:先挑选出能够让Target Network Q值最大的动作,然后再用这个 s_{t+1} 和指定的动作来得到Target Network的Q值。注意,无论是动作选择(内层的argmax)还是Q值计算(外层的Q函数),都是用同一个Target Network完成的。
问题就出在这个 \max_a 操作上。用同一套Q值既来选择动作又来评估动作,会导致系统性的高估。 当Q值估计还不准确时(特别是在学习早期),每个动作的Q值都带有随机误差。这些误差有正有负,但 \max 操作会优先选择那些误差为正、被高估的Q值。这个最大化操作使用同一个网络来选择最优动作并评估其价值。当网络的估计存在误差时(这在学习过程中是必然的),\max 操作会倾向于选中那些被高估的动作,因为它总是挑最大的值。这就像一个学生自己出题自己做,他会倾向于选择自己擅长的题型,导致对自己能力的评估偏高。
更严重的是,这种高估会在迭代过程中不断累积和放大。我们用来更新Q函数的是一种迭代的形式,如果总是让一个激进的估计器去处理所有事情,它会把估计变得越来越激进。当某个状态的价值被高估后,所有能够转移到这个状态的前序状态-动作对的价值也会被相应高估,误差通过Bellman方程在整个价值函数中传播,形成过度乐观的连锁反应。
过高估计的理论分析
高估现象的数学证明
定理1从理论上证明了即使在最理想的情况下,高估也是不可避免的。假设某个状态 s 中所有动作的真实最优价值都相等,即 Q_*(s, a) = V_*(s)。现在我们有一个估计 Q_t,它整体上是无偏的,意味着所有动作的估计误差之和为零:\sum_a(Q_t(s, a) - V_*(s)) = 0。但这些估计并非都正确,存在一定的方差 C = \frac{1}{m}\sum_a(Q_t(s, a) - V_*(s))^2 > 0,其中 m 是动作数量。
在这样的条件下,定理告诉我们,最大估计值至少会比真实值高出 \sqrt{\frac{C}{m-1}},即
这个下界是紧的,说明在某些情况下高估正好达到这个值。更重要的是,这个下界不依赖于误差的来源——无论误差来自噪声、函数近似的局限性还是采样不足,只要存在估计误差,\max 操作就会产生向上的偏差。这意味着不管是什么函数,到最后经过不同的Bellman函数方程式的迭代,最后都会产生Overestimation的问题。
定理还指出,在相同条件下,双Q学习的绝对误差下界为零,说明它能够在理论上消除这种系统性偏差。
动作空间维度的影响
虽然定理1的下界随动作数量增加而减少,但这只是数学下界的特性。在实际情况中,高估通常随动作数量增加而增加。图1展示了这一现象:假设每个动作的价值是 Q(s, a) = V_*(s) + \epsilon_a,其中 \epsilon_a 是独立的标准正态误差。当我们取这些估计值的最大值时,橙色柱显示的Q学习偏差随着动作数量 m 从2增加到100明显上升。这是因为在更多的随机值中选最大值,更可能选到极端高估的值。
相比之下,双Q学习维持两组独立的估计 Q 和 Q'。它用一组来选择动作,用另一组来评估价值,从而打破了"选择"和"评估"使用同一组估计的耦合。蓝色柱显示双Q学习的偏差始终接近零,不随动作数量变化。
作为另一个具体例子,如果所有动作的真实价值相等 Q_*(s, a) = V_*(s),估计误差在 [-1, 1] 均匀分布,那么过度乐观的大小是 \frac{m-1}{m+1}。这个表达式在动作数量 m 增加时趋向于1,说明几乎整个误差范围都会被转化为高估。
函数近似的高估现象
图2通过三个具体例子深入展示了函数近似如何导致高估。这里考虑一个连续状态空间,每个状态有10个动作。为了简化,所有动作在每个状态的真实价值相同,只依赖于状态本身。
论文中使用了两种非线性函数作为示例:\sin(s) 和 2e^{-s^2},这两个函数代表了需要拟合的真实Q*函数。为了与实际的神经网络相契合,实验中使用多项式来拟合这些非线性函数,因为神经网络本质上就是用多项式的方法去拟合非线性函数的。从线性函数近似的角度来理解,Q函数可以被表示为:
这个公式的含义是:我们首先定义 N 个特征函数(或称为回归量、基函数)\phi_i(s, a),每个特征函数将状态-动作对 (s, a) 映射到一个实数。然后用参数 \Theta_i 对这些特征进行线性组合,得到最终的Q值估计。如果状态 s 和动作 a 都是实数,一个典型的选择是多项式特征。比如我们可以定义:\phi_1(s, a) = 1,\phi_2(s, a) = a,\phi_3(s, a) = s,\phi_4(s, a) = sa,等等。通过组合这些特征,我们可以表示:
这实际上是一个关于 s 和 a 的多项式。通过调整参数 \Theta,我们可以让这个多项式拟合不同状态-动作对的真实Q值。实验设置了两种多项式:6项式(d=6)和9项式(d=9),项数越多相当于神经网络的神经元越多或层数越多,可以拟合的效果更好。
在第一行(顶行)例子中,真实价值函数是 Q_*(s, a) = \sin(s)。左图紫色曲线显示这个真实函数,绿色点是采样到的状态及其真实价值,绿色曲线是用6阶多项式拟合这些采样点得到的近似函数。注意到在采样点稀疏的区域(比如状态空间左侧),拟合曲线偏离真实曲线较大。
为了让不同的动作产生不同的Q值函数,实验采用了巧妙的方法:通过拟合不同的点集来构造差异。例如,Q_t(s,a_1) 拟合除了-5和-4之外的所有点(即-6, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6),Q_t(s,a_2) 拟合除了-4和-3之外的所有点,以此类推。每个动作的Q函数都缺少两个连续的拟合点,但都包含起点-6和终点6。根据选取的点不同,拟合出的曲线函数图形自然会发生不同的变化。
中间图显示了所有10个动作的估计价值函数(每个动作用不同的采样点拟合,所以曲线不同)以及它们的最大值(黑色虚线)。可以看到黑色虚线几乎总是位于紫色真实曲线之上。右图将这个差异(橙色)和双Q学习的估计误差(蓝色)作对比,橙色几乎总是正值,证实了系统性的高估。
第二行(中间行)使用不同的真实函数 Q_*(s, a) = 2\exp(-s^2),同样用6阶多项式拟合。当项数比较少的时候,紫色曲线上有一些点没有办法很好地拟合到位,出现了欠拟合的情况,这是因为项数少的Q_t无法很好地去拟合Q*函数。这说明高估不是特定函数形状的产物,而是更普遍的现象。
第三行(底行)使用相同的真实函数 Q_*(s, a) = 2\exp(-s^2),但增加多项式阶数至9阶,使其足够灵活以完美拟合所有采样点(左图绿色曲线完全通过绿色点)。基本上要拟合的绿色点都能够很精准地覆盖到。但这会出现另一个问题:在拟合点以外的区域会带来非常大的波动,这就是过拟合的问题。在这些点上表现很好,但在这些点以外的区域可能会带来较大的波动。有趣的是,这反而导致了更严重的高估。原因在于,更灵活的函数在未采样区域容易产生震荡和外推误差,这些误差通过 \max 操作被放大。这个发现尤其重要,因为深度神经网络正是这种高度灵活的函数近似器。虽然线性函数近似简单且易于分析,但它的表达能力受限于特征的选择。如果特征设计不当,线性组合可能无法很好地近似真实的Q函数。这时我们需要更强大的函数近似器,而神经网络正是一个理想的选择。神经网络可以看作是一个通用的函数近似器。根据通用近似定理,一个足够大的神经网络可以近似任何连续函数。在强化学习中,我们用神经网络来近似Q函数,参数 \Theta 就是神经网络的所有权重和偏置。
关键观察是,即使我们假设在某些状态拥有完全准确的真实价值(没有噪声),仅仅因为只在部分状态采样,就会产生高估。当我们进一步考虑到在实际学习中,我们是基于已经可能被高估的价值进行自举更新时,问题会更加严重。高估会在价值函数中传播:如果状态 s' 的价值被高估,那么所有转移到 s' 的状态-动作对的价值也会被高估。
双Q学习解决方案
双Q学习的基本思想
双Q学习通过维护两个独立的价值估计来解决高估问题。在每次更新时,用一个估计来选择最优动作,用另一个估计来评估该动作的价值。由于两个估计的误差是独立的,用于选择的估计中的高估不会影响用于评估的估计,从而打破了Q学习中"选择即评估"的偏差循环。具体来说,如果我们用 Q 来选择动作 a^* = \arg\max_a Q(s', a),那么用 Q' 来评估这个动作的价值 Q'(s', a^*)。算法同时维护两个独立的Q值估计:Q_1 和 Q_2。这两个估计器是独立训练的,它们对同一个动作的估计误差是不相关的。首先,使用 Q_1 来决定采取什么动作。这里我们仍然使用基于 Q_1 的 \varepsilon-贪婪策略来保证探索。其次,在bootstrap更新时使用 Q_2。但关键在于如何使用:我们用 Q_1 来选择在新状态 s' 中哪个动作是"最优"的(即 \arg\max_{a'} Q_1(s', a')),但用 Q_2 来评估这个被选中的动作的价值。更新公式为:
\arg\max_{a'} Q_1(s', a') 返回的是使 Q_1(s', a') 达到最大值的动作 a',然后我们用 Q_2(s', a') 来评估这个动作。这样就实现了选择和评估的分离。当 Q 高估了某个动作时,Q' 未必也高估它,因此评估结果不会被系统性地拉高。为什么这样能减少偏差?因为即使 Q_1 由于随机性高估了某个动作 a'(导致它被 \arg\max_{a'} Q_1(s', a') 选中),Q_2 对同一个动作 a' 的估计是独立的,不太可能也恰好高估同一个动作。因此 Q_2(s', a') 能提供一个相对无偏的评估。在算法的另一些步骤中,我们交换 Q_1 和 Q_2 的角色:用 Q_2 来选择动作和决定最优动作,用 Q_1 来评估。这种交替更新保证了两个估计都能得到训练,同时避免了单一估计的偏差问题。
下面通过一个机器人的具体例子来说明Double Q-learning如何工作。机器人在客厅中央 s_1 执行"向前",到达脏区域附近 s_2。在 s_2 有3个动作可选:清扫(真实价值25,当前Q估计20,低估)、向左探索(真实价值10,当前Q估计25,高估)、向右探索(真实价值5,当前Q估计15,高估)。
标准Q-learning使用:
选择最大Q值:\max_{a'} Q(s_2, a') = Q(s_2, \text{向左}) = 25。更新目标:R + \gamma \times 25 = -1 + 0.9 \times 25 = 21.5。虽然"向左探索"的真实价值只有10,但由于随机性导致Q值被高估到25,Q-learning会选择它作为最优动作,并用这个高估的25来更新 Q(s_1, \text{向前}),这就导致 Q(s_1, \text{向前}) 也被高估了。
Double Q-learning假设两个Q表的当前估计。Q_1 表中:s_2 状态下清扫的Q值为20,向左为25,向右为15。Q_2 表中:s_2 状态下清扫的Q值为20,向左为12,向右为8。注意:Q_1 高估了向左(25),但 Q_2 对向左的估计更接近真实(12)。
机器人从 s_1 向前到达 s_2,获得奖励 R=-1。第1步:用 Q_1 选择最优动作,a^* = \arg\max_{a'} Q_1(s_2, a') = \text{向左},因为 Q_1(s_2, \text{向左}) = 25 最大。第2步:用 Q_2 评估这个动作,Q_2(s_2, \text{向左}) = 12。第3步:更新 Q_1:
虽然 Q_1 错误地认为"向左"是最优动作(Q值25),但我们不使用这个高估的25来更新,而是用 Q_2 的独立估计12。因此避免了偏差传播。后续中,进行角色互换,这样两个Q表都能被训练。
这个思想的核心在于不要总让一个函数、一个网络去做所有的事情,而是把工作进行拆分,让不同的部分由不同的函数去完成。如果总是让一个激进的人去处理一件事,会把事情处理得越来越激进。但如果其中有一些信息是通过一个比较保守的人给出的判断,那么这个激进的人最终就做不到曾经那么激进的程度。这种思想在DQN中也有体现——DQN本身完全可以只用一个Policy Network,但为了减轻模型的波动性,才拆分成了Target Network和Policy Network两个网络。
在表格设置中,双Q学习通过随机决定更新哪个估计来实现对称性。在与函数近似结合时,这个思想可以推广到使用两个参数化函数,这正是论文后续要详细介绍的双DQN算法。
双DQN算法设计
双Q学习的核心思想是将目标计算中的 \max 操作分解成两个独立的步骤:用一个价值函数来选择最优动作,用另一个价值函数来评估这个动作的价值。这种分离能够有效打破单一Q学习中"选择"和"评估"相互耦合导致的高估循环。然而,如果直接在DQN中实现标准的双Q学习,需要维护两个完全独立的深度神经网络,这会显著增加计算成本和内存开销。
幸运的是,DQN本身的架构已经包含了两个网络:在线网络(参数为 \theta_t)和目标网络(参数为 \theta_t^-)。目标网络是在线网络的周期性副本,它的存在原本是为了稳定训练过程。现在我们可以巧妙地利用这个已有的目标网络作为第二个价值函数,而不需要引入额外的网络结构。
从DQN到双DQN的转变,核心内容非常简单,几乎可以用一句话来介绍完:之前DQN的动作选择和Q值计算都是Target Network负责,但经过了Double Q-Learning之后,动作选择换成了Policy Network,Q值计算依旧是Target Network,只有动作选择这个位置发生了变化。在代码实现中,这可能就涉及到一行的改动而已。
具体来说,双DQN的目标值定义为
这个公式的关键在于理解内外两层函数的作用。内层的 \arg\max_a Q(S_{t+1}, a; \theta_t) 使用在线网络 \theta_t 来选择下一状态 S_{t+1} 中哪个动作看起来最优,记这个动作为 a^*。然后外层的 Q(S_{t+1}, a^*; \theta_t^-) 使用目标网络 \theta_t^- 来评估这个被选中的动作 a^* 的实际价值。由于在线网络和目标网络的参数不同(目标网络是之前某个时刻在线网络的副本),它们对同一状态-动作对的估计会有差异,这种差异正是打破高估偏差的关键。
为了理解为什么这样能够减少过高估计,可以通过一个直观的例子来说明。假设在某个状态下,当只用Target Network时,它认为动作a_1能达到Q值的最大。但当我们改用Policy Network来选择动作时,Policy Network可能认为动作a_6才是最优的。这时我们告诉Target Network应该选择a_6,而Target Network在评估a_6时给出的值通常会比它自己认为的最大值(a_1的值)要小。这样就相当于把过高估计做了一步下降,让估计值没有那么高了。
当然,如果随机选择一个动作,只要不选让Target Network Q值最大化的那个动作,也能让整体的值变小。但我们的max函数还是要让它有迹可循,需要另一个函数(Policy Network)来提供它认为的最大值给Target Network。本质上我们还是要做优化估计,还是比较乐观地去选择一个会使某一个函数最大值的动作,只是这个"某一个函数"从Target Network变成了Policy Network。
与标准双Q学习的对比能帮助我们理解这个设计。在标准双Q学习中,有两个完全对称的价值函数 Q^A 和 Q^B,目标值类似于
双DQN实际上是用目标网络的权重 \theta_t^- 替代了第二个独立网络的权重。这个替代不是完全等价的,因为目标网络并非独立训练,而是在线网络的延迟副本。实际DQN用的Target Network和Policy Network,它们两个Network其实是很相近的,只是有一些更新稍微不一致,只有这样一点点的区别,本质上它们的方向还是基本一样的。但这个近似在实践中非常有效,既保留了双Q学习的主要优势,又最小化了对原DQN算法的修改。
目标网络的更新机制保持不变,仍然是每隔固定步数(比如10000步)将在线网络的参数完整复制到目标网络。这意味着双DQN相比DQN几乎没有增加额外的计算开销,仅仅是改变了目标值的计算方式。这种"最小改变"的设计哲学很重要,它确保了与DQN的公平对比,任何性能差异都可以归因于减少高估这个单一因素。
在代码实现层面,基于DQN Zoo框架,双DQN的实现主要体现在loss function的TD Error计算部分。使用了RLax提供的rlax.double_q_learning函数,相比DQN只有q_target_t和q_t_minus_1,双DQN额外添加了一个q_t。其中q_t_minus_1使用online_params(Policy Network),q_target_t使用target_params(Target Network),新添加的q_t也使用online_params,负责动作选择的工作。代码的其他部分,包括网络结构,基本与DQN保持一致。
高估对策略质量的影响
需要区分两种"乐观":一种是面对不确定性的乐观主义,这是一种有益的探索策略,鼓励智能体探索不确定的状态;另一种是Q学习产生的系统性高估,这发生在更新之后,即使对看似确定的价值也会过度乐观。
如果所有状态-动作对的价值都被均匀地高估相同的量,那么相对大小关系保持不变,不会影响策略质量。但实际上,高估的程度在不同状态和动作之间是不均匀的。这会扭曲价值函数的相对结构,导致智能体错误地认为某些状态比实际更有价值,从而做出次优决策。Thrun和Schwartz在1993年就给出了具体例子,证明这种高估即使在渐近情况下(训练无限长时间)也会导致次优策略。
本文后续的实验证实,当使用双Q学习减少高估时,不仅价值估计更准确,在多个游戏中的实际表现(得分)也显著提升,说明DQN的高估确实损害了策略质量。
性能对比与结果分析
高估并非在所有情况下都导致明显的性能下降。例如在Pong游戏中,DQN虽然略微高估了策略价值,但仍然实现了最优行为。这说明当高估相对均匀时,它不一定影响动作选择的相对偏好。然而,减少高估确实显著提升了学习的稳定性,这在图3的例子中得到了清晰展示。
为了全面评估双DQN在策略质量方面的提升,实验在DQN测试的全部49个游戏上进行了对比。每个评估回合通过执行最多30次无操作动作开始,这为智能体提供了不同的起始状态,增加了评估的随机性。学习到的策略使用 \epsilon-贪婪方式评估,其中 \epsilon = 0.05 允许少量探索。每个回合最多运行5分钟模拟时间(18000帧),分数在100个回合上取平均。
关键的是,双DQN与DQN使用完全相同的超参数,唯一的区别是目标值的计算从 Y_t^{\text{DQN}} 改为 Y_t^{\text{DoubleDQN}}。这是一个故意设置的对抗性评估场景,因为这些超参数是针对DQN调优的,并未针对双DQN重新调整。即使在这种不利条件下,双DQN仍然表现更好,这更能证明算法改进的鲁棒性。
为了在不同游戏间进行比较,需要对分数进行归一化处理
这个归一化公式的含义是:将智能体的表现放在随机策略和人类专家之间的区间上衡量。分子是智能体相对于随机策略的提升,分母是人类相对于随机策略的提升。这就是Median Human Normalized Score,当前游戏Agent和人类玩游戏水平的比较,是游戏Agent的水平比上人类的水平。当归一化分数为0%时,智能体与随机策略持平,相当于非常随机的水平;100%时达到人类水平;超过100%则超越人类,代表训练出的Agent已经可以打败人类了,远远超过人类的水平。这种归一化消除了不同游戏分数尺度的差异,使得跨游戏比较成为可能。
表1总结了49个游戏在5分钟评估下的结果。双DQN的中位数性能为114.7%(相比DQN的93.5%),平均性能为330.3%(相比DQN的241.1%)。中位数的提升说明在一半以上的游戏中双DQN表现更好,平均值的显著提升则表明在某些游戏中的改进非常大。详细对比显示,一些游戏有显著改进:Road Runner从233%提升到617%,Asterix从70%提升到180%,Zaxxon从54%提升到111%,Double Dunk从17%提升到397%。这些大幅提升的游戏往往正是DQN高估问题较严重的游戏。
在实际训练对比中,可以看到在前期的时候,DQN和Double DQN基本上不相上下。等到接近300个训练轮次的时候,大体上大部分时间都是Double DQN表现的效果要好于DQN表现的效果。如果DQN调的再稍差一点,当Overestimation在某一个程度、某一个节点中出现过高估计问题的时候,它们两个之间的对比效果能看出来更明显。因为当DQN出现Overestimation的时候,它基本就训不动了,会一路走下坡路,不会增长。而Double DQN因为能够有效缓解Overestimation的问题,所以会继续上涨。
在官方经过长时间大规模,包括各种游戏平均的效果综合考虑之下,可以看出灰色代表的DQN和紫色代表的Double DQN的对比中,Double DQN要远远地,尤其是在某一个阶段之后,要远远超过DQN的训练效果。整体上来看,Double DQN的效果确实要优于DQN。
泛化能力测试
标准评估中的一个潜在问题是,在具有固定起始状态的确定性游戏中,智能体可能只是记住了一串固定的动作序列,而没有真正学会游戏的本质规律。虽然这种记忆策略能获得高分,但它不具备泛化能力,对起始状态的微小变化会非常脆弱。
为了测试学到的策略是否真正泛化,采用了从人类专家轨迹中采样的100个不同起点来评估每个游戏。智能体从这些人类起点开始游戏,而非从固定的初始状态开始。每个回合最多运行30分钟模拟时间(108000帧,包括到达起点之前的轨迹部分),但只评估起点之后累积的奖励。这种评估更具挑战性,因为它要求策略能够应对多样的初始条件。
对于这个更困难的评估,实验包含了双DQN的调优版本。进行调优是合理的,因为原始超参数是为DQN优化的,对于不同算法可能不是最优配置。当然,如果服务器配置发生变化,版本也变化了,训练参数也需要跟着进行一些调整,这是非常玄学的。用之前那一版的参数在新的服务器上,效果就会出现波动。经过测试后,需要用新的训练参数去训练。
调优版本做了三处改变。第一,将目标网络更新间隔从10000帧增加到30000帧。这个改变进一步减少了高估,原因在于每次目标网络切换后,DQN和双DQN都会短暂地退化为标准Q学习(因为此时在线网络和目标网络参数相同),更长的更新间隔减少了这种退化的频率。从理论上理解,这个更新频率 P 是一个重要的超参数。如果 P 太小,目标网络更新太频繁,就失去了稳定训练目标的作用,退化为类似NFQ的情况。如果 P 太大,目标网络会过于陈旧,与主网络的差距太大,导致训练目标不准确,学习效率降低。在实践中,P 通常设置为几千到一万个时间步,或者几十到几百个episode,具体取决于问题的复杂度和训练的总步数。第二,将训练时的探索率从 \epsilon = 0.1 降低到 \epsilon = 0.01,评估时使用 \epsilon = 0.001。更低的探索率有助于策略更充分地利用已学到的知识。第三,为网络顶层的所有动作价值使用单个共享偏置项,这个小的架构调整有助于价值估计的稳定性。这三个改变每一个都带来了性能提升,组合起来产生了明显更好的结果。
表2总结了49个游戏在人类起点评估下的结果。双DQN的中位数性能为88.4%(相比DQN的47.5%),平均性能为273.1%(相比DQN的122.0%)。调优后的双DQN进一步提升到中位数116.7%和平均值475.2%。这些数据显示,双DQN不仅在标准评估中更好,在这个更严格的泛化测试中优势更加明显。中位数从47.5%提升到116.7%意味着超过一半的游戏达到或超过了人类水平。
图4展示了57个游戏的详细结果(相比之前增加了8个游戏)。在多个游戏中,从DQN到双DQN的改进非常显著,有些情况下使得智能体的表现更接近甚至超越人类水平。双DQN对这种更具挑战性的评估表现出更强的鲁棒性,表明它学到的确实是游戏的通用策略,而非依赖环境确定性的动作序列记忆。这是一个重要的进展,因为它说明算法在朝着寻找真正具有泛化能力的解决方案方向发展,而不是利用环境特殊性的技巧。
总的来说,实验结果从多个角度证实了双DQN的有效性:它不仅如理论预期那样减少了价值高估,这种减少也确实转化为了更好的策略质量和更稳定的学习过程,并且在更严格的泛化测试中表现出更强的鲁棒性。
研究贡献与总结
这篇论文在强化学习领域做出了五个层层递进的贡献,它们共同构成了一个完整的研究链条。
第一个贡献是从理论层面解释了Q学习为什么会在大规模问题中产生过度乐观。关键的洞察是,即使环境是完全确定性的(没有随机噪声),高估仍然不可避免。这个发现打破了之前的认知——人们曾认为高估主要由噪声或函数近似的不灵活性导致。实际上,学习过程中固有的估计误差就足以引发高估,这是 \max 操作的数学特性决定的。无论误差来自哪里,只要价值估计不完全准确(这在学习中是常态),取最大值的操作就会系统性地偏向高估的方向。
第二个贡献是通过实证研究揭示了高估在实践中的普遍性和严重性。通过对Atari游戏中DQN的价值估计进行系统分析,论文展示了高估不是偶发的边缘情况,而是在所有49个测试游戏中都存在的普遍现象。更重要的是,某些游戏中的高估程度远超预期——价值估计可能比真实值高出几个数量级。这个发现很重要,因为它将理论预测转化为可观测的现象,证明高估确实是一个需要解决的实际问题。
第三个贡献是证明了双Q学习的思想可以成功地扩展到大规模函数近似场景。双Q学习最初是为表格型强化学习设计的,其中每个状态-动作对都有独立的价值存储。当转向使用深度神经网络这样的复杂函数近似器时,并不显然双Q学习的优势能否保持。论文证明,即使在使用深度神经网络处理高维输入(如游戏屏幕图像)时,双Q学习仍然能够有效减少过度乐观,实现更稳定可靠的学习过程。
第四个贡献是提出了一个巧妙的实现方案——双DQN。这个方案不需要引入额外的网络或参数,而是利用DQN已有的目标网络作为第二个价值函数。这种设计既保留了双Q学习的核心优势,又保持了与原始DQN的最小差异,使得对比实验更加可控,也使得算法在实际应用中更容易被采纳。几乎零成本的改进是最有吸引力的改进。
第五个贡献是在实际应用层面取得的突破。双DQN不仅在理论上更合理、在价值估计上更准确,而且在策略质量上也有实质提升。它在Atari 2600游戏上刷新了当时的最优记录,这证明减少高估确实能够转化为更好的决策能力。这个贡献闭合了整个研究的逻辑链:从理论发现问题,到实证观察问题,到提出解决方案,到验证方案有效性,最后到实现性能突破。
这种思想启发我们在后续做自己的实验、做一些改进的时候,也可以考虑公式的各个部分能不能不要总让一个模型、一个网络模型、一个函数去负责,能不能用相似的其他模型去担任这部分的工作。可以想办法把一些公式进行工作任务的划分,分配给不同的模型去处理不同的事情,也许效果就会更好。
附录
定理1的证明
定理1建立了Q学习高估的理论下界,这个证明展示了为什么即使在最有利的条件下,高估也是数学上不可避免的。
证明从一个简化假设开始:不失一般性,令真实价值 V_*(s) = 0 。这个假设是合理的,因为我们关心的是估计值与真实值的差异,而非绝对大小。将所有值平移一个常数不影响差异的分析。定义 \epsilon_a \equiv Q_t(s, a) 表示动作 a 的估计误差(因为真实值为0,估计值就等于误差)。
现在我们有两个约束条件。第一个约束是误差总和为零: \sum_a \epsilon_a = 0 ,这来自无偏性假设。第二个约束是误差的平方和固定: \sum_a \epsilon_a^2 = mC ,其中 m 是动作数量, C 是单个误差的平均平方。这两个约束定义了一个误差配置的可行域。
证明采用反证法。假设相反的情况成立,即最大误差严格小于下界
如果这个假设成立,那么所有误差的平方和将会是
注意右边是 \frac{mC}{m-1} ,但我们的约束要求平方和恰好等于 mC 。由于 m \geq 2 ,有 \frac{mC}{m-1} > mC ,这看起来还没有矛盾。关键在于进一步分析误差的结构。
假设至少有 n 个正误差。由于误差总和为零,必须至少有 n 个负误差来抵消正误差(如果正误差有 n 个且它们的和为某个正数 S ,那么负误差的和必须是 -S )。现在考虑 n < m/2 的情况,这意味着正误差少于一半,因此负误差至少有 n+1 个。
如果所有负误差都不小于 -n\sqrt{\frac{C}{m-1}} (即绝对值不超过 n\sqrt{\frac{C}{m-1}} ),那么可以计算最大可能的平方和。正误差部分贡献至多 n \cdot \frac{C}{m-1} (每个正误差的平方至多 \frac{C}{m-1} ,共 n 个)。负误差部分,每个至多贡献 (n\sqrt{\frac{C}{m-1}})^2 = n^2\frac{C}{m-1} ,但注意所有负误差的和必须等于所有正误差和的相反数。通过仔细计算(考虑到所有约束),可以得出总的平方和严格小于 mC ,这与约束 \sum_a \epsilon_a^2 = mC 矛盾。
因此反证法的假设不能成立,必有 \max_a \epsilon_a \geq \sqrt{\frac{C}{m-1}} 。
证明还需要说明这个下界是紧的,即存在满足所有约束的误差配置恰好达到这个下界。构造如下:设前 m-1 个动作的误差都等于 \sqrt{\frac{C}{m-1}} ,最后一个动作的误差为 -\sqrt{(m-1)C} 。验证约束:误差总和为 (m-1)\sqrt{\frac{C}{m-1}} - \sqrt{(m-1)C} = 0 ,平方和为 (m-1) \cdot \frac{C}{m-1} + (m-1)C = mC 。这个构造确实达到了下界,证明下界是紧的。
对于双Q学习,定理指出其绝对误差的下界为零。这通过一个巧妙的构造来证明。假设第一组估计 Q_t 中,动作 a_1 的估计为 V_*(s) + \sqrt{C\frac{m-1}{m}} ,其余动作都是 V_*(s) - \sqrt{C\frac{1}{m(m-1)}} 。可以验证这满足无偏性和方差约束。第一组估计会选择动作 a_1 (因为它值最大)。现在如果第二组估计 Q_t' 中,动作 a_1 的估计恰好等于真实值 V_*(s) ,那么双Q学习的误差为零。这个构造的关键在于,两组估计是独立的,第一组中被高估的动作在第二组中未必被高估,因此评估误差可以为零。这证明了双Q学习原则上可以完全消除系统性偏差。
定理2:均匀误差分布下的期望高估
定理2在更具体的误差分布假设下给出了高估的精确期望值。假设所有动作的真实价值相等 Q_*(s, a) = V_*(s) ,估计误差 Q_t(s, a) - Q_*(s, a) 在 [-1, 1] 上独立均匀分布。这个假设虽然理想化,但能够给出清晰的数学结果。
定义 \epsilon_a \equiv Q_t(s, a) - Q_*(s, a) 为动作 a 的估计误差,这是一个 [-1, 1] 上的均匀随机变量。我们要计算 \max_a \epsilon_a 的期望值。
首先推导 \max_a \epsilon_a 的累积分布函数(CDF)。事件" \max_a \epsilon_a \leq x "发生当且仅当所有动作的误差都不超过 x ,即 \epsilon_1 \leq x 且 \epsilon_2 \leq x 且...且 \epsilon_m \leq x 。由于误差独立,这个联合概率等于各个边缘概率的乘积
单个均匀分布随机变量的CDF很简单:当 x < -1 时概率为0(所有值都大于 x ),当 x > 1 时概率为1(所有值都小于 x ),在区间 (-1, 1) 内,概率线性增长为 \frac{1+x}{2} (这是因为均匀分布在 [-1, 1] 上,长度为2,小于等于 x 的部分长度为 1+x ,除以总长度得到概率)。
因此最大值的CDF是
在 (-1, 1) 区间内,CDF是 m 个相同概率 \frac{1+x}{2} 的乘积,得到 \left(\frac{1+x}{2}\right)^m 。这个形状是合理的:当动作数量 m 增加时,这个函数更快地趋向于1,意味着最大值更可能接近上界1。
为了计算期望值,需要概率密度函数(PDF),它是CDF的导数
期望值通过积分计算
这个积分需要使用分部积分或查表。设 u = \frac{1+x}{2} ,则 x = 2u - 1 , dx = 2du ,当 x = -1 时 u = 0 ,当 x = 1 时 u = 1 。积分变为
这个结果告诉我们,当动作数量 m 增加时,期望高估趋向于1(整个误差范围的一半)。例如,当 m = 2 时期望高估为 \frac{1}{3} ,当 m = 10 时为 \frac{9}{11} \approx 0.82 ,当 m = 100 时为 \frac{99}{101} \approx 0.98 。这与定理1的观察一致:虽然数学下界随 m 增加而减小,但典型情况下高估随 m 增加而增大。