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 使用 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$ 下,利用 $Q_{\theta}$ 选择动作 $a_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') $$


