表格装不下之后 — DQN 与连续动作
这一章讲三件事: 状态变成屏幕像素后,「表格」思路死在哪; DQN 用哪几个互相咬合的部件(网络当 Q 表、回放池、目标 y)把 Q-learning 搬进 像素世界;动作连续时连「挑最大」都做不了,NAF 怎么用一招二次函数化解。 读完你应能对着伪代码说出每一步在防哪个坑——DQN 的三件发明, 每一件都对应一种崩法。
1. 这一章讲什么
第 06 章的 Q 表有个隐含前提:状态数得清。Atari 游戏的状态是什么? 屏幕画面——几十万像素、每种取值组合都可能,「行数」直接无穷1。 书里给的判决:连续情形组合可以无穷,不能用表;解法需要神经网络, 这正是「Deep Q-Learning」里 Deep 一词的含义1。
于是本章的算法叫 DQN(Deep Q-Network,深度 Q 网络):书里定义它是 Q-learning 与深度卷积神经网络的组合——卷积网络是专吃「像素阵列」这类 网格数据的网络(滑动一个小滤镜扫全图、提取「这里有没有竖线/球拍」式的局部特征, 再层层组合;完整机制见我们书架的拆解2)。它的结构口径很直白: 输入层 = 状态的尺寸,输出层 = 所有动作的 Q 值;智能体把当前状态喂进去, 挑 Q 值最高的动作3。
2. 顶层全景:一步更新,四个部件咬合
画面 φ(s) ──► 卷积网络 ──► Q 值表 [上: 1.2, 下: 0.8] (演示数)
│
① ε-greedy:九成挑最大(上),一成随机瞎试
│
② 执行,环境回:奖励 r、新画面 φ(s′);整条经验存进回放池 D
│
③ 从 D 随机抽一小批,算目标 y = r + γ·max Q(s′,·;θ)
│
④ 对 (y − Q)² 做一步梯度下降,网络参数 θ 往「预测贴近 y」挪
│ │
└──────── 循环 ◄──────────────────┘
图说:① 管「探索」,② 管「数据 」,③④ 管「学习」。
三段各防一个坑,抽掉任何一段,训练就会崩在第 07 章列的那种病灶上。
主走查:拿 Atari 单机游戏 Pong 的一帧,把 ①–④ 全部走一遍带数字——第 3 节。 (游戏规则与奖励取自原书应用章:双方球拍、球,把球接住不让它碰己方侧墙, 赢一球 +1、丢一球 −1,其余 04。)
3. 核心原理
3.1 主走查:Pong 一帧走完 DQN 的一步
(除奖励规则与伪代码结构外,本走查的 Q 值、ε、容量 N 都是为演示编的;γ=0.9。)
① 选动作(ε-greedy)
当前画面 φ(s) 喂进网络 → Q 值表 [上: 1.2, 下: 0.8]
掷骰子:0.9 的概率走「贪心」→ 挑「上」;0.1 的概率随机挑一个
→ 本步选中「上」
② 执行并存档
环境执行「上」,回:奖励 r = 0(球还在飞),新画面 φ(s′)
存进回放池:(φ(s), 上, 0, φ(s′)) 池容量 N = 5 万条,满了挤掉最旧的
③ 从池里随机抽一批(比如 32 条),对其中一条算目标 y
抽到 (φ_old, 下, 0, φ_next);把 φ_next 喂进网络 → [上: 1.1, 下: 0.7]
非终点 → y = 0 + 0.9 × max(1.1, 0.7) = 0.9 × 1.1 = 0.99
(若 φ_next 是终局画面 → y = r 本身,不再往后折)
④ 降损失
网络对 φ_old 的旧预测是 Q(φ_old, 下) = 1.20
损失 = (y − Q)² = (0.99 − 1.20)² = 0.044
梯度下降一步:参数朝「把 1.20 往 0.99 压」的方向挪一点
四步对照第 06 章的表格版,你会发现算法骨架一字未变: 还是「走一步 → 算差 → 修一点」。变的只有承载估计的东西:Q 表换成了网络。
3.2 三件发明,各防一个坑
DQN 之所以成立,靠三个部件咬合——书里的伪代码三件全在5,各自的「防的坑」值得说透:
| 部件 | 防的坑 | 机制 |
|---|---|---|
| 经验回放池 | 数据连成串 | 游戏画面一帧帧强相关(球只挪了一点);随机抽批打破相关性,宝贵经验还能反复用 |
| ε-greedy | 永不探索 | 只挑当前 Q 最高的动作,会把没试过的动作永远锁在门外;以 ε 概率随机,保证每个动作都被访问(书里伪代码写为「以概率 ε 选随机动作,否则选 max」5) |
| 目标 y 的口径 | 目标乱漂 | 终点状态 y=r 截断,不再往后折——「局终了,未来为零」 |
书里没写、但重要的一件(补充,不在书里,来自通用知识):目标网络。 书里的伪代码取自 DeepMind 2013 年的论文《Playing Atari with Deep Reinforcement Learning》6, 那版用同一套参数既算预测又算 y——自己追自己的影子,容易震荡; 2015 年的 Nature 正式版补上「目标网络」(拿一份定期才同步的旧参数算 y), 训练才真正稳住。第 09 章的 DDPG/TD3 会把这个思路用得更系统。
3.3 书里在这节塞错了地方的推导(挪走)
原书 4.2 节的中段有一整块「策略梯度定理」的数学推导(对期望回报求梯度, 得到 E[回报 × ∇log π])7。它属于策略梯度一族的发动机,与 DQN 无关—— 我们把它挪到第 09 章,那里有配套的 REINFORCE 走查。 顺带照实指出:书里还说这节要解决「reward shaping(奖励塑形)」问题7, 但只给了一句含混的话,没有展开——照书里没交代处理。