DQN算法详解
DQN 是深度强化学习(Deep Reinforcement Learning)领域真正把“深度学习+强化学习”做起来、并被大规模应用的第一个里程碑式算法(2013~2015年DeepMind发表)。一、DQN要解决的核心问题传统Q-learning(表格形式)遇到的问题:问题传统Q-learning深度网络版本面临的
作者:lh
DQN 是深度强化学习(Deep Reinforcement Learning)领域真正把“深度学习+强化学习”做起来、并被大规模应用的第一个里程碑式算法(2013~2015年DeepMind发表)。
一、DQN要解决的核心问题
传统Q-learning(表格形式)遇到的问题:
| 问题 | 传统Q-learning | 深度网络版本面临的挑战 |
|---|---|---|
| 状态空间 | 离散、小规模 | 连续、高维(图像、原始像素) |
| Q值存储方式 | Q表(state × action) | 根本存不下,必须用神经网络来近似 |
| 样本相关性 | 每次只用一个样本更新 | 连续采集的样本高度相关,容易导致震荡 |
| 目标不稳定 | 目标Q值相对稳定 | 用同一个网络算目标,容易出现“追逐目标”现象 |
DQN 就是针对上面这些痛点,提出了几个关键创新,才让深度Q学习真正能玩Atari游戏(甚至超越人类水平)。
二、DQN核心四大创新点(必须记住!)
| 创新点 | 提出时间 | 核心作用 | 没有它会怎样 |
|---|---|---|---|
| 1. 用深度神经网络近似Q函数 | 2013 | 把Q(s,a)从表格变成函数逼近 | 状态空间太大,根本玩不了图像输入 |
| 2. 经验回放(Experience Replay) | 2013/2015 | 把经验存进经验池,随机采样打破相关性 | 训练极不稳定,很容易发散 |
| 3. 目标网络(Target Network) | 2015 | 用一个延迟更新的网络算目标Q值 | 目标一直在追自己,导致训练崩溃 |
| 4. 奖励值裁剪(Reward clipping) | 2015 | 把所有奖励统一裁剪到[-1, +1] | 不同游戏奖励尺度差异太大,难调超参 |
三、DQN算法完整流程(伪代码视角)
# 初始化
Q_network θ ← 随机初始化主网络
Q_target_network θ⁻ ← 复制 θ(目标网络)
Replay Buffer D ← 空经验池
ε ← 初始探索率 (e.g. 1.0)
for episode = 1 to M:
s = env.reset()
while not done:
# ε-greedy 动作选择
with prob ε: a = random_action()
with prob 1-ε: a = argmax_a Q(s, a; θ)
# 执行动作,得到转移
s', r, done = env.step(a)
# 存经验
store_transition(D, (s, a, r, s', done))
# 从经验池随机采样小批量
batch = sample_random_minibatch(D, batch_size)
# 计算目标值(最核心部分!)
for each sample in batch:
if done:
y = r
else:
y = r + γ * max_a' Q_target(s', a'; θ⁻) ← 用目标网络!
# 梯度下降更新主网络(最小化TD误差)
loss = (y - Q(s, a; θ))²
θ ← θ - α ∇loss
# 每隔C步同步一次目标网络
if total_steps % C == 0:
θ⁻ ← θ ← 软更新或硬更新
# 逐渐衰减探索率
ε = max(ε_min, ε * decay)
s = s'四、不同版本DQN对比表(重要!)
| 版本名称 | 年份 | 主要改进点 | Atari性能相对Nature版 | 现在是否常用 |
|---|---|---|---|---|
| Nature DQN | 2015 | 经验回放 + 目标网络 + 奖励裁剪 | 基准 | 教学用 |
| Double DQN | 2016 | 解决过高估计(max操作导致) | +47% | 强烈推荐 |
| Dueling DQN | 2016 | 把Q拆成 V(s) + A(s,a) 两条支路 | +20~50% | 很常用 |
| Prioritized Replay | 2016 | 优先采样TD误差大的经验 | +30~100% | 常用 |
| DQN + PER + Dueling | 2016~ | 三者组合(Rainbow的前身) | 非常强 | 工业基础 |
| Rainbow DQN | 2017 | 把几乎所有当时SOTA技巧都集成 | 接近当时最强 | 经典参考 |
| NoisyNet / C51等 | 2017~ | 探索方式/分布强化学习方向 | 更高级方向 | 研究用 |
五、2025年真实工程中的DQN使用现状
实际工业/竞赛中,几乎没人直接用2015年Nature版原始DQN了。
当前主流做法大概是这个组合(2024~2026年比较稳的工程方案):
Rainbow-like DQN 基础 + 一些现代改进
├── Double DQN(几乎必选)
├── Dueling architecture(几乎必选)
├── Prioritized Experience Replay(很常见)
├── n-step returns(经常用,n=3~10)
├── Distributional RL(C51/QR-DQN/IQN) ← 现在很多强baseline都带
├── Noisy Nets or entropy bonus 探索
└── 适当的学习率调度 + LayerNorm / AdamW