flowchart TD
subgraph EnvInteraction["环境采样流"]
Step["(s, a, r, s', done)"] --> Buffer["经验回放缓冲区 (Replay Buffer)"]
end
subgraph QNetworks["双网络解耦结构"]
Buffer -->|均匀随机采样 Batch| TrainQ["在线 Q 网络 Q(s, a; θ)"]
Buffer --> TargetQ["目标 Q 网络 Q(s', a'; θ^-)"]
TargetQ -->|计算目标 y| Loss["Bellman 均方差损失"]
TrainQ -->|预测 Q 值| Loss
end
TrainQ -.->|定期同步参数 θ^- = θ| TargetQ
第 7 课:DQN:回放、目标网络与过估计
参考答案版:包含完整代码实现与问答题深度参考解析。建议先独立完成练习题后再展开核对。
本课目标与完成标准
学完后你应能:解释 DQN 三个稳定器并实现终止感知的 target-network 目标。
通过必须同时满足:
- 独立补齐本课唯一的代码填空题,并通过给定检查;
- 三个问答题均说明因果链,而不是只报术语;
- 能指出至少一个正确性边界和一个性能取舍;
- 总分不低于 8/10,且没有一票否决级概念错误。
前置关系
- 课程前置:Python、概率期望、基本深度学习
- 本课在路线中的作用:DQN 用神经网络近似 Q,经验回放打破时序相关,目标网络减缓自举目标移动。
核心心智模型
1. 它是什么,解决什么问题
深度 Q 网络(Deep Q-Network, DQN)由 DeepMind 于 2015 年发表在《Nature》上,是强化学习历史上首次实现从原始高维像素输入端到端掌握 Atari 游戏人类级控制的里程碑算法。 在 DQN 诞生前,将深度神经网络引入非线性 Q-learning 一直面临着强化学习领域恶名昭彰的致命三要素(The Deadly Triad, Sutton & Barto):
函数近似(Function Approximation):使用深层非线性神经网络近似状态动作价值函数 ;
自举更新(Bootstrapping):目标值依赖于网络自身的当前预测 ;
离策略学习(Off-Policy Learning):用于参数更新的数据来自历史策略或探索策略(-greedy),与当前正在优化的确定性贪婪策略分布不一致。 当这三者同时存在时,时序差分更新不再满足压缩映射收敛保证,极易引发 Q 值估计的恶性自激震荡与指数级数值发散。
DQN 提出并确立了解决致命三要素的两大基石级工程稳定器:
- 经验回放(Experience Replay Buffer):通过大容量环形队列打散时序关联,将相关性极强的马尔可夫轨迹转化为独立同分布(I.I.D.)的随机批次样本;
- 独立目标网络(Target Network, ):将构造 Bellman 目标的网络参数与正在被梯度更新的在线网络解耦,彻底打破“狗追自己尾巴”式的自激正反馈震荡。
2. 它如何工作
DQN 与 Double DQN 的双网络解耦结构与更新时序如图 7-1 与图 7-2 所示:
- 经验回放采样与时序解耦(图 7-1):
图 7-1:DQN 经验回放缓冲与目标网络时间解耦架构
智能体根据在线网络 配合 -greedy 探索策略与环境交互,将单步转移五元组 存入经验池 。训练时从中均匀随机抽取 Mini-batch,彻底消除相邻状态间的时序自相关性,大幅提升每个转移样本的重用率。
- 标准 DQN 目标构建与最大化过估计缺陷(图 7-2):
flowchart LR
Sample["从 Replay Buffer 采样 (s, a, r, s', d)"] --> DoubleDQN{"是否使用 Double DQN?"}
DoubleDQN -->|是| Decouple["在线网络选动作 a* = argmax Q(s', .; θ) ➔ 目标网络算价值 Q(s', a*; θ^-)"]
DoubleDQN -->|否| Standard["目标网络直接计算 max Q(s', .; θ^-) [存在过估计]"]
Decouple & Standard --> ComputeLoss["计算 Huber/MSE 损失并执行反向传播"]
ComputeLoss --> Sync{"达到 target_update 步数?"}
Sync -->|是| SoftSync["更新目标网络权重 θ^-"]
图 7-2:DQN 与 Double DQN 目标估计及网络参数同步执行流程
在标准 DQN 中,利用冻结的目标网络参数 构造 Bellman 最优目标: 根据简森不等式与统计极值特性,若各个动作的 Q 估值带有均值为 0 的无偏估计噪声 ,则 。 操作符会系统性选取噪声最大的那个动作,导致 Q 估值发生严重的系统性过估计(Maximization Bias)。
- Double DQN 的动作选择与价值评估解耦机制(图 7-2): Double DQN(Van Hasselt 等, 2015)巧妙地通过双网络分工化解了最大化偏差:
- 第一步(选择动作):使用正在频繁更新的在线网络 寻找使 Q 值最大的候选动作:;
- 第二步(评估价值):使用相对冻结稳定的目标网络 计算该候选动作的实际折现价值: 由于在线网络选出的动作与目标网络的评估噪声统计独立,彻底消除了由于单网络取最大值带来的虚高偏差。
- 参数同步策略: 在线网络计算 Huber Loss 或 MSE 损失后进行反向传播更新 。目标网络 采用两种同步方案:
- 硬同步(Hard Update):每隔 个训练步,将在线参数一次性拷贝给目标网络();
- 软同步(Polyak Update):每步进行微小滑动平均更新:(通常 )。
3. 正确性条件与常见误区
目标值计算图必须阻断反传(Stop-Gradient): 在计算 时,目标网络的前向计算必须严格脱离梯度图(
with torch.no_grad():或y.detach())。若允许梯度回传进目标网络,均方误差损失会退化为引导两套网络参数寻找同向漂移的病态平凡解(例如全输出常数),彻底瓦解 Bellman 算子的收敛性。终止状态自举掩码: 在计算目标值时,若环境进入物理终止态(
terminated = True),后继价值必须严格截断置零()。如果漏乘(1 - terminated),即使目标网络参数再稳定,终止态的高估残差也会反向污染全局价值曲面。经验池分布偏移的合法性认知: 初学者常误以为“经验池中保存着几十万步以前由旧策略生成的劣质样本,会破坏当前训练”。事实上,Q-learning 是纯粹的 Off-Policy 算法,只要经验池覆盖的状态动作空间满足充分探索假设,任何历史行为策略采样的数据在数学上都能无偏地逼近 Bellman 最优算子 的不动点。
4. 性能与工程取舍
优先经验回放(Prioritized Experience Replay, PER)的偏差代价: 标准 DQN 均匀采样经验池,导致智能体将大量计算算力浪费在那些早已掌握、TD Error 极小的简单样本上。PER 按照样本时序差分误差绝对值 赋予抽样优先级,极大加速了对稀有高价值样本的学习;但由于改变了状态采样的先验分布,引入了采样偏差,必须在反向传播时引入重要性采样权重 进行梯度纠偏,增加了数据结构维护复杂度(SumTree 树状数组)。
显存与内存架构优化(Frame Stacking Buffer): 在处理像素级状态时,通常需要将最近 4 帧图像堆叠作为单个时步状态输入卷积网络以捕捉运动速度。若每个转移样本都独立存储 的浮点张量,一百万容量的回放池将消耗数十 GB 显存。工业界标准实现只在环形数组中以
uint8存储单帧图片,在采样批次时动态根据索引偏移切片拼接,将物理内存开销直接削减至原来的 1/4 以下。
具体演示:DQN 目标值构建数值演算
假设当前单步转移为:即时奖励 ,折扣因子 。目标网络对下一状态预测的 3 个候选离散动作 Q 值为 next_q_values = [2.0, 5.0, 4.0]:
- 场景 1(正常未终止转移,
terminated = False):- 贪婪动作取值:;
- 构造 Bellman 最优目标:;
- 场景 2(智能体遭遇物理死亡/通关,
terminated = True):- 终止掩码生效,后继期望被强制截断归零:。
对比可见,终止状态与非终止状态的目标真值产生高达 4.5 的落差,该目标将作为当前在线网络预测值 的强监督回归基准。
实践任务:唯一代码填空题
补齐 DQN 标量目标。
规则:只能修改 TODO/______ 所在位置;不要删除断言或放宽误差。代码注释说明了每个边界条件。
Code
def dqn_target(reward, next_q_values, terminated, gamma):
"""next_q_values 是目标网络输出列表。"""
# TODO:只补齐下面这个表达式。
return ______
assert dqn_target(1., [2.,5.,4.], False, .9) == 5.5
assert dqn_target(1., [2.,5.,4.], True, .9) == 1.0检查方法
运行本单元格;所有 assert 必须通过。另手工构造一个边界输入,解释预期结果。
提交时请给出:补齐后的代码、实际运行输出(环境不可用时注明“仅静态审查”)以及对失败用例的解释。
Q1
不要背定义:请从输入、状态变化和输出三个阶段解释“DQN:回放、目标网络与过估计”的工作机制。
你的答案:
Q2
把 target network 也参与反向传播,会形成怎样的追逐目标?
你的答案:
Q3
稀有高价值样本适合 prioritized replay;它引入什么采样偏差?
你的答案:
评分与通过规则
- 代码 4 分:正常输入 2 分,边界输入 1 分,解释实现 1 分;
- Q1~Q3 各 2 分;
- 一票否决:结果碰巧正确但核心因果链错误、删除边界检查、把未运行结果说成实测。
需要提示时按四级机制请求:概念区域 → 具体方向 → 关键局部 → 完整答案。