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 Q-Learning 启发,DDQN 将其思想扩展到深度强化学习领域:
- 在线网络(Online Network)负责选择动作。
- 目标网络(Target Network)负责估计动作价值。
DDQN 的目标值公式调整为:
$$y_t^{DDQN} = r_t + \gamma Q_{\theta^-}(s_{t+1}, \arg\max_a Q_{\theta}(s_{t+1}, a))$$
这里 $Q_{\theta^-}$ 是目标网络,$Q_{\theta}$ 是在线网络。该机制成功解决了 DQN 的过估计问题,在多个任务中表现出更优的性能。
Double DQN 的核心思想
核心在于分离动作选择和目标 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')$。
- 更新在线网络:使用均方误差(MSE)损失函数对 $Q_{\theta}$ 进行梯度下降。


