对应:Stanford CS234 Lecture 1(Introduction to Reinforcement Learning),以及 Lecture 2 开头的马尔可夫过程 / 马尔可夫奖励过程 配套代码:
code/lecture01/预计阅读时间:3–4 小时(第一遍通读 1.5 小时,第二遍推公式 + 跑代码 2 小时)
0. 本讲导航
0.1 学完本讲,你应该能够
- 用自己的话说清楚:强化学习要解决什么问题,它和监督学习、无监督学习、模仿学习、AI 规划有什么区别。
- 说出 RL 的四个核心特征(优化、延迟后果、探索、泛化),并各举一个生活中的例子。
- 画出智能体–环境交互循环,解释动作、观测、奖励、历史、状态这几个词。
- 解释马尔可夫假设的含义,判断一个状态表示是否满足马尔可夫性。
- 区分模型、策略、价值函数这三个组件,以及基于模型 / 无模型、基于价值 / 基于策略等分类。
- 写出马尔可夫链和马尔可夫奖励过程的定义,计算一条轨迹的折扣回报。
- 推导 MRP 的贝尔曼方程,并用三种方法(蒙特卡洛、解析解、迭代法)计算状态价值,说出各自的优缺点。
0.2 先修知识(不会也没关系,用到时会提醒)
| 知识点 | 用在哪里 | 最低要求 |
|---|---|---|
| 概率:随机变量、期望、条件概率 | 第 3、7、8 节 | 知道 ,知道 是”已知 B 发生时 A 的概率” |
| 线性代数:矩阵乘法、单位矩阵、矩阵求逆 | 第 7、8 节 | 会算 2×2 矩阵乘向量 |
| 等比数列求和 | 第 8 节 | (当 ) |
| Python 基础 | 配套代码 | 会写 for 循环、函数、列表;numpy 用法代码注释里会讲 |
0.3 本讲地图
第1节 什么是RL?(故事、定义、历史、应用)
│
第2节 RL的四个核心特征 + 与其他范式的对比
│
第3节 序贯决策的形式化:交互循环、奖励、历史、状态、马尔可夫假设
│
第4节 火星探测车(贯穿全课的例子)
│
第5节 智能体的三大组件:模型 / 策略 / 价值函数
│
第6节 三组关键对立:规划vs学习、探索vs利用、评估vs控制
│
第7节 马尔可夫过程(没有动作、没有奖励)
│
第8节 马尔可夫奖励过程(加上奖励)→ 回报、折扣、价值、贝尔曼方程
│
(第2讲)马尔可夫决策过程(再加上动作)
注意第 7、8、下一讲之间的递进关系,这是本课程最重要的”积木搭建”思路:
先在简单的积木上把概念想透,再一块一块往上加,是理解 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 是三条线索汇合的产物:
- 心理学的试错学习:桑代克的效果律、巴甫洛夫的条件反射、斯金纳的操作性条件反射——“奖励会强化行为”,这也是 reinforcement(强化)这个词的来历。
- 最优控制与动态规划:1950 年代,Richard Bellman 提出动态规划和贝尔曼方程,并形式化了马尔可夫决策过程(MDP)。这条线索关心”已知模型时如何计算最优决策”。
- 时序差分学习:Richard Sutton 与 Andrew Barto 在 1980 年代把前两条线索结合起来,提出了时序差分(TD)学习,让智能体可以在不知道模型的情况下,边交互边学习。
| 年份 | 里程碑 | 意义 |
|---|---|---|
| 1911 | 桑代克提出效果律 | 试错学习的心理学起点 |
| 1957 | Bellman《Dynamic Programming》 | 贝尔曼方程、MDP 的数学基础 |
| 1959 | Arthur Samuel 的跳棋程序 | 最早的”自我对弈 + 学习”程序之一 |
| 1960 | Howard 提出策略迭代 | MDP 求解算法(第 2 讲) |
| 1983 | Barto, Sutton, Anderson:Actor-Critic 解决倒立摆 | Actor-Critic 雏形(第 7 讲) |
| 1988 | Sutton:TD 学习 | 无模型学习的核心思想(第 3 讲) |
| 1989 | Watkins:Q-learning | 最经典的无模型控制算法(第 4 讲) |
| 1992 | Williams:REINFORCE | 策略梯度的起点(第 6 讲) |
| 1992–1995 | Tesauro:TD-Gammon | 神经网络 + TD 学会世界级双陆棋 |
| 2013 / 2015 | DeepMind:DQN 玩 Atari | 深度 RL 时代开启(第 5 讲) |
| 2016 | AlphaGo 击败李世石 | MCTS + 深度网络 + 自我对弈(第 14 讲) |
| 2017 | PPO;AlphaZero | 至今最常用的策略梯度算法之一(第 7 讲) |
| 2022 | InstructGPT / ChatGPT 使用 RLHF | RL 成为大模型对齐的关键技术(第 9 讲) |
| 2023 | DPO | 不显式训练奖励模型的偏好优化(第 9 讲) |
| 2024–2025 | 用 RL 训练推理能力的大模型(如 OpenAI o1、DeepSeek-R1) | 基于可验证奖励的 RL 大规模应用(第 16 讲) |
| 2025 | Barto 与 Sutton 获 2024 年度图灵奖 | 表彰其奠定 RL 概念与算法基础 |
1.4 RL 今天在做什么?
- 游戏与博弈:Atari、围棋、国际象棋、星际争霸、Dota 2。游戏是 RL 的理想试验场:有明确的奖励(分数 / 输赢),可以无限模拟。
- 机器人:行走、抓取、灵巧手操作。难点是真实世界试错很贵,常用”仿真中训练 → 迁移到真实”。
- 大语言模型:RLHF 让模型的回答更符合人类偏好;基于可验证奖励的 RL 提升数学和编程推理能力。
- 科学与工程:DeepMind 用 RL 控制核聚变装置(托卡马克)中的等离子体形状;芯片布局;数据中心制冷优化。
- 医疗与教育(CS234 主讲人 Emma Brunskill 的研究重点):个性化治疗方案(比如什么时候调整药物剂量)、个性化教学(给学生推送什么练习题)。这类场景数据昂贵、试错有伦理风险,因此特别关心”如何用少量数据学好”和”如何从历史数据中学”——这也是本课程后半部分(第 10–13 讲)的重点。
- 推荐系统与广告:推荐什么内容能让用户长期满意,而不是只追求当前点击。
1.5 为什么 RL 最近十年突然”火”了?
RL 的核心思想早在 1990 年代就有了,近十年爆发主要因为:
- 深度神经网络解决了”泛化”问题:可以从原始像素、文本中提取特征,不再需要人手工设计状态表示(见 2.4 节)。
- 算力:RL 极其”费数据”,GPU 和大规模分布式模拟让训练数十亿步成为可能。
- 模拟器:游戏引擎、物理仿真器提供了几乎免费的试错环境。
- 算法进步:经验回放、目标网络、PPO 等让训练更稳定。
但要注意,在真实世界中数据仍然昂贵(病人不能被反复”试错”),这是 RL 目前最大的挑战之一。
2. 强化学习的四个核心特征
CS234 用四个关键词刻画 RL:优化(Optimization)、延迟后果(Delayed consequences)、探索(Exploration)、泛化(Generalization)。理解了这四个词,就理解了 RL 为什么难、为什么和其他机器学习不一样。
2.1 优化(Optimization)
是什么:目标是找到最优的(或至少非常好的)决策方式,而不只是”一个能用的”决策方式。
直觉:去机场有很多条路线,RL 关心的不是”找到一条能到机场的路”,而是”找到期望时间最短的路”。这意味着必须有一个可以比较好坏的数值标准——这就是奖励(以及累积奖励)存在的原因。
为什么重要:有了明确的优化目标,我们才能说一个策略比另一个策略”更好”,才能设计算法去”改进”。但也要警惕:你优化什么,就会得到什么(见 3.3 节的奖励投机)。
2.2 延迟后果(Delayed Consequences)
是什么:现在的决策可能在很久之后才产生影响。
两层难点:
- 规划时:做决策时不仅要考虑眼前的奖励,还要考虑它对未来的影响。
- 例:存钱 vs 花钱。花钱现在开心,存钱未来有保障。
- 例:学生现在花时间刷题很痛苦(负奖励),但期末考试得高分(正奖励)。
- 学习时——信用分配问题(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 种颜色,可能的画面数是 ——比宇宙中原子总数还多得多。
- 围棋合法局面约 种。
- 一个病人的状态由几十个连续的生理指标描述,同样的状态几乎不可能出现第二次。
所以智能体必须能从”见过的情况”推广到”相似但没见过的情况”。这需要函数逼近(例如神经网络)——第 5 讲开始我们会详细讨论。
本讲和第 2–4 讲的简化:我们先假设状态很少(比如 7 个),可以用一张表存下所有东西,这叫表格型(tabular) 设定。先在这里把核心思想想透,再引入泛化。
2.5 把四个特征放在一起:RL 与其他范式的对比
| AI 规划 | 监督学习 | 无监督学习 | 模仿学习 | 强化学习 | |
|---|---|---|---|---|---|
| 优化(决策) | ✓ | ✓ | ✓ | ||
| 延迟后果 | ✓ | ✓ | ✓ | ||
| 探索 | ✓ | ||||
| 泛化 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 数据/信息来源 | 已知的世界模型 | 带标签的数据 | 无标签的数据 | 专家的示范轨迹 | 自己与环境交互的经验 |
注:“优化”在这里专指优化决策的长期效用。监督学习当然也在最小化损失函数,但它并不涉及”做决策影响世界”。
逐个解读:
- AI 规划(例如给定完整规则的国际象棋搜索、导航软件算路线):世界模型(规则、地图)是完全已知的,只需要计算。它涉及优化、延迟后果、泛化,但不需要探索——因为不需要通过试错来了解世界。
- 监督学习:给定输入 和正确答案 ,学习映射 。反馈是指导性的(instructive):“正确答案是猫”。数据独立同分布,不受模型影响。
- 无监督学习:只有 ,没有 ,学习数据的结构(聚类、降维、生成)。
- 模仿学习:观察专家的”状态 → 动作”示范,学着做。它把 RL 问题简化为监督学习(把专家动作当作标签)。优点是不需要设计奖励、不需要探索;缺点是学生犯了专家没犯过的错之后,会进入专家从未示范过的状态,从而”越错越离谱”(第 8 讲详细讨论)。
- 强化学习:四个特征全都有。反馈是评价性的(evaluative):“你这次得了 3 分”,但没人告诉你正确答案是什么、能不能得更高。
2.6 一个常见误区:RL 不就是”标签换成奖励的监督学习”吗?
不是。关键差别有三点:
| 监督学习 | 强化学习 | |
|---|---|---|
| 反馈类型 | 指导性:告诉你正确答案 | 评价性:只告诉你有多好 |
| 数据分布 | 固定的、独立同分布(i.i.d.) | 由智能体自己的策略决定,前后相关 |
| 反馈时机 | 每个样本立即有标签 | 常常延迟,要做信用分配 |
举个例子:监督学习像是做练习题后看参考答案;RL 像是写作文后只拿到一个分数”72 分”——你不知道哪里扣了分,也不知道满分作文长什么样,还得自己决定下一篇作文怎么改。
3. 序贯决策的形式化框架
前两节都是直觉。从这里开始,我们把直觉翻译成数学语言。这一步很关键:只有形式化了,才能设计算法、证明性质。
3.1 智能体与世界的交互循环
动作 a_t
┌──────────────────────────┐
│ ▼
┌─────────┐ ┌─────────┐
│ 智能体 │ │ 世界 │
│ (Agent) │ │ (World) │
└─────────┘ └─────────┘
▲ │
└──────────────────────────┘
观测 o_t,奖励 r_t
在离散时间 上,每一步:
- 智能体选择一个动作(action) ;
- 世界根据动作发生变化,返回一个观测(observation) 和一个奖励(reward) (一个实数);
- 智能体接收 ,进入下一步。
为什么用离散时间? 现实世界是连续的,但计算机做决策天然是一步一步的(每隔 0.01 秒控制一次机器人,每天调整一次药量)。离散时间让数学简洁得多。
奖励是一个标量(一个数):这是一个很强的设计选择。它意味着所有目标都要被压缩成一个数字。
代码对应:
01_agent_environment_loop.py中的run_episode函数就是这个循环的直接实现,MarsRoverEnv.step就是”世界”的那一半。
3.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)
历史是到目前为止发生的一切:
原则上,智能体可以根据完整的历史来做决策。但历史会越来越长,直接用它做决策不现实。
状态是对历史的一个”总结”,用来决定下一步做什么:
这里的 可以是任何函数——比如”只取最近一次观测” ,或者”取最近 4 帧画面拼在一起”(DQN 玩 Atari 就是这么做的)。
需要区分两个概念:
- 世界状态(world state):世界真实的完整状态,用来决定世界如何演化。智能体通常看不到(例如你看不到对手手里的牌,看不到病人体内的全部生理状态)。
- 智能体状态(agent state):智能体用来做决策的信息,是历史的函数 。
本课程中说”状态”时,一般指智能体状态。
3.5 马尔可夫假设
定义
状态 是马尔可夫的,当且仅当:
用人话说:只要知道现在的状态,过去的历史对预测未来就没有额外帮助。 或者说:“未来与过去在给定现在的条件下独立”(The future is independent of the past given the present)。
直觉:什么样的状态是马尔可夫的?
例 1:抛出去的球。 如果状态只有”球的位置”,它不是马尔可夫的——同一个位置,球可能在上升也可能在下降,你无法预测下一刻的位置,还需要知道之前的位置。如果状态是”位置 + 速度”,它就是马尔可夫的(忽略空气扰动等),牛顿定律告诉你下一刻的位置和速度只取决于当前的位置和速度。
例 2:Atari 游戏。 只看一帧画面,你不知道小球朝哪个方向飞(和例 1 一样)。DQN 把最近 4 帧叠在一起作为状态,让状态”近似”马尔可夫。
例 3:血压。 只用当前一次血压读数作为状态,大概率不马尔可夫——血压还受最近几天是否运动、是否服药、睡眠等因素影响。
为什么马尔可夫假设这么流行?
- 总能被满足:取 (整个历史就是状态),马尔可夫性自动成立。所以马尔可夫假设在理论上不失一般性。
- 实践中常常近似成立:很多时候,最近的一次或几次观测就包含了足够信息。
- 让问题可计算:有了马尔可夫性,我们只需要为每个状态(而不是每段历史)学习价值和决策。后面的贝尔曼方程、动态规划、TD 学习全部依赖这个假设(第 8.7 节推导贝尔曼方程时你会亲眼看到它在哪一步被用到)。
状态设计的权衡
| 状态包含的信息越多 | 状态包含的信息越少 |
|---|---|
| 越接近马尔可夫 | 越可能违反马尔可夫性 |
| 状态数越多,需要越多的数据和计算 | 状态数少,学习快 |
| 泛化越难(每个状态见得少) | 泛化容易 |
状态表示的选择会影响:计算复杂度、所需数据量、最终性能。 这是 RL 实践中最重要(也最容易被忽视)的设计决策之一。
代码对应:
02_markov_chain.py中的empirical_markov_check用数据验证马尔可夫性:在火星车链中,“上一步在哪”并不影响”下一步去哪”的概率。
3.6 完全可观测 vs 部分可观测
- 完全可观测:智能体能看到世界的真实状态, 且满足马尔可夫性。这种问题建模为马尔可夫决策过程(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 出发)
- 状态:探测车的位置 ,共 7 个。
- 动作:
TryLeft(尝试向左)和TryRight(尝试向右)。之所以叫”尝试”,是因为动作可能失败(比如轮子打滑),世界是随机的。 - 奖励:在 有一个”还不错”的科学目标,奖励 +1;在 有一个”非常好”的科学目标,奖励 +10;其他位置奖励为 0。
这个例子虽然小,但已经包含了 RL 的主要张力:
- 延迟后果:从 出发,往右走要走 3 步才拿到 +10,中间都是 0;往左走也要 3 步才拿到 +1。
- 探索:如果智能体一开始不知道 有 +10,而它碰巧先往左走发现了 +1,它可能就”满足”于 +1 了。
- 随机性:动作可能失败。
代码对应:
01_agent_environment_loop.py实现了这个环境,并比较”随机走""一直往左""一直往右”三种智能体。下标约定:讲义里状态写作 (从 1 开始),代码里用
0,...,6(Python 从 0 开始计数)。代码里的状态i对应讲义里的 。
5. RL 智能体的三大组件
一个 RL 智能体通常包含以下一个或多个组件:
| 组件 | 回答的问题 | 数学对象 |
|---|---|---|
| 模型(Model) | 世界会怎样响应我的动作? | , |
| 策略(Policy) | 在这个状态下我该做什么? | 或 |
| 价值函数(Value function) | 这个状态(在当前策略下)有多好? |
5.1 模型(Model)
模型是智能体对”世界如何运转”的表示,包括两部分:
- 转移模型(transition / dynamics model):预测下一个状态
- 奖励模型(reward model):预测即时奖励
重要:模型可能是错的! 模型是智能体”脑中”的世界,不一定等于真实世界。
例:火星车的真实转移是”TryRight 有 80% 概率成功右移”,但智能体刚开始只试了几次,它的模型可能认为是”50% 右移、50% 原地不动”,并且它还没到过 ,模型里所有位置的奖励都是 0。基于错误的模型做规划,会得到糟糕的决策。
5.2 策略(Policy)
策略决定智能体在每个状态下如何选择动作。它是一个从状态到动作的映射:
- 确定性策略(deterministic policy):每个状态对应一个确定的动作
- 随机策略(stochastic policy):每个状态对应一个动作的概率分布
例:火星车的一个确定性策略——“在所有状态都 TryRight”:
| 状态 | |||||||
|---|---|---|---|---|---|---|---|
| TryRight | TryRight | TryRight | TryRight | TryRight | TryRight | TryRight |
为什么需要随机策略? 三个原因:(1) 探索——偶尔做随机动作才能发现新东西;(2) 博弈——石头剪刀布中任何确定性策略都会被对手利用;(3) 部分可观测时,随机策略有时比任何确定性策略都好。
5.3 价值函数(Value Function)
价值函数衡量”在策略 下,从某个状态出发,未来能获得多少奖励”:
其中 是折扣因子,表示”未来的奖励打多少折”(8.4 节详细讨论)。
价值函数的作用:它把”延迟后果”浓缩成一个数字。有了它,比较两个状态、两个动作的好坏就变得容易——选择能到达更高价值状态的动作。这正是解决信用分配问题的关键工具。
例:在”一直 TryRight”策略下,如果 (只看眼前),那么 ,恰好等于每个状态的即时奖励。 时,靠近 的状态价值会更高,因为它们”很快就能拿到 +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 的数据是智能体自己收集的。不探索,数据就有盲区,而有盲区的数据会让智能体继续不探索——恶性循环。
6.3 评估(Evaluation)vs 控制(Control)
- 评估(evaluation / prediction):给定一个策略,它有多好?(计算 )
- 控制(control):找到最好的策略。(求 )
评估是控制的基础:要改进一个策略,先得知道它现在有多好。本讲的 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)是一个二元组 :
- :有限的状态集合,;
- :转移模型,,表示从状态 转移到 的概率。
它是无记忆的:下一个状态只取决于当前状态(马尔可夫性)。没有动作,没有奖励。
7.3 转移矩阵
当状态有限时,可以把 写成一个 的矩阵:
怎么读这个矩阵:第 行第 列 = “现在在 ,下一步到 的概率”。行 = 从哪里来,列 = 到哪里去。
转移矩阵必须满足(这是代码里 check_transition_matrix 检查的内容):
- 所有元素 (概率非负);
- 每一行加起来等于 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
- 在 :0.6 概率留在原地,0.4 概率向右;
- 在 :0.4 向左,0.2 原地,0.4 向右;
- 在 :0.6 概率留在原地,0.4 概率向左。
对应的转移矩阵:
检查一下第 4 行: ✓。
7.5 采样轨迹(episode)
从 出发,按转移概率”掷骰子”,可以得到很多条不同的轨迹,例如:
每条轨迹都是这个随机过程的一次”实现”。采样的方法:在状态 时,按照 的第 行给出的概率分布抽一个下一状态。
代码对应:
02_markov_chain.py中的sample_next_state和sample_trajectory。
7.6 状态分布如何随时间演化
与其看单条轨迹,不如问一个更”整体”的问题: 步之后,火星车在各个位置的概率分别是多少?
用一个行向量 表示 时刻的状态分布,。那么:
直觉:到达 的概率 = 对所有”来源” 求和:“在 的概率” × “从 走到 的概率”。这正是全概率公式。写成矩阵形式就是行向量乘矩阵。于是:
从 出发(),计算结果为:
| 步数 | |||||||
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0.4 | 0.2 | 0.4 | 0 | 0 |
| 2 | 0 | 0.16 | 0.16 | 0.36 | 0.16 | 0.16 | 0 |
| 5 | 0.102 | 0.125 | 0.182 | 0.180 | 0.182 | 0.125 | 0.102 |
| 10 | 0.136 | 0.141 | 0.147 | 0.151 | 0.147 | 0.141 | 0.136 |
| 50 | 0.143 | 0.143 | 0.143 | 0.143 | 0.143 | 0.143 | 0.143 |
观察:分布逐渐”扩散”开来,最终收敛到每个状态 ,并且与出发点无关。这个不再变化的分布叫平稳分布(stationary distribution) ,满足 。
为什么这对 RL 重要? 后面讲函数逼近和策略梯度时,“策略长期运行后在各状态停留的比例”会反复出现——它决定了哪些状态的误差更重要(经常访问的状态更重要)。
本例平稳分布恰好是均匀的,是因为这个 的每一列加起来也都等于 1(叫”双随机矩阵”)。一般的马尔可夫链平稳分布不均匀,而且有些链(比如周期性的链)根本不收敛。
7.7 从数据中估计转移矩阵——“学习模型”的第一个例子
如果我们不知道 ,只观察到一批轨迹,能不能把 估计出来?可以,方法非常朴素——数数:
这就是最大似然估计。它是”基于模型的 RL”中”学习模型”那一步最简单的版本。
边界问题:如果某个状态从来没出现过,分母是 0,怎么办?这时我们对它一无所知。代码里的处理是:给它一个均匀分布(“不知道就假设每种可能一样”),同时返回访问计数让调用者知道这一行不可信。这个”没见过的状态怎么办”的问题,在第 10 讲(离线 RL)和第 13 讲(探索)中会变成核心问题。
代码对应:
02_markov_chain.py中的estimate_transition_matrix,你会看到数据越多,估计误差越小。
8. 马尔可夫奖励过程(MRP)
8.1 定义
马尔可夫奖励过程 = 马尔可夫链 + 奖励。它是一个四元组 :
- :有限状态集合;
- :转移模型 ;
- :奖励函数 ,在状态 获得的期望即时奖励;
- :折扣因子。
仍然没有动作。
当状态有限时, 可以写成一个长度为 的向量。火星车 MRP:
记号约定(重要,避免以后看书混乱):CS234 的约定是:在时刻 处于状态 ,获得奖励 ,然后转移到 。Sutton & Barto 教材的约定是:在 采取动作后,获得 并转移到 。两者只是下标差了 1,本质完全一样。本讲义遵循 CS234 的约定。
8.2 视界(Horizon)
视界 是每个回合(episode)的步数。
- 有限视界: 是一个有限的数,比如游戏有固定回合数。
- 无限视界:,过程永远继续下去。
如果视界是有限的,这个 MRP 叫有限 MRP。
8.3 回报(Return)
回报 是从时刻 开始到视界结束的折扣奖励之和:
注意区分:
- 奖励 :一步的即时信号。
- 回报 :从 开始的一整条未来的(折扣)奖励之和,是一个随机变量(因为未来的轨迹是随机的)。
- 价值 :回报的期望(8.5 节)。
一个极其有用的递归关系:
“从现在开始的回报 = 现在的奖励 + 打了折的’从下一步开始的回报’“。这个关系看起来平淡无奇,却是整个 RL 的基石——贝尔曼方程、TD 学习都是从它长出来的。在代码中,它让我们可以从后往前一次扫描算出每个时刻的回报(returns_for_every_timestep 函数),而不需要对每个 都重新求和。
8.4 折扣因子 :为什么要给未来打折?
这是初学者最常问的问题之一。有以下几个理由:
- 数学上的便利:无限视界时,如果不打折, 可能是无穷大,无法比较。有了 ,只要奖励有界 ,回报就有界:
- 避免在循环中无限累积:马尔可夫链中可能存在环,不打折时价值可能发散。
- 对未来的不确定性:我们对遥远未来的预测不太可靠(模型可能不准、世界可能变化),给它小一点的权重是合理的。
- 人和动物的行为:人确实更偏好即时奖励(今天的 100 元比一年后的 100 元更有吸引力)。
- 经济学类比:如果奖励是钱,今天的钱可以存银行生利息,所以未来的钱应当”折现”。
的两个极端:
- :完全短视,只关心即时奖励,。
- :未来的奖励和现在的一样重要。只有在回合一定会结束(有限视界或必然到达终止状态)时才安全。
有效视界(effective horizon):一个实用的直觉是,折扣因子 大约相当于”关注未来 步”:
| 0 | 0.5 | 0.9 | 0.99 | 0.999 | |
|---|---|---|---|---|---|
| 有效视界 | 1 | 2 | 10 | 100 | 1000 |
原因: 在 时大约衰减到 ,再往后的奖励权重越来越小。
本身是问题定义的一部分:不同的 定义了不同的”好”。 大,智能体有耐心、目光长远; 小,智能体急功近利。
8.5 状态价值函数
MRP 的状态价值函数 是从状态 出发的期望回报:
为什么要取期望? 因为从同一个状态出发,每次的轨迹都不一样,回报 是随机的。价值是”平均而言能拿多少”。
无限视界且 时, 与 无关(从 出发,无论现在是第几步,未来看起来都一样)——这叫平稳性。有限视界时价值会依赖剩余步数,这个细节第 2 讲再展开。
8.6 手算例子:火星车 MRP 的回报
设 ,从 出发、长度为 4 的几条轨迹,计算回报:
轨迹 1:,奖励为
轨迹 2:,奖励为
轨迹 3:,奖励为
思考: 大约是多少?直觉上,就是把无穷多条轨迹的回报取平均。这就引出了计算价值的第一种方法。
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
为什么可行:大数定律——独立同分布样本的平均值收敛到期望值。误差大约以 的速度缩小(想让误差减半,需要 4 倍的样本)。
优点:
- 简单,只需要能采样,不需要知道 的具体数值——这一点极其重要!它意味着即使模型未知,只要能与环境交互,就能估计价值。这正是第 3 讲”无模型策略评估”的基础。
- 不依赖马尔可夫假设。
缺点:
- 有随机误差(方差),需要大量样本。
- 无限视界必须截断到某个有限的 ,这会引入偏差。截断误差最多为 ,所以 要取得足够大(代码中的
recommended_horizon帮你算 取多大)。
方法二:解析解——利用贝尔曼方程
核心洞察:用 8.3 节的递归关系 。
推导 MRP 的贝尔曼方程(请逐行看懂每一步用了什么):
关键在倒数第二步:已知 后,“之前在 “这个信息对未来回报没有任何额外帮助——这正是马尔可夫性。如果状态不是马尔可夫的,这一步就不成立,贝尔曼方程就是错的。 这就是为什么 3.5 节说马尔可夫假设是后续一切算法的基础。
MRP 贝尔曼方程:
直觉:“一个状态的价值 = 在这里拿到的奖励 + 打了折的’下一步所在状态的平均价值’“。价值函数把”整个未来”压缩成了”一步 + 下一个状态的价值”。
写成矩阵形式:对所有 个状态同时写出上式,把 看成列向量:
即 。这是一个线性方程组!移项求解:
其中 是 的单位矩阵。
这个逆矩阵一定存在吗? 当 时一定存在。直觉理解: 的每一行都是概率分布, 作用在任何向量上都是”加权平均”,不会把向量的最大绝对值变大;乘上 后会严格缩小。因此 的特征值绝对值都小于 1, 不可能有零特征值,所以可逆。当 时,(因为 每行和为 1), 不可逆——这对应”不打折、永不终止时价值可能是无穷大”。
优点:一步得到精确解,没有随机误差。
缺点:
- 需要完全知道 和 ;
- 求逆(或解线性方程组)的计算量约为 。状态数 时约 次运算尚可接受, 时就不现实了。
实践提示:代码中用
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)| < 容差,停止
矩阵形式就是一行:。
直觉—— 是什么? 从 开始:
- :只看 1 步的价值(“如果只剩 1 步,能拿多少”);
- :看 2 步的价值;
- :看 步的价值(视界为 的有限 MRP 的价值)。
随着 增大,我们”看得越来越远”,而远处的奖励被 压得越来越小,所以 收敛到无限视界的 。
为什么一定收敛?——压缩映射的直觉:设真实价值为 ,它满足 。两式相减:
是加权平均,不会放大误差的最大绝对值;再乘以 ,误差至少缩小为原来的 倍:
每迭代一次,误差至少缩小到 倍。迭代 次后误差 初始误差。这种”每次都把距离按比例缩小”的操作叫压缩映射(contraction mapping),第 2 讲会严格证明,并用它证明价值迭代的收敛性。
- :每次误差减半,几十次迭代就收敛到极高精度;
- :每次只缩小 1%,误差缩小 10 倍大约需要 次迭代。
所以 越接近 1,迭代法越慢——这是一个很实际的现象,代码中可以亲眼看到。
优点:每次迭代只需 (稀疏时更少);可以随时停止得到近似解;是第 2 讲策略评估、价值迭代的直接原型。
缺点:仍需要知道 和 ; 接近 1 时收敛慢。
三种方法对比
| 蒙特卡洛 | 解析解 | 迭代法(DP) | |
|---|---|---|---|
| 需要知道 吗? | 不需要,能采样即可 | 需要 | 需要 |
| 结果 | 近似,有随机误差 | 精确 | 近似,误差可控到任意小 |
| 计算量 | 与样本数、视界成正比 | 每次迭代 | |
| 依赖马尔可夫性? | 不依赖 | 依赖 | 依赖 |
| 后续发展 | 第 3 讲 MC 策略评估 | 小规模问题的”标准答案” | 第 2 讲策略评估 / 价值迭代;第 3 讲 TD 学习 |
一个有趣的观察:蒙特卡洛”不用模型、但要等整条轨迹结束”;迭代法”用模型、每次只看一步”。能不能不用模型、又只看一步? 答案是时序差分(TD)学习——第 3 讲的主角。
代码对应:
03_markov_reward_process.py实现了三种方法,并对比结果。
8.8 结果:火星车 MRP 的价值
用解析解计算(代码中三种方法都会得到相近的结果):
| 0 | 1.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 10.00 |
| 0.5 | 1.53 | 0.37 | 0.13 | 0.22 | 0.85 | 3.59 | 15.31 |
| 0.9 | 6.91 | 6.05 | 6.87 | 9.61 | 15.01 | 24.58 | 40.97 |
| 0.99 | 136.25 | 137.16 | 141.54 | 149.50 | 161.23 | 177.03 | 197.30 |
逐行解读(请对照表格仔细想一想,这比记公式更重要):
- :价值 = 即时奖励,完全短视。
- :,因为待在 附近未来还能继续拿奖励。 最小:它离两个奖励都远。注意 : 本身奖励是 0,但它紧挨着 +10,“前途”比拿着 +1 的 更好。这就是价值 ≠ 奖励的生动例子。
- :远处的奖励更重要了,所有价值都变大,而且 被 超过了——看得越远,“离 +10 近一点”就越重要。
- :价值很大(上限是 ),而且各状态差距相对变小了——看得足够远时,从哪里出发区别没那么大(因为马尔可夫链最终会在所有状态间均匀游走,回忆 7.6 节的平稳分布)。
一个值得玩味的现象: 时 ,但 时 。价值最低的”谷底”位置随 而移动。你能解释为什么吗?(提示: 的 +1 和 的 +10,在不同耐心程度下,哪个的”引力”更大?)
9. 本讲总结
9.1 核心概念清单
- RL = 通过经验学习如何做出好的序贯决策。
- 四个核心特征:优化、延迟后果(信用分配)、探索(数据由自己的决策产生)、泛化。
- 交互循环:动作 → 观测 + 奖励 → 动作 → ……;目标是最大化期望累积奖励。
- 奖励设计很难:智能体会优化你写下来的奖励,而不是你心里的目标(奖励投机)。
- 状态是历史的函数;马尔可夫性:给定现在,未来与过去无关。它是贝尔曼方程成立的前提。
- 三大组件:模型(世界怎么变)、策略(怎么做)、价值函数(有多好)。
- 三组对立:规划 vs 学习、探索 vs 利用、评估 vs 控制。
- 马尔可夫链 → MRP → (下一讲)MDP 。
- 回报 ;价值 。
- MRP 贝尔曼方程 ;三种解法:蒙特卡洛(无需模型)、解析解(精确但 )、迭代法(压缩映射,逐步逼近)。
9.2 公式速查表
| 名称 | 公式 |
|---|---|
| 马尔可夫性 | |
| 状态分布演化 | , |
| 平稳分布 | |
| 回报 | |
| 回报递归 | |
| 回报上界 | |
| 价值 | |
| MRP 贝尔曼方程 | |
| 矩阵形式 | |
| 解析解 | |
| 迭代法 | |
| 压缩性质 | |
| 有效视界 |
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) |
| 部分可观测 MDP | POMDP | 老虎机 | 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,,一条轨迹为 。(a) 计算 ;(b) 用递归关系 从后往前算出 ,验证与 (a) 一致。
参考答案
奖励序列为 。
(a) 。
(b) ;;;; ✓。
可以用 03_markov_reward_process.py 中的 returns_for_every_timestep([0, 0, 10, 10, 0], 0.9) 验证。
练习 4(贝尔曼方程):考虑一个只有 2 个状态的 MRP:,,。用贝尔曼方程手算 。
参考答案
状态 2 只会停在自己,奖励为 0:。 状态 1:。 直觉检验:在状态 1 每步有一半概率留下,所以期望能拿到 ✓(每一步”留在状态1且折扣”的联合因子是 )。
练习 5(折扣因子):如果一个 MRP 中所有奖励都是 ,,那么每个状态的价值是多少?这和转移矩阵 有关吗?
参考答案
,与 无关——无论走到哪里奖励都一样。可以验证 满足 :(因为 )。 这个例子也说明:给所有奖励加一个常数,价值会整体平移 ,不改变状态之间的相对好坏。
练习 6(迭代法收敛)★:运行 03_markov_reward_process.py,观察迭代法在 时分别需要多少次迭代收敛。相邻两次迭代的变化量之比大约是多少?和 有什么关系?
参考答案
比值会很快稳定在 附近(0.5、0.9、0.99)。原因:相邻两次的变化量满足 ,而 有一个特征值恰好是 1(对应全 1 向量,因为每行和为 1), 在这个方向上有分量,所以长期来看每次迭代变化量恰好乘以 。 迭代次数大约是 ,即与 成正比: 越接近 1,收敛越慢。这印证了压缩映射的分析:误差每次至少缩小到 倍(本例中恰好是 倍,压缩上界是”紧”的)。
练习 7(思考题):为什么说”蒙特卡洛方法不依赖马尔可夫性,而贝尔曼方程依赖”?请指出贝尔曼方程推导中具体哪一步用到了马尔可夫性,并构造一个非马尔可夫的例子说明这一步会出错。
参考答案
蒙特卡洛直接按定义对真实回报取平均,只要轨迹是从真实过程采样的,不管状态是否马尔可夫,平均值都收敛到 (这里的期望是对真实数据分布而言)。 贝尔曼方程推导中 这一步用到了马尔可夫性。 反例:一条走廊,观测只有”是否在墙边”。从左墙边出发和从右墙边出发,下一步都观测到”不在墙边”,但它们的未来完全不同(一个在往右走,一个在往左走)。此时”不在墙边”这个状态的价值取决于你是从哪里来的,贝尔曼方程中的 无法用一个数表示。
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)。你会看到:
- 一旦固定一个策略 ,MDP 就变回一个 MRP,本讲的三种方法可以直接用来评估这个策略;
- 如何从”评估”走向”改进”:策略迭代和价值迭代;
- 本讲迭代法中的”压缩映射”直觉,如何变成严格的收敛性证明。
下一讲之前,建议你:跑通 code/lecture01/ 下的 4 个脚本,并完成练习 3 和练习 6。