Double DQN 算法详解
强化学习中的深度 Q 网络(DQN)通过将深度学习与 Q 学习结合,利用神经网络逼近 Q 函数来解决高维状态问题。然而,标准 DQN 存在过估计偏差(Overestimation Bias),即在更新 Q 值时,由于同时使用同一个网络选择动作和计算目标 Q 值,容易导致 Q 值估计偏高。
Double DQN(DDQN)引入了'双网络'机制来缓解这个问题,从而提高了算法的稳定性和收敛性。
算法背景和提出
在强化学习早期,Q 学习通过构建 Q 值表描述状态 - 动作对的长期累积奖励。当状态空间巨大或连续时,Q 学习难以扩展。DQN 引入神经网络解决了这一问题,但在实际应用中暴露出过估计偏差问题。
过估计偏差问题
在 DQN 中,Q 值更新公式如下:
$$y_t^{DQN} = r_t + \gamma \max_a Q_{\theta^-}(s_{t+1}, a)$$
其中 $Q_{\theta^-}$ 是目标网络的 Q 值,$\gamma$ 是折扣因子,$r_t$ 是即时奖励。
DQN 使用 max 操作选择动作并估计未来价值,这可能导致过高估计。根本原因在于:
- 同一个网络(目标网络)既负责选择动作,又负责评估这些动作的价值。
- 神经网络的逼近误差会放大估计值,加剧过估计问题。
这种偏差会导致策略过于激进、学习过程不稳定以及收敛速度减慢。
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 受 Double Q-Learning 启发,将其思想扩展到深度强化学习领域。主要区别在于:
- 使用在线网络(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 的核心思想
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})$ 存入经验回放池。
- 经验回放:从经验回放池中随机采样一个小批量 $(s_i, a_i, r_i, s_{i+1})$。
- 目标值计算:
- 使用在线网络选择下一个状态的最佳动作:$a' = \arg\max_a Q_{\theta}(s_{i+1}, a)$。
- 使用目标网络计算目标 Q 值:$y_i = r_i + \gamma Q_{\theta^-}(s_{i+1}, a')$。


