Double DQN
Online 选动作,Target 评价该动作,缓解 DQN 过估计。
学习目标
- 在 DQN 中区分下一动作的选择网络与评价网络。
- 独立复核“在线网络选出的动作未必是目标网络最大动作”的输入、计算和解释。
- 选择与评价分离是算法差异的关键。
为什么重要
在 DQN 中区分下一动作的选择网络与评价网络。
学习前需要掌握
背景与问题
DQN 的目标网络虽降低了漂移,却仍用同一个含噪声向量选最大动作并给它评分。Double DQN 将这两件事分开,使最大值目标不再完全依赖同一份估计噪声。
概念定义
Double DQN 用在线网络在下一状态选择 argmax 动作,再查询目标网络该动作的价值。当前状态的 Q(s,a) 仍由在线网络拟合。它保留 DQN 的 replay、目标同步和离散动作结构,并非维护两套完全独立表格轮流更新。
直观理解
在线网络负责提名,延迟网络负责打分。候选有可能不是延迟网络最喜欢的动作,这正是它与普通 DQN 目标的区别。
核心原理
目标计算顺序是 online(next_state).argmax,再在 target(next_state) 上 gather 同一动作。若直接对 target 输出取 max,得到的还是普通 DQN 目标;若只对两个 max 取最小,也不是 Double DQN。
两个网络之间通常相关,因为目标网络来自在线网络复制。该方法能缓解过估计,但不能宣称所有噪声偏差已消失,也不能取代探索或覆盖。
真正终止时只保留奖励,下一动作选择结果不应进入目标。目标网络刚同步时两网输出相同,这时 Double DQN 与 DQN 的同批目标可能相同,不说明实现无效。
数学表达
Double DQN target
选择与评价分离。
变量含义
G_t从时刻 t 开始的折扣累计回报。R_{t+1}执行动作后收到的下一步奖励。γ折扣因子,通常位于 [0,1)。
计算步骤
- 1在线网络选动作 0。
- 2目标网络评价该动作得 1,Double DQN 目标为 1.9。
- 3普通 DQN 取目标网络最大值 3,目标为 3.7。
代码对应位置
示例 1在线网络选出的动作未必是目标网络最大动作:同一后继状态,Double DQN 目标为 1.900,普通 DQN 为 3.700。
变量解释
| 变量 | 含义 |
|---|---|
G_t | 从时刻 t 开始的折扣累计回报。 |
R_{t+1} | 执行动作后收到的下一步奖励。 |
γ | 折扣因子,通常位于 [0,1)。 |
完整数值示例
在线网络选出的动作未必是目标网络最大动作
已知条件
- 在线后继 Q 为 5、4;目标网络为 1、3。
- 奖励 1,折扣 0.9,转移非终止。
计算步骤
- 在线网络选动作 0。
- 目标网络评价该动作得 1,Double DQN 目标为 1.9。
- 普通 DQN 取目标网络最大值 3,目标为 3.7。
计算结果
同一后继状态,Double DQN 目标为 1.900,普通 DQN 为 3.700。
处理前后对比
- 选择与评价分离是算法差异的关键。
- 更低目标不自动代表更接近真实值,需要环境证据判断。
计算与实现步骤
- Online 对 s′ argmax
- Target 取对应 Q
- 构造 target
- 更新 Online
代码实现
示例 1
在线网络选出的动作未必是目标网络最大动作
example_01.py用途:同一后继状态,Double DQN 目标为 1.900,普通 DQN 为 3.700。
online_next, target_next = [5.0, 4.0], [1.0, 3.0]
action = max(range(2), key=online_next.__getitem__)
double_target = 1 + 0.9 * target_next[action]
dqn_target = 1 + 0.9 * max(target_next)
print(f"selected={action}, double_target={double_target:.3f}, dqn_target={dqn_target:.3f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
同一后继状态,Double DQN 目标为 1.900,普通 DQN 为 3.700。
Step 1 · 1–5 行
输出中间参数、形状或最终指标,用于核对代码是否符合预期。
online_next, target_next = [5.0, 4.0], [1.0, 3.0]
action = max(range(2), key=online_next.__getitem__)
double_target = 1 + 0.9 * target_next[action]
dqn_target = 1 + 0.9 * max(target_next)
print(f"selected={action}, double_target={double_target:.3f}, dqn_target={dqn_target:.3f}")预期输出或运行结果
selected=0, double_target=1.900, dqn_target=3.700
常见错误 · 3 条
- argmax 在目标网络上计算,退回普通 DQN。
- 把两网最大值的最小值误称为 Double DQN。
- 认为用两个相关网络就能消除所有估计偏差。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- argmax 在目标网络上计算,退回普通 DQN。
- 把两网最大值的最小值误称为 Double DQN。
- 认为用两个相关网络就能消除所有估计偏差。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 van Hasselt 等:Deep Reinforcement Learning with Double Q-learning。
算法属性与数据边界
失败模式、风险与性能
失败模式
- argmax 在目标网络上计算,退回普通 DQN。
- 把两网最大值的最小值误称为 Double DQN。
- 认为用两个相关网络就能消除所有估计偏差。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
Double DQN 是 on-policy 吗?
通常仍是 off-policy:行为可用 ε-greedy 生成数据,学习目标由在线 argmax 与目标网络构造,不要求它们等于实际下一行为动作。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。