跳到主要内容

强化学习与 Q-learning — 试错、记账与决策

这一章讲三件事: 强化学习的词汇表(agent(做决策、学习的那个角色)、状态、奖励、策略)和 Bellman 方程的直觉; Q-learning 的完整落地——从简化俄罗斯方块、奖励设计、查表,到查表法的崩塌; deep Q-learning 怎么用「双网络+经验回放」救场。 主走查是一步落子的记账过程:Q 值怎么被一次经验修正。

1. 顶层全景

监督学习(第 02–10 章): 强化学习(本章):
「这个输入,正确答案是这个」 「没人给答案。你行动,环境给反馈
标注者:人 (奖励/惩罚),自己悟」

agent ──动作 a──▶ 环境 ──奖励 r + 新状态 s'──▶ agent

重复几万次,策略(什么状态该做什么)
从奖励的积累里浮现

图说:全书的最后一块拼图——前 14 章都在学"给定输入输出什么",
这一章学"在只有奖惩反馈的世界里怎么行动"[^1]。

2. 核心原理

2.1 词汇表与那本「账」

六个词,一遍过1:agent(做决策的学习者)、环境(agent 之外的一切)、 状态(环境当前局面的表示)、动作(agent 的选择)、 奖励(环境对动作的反馈,负的即惩罚)、策略(状态→动作的映射,最终要学的东西)。

Q-learning 学的是一本账:Q(s, a) =「在状态 s 做动作 a,长远总共能赚多少」的期望(平均而言)估计2。 这本账要满足 Bellman 方程——它的直觉版只有一行:

Q(s,a) = 立即奖励 R(s,a) + γ × max Q(s',a')
──────────── ────────────────
这一步到手多少 下一状态里最好的一条路值多少

γ(折扣因子,0~1):未来的奖励打几折。γ 大=看重长远;γ 小=及时行乐[^4]

训练就是让账本逐步向这个方程收敛。每走一步,用「估计的最优回报」和「账上现值」的差 乘学习率 α,修正 Q(s,a)——这就是 Q-learning 的更新规则,时序差分思想的最小实现3。 执行时通常配贪心策略:查账,挑账面值最高的动作4

两个定性结论先立住:Q-learning 是 model-free 的——不需要知道环境的运行规律, 只靠 experience 记账,确定性和随机性环境通吃5; 但它只适合状态-动作空间小的场景。井字棋:9 个格子各有 空/X/O 三种, 3⁹=19,683 个状态,一本账装得下6。 棋盘一大,状态数组合爆炸(每多一格自由度,状态数翻好多倍),查表法当场死掉——这正是本章后 2/3 的剧情7

2.2 走查铺垫:奖励不是天生的,是设计的

实验台是一个简化版俄罗斯方块(方块从 2 到 4 格,棋盘 NumPy 二维数组, 消行得分,堆到顶判负)8奖励函数是设计出来的,原书的配置单:

一次消 1 行:+1 一次消 2 行:+10 (10^(行数−1),指数放大)
输掉(堆到顶):-100
(这套数字全是原书给出的,不是我们编的[^11])

指数放大是为了诱导「憋大招」:一次消两行值得比两次各消一行更好的策略。 奖励设计直接塑造 agent 学出什么——奖励写歪,agent 会精确地学出你不想让它学的东西, 这是 RL 工程的第一课。

2.3 主走查:一步落子的记账

看账本怎么被一次经验修正(经验情节是演示编的;公式与原书式 13.2 逐字对应,α=0.2、γ=1):

状态 s:棋盘当前形状 + 当前方块
动作空间:每个可落位置×朝向(简化版里 agent 用"传送"直接放置,见 2.4)

落子前查账:Q(s, 放最左) = 2.0 Q(s, 放中间) = 1.0 → 贪心选"放最左"
结果:没消行,没输 → 立即奖励 R = 0;新状态 s' 里最好动作的账面 Q = 2.5

