标准DQN直接估计每个状态-动作对的Q值 $Q(s, a)$,而对偶网络架构提出一种不同的方法。它明确地将状态的价值表示与在该状态下采取特定动作的优势表示分开。直观地想:在某些状态下,值 $V(s)$(处于状态 $s$ 有多好)很高,无论采取何种动作。在其他状态下,动作的选择非常重要,这意味着优势 $A(s, a)$(动作 $a$ 相对于状态 $s$ 中其他动作的优势程度)差异显著。对偶网络旨在解耦这两个部分。其核心思想基于以下关系:$$ Q(s, a) = V(s) + A(s, a) $$这里,$V(s)$ 代表状态值函数,估计从状态 $s$ 获得的预期回报。$A(s, a)$ 是优势函数,表示动作 $a$ 相对于状态 $s$ 中平均动作的相对重要性。然而,我们不能简单地独立学习 $V(s)$ 和 $A(s, a)$ 并将它们求和。给定学习更新(如DQN或Double DQN中使用的)的目标 $Q(s, a)$ 值,可能产生该值的 $V(s)$ 和 $A(s, a)$ 存在无限多种组合。这是一个可识别性问题。例如,如果我们增加 $V(s)$ 一个常数 $C$,并同时减少所有 $A(s, a)$ 值一个 $C$,则最终的 $Q(s, a)$ 保持不变。为此,对偶网络在组合价值流和优势流时引入了约束。一种常用方法是强制所选动作的优势函数估计值为零,或者减去所有动作的平均优势:最大值操作: $$ Q(s, a; \theta, \alpha, \beta) = V(s; \theta, \beta) + \left( A(s, a; \theta, \alpha) - \max_{a' \in |\mathcal{A}|} A(s, a'; \theta, \alpha) \right) $$平均值操作: $$ Q(s, a; \theta, \alpha, \beta) = V(s; \theta, \beta) + \left( A(s, a; \theta, \alpha) - \frac{1}{|\mathcal{A}|} \sum_{a' \in |\mathcal{A}|} A(s, a'; \theta, \alpha) \right) $$在这些方程中:$\theta$ 代表共享网络层(例如,处理图像等输入的卷积层)的参数。$\alpha$ 代表计算优势 $A(s, a)$ 的网络流的参数。$\beta$ 代表计算状态值 $V(s)$ 的网络流的参数。$|\mathcal{A}|$ 是离散动作的数量。平均值操作的公式在实践中常被偏爱,因为它增加了优化的稳定性。减去平均值确保平均优势为零,使 $V(s)$ 成为状态价值的直接估计。网络结构网络架构通常包含在两个流之间共享的初始层(例如,用于图像输入的卷积层,用于向量输入的全连接层)。在这些共享层之后,网络分裂为两个独立的全连接流:价值流: 输出一个标量值,$V(s; \theta, \beta)$。优势流: 输出一个包含 $|\mathcal{A}|$ 个值的向量,每个动作一个,$A(s, a; \theta, \alpha)$。然后,这两个流使用上述聚合方法之一进行组合,以生成状态 $s$ 中所有动作的最终Q值。digraph DuelingNetwork { rankdir=LR; node [shape=box, style=filled, fillcolor="#e9ecef", fontname="helvetica"]; edge [fontname="helvetica"]; Input [label="输入状态 (s)", shape=ellipse, fillcolor="#a5d8ff"]; SharedLayers [label="共享层\n(例如,CNN/FC)\n参数: θ"]; subgraph cluster_streams { label = "独立流"; bgcolor="#f8f9fa"; style=filled; color=lightgrey; node [shape=box, style=filled, fillcolor="#e9ecef"]; ValueStream [label="价值流\n(全连接层)\n参数: β"]; AdvantageStream [label="优势流\n(全连接层)\n参数: α"]; } ValueOutput [label="V(s)", shape=ellipse, fillcolor="#b2f2bb"]; AdvantageOutput [label="A(s, a) 向量", shape=ellipse, fillcolor="#ffec99"]; Combine [label="组合\n(例如,平均聚合)", shape=cds, fillcolor="#ffc9c9"]; QOutput [label="Q(s, a) 向量", shape=ellipse, fillcolor="#bac8ff"]; Input -> SharedLayers; SharedLayers -> ValueStream [lhead=cluster_streams]; SharedLayers -> AdvantageStream [lhead=cluster_streams]; ValueStream -> ValueOutput; AdvantageStream -> AdvantageOutput; ValueOutput -> Combine; AdvantageOutput -> Combine; Combine -> QOutput; }图示对偶网络架构。输入状态特征通过共享层,然后分裂为价值流和优势流。这些流随后重新组合以生成最终Q值。有何助益?对偶架构的主要好处源于其能够学习状态值 $V(s)$,而无需在每一步考虑每个动作的影响。价值流学习了状态整体效用的表示。优势流只需要在真正重要时学习动作的相对期望性。这种分离常导致在动作不显著影响结果的状态下进行更好的策略评估。网络可以更有效地学习状态的价值,因为对 $V(s)$ 的更新通过聚合层同时影响所有动作的Q值。这通常会带来更快的收敛和更好的性能,与标准DQN相比,尤其是在动作空间大或许多动作效果相似的环境中。对偶网络可以轻易地与Double DQN (DDQN) 和优先经验回放 (PER) 等其他DQN改进结合,以获得进一步的性能提升。将对偶架构集成到DDQN智能体中,只需将其标准Q网络和目标网络结构替换为对偶版本,同时保持DDQN更新规则不变。