Double DQN 算法详解
强化学习中的深度 Q 网络(DQN)将深度学习与 Q 学习结合,通过神经网络逼近 Q 函数来解决高维状态问题。然而,标准 DQN 存在过估计偏差(Overestimation Bias),即在更新 Q 值时,由于同一个网络既负责选择动作又负责评估价值,容易导致 Q 值估计偏高。
Double DQN(DDQN)引入了双网络机制来缓解这一问题,显著提高了算法的稳定性和收敛性。
算法背景与提出
在强化学习早期,Q 学习依赖 Q 值表描述状态 - 动作对的长期累积奖励。当空间巨大或连续时,传统方法难以扩展。DQN 引入神经网络取得了如 Atari 游戏的成果,但实际应用中暴露出过估计偏差问题。
过估计偏差问题
DQN 的 Q 值更新公式如下:
$$y_t^{DQN} = r_t + \gamma \max_a Q_{\theta^-}(s_{t+1}, a)$$
其中 $Q_{\theta^-}$ 是目标网络的 Q 值,$\gamma$ 是折扣因子,$r_t$ 是即时奖励。
DQN 使用最大值操作选择动作并估计未来价值,这可能导致过高估计。根本原因在于:
- 同一个网络(目标网络)既负责选择动作,又负责评估这些动作的价值。
- 神经网络的逼近误差会放大估计值,加剧过估计。
这种偏差会导致策略过于激进、学习过程不稳定甚至无法收敛。
Double Q-Learning 的灵感
Double Q-Learning 通过分离动作选择和价值估计来减少过估计。它使用两个独立的 Q 值表:一个用于选择动作,另一个用于计算目标值。
其目标值公式为:
$$y_t^{DoubleQ} = r_t + \gamma Q_2(s_{t+1}, \arg\max_a Q_1(s_{t+1}, a))$$
通过分离计算,动作选择的误差不会直接影响目标值计算,从而降低了风险。
Double DQN 的提出
Double DQN 受此启发,将其扩展到深度强化学习领域。主要区别在于:
- 使用在线网络(Online Network)来选择动作。
- 使用目标网络(Target Network)来估计动作的价值。
Double DQN 的目标值公式为:
$$y_t^{DDQN} = r_t + \gamma Q_{\theta^-}(s_{t+1}, \arg\max_a Q_{\theta}(s_{t+1}, a))$$
其中 $Q_{\theta^-}$ 是目标网络,用于估计目标 Q 值;$Q_{\theta}$ 是在线网络,用于选择动作。这种方法成功解决了 DQN 的过估计问题,并在多个任务中表现出更好的性能。
Double DQN 的核心思想
核心在于分离动作选择和目标 Q 值计算:
- 使用在线网络选择动作。
- 使用目标网络计算目标 Q 值。
这种分离使得目标 Q 值的计算更加可靠,有助于减少估计偏差。
算法流程
初始化阶段需要构建两个神经网络:在线网络 $Q_{\theta}$ 和目标网络 $Q_{\theta^-}$。目标网络的参数会定期从在线网络同步。
在执行动作时,当前状态 $s_t$ 下利用在线网络选择动作 $a_t = \arg\max_a Q_{\theta}(s_t, a)$。随后将转移样本 $(s_t, a_t, r_t, s_{t+1})$ 存入经验回放池。
训练时从池中随机采样小批量数据。关键步骤在于目标值计算:使用在线网络选择下一个状态的最佳动作 $a' = \arg\max_a Q_{\theta}(s_{i+1}, a)$,再使用目标网络计算目标 Q 值 $y_i = r_i + \gamma Q_{\theta^-}(s_{i+1}, a')$。
最后使用均方误差作为损失函数对在线网络进行梯度下降,并每隔一定步数将在线网络参数复制到目标网络。
公式推导
Double DQN 通过分离动作选择和目标计算来减小过估计。Q 值由目标网络 $Q_{\theta^-}$ 计算,而动作 $a$ 由在线网络 $Q_{\theta}$ 选择。
DDQN 的目标值为:
$$y_t^{DDQN} = r_t + \gamma Q_{\theta^-}(s_{t+1}, \arg\max_a Q_{\theta}(s_{t+1}, a))$$


