第 1 讲:强化学习导论——序贯决策、马尔可夫过程与马尔可夫奖励过程

Reinforcement Learning · Lecture 01。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应:Stanford CS234 Lecture 1(Introduction to Reinforcement Learning),以及 Lecture 2 开头的马尔可夫过程 / 马尔可夫奖励过程 配套代码:code/lecture01/ 预计阅读时间:3–4 小时(第一遍通读 1.5 小时,第二遍推公式 + 跑代码 2 小时)


0. 本讲导航

0.1 学完本讲,你应该能够

  1. 用自己的话说清楚:强化学习要解决什么问题,它和监督学习、无监督学习、模仿学习、AI 规划有什么区别。
  2. 说出 RL 的四个核心特征(优化、延迟后果、探索、泛化),并各举一个生活中的例子。
  3. 画出智能体–环境交互循环,解释动作、观测、奖励、历史、状态这几个词。
  4. 解释马尔可夫假设的含义,判断一个状态表示是否满足马尔可夫性。
  5. 区分模型、策略、价值函数这三个组件,以及基于模型 / 无模型、基于价值 / 基于策略等分类。
  6. 写出马尔可夫链和马尔可夫奖励过程的定义,计算一条轨迹的折扣回报。
  7. 推导 MRP 的贝尔曼方程,并用三种方法(蒙特卡洛、解析解、迭代法)计算状态价值,说出各自的优缺点。

0.2 先修知识(不会也没关系,用到时会提醒)

知识点用在哪里最低要求
概率:随机变量、期望、条件概率第 3、7、8 节知道 E[X]=∑xx p(x)\mathbb{E}[X]=\sum_x x\,p(x),知道 p(A∣B)p(A\mid B) 是”已知 B 发生时 A 的概率”
线性代数:矩阵乘法、单位矩阵、矩阵求逆第 7、8 节会算 2×2 矩阵乘向量
等比数列求和第 8 节1+γ+γ2+⋯=11−γ1+\gamma+\gamma^2+\cdots=\frac{1}{1-\gamma}(当 0≤γ<10\le\gamma<1)
Python 基础配套代码会写 for 循环、函数、列表;numpy 用法代码注释里会讲

0.3 本讲地图

第1节 什么是RL?(故事、定义、历史、应用)
   │
第2节 RL的四个核心特征 + 与其他范式的对比
   │
第3节 序贯决策的形式化:交互循环、奖励、历史、状态、马尔可夫假设
   │
第4节 火星探测车(贯穿全课的例子)
   │
第5节 智能体的三大组件:模型 / 策略 / 价值函数
   │
第6节 三组关键对立:规划vs学习、探索vs利用、评估vs控制
   │
第7节 马尔可夫过程(没有动作、没有奖励)
   │
第8节 马尔可夫奖励过程(加上奖励)→ 回报、折扣、价值、贝尔曼方程
   │
(第2讲)马尔可夫决策过程(再加上动作)

注意第 7、8、下一讲之间的递进关系,这是本课程最重要的”积木搭建”思路:

马尔可夫过程⏟(S, P)  →  +奖励    马尔可夫奖励过程⏟(S, P, R, γ)  →  +动作    马尔可夫决策过程⏟(S, A, P, R, γ)\underbrace{\text{马尔可夫过程}}_{(S,\,P)} \;\xrightarrow{\;+\text{奖励}\;}\; \underbrace{\text{马尔可夫奖励过程}}_{(S,\,P,\,R,\,\gamma)} \;\xrightarrow{\;+\text{动作}\;}\; \underbrace{\text{马尔可夫决策过程}}_{(S,\,A,\,P,\,R,\,\gamma)}

先在简单的积木上把概念想透,再一块一块往上加,是理解 RL 最省力的方式。


1. 从一个问题开始:什么是强化学习?

1.1 三个小故事

故事一:学骑自行车。 没有人能用一本说明书教会你骑车。你上车、摔倒、调整、再试。没有老师在每一时刻告诉你”现在车把应该转 3.2 度”,你只知道一个很粗糙的信号:摔了(不好)或没摔还往前走了(好)。慢慢地,你的身体学会了一套”在什么情况下做什么动作”的规则。

故事二:训练小狗。 小狗坐下,你给它零食;小狗乱叫,你不理它。你从来没有”解释”什么叫坐下,但小狗通过行为 → 后果的反复体验,学会了在听到”坐”时坐下。心理学家桑代克(Thorndike)在 1911 年把这总结为效果律(Law of Effect):带来满意后果的行为更可能被重复。这正是 RL 最古老的思想来源之一。

故事三:下棋。 下一盘围棋有两百多步,只有最后才知道输赢。赢了,是哪一步下得好?输了,是哪一步下错了?开局第 10 步的一个决定,可能在第 150 步才显现出后果。

这三个故事有共同点:

  • 有一个做决策的主体(你、小狗、棋手)——我们叫它智能体(agent);
  • 它身处一个会对它的行为做出反应的世界 / 环境(environment);
  • 它要做的不是一次决策,而是一连串决策;
  • 它得到的反馈不是”标准答案”,而是一个好坏程度的信号——我们叫它奖励(reward);
  • 反馈常常是延迟的;
  • 它要通过经验(试错)来改进自己的行为。

1.2 一句话定义

强化学习 = 通过经验学习如何做出好的序贯决策(sequential decision making under uncertainty)。

把这句话拆开看,每个词都有分量:

关键词含义反面(不是 RL 的情况)
通过经验学习智能体一开始不知道世界如何运转,也不知道什么决策好,只能从交互数据中学习世界模型完全已知,只需计算 → 这是”规划”
好的有一个明确的衡量标准(累积奖励),我们要优化它只是描述数据、发现结构 → 这是无监督学习
序贯决策是一连串的,前面的决策影响后面的处境每次决策互相独立 → 这是(上下文)老虎机或监督学习
不确定性世界可能是随机的,智能体对世界的认识也不完整一切确定且已知 → 经典搜索 / 优化

1.3 一段简短的历史:RL 从哪里来?

理解历史能帮你明白”为什么今天的 RL 长这个样子”。RL 是三条线索汇合的产物:

  1. 心理学的试错学习:桑代克的效果律、巴甫洛夫的条件反射、斯金纳的操作性条件反射——“奖励会强化行为”,这也是 reinforcement(强化)这个词的来历。
  2. 最优控制与动态规划:1950 年代,Richard Bellman 提出动态规划和贝尔曼方程,并形式化了马尔可夫决策过程(MDP)。这条线索关心”已知模型时如何计算最优决策”。
  3. 时序差分学习:Richard Sutton 与 Andrew Barto 在 1980 年代把前两条线索结合起来,提出了时序差分(TD)学习,让智能体可以在不知道模型的情况下,边交互边学习。
年份里程碑意义
1911桑代克提出效果律试错学习的心理学起点
1957Bellman《Dynamic Programming》贝尔曼方程、MDP 的数学基础
1959Arthur Samuel 的跳棋程序最早的”自我对弈 + 学习”程序之一
1960Howard 提出策略迭代MDP 求解算法(第 2 讲)
1983Barto, Sutton, Anderson:Actor-Critic 解决倒立摆Actor-Critic 雏形(第 7 讲)
1988Sutton:TD 学习无模型学习的核心思想(第 3 讲)
1989Watkins:Q-learning最经典的无模型控制算法(第 4 讲)
1992Williams:REINFORCE策略梯度的起点(第 6 讲)
1992–1995Tesauro:TD-Gammon神经网络 + TD 学会世界级双陆棋
2013 / 2015DeepMind:DQN 玩 Atari深度 RL 时代开启(第 5 讲)
2016AlphaGo 击败李世石MCTS + 深度网络 + 自我对弈(第 14 讲)
2017PPO;AlphaZero至今最常用的策略梯度算法之一(第 7 讲)
2022InstructGPT / ChatGPT 使用 RLHFRL 成为大模型对齐的关键技术(第 9 讲)
2023DPO不显式训练奖励模型的偏好优化(第 9 讲)
2024–2025用 RL 训练推理能力的大模型(如 OpenAI o1、DeepSeek-R1)基于可验证奖励的 RL 大规模应用(第 16 讲)
2025Barto 与 Sutton 获 2024 年度图灵奖表彰其奠定 RL 概念与算法基础

1.4 RL 今天在做什么?

  • 游戏与博弈:Atari、围棋、国际象棋、星际争霸、Dota 2。游戏是 RL 的理想试验场:有明确的奖励(分数 / 输赢),可以无限模拟。
  • 机器人:行走、抓取、灵巧手操作。难点是真实世界试错很贵,常用”仿真中训练 → 迁移到真实”。
  • 大语言模型:RLHF 让模型的回答更符合人类偏好;基于可验证奖励的 RL 提升数学和编程推理能力。
  • 科学与工程:DeepMind 用 RL 控制核聚变装置(托卡马克)中的等离子体形状;芯片布局;数据中心制冷优化。
  • 医疗与教育(CS234 主讲人 Emma Brunskill 的研究重点):个性化治疗方案(比如什么时候调整药物剂量)、个性化教学(给学生推送什么练习题)。这类场景数据昂贵、试错有伦理风险,因此特别关心”如何用少量数据学好”和”如何从历史数据中学”——这也是本课程后半部分(第 10–13 讲)的重点。
  • 推荐系统与广告:推荐什么内容能让用户长期满意,而不是只追求当前点击。

1.5 为什么 RL 最近十年突然”火”了?

