先看效果:小车撑杆

智能体要左右移动小车,让杆子尽量不倒。用 PD 控制器模拟已学习好的策略——想看 DQN 真实训练过程,到下面的代码区运行。

01 大白话讲 DQN

Q-Learning 遇到了什么困难?

Q-Learning 用一张大表格记录"每个状态下每个动作值多少分"。在 5×5 的迷宫里,这张表只有 25 行,完全没问题。

但如果玩 Atari 游戏,屏幕上每一帧图像就是一个状态——像素组合数量是天文数字,根本存不下这张表。

Q-Learning 的极限

状态空间爆炸:Atari 游戏每帧有 210×160×3 个像素,不同组合比宇宙中原子数还多,Q 表根本装不下

DQN 的解法

不用表格,改用神经网络。输入状态,直接输出每个动作的 Q 值——神经网络会自动归纳规律,相似的状态给出相似的预测

两个让训练稳定的关键技巧

直接用神经网络替换 Q 表会训练崩溃——就像你同时改考试答案又改评分标准,根本学不稳。DQN 用两个技巧解决这个问题:

1
经验回放(Experience Replay)

智能体每走一步,把「当前状态、动作、奖励、下一步状态」存进一个"记忆库"。训练时从记忆库里随机抽一批数据。

就像背单词不按顺序背,而是随机抽卡片复习——打乱时间顺序,防止网络只记住最近发生的事。

2
目标网络(Target Network)

同时维护两个完全相同的网络:一个「在线网络」实时更新,一个「目标网络」每隔几百步才同步一次参数。

就像考试时有一份固定的标准答案。如果标准答案也跟着你的作答实时变化,你永远不知道往哪个方向改——目标网络提供稳定的"参照系"。

DQN 的完整训练流程

用 ε-贪心选动作

大多数时候按网络预测的最优动作走;小概率随机探索,避免陷入局部最优

存经验、随机抽样

把 (s, a, r, s') 存进 Replay Buffer;凑够一批(如 32 条)就开始训练

计算目标 Q 值

用「目标网络」计算 y = r + γ·max Q(s', a'),作为训练标签

反向传播更新在线网络

最小化在线网络输出的 Q(s,a) 与目标 y 的均方误差,梯度下降一步

定期同步目标网络

每隔 C 步把在线网络参数复制到目标网络

DQN 能做什么?

Atari 游戏

2013 年 DeepMind 用 DQN 超越人类水平,直接输入游戏画面像素

机器人控制

连续状态空间下的运动控制,替代手写控制器

推荐系统

把用户行为序列作为状态,学习最优推荐策略

交通调度

复杂路网状态下的红绿灯控制、路径规划

一步步构建 DQN

从 CartPole 物理到经验回放训练,逐步搭建。

第一步 CartPole 物理环境

用牛顿力学模拟推车摆杆,状态是 [位置, 速度, 角度, 角速度]。

第二步 网络与回放缓冲区

两个网络(在线 + 目标)+ 经验回放队列,解决数据相关性问题。

第三步 经验回放 + TD 更新

从缓冲区随机采样,计算 TD 目标,训练在线网络逼近 Q*。

02 代码

03 学术性讲解

DQN(Deep Q-Network)是 Q-Learning 的深度学习版本,使用神经网络来近似 Q 函数,解决了 Q-Learning 在状态空间大时 Q 表无法存储的问题。

为什么需要 DQN?

Q-Learning 的 Q 表在状态空间大时(如下棋、自动驾驶)无法存储。DQN 使用神经网络来近似 Q 函数:

Q(s, a) ≈ NeuralNetwork(s, a)

DQN 的两个关键技术

1
经验回放 (Experience Replay)

将经验存储在 replay buffer 中,随机抽样进行训练,打破数据间的时序相关性

2
目标网络 (Target Network)

使用两个网络:一个用于选择动作,一个用于计算目标值,定期同步参数

损失函数

DQN 的损失函数是时序差分误差:

L = (r + γ × max Q(s', a') - Q(s, a))²

为什么经验回放能稳定训练?

强化学习中连续采集的样本高度相关(前后帧相似),如果直接顺序训练,网络会过拟合到最近的经历,忘掉之前学到的知识(灾难性遗忘)。Replay Buffer 随机采样打乱了时序依赖,使样本分布更接近 i.i.d.,梯度估计更稳定。

为什么需要目标网络?

TD 目标 y = r + γ·max Q_θ(s', a') 中的 Q_θ 如果和被更新的网络是同一个,则每步更新都会改变目标,产生"追逐移动靶"问题,导致训练震荡甚至发散。目标网络 Q_θ⁻ 的参数每隔 C 步才从在线网络复制一次,提供了一个短期稳定的监督信号。

算法对比

Q-Learning

Q 表存储所有状态-动作值;只适合小状态空间;off-policy

DQN

神经网络近似 Q;经验回放 + 目标网络;适合高维状态

Double DQN

用在线网络选动作、目标网络估值,消除 Q 值高估偏差

Dueling DQN

把 Q 分解为状态价值 V(s) 和优势函数 A(s,a),提升样本效率

收敛条件与局限性

收敛保证

表格型 Q-Learning 在满足 Robbins-Monro 条件时保证收敛;DQN 使用函数近似,理论收敛性较弱,但实践中通过经验回放和目标网络已足够稳定

!
主要局限

仅适合离散动作空间;连续动作需要改用 DDPG、TD3 等 Actor-Critic 方法;样本效率相对较低,需要大量环境交互

总结

网络

近似 Q 函数

回放

经验回放缓冲区

目标

目标网络

优化

梯度下降