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 DQN2015经验回放 + 目标网络 + 奖励裁剪基准教学用
Double DQN2016解决过高估计(max操作导致)+47%强烈推荐
Dueling DQN2016把Q拆成 V(s) + A(s,a) 两条支路+20~50%很常用
Prioritized Replay2016优先采样TD误差大的经验+30~100%常用
DQN + PER + Dueling2016~三者组合(Rainbow的前身)非常强工业基础
Rainbow DQN2017把几乎所有当时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