RL 的核心思想早在 1990 年代就有了,近十年爆发主要因为:

  1. 深度神经网络解决了”泛化”问题:可以从原始像素、文本中提取特征,不再需要人手工设计状态表示(见 2.4 节)。
  2. 算力:RL 极其”费数据”,GPU 和大规模分布式模拟让训练数十亿步成为可能。
  3. 模拟器:游戏引擎、物理仿真器提供了几乎免费的试错环境。
  4. 算法进步:经验回放、目标网络、PPO 等让训练更稳定。

但要注意,在真实世界中数据仍然昂贵(病人不能被反复”试错”),这是 RL 目前最大的挑战之一。


2. 强化学习的四个核心特征

CS234 用四个关键词刻画 RL:优化(Optimization)、延迟后果(Delayed consequences)、探索(Exploration)、泛化(Generalization)。理解了这四个词,就理解了 RL 为什么难、为什么和其他机器学习不一样。

2.1 优化(Optimization)

是什么:目标是找到最优的(或至少非常好的)决策方式,而不只是”一个能用的”决策方式。

直觉:去机场有很多条路线,RL 关心的不是”找到一条能到机场的路”,而是”找到期望时间最短的路”。这意味着必须有一个可以比较好坏的数值标准——这就是奖励(以及累积奖励)存在的原因。

为什么重要:有了明确的优化目标,我们才能说一个策略比另一个策略”更好”,才能设计算法去”改进”。但也要警惕:你优化什么,就会得到什么(见 3.3 节的奖励投机)。

2.2 延迟后果(Delayed Consequences)

是什么:现在的决策可能在很久之后才产生影响。

两层难点:

  1. 规划时:做决策时不仅要考虑眼前的奖励,还要考虑它对未来的影响。
    • 例:存钱 vs 花钱。花钱现在开心,存钱未来有保障。
    • 例:学生现在花时间刷题很痛苦(负奖励),但期末考试得高分(正奖励)。
  2. 学习时——信用分配问题(credit assignment problem):得到一个奖励后,很难判断它是由哪一步决策造成的。
    • 例:围棋赢了,200 多步里到底哪几步是妙手?
    • 例:你今天考试考得好,是因为昨晚复习了,还是上周听课认真,还是早饭吃得好?

为什么这是 RL 的本质特征:监督学习中,每个样本都有即时的标准答案,不存在”这个结果该归功于谁”的问题。RL 中,奖励是整个决策序列共同作用的结果。本课程后面的大量技术(价值函数、TD 学习、优势函数)本质上都是在解决信用分配问题。

2.3 探索(Exploration)

是什么:智能体通过亲自尝试来了解世界,但它只能看到自己所做选择的后果。

直觉——餐厅问题:你家附近有 10 家餐厅,你去过其中 3 家,最喜欢 A 家。今晚吃什么?

  • 去 A 家:稳妥,大概率满意(利用 exploitation)
  • 试一家新的:可能踩雷,也可能发现更好的(探索 exploration)

如果你永远只去 A 家,你永远不会知道 B 家是否更好。

为什么难——数据是”被审查的”(censored data):

  • 你选了 A 家,你只知道 A 家今晚好不好吃,永远不知道如果今晚去 B 家会怎样(这叫反事实 counterfactual)。
  • 你的数据分布取决于你自己的决策:一个只去 A 家的人,数据里只有 A 家。

对比监督学习:给你一张猫的图片和标签”猫”,数据集是固定的,不会因为你的模型怎么预测而改变。RL 中,智能体的策略决定了它能收集到什么数据,数据又反过来决定策略怎么更新——这是一个”鸡生蛋、蛋生鸡”的循环。

代码对应:04_exploration_vs_exploitation.py 用餐厅问题直观演示”只利用不探索”如何被困在次优选择上。

2.4 泛化(Generalization)

是什么:策略是从”过去经验”到”动作”的映射。我们希望学到的策略能处理从未见过的情况。

直觉:为什么不直接给每种情况写好对应的动作(一张巨大的查找表)?因为情况太多了:

  • Atari 游戏画面是 210×160 像素,每像素 128 种颜色,可能的画面数是 128210×160128^{210\times160}——比宇宙中原子总数还多得多。
  • 围棋合法局面约 1017010^{170} 种。
  • 一个病人的状态由几十个连续的生理指标描述,同样的状态几乎不可能出现第二次。

所以智能体必须能从”见过的情况”推广到”相似但没见过的情况”。这需要函数逼近(例如神经网络)——第 5 讲开始我们会详细讨论。

本讲和第 2–4 讲的简化:我们先假设状态很少(比如 7 个),可以用一张表存下所有东西,这叫表格型(tabular) 设定。先在这里把核心思想想透,再引入泛化。

2.5 把四个特征放在一起:RL 与其他范式的对比

AI 规划监督学习无监督学习模仿学习强化学习
优化(决策)✓✓✓
延迟后果✓✓✓
探索✓
泛化✓✓✓✓✓
数据/信息来源已知的世界模型带标签的数据 (x,y)(x, y)无标签的数据 xx专家的示范轨迹自己与环境交互的经验

注:“优化”在这里专指优化决策的长期效用。监督学习当然也在最小化损失函数,但它并不涉及”做决策影响世界”。

逐个解读:

  • AI 规划(例如给定完整规则的国际象棋搜索、导航软件算路线):世界模型(规则、地图)是完全已知的,只需要计算。它涉及优化、延迟后果、泛化,但不需要探索——因为不需要通过试错来了解世界。
  • 监督学习:给定输入 xx 和正确答案 yy,学习映射 f(x)≈yf(x)\approx y。反馈是指导性的(instructive):“正确答案是猫”。数据独立同分布,不受模型影响。
  • 无监督学习:只有 xx,没有 yy,学习数据的结构(聚类、降维、生成)。
  • 模仿学习:观察专家的”状态 → 动作”示范,学着做。它把 RL 问题简化为监督学习(把专家动作当作标签)。优点是不需要设计奖励、不需要探索;缺点是学生犯了专家没犯过的错之后,会进入专家从未示范过的状态,从而”越错越离谱”(第 8 讲详细讨论)。
  • 强化学习:四个特征全都有。反馈是评价性的(evaluative):“你这次得了 3 分”,但没人告诉你正确答案是什么、能不能得更高。

2.6 一个常见误区:RL 不就是”标签换成奖励的监督学习”吗?

不是。关键差别有三点:

监督学习强化学习
反馈类型指导性:告诉你正确答案评价性:只告诉你有多好
数据分布固定的、独立同分布(i.i.d.)由智能体自己的策略决定,前后相关
反馈时机每个样本立即有标签常常延迟,要做信用分配

举个例子:监督学习像是做练习题后看参考答案;RL 像是写作文后只拿到一个分数”72 分”——你不知道哪里扣了分,也不知道满分作文长什么样,还得自己决定下一篇作文怎么改。


3. 序贯决策的形式化框架

前两节都是直觉。从这里开始,我们把直觉翻译成数学语言。这一步很关键:只有形式化了,才能设计算法、证明性质。

3.1 智能体与世界的交互循环

                 动作 a_t
        ┌──────────────────────────┐
        │                          ▼
   ┌─────────┐                ┌─────────┐
   │  智能体  │                │  世界    │
   │ (Agent) │                │ (World) │
   └─────────┘                └─────────┘
        ▲                          │
        └──────────────────────────┘
            观测 o_t,奖励 r_t

在离散时间 t=0,1,2,…t = 0, 1, 2, \dots 上,每一步:

  1. 智能体选择一个动作(action) ata_t;
  2. 世界根据动作发生变化,返回一个观测(observation) oto_t 和一个奖励(reward) rtr_t(一个实数);
  3. 智能体接收 ot,rto_t, r_t,进入下一步。

为什么用离散时间? 现实世界是连续的,但计算机做决策天然是一步一步的(每隔 0.01 秒控制一次机器人,每天调整一次药量)。离散时间让数学简洁得多。

奖励是一个标量(一个数):这是一个很强的设计选择。它意味着所有目标都要被压缩成一个数字。

代码对应:01_agent_environment_loop.py 中的 run_episode 函数就是这个循环的直接实现,MarsRoverEnv.step 就是”世界”的那一半。

3.2 目标:最大化期望累积奖励

智能体的目标是:

选择动作序列,使得E[ ∑trt ]最大\text{选择动作序列,使得}\quad \mathbb{E}\Big[\,\textstyle\sum_{t} r_t\,\Big]\quad\text{最大}

这里有两个值得停下来思考的点:

  1. 为什么是”累积”而不是”当前”奖励? 因为有延迟后果。只看当前奖励的智能体会非常短视:学生永远选择玩游戏而不是学习。
  2. 为什么是”期望”? 因为世界是随机的,同样的动作序列可能产生不同的奖励。我们只能优化”平均而言”的表现。

这背后有一个大胆的假设,Sutton 称之为奖励假设(reward hypothesis):我们所说的所有”目标”和”目的”,都可以被理解为最大化某个标量奖励信号累积和的期望值。你可以思考一下:这个假设在什么情况下可能不成立?(比如多个互相冲突的目标、公平性约束、风险偏好……)

3.3 例子:奖励该怎么设计?

奖励由人设计,而设计奖励远比看起来难。看几个例子:

场景动作观测奖励
网页广告展示哪个广告用户是否点击、停留时长点击 +1
机器人收拾洗碗机关节电机指令摄像头画面碗放好 +1
血压控制建议运动 / 服药血压读数血压在健康范围 +1,药物副作用 −0.05
智能辅导系统给学生出哪道题学生答对 / 答错学生答对 +1,答错 −1