Bellman 目标 = R + γ × max Q(s') = 0 + 1 × 2.5 = 2.5
修正:Q(s, 放最左) ← 2.0 + 0.2 × (2.5 − 2.0) = 2.1
└ 差额 0.5,往目标挪 20%

每一步经验都这样小幅修账;数万步之后,账面值收敛到「这条路的真实前景」。 注意「放最左」这次没得分,账却被调高了——因为它通向一个前景不错的后继状态。 RL 学的从来不是「这步爽不爽」,是「这步通向哪」。

2.4 工程三件套:传送、ε-greedy、以及查表法的崩塌

传送。消行是稀有事件,新手 agent 随机乱放,几十步不见一次奖励,学不动9。 原书的改造:让 agent 跳过「左右移/旋转/下落」的中间过程,直接选择落点+朝向 (名为 tile teleportation 的「传送」)——一步一个决策点,奖励反馈的密度上去了10。 这是「重新定义动作空间来拯救学习信号」的教科书案例。

ε-greedy。只挑账面最优,会永远走老路(有些动作从没试过,账面一直是初始值)。 ε-greedy:以概率 ε 随机乱来一次,其余时候贪心——探索与利用的配比旋钮11

崩塌。简化 Tetris 的状态=棋盘 16 位 + 方块 2 位=18 位,共 2¹⁸=262,144 个状态—— 「一个挺简单的游戏,账已经这么大了」12。固定方块序列、1,000 局的训练能赢下对局; 但换成随机序列、20 万局、ε=0.001,训练后账本里只有约 20,000 行是非零的—— 96% 的状态从没被探索过,奖励还卡在均值附近13。查表法在真实问题规模上,不是慢,是不可能。

2.5 deep Q-learning:把账本换成网络

DQN(深度 Q 网络)的改动一句话:Q 表装不下,就训练一个神经网络逼近 Q(s,a)—— 网络天然泛化,相似的棋局共享经验,26 万个状态不再是 26 万个独立条目14

但直接训会翻车:用同一个网络既选动作、又生成学习目标,会自我强化错误 (某动作被高估→更常被选→继续被高估,滚雪球)15。 两件稳定装置,全部来自 2013 年的 Atari 论文16:

装置做法治什么病
目标网络复制一份网络(TargetNet)冻结着,只负责算学习目标;每隔一阵才同步一次主网络(QNet)的权重目标随学习者漂移;原书给了个师生比喻——老师(QNet=学生)的知识定期固定下来,学生才有稳定的“标准答案”可对17
经验回放每步经验 (状态,动作,奖励,新状态) 存进回放池,攒够后随机抽批训练连续经验高度相似(同一局的一串动作),随机打散降低相关性,训练更稳18

学习目标的算式还是 Bellman 方程:目标 = r + γ × max Q(新状态)—— 只是这个 max 由冻结的目标网络给出19。ε 随训练逐渐减小:前期多探索,后期多利用。 这套「网络逼近+双网络+回放池」就是 DQN 的全部骨架,Atari 到 AlphaGo 一脉相承。

3. 作者的判断与证据

  • 有证据的:查表法在固定序列下学会玩(1,000 局)、随机序列+20 万局仍只有 2 万行非零账、DQN 在随机序列下正常学——三组对照构成「查表必死、网络可行」的完整论证。
  • 作者的判断(标注为设计选择):传送机制是为学习而修改环境的例子—— 原书毫不讳言这是为了让反馈变密;练习 13-4 还专门展示了学出的策略有多脆弱 (ε 设 0.1,一步随机就崩盘)——原书让读者自己撞见「贪婪训练出的策略缺乏鲁棒性」。
  • 历史脉络:Bellman 1957 的方程是地基;Watkins 与 Dayan 1992 给出 Q-learning; 2013 年 Mnih 等的 Atari 论文把深度网络接上 Q-learning,agent 达到超人水平; 2016 年 AlphaGo 击败人类围棋冠军——本章全部内容的来路与去向20

4. 边界与局限

边界说明
奖励设计是手工活设计者要预判「什么行为值得奖励」;奖励漏洞=agent 的漏洞
策略脆弱贪婪训练+零探索,学出的策略经不起随机扰动(练习 13-4)
探索永远不充分26 万状态只踩过 2 万;真实环境的状态空间(所有可能局面的总数)更是天文数字
DQN 训练要稳定装置双网络和回放池是标配不是选配;少一样就震荡
样本效率低数十万局试错;现实中「试错成本高」的场景(驾驶、医疗)要靠仿真迁移
连续动作不适合Q-learning 的账本按「动作」建索引;动作连续(方向盘角度)要换 policy gradient 一族(原书 seminal 点到)20

5. 可带走的

  1. RL 与前面所有章的分野:没有正确答案,只有奖惩;策略从试错的积累里长出来;
  2. Q(s,a) 是「这步的长远前景」的账面值;Bellman 方程=「这步到手+下一步最好」的递归(定义里套着它自己);
  3. γ 折扣未来,α 控修正步长——两个旋钮对应「多看重长远」和「多信一次经验」;
  4. 奖励函数是设计出来的:指数放大诱导憋大招;写歪了 agent 就学歪;
  5. 重新定义动作空间(传送)能拯救稀疏奖励;
  6. ε-greedy 平衡探索与利用;训练出的策略对随机扰动可以非常脆弱;
  7. 查表法的死穴是状态爆炸:2¹⁸ 已经撑不住,真实问题只会更大;
  8. DQN 双稳定器:目标网络(稳目标)+ 经验回放(破相关);目标=r+γ·max Q_target。

6. 原文地图

主题原书章原文位置
RL=试错与累积奖励Understanding Reinforcement Learning and Q-Learningtext/91-fm-understanding-reinforcement-learning-and-q-learn.txt:3(搜「trial and error」)
六要素Understanding Reinforcement Learning and Q-Learningtext/91-fm-understanding-reinforcement-learning-and-q-learn.txt:5(搜「decision-maker and learner」)
Q 函数定义Understanding Reinforcement Learning and Q-Learningtext/91-fm-understanding-reinforcement-learning-and-q-learn.txt:7(搜「action-value function」)
Bellman 方程Understanding Reinforcement Learning and Q-Learningtext/91-fm-understanding-reinforcement-learning-and-q-learn.txt:11(搜「immediate reward」)
折扣因子Understanding Reinforcement Learning and Q-Learningtext/91-fm-understanding-reinforcement-learning-and-q-learn.txt:15(搜「discount factor」)
更新规则与贪心Understanding Reinforcement Learning and Q-Learningtext/91-fm-understanding-reinforcement-learning-and-q-learn.txt:17(搜「update rule」) · text/91-fm-understanding-reinforcement-learning-and-q-learn.txt:21(搜「greedy policy」)
model-freeUnderstanding Reinforcement Learning and Q-Learningtext/91-fm-understanding-reinforcement-learning-and-q-learn.txt:23(搜「model-free」)
井字棋 19,683Understanding Reinforcement Learning and Q-Learningtext/91-fm-understanding-reinforcement-learning-and-q-learn.txt:25(搜「19,683」)
组合爆炸与 deep QUnderstanding Reinforcement Learning and Q-Learningtext/91-fm-understanding-reinforcement-learning-and-q-learn.txt:27(搜「combinatorial explosion」)
探索与利用Understanding Reinforcement Learning and Q-Learningtext/91-fm-understanding-reinforcement-learning-and-q-learn.txt:47(搜「exploration, or trying new actions」)
好奇心探索Understanding Reinforcement Learning and Q-Learningtext/91-fm-understanding-reinforcement-learning-and-q-learn.txt:49(搜「curiosity-driven exploration」)
Tetris 与奖励设计Implementing Tetristext/92-fm-implementing-tetris.txt:3(搜「Pajitnov」) · text/92-fm-implementing-tetris.txt:263(搜「removed_lines」) · text/92-fm-implementing-tetris.txt:272(搜「significant penalty」)
奖励稀疏与传送Making an Agent Play Tetris with Q-Learningtext/93-fm-making-an-agent-play-tetris-with-q-learning.txt:7(搜「relatively infrequent event」) · text/93-fm-making-an-agent-play-tetris-with-q-learning.txt:9(搜「tile teleportation」)
262,144 个状态Making an Agent Play Tetris with Q-Learningtext/93-fm-making-an-agent-play-tetris-with-q-learning.txt:166(搜「262,144」)
Q 表Making an Agent Play Tetris with Q-Learningtext/93-fm-making-an-agent-play-tetris-with-q-learning.txt:170(搜「Q-table is a fundamental」)
ε-greedyMaking an Agent Play Tetris with Q-Learningtext/93-fm-making-an-agent-play-tetris-with-q-learning.txt:199(搜「epsilon-greedy policy」)
策略脆弱(练习)Making an Agent Play Tetris with Q-Learningtext/93-fm-making-an-agent-play-tetris-with-q-learning.txt:317(搜「loses its ability to play」)
20 万局、2 万行非零Making an Agent Play Tetris with Q-Learningtext/93-fm-making-an-agent-play-tetris-with-q-learning.txt:338(搜「200_000」) · text/93-fm-making-an-agent-play-tetris-with-q-learning.txt:361(搜「20,000」)
DQN 与网络逼近Making an Agent Play Tetris with Deep Q-Learningtext/94-fm-making-an-agent-play-tetris-with-deep-q-learning.txt:5(搜「deep Q-learning, a powerful variant」)
自激震荡Making an Agent Play Tetris with Deep Q-Learningtext/94-fm-making-an-agent-play-tetris-with-deep-q-learning.txt:13(搜「harmful feedback loops」)
目标网络Making an Agent Play Tetris with Deep Q-Learningtext/94-fm-making-an-agent-play-tetris-with-deep-q-learning.txt:15(搜「stable target Q-values」)
师生比喻Making an Agent Play Tetris with Deep Q-Learningtext/94-fm-making-an-agent-play-tetris-with-deep-q-learning.txt:19(搜「teacher-student」)
经验回放破相关Making an Agent Play Tetris with Deep Q-Learningtext/94-fm-making-an-agent-play-tetris-with-deep-q-learning.txt:271(搜「correlation between consecutive」)
目标=BellmanMaking an Agent Play Tetris with Deep Q-Learningtext/94-fm-making-an-agent-play-tetris-with-deep-q-learning.txt:277(搜「Bellman equation」)
RL 谱系Seminal Works and Further Readingtext/96-fm-seminal-works-and-further-reading.txt:3(搜「Dynamic Programming」) · text/96-fm-seminal-works-and-further-reading.txt:7(搜「Q-Learning」) · text/96-fm-seminal-works-and-further-reading.txt:11(搜「Playing Atari」) · text/96-fm-seminal-works-and-further-reading.txt:13(搜「AlphaGo」)

Footnotes

  1. 出处:「Understanding Reinforcement Learning and Q-Learning」第 5 段(text/91-fm-understanding-reinforcement-learning-and-q-learn.txt:5,搜「decision-maker and learner」)。

  2. 出处:「Understanding Reinforcement Learning and Q-Learning」第 7 段(text/91-fm-understanding-reinforcement-learning-and-q-learn.txt:7,搜「action-value function」)。

  3. 出处:「Understanding Reinforcement Learning and Q-Learning」第 19-21 段(text/91-fm-understanding-reinforcement-learning-and-q-learn.txt:17,搜「update rule」)。

  4. 出处:「Understanding Reinforcement Learning and Q-Learning」第 21 段(text/91-fm-understanding-reinforcement-learning-and-q-learn.txt:21,搜「greedy policy」)。

  5. 出处:「Understanding Reinforcement Learning and Q-Learning」第 23 段(text/91-fm-understanding-reinforcement-learning-and-q-learn.txt:23,搜「model-free」)。

  6. 出处:「Understanding Reinforcement Learning and Q-Learning」第 25 段(text/91-fm-understanding-reinforcement-learning-and-q-learn.txt:25,搜「19,683」)。

  7. 出处:「Understanding Reinforcement Learning and Q-Learning」第 27-29 段(text/91-fm-understanding-reinforcement-learning-and-q-learn.txt:27,搜「combinatorial explosion」)。

  8. 出处:「Implementing Tetris」第 3 段(text/92-fm-implementing-tetris.txt:3,搜「Pajitnov」)、第 78 段(text/92-fm-implementing-tetris.txt:78,搜「2D NumPy array」)。

  9. 出处:「Making an Agent Play Tetris with Q-Learning」第 7 段(text/93-fm-making-an-agent-play-tetris-with-q-learning.txt:7,搜「relatively infrequent event」)。

  10. 出处:「Making an Agent Play Tetris with Q-Learning」第 9 段(text/93-fm-making-an-agent-play-tetris-with-q-learning.txt:9,搜「tile teleportation」)。

  11. 出处:「Making an Agent Play Tetris with Q-Learning」第 199-203 段(text/93-fm-making-an-agent-play-tetris-with-q-learning.txt:199,搜「epsilon-greedy policy」)。

  12. 出处:「Making an Agent Play Tetris with Q-Learning」第 166 段(text/93-fm-making-an-agent-play-tetris-with-q-learning.txt:166,搜「262,144」)。

  13. 出处:「Making an Agent Play Tetris with Q-Learning」第 359 段(text/93-fm-making-an-agent-play-tetris-with-q-learning.txt:359,搜「don't increase as much」)、第 361 段(text/93-fm-making-an-agent-play-tetris-with-q-learning.txt:361,搜「20,000」)。

  14. 出处:「Making an Agent Play Tetris with Deep Q-Learning」第 5 段(text/94-fm-making-an-agent-play-tetris-with-deep-q-learning.txt:5,搜「deep Q-learning, a powerful variant」)。

  15. 出处:「Making an Agent Play Tetris with Deep Q-Learning」第 13 段(text/94-fm-making-an-agent-play-tetris-with-deep-q-learning.txt:13,搜「harmful feedback loops」)。

  16. 出处:「Seminal Works and Further Reading」第 11 段(text/96-fm-seminal-works-and-further-reading.txt:11,搜「Playing Atari」)。双稳定装置归功于该论文是通用共识,原书在正文介绍两装置时未逐一挂论文;此句标注为我们的补充判断。

  17. 出处:「Making an Agent Play Tetris with Deep Q-Learning」第 15 段(text/94-fm-making-an-agent-play-tetris-with-deep-q-learning.txt:15,搜「stable target Q-values」)、第 19 段(text/94-fm-making-an-agent-play-tetris-with-deep-q-learning.txt:19,搜「teacher-student」)。

  18. 出处:「Making an Agent Play Tetris with Deep Q-Learning」第 271 段(text/94-fm-making-an-agent-play-tetris-with-deep-q-learning.txt:271,搜「correlation between consecutive」)。

  19. 出处:「Making an Agent Play Tetris with Deep Q-Learning」第 277 段(text/94-fm-making-an-agent-play-tetris-with-deep-q-learning.txt:277,搜「Bellman equation」)。

  20. 出处:「Seminal Works and Further Reading」第 3 段(text/96-fm-seminal-works-and-further-reading.txt:3,搜「Dynamic Programming」)、第 7 段(text/96-fm-seminal-works-and-further-reading.txt:7,搜「Q-Learning」)、第 11 段(text/96-fm-seminal-works-and-further-reading.txt:11,搜「Playing Atari」)、第 13 段(text/96-fm-seminal-works-and-further-reading.txt:13,搜「AlphaGo」)。 2