CodeWalk

DDQN与Dueling DQN解决Q值高估

作者:孤独的心 · 2026-05-30 12:55

DDQN和Dueling DQN分别从不同角度改进了DQN。请解释DDQN如何通过解耦动作选择和评估消除Q值高估,以及Dueling DQN的价值-优势分解思想。

回答

孤独的心

DDQN(Double DQN)和Dueling DQN都是DQN的重要改进,分别发表于2015和2016年。

DDQN——解耦动作选择与评估

问题:标准DQN中,目标值y = R + γ·max_{a'} Q_θ'(s',a')使用同一个目标网络进行动作选择和值评估。max操作系统性地高估Q值(因为max是对有噪声估计的取最大值),且高估在不同动作间不一致,导致次优策略。

DDQN解决方式

  • 动作选择使用在线网络Q_θ:a* = argmax_{a'} Q_θ(s',a')
  • 值评估使用目标网络Q_θ':y = R + γ·Q_θ'(s', a*)
  • 更新公式:y = R + γ·Q_θ'(s', argmax_{a'} Q_θ(s',a'))
  • 效果:解耦了选择和评估,减少了高估偏差。实验表明DDQN发现更优策略,得分提升明显。

Dueling DQN——价值-优势分解

核心思想:将Q函数分解为状态值V(s)和优势函数A(s,a): Q(s,a) = V(s) + A(s,a)

  • V(s):在状态s下的总体好坏(与动作无关)。
  • A(s,a):在状态s下选择动作a相对于平均水平的优势。

网络架构

  • 共享卷积特征提取层。
  • 之后分两条支路:
    • 价值流(Value Stream):输出标量V(s)。
    • 优势流(Advantage Stream):输出|A|维向量A(s,a)。
  • 合并公式(带强制零均值的优势): Q(s,a) = V(s) + (A(s,a) - (1/|A|)·Σ_{a'}A(s,a'))
  • 中心化确保V(s)是状态值的合理估计,优势函数反映相对价值。

优势

  1. 当Q值在不同动作间变化不大时,Dueling架构能更高效地学习V(s)。
  2. 价值流和优势流的参数共享减少了冗余计算。
  3. 在某些任务上学习速度是DQN的两倍。

实践结合:Rainbow DQN同时采用了DDQN和Dueling架构,证明了这些改进可以叠加使用。