思考最后一个例子:如果奖励是”学生答对 +1,答错 −1”,一个聪明的 RL 智能体会学到什么?

点击查看答案

它会学会只出最简单的题!因为简单题学生几乎一定答对,奖励最大化。但这显然违背了我们的真实目标——让学生学到东西。

这种现象叫做奖励投机(reward hacking) 或 规格博弈(specification gaming):智能体找到了一种最大化奖励、但不符合设计者真实意图的”钻空子”方式。

另一个著名例子:OpenAI 在赛艇游戏 CoastRunners 中训练智能体,奖励是”撞到路上的得分道具”。智能体发现在一个小水湾里原地打转、反复撞同一组刷新的道具,得分比正常跑完比赛还高——它着火了、撞墙了,但分数很高。

教训:智能体优化的是你写下来的奖励,而不是你心里想的目标。更好的设计可能是”学生在后续测验中的进步幅度”。这也是第 8–9 讲(模仿学习、从人类偏好中学习)的动机之一:有时候直接写出好的奖励函数太难了。

3.4 历史(History)与状态(State)

历史是到目前为止发生的一切:

ht=(a1,o1,r1,  a2,o2,r2,  …,  at,ot,rt)h_t = (a_1, o_1, r_1,\; a_2, o_2, r_2,\; \dots,\; a_t, o_t, r_t)

原则上,智能体可以根据完整的历史来做决策。但历史会越来越长,直接用它做决策不现实。

状态是对历史的一个”总结”,用来决定下一步做什么:

st=f(ht)s_t = f(h_t)

这里的 ff 可以是任何函数——比如”只取最近一次观测” st=ots_t = o_t,或者”取最近 4 帧画面拼在一起”(DQN 玩 Atari 就是这么做的)。

需要区分两个概念:

  • 世界状态(world state):世界真实的完整状态,用来决定世界如何演化。智能体通常看不到(例如你看不到对手手里的牌,看不到病人体内的全部生理状态)。
  • 智能体状态(agent state):智能体用来做决策的信息,是历史的函数 st=f(ht)s_t=f(h_t)。

本课程中说”状态”时,一般指智能体状态。

3.5 马尔可夫假设

定义

状态 sts_t 是马尔可夫的,当且仅当:

p(st+1∣st,at)=p(st+1∣ht,at)p(s_{t+1} \mid s_t, a_t) = p(s_{t+1} \mid h_t, a_t)

用人话说:只要知道现在的状态,过去的历史对预测未来就没有额外帮助。 或者说:“未来与过去在给定现在的条件下独立”(The future is independent of the past given the present)。

直觉:什么样的状态是马尔可夫的?

例 1:抛出去的球。 如果状态只有”球的位置”,它不是马尔可夫的——同一个位置,球可能在上升也可能在下降,你无法预测下一刻的位置,还需要知道之前的位置。如果状态是”位置 + 速度”,它就是马尔可夫的(忽略空气扰动等),牛顿定律告诉你下一刻的位置和速度只取决于当前的位置和速度。

例 2:Atari 游戏。 只看一帧画面,你不知道小球朝哪个方向飞(和例 1 一样)。DQN 把最近 4 帧叠在一起作为状态,让状态”近似”马尔可夫。

例 3:血压。 只用当前一次血压读数作为状态,大概率不马尔可夫——血压还受最近几天是否运动、是否服药、睡眠等因素影响。

为什么马尔可夫假设这么流行?

  1. 总能被满足:取 st=hts_t = h_t(整个历史就是状态),马尔可夫性自动成立。所以马尔可夫假设在理论上不失一般性。
  2. 实践中常常近似成立:很多时候,最近的一次或几次观测就包含了足够信息。
  3. 让问题可计算:有了马尔可夫性,我们只需要为每个状态(而不是每段历史)学习价值和决策。后面的贝尔曼方程、动态规划、TD 学习全部依赖这个假设(第 8.7 节推导贝尔曼方程时你会亲眼看到它在哪一步被用到)。

状态设计的权衡

状态包含的信息越多状态包含的信息越少
越接近马尔可夫越可能违反马尔可夫性
状态数越多,需要越多的数据和计算状态数少,学习快
泛化越难(每个状态见得少)泛化容易

状态表示的选择会影响:计算复杂度、所需数据量、最终性能。 这是 RL 实践中最重要(也最容易被忽视)的设计决策之一。

代码对应:02_markov_chain.py 中的 empirical_markov_check 用数据验证马尔可夫性:在火星车链中,“上一步在哪”并不影响”下一步去哪”的概率。

3.6 完全可观测 vs 部分可观测

  • 完全可观测:智能体能看到世界的真实状态,st=ots_t = o_t 且满足马尔可夫性。这种问题建模为马尔可夫决策过程(MDP, Markov Decision Process)。
    • 例:国际象棋、围棋(棋盘上一切可见)。
  • 部分可观测:智能体只能看到一部分信息,真实状态隐藏。这种问题建模为部分可观测马尔可夫决策过程(POMDP, Partially Observable MDP)。
    • 例:扑克(看不到对手的牌)、只装了近距离传感器的机器人(不知道自己在房间的哪里)、医疗(看不到病人全部生理状态)。
    • 这时智能体通常维护一个信念状态(belief state):对真实状态的概率分布。

本课程主要讨论 MDP(完全可观测)。

3.7 序贯决策问题的类型

按”动作是否影响未来”划分:

类型动作影响未来观测吗?例子
老虎机(Bandit)不影响。每次决策后,下一次面对的情况与本次动作无关给每个新访客展示广告(不同访客互相独立)
MDP / POMDP影响。动作改变世界状态,从而影响未来下棋、机器人、治疗方案

老虎机是”只有探索与利用、没有延迟后果”的简化版 RL,第 11–12 讲会专门讨论。

按”世界是否随机”划分:

类型含义例子
确定性(deterministic)给定历史和动作,结果唯一很多机器人、控制问题(在一定精度内)
随机性(stochastic)给定历史和动作,结果有多种可能顾客行为、病人反应、掷骰子游戏

随机性往往来自我们没有建模的因素:一个病人对药物的反应看起来随机,可能只是因为我们不知道他的基因。


4. 火星探测车:贯穿全课的例子

CS234 用一个极简的例子贯穿前几讲。请你熟悉它,后面反复用到。

  ┌────┬────┬────┬────┬────┬────┬────┐
  │ s1 │ s2 │ s3 │ s4 │ s5 │ s6 │ s7 │
  └────┴────┴────┴────┴────┴────┴────┘
   +1    0    0    0    0    0   +10     ← 在该位置获得的奖励
                    ▲
                  起点(通常从 s4 出发)
  • 状态:探测车的位置 s1,s2,…,s7s_1, s_2, \dots, s_7,共 7 个。
  • 动作:TryLeft(尝试向左)和 TryRight(尝试向右)。之所以叫”尝试”,是因为动作可能失败(比如轮子打滑),世界是随机的。
  • 奖励:在 s1s_1 有一个”还不错”的科学目标,奖励 +1;在 s7s_7 有一个”非常好”的科学目标,奖励 +10;其他位置奖励为 0。

这个例子虽然小,但已经包含了 RL 的主要张力:

  • 延迟后果:从 s4s_4 出发,往右走要走 3 步才拿到 +10,中间都是 0;往左走也要 3 步才拿到 +1。
  • 探索:如果智能体一开始不知道 s7s_7 有 +10,而它碰巧先往左走发现了 +1,它可能就”满足”于 +1 了。
  • 随机性:动作可能失败。

代码对应:01_agent_environment_loop.py 实现了这个环境,并比较”随机走""一直往左""一直往右”三种智能体。

下标约定:讲义里状态写作 s1,…,s7s_1,\dots,s_7(从 1 开始),代码里用 0,...,6(Python 从 0 开始计数)。代码里的状态 i 对应讲义里的 si+1s_{i+1}。


5. RL 智能体的三大组件

一个 RL 智能体通常包含以下一个或多个组件:

