第4章:Value-Based 方法——Q-Learning 与深度 Q 网络
2013 年,伦敦的一间小办公室里,一家名叫 DeepMind 的初创公司做了一件让整个 AI 界为之震动的事:他们让一个程序完全从头学会了玩 Atari 游戏。没有人工编写规则,没有告诉程序"球拍应该往哪移"——程序只能看到屏幕上的像素,然后通过不断试错,自己摸索出了得分的方法。从像素到决策,中间没有任何人类知识介入。这个程序用的算法就是 DQN(Deep Q-Network),它把第 3 章我们学过的 Q-Learning 从一张小表格搬进了一个神经网络。
第 3 章介绍了路线一的核心思路:学习 来给每个动作打分,然后选分数最高的。我们还在那里看到了三种计算价值的方法——DP、MC、TD——其中 TD 方法不需要环境模型,走一步就能更新,是最实用的选择。Q-Learning 就是 TD 方法在 值上的直接应用。
但第 3 章只讲了概念层面。本章将深入这条路线:从 Q-Learning 的表格方法出发,看看它在面对真实问题时为什么失效,以及深度学习如何解决这个问题。
从表格到神经网络
在简单的 4×4 GridWorld 里,16 个格子、4 个方向,64 个 值,一张表格即可存储。但现实世界的问题远不止 16 个格子。CartPole 的状态是 4 维连续向量,理论上有无限多个取值。Atari 游戏的输入是 84×84×4 的像素帧——每一帧有超过 28 万个数值,可能的画面数量远超物理存储的极限。Q-Learning 的表格在这些高维状态空间面前不再适用。
DQN 的核心思想:既然表格装不下,那就用神经网络来代替表格。输入一个状态(比如一帧像素),神经网络直接输出每个动作的 值。就这么一个替换,看似平淡无奇,但要在实践中真正让这个东西训练起来,DeepMind 的研究者们费了很大的功夫。他们发现直接把神经网络套在 Q-Learning 上会训练崩溃,原因有两个:一是连续的 Atari 游戏帧几乎一模一样,逐帧训练会让梯度被"当前帧"绑架;二是 值更新的目标本身也在不断变化,网络在追自己的尾巴。为了解决这两个问题,他们提出了两个关键的工程技巧——经验回放(Experience Replay)和目标网络(Target Network)。正是这两个技巧,让 DQN 成为了深度强化学习的里程碑。
本章沿着"理论 → 组件 → 观察 → 演进 → 动手 → 项目"的路径展开。先把 DQN 为什么能训练稳定讲清楚,再把完整实现和更大的游戏项目放到章末。
| 小节 | 核心问题 |
|---|---|
| 动手:Q-Learning 与 GridWorld | GridWorld 游戏跑起来,Q 值怎么收敛?原理是什么? |
| 从 Q-Learning 到 DQN | Q-Learning 的表格为什么装不下?神经网络怎么替代? |
| DQN 三大组件 | Q-Network、经验回放、目标网络分别解决什么问题? |
| 观察训练过程 | 经验回放和目标网络各自起了什么作用? |
| DQN 家族与视角迁移 | 从 Double DQN 到 Rainbow,DQN 的思想如何延续到 LLM? |
| 项目:DQN 实战与视觉游戏 | CartPole 从零实现,再迁移到 Atari、ViZDoom、宝可梦 |
让我们从 Q-Learning 的局限说起——从 Q-Learning 到 DQN。