Rainbow DQN
组合 Double、Dueling、PER、multi-step、distributional RL 与 noisy nets。
学习目标
- 理解多项 DQN 改进如何组合,并以消融区分收益来源。
- 独立复核“三步目标比一步目标多使用哪些证据”的输入、计算和解释。
- 多步目标只是 Rainbow 的一个部件,不等于完整实现。
为什么重要
理解多项 DQN 改进如何组合,并以消融区分收益来源。
学习前需要掌握
背景与问题
DQN 的问题并不只有一种:目标可能过估计、样本复用效率不高、探索不足,回报分布也可能被一个均值压缩。Rainbow 把针对不同问题的部件组合起来,但组件越多,复现与归因越困难。
概念定义
原始 Rainbow 组合 Double Q-learning、优先经验回放、dueling 网络、多步学习、分布式价值学习和 NoisyNet。这里“分布式价值”指学习回报分布,不是多机器训练。它属于离散动作深度价值方法的组合方案。
直观理解
一辆车同时改了轮胎、制动和悬架,成绩变化不能只归功于某一项。需要固定其他条件逐项关闭部件,才能知道哪一项在当前赛道发挥作用。
核心原理
多步目标先累计若干步真实奖励,再由末端价值 bootstrap,能缩短信息传播链。分布式头预测离散支持上的回报概率,训练时需把移动后的支持投影回固定网格,不能只套普通标量均方误差。
Double 目标处理选择评价耦合,dueling 改善表示共享,PER 改变采样,NoisyNet 用可学习参数噪声支持探索。它们作用层次不同,也会相互影响,不能把所有机制归为“更大的网络”。
消融要对齐交互步数、网络规模、训练更新比和评测协议。原论文基准成绩不能直接当作当前环境的预期提升,更不能从一个简化多步算术示例推断完整 Rainbow 性能。
数学表达
n-step 标量目标示意
终止时删除其后的 bootstrap;原始 Rainbow 还对回报分布做投影。
变量含义
n真实奖励片段长度V片段末端 bootstrap 价值
计算步骤
- 1真实三步部分为 1+0.9×0+0.9²×2=2.62。
- 2末端估计折扣为 0.9³×4=2.916。
- 3总目标为 5.536;若第三步真正终止,目标只剩 2.62。
代码对应位置
示例 1三步目标比一步目标多使用哪些证据:三步非终止目标为 5.536,终止目标为 2.620。
变量解释
| 变量 | 含义 |
|---|---|
n | 真实奖励片段长度 |
V | 片段末端 bootstrap 价值 |
完整数值示例
三步目标比一步目标多使用哪些证据
已知条件
- 三步真实奖励为 1、0、2,折扣 0.9。
- 第三步后非终止,bootstrap 值为 4。
计算步骤
- 真实三步部分为 1+0.9×0+0.9²×2=2.62。
- 末端估计折扣为 0.9³×4=2.916。
- 总目标为 5.536;若第三步真正终止,目标只剩 2.62。
计算结果
三步非终止目标为 5.536,终止目标为 2.620。
处理前后对比
- 多步目标只是 Rainbow 的一个部件,不等于完整实现。
- 增加真实奖励步数也会引入更长轨迹的方差和 off-policy 问题。
计算与实现步骤
- 构建组合网络
- 分布式 target
- 优先 replay
- 多步更新
- noisy exploration
代码实现
示例 1
三步目标比一步目标多使用哪些证据
example_01.py用途:三步非终止目标为 5.536,终止目标为 2.620。
rewards = [1.0, 0.0, 2.0]
gamma, next_value = 0.9, 4.0
observed = sum(gamma ** i * r for i, r in enumerate(rewards))
target = observed + gamma ** len(rewards) * next_value
print(f"nonterminal_target={target:.3f}, terminal_target={observed:.3f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
三步非终止目标为 5.536,终止目标为 2.620。
Step 1 · 1–5 行
输出中间参数、形状或最终指标,用于核对代码是否符合预期。
rewards = [1.0, 0.0, 2.0]
gamma, next_value = 0.9, 4.0
observed = sum(gamma ** i * r for i, r in enumerate(rewards))
target = observed + gamma ** len(rewards) * next_value
print(f"nonterminal_target={target:.3f}, terminal_target={observed:.3f}")预期输出或运行结果
nonterminal_target=5.536, terminal_target=2.620
常见错误 · 3 条
- 把回报分布学习误写成并行计算。
- 只添加两个组件却未经说明称完整原始 Rainbow。
- 在不同预算与配置下比较消融,无法归因。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 把回报分布学习误写成并行计算。
- 只添加两个组件却未经说明称完整原始 Rainbow。
- 在不同预算与配置下比较消融,无法归因。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 Hessel 等:Rainbow: Combining Improvements in Deep Reinforcement Learning。
算法属性与数据边界
失败模式、风险与性能
失败模式
- 把回报分布学习误写成并行计算。
- 只添加两个组件却未经说明称完整原始 Rainbow。
- 在不同预算与配置下比较消融,无法归因。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
Rainbow 是哪一个单独的新更新公式?
它主要是一组互补改进的集成,涉及目标、网络、采样和探索多个层面;理解各组件与组合消融比背一个缩写更有用。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。