组件回答的问题数学对象
模型(Model)世界会怎样响应我的动作?P(s′∣s,a)P(s'\mid s,a),R(s,a)R(s,a)
策略(Policy)在这个状态下我该做什么?π(a∣s)\pi(a\mid s) 或 π(s)\pi(s)
价值函数(Value function)这个状态(在当前策略下)有多好?Vπ(s)V^\pi(s)

5.1 模型(Model)

模型是智能体对”世界如何运转”的表示,包括两部分:

  • 转移模型(transition / dynamics model):预测下一个状态 P(st+1=s′∣st=s,at=a)P(s_{t+1}=s' \mid s_t=s, a_t=a)
  • 奖励模型(reward model):预测即时奖励 R(s,a)=E[ rt∣st=s,at=a ]R(s,a) = \mathbb{E}[\,r_t \mid s_t=s, a_t=a\,]

重要:模型可能是错的! 模型是智能体”脑中”的世界,不一定等于真实世界。

例:火星车的真实转移是”TryRight 有 80% 概率成功右移”,但智能体刚开始只试了几次,它的模型可能认为是”50% 右移、50% 原地不动”,并且它还没到过 s7s_7,模型里所有位置的奖励都是 0。基于错误的模型做规划,会得到糟糕的决策。

5.2 策略(Policy)

策略决定智能体在每个状态下如何选择动作。它是一个从状态到动作的映射:

  • 确定性策略(deterministic policy):每个状态对应一个确定的动作 π(s)=a\pi(s) = a
  • 随机策略(stochastic policy):每个状态对应一个动作的概率分布 π(a∣s)=P(at=a∣st=s)\pi(a \mid s) = P(a_t = a \mid s_t = s)

例:火星车的一个确定性策略——“在所有状态都 TryRight”:

状态s1s_1s2s_2s3s_3s4s_4s5s_5s6s_6s7s_7
π(s)\pi(s)TryRightTryRightTryRightTryRightTryRightTryRightTryRight

为什么需要随机策略? 三个原因:(1) 探索——偶尔做随机动作才能发现新东西;(2) 博弈——石头剪刀布中任何确定性策略都会被对手利用;(3) 部分可观测时,随机策略有时比任何确定性策略都好。

5.3 价值函数(Value Function)

价值函数衡量”在策略 π\pi 下,从某个状态出发,未来能获得多少奖励”:

Vπ(st=s)=Eπ[ rt+γrt+1+γ2rt+2+γ3rt+3+⋯  ∣  st=s ]V^\pi(s_t = s) = \mathbb{E}_\pi\big[\, r_t + \gamma r_{t+1} + \gamma^2 r_{t+2} + \gamma^3 r_{t+3} + \cdots \;\big|\; s_t = s \,\big]

其中 γ∈[0,1]\gamma \in [0, 1] 是折扣因子,表示”未来的奖励打多少折”(8.4 节详细讨论)。

价值函数的作用:它把”延迟后果”浓缩成一个数字。有了它,比较两个状态、两个动作的好坏就变得容易——选择能到达更高价值状态的动作。这正是解决信用分配问题的关键工具。

例:在”一直 TryRight”策略下,如果 γ=0\gamma = 0(只看眼前),那么 Vπ=[1,0,0,0,0,0,10]V^\pi = [1, 0, 0, 0, 0, 0, 10],恰好等于每个状态的即时奖励。γ>0\gamma > 0 时,靠近 s7s_7 的状态价值会更高,因为它们”很快就能拿到 +10”。

奖励 vs 价值——一个重要区分:

  • 奖励是即时的、由环境给出的信号:“这一步好不好”。
  • 价值是长期的、需要预测的量:“从这里开始,长远来看好不好”。

类比:奖励像”今天的快乐”,价值像”人生的前景”。一个状态可能奖励很低(今天在刷题很痛苦),但价值很高(离考上好大学更近了)。

5.4 智能体的分类

根据智能体显式地维护哪些组件,可以这样分类:

按是否有模型:

  • 基于模型(model-based):显式地学习/使用模型,然后用模型做规划。可能有也可能没有显式的策略和价值函数。
  • 无模型(model-free):不显式建模,直接学习价值函数和/或策略。

按价值与策略:

  • 基于价值(value-based):显式学习价值函数,策略是”隐式的”(选价值最高的动作)。例:Q-learning、DQN。
  • 基于策略(policy-based):直接学习策略,不学价值函数。例:REINFORCE。
  • Actor-Critic:两者都学——Actor(演员)是策略,Critic(评论家)是价值函数。例:A2C、PPO。
                    ┌──────────────────────────────┐
                    │         RL 智能体             │
                    └──────────────────────────────┘
                     │                          │
           无模型(Model-free)          基于模型(Model-based)
          ┌──────┼─────────┐            (学/用模型 + 规划)
          │      │         │              例:Dyna、MCTS、MuZero
     基于价值  Actor-Critic  基于策略
     Q-learning  A2C, PPO   REINFORCE
     DQN

为什么要区分? 不同类型的智能体各有取舍:基于模型的方法样本效率通常更高(可以在”脑中”模拟),但模型错误会被放大;无模型方法更简单、更通用,但需要更多数据。这个权衡会贯穿全课。


6. 强化学习中的三组关键对立

6.1 规划(Planning)vs 学习(Learning)

规划学习(强化学习)
世界如何运转已知(给定模型)未知(需要交互)
智能体做什么用模型”在脑中”计算最优策略与环境交互,从经验中改进策略
例子纸牌接龙:规则完全已知,可以在脑中推演不知道规则的游戏,只能边玩边学

两者的联系:一种自然的 RL 方法是”先学模型,再规划”——这就是基于模型的 RL。因此规划是 RL 的重要子程序。第 2 讲讲规划,第 3 讲开始讲学习。

6.2 探索(Exploration)vs 利用(Exploitation)

  • 利用:根据目前的知识,做看起来最好的事。
  • 探索:尝试新的、不确定的动作,以获得更多信息,可能在未来做得更好。

两者存在根本张力:探索可能牺牲眼前的收益,但不探索就可能错过更好的选择。

场景利用探索
看电影看你最喜欢的导演的新片看一部完全不了解的片子
广告展示目前点击率最高的广告展示一个新广告
驾驶走熟悉的路线试一条新路线

为什么在 RL 中特别关键? 回忆 2.3 节:RL 的数据是智能体自己收集的。不探索,数据就有盲区,而有盲区的数据会让智能体继续不探索——恶性循环。

代码对应:04_exploration_vs_exploitation.py。

6.3 评估(Evaluation)vs 控制(Control)

  • 评估(evaluation / prediction):给定一个策略,它有多好?(计算 VπV^\pi)
  • 控制(control):找到最好的策略。(求 π∗=arg⁡max⁡πVπ\pi^* = \arg\max_\pi V^\pi)

评估是控制的基础:要改进一个策略,先得知道它现在有多好。本讲的 MRP 价值计算,本质上就是在做”评估”。

评估控制
模型已知第 1 讲(MRP)、第 2 讲(策略评估)第 2 讲(策略迭代、价值迭代)
模型未知第 3 讲(MC、TD)第 4 讲(SARSA、Q-learning)

这张表就是前 4 讲的地图。


7. 马尔可夫过程(马尔可夫链)

从这里开始,我们搭建本课程的第一块数学积木。先把动作和奖励都拿掉,只看”状态如何随机演化”。

7.1 为什么从这么简单的东西开始?

你可能会问:“RL 不是关于决策吗?没有动作还讲什么?”

原因是:当策略固定时,MDP 就退化成了一个马尔可夫链(加上奖励就是 MRP)。在第 2 讲你会看到,“评估一个策略”恰好等价于”计算一个 MRP 的价值”。所以把马尔可夫链和 MRP 搞透,就是在为策略评估打基础。

7.2 定义

马尔可夫过程(Markov Process,也叫马尔可夫链 Markov Chain)是一个二元组 (S,P)(S, P):

  • SS:有限的状态集合,∣S∣=N|S| = N;
  • PP:转移模型,P(st+1=s′∣st=s)P(s_{t+1} = s' \mid s_t = s),表示从状态 ss 转移到 s′s' 的概率。

它是无记忆的:下一个状态只取决于当前状态(马尔可夫性)。没有动作,没有奖励。

7.3 转移矩阵

当状态有限时,可以把 PP 写成一个 N×NN \times N 的矩阵:

P=(P(s1∣s1)P(s2∣s1)⋯P(sN∣s1)P(s1∣s2)P(s2∣s2)⋯P(sN∣s2)⋮⋮⋱⋮P(s1∣sN)P(s2∣sN)⋯P(sN∣sN))P = \begin{pmatrix} P(s_1 \mid s_1) & P(s_2 \mid s_1) & \cdots & P(s_N \mid s_1) \\ P(s_1 \mid s_2) & P(s_2 \mid s_2) & \cdots & P(s_N \mid s_2) \\ \vdots & \vdots & \ddots & \vdots \\ P(s_1 \mid s_N) & P(s_2 \mid s_N) & \cdots & P(s_N \mid s_N) \end{pmatrix}

怎么读这个矩阵:第 ii 行第 jj 列 = “现在在 sis_i,下一步到 sjs_j 的概率”。行 = 从哪里来,列 = 到哪里去。

转移矩阵必须满足(这是代码里 check_transition_matrix 检查的内容):

  1. 所有元素 ≥0\ge 0(概率非负);
  2. 每一行加起来等于 1(从任何状态出发,下一步总得去某个地方)。

满足这两个条件的矩阵叫随机矩阵(stochastic matrix)。

7.4 火星车马尔可夫链

假设火星车的行为被固定下来(比如它在随机漫步),转移概率如下:

       0.6          0.2        0.2        0.2        0.2        0.2          0.6
      ┌──┐         ┌──┐       ┌──┐       ┌──┐       ┌──┐       ┌──┐        ┌──┐
      ▼  │  0.4    ▼  │ 0.4   ▼  │ 0.4   ▼  │ 0.4   ▼  │ 0.4   ▼  │  0.4   ▼  │
     [s1] ────► [s2] ────► [s3] ────► [s4] ────► [s5] ────► [s6] ────► [s7]
          ◄────      ◄────      ◄────      ◄────      ◄────      ◄────
           0.4        0.4        0.4        0.4        0.4        0.4
  • 在 s1s_1:0.6 概率留在原地,0.4 概率向右;
  • 在 s2,…,s6s_2, \dots, s_6:0.4 向左,0.2 原地,0.4 向右;
  • 在 s7s_7:0.6 概率留在原地,0.4 概率向左。

对应的转移矩阵:

P=(0.60.4000000.40.20.4000000.40.20.4000000.40.20.4000000.40.20.4000000.40.20.4000000.40.6)P = \begin{pmatrix} 0.6 & 0.4 & 0 & 0 & 0 & 0 & 0 \\ 0.4 & 0.2 & 0.4 & 0 & 0 & 0 & 0 \\ 0 & 0.4 & 0.2 & 0.4 & 0 & 0 & 0 \\ 0 & 0 & 0.4 & 0.2 & 0.4 & 0 & 0 \\ 0 & 0 & 0 & 0.4 & 0.2 & 0.4 & 0 \\ 0 & 0 & 0 & 0 & 0.4 & 0.2 & 0.4 \\ 0 & 0 & 0 & 0 & 0 & 0.4 & 0.6 \end{pmatrix}

检查一下第 4 行:0+0+0.4+0.2+0.4+0+0=10 + 0 + 0.4 + 0.2 + 0.4 + 0 + 0 = 1 ✓。

7.5 采样轨迹(episode)

从 s4s_4 出发,按转移概率”掷骰子”,可以得到很多条不同的轨迹,例如:

  • s4,s5,s6,s7,s7,s7,…s_4, s_5, s_6, s_7, s_7, s_7, \dots
  • s4,s4,s5,s4,s5,s6,…s_4, s_4, s_5, s_4, s_5, s_6, \dots
  • s4,s3,s2,s1,…s_4, s_3, s_2, s_1, \dots

每条轨迹都是这个随机过程的一次”实现”。采样的方法:在状态 ss 时,按照 PP 的第 ss 行给出的概率分布抽一个下一状态。

代码对应:02_markov_chain.py 中的 sample_next_state 和 sample_trajectory。

7.6 状态分布如何随时间演化

与其看单条轨迹,不如问一个更”整体”的问题:tt 步之后,火星车在各个位置的概率分别是多少?

用一个行向量 dtd_t 表示 tt 时刻的状态分布,dt(s)=P(st=s)d_t(s) = P(s_t = s)。那么:

dt+1(s′)=∑sdt(s) P(s′∣s)⟺dt+1=dtPd_{t+1}(s') = \sum_{s} d_t(s)\, P(s' \mid s) \quad\Longleftrightarrow\quad d_{t+1} = d_t P

直觉:到达 s′s' 的概率 = 对所有”来源” ss 求和:“在 ss 的概率” × “从 ss 走到 s′s' 的概率”。这正是全概率公式。写成矩阵形式就是行向量乘矩阵。于是:

dt=d0Ptd_t = d_0 P^t

从 s4s_4 出发(d0=[0,0,0,1,0,0,0]d_0 = [0,0,0,1,0,0,0]),计算结果为:

步数 tts1s_1s2s_2s3s_3s4s_4s5s_5s6s_6s7s_7
00001000
1000.40.20.400
200.160.160.360.160.160
50.1020.1250.1820.1800.1820.1250.102
100.1360.1410.1470.1510.1470.1410.136
500.1430.1430.1430.1430.1430.1430.143

观察:分布逐渐”扩散”开来,最终收敛到每个状态 1/7≈0.1431/7 \approx 0.143,并且与出发点无关。这个不再变化的分布叫平稳分布(stationary distribution) d∗d^*,满足 d∗=d∗Pd^* = d^* P。

为什么这对 RL 重要? 后面讲函数逼近和策略梯度时,“策略长期运行后在各状态停留的比例”会反复出现——它决定了哪些状态的误差更重要(经常访问的状态更重要)。

本例平稳分布恰好是均匀的,是因为这个 PP 的每一列加起来也都等于 1(叫”双随机矩阵”)。一般的马尔可夫链平稳分布不均匀,而且有些链(比如周期性的链)根本不收敛。

7.7 从数据中估计转移矩阵——“学习模型”的第一个例子

如果我们不知道 PP,只观察到一批轨迹,能不能把 PP 估计出来?可以,方法非常朴素——数数:

P^(s′∣s)=从 s 转移到 s′ 的次数从 s 出发的总次数\hat{P}(s' \mid s) = \frac{\text{从 } s \text{ 转移到 } s' \text{ 的次数}}{\text{从 } s \text{ 出发的总次数}}

这就是最大似然估计。它是”基于模型的 RL”中”学习模型”那一步最简单的版本。

边界问题:如果某个状态从来没出现过,分母是 0,怎么办?这时我们对它一无所知。代码里的处理是:给它一个均匀分布(“不知道就假设每种可能一样”),同时返回访问计数让调用者知道这一行不可信。这个”没见过的状态怎么办”的问题,在第 10 讲(离线 RL)和第 13 讲(探索)中会变成核心问题。

代码对应:02_markov_chain.py 中的 estimate_transition_matrix,你会看到数据越多,估计误差越小。


8. 马尔可夫奖励过程(MRP)

8.1 定义

马尔可夫奖励过程 = 马尔可夫链 + 奖励。它是一个四元组 (S,P,R,γ)(S, P, R, \gamma):

  • SS:有限状态集合;
  • PP:转移模型 P(st+1=s′∣st=s)P(s_{t+1} = s' \mid s_t = s);
  • RR:奖励函数 R(s)=E[ rt∣st=s ]R(s) = \mathbb{E}[\,r_t \mid s_t = s\,],在状态 ss 获得的期望即时奖励;
  • γ∈[0,1]\gamma \in [0, 1]:折扣因子。

仍然没有动作。

当状态有限时,RR 可以写成一个长度为 NN 的向量。火星车 MRP:

R=[ 1, 0, 0, 0, 0, 0, 10 ]R = [\,1,\ 0,\ 0,\ 0,\ 0,\ 0,\ 10\,]

记号约定(重要,避免以后看书混乱):CS234 的约定是:在时刻 tt 处于状态 sts_t,获得奖励 rtr_t,然后转移到 st+1s_{t+1}。Sutton & Barto 教材的约定是:在 StS_t 采取动作后,获得 Rt+1R_{t+1} 并转移到 St+1S_{t+1}。两者只是下标差了 1,本质完全一样。本讲义遵循 CS234 的约定。

8.2 视界(Horizon)

视界 HH 是每个回合(episode)的步数。

  • 有限视界:HH 是一个有限的数,比如游戏有固定回合数。
  • 无限视界:H=∞H = \infty,过程永远继续下去。

如果视界是有限的,这个 MRP 叫有限 MRP。

8.3 回报(Return)

回报 GtG_t 是从时刻 tt 开始到视界结束的折扣奖励之和:

Gt=rt+γ rt+1+γ2 rt+2+γ3 rt+3+⋯+γH−1−t rH−1G_t = r_t + \gamma\, r_{t+1} + \gamma^2\, r_{t+2} + \gamma^3\, r_{t+3} + \cdots + \gamma^{H-1-t}\, r_{H-1}

注意区分:

  • 奖励 rtr_t:一步的即时信号。
  • 回报 GtG_t:从 tt 开始的一整条未来的(折扣)奖励之和,是一个随机变量(因为未来的轨迹是随机的)。
  • 价值 V(s)V(s):回报的期望(8.5 节)。

一个极其有用的递归关系:

Gt=rt+γ (rt+1+γ rt+2+⋯ )=rt+γ Gt+1G_t = r_t + \gamma\,(r_{t+1} + \gamma\, r_{t+2} + \cdots) = r_t + \gamma\, G_{t+1}

“从现在开始的回报 = 现在的奖励 + 打了折的’从下一步开始的回报’“。这个关系看起来平淡无奇,却是整个 RL 的基石——贝尔曼方程、TD 学习都是从它长出来的。在代码中,它让我们可以从后往前一次扫描算出每个时刻的回报(returns_for_every_timestep 函数),而不需要对每个 tt 都重新求和。

8.4 折扣因子 γ\gamma:为什么要给未来打折?

这是初学者最常问的问题之一。有以下几个理由:

  1. 数学上的便利:无限视界时,如果不打折,∑t=0∞rt\sum_{t=0}^{\infty} r_t 可能是无穷大,无法比较。有了 γ<1\gamma < 1,只要奖励有界 ∣rt∣≤Rmax⁡|r_t| \le R_{\max},回报就有界: ∣Gt∣≤Rmax⁡(1+γ+γ2+⋯ )=Rmax⁡1−γ|G_t| \le R_{\max}(1 + \gamma + \gamma^2 + \cdots) = \frac{R_{\max}}{1-\gamma}
  2. 避免在循环中无限累积:马尔可夫链中可能存在环,不打折时价值可能发散。
  3. 对未来的不确定性:我们对遥远未来的预测不太可靠(模型可能不准、世界可能变化),给它小一点的权重是合理的。
  4. 人和动物的行为:人确实更偏好即时奖励(今天的 100 元比一年后的 100 元更有吸引力)。
  5. 经济学类比:如果奖励是钱,今天的钱可以存银行生利息,所以未来的钱应当”折现”。

γ\gamma 的两个极端:

  • γ=0\gamma = 0:完全短视,只关心即时奖励,Gt=rtG_t = r_t。
  • γ=1\gamma = 1:未来的奖励和现在的一样重要。只有在回合一定会结束(有限视界或必然到达终止状态)时才安全。

有效视界(effective horizon):一个实用的直觉是,折扣因子 γ\gamma 大约相当于”关注未来 11−γ\frac{1}{1-\gamma} 步”:

γ\gamma00.50.90.990.999
有效视界 ≈11−γ\approx \frac{1}{1-\gamma}12101001000

原因:γk\gamma^k 在 k≈11−γk \approx \frac{1}{1-\gamma} 时大约衰减到 e−1≈0.37e^{-1} \approx 0.37,再往后的奖励权重越来越小。

γ\gamma 本身是问题定义的一部分:不同的 γ\gamma 定义了不同的”好”。γ\gamma 大,智能体有耐心、目光长远;γ\gamma 小,智能体急功近利。

8.5 状态价值函数

MRP 的状态价值函数 V(s)V(s) 是从状态 ss 出发的期望回报:

V(s)=E [ Gt∣st=s ]=E [ rt+γ rt+1+γ2 rt+2+⋯∣st=s ]V(s) = \mathbb{E}\,[\,G_t \mid s_t = s\,] = \mathbb{E}\,[\,r_t + \gamma\, r_{t+1} + \gamma^2\, r_{t+2} + \cdots \mid s_t = s\,]

为什么要取期望? 因为从同一个状态出发,每次的轨迹都不一样,回报 GtG_t 是随机的。价值是”平均而言能拿多少”。

无限视界且 γ<1\gamma<1 时,V(s)V(s) 与 tt 无关(从 ss 出发,无论现在是第几步,未来看起来都一样)——这叫平稳性。有限视界时价值会依赖剩余步数,这个细节第 2 讲再展开。

8.6 手算例子:火星车 MRP 的回报

设 γ=12\gamma = \frac{1}{2},从 s4s_4 出发、长度为 4 的几条轨迹,计算回报:

轨迹 1:s4,s5,s6,s7s_4, s_5, s_6, s_7,奖励为 0,0,0,100, 0, 0, 10 G0=0+12×0+14×0+18×10=1.25G_0 = 0 + \tfrac12\times 0 + \tfrac14\times 0 + \tfrac18\times 10 = 1.25

轨迹 2:s4,s4,s5,s4s_4, s_4, s_5, s_4,奖励为 0,0,0,00, 0, 0, 0 G0=0+12×0+14×0+18×0=0G_0 = 0 + \tfrac12\times 0 + \tfrac14\times 0 + \tfrac18\times 0 = 0

轨迹 3:s4,s3,s2,s1s_4, s_3, s_2, s_1,奖励为 0,0,0,10, 0, 0, 1 G0=0+12×0+14×0+18×1=0.125G_0 = 0 + \tfrac12\times 0 + \tfrac14\times 0 + \tfrac18\times 1 = 0.125

思考:V(s4)V(s_4) 大约是多少?直觉上,就是把无穷多条轨迹的回报取平均。这就引出了计算价值的第一种方法。

8.7 计算 MRP 价值的三种方法

方法一:蒙特卡洛模拟(Monte Carlo)

思路:价值的定义就是”回报的期望”,那就直接模拟很多条轨迹,把回报取平均。

算法:蒙特卡洛估计 V(s)
输入:MRP (S, P, R, γ),起点 s,轨迹条数 N,视界 H
1. total ← 0
2. 重复 N 次:
3.     从 s 出发,按 P 采样一条长度为 H 的轨迹,记录每步奖励
4.     计算这条轨迹的回报 G = r_0 + γ r_1 + ... + γ^(H-1) r_(H-1)
5.     total ← total + G
6. 返回 total / N

为什么可行:大数定律——独立同分布样本的平均值收敛到期望值。误差大约以 1N\frac{1}{\sqrt{N}} 的速度缩小(想让误差减半,需要 4 倍的样本)。

优点:

  • 简单,只需要能采样,不需要知道 PP 的具体数值——这一点极其重要!它意味着即使模型未知,只要能与环境交互,就能估计价值。这正是第 3 讲”无模型策略评估”的基础。
  • 不依赖马尔可夫假设。

缺点:

  • 有随机误差(方差),需要大量样本。
  • 无限视界必须截断到某个有限的 HH,这会引入偏差。截断误差最多为 γHRmax⁡1−γ\frac{\gamma^H R_{\max}}{1-\gamma},所以 HH 要取得足够大(代码中的 recommended_horizon 帮你算 HH 取多大)。

方法二:解析解——利用贝尔曼方程

核心洞察:用 8.3 节的递归关系 Gt=rt+γGt+1G_t = r_t + \gamma G_{t+1}。

推导 MRP 的贝尔曼方程(请逐行看懂每一步用了什么):

V(s)=E[ Gt∣st=s ](价值的定义)=E[ rt+γ Gt+1∣st=s ](回报的递归关系)=E[ rt∣st=s ]+γ E[ Gt+1∣st=s ](期望的线性性)=R(s)+γ∑s′P(s′∣s)  E[ Gt+1∣st=s, st+1=s′ ](全期望公式:按下一状态分情况)=R(s)+γ∑s′P(s′∣s)  E[ Gt+1∣st+1=s′ ](马尔可夫性!)=R(s)+γ∑s′P(s′∣s)  V(s′)(价值的定义)\begin{aligned} V(s) &= \mathbb{E}[\,G_t \mid s_t = s\,] && \text{(价值的定义)}\\[4pt] &= \mathbb{E}[\,r_t + \gamma\, G_{t+1} \mid s_t = s\,] && \text{(回报的递归关系)}\\[4pt] &= \mathbb{E}[\,r_t \mid s_t = s\,] + \gamma\, \mathbb{E}[\,G_{t+1} \mid s_t = s\,] && \text{(期望的线性性)}\\[4pt] &= R(s) + \gamma \sum_{s'} P(s' \mid s)\; \mathbb{E}[\,G_{t+1} \mid s_t = s,\ s_{t+1} = s'\,] && \text{(全期望公式:按下一状态分情况)}\\[4pt] &= R(s) + \gamma \sum_{s'} P(s' \mid s)\; \mathbb{E}[\,G_{t+1} \mid s_{t+1} = s'\,] && \text{(\textbf{马尔可夫性}!)}\\[4pt] &= R(s) + \gamma \sum_{s'} P(s' \mid s)\; V(s') && \text{(价值的定义)} \end{aligned}

关键在倒数第二步:已知 st+1=s′s_{t+1} = s' 后,“之前在 ss“这个信息对未来回报没有任何额外帮助——这正是马尔可夫性。如果状态不是马尔可夫的,这一步就不成立,贝尔曼方程就是错的。 这就是为什么 3.5 节说马尔可夫假设是后续一切算法的基础。

MRP 贝尔曼方程:

  V(s)=R(s)⏟即时奖励+γ∑s′∈SP(s′∣s) V(s′)⏟折扣后的未来价值(的期望)  \boxed{\;V(s) = \underbrace{R(s)}_{\text{即时奖励}} + \underbrace{\gamma \sum_{s' \in S} P(s' \mid s)\, V(s')}_{\text{折扣后的未来价值(的期望)}}\;}

直觉:“一个状态的价值 = 在这里拿到的奖励 + 打了折的’下一步所在状态的平均价值’“。价值函数把”整个未来”压缩成了”一步 + 下一个状态的价值”。

写成矩阵形式:对所有 NN 个状态同时写出上式,把 VV 看成列向量:

(V(s1)⋮V(sN))=(R(s1)⋮R(sN))+γ(P(s1∣s1)⋯P(sN∣s1)⋮⋱⋮P(s1∣sN)⋯P(sN∣sN))(V(s1)⋮V(sN))\begin{pmatrix} V(s_1) \\ \vdots \\ V(s_N) \end{pmatrix} = \begin{pmatrix} R(s_1) \\ \vdots \\ R(s_N) \end{pmatrix} + \gamma \begin{pmatrix} P(s_1 \mid s_1) & \cdots & P(s_N \mid s_1) \\ \vdots & \ddots & \vdots \\ P(s_1 \mid s_N) & \cdots & P(s_N \mid s_N) \end{pmatrix} \begin{pmatrix} V(s_1) \\ \vdots \\ V(s_N) \end{pmatrix}

即 V=R+γPVV = R + \gamma P V。这是一个线性方程组!移项求解:

V−γPV=R    ⟹    (I−γP) V=R    ⟹      V=(I−γP)−1R  V - \gamma P V = R \;\;\Longrightarrow\;\; (I - \gamma P)\, V = R \;\;\Longrightarrow\;\; \boxed{\;V = (I - \gamma P)^{-1} R\;}

其中 II 是 N×NN \times N 的单位矩阵。

这个逆矩阵一定存在吗? 当 0≤γ<10 \le \gamma < 1 时一定存在。直觉理解:PP 的每一行都是概率分布,PP 作用在任何向量上都是”加权平均”,不会把向量的最大绝对值变大;乘上 γ<1\gamma < 1 后会严格缩小。因此 γP\gamma P 的特征值绝对值都小于 1,I−γPI - \gamma P 不可能有零特征值,所以可逆。当 γ=1\gamma = 1 时,(I−P)1=0(I - P)\mathbf{1} = \mathbf{0}(因为 PP 每行和为 1),I−PI-P 不可逆——这对应”不打折、永不终止时价值可能是无穷大”。

优点:一步得到精确解,没有随机误差。

缺点:

  • 需要完全知道 PP 和 RR;
  • 求逆(或解线性方程组)的计算量约为 O(N3)O(N^3)。状态数 N=1000N = 1000 时约 10910^9 次运算尚可接受,N=106N = 10^6 时就不现实了。

实践提示:代码中用 np.linalg.solve(I - γP, R) 而不是先求逆再相乘。两者数学上等价,但 solve 更快、数值上更稳定。永远优先用 solve 而不是 inv。

方法三:迭代法(动态规划)

思路:解析解要求逆矩阵,太贵了。能不能反复使用贝尔曼方程,让价值估计一步步逼近真实值?

算法:迭代法计算 MRP 价值
1. 初始化 V_0(s) = 0,对所有 s
2. 对 k = 1, 2, 3, ... 重复:
3.     对每个状态 s:
4.         V_k(s) = R(s) + γ Σ_{s'} P(s'|s) V_{k-1}(s')
5.     如果 max_s |V_k(s) - V_{k-1}(s)| < 容差,停止

矩阵形式就是一行:Vk=R+γPVk−1V_k = R + \gamma P V_{k-1}。

直觉——VkV_k 是什么? 从 V0=0V_0 = 0 开始:

  • V1=RV_1 = R:只看 1 步的价值(“如果只剩 1 步,能拿多少”);
  • V2=R+γPRV_2 = R + \gamma P R:看 2 步的价值;
  • VkV_k:看 kk 步的价值(视界为 kk 的有限 MRP 的价值)。

随着 kk 增大,我们”看得越来越远”,而远处的奖励被 γk\gamma^k 压得越来越小,所以 VkV_k 收敛到无限视界的 VV。

为什么一定收敛?——压缩映射的直觉:设真实价值为 VV,它满足 V=R+γPVV = R + \gamma P V。两式相减:

Vk−V=γP (Vk−1−V)V_k - V = \gamma P\, (V_{k-1} - V)

PP 是加权平均,不会放大误差的最大绝对值;再乘以 γ\gamma,误差至少缩小为原来的 γ\gamma 倍:

max⁡s∣Vk(s)−V(s)∣  ≤  γ⋅max⁡s∣Vk−1(s)−V(s)∣\max_s |V_k(s) - V(s)| \;\le\; \gamma \cdot \max_s |V_{k-1}(s) - V(s)|

每迭代一次,误差至少缩小到 γ\gamma 倍。迭代 kk 次后误差 ≤γk×\le \gamma^k \times 初始误差。这种”每次都把距离按比例缩小”的操作叫压缩映射(contraction mapping),第 2 讲会严格证明,并用它证明价值迭代的收敛性。

  • γ=0.5\gamma = 0.5:每次误差减半,几十次迭代就收敛到极高精度;
  • γ=0.99\gamma = 0.99:每次只缩小 1%,误差缩小 10 倍大约需要 ln⁡10−ln⁡0.99≈229\frac{\ln 10}{-\ln 0.99} \approx 229 次迭代。

所以 γ\gamma 越接近 1,迭代法越慢——这是一个很实际的现象,代码中可以亲眼看到。

优点:每次迭代只需 O(N2)O(N^2)(稀疏时更少);可以随时停止得到近似解;是第 2 讲策略评估、价值迭代的直接原型。

缺点:仍需要知道 PP 和 RR;γ\gamma 接近 1 时收敛慢。

三种方法对比

蒙特卡洛解析解迭代法(DP)
需要知道 P,RP, R 吗?不需要,能采样即可需要需要
结果近似,有随机误差精确近似,误差可控到任意小
计算量与样本数、视界成正比O(N3)O(N^3)每次迭代 O(N2)O(N^2)
依赖马尔可夫性?不依赖依赖依赖
后续发展第 3 讲 MC 策略评估小规模问题的”标准答案”第 2 讲策略评估 / 价值迭代;第 3 讲 TD 学习

一个有趣的观察:蒙特卡洛”不用模型、但要等整条轨迹结束”;迭代法”用模型、每次只看一步”。能不能不用模型、又只看一步? 答案是时序差分(TD)学习——第 3 讲的主角。

代码对应:03_markov_reward_process.py 实现了三种方法,并对比结果。

8.8 结果:火星车 MRP 的价值

用解析解计算(代码中三种方法都会得到相近的结果):

γ\gammaV(s1)V(s_1)V(s2)V(s_2)V(s3)V(s_3)V(s4)V(s_4)V(s5)V(s_5)V(s6)V(s_6)V(s7)V(s_7)
01.000.000.000.000.000.0010.00
0.51.530.370.130.220.853.5915.31
0.96.916.056.879.6115.0124.5840.97
0.99136.25137.16141.54149.50161.23177.03197.30

逐行解读(请对照表格仔细想一想,这比记公式更重要):

  • γ=0\gamma = 0:价值 = 即时奖励,完全短视。
  • γ=0.5\gamma = 0.5:V(s7)=15.31>10V(s_7) = 15.31 > 10,因为待在 s7s_7 附近未来还能继续拿奖励。V(s3)=0.13V(s_3) = 0.13 最小:它离两个奖励都远。注意 V(s1)=1.53<V(s6)=3.59V(s_1) = 1.53 < V(s_6) = 3.59:s6s_6 本身奖励是 0,但它紧挨着 +10,“前途”比拿着 +1 的 s1s_1 更好。这就是价值 ≠ 奖励的生动例子。
  • γ=0.9\gamma = 0.9:远处的奖励更重要了,所有价值都变大,而且 V(s1)=6.91V(s_1) = 6.91 被 V(s4)=9.61V(s_4) = 9.61 超过了——看得越远,“离 +10 近一点”就越重要。
  • γ=0.99\gamma = 0.99:价值很大(上限是 101−0.99=1000\frac{10}{1-0.99} = 1000),而且各状态差距相对变小了——看得足够远时,从哪里出发区别没那么大(因为马尔可夫链最终会在所有状态间均匀游走,回忆 7.6 节的平稳分布)。

一个值得玩味的现象:γ=0.5\gamma = 0.5 时 V(s3)=0.13<V(s4)=0.22V(s_3) = 0.13 < V(s_4) = 0.22,但 γ=0.9\gamma = 0.9 时 V(s2)=6.05<V(s3)=6.87V(s_2) = 6.05 < V(s_3) = 6.87。价值最低的”谷底”位置随 γ\gamma 而移动。你能解释为什么吗?(提示:s1s_1 的 +1 和 s7s_7 的 +10,在不同耐心程度下,哪个的”引力”更大?)


9. 本讲总结

9.1 核心概念清单

  1. RL = 通过经验学习如何做出好的序贯决策。
  2. 四个核心特征:优化、延迟后果(信用分配)、探索(数据由自己的决策产生)、泛化。
  3. 交互循环:动作 → 观测 + 奖励 → 动作 → ……;目标是最大化期望累积奖励。
  4. 奖励设计很难:智能体会优化你写下来的奖励,而不是你心里的目标(奖励投机)。
  5. 状态是历史的函数;马尔可夫性:给定现在,未来与过去无关。它是贝尔曼方程成立的前提。
  6. 三大组件:模型(世界怎么变)、策略(怎么做)、价值函数(有多好)。
  7. 三组对立:规划 vs 学习、探索 vs 利用、评估 vs 控制。
  8. 马尔可夫链 (S,P)(S, P) → MRP (S,P,R,γ)(S, P, R, \gamma) → (下一讲)MDP (S,A,P,R,γ)(S, A, P, R, \gamma)。
  9. 回报 Gt=rt+γGt+1G_t = r_t + \gamma G_{t+1};价值 V(s)=E[Gt∣st=s]V(s) = \mathbb{E}[G_t \mid s_t = s]。
  10. MRP 贝尔曼方程 V=R+γPVV = R + \gamma P V;三种解法:蒙特卡洛(无需模型)、解析解(精确但 O(N3)O(N^3))、迭代法(压缩映射,逐步逼近)。

9.2 公式速查表

名称公式
马尔可夫性p(st+1∣st,at)=p(st+1∣ht,at)p(s_{t+1} \mid s_t, a_t) = p(s_{t+1} \mid h_t, a_t)
状态分布演化dt+1=dtPd_{t+1} = d_t P,dt=d0Ptd_t = d_0 P^t
平稳分布d∗=d∗Pd^* = d^* P
回报Gt=∑k=0H−1−tγkrt+kG_t = \sum_{k=0}^{H-1-t} \gamma^k r_{t+k}
回报递归Gt=rt+γGt+1G_t = r_t + \gamma G_{t+1}
回报上界∣Gt∣≤Rmax⁡1−γ\lvert G_t \rvert \le \frac{R_{\max}}{1-\gamma}
价值V(s)=E[Gt∣st=s]V(s) = \mathbb{E}[G_t \mid s_t = s]
MRP 贝尔曼方程V(s)=R(s)+γ∑s′P(s′∣s)V(s′)V(s) = R(s) + \gamma \sum_{s'} P(s' \mid s) V(s')
矩阵形式V=R+γPVV = R + \gamma P V
解析解V=(I−γP)−1RV = (I - \gamma P)^{-1} R
迭代法Vk=R+γPVk−1V_k = R + \gamma P V_{k-1}
压缩性质∥Vk−V∥∞≤γ∥Vk−1−V∥∞\lVert V_k - V \rVert_\infty \le \gamma \lVert V_{k-1} - V \rVert_\infty
有效视界≈11−γ\approx \frac{1}{1-\gamma}

9.3 中英术语对照表

中文英文中文英文
强化学习Reinforcement Learning (RL)智能体Agent
环境 / 世界Environment / World动作Action
观测Observation奖励Reward
历史History状态State
马尔可夫性Markov property序贯决策Sequential decision making
信用分配Credit assignment探索 / 利用Exploration / Exploitation
泛化Generalization函数逼近Function approximation
表格型Tabular奖励投机Reward hacking
模型Model转移模型 / 动力学Transition model / Dynamics
策略Policy价值函数Value function
基于模型 / 无模型Model-based / Model-free规划Planning
评估(预测)/ 控制Evaluation (Prediction) / Control马尔可夫链Markov chain
转移矩阵Transition matrix平稳分布Stationary distribution
马尔可夫奖励过程Markov Reward Process (MRP)马尔可夫决策过程Markov Decision Process (MDP)
部分可观测 MDPPOMDP老虎机Bandit
回合Episode视界Horizon
回报Return折扣因子Discount factor
贝尔曼方程Bellman equation动态规划Dynamic programming
蒙特卡洛Monte Carlo压缩映射Contraction mapping

10. 练习题

建议先自己想,再展开答案。标 ★ 的是需要动手算或跑代码的题。

练习 1(概念):下面哪些问题适合用 RL 建模?如果适合,说出状态、动作、奖励分别是什么;如果不适合,说明更适合用什么方法。 (a) 识别图片中的手写数字;(b) 自动驾驶汽车在十字路口决定何时通过;(c) 把用户分成几个兴趣群体;(d) 为糖尿病患者每天决定胰岛素剂量。

参考答案

(a) 不适合,是典型的监督学习:有正确答案(标签),决策不影响后续数据。 (b) 适合。状态:自身速度位置、其他车辆和行人的位置速度、信号灯;动作:加速/减速/等待;奖励:安全通过 +,碰撞大额 −,等待时间 −。有延迟后果(现在加速影响之后是否能刹住)。 (c) 不适合,是无监督学习(聚类)。 (d) 适合。状态:血糖读数、近期饮食、运动、过往剂量;动作:剂量;奖励:血糖在健康区间 +,低血糖大额 −。延迟后果明显,而且探索有风险——这正是第 10 讲离线 RL 关心的场景。

练习 2(马尔可夫性):一个机器人在走廊里,状态只包含”机器人当前的位置”。如果机器人的动作是”加速/减速”,这个状态是马尔可夫的吗?如何修改使其满足马尔可夫性?

参考答案

不是。加速/减速改变的是速度,而下一时刻的位置取决于当前的速度——仅凭位置无法预测下一时刻位置。把状态改为”(位置,速度)“即可(与抛球的例子一样)。如果速度无法直接观测,可以用”最近两次的位置”来近似(位置差 ≈ 速度),就像 DQN 叠加 4 帧画面。

练习 3(回报计算)★:火星车 MRP,γ=0.9\gamma = 0.9,一条轨迹为 s5,s6,s7,s7,s6s_5, s_6, s_7, s_7, s_6。(a) 计算 G0G_0;(b) 用递归关系 Gt=rt+γGt+1G_t = r_t + \gamma G_{t+1} 从后往前算出 G4,G3,G2,G1,G0G_4, G_3, G_2, G_1, G_0,验证与 (a) 一致。

参考答案

奖励序列为 0,0,10,10,00, 0, 10, 10, 0。 (a) G0=0+0.9×0+0.81×10+0.729×10+0.6561×0=8.1+7.29=15.39G_0 = 0 + 0.9 \times 0 + 0.81 \times 10 + 0.729 \times 10 + 0.6561 \times 0 = 8.1 + 7.29 = 15.39。 (b) G4=0G_4 = 0;G3=10+0.9×0=10G_3 = 10 + 0.9 \times 0 = 10;G2=10+0.9×10=19G_2 = 10 + 0.9 \times 10 = 19;G1=0+0.9×19=17.1G_1 = 0 + 0.9 \times 19 = 17.1;G0=0+0.9×17.1=15.39G_0 = 0 + 0.9 \times 17.1 = 15.39 ✓。 可以用 03_markov_reward_process.py 中的 returns_for_every_timestep([0, 0, 10, 10, 0], 0.9) 验证。

练习 4(贝尔曼方程):考虑一个只有 2 个状态的 MRP:P=(0.50.501)P = \begin{pmatrix} 0.5 & 0.5 \\ 0 & 1 \end{pmatrix},R=[1,0]R = [1, 0],γ=0.5\gamma = 0.5。用贝尔曼方程手算 VV。

参考答案

状态 2 只会停在自己,奖励为 0:V(2)=0+0.5×V(2)⇒V(2)=0V(2) = 0 + 0.5 \times V(2) \Rightarrow V(2) = 0。 状态 1:V(1)=1+0.5×(0.5 V(1)+0.5 V(2))=1+0.25 V(1)⇒V(1)=43≈1.333V(1) = 1 + 0.5 \times (0.5\, V(1) + 0.5\, V(2)) = 1 + 0.25\, V(1) \Rightarrow V(1) = \frac{4}{3} \approx 1.333。 直觉检验:在状态 1 每步有一半概率留下,所以期望能拿到 1+0.25+0.252+⋯=11−0.25=431 + 0.25 + 0.25^2 + \cdots = \frac{1}{1-0.25} = \frac43 ✓(每一步”留在状态1且折扣”的联合因子是 0.5×0.5=0.250.5 \times 0.5 = 0.25)。

练习 5(折扣因子):如果一个 MRP 中所有奖励都是 +1+1,γ=0.9\gamma = 0.9,那么每个状态的价值是多少?这和转移矩阵 PP 有关吗?

参考答案

V(s)=1+0.9+0.81+⋯=11−0.9=10V(s) = 1 + 0.9 + 0.81 + \cdots = \frac{1}{1-0.9} = 10,与 PP 无关——无论走到哪里奖励都一样。可以验证 V=10⋅1V = 10 \cdot \mathbf{1} 满足 V=R+γPVV = R + \gamma P V:1+0.9×P(10⋅1)=1+9⋅1=10⋅1\mathbf{1} + 0.9 \times P (10 \cdot \mathbf{1}) = \mathbf{1} + 9 \cdot \mathbf{1} = 10 \cdot \mathbf{1}(因为 P1=1P\mathbf{1} = \mathbf{1})。 这个例子也说明:给所有奖励加一个常数,价值会整体平移 c1−γ\frac{c}{1-\gamma},不改变状态之间的相对好坏。

练习 6(迭代法收敛)★:运行 03_markov_reward_process.py,观察迭代法在 γ=0.5,0.9,0.99\gamma = 0.5, 0.9, 0.99 时分别需要多少次迭代收敛。相邻两次迭代的变化量之比大约是多少?和 γ\gamma 有什么关系?

参考答案

比值会很快稳定在 γ\gamma 附近(0.5、0.9、0.99)。原因:相邻两次的变化量满足 Vk−Vk−1=γP (Vk−1−Vk−2)V_k - V_{k-1} = \gamma P\,(V_{k-1} - V_{k-2}),而 PP 有一个特征值恰好是 1(对应全 1 向量,因为每行和为 1),RR 在这个方向上有分量,所以长期来看每次迭代变化量恰好乘以 γ\gamma。 迭代次数大约是 ln⁡(初始误差/容差)1−γ\frac{\ln(\text{初始误差}/\text{容差})}{1-\gamma},即与 11−γ\frac{1}{1-\gamma} 成正比:γ\gamma 越接近 1,收敛越慢。这印证了压缩映射的分析:误差每次至少缩小到 γ\gamma 倍(本例中恰好是 γ\gamma 倍,压缩上界是”紧”的)。

练习 7(思考题):为什么说”蒙特卡洛方法不依赖马尔可夫性,而贝尔曼方程依赖”?请指出贝尔曼方程推导中具体哪一步用到了马尔可夫性,并构造一个非马尔可夫的例子说明这一步会出错。

参考答案

蒙特卡洛直接按定义对真实回报取平均,只要轨迹是从真实过程采样的,不管状态是否马尔可夫,平均值都收敛到 E[Gt∣st=s]\mathbb{E}[G_t \mid s_t = s](这里的期望是对真实数据分布而言)。 贝尔曼方程推导中 E[Gt+1∣st=s,st+1=s′]=E[Gt+1∣st+1=s′]\mathbb{E}[G_{t+1} \mid s_t = s, s_{t+1} = s'] = \mathbb{E}[G_{t+1} \mid s_{t+1} = s'] 这一步用到了马尔可夫性。 反例:一条走廊,观测只有”是否在墙边”。从左墙边出发和从右墙边出发,下一步都观测到”不在墙边”,但它们的未来完全不同(一个在往右走,一个在往左走)。此时”不在墙边”这个状态的价值取决于你是从哪里来的,贝尔曼方程中的 V(s′)V(s') 无法用一个数表示。


11. 延伸阅读

  • Sutton & Barto,Reinforcement Learning: An Introduction(第 2 版):第 1 章(导论)、第 3 章(有限 MDP,本讲的 MRP 是其特例)。
  • CS234 Spring 2024 Lecture 1 录像与课件。
  • David Silver UCL RL 课程:Lecture 1(Introduction)、Lecture 2 前半(Markov Processes, MRPs)。
  • 关于奖励投机:DeepMind 博客 Specification gaming: the flip side of AI ingenuity(其中收集了大量真实案例)。

12. 下一讲预告

本讲的 MRP 里没有动作——火星车只是随机游走。下一讲我们把动作加回来,得到马尔可夫决策过程(MDP)。你会看到:

  • 一旦固定一个策略 π\pi,MDP 就变回一个 MRP,本讲的三种方法可以直接用来评估这个策略;
  • 如何从”评估”走向”改进”:策略迭代和价值迭代;
  • 本讲迭代法中的”压缩映射”直觉,如何变成严格的收敛性证明。

下一讲之前,建议你:跑通 code/lecture01/ 下的 4 个脚本,并完成练习 3 和练习 6。

← 返回课程目录