佐治亚理工-CS8803-强化学习导论笔记-全-
佐治亚理工 CS8803 强化学习导论笔记(全)
001:课程介绍 🎯
在本节课中,我们将要学习佐治亚理工学院《强化学习导论》课程的第一讲内容。本节将介绍开设这门课程的原因、课程目标以及将要涵盖的核心主题。
课程背景与动机
上一节我们介绍了课程的基本信息,本节中我们来看看开设这门课程的背景与动机。
我们之前已经教授过一门包含强化学习内容的机器学习课程。那门课程中的强化学习部分是一个小型专题课程。
然而,在教授那个小型课程时,我们发现有许多主题未能深入探讨。由于强化学习是一个我们非常感兴趣的领域,因此我们决定将其扩展为一门完整的独立课程。
课程核心内容:理论与实践
在了解了课程背景后,本节我们将深入探讨本课程的两个核心组成部分:理论部分与实践部分。
理论部分
理论部分将深入研究强化学习算法的数学基础与理论性质。以下是理论部分将涵盖的核心主题:


- 算法收敛性:研究算法是否以及如何收敛到最优解。
- 收敛速度与样本复杂度:分析算法收敛所需的时间或步数,并为其可能犯的错误次数设定界限。其核心思想可以用遗憾界(Regret Bound) 来描述,即算法累积奖励与最优策略累积奖励之间的差值上限。
- 非收敛情形:探讨在哪些情况下算法可能无法收敛。



实践部分
实践部分将侧重于强化学习算法的具体实现与应用。以下是实践部分将涉及的主要内容:
- 算法实现:我们将更多地动手实现各种强化学习算法。
- 练习系统:每节课都会配有练习,我们将使用一个名为“Burla”的自建系统来完成。
- 核心算法:课程将深入讲解如时序差分学习(Temporal Difference Learning) 和 TD(λ) 算法等关键主题。TD(λ)算法的更新公式可以表示为:
V(S_t) ← V(S_t) + α [R_{t+1} + γV(S_{t+1}) - V(S_t)] e_t
其中,e_t是资格迹,α是学习率,γ是折扣因子。
总结



本节课中,我们一起学习了开设这门《强化学习导论》课程的原因。本课程旨在对强化学习进行更深入、更全面的探讨,其内容将均衡地覆盖理论分析(如收敛性、性能边界)与实践应用(如算法实现、编程练习)两大方面,为初学者系统性地掌握强化学习奠定基础。
002:让我们再次穿越时空!⏳
在本节课中,我们将回顾决策与强化学习的一些核心概念。这些内容是理解后续更复杂主题的基础。
课程概述

决策与强化学习是机器学习的一个重要分支。它关注智能体如何通过与环境交互来学习最优行为策略。
课程名称讨论

课程的名称是“决策与强化学习”。关于名称中连字符的使用,存在一个语法细节:通常在“决策”和“强化学习”作为复合名词修饰另一个名词时,才需要添加连字符。这让人回想起在机器学习课程中介绍本部分内容时,有过类似的讨论。

内容回顾的必要性

尽管部分内容可能重复,但课程开始时回顾一些核心材料是绝对重要的。这有助于巩固基础,确保所有学习者站在同一起跑线上。
采用“闪回”方式


为了高效地完成这次回顾,我们决定采用一种“闪回”的方式。这意味着我们将整合之前课程中的相关视频材料,直接呈现核心内容,而不是重新录制。这种方法可以节省时间,让教学重点更加突出。

核心概念:马尔可夫决策过程
在强化学习中,马尔可夫决策过程 是描述序贯决策问题的标准数学模型。一个MDP通常由以下元素构成:
- 状态集合 (S):环境所有可能情况的集合。
- 动作集合 (A):智能体所有可能行为的集合。
- 转移概率 (P):在状态
s执行动作a后,转移到状态s‘的概率,通常表示为P(s'|s, a)。 - 奖励函数 (R):在状态
s执行动作a后,转移到状态s‘所获得的即时奖励,通常表示为R(s, a, s')或期望奖励R(s, a)。 - 折扣因子 (γ):一个介于0和1之间的数,用于衡量未来奖励的当前价值。
智能体的目标是学习一个策略 (π),即一个从状态到动作的映射(π: S -> A 或 π(a|s)),以最大化长期累积奖励(即回报)。

回报 G_t 的计算公式为:
G_t = R_{t+1} + γ * R_{t+2} + γ^2 * R_{t+3} + ... = Σ_{k=0}^{∞} γ^k * R_{t+k+1}



总结


本节课中,我们一起回顾了决策与强化学习课程的基本框架和核心概念——马尔可夫决策过程。我们明确了学习目标是寻找最大化长期回报的策略。理解MDP是打开强化学习大门的钥匙,在接下来的课程中,我们将基于此构建各种学习算法。
004:决策制定与强化学习 🧠
在本节课中,我们将学习三种主要机器学习范式之间的核心区别,并重点介绍强化学习的独特之处。我们将从监督学习和无监督学习的回顾开始,然后深入探讨强化学习的基本形式。
三种学习范式概述
上一节我们介绍了课程的整体框架,本节中我们来看看三种核心学习范式的具体区别。它们分别是监督学习、无监督学习和强化学习。虽然它们彼此相关,但将其视为独立的类别进行思考非常有帮助。
监督学习 📊
监督学习通常表现为函数逼近的形式。
其核心过程是:给定一组输入X和对应输出Y的配对数据。
公式表示:
给定数据:{(X1, Y1), (X2, Y2), ..., (Xn, Yn)}
学习的目标是找到一个函数F,使得该函数能够将新的输入X映射到正确的输出Y。
目标公式:
学习函数 F,使得 F(X_new) -> Y_new

无监督学习 🔍
无监督学习与监督学习形式相似,但关键区别在于输入数据。

其核心过程是:只给定一组输入X,而没有对应的标签Y。
公式表示:
给定数据:{X1, X2, ..., Xn}
学习的目标是找到一个函数F,该函数能对你所见的X数据集给出一个紧凑的描述或结构。

目标公式:
学习函数 F,用于描述或聚类 {X}
我们通常称此为聚类或描述任务,而非函数逼近。

强化学习 🎮
现在,我们进入强化学习。强化学习这个术语在不同领域有多种含义,但在此课程中,我们将在相对特定的语境下讨论它。
从表面上看,强化学习与监督学习很像。
其核心过程是:我们同样会被给予一串配对数据。
公式表示:
给定数据:某种形式的配对序列
并且,我们同样需要尝试学习某个函数。

然而,在函数逼近(即监督学习)的情况下,我们的目标是明确的映射。
监督学习目标:
学习从 X 到 Y 的映射关系

本节课中我们一起学习了机器学习中监督学习、无监督学习和强化学习三种范式的基本定义与形式区别。我们明确了监督学习是带有标签的映射学习,无监督学习是对无标签数据的结构描述,而强化学习则涉及在特定序列数据中学习决策函数,为后续深入其具体框架奠定了基础。
005:世界 - 1


在本节课中,我们将学习强化学习中的一个核心概念:世界。我们将通过一个具体的例子——网格世界——来理解智能体如何与环境交互,以及如何定义状态、动作和目标。
Michael,这是一个世界。事实上,为了本次讨论的目的,它就是整个世界。可以想象,整个宇宙都能用这张图很好地描述。



这被称为网格世界,强化学习领域的研究者喜欢用它来思考,因为它能很好地近似整个宇宙的复杂性。
这个特定的世界是一个3行4列的网格。



网格中的每个位置可以用坐标表示,例如 (1,1), (2,1), (3,1), (4,1), (1,2), (1,3) 等等。
为了本次讨论,我们可以将这个世界视为一种游戏。你从一个状态开始,我们称之为起始状态。你可以执行动作,即上、下、左、右四个方向之一。目的是在这个世界中游走,最终到达这里的目标,也就是这个绿色小点。Michael,你看到了吗?在任何情况下,都必须避开红色点。
在这个特定例子中,向上、向下、向左、向右的动作效果符合直觉。但如果你发现自己处于边界,例如左上角这个位置,然后尝试向上移动,你会停留在原地。





如果你尝试向左移动,也会停留在原地。但如果你向右移动,你确实会到达下一个方格。





明白了吗?我想是的。最后还有三点需要注意。


第一,这里的黑色小方格是一个你无法进入的区域,它的作用就像一堵墙。
第二,绿色方格是目标。




本节课中,我们一起学习了强化学习中的“世界”概念。我们通过一个3x4的网格世界例子,定义了状态(网格位置)、动作(上、下、左、右)、起始状态、目标状态(绿色格子)以及需要避开的危险状态(红色格子)和障碍(黑色格子)。我们还了解了在边界处执行动作的规则。下一节,我们将在这个世界的基础上,探讨智能体如何通过试错来学习最优策略。
007:引入不确定性的世界
在本节课中,我们将学习如何在一个存在不确定性的环境中进行决策。我们将探讨当智能体的行动结果不再完全确定时,如何计算不同行动序列的成功概率。
上一节我们介绍了在确定性环境中的路径规划问题。本节中我们来看看当世界变得不确定时,情况会发生怎样的变化。
引入不确定性
在之前的问题中,每次执行一个动作都会产生预期的结果。现在,我要在环境中引入一点不确定性或随机性。
具体来说,当你执行一个动作时,它只有80%的概率会正确执行。这意味着,如果你选择向上移动,在80%的情况下,只要能够向上移动,你就会向上移动。
动作的随机结果

剩下的20%概率,你所执行的动作会导致你向一个垂直方向移动。当然,对于每个动作,存在两个可能的垂直方向。


例如,如果你试图向上移动,那么你可能会向左或向右移动。这20%的概率会被均匀地分配到这两个方向上。
以下是动作“向上”在起始状态下的可能结果:
- 80%概率:成功向上移动。
- 10%概率:向右移动(撞墙,停留在原地)。
- 10%概率:向左移动(撞墙,停留在原地)。
因此,如果你在起始状态执行“向上”动作,你有80%的机会向上移动,有10%的机会试图向右移动但撞墙,还有10%的机会试图向左移动但撞墙,这两种情况都会让你停留在起始位置。



不确定性下的路径规划

好的,现在是我的测验问题。Michael,你是否还记得我们之前提出了两个动作序列,而我决定保留的那个序列是:上, 上, 右, 右, 右。

本节课中我们一起学习了如何在动作结果具有不确定性的环境中思考问题。我们明确了当动作执行成功率为80%,失败时随机转向垂直方向的具体规则,并分析了在起始状态下执行“向上”动作的概率分布。这为后续计算复杂路径的成功概率奠定了基础。
008:世界-2 解答
在本节课中,我们将学习如何计算一个智能体在随机环境中,通过一系列动作成功到达目标状态的概率。我们将通过一个具体的网格世界示例,详细拆解计算过程。
问题概述
我们面临一个网格世界问题。智能体从起始状态出发,计划执行一系列动作:上、上、右、右、右。每个动作有80%的概率按预期执行,有10%的概率会滑向预期方向的左侧,另有10%的概率滑向右侧。我们需要计算智能体最终成功到达目标状态的概率。

核心概念与公式

计算的核心是理解动作执行的概率模型。每个动作的成功执行是独立事件。因此,如果所有动作都按计划执行,其联合概率是每个动作成功概率的乘积。
公式:P(所有动作均成功) = (成功概率)^(动作数量)
在我们的案例中,成功概率为 0.8,动作数量为 5。
计算过程详解

上一节我们介绍了问题的基本设定,本节中我们来看看具体的计算步骤。

步骤一:计算理想路径的概率

首先,我们计算智能体严格遵循预定路径(上、上、右、右、右)且没有任何动作失误的概率。
以下是计算过程:
- 每个动作独立成功的概率是
0.8。 - 五个动作都成功的概率是
0.8的五次方。
通过计算,我们得到:
0.8^5 = 0.32768

这意味着,有大约 32.768% 的概率,智能体会完美地沿着预定路径到达目标。
步骤二:考虑意外成功的可能性
然而,计算结果 0.32768 与最终答案 0.32776 存在微小差异。这提示我们,可能存在其他非预期的动作序列,也能让智能体“意外”抵达目标。
我们需要分析:在执行预定命令序列时,是否可能因为动作的“滑移”(即那20%的意外情况),反而阴差阳错地到达目标?
例如:
- 第一步执行
上,但有10%的概率滑向右。 - 如果第一步滑向了
右,那么第二步执行上时,又有10%的概率再次滑向右。 - ……
这些由“错误”构成的路径,叠加起来,贡献了那微小的额外概率(0.00008),使得总概率从 0.32768 增加到了 0.32776。
总结
本节课中我们一起学习了在随机环境中计算路径概率的方法。
- 基础计算:对于独立事件,理想路径的概率是各动作成功概率的连乘,即
P = (0.8)^5 = 0.32768。 - 全面分析:在强化学习问题中,需要考虑到所有可能通向目标的状态转移,包括那些由非预期动作构成的路径。将这些小概率事件相加,才能得到精确的总成功概率
0.32776。

这个例子强调了在概率性环境中建模时,考虑所有可能状态转移的重要性。
009:马尔可夫决策过程 - 1
在本节课中,我们将学习强化学习的核心建模框架——马尔可夫决策过程。我们将了解其基本构成要素,并通过一个简单的网格世界示例来直观理解这些概念。
马尔可夫决策过程是我们讨论强化学习,至少是单智能体强化学习时,将使用的主要框架。它被称为马尔可夫决策过程。这个框架旨在捕捉类似下图所示的世界。

它通过以下方式进行划分。

状态

我们定义存在状态。状态是一组标记的集合,这些标记以某种方式代表了智能体可能处于的每一种“情形”。

那么,在我们一直讨论的网格世界中,状态会是什么呢?从一刻到另一刻唯一变化的是位置。






我认为,我所在的每一个不同的网格位置就是一个状态。可能还存在表示“成功完成”或“失败完成”的状态。但让我们坚持一个简单的设定。

我喜欢这个简单的设定,因为它非常容易理解。所以,在所有可能到达的状态中,总共有 4 行乘以 3 列,再减去 1 个永远无法到达的状态。



本节课中,我们一起学习了马尔可夫决策过程的基本概念,并重点介绍了其第一个核心组成部分——状态。状态是描述智能体所处环境情形的抽象表示。在网格世界示例中,每个可到达的网格位置都可以被视为一个独立的状态。理解状态是构建MDP模型的第一步,在后续章节中,我们将继续探讨其他组成部分,如动作、转移概率和奖励。
010:马尔可夫决策过程 - 2
在本节课中,我们将继续学习马尔可夫决策过程的核心组成部分。我们将重点介绍动作和转移模型这两个关键概念,并理解它们如何共同定义了智能体与环境的交互规则。
上一节我们介绍了状态,它是描述环境在特定时刻状况的变量。本节中我们来看看智能体在环境中可以做什么,以及环境如何响应这些行为。


动作

动作是智能体在特定状态下可以执行的操作。在之前提到的网格世界例子中,智能体在每个格子(状态)中可以做出的决策就是动作。
以下是网格世界中智能体可用的动作集合:
- 向上移动
- 向下移动
- 向左移动
- 向右移动
需要注意的是,在这个例子中,智能体没有“不移动”的选项,但理论上可以存在。动作集合可以包含任何你能想象到的操作,例如“传送”。通常,我们将智能体(机器人、游戏角色等)所有允许执行的操作集合称为动作集。


在更一般化的形式中,可执行的动作集可能是状态的函数,因为在某些状态下某些动作可能不被允许。但大多数情况下,我们将其视为一个固定的动作集合,那些在特定状态下无效的动作会被简单地视为没有效果。
转移模型
理解了状态和动作后,我们来看转移模型,有时也称为转移函数。它定义了环境动态变化的核心规则。
转移模型本质上是一个关于三个变量的函数:当前状态 s、执行的动作 a 和下一个可能的状态 s‘。其数学形式可以表示为:
T(s, a, s') = P(s' | s, a)
这个公式表示:在状态 s 下执行动作 a 后,环境转移到状态 s‘ 的概率。
在之前的网格世界例子中,当我们执行“向上”动作时,有多个可能的结果(转移到上方格子、留在原地或滑向两侧),转移模型就精确地描述了每种结果发生的概率。



本节课中我们一起学习了马尔可夫决策过程的两个基本要素:动作和转移模型。动作定义了智能体的选择空间,而转移模型则量化了环境对这些选择的随机响应。它们是构建智能体决策逻辑和理解环境动态的基础。下一节,我们将在此基础上引入奖励函数,它定义了智能体行为的目标。
011:马尔可夫决策过程 - 3

在本节课中,我们将要学习马尔可夫决策过程(MDP)中的一个核心概念——马尔可夫性质。我们将探讨它的定义、重要性,以及它如何简化我们对状态转移的建模。


上一节我们介绍了MDP的基本框架,本节中我们来看看一个嵌入其中的关键特性。
现在,我在这里实际上隐含了两个重要的点。第一个就是所谓的马尔可夫性质。你还记得马尔可夫性质是什么吗,Michael?

马尔可夫性质意味着,你无需考虑过去任何比最近状态更早的信息。这完全正确。马尔可夫性质就是只有当前状态是重要的。
这个性质必须一代一代地传给我,因为……你知道的。马尔可夫性质,完全正确,说得很好,Michael。那么这意味着什么呢?

这意味着我们的转移函数,它告诉你给定当前状态S并采取动作A后,你进入某个状态S‘的概率,只依赖于当前状态S。
如果它还依赖于你20分钟前的状态,那么你就必须在这里加入更多的S,那样你就违反了马尔可夫性质。这就像……历史学家会讨厌这个吗?嗯,你永远无法从历史中学到任何东西?不,你应该从历史中学习,否则注定会……我也不知道。让我编点什么。重复它。
说得对,历史学家可能不喜欢这个,但数学家有办法让他们接受。数学家让你接受它的方式是,指出你可以通过状态扩展将非马尔可夫过程转化为马尔可夫过程。


本节课中我们一起学习了马尔可夫性质。我们明确了它的定义:系统的未来状态仅依赖于当前状态,而与过去状态的历史无关。这个性质是马尔可夫决策过程建模的基石,它极大地简化了状态转移概率 P(s' | s, a) 的描述,使我们能够专注于当前状态和动作,而不必追踪冗长的历史序列。理解这一点对于后续学习价值函数和最优策略至关重要。
012:马尔可夫决策过程 - 4 - 策略与最优策略

在本节课中,我们将学习马尔可夫决策过程(MDP)的解决方案,即策略。我们将了解策略的定义、作用,并特别介绍最优策略的概念。
上一节我们介绍了马尔可夫决策过程的基本构成,本节中我们来看看如何解决一个MDP问题。
策略:MDP的解决方案
说到解决方案,这是你需要知道的最后一点内容。这定义了一个问题,但当我们遇到问题时,我们也希望拥有一个解决方案。
马尔可夫决策过程的解决方案被称为策略。
策略的作用是,它是一个函数,接收一个状态作为输入,并返回一个动作。换句话说,对于你所在的任何给定状态,它告诉你应该采取的动作。
它就像一个提示。不,它直接告诉你这就是应该采取的动作。我的意思是,你并非必须执行它。但从马尔可夫决策过程的角度来看,我们认为这就是将要采取的动作。
我明白了。所以它更像是一个指令。是的,它是一个命令。
以上就是策略的全部内容。策略是马尔可夫决策过程的一个解决方案。
最优策略
存在一种特殊的策略,我在这里写作 π* 或最优策略。
这是能够最大化你长期预期收益的策略。
在所有你可能采取的策略或决策中,这是能够优化你在整个生命周期中将要获得或预期获得的奖励总量的策略。
就像在最后。嗯,是的,在最后,或者在任意给定的时间点。从马尔可夫决策过程的角度来看,你获得了多少奖励。
不一定非要有终点。不过在这个例子中,你什么也得不到。然后最后你会得到回报,或者如果你掉进红色方块,你会得到负回报。
所以实际上,你的问题指出了一个非常重要的点。我早先在谈论三种学习类型时提到过。
总结
本节课中我们一起学习了马尔可夫决策过程的解决方案——策略。我们了解到策略是一个从状态映射到动作的函数,它定义了在给定状态下应采取的行为。我们还介绍了最优策略 π* 的概念,它是所有可能策略中能够最大化长期预期总收益的那个策略。理解策略是解决强化学习问题的关键一步。
013:更多关于奖励 - 1 - ⏳
在本节课中,我们将探讨强化学习中的一个核心概念:延迟奖励。我们将了解它如何使强化学习问题区别于监督学习,并通过具体例子来理解其含义。


上一节我们介绍了马尔可夫决策过程的基本框架。本节中,我们来看看强化学习问题的一个关键特性:延迟奖励。
强化学习与之前学习的监督学习问题不同,其核心区别不仅在于“奖励”本身,更在于“奖励的延迟性”。

那么,什么是延迟奖励呢?让我们回顾一下之前设置的问题:我们试图从网格的左下角出发,最终到达标有“+1”的目标格子。这里存在一个动作序列的概念。


在强化学习的情境中,至少在我们目前讨论的范围内,存在这样一种问题模式:你采取一个动作,它会将你置于某个状态;然后你采取另一个动作,又将你置于另一个状态;如此反复。最终,你可能到达一个获得+1奖励的状态,也可能到达一个获得-1惩罚的状态。
这里真正发生的是:你采取的动作会为你后续的动作创造条件,后续的动作又为更后续的动作创造条件。只有到了最后,你才知道之前采取的那些特定动作究竟有多好。因此,这里的奖励不仅仅是关于在每个状态即时获得奖励,更是关于延迟获得的奖励——你并不知道当前的即时动作将如何影响未来的结果。
让我用一个具体的例子来说明这一点。
假设你下过国际象棋。我们进行了一盘漫长的对局,可能走了60、61或62步。

本节课中,我们一起学习了延迟奖励的概念。我们了解到,在强化学习中,智能体的动作会形成一个序列,其最终效果(即获得的奖励)是延迟体现的,这与监督学习中每个样本都有即时标签的情况截然不同。理解这一点是掌握强化学习问题本质的关键。
014:深入理解奖励 - 2
在本节课中,我们将更深入地探讨马尔可夫决策过程中的奖励概念。我们将通过一个具体的网格世界示例,分析如何设置奖励以引导智能体学习到达目标状态,并理解即时奖励与长期回报之间的关系。
上一节我们介绍了信用分配问题,本节中我们来看看如何通过设计奖励函数来解决这类问题。
奖励函数的设计
在网格世界的例子中,我们通常从起点状态出发,目标是到达标有+1或-1奖励的终止状态。为了引导智能体学习,我们需要为所有非终止状态设置奖励。
以下是为网格世界设置奖励的一种常见方式:

- 非终止状态奖励:
R(s) = -0.04(对于所有非终止状态s) - 终止状态奖励:
R(目标+) = +1,R(目标-) = -1



这意味着,除了两个已标记的终止状态,智能体在每一个其他状态都会收到一个微小的负奖励(-0.04)。

理解负奖励的作用
你可能会想,如果每一步都有惩罚,那么最好的策略是不是永远不动?答案是否定的。
让我们思考一下:虽然每一步都有-0.04的小惩罚,但停留在非目标状态意味着永远无法获得终止状态的大额正奖励(+1)。智能体的目标是最大化从起点开始累积的总回报,而不仅仅是避免即时的小惩罚。

因此,为了获得最终的+1奖励,智能体愿意承受路径上的一系列小负奖励。这个微小的负奖励(通常称为“生存成本”或“步进惩罚”)起到了关键作用:它鼓励智能体寻找最短路径到达目标,而不是漫无目的地徘徊。


本节课中我们一起学习了如何通过设计奖励函数(包括生存成本)来引导智能体高效学习。我们明白了即时的小额负奖励可以激励智能体尽快找到到达高奖励目标状态的路径,这是解决序列决策问题的基础。在后续课程中,我们将看到这类信用分配和奖励设计问题会反复出现。
015:更多关于奖励 - 3
在本节课中,我们将通过一个具体的网格世界示例,探讨不同奖励设置对最优策略的影响。我们将分析在两种不同奖励结构下,智能体应如何选择行动。
概述
我们有两个相同的网格世界环境,但它们的奖励结构不同。除了两个终止状态(吸收状态)外,其他所有状态的即时奖励被改变了。我们的任务是分析在这两种情况下,智能体在特定位置应选择的最佳行动方向。
问题设置
以下是两个网格世界的图示。它们共享相同的布局,但非终止状态的奖励值不同。


- 顶部网格世界:在所有非终止状态中,智能体每步获得 +2 的奖励。
- 底部网格世界:在所有非终止状态中,智能体每步获得 -2 的奖励。
- 共同点:两个网格世界都有两个终止状态(吸收状态),分别提供 +1 和 -1 的奖励,之后游戏结束,不再获得任何奖励。

我们的目标是:为图中标出的四个相同位置(分别在上下两个网格中),判断智能体应该选择的最佳移动方向(上 U、下 D、左 L、右 R)。



核心概念分析
要解决这个问题,我们需要理解强化学习的核心目标:最大化累积奖励。智能体的决策不仅考虑即时奖励,更要考虑长期回报。
上一节我们介绍了奖励函数的基本概念,本节中我们来看看如何通过权衡即时与未来奖励来制定策略。

智能体的目标是最大化期望回报 G_t,其通用公式为:
G_t = R_{t+1} + γ * R_{t+2} + γ^2 * R_{t+3} + ...
其中 γ 是折扣因子(通常 0 ≤ γ < 1),R 是奖励。

在这个问题中,我们假设折扣因子 γ 小于1(例如 γ=0.9)。这意味着未来的奖励不如当前的奖励有价值。
策略推理
基于以上概念,我们可以对两种情况进行推理:
对于顶部网格(每步+2奖励):
- 智能体在到达终止状态前,每一步都能获得正奖励(+2)。
- 因此,智能体的最优策略是延迟到达终止状态,以收集尽可能多的+2奖励。
- 具体到行动选择,智能体应避开直接通往终止状态的路径,选择绕行以延长在非终止状态的停留时间。
对于底部网格(每步-2奖励):
- 智能体在到达终止状态前,每一步都会获得负奖励(-2)。
- 因此,智能体的最优策略是尽快到达一个终止状态,以停止累积负奖励。
- 考虑到两个终止状态的最终奖励不同(+1 和 -1),智能体会选择尽快到达+1的终止状态。
以下是针对图中四个位置的具体行动建议分析:
位置A(左上角附近):
- 顶部(+2):应选择远离终止状态的方向,例如向右或向下移动,以在网格中继续徘徊。
- 底部(-2):应选择能最快到达+1终止状态的方向。根据网格布局,这通常是向右移动。
位置B(中上偏右):
- 顶部(+2):应避免直接进入下方的终止状态,可能选择向左或向上移动以延长路径。
- 底部(-2):应直接向下移动,以最快速度进入+1终止状态。
位置C(中下偏左):
- 顶部(+2):应避开右边的终止状态,可能选择向上或向左移动。
- 底部(-2):应向右移动,直接进入+1终止状态。
位置D(右下角附近):
- 顶部(+2):应避开上方的终止状态,可能选择向左或向下移动(如果可能)以继续徘徊。
- 底部(-2):已经非常接近+1终止状态,应直接向上移动进入。
总结

本节课中我们一起学习了奖励结构如何根本性地影响强化学习智能体的最优策略。
- 当非终止状态提供正奖励时,智能体会倾向于延迟达成终止目标,以收集更多即时收益。
- 当非终止状态提供负奖励(或成本)时,智能体会倾向于加速达成终止目标,特别是回报更高的目标,以最小化累积成本。
这个例子清晰地展示了,智能体的行为不仅由最终目标驱动,更由达成目标路径上的体验所塑造。理解这一点对设计合理的奖励函数至关重要。
016:关于奖励的更多讨论 - 3 解决方案
在本节课中,我们将深入探讨一个具体的强化学习问题,分析如何通过改变奖励函数来影响智能体的最优策略。我们将通过一个网格世界的例子,理解奖励设计如何从根本上改变智能体的行为目标。

好的,Mar,你有答案给我吗?当然,我应该怎么做?我需要做出任何假设吗?或者我可以对非蓝色状态做出任何我想要的假设吗?不。

实际上,这并不重要。所以答案是“也许吧”。但答案其实是“不”。

但这实际上并不重要,因为请记住,整个过程是平稳且具有马尔可夫性的。所以唯一重要的是你当前所在的位置。过程是平稳的、马尔可夫性的。好的。
那么,我认为,好吧,我们先来看第一个问题。这其实挺酷的。

通过像你那样改变奖励函数,现在它不再是一个“烫脚沙滩”了。它变成了一个,你知道的,像超级棒的“金钱沙滩”。是的,就像一个由培根铺成的沙滩。


当然,好吧,让我们这样想,尽管此刻我们俩都没有在吃培根。

我确实这么想,因为那样的话我们的嘴里就会塞满食物,就很难进行这次讲座了。好吧,不,不,不,不,我的意思是,即使……
好吧,算了。重点是它现在棒极了,而且有像钻石一样的东西。我不知道,我刚刚看了《霍比特人》电影,里面有一个堆满宝藏的房间。所以这有点像那样。

那么现在的问题是,我应该怎么做?我绝不应该去+1或-1状态,因为那会结束我的寻宝之旅。

我应该继续停留在那些状态以外的状态。好的。
所以对于顶部的状态,我会选择向左。
对于底部的状态,也选择向左。


至于这个状态,是的,我正在思考。


总结

本节课中我们一起学习了奖励函数设计的核心影响。通过一个简单的网格世界案例,我们看到,仅仅改变非终止状态的即时奖励(从负值变为正值),就能将智能体的目标从“尽快逃离”转变为“尽可能久地停留”。这清晰地展示了奖励函数在定义强化学习任务目标中的决定性作用。智能体的最优策略完全取决于我们通过奖励函数所传达的“好”与“坏”。
017:奖励序列 - 1
在本节课中,我们将要学习强化学习中的一个核心假设:平稳性。我们将探讨这个假设的含义,并分析当时间视野从无限变为有限时,智能体的行为策略会发生怎样的变化。
上一节我们介绍了在网格世界中进行策略评估和优化的练习。本节中,我们来看看这些练习背后一个未曾明言的核心假设。
这个核心假设可以归结为一个词:平稳性。接下来,我将解释这个词的含义,并通过回顾我们之前的做法来阐明这一点。
首先,我们实际上一直在假设一个无限时间视野。这是什么意思呢?回想一下我们之前使用的网格世界,我们说过,如果某个状态的奖励值不够高,智能体可能会尽量避免快速到达终点。这是因为游戏只有在到达吸收状态时才会结束。这种设定暗示了智能体可以“永远”存在,拥有无限的时间去行动。

现在,请思考一下,如果智能体没有无限的时间视野,它的行为可能会与我们之前在网格世界中的做法截然不同。为了帮助你理解,让我们回顾一下之前的网格世界示例。





以下是之前使用的网格世界。你会记得,在奖励值为 0.04 的情况下,我们推导出了一个特定的、看似合理的策略。让我再次为你写出这个策略。







本节课中我们一起学习了平稳性假设及其在无限时间视野下的体现。我们通过回顾网格世界的例子,初步理解了时间视野对策略选择的重要性。在接下来的课程中,我们将深入探讨有限时间视野会带来哪些不同的挑战和解决方案。
018:奖励序列 - 2
在本节课中,我们将探讨如何用数学公式定义智能体在一系列状态中获得的效用,并分析简单求和方法的局限性。
上一节我们讨论了智能体在环境中获得奖励的概念。本节中我们来看看如何用数学形式化地表示从状态序列中获得的总效用。
效用定义为奖励之和


我们可以将访问一个状态序列 s0, s1, s2, ... 所获得的效用 U,简单地定义为访问这些状态所获得的所有奖励 R 的总和。
以下是其数学公式:
U(s0, s1, s2, ...) = R(s0) + R(s1) + R(s2) + ...
这个定义与我们在网格世界示例中的直观理解是一致的。它类似于日常生活中金钱的累积方式:每日的收入会相加到你的银行账户中,而不是被减去、相乘或进行其他运算。
简单求和方法的局限性
尽管上述定义直观且合理,但它存在一个根本性问题。为了说明这一点,请考虑以下场景:
假设有两个不同的状态序列。
- 序列A:获得奖励 +1, +1, +1, +1, ...
- 序列B:获得奖励 +1, +1, +1, +1, +1, ...
根据简单求和的定义,无限延续的序列A和序列B的效用都会趋向于无穷大 (U → ∞)。这导致我们无法比较这两个序列的优劣,因为它们的效用“总和”在数学上都是发散的无穷大。在比较哪个序列更好时,无穷大与无穷大无法区分。
因此,虽然将效用视为奖励之和在有限步骤内是可行的,但对于可能无限进行的序列(这在强化学习中很常见),我们需要一个更严谨的数学框架来处理无穷级数,以便能有效比较不同策略的长期收益。

本节课中我们一起学习了效用的初始数学定义——即状态序列的效用等于其各状态奖励的简单求和。我们也认识到,当序列无限长时,这种简单的求和方法会失效,因为它无法比较两个效用都趋于无穷大的序列。在接下来的课程中,我们将引入折扣因子等概念来解决这一难题。
强化学习导论:P20:奖励序列 - 3 解决方案
在本节课中,我们将探讨一个关于无限奖励序列比较的经典问题。我们将分析两个不同的奖励序列,并理解为何在无限求和的情况下,它们无法被简单地比较优劣。


上一节我们讨论了奖励序列的效用计算,本节中我们来看看一个具体的比较案例。
问题场景与初步分析
假设有两个奖励序列:
- 序列A(顶部):
+1, +1, +1, +1, ... - 序列B(底部):
+1, +1, +2, +1, +1, +2, ...
直观上,序列B似乎“更好”,因为它偶尔能获得+2的奖励,而序列A始终只能获得+1。然而,我们需要计算它们的总效用。
以下是两个序列效用的计算:
- 序列A的总效用:
U_A = 1 + 1 + 1 + 1 + ... = ∞ - 序列B的总效用:
U_B = 1 + 1 + 2 + 1 + 1 + 2 + ... = ∞
两者的总效用都发散至无穷大。
核心结论与解释


当两个序列的总效用都趋于无穷大时,我们无法判断哪一个“更好”。数学上,∞ 与 ∞ 无法比较大小。因此,结论是:两个序列没有优劣之分。




这个例子揭示了一个重要观点:在无限时域的强化学习中,简单地累加奖励(Total Return = Σ R_t)会导致比较失效,因为许多策略都可能产生无限的总奖励。为了解决这个问题,我们需要引入折扣因子(Discount Factor) 的概念,它通过给未来的奖励打折扣,确保总回报是有限的,从而使策略之间可以进行比较。其核心公式为:



折扣回报(Discounted Return):
G_t = R_{t+1} + γ * R_{t+2} + γ^2 * R_{t+3} + ... = Σ_{k=0}^{∞} γ^k * R_{t+k+1}

其中,γ (Gamma) 是折扣因子,取值范围为 0 ≤ γ < 1。

本节课中我们一起学习了无限奖励序列比较的局限性。我们通过一个具体例子看到,当总回报都是无穷大时,无法比较策略的优劣。这引出了我们需要使用折扣因子来定义一个有界的、可比较的回报值,这是强化学习中的一个基础且关键的概念。
021:奖励序列 - 4

在本节课中,我们将探讨如何通过引入折扣因子来处理无限时间步长下的奖励总和问题,并理解其数学性质。

上一节我们讨论了无限时间步长下奖励总和可能发散的问题,本节中我们来看看如何通过一个“小技巧”来解决这个问题。

这里所做的,是将顶部的原始方程替换为一个替代版本。

这个新方程看起来像是在指数级地放大奖励。但实际上并非如此。我所做的是,将未来会获得的奖励累加起来,然后乘以 γ^T,而 γ 是一个介于0和1之间的数。
因此,奖励并不会指数级爆炸。相反,它会指数级内爆。对于那些发生在未来一千步之后的奖励,如果我们用一个小于1的数(γ)进行指数运算,其结果将趋近于零。这意味着,近期的奖励影响较大,而远期的奖励会迅速衰减。
事实上,我们可以从数学上描述这个总和。如果你仔细观察,可能会认出这是一种特殊的序列或级数。
为了理解其性质,我们可以尝试对这个特定的方程设定一个界限。我们知道,如果所有奖励都是正数,原始版本的方程最终会趋向于无穷大。





那么,这个新的折扣奖励总和最终会是多少呢?

本节课中我们一起学习了如何利用折扣因子 γ(0 < γ < 1)将无限时间步长的奖励总和转化为一个收敛的几何级数。这种方法确保了远期奖励的影响逐渐减小,从而得到一个有限的总价值估计,这是强化学习中价值函数定义的基础。
022:假设


在本节课中,我们将学习如何推导无限折扣回报序列的求和公式,这是理解强化学习中价值函数收敛性的重要基础。
无限序列求和推导
上一节我们讨论了回报的边界问题,本节中我们来看看如何具体计算一个无限折扣回报序列的和。
我们之前讨论的公式是:所有未来折扣回报的和,乘以一个最大奖励值 R_max。我们可以将 R_max 提取出来。
得到的结果形式如下:将一系列折扣因子 γ 的幂次相加,然后将结果乘以 R_max。
具体形式为:γ⁰ + γ¹ + γ² + ...,最终乘以 R_max。
让我们将这一系列 γ 的幂次和记为 x。注意,x 本身不包含 R_max。
观察这个序列,你会发现它是递归的。因为它是一个无限序列,如果你将其在时间上整体向后移动一步,你会得到几乎相同的序列。
这意味着我们可以用 x 自身来表示 x。移动后的序列从 γ¹ 开始,即 γ * (γ⁰ + γ¹ + γ² + ...),也就是 γ * x。
因此,原始的 x 可以表示为第一项 γ⁰(即1)加上移动后的序列 γ * x。
于是我们得到方程:x = 1 + γ * x。
这只是数学推导。接下来我们可以尝试解这个方程,求出 x 的值。

通过移项,我们可以解出 x:
x - γx = 1
x(1 - γ) = 1
x = 1 / (1 - γ)
所以,无限折扣序列 γ⁰ + γ¹ + γ² + ... 的和等于 1 / (1 - γ)。
因此,之前我们讨论的无限折扣回报总和的上界就变成了 R_max / (1 - γ)。这个公式在分析强化学习算法的收敛性时非常关键,它保证了在折扣因子 γ < 1 的情况下,累积回报是一个有限值。

本节课中我们一起学习了如何推导无限折扣回报序列的求和公式 ∑ γᵏ = 1/(1-γ),并理解了它是如何用于确定价值函数边界的。这是强化学习理论中一个基础且重要的结论。
强化学习导论:P23:策略 - 1
在本节课中,我们将学习如何定义强化学习中的最优策略。我们将从回顾几何级数推导的思路出发,逐步构建出最优策略的数学表达式,并解释其核心组成部分。
上一节我们介绍了长期回报的几何级数形式,本节中我们来看看如何利用这个形式来定义最优策略。
首先,基于我们之前关于效用和回报的讨论,现在可以写下最优策略的定义。最优策略,记作 π*,其目标是最大化我们的长期期望回报。


这个长期期望回报的表达式如下:

公式:
E[ Σ (γ^t * R_t) | π ]
其中:
E[...]表示期望值。Σ表示从时间t=0到无穷大的求和。γ^t是折扣因子γ的t次方。R_t是在时间t获得的即时奖励。| π表示在遵循策略π的条件下。
这个表达式描述的是,在一个我们遵循策略 π 的世界里,我们将经历一系列状态,并在此过程中获得奖励。由于环境或策略本身可能具有随机性(非确定性),我们获得的回报序列不是固定的,因此需要计算其期望值。


关于起始状态 S0,它可以是任意的。表达式中的期望值计算已经隐含了对起始状态分布(如果存在)以及后续状态转移随机性的考虑。时间 t 从 0 开始,一直延伸到无穷大。
因此,最优策略 π* 就是那个能使上述期望值表达式取得最大值的策略。换句话说,它是在长期能为我们带来最高期望累积奖励的策略。

本节课中我们一起学习了最优策略 π* 的正式定义。我们了解到,它被定义为能够最大化从任意起始状态开始、在无限时间范围内获得的折扣累积奖励期望值的策略。其核心数学表达式是一个以策略 π 为条件的期望求和公式。理解这个定义是后续学习如何寻找和计算最优策略的基础。
强化学习导论:P24:策略 - 2

概述
在本节中,我们将深入探讨最优策略的定义,并理解其看似循环的特性。我们将学习如何用公式精确地描述最优策略,并澄清相关概念。
上一节我们定义了效用函数和最优策略 π。现在,我们可以更精确地写出 π 的表达式。
请看这个公式:
π*(s) = argmax_a Σ_s' P(s'|s, a) * U(s')
这个公式合理吗?我们来分析一下。最优策略 π* 是指在状态 s 下,应该采取的最优动作 a。其计算方法是:遍历所有可能的动作 a,并对所有可能的下一个状态 s' 求和。求和项包含两部分:
- 转移概率
P(s'|s, a):表示在状态s下采取动作a后,转移到状态s'的概率。 - 状态
s'的效用U(s')。
这里存在一个问题:我们如何知道状态 s' 的效用 U(s')?之前定义的效用函数 U(s) 是依赖于某个特定策略的。然而,我们想要求解的最优策略 π* 本身正是我们试图寻找的目标。
因此,公式中隐含的意思是:这里使用的效用 U(s') 应该是在遵循最优策略 π* 的前提下,状态 s' 的效用。我们可以称之为状态的真实效用。
为了明确这一点,我们将其记录如下:
重要提示:从现在起,除非特别说明,当我们提到状态
s的效用U(s)时,我们几乎总是指“在遵循最优策略 π* 的前提下,状态s的效用”。


于是,最优策略的定义可以完整表述为:最优策略 π* 是这样一种策略,对于每一个状态 s,它返回的动作 a 能够最大化在遵循最优策略 π* 的前提下,从 s 出发的期望效用。
这个定义听起来有些循环:为了找到最优策略,我们需要知道遵循最优策略时的效用;而为了计算那个效用,我们又需要知道最优策略是什么。这确实是一个需要解决的循环定义问题。



总结
本节课中,我们一起学习了最优策略 π* 的正式数学定义。我们明确了公式 π*(s) = argmax_a Σ_s' P(s'|s, a) * U(s') 中 U(s') 的真实含义,即它代表在最优策略下的状态效用。我们也认识到了这个定义中存在的循环依赖问题,这为后续寻找实际算法来求解最优策略奠定了基础。
强化学习导论:P25:寻找策略 - 1
在本节课中,我们将学习如何求解贝尔曼方程,这是强化学习中最核心的方程。我们将探讨其数学形式,分析其求解的挑战,并介绍一种迭代求解方法。


上一节我们介绍了贝尔曼方程。现在,我们来看看如何求解它。


我们已将贝尔曼方程写为状态 S 的效用函数 U(S):
U(S) = R(S) + γ * max_a Σ_{s'} T(s, a, s') * U(s')

这里有多少个状态 S?假设有 N 个状态。这意味着我们拥有的不是一个方程,而是 N 个方程(每个状态一个)。同时,我们也有 N 个未知数,即每个状态的 U(S)。

因此,我们似乎有 N 个方程和 N 个未知数。如果这些方程是线性的,我们就能直接求解。然而,这些方程是线性的吗?答案是否定的。原因在于方程中的 max 操作符使其成为非线性方程。这个 max 操作带来了非常棘手的非线性问题,没有简单直接的方法来处理它。
虽然存在一些技巧可以将 max 操作转化为可微分的近似形式(例如使用 softmax),但这对于当前求解精确的贝尔曼方程并无直接帮助。因此,我们需要寻找其他方法。
既然直接解析求解因非线性而困难,我们可以考虑采用迭代方法。以下是求解贝尔曼方程的基本思路:

- 初始化:为所有状态
S的效用值U(S)设定一个初始猜测值(例如全零)。 - 迭代更新:根据贝尔曼方程,使用当前所有状态的效用值来更新每个状态的效用值。具体来说,对于每个状态
S,计算:
U_{new}(S) = R(S) + γ * max_a Σ_{s'} T(s, a, s') * U_{old}(s') - 收敛判断:重复步骤2,直到所有状态的效用值
U(S)的变化小于一个预设的极小阈值,此时我们认为迭代已经收敛,得到了(近似)最优的效用函数。

这种方法被称为值迭代。它通过反复应用贝尔曼更新规则,逐步逼近方程的解。

本节课中我们一起学习了贝尔曼方程的求解挑战。由于方程中的 max 操作符导致非线性,直接解析求解非常困难。因此,我们引入了值迭代这一迭代算法作为实用的求解方法,其核心是通过反复应用贝尔曼更新规则来逐步逼近最优的效用函数。在接下来的课程中,我们将深入探讨这一算法的具体细节和性质。
026:寻找策略 - 2
在本节课中,我们将学习如何通过迭代更新状态效用值来寻找最优策略。我们将探讨一个看似简单但功能强大的算法,它如何从任意的初始猜测出发,逐步收敛到正确的状态效用值。
上一节我们介绍了策略评估的基本概念,本节中我们来看看如何通过迭代更新来改进我们对状态效用的估计。
我将通过观察所有其他状态(包括其自身)的效用来更新状态S的效用。这些效用会根据我采取某个动作后到达这些状态的概率进行加权。那么,我将采取哪个动作呢?我会选择那个能最大化我期望效用的动作。这就像是在假设当前这个估计效用 U_hat 确实是未来正确值的前提下,去决定在一个状态下该做什么。

为什么这个方法会有效呢?我最初只是随意设定了这些 U_hat 值,它们始于任意的效用估计。基于邻居状态更新效用的下一步看起来有些道理,因为邻居本质上就是你能到达的任何状态,这由转移函数决定。

公式:
U_{k+1}(s) = R(s) + γ * max_{a} Σ_{s'} P(s'|s, a) * U_k(s')
但我所做的只是更新那些同样由任意效用值构成的状态。这些初始值都是任意的。为什么这样做能帮助我呢?原因在于这里的这个值。进入一个状态所获得的即时奖励是一个真实值。

实际上,接下来会发生的是:我将开始传播这个真实值,或者说真实的即时奖励。我会将进入某个状态所获得的真实即时奖励,通过所有我将访问的状态进行传播,并让这些信息来回传递,直到最终收敛。
这仍然不明显为什么我们应该收敛,因为我们从一个任意的函数开始。这看起来可能错得离谱。我们就像是在错误的基础上添加真相。
是的,但下一轮迭代时,我已经添加了两次真相。





本节课中我们一起学习了价值迭代算法的核心思想。我们了解到,尽管从一个任意的状态效用估计开始,但通过反复地将真实的即时奖励信息与基于转移概率的期望未来效用计算相结合,并选择最大化期望效用的动作,这些效用估计最终会收敛到其真实的最优值。这个过程就像是用真相反复冲刷初始的猜测,直到它被修正为正确的答案。
强化学习导论:P27:寻找策略 - 3


在本节中,我们将通过一个具体的网格世界示例,来演示价值迭代算法的前两次迭代过程。我们将重点关注一个特定状态,并应用贝尔曼方程和效用更新公式进行计算。
上一节我们介绍了价值迭代的基本思想。本节中我们来看看如何将其应用于一个具体的例子。
以下是本次演示所需的全部信息。
- 我们使用之前一直使用的网格世界。
- 折扣因子 γ 设置为 0.5,以便于计算。
- 除两个终止状态外,所有状态的即时奖励 R(s) 均为 -0.04。
- 所有状态的初始效用 U(s) 均设为 0。
- 两个终止状态的效用是已知且固定的:分别为 1 和 -1。



现在,我们需要计算图中标记为 X 的状态,在价值迭代第一次和第二次迭代后的效用值。
我们将使用以下两个核心公式进行计算:
- 贝尔曼方程:用于计算给定策略下状态的效用。
U(s) = R(s) + γ * max_{a ∈ A(s)} Σ_{s'} P(s' | s, a) U(s') - 价值迭代更新公式:用于迭代改进效用估计。
U_{i+1}(s) ← R(s) + γ * max_{a ∈ A(s)} Σ_{s'} P(s' | s, a) U_i(s')
第一次迭代计算

初始时刻,所有非终止状态的效用 U_0(s) = 0。

对于标记为 X 的状态,其即时奖励 R(s) = -0.04。

我们需要考虑从该状态出发所有可能的动作(上、下、左、右),并计算每个动作的期望未来效用。由于 U_0(s') 初始都为0,任何动作的期望未来效用总和 Σ P(s'|s,a) * U_0(s') 都为0。
因此,第一次迭代后,状态X的效用 U_1(X) 计算如下:
U_1(X) = R(s) + γ * max(0, 0, 0, 0) = -0.04 + 0.5 * 0 = -0.04
所以,第一次迭代后,状态X的效用值为 -0.04。


第二次迭代计算
现在进行第二次迭代。此时,我们使用第一次迭代后得到的效用值 U_1(s) 进行计算。
状态X的即时奖励 R(s) 仍为 -0.04。
我们需要重新评估每个动作。此时,相邻状态的效用不再全是0。例如,假设状态X右侧是一个效用为 U_1 = -0.04 的普通状态,上方是效用为 1 的终止状态(但可能无法直接到达),下方是效用为 -0.04 的普通状态,左方是效用为 -1 的终止状态(但可能无法直接到达)。为简化演示,我们假设动作执行是确定性的(即执行某个动作必定到达预期相邻格子)。
关键点在于:朝向高效用状态的动作将获得更高的期望未来回报。
例如,考虑一个“向上”的动作,如果它能以一定概率进入效用为 1 的终止状态,那么它的期望未来效用将是 P * 1 + ...。即使考虑到折扣因子γ=0.5,这个值也可能大于0。
计算某个动作a的期望未来效用公式为:
Σ_{s'} P(s' | s, a) * U_1(s')

我们需要为每个动作计算这个值,然后选取最大值。

假设经过计算,所有可能动作中,最大的期望未来效用值为 0.2(这是一个示例值,实际值取决于精确的状态转移概率和相邻状态的U1值)。
那么,第二次迭代后,状态X的效用 U_2(X) 计算如下:
U_2(X) = R(s) + γ * max_{a}(期望未来效用) = -0.04 + 0.5 * 0.2 = -0.04 + 0.1 = 0.06
所以,第二次迭代后,状态X的效用值更新为 0.06。


本节课中我们一起学习了价值迭代算法的具体计算步骤。我们从一个所有效用初始化为0的网格世界开始,通过应用贝尔曼最优方程进行迭代更新。在第一次迭代中,由于邻居效用初始为0,状态效用仅反映其即时奖励。到了第二次迭代,邻居状态更新后的效用值开始产生影响,使得智能体能够“看到”更远一步的回报,从而更新当前状态的效用值。这个过程会持续进行,直到效用值收敛,此时对应的贪婪策略即为最优策略。
028:寻找策略 - 3 解决方案
在本节课中,我们将学习如何通过计算来验证和确定一个状态下的最优动作。我们将使用一个具体的网格世界例子,通过应用贝尔曼最优方程来比较不同动作的价值,并找出最佳选择。
上一节我们介绍了价值迭代和策略改进的概念,本节中我们来看看如何具体计算一个状态的动作价值。
根据贝尔曼最优方程,在状态 x 选择动作 u1 的价值 Q(x, u1) 计算公式如下:
Q(x, u1) = R(x) + γ * Σ [ P(x' | x, u1) * U(x') ]
其中:
R(x)是状态x的即时奖励。γ是折扣因子。P(x' | x, u1)是在状态x执行动作u1后转移到状态x'的概率。U(x')是状态x'的效用值。

在我们的例子中,已知条件为:
- 即时奖励
R(x) = -0.04 - 折扣因子
γ = 0.5 - 所有状态的初始效用值
U(·) = 0

因此,计算简化为:
Q(x, u1) = -0.04 + 0.5 * [ 后继状态的期望效用 ]

接下来,我们需要计算执行不同动作后的期望效用。理论上,我们需要评估所有可能的动作。


以下是每个动作对应的状态转移和期望效用计算:
-
动作:向右移动
- 以0.8概率到达目标状态
+1(效用为1)。 - 以0.1概率向上偏移。
- 以0.1概率向下偏移。
- 期望效用 =
0.8*1 + 0.1*0 + 0.1*0 = 0.8 Q(x, 右) = -0.04 + 0.5 * 0.8 = 0.36
- 以0.8概率到达目标状态
-
动作:向上移动
- 以0.8概率到达上方状态(效用为0)。
- 以0.1概率向右偏移到
+1。 - 以0.1概率向左偏移。
- 期望效用 =
0.8*0 + 0.1*1 + 0.1*0 = 0.1 Q(x, 上) = -0.04 + 0.5 * 0.1 = 0.01
-
动作:向左移动
- 以0.8概率到达左侧状态(效用为0)。
- 以0.1概率向上偏移。
- 以0.1概率向下偏移。
- 期望效用 =
0.8*0 + 0.1*0 + 0.1*0 = 0 Q(x, 左) = -0.04 + 0.5 * 0 = -0.04
-
动作:向下移动
- 以0.8概率到达下方状态(效用为0)。
- 以0.1概率向右偏移到
+1。 - 以0.1概率向左偏移。
- 期望效用 =
0.8*0 + 0.1*1 + 0.1*0 = 0.1 Q(x, 下) = -0.04 + 0.5 * 0.1 = 0.01



然而,我们可以利用初始条件进行简化推理。由于所有状态的初始效用都设为0,选择哪个动作更好,完全取决于哪个动作能以最高概率直接到达奖励为 +1 的终止状态。因此,我们无需完整计算所有动作,可以直接判断“向右移动”是最优动作,因为它以0.8的最高概率直接导向正奖励状态。
本节课中我们一起学习了如何应用贝尔曼最优方程计算动作价值。我们通过一个具体算例,演示了从公式代入到逐步计算的过程,同时也介绍了基于问题特性的简化推理方法,即当所有状态价值初始化为零时,最优动作是那些能以最高概率到达高奖励状态的动作。
029:寻找策略 - 4


概述 📋
在本节中,我们将探讨一种可能比价值迭代更快、效果同样好的策略寻找方法。我们将强调一个核心观点:我们最终关心的是策略本身,而非具体的价值数值。我们将介绍一种名为策略迭代的算法。
从价值到策略的转变 🔄
上一节我们介绍了价值迭代,它通过不断更新状态价值来逼近最优价值函数,并从中提取最优策略。本节中我们来看看一种更直接关注策略本身的算法。
给定真实的状态效用,我们确实可以找到一个最优策略。但也许我们不必先求出真实的效用,就能找到最优策略。
以下是一个新算法的简要框架。这个算法看起来与价值迭代很相似。


策略迭代算法框架 🧠


我们将从一个初始策略开始,称之为 π₀。这个初始策略可以是一个猜测,或者只是为不同状态随意设定的动作。

然后,我们将评估这个策略的好坏。在时间步 T,我们通过计算遵循该策略所能获得的效用来评估它,我们称这个效用为 Uₜ。
接下来我们将展示具体如何计算,但首先需要理解我们可以通过计算策略的效用来评估它。
在计算出当前策略 πₜ 的效用 Uₜ 之后,我们将以类似于价值迭代的方式改进这个策略。我们将基于刚刚为 πₜ 计算出的效用,更新策略为 πₜ₊₁,新策略选择的动作是能最大化基于 Uₜ 计算的期望效用的动作。
策略改进步骤的公式化描述如下:
πₜ₊₁(s) = argmaxₐ Σ_s‘ P(s‘|s, a) * [R(s, a, s‘) + γ * Uₜ(s‘)]
其中,argmaxₐ 表示选择能使后续期望总和最大的动作 a。
请注意,这种方法允许我们改变策略。



总结 ✨

本节课中我们一起学习了策略迭代算法的基本思想。它从一个初始策略出发,通过“策略评估”计算当前策略的效用,再通过“策略改进”基于当前效用生成一个更好的新策略,并不断迭代这两个步骤。这种方法直接对策略进行优化,可能比先求解精确价值函数再提取策略更为高效。下一节我们将深入探讨策略评估的具体实现方法。
强化学习导论:P31:贝尔曼方程 - 1
在本节课中,我们将要学习强化学习中的一个核心概念——贝尔曼方程。我们将理解它如何形式化地定义状态的价值,并建立起当前价值与未来可能状态价值之间的联系。
上一节我们介绍了马尔可夫决策过程的基本框架,本节中我们来看看如何精确计算其中状态的价值。
这就是我们刚刚讨论的贝尔曼方程。一个状态的价值,等于对所有可能行动取最大值。这个最大值由两部分组成:第一部分是从该状态采取该行动所获得的即时奖励;第二部分是折扣后的、你最终到达的下一个状态的价值,并按照你到达该状态的概率进行加权求和。
这个公式应该看起来很熟悉吗?不,它看起来可能完全陌生。公式里有V,外面有一个最大值运算符,还有很多括号。奖励写作R(s, a)而不是其他形式。括号只是为了将内容分组,这不应该成为问题。

我认为在之前的讲座中,确实用另一种方式解释过这个思想。我使用V代表价值,而不是U代表效用。并且,我将奖励视为在某个状态下采取某个动作所获得的回报。




具体来说,这意味着你处于马尔可夫决策过程的某个状态S中。当我们处于状态S并采取动作A时,我们会因这个行为获得奖励R(s, a),然后我们到达某个新的状态S‘。
这与之前讨论的方式有所不同。在讲解马尔可夫决策过程的定义时,我曾指出,奖励可以被视为状态的函数、状态和动作的函数,或者是状态、动作及下一状态的函数,它们在数学上基本是等价的。
在接下来的课程中,我们将采用现在这种方式进行讨论。我习惯于将V视为价值函数。为了避免混淆,我们不妨现在就统一使用这种表示法。
因此,我们将使用R(s, a)来表示奖励。但请记住,之前我们通过“scubby do flashback”所学到的所有原理依然成立。
以下是贝尔曼方程的核心公式:
V(s) = maxa [ R(s, a) + γ * Σs' P(s' | s, a) * V(s') ]


其中:
- V(s) 是状态
s的价值。 - maxa 表示对所有可能的动作
a取最大值。 - R(s, a) 是在状态
s下采取动作a获得的即时奖励。 - γ 是折扣因子,用于权衡即时奖励和未来奖励。
- Σs' 表示对所有可能的下一状态
s'求和。 - P(s' | s, a) 是在状态
s下采取动作a后转移到状态s'的概率。



本节课中我们一起学习了贝尔曼方程的基本形式。它告诉我们,一个状态的最优价值,等于从该状态出发,所有可能行动中能带来的“即时奖励”与“未来折扣奖励的期望值”之和的最大值。这是连接当前决策与长期收益的关键桥梁,为后续求解最优策略奠定了基础。
强化学习导论:P32:贝尔曼方程 - 2
在本节课中,我们将学习如何将贝尔曼方程的概念进行推广,并理解其背后的数学结构。我们将通过分析价值函数的递归特性,推导出更通用的贝尔曼方程形式。
上一节我们介绍了价值函数的基本概念,本节中我们来看看如何从无限序列中识别出不同的递归结构。
在之前的推导中,我们注意到价值函数V包含一个重复的结构。这个结构以 max_a 开始,并且自身内部又包含了一个V。正是因为这个子结构的存在,我们才能将其代入方程,从而得到贝尔曼方程。
这个无限序列可以形象地表示为一组无限嵌套的括号。









由于这是一个无限序列,我们实际上可以用多种不同的方式对其进行分组。

以下是另一种分组方式。
我们可以将无限序列从 R 开始的部分进行分组。可以观察到,从这个 R 开始向前的整个表达式,在后面会再次重复出现。
因此,我们可以基于这个重复的子结构建立一个新的方程。
我们可以给这个用大括号括起来的子结构起一个名字,称为 Q(s, a)。
其思想是,我们可以定义 Q(s, a) 等于立即奖励 R(s, a),加上折扣因子 γ,乘以对下一个可能状态 s‘ 的求和。这个求和包括转移到 s‘ 的概率 P(s‘ | s, a),乘以下一个状态的最大动作价值 max_{a‘} Q(s‘, a‘)。
用公式表示如下:
Q(s, a) = R(s, a) + γ * Σ_{s‘} [ P(s‘ | s, a) * max_{a‘} Q(s‘, a‘) ]
本节课中我们一起学习了贝尔曼方程的推广形式。我们通过识别价值函数无限序列中的重复子结构,定义了动作价值函数 Q(s, a),并推导出了其对应的贝尔曼方程。这为我们后续理解和使用Q-learning等算法奠定了基础。
033:贝尔曼方程 - 3
在本节课中,我们将深入探讨贝尔曼方程的两种不同形式:价值函数V和动作价值函数Q。我们将解释为何需要引入Q函数,并分析其在强化学习中的关键作用。
概述
上一节我们介绍了贝尔曼方程的基本概念。本节中,我们将聚焦于贝尔曼方程的两种具体形式:价值函数V和动作价值函数Q。我们将探讨它们各自的含义、区别,以及为何Q函数在强化学习中扮演着更为核心的角色。
两种贝尔曼方程形式
我们有两种不同形式的贝尔曼方程。
第一种是价值函数,用字母 V 表示。
第二种是动作价值函数,用字母 Q 表示。
我们可以将 V 理解为“价值”,将 Q 理解为“质量”。本质上,它们只是我们为方程赋予名称而使用的字母。例如,之前我们使用 U 代表效用,这里 V 代表价值,Q 代表质量。

关键在于,这两个表达式共同描述了状态、奖励和动作序列的整体过程。
为何需要Q函数?
第一个问题是:既然价值函数V已经足够好用,我们为何还要费心创建这个质量函数Q?
在某种意义上,两者同样有效。但实际情况是,贝尔曼方程的 Q 形式在强化学习背景下将变得更为实用。
原因在于,我们将能够仅凭经验数据来对此量求取期望,而无需直接访问奖励函数或状态转移函数。
相比之下,如果我们试图学习V值,连接一个V值与下一个V值的唯一途径是知晓状态转移和奖励的具体细节。
因此,这在强化学习环境中将非常有帮助,因为我们通常无法预先知道状态转移和奖励机制。
Q函数的优势
第二个问题是:你已经有了描述从特定状态开始会发生什么的V函数,那么Q函数具体好在哪里?
Q函数的优势在于其学习方式。在强化学习中,我们通常没有关于环境动态(即转移函数T和奖励函数R)的先验知识。Q函数允许我们直接从智能体与环境的交互经验中学习,而不需要显式地建模T和R。
其核心思想是,Q值 Q(s, a) 代表了在状态 s 下采取动作 a 后,遵循最优策略所能获得的期望累积回报。更新Q值的经典公式(如Q-learning)是:
Q(s, a) ← Q(s, a) + α * [r + γ * max_a’ Q(s’, a’) - Q(s, a)]
其中:
- α 是学习率。
- r 是立即奖励。
- γ 是折扣因子。
- s’ 是执行动作 a 后到达的新状态。
这个更新规则仅依赖于观察到的四元组 (s, a, r, s’),而不需要知道完整的 T(s, a, s’) 和 R(s, a)。这使得无模型强化学习算法成为可能。
总结

本节课中,我们一起学习了贝尔曼方程的两种形式:价值函数V和动作价值函数Q。我们明确了Q函数的核心优势在于它能通过智能体的直接经验进行学习,而无须知晓环境模型(状态转移和奖励函数)。这种特性使得基于Q函数的算法(如Q-Learning)成为解决无模型强化学习问题的强大工具。理解V与Q的区别与联系,是掌握后续强化学习算法的基础。
035:贝尔曼方程第三种形式解析
在本节课中,我们将深入探讨贝尔曼方程的第三种形式,并分析其正确的数学表达。我们将通过逐步推理,排除错误选项,并最终确认正确的公式。
概述
本节内容聚焦于从状态-动作价值函数 Q(s, a) 到状态价值函数 V(s) 的转换过程中,一个关键贝尔曼方程式的推导与辨析。我们将审视几个候选公式,通过逻辑和语法分析找出正确的一个。
公式辨析
上一节我们介绍了价值函数的基本概念,本节中我们来看看如何正确地表达 Q(s, a) 的贝尔曼方程。
以下是几个候选的方程式,我们需要判断哪一个在逻辑和数学上是正确的。
-
第一个候选公式在结构上存在问题。它试图在给出奖励 R 之后定义后续状态,但“从状态开始”的表述与奖励后的时间点不匹配。此外,从语法上看,公式内部引用了动作 a,但这个 a 在上下文中没有明确的来源。基于这些原因,我们可以排除这个选项。
-
第二个候选公式看起来是正确的。让我们来验证一下其逻辑。
正确公式推导
现在,让我们详细分析第二个公式为何正确。
你从某个状态 s 出发,采取了一个动作 a,然后获得了即时奖励 R。接下来,你需要考虑未来的情况。未来是经过折扣的,其核心在于你接下来会进入哪个状态。
公式中的求和项 ∑_{s'} P(s' | s, a) 代表了你从当前状态 s 和执行动作 a 后,转移到下一个状态 s‘ 的概率期望。这正好对应了等号左边传入的 s 和 a。
那么,进入下一个状态 s‘ 之后,未来累积奖励的价值是多少呢?这就是状态价值函数 V(s')。因此,完整的未来价值期望是 ∑_{s'} P(s' | s, a) * V(s')。
核心公式
综合以上分析,从状态-动作价值函数 Q(s, a) 到状态价值函数 V(s) 转换的正确贝尔曼方程是:
V(s) = ∑_a π(a | s) * Q(s, a)
而 Q(s, a) 本身的贝尔曼方程应为:
Q(s, a) = R(s, a) + γ * ∑_{s'} P(s' | s, a) * V(s')
其中:
- π(a | s) 是策略,即在状态 s 下选择动作 a 的概率。
- γ 是折扣因子。
- P(s' | s, a) 是状态转移概率。
- V(s') 是下一状态 s‘ 的价值。
总结
本节课中我们一起学习了贝尔曼方程的第三种关键形式。我们通过逻辑推理,排除了一个在状态-动作对应关系和语法上存在缺陷的公式。最终,我们确认了正确的公式,它清晰地表达了状态-动作价值 Q(s, a) 如何通过考虑所有可能的下一状态 s‘ 及其价值 V(s'),并结合转移概率与折扣因子,来定义其与即时奖励和未来期望之间的关系。理解这个公式对于后续学习策略评估和改进至关重要。
037:贝尔曼方程关系式求解 🧩
在本节课中,我们将学习如何推导和连接强化学习中的几个核心价值函数:状态价值函数 V(s)、动作价值函数 Q(s, a) 和延续价值函数 C(s, a, r)。我们将通过逻辑推理,一步步建立它们之间的数学关系。
上一节我们介绍了这些价值函数的基本概念,本节中我们来看看如何用公式将它们联系起来。
从 Q 函数推导 V 函数
首先,我们来看如何用 Q(s, a) 来表示 V(s)。状态价值 V(s) 的定义是:从状态 s 开始,遵循最优策略所能获得的期望回报。这意味着,在状态 s 下,我们会选择能带来最大期望回报的动作。
因此,V(s) 就是所有可能动作 a 对应的 Q(s, a) 中的最大值。用公式表示如下:
V(s) = max_a Q(s, a)
这个公式有一个直观的解释:Q(s, a) 衡量了在状态 s 下采取特定动作 a 的价值,而 V(s) 就是这些动作价值中最好的那个,因为我们总是会选择最优动作。
从 C 函数推导 Q 函数
接下来,我们探讨如何用延续价值 C(s, a, r) 来表示动作价值 Q(s, a)。C(s, a, r) 表示在状态 s 采取动作 a 并立即获得奖励 r 后,从下一个状态开始所能获得的期望回报。
而 Q(s, a) 的定义是:在状态 s 采取动作 a 后所能获得的总期望回报。这个总回报包括两部分:
- 立即获得的奖励
r。 - 获得奖励
r之后,从新状态开始的未来回报,这正是C(s, a, r)所定义的。



因此,Q(s, a) 应该是立即奖励 r 加上后续的延续价值 C(s, a, r)。由于奖励 r 可能是一个随机变量(取决于环境动态),我们需要对其取期望。用公式表示如下:


Q(s, a) = E_{r ~ p(·|s,a)} [ r + C(s, a, r) ]

这里,E 表示期望,r ~ p(·|s,a) 表示奖励 r 是从状态 s 和动作 a 决定的概率分布中采样得到的。
核心关系总结
以下是本节课推导出的两个核心关系式:
- 状态价值与动作价值的关系:状态价值是动作价值的最大值。
V(s) = max_a Q(s, a) - 动作价值与延续价值的关系:动作价值是立即奖励与延续价值之和的期望。
Q(s, a) = E_{r ~ p(·|s,a)} [ r + C(s, a, r) ]
一个重要的观察是:如果我们已知 Q 函数,我们可以直接通过取最大值得到 V 函数。然而,如果我们已知 C 函数,要得到 V 函数,我们还需要知道环境的奖励函数(模型)来计算 Q 函数。


本节课中我们一起学习了如何连接 V、Q 和 C 这三个关键的价值函数。我们推导出 V(s) 是 Q(s, a) 的最大值,而 Q(s, a) 是立即奖励 r 与 C(s, a, r) 之和的期望。理解这些关系是掌握贝尔曼方程和后续强化学习算法的基础。
038:我们学到了什么
在本节课中,我们将回顾并总结从马尔可夫决策过程到贝尔曼方程的核心学习内容,梳理关键概念与符号变化。
上一节我们回顾了马尔可夫决策过程的基础。本节中,我们将系统性地总结所学到的全部新知识。
我们首先重新学习了之前马尔可夫决策过程课程中的所有内容。


以下是马尔可夫决策过程的核心组成部分:
- 状态
- 状态转移
- 奖励
我认为这不仅仅是某种马尔可夫过程。它现在已经是了。我们应该快点写篇论文。

在回顾了马尔可夫决策过程之后,我们学习了一系列新的概念。

对我而言,我全面学习了关于Q函数的知识。我学习了延续函数的概念。
总的来说,当我思考这些时,我真正理解了贝尔曼方程试图为你捕捉的核心思想,这比我们在马尔可夫决策过程背景下讨论时要深入得多。
因此,我们获得了对贝尔曼方程及其如何将无限奖励序列中的奖励相互关联起来的更深层次理解。
是的,这正是我想要达到的目的。我认为这内容非常丰富。
此外,我认为我学到了符号表示很重要。
现在,请记住,在讨论Scooby-Doo马尔可夫决策过程中的奖励时,我们将R视为状态S的函数。
而当我们讨论Q函数、C函数和贝尔曼方程时,我们将奖励R转变为了状态S和动作A的函数。
尽管我们之前提到过它们在数学上是等价的,但事实证明,就像有时思考Q函数能带来新视角一样,这种符号上的转变对于理解和推导至关重要。

本节课中我们一起学习了从马尔可夫决策过程的基础要素到Q函数、延续函数以及贝尔曼方程深层含义的核心知识。我们认识到,即使数学本质等价,不同的符号表示(如R(S)与R(S, A))也能为理解和解决问题提供关键的视角转换。
强化学习导论:P40:第一个MDP问题


在本节课中,我们将学习如何分析一个简单的马尔可夫决策过程问题。我们将通过一个具体的例子,理解如何计算不同策略下的长期回报,并比较它们以做出最优决策。

让我们考虑从初始状态出发的以下决策问题。

我们面临三个可选动作:A、B和C。每个动作的即时奖励都是0。
但是,这三个动作会将我们带到不同的状态,并从这些状态获得不同的潜在奖励。
上一节我们介绍了问题的基本设定,本节中我们来看看每个动作的具体后果。



以下是每个动作的详细路径:

- 动作A:将我们带到状态S1。从S1出发,唯一的动作是在每一步循环回到状态S1,每次获得参数为P1的奖励。
- 动作B:在初始状态选择此动作后,我们将在游戏的剩余时间里在状态S2和S4之间交替。每次从S2移动到S4时,我们获得奖励P2;在返回行程(从S4到S2)中,我们获得奖励P3。
- 动作C:初始选择此动作将使我们进入状态S3。从S3出发,唯一的下一个动作是移动到状态S5,此过程没有奖励。之后,我们在状态S5中反复循环,每一步获得奖励P4。
假设游戏在每一步之后都有一个独立的结束概率。我们称这个概率为 1 - γ,因此该场景的有效折扣因子是 γ。

给定参数P1、P2、P3和P4,我们的问题是:确定在什么条件下,每个动作(A、B或C)是最优的初始选择。


本节课中我们一起学习了如何构建和分析一个简单的MDP问题。我们明确了从初始状态出发的三个动作所导致的不同状态转移路径和奖励序列,并引入了折扣因子 γ 来考虑游戏的随机终止。这为下一步计算和比较各个动作的长期价值函数奠定了基础。
强化学习导论:P41:BURLAP中的MDP组件 🧩

在本节课中,我们将学习马尔可夫决策过程的核心组件,并了解如何使用BURLAP库来实现它们。
在深入代码之前,我们先快速回顾一下马尔可夫决策过程的组成部分,并看看如何用BURLAP库来实现它们。
MDP的第一个组成部分是系统可能处于的状态集合 S。
与集合 S 中的每个状态 s 相关联的,是在该状态下可以采取的动作集合 A(s)。
此外,还有一个转移函数 T(s, a, s'),它给出了在状态 s 下采取动作 a 后,我们进入状态 s' 的概率。

最后,还有一个奖励函数 R(s, a, s')。

它给出了在状态 s 下采取动作 a 并最终进入状态 s' 时所获得的奖励。
请注意,有时将奖励表示为仅关于 s 和 a 的函数,甚至仅关于初始状态 s 的函数更为自然。在本教程中,我们将使用最通用的形式 R(s, a, s'),因为BURLAP中的奖励函数就是以这种方式实现的。
终端状态是指进入该状态后,智能体无法再采取任何进一步动作的状态。智能体在之后的时间里不会再获得任何奖励。在课程中,我们没有将终端状态定义为MDP的一个独立组成部分,因为它们可以被视为没有任何关联动作的状态。
总结

本节课我们一起学习了马尔可夫决策过程的四个核心组件:状态集合 S、动作集合 A(s)、转移函数 T(s, a, s') 和奖励函数 R(s, a, s')。我们还了解了BURLAP库如何实现这些组件,并讨论了终端状态的概念。理解这些组件是构建和解决强化学习问题的基础。
强化学习导论:P42:BURLAP中的OOMDPs
在本节课中,我们将学习如何使用BURLAP库来表示和创建面向对象的马尔可夫决策过程。BURLAP采用面向对象范式来构建MDP模型,我们将了解其核心概念和基本操作流程。
BURLAP使用面向对象范式来表示马尔可夫决策过程。

以下是关于如何使用该库表示和创建MDP的简要概述。

在BURLAP中,整个MDP由一个域对象表示。


上一节我们了解了MDP在BURLAP中的基本表示形式。接下来,我们看看如何具体创建这些域对象。
域可以直接创建,但通常使用BURLAP库中的几个特定类会更有帮助。
具体来说,这些类用于生成特定类型的MDP。这些类实现了域生成器接口,相关Java文档位于此处提供的URL,也包含在教师笔记中。
你可以通过BURLAP库文档探索可用的类。
在文档的左侧窗格中,你会看到BURLAP中所有可用类的列表。
向下滚动直到找到DomainGenerator。注意DomainGenerator是斜体显示的。

这表明它是一个接口。如果你点击左侧的DomainGenerator链接。
你将在主窗格中看到关于该接口的信息。

请注意,在页面顶部,有一个列表显示了实现DomainGenerator接口的类。
如果你不熟悉Java文档,可以点击每个类来阅读它们各自生成的域类型的简要描述。
现在,考虑到我们想要构建的MDP类型,这些类中哪一个最适合我们用来生成域对象。
请使用每个实现类的文档以及你的判断来选择。
048:BURLAP中的状态转移 🚀
在本节课中,我们将学习如何在BURLAP中为已定义的状态添加动作,并配置马尔可夫决策过程(MDP)的转移函数。我们将使用 setTransition 方法来完成这一任务。
上一节我们介绍了如何在BURLAP领域中编码状态。本节中,我们来看看如何为这些状态添加动作。
添加动作与定义转移函数

要为领域对象添加动作,我们可以使用图定义域类(GraphDefinedDomain)内置的方法 setTransition。此方法用于同时定义MDP的动作集合和转移概率函数。
其方法签名如下:
setTransition(int fromStateID, int actionID, int toStateID, double probability)
以下是该方法各参数的含义:
- 第一个参数
fromStateID:一个整数,表示转移起始状态S的ID。 - 第二个参数
actionID:一个整数,表示所定义动作的ID。稍后将对此进行详细说明。 - 第三个参数
toStateID:一个整数,表示转移目标状态T的ID。 - 第四个参数
probability:一个双精度浮点数,表示执行此动作后转移到状态T的概率。
注意:从同一状态出发的不同动作可以具有相同的
actionID。但是,对于给定的起始状态,所有具有相同actionID的动作,其转移概率之和必须为1。
示例:定义动作转移
回顾我们的状态图,假设我们想定义动作 A,该动作将我们从状态 0 转移到状态 1。




我们可以调用 setTransition 方法,并传入以下参数:
0:作为起始状态(我们离开的状态)的ID。0:作为动作ID。因为这是我们从状态0定义的第一个动作。1:作为目标状态(我们转移到的状态)的ID。1.0:作为转移概率。
对应的代码调用如下:
setTransition(0, 0, 1, 1.0);




本节课中我们一起学习了如何使用BURLAP的 setTransition 方法为MDP定义动作和转移概率。我们了解了方法的参数含义,并通过一个简单示例演示了如何从特定状态出发定义确定性转移。这是构建可计算强化学习环境的关键一步。
强化学习导论:P49:添加状态转移
在本节中,我们将根据状态图,完成剩余状态转移的定义。这是一个编程练习,你需要在代码的指定区域添加相应的方法调用。
上一节我们介绍了初始状态和动作的定义,本节中我们来看看如何为其他状态添加转移。
以下是完成此任务的关键步骤和注意事项:
- 为每个剩余状态添加转移时,必须使用动作ID
0。因为除了初始状态外,其他每个状态都只有一个可选动作。 - 代码中已添加一个
getDomain方法。这是为了便于评分系统查看FirstMDP类内部的域对象而采用的变通方法。 - 在实际开发中,此类暴露私有成员的方法有违封装原则,不鼓励使用。
关于练习的提交与测试,有以下几点说明:
- 在这些BURLAP编程练习中,点击“测试运行”将编译并执行编辑器中的当前代码。
- 点击“提交”将运行评分脚本。对于本练习,评分脚本会调用你的
FirstMDP类的构造函数,并检查所有必需的转移是否已添加且是确定性的。 - 你可以在
main方法中编写测试代码,以验证你的解决方案是否正确。 - 代码已从调用
FirstMDP构造函数开始,你可以借此确保没有运行时错误。
如果你想进一步探索,可以自行查阅BURLAP API,学习如何更仔细地检查你的域对象。一个不错的起点是查阅 Domain 类的文档,你可以使用 getAllStates 方法来查找状态。
本节课中我们一起学习了如何根据状态图编程实现MDP中的状态转移,了解了练习的测试与提交机制,并认识了用于辅助评分的 getDomain 方法。
强化学习导论:P52:奖励函数实现方案
在本节中,我们将学习如何为一个特定的马尔可夫决策过程(MDP)实现奖励函数。我们将分析状态转移图的特点,并据此编写一个简洁的奖励函数。

根据奖励函数的文档说明,reward 方法接收三个参数:一个表示执行动作前的状态 s,一个具体的动作 a,以及一个表示执行动作后进入的状态 s'。该方法需要返回一个 double 类型的奖励值。
以下是该方法的签名:
public double reward(State s, GroundedAction a, State s_prime)

观察我们当前MDP的状态转移图,可以发现一个关键特征:除了初始状态外,每个状态都只有一条出边。并且,每个动作都是确定性的,只会导向唯一的下一个状态。此外,所有从初始状态出发的动作,其奖励值都是零。
基于以上观察,我们可以得出一个重要结论:在这个特定的MDP中,奖励函数的值仅取决于智能体执行动作前所处的状态 s,而与执行的具体动作 a 以及进入的新状态 s' 无关。

因此,在实现时,我们可以只检查参数 s,而忽略 a 和 s'。具体步骤如下:



以下是实现奖励函数的核心步骤:
- 使用
GraphDefinedDomain类的静态方法getNodeId来获取状态s的唯一标识符(ID)。 - 根据获取到的状态ID,返回对应的奖励值。
- 状态 0 和 状态 3 的奖励为 0。
- 状态 1 的奖励为 P1。
- 状态 2 的奖励为 P2。
- 状态 4 的奖励为 P3。
- 状态 5 的奖励为 P4。
- 在检查逻辑的最后,添加一个运行时异常处理,以防出现ID不在0到5范围内的未知状态。


以下是该逻辑的代码框架:
int sid = GraphDefinedDomain.getNodeId(s);
switch(sid) {
case 0:
case 3:
return 0.0;
case 1:
return P1;
case 2:
return P2;
case 4:
return P3;
case 5:
return P4;
default:
throw new RuntimeException("Received an unknown state ID: " + sid);
}

本节课中,我们一起学习了如何为一个具有确定性转移和状态依赖奖励的MDP实现奖励函数。核心在于分析MDP的特性,识别出奖励仅与当前状态相关,从而简化了函数的实现逻辑。我们通过状态ID进行分支判断,为每个状态返回预设的奖励值,并添加了健壮性检查以处理意外情况。
强化学习导论:P55:执行价值迭代 🧮
在本节课中,我们将学习如何使用BURLAP库中的价值迭代算法来解决一个已定义的马尔可夫决策过程。我们将通过计算状态S1、S2和S3的价值,来确定初始时最偏好的行动A、B或C。
上一节我们完成了MDP和BURLAP环境的定义,本节中我们来看看如何使用BURLAP提供的规划或强化学习算法来解决这个MDP。
我们将使用价值迭代算法来寻找状态S1、S2和S3的价值。其中价值最高的状态将告诉我们,对于初始行动,我们最偏好行动A、B还是C。BURLAP中有一个ValueIteration类,它实现了课程中讲授的价值迭代算法。它为我们完成了贝尔曼方程的迭代更新工作。


要实例化它,我们需要传入之前定义的域、奖励函数和终止函数。我们还需要传入几个额外的参数。
以下是需要传入的参数列表:
double gamma:折扣因子,取值范围在0到1之间。StateHashFactory对象:一个状态哈希工厂对象,稍后会进行说明。double maxDelta:最大差值。int maxIterations:最大迭代次数。

maxDelta和maxIterations是价值迭代过程的两个停止条件。该过程将在满足以下任一条件时停止:在一次迭代中,所有状态的价值变化都不超过maxDelta;或者过程已经运行了maxIterations次。
StateHashFactory是一个接口,它提供了hashState方法。该方法接收一个State对象,并生成一个StateHashTuple。这允许在价值迭代过程中快速检索状态对象。由于我们的MDP由有限数量的离散状态组成,我们将传入一个SimpleHashableStateFactory。

本节课中我们一起学习了如何配置并运行BURLAP中的价值迭代算法,包括必要的参数设置和算法停止条件的理解。通过计算状态价值,我们可以据此选择最优的初始行动。
强化学习导论:P59:第二个MDP问题 🧩
在本节课中,我们将学习如何构建和解决一个新的马尔可夫决策过程问题。通过这个练习,你可以巩固在BURLAP中构建MDP的技能,并进行自我评估。
问题概述
我们从一个新的MDP问题开始。智能体从状态 S0 出发,目标是理解状态转移和奖励机制。
状态与动作描述
以下是该MDP中各个状态和可用动作的详细说明。
从状态 S0 出发:
- 动作 A:这是一个随机动作。
- 以概率 P1 执行:返回状态 S0,并获得奖励 -1。
- 以概率 1 - P1 执行:进入状态 S1,并获得奖励 +3。
- 动作 B:这是一个确定性动作。
- 执行后:确定性地进入状态 S2,并获得奖励 +1。
在状态 S2:
- 只有一个确定性动作。
- 执行后:确定性地进入状态 S1,奖励为 0。
在状态 S1:
- 动作 C:这是一个随机动作。
- 以概率 P2 执行:进入终止状态 S5,奖励为 0。
- 以概率 1 - P2 执行:进入状态 S3,并获得奖励 +1。
- 动作 D:这是一个确定性动作(描述中未明确其效果,需根据完整问题上下文补充)。
在状态 S3:
- 只有一个确定性动作。
- 执行后:确定性地重新进入状态 S1,奖励为 0。

状态 S5 是终止状态,没有后续动作。



问题图示与公式表示

为了更直观地理解,我们可以用状态转移图来表示这个过程。同时,核心的状态转移概率和奖励可以用公式定义。


状态转移关系可直观表示为:
S0 --(A, P1)--> S0 (R=-1)
S0 --(A, 1-P1)--> S1 (R=+3)
S0 --(B)--> S2 (R=+1)
S2 --> S1 (R=0)
S1 --(C, P2)--> S5 (R=0)
S1 --(C, 1-P2)--> S3 (R=+1)
S3 --> S1 (R=0)
其中,(动作, 概率) 表示执行某动作后以特定概率转移,(R=奖励值) 表示获得的即时奖励。

状态转移概率和奖励的函数可以定义为:
对于在状态 s 执行动作 a 后转移到状态 s‘ 的概率:
P(s' | s, a)
对应的即时奖励为:
R(s, a, s')

练习目标
现在,你已经清楚了整个MDP的结构。接下来,请尝试在BURLAP中构建这个模型,并计算最优策略或价值函数。这个练习能帮助你熟悉MDP的建模过程。
总结

本节课我们一起分析并定义了一个包含随机和确定性转移的MDP问题。我们明确了从初始状态 S0 到终止状态 S5 的所有可能路径、相应的动作选择、转移概率以及即时奖励。理解这些元素是形式化和解决强化学习问题的基础。
强化学习导论:P60:第二个MDP问题解决方案 🧩

在本节中,我们将学习如何使用BURLAP库实现第二个马尔可夫决策过程问题的解决方案。我们将重点关注如何定义具有随机转移概率的环境,并实现相应的奖励函数和终止函数。
概述
我们将构建一个包含六个状态的MDP环境。与之前不同,本次的核心参数是状态转移的概率,而非奖励值。我们将使用BURLAP库来定义状态、动作、转移概率、奖励函数和终止条件,并最终生成可用的领域模型。
环境构建
首先,我们来看如何构建MDP环境。我们的构造函数定义了六个状态,并且本次只使用两个核心参数(不包含折扣因子),这两个参数代表状态转移的概率。
以下是构建领域模型的核心代码步骤:
// 定义状态和动作
// 设置转移概率(基于状态图)
// 生成领域模型
// 设置初始状态为0
// 设置奖励函数和终止函数
// 实例化离散状态哈希工厂
在代码中,我们使用了自定义的类 RF 和 SingleStateTF 来实现奖励函数和终止函数的接口。
奖励函数实现
由于转移是非确定性的,奖励函数需要同时考虑转移离开的状态 S 和转移进入的状态 T。


以下是奖励函数实现的关键逻辑:

- 通过静态方法
getNodeID获取状态的ID。 - 根据状态图,基于转移离开的状态
S为变量R分配合适的奖励值。 - 同时,也可以根据转移进入的状态
T进行额外的逻辑判断。 - 包含了一些异常抛出案例,用于调试目的。
// 伪代码示例:根据离开状态S确定基础奖励
if (S == stateA) {
R = rewardA;
} else if (S == stateB) {
R = rewardB;
}
// 可根据进入状态T调整奖励(如果需要)

终止函数实现

终止函数的实现相对简单。其构造函数接收一个整数参数,即终止状态的ID,并将其存储在成员字段中。
// 伪代码示例
class SingleStateTF {
private int terminalStateId;
SingleStateTF(int terminalId) {
this.terminalStateId = terminalId;
}
boolean isTerminal(State s) {
return (getStateId(s) == terminalStateId);
}
}

当查询某个状态是否为终止状态时,函数只需比较该状态的ID是否与存储的终止状态ID一致。
总结

本节课中,我们一起学习了如何使用BURLAP库解决第二个MDP问题。核心内容包括:
- 构建了一个具有随机转移概率的六状态MDP环境。
- 实现了奖励函数,它需要处理非确定性转移,同时考虑离开状态和进入状态。
- 实现了一个简单的终止函数,通过检查状态ID来判断是否为终止状态。
通过定义清晰的转移概率、奖励规则和终止条件,我们为后续的强化学习算法(如值迭代或策略迭代)打下了坚实的基础。
061:强化学习基础
在本节课中,我们将要学习强化学习的基础概念,特别是智能体与环境之间如何通过交互来学习。我们将从最核心的对话模型开始,理解状态、动作和奖励这些基本元素是如何运作的。
智能体与环境的对话
上一节我们介绍了课程背景,本节中我们来看看强化学习的核心交互模型。理解强化学习的第一步,是认识到其大部分过程表现为智能体与环境之间的一场“对话”。



在这个模型中,你(或一个程序)扮演智能体的角色。我们将想象一个合理的环境,例如一个视频游戏世界。智能体与环境持续进行交互。


以下是交互过程中传递的核心信息:

- 状态:环境会以状态的形式向智能体展示自身。我们用符号 S 表示状态。
- 动作:智能体通过执行动作来影响环境。我们用符号 A 表示动作。
- 奖励:在环境转移到下一个状态之前,智能体会因为最近一次“状态-动作”组合而收到一个奖励信号。
这个过程与马尔可夫决策过程(MDP)中的元素相同。但关键区别在于,在强化学习中,我们并非直接获得一个完整的、如图结构般的MDP模型然后进行计算。相反,真正的计算发生在智能体“内部”。智能体需要通过与环境的实际交互来逐步了解这个世界。
总结

本节课中我们一起学习了强化学习的基础交互框架。我们明确了智能体与环境通过状态、动作和奖励进行持续对话的核心模式。理解这个基础对话模型是后续学习各种强化学习算法的重要前提。
062:神秘游戏 - 1 - 🎮

在本节课中,我们将通过一个名为“神秘游戏”的互动示例,来探索马尔可夫决策过程。我们将学习如何在一个规则未知的环境中,仅通过尝试动作和观察结果来理解其运作机制。
上一节我们介绍了马尔可夫决策过程的基本概念。本节中,我们来看看如何在一个具体的、规则未知的MDP环境中进行探索。


我们被置于一个MDP环境中,或者说,我们获得了与一个MDP交互的能力。这个MDP如下图所示。


请记住,环境的MDP包含状态和动作。在这个例子中,状态将以屏幕中央这种类似“Mdrerian”风格的图片(包含颜色和方块等元素)可视化地呈现给你。而动作则是数字1到6。

与常规视频游戏不同,你并不知道规则,也不清楚事物如何运作,甚至不知道你的目标是什么。但你可以开始尝试,并利用这些经验来逐步理解系统的运作方式。这有点像读研究生。

现在,你需要选择动作,我会将它们输入MDP,然后我们观察会发生什么。接着你可以尝试看看是否能获胜。


以下是互动的过程记录:

- 动作“3”:没有变化。
- 动作“5”:没有变化。
- 动作“6”:回到了初始状态。
- 动作“1”:没有变化。
- 动作“2”:没有变化。
- 动作“3”:进入了一个新状态。


通过这个过程,我推断出了一些信息,但你想让我告诉你是什么吗?不,因为我已经忘了。

本节课中,我们一起学习了如何在规则完全未知的MDP环境中进行初步探索。我们通过尝试不同的动作(1到6),观察状态的变化(或无变化),来收集关于环境动态的信息。这个过程是强化学习智能体理解其所在世界的第一步。
063:神秘游戏 - 2
在本节课中,我们将通过一个具体的游戏示例,学习如何理解强化学习中的状态、动作、奖励和转移函数。我们将跟随一位学习者的探索过程,分析其如何通过交互来构建对环境的认知,并规划出达成目标的路径。
上一节我们介绍了神秘游戏的基本界面和初步探索。本节中我们来看看学习者在获得一些经验后,如何解释和应对一个新的游戏状态。
好的,这是另一个状态。我刚刚随机地将你传送到了另一个起始状态。
你声称现在明白游戏如何运行了。那么你能解释一下吗?
我想我明白了。目标是去拿到那个小黄圈,或者说一开始是黄色的圈。我不确定颜色变化是否有特殊含义,上次它好像是绿色的。你想拾起它,我记得拾起动作是5。当你拾起它时,我还不确定它是否会改变颜色。但无论拾起时它是什么颜色,你都需要把它带到与之颜色匹配的方块处,然后放下它,放下动作是1。我应该说一下,我之前没说清楚,我最初以为目标只是让方块和圆圈处在同一位置。是的,你上次做到了,但那样做并没有得到任何奖励。所以我推断可能我什么都没做对。但那时我也还在摸索所有指令的作用。
我进行了很多探索。
好的,所以你学到了一些关于转移函数的知识。你学到了一点关于动作如何改变状态的知识,也学到了一点关于哪些状态是有奖励的。



是的。所以现在你认为,尽管情况有些不同,但你可以规划出一条到达目标状态的最短路径了。



当然。从这个状态开始,我会先执行动作3,再执行动作3。
然后我会执行动作4,再执行动作4。
然后执行动作5。这个动作会保持当前状态。


本节课中我们一起学习了如何通过试错来理解一个未知的强化学习环境。我们看到了学习者如何整合关于状态、动作、转移函数和奖励的信息,从而形成对任务目标的假设,并最终规划出一个具体的行动序列。这个过程体现了强化学习智能体通过与环境的交互来学习和改进策略的核心思想。
064:行为结构 - 1
在本节课中,我们将探讨强化学习中的核心目标——学习一种能获得高回报的行为。我们将介绍几种不同的行为结构,并重点分析第一种结构:计划。理解这些结构是设计有效学习算法的第一步。
我们的目标是创建学习算法。这些算法可能不如人类聪明,但我们将努力使其尽可能接近人类水平。我们希望算法能尽可能完善。不过,人类可能仍将在某些方面胜过我们将要讨论的算法。关键在于,我们必须明确我们试图学习的是什么。
我们试图学习的是一种行为,即一种与环境交互以获得高回报的方式。根据所寻求的行为类型,思考这个问题的方式有多种。
计划:固定的行动序列
一种在人工智能文献中非常经典的行为概念是计划。计划通常指一个固定的行动序列。它类似于这样的表述:“我知道我现在的位置,接下来我将执行以下动作序列:左、右、上、上、上、下……”



例如,“拾取、左、左、下、下、放下”等。一旦你选择了计划,就可以直接执行它。它只是一个固定的动作序列。

在现实生活中,有时确实存在这种行为。某些类型的行为我们就是作为序列记忆并执行的。






计划的局限性
然而,这里存在一个问题。为什么在一般情况下,我们不能仅仅通过执行计划来满足我们试图达成的目标?



主要原因有两个。



本节课中,我们一起学习了强化学习中行为的基本概念,并重点介绍了计划这种固定的行动序列。我们了解到,计划虽然简单直接,但在应对复杂或不确定的环境时存在局限性。在接下来的课程中,我们将探讨其他更灵活的行为结构。
065:行为结构 - 2
在本节课中,我们将探讨强化学习中的行为结构,特别是平稳策略的概念。我们将了解它的定义、特点,以及它与其他规划方式的区别。

上一节我们介绍了条件规划,本节中我们来看看另一种更通用的行为结构——平稳策略。
平稳策略(通用规划)
平稳策略,有时在文献中也被称为通用规划,实际上就是我们在马尔可夫决策过程(MDP)背景下讨论的策略。
平稳策略是一个从状态到动作的映射:π: S → A。这意味着对于每一个可能的状态,策略都指定了一个要执行的动作。
这是一个非常强大的概念,因为它能很好地处理随机性。每次你经历一次状态转移后,你都可以回到你的策略表中查询:“好的,我现在处于这个状态,从这里出发应该做什么?”
然而,向人们传达这种策略可能有些困难。你知道这是为什么吗?
一种理解方式是,我们可以声称一个平稳策略或通用规划,就是一个在每个可能状态都有一个“如果”分支的条件规划。
这种说法是正确的,但它实际上比条件规划更受约束一些。区别在于,平稳策略在每个可能状态使用的是相同的“如果”逻辑。无论你之前从哪里来,无论你正在做什么,一旦你发现自己处于某个状态,这个状态就决定了你的下一步行动。
这意味着你需要做出很多判断,包含很多“如果”语句。如果你试图向别人传达这个策略,你必须告诉他们所有这些“如果”语句是什么。
以下是几个类比,帮助理解不同规划方式的区别:
- 简单序列规划:就像指路时说“左转,右转,左转,一直走到枫树街,然后右转”。
- 条件规划:可能会说“上高速公路,如果那里拥堵,就走这些小路;否则,就继续走高速公路”。
- 平稳策略(通用规划):则会说“对于每一个可能的地理位置,都遵循对应的规则:如果在A地点,就执行动作X;如果在B地点,就执行动作Y……”。
本节课中我们一起学习了平稳策略(或称通用规划)的核心概念。我们了解到它是一个从状态到动作的确定性映射 π: S → A,能够有效处理MDP中的随机性。同时,我们也通过类比,理解了它与简单序列规划、条件规划在表达方式和复杂度上的区别。平稳策略是强化学习中定义智能体行为的基础构件。
强化学习导论:P66:策略评估
在本节课中,我们将学习如何评估一个强化学习策略的价值。为了判断一个策略是否“最优”,我们需要一种方法,将遵循该策略可能产生的所有随机轨迹(即状态、动作和奖励序列)汇总成一个单一的数值指标。本节将详细介绍实现这一目标的四个关键步骤。
上一节我们介绍了策略会产生多种可能的轨迹。本节中我们来看看如何将这些轨迹转化为一个可比较的数值。
第一步:定义即时奖励
首先,我们需要为智能体在环境中经历的每一次状态转移赋予一个具体的数值,即即时奖励。这个奖励函数 R(s, a, s') 量化了从状态 s 执行动作 a 到达状态 s' 的即时好坏。
例如,在一个网格世界中,到达红色格子可能获得奖励 -0.2,而到达绿色格子可能获得奖励 +1.0。
第二步:聚合轨迹内的奖励
有了每一步的即时奖励后,我们需要将一条完整轨迹中的所有奖励合并起来。这通常通过计算回报来实现。一种常见的方法是使用折扣回报的公式:
G_t = R_{t+1} + γ * R_{t+2} + γ^2 * R_{t+3} + ...
其中,γ(伽马)是一个介于0和1之间的折扣因子,它决定了未来奖励相对于即时奖励的重要性。γ 越接近0,智能体越“短视”;γ 越接近1,智能体越“有远见”。
第三步:处理轨迹的不确定性

由于环境是随机的,遵循同一个策略从同一个初始状态出发,也可能产生许多不同的轨迹,从而得到不同的回报值。因此,我们不能只看某一条轨迹的回报。
我们需要考虑所有可能轨迹的回报,并计算它们的期望值。这个期望值综合考虑了不同轨迹发生的概率及其对应的回报。
第四步:定义状态价值函数
最终,我们将一个策略 π 在某个状态 s 下的价值,定义为:从状态 s 开始,遵循策略 π 所能获得的期望回报。这被称为状态价值函数,记作 V^π(s)。
其公式化定义为:
V^π(s) = E_π[ G_t | S_t = s ]

其中,E_π 表示在策略 π 下的期望。
通过以上四个步骤——定义即时奖励、聚合轨迹奖励、计算期望回报、定义状态价值函数——我们成功地将一个策略在某一状态下的所有可能表现,浓缩成了一个具体的数值 V^π(s)。这个值就是我们评估和比较不同策略优劣的基础。在后续课程中,我们将利用这个概念来寻找最优策略。
067:策略评估求解
在本节课中,我们将学习如何对一个给定的策略进行评估,并将其价值总结为一个单一的数字。我们将通过一个具体的例子,演示从状态序列到最终价值计算的完整步骤。
上一节我们介绍了策略评估的基本概念,本节中我们来看看如何将其应用于一个有限时间范围的例子。
Okay, Charles, 我们如何将其简化为一个单一的数字。
我们将遵循你概述的那些步骤。我不知道答案,但我知道,我认为我知道如何得到答案。好的,我们开始吧。
首先,我们处理的是有限还是无限时间范围。这里 T 等于 5。它说 T 等于 5。所以我们明确在处理有限范围。这正是我所想的,只是想确认一下。

好的,那么我需要做的实际上是将我看到的所有东西都转化为即时奖励。我可以做到这一点。你介意帮我写一些东西吗?好的,给你。

所以,让我们在绿色状态上标上 +1,在红色状态上标上 -0.2。但实际上,我并不关心你刚刚写下的那个,因为它距离起点超过了 T=5 步。
好的,这将在下一步中处理。根据时间范围进行截断。所以数 1,2,3,4,5。在这里切断。数 1,2,3,4,5。在这里切断。数 1,2,3,4,5。在这里切断。
现在,我对“五步”的定义有点随意。可能你实际上会多算一步,但我特意选择了一个时间范围长度,使得无论你如何解释,结果都不会改变。这只会增加零值,不会改变任何东西。总之,我们在这里在第五步处进行了截断。非常聪明,Michael。好的,很好。
现在我们已经完成了截断。我只需要依次总结每个序列的价值。
我知道,无论我给第一个序列什么值,它都会是 0.8 的若干次方。
本节课中我们一起学习了如何对一个有限时间范围的策略进行评估。我们通过将状态序列转化为即时奖励,根据时间范围进行截断,然后对每个截断后的序列进行价值总结,最终将策略的表现简化为一个可计算的数值。这个过程是理解策略价值计算的基础。
068:评估学习器 🧠
在本节课中,我们将探讨一个哲学层面的问题:如何评估一个强化学习算法(学习器)的好坏。上一节我们讨论了如何评估一个策略,但策略本身是学习过程的输出。本节我们将聚焦于评估产生策略的学习器本身。
评估学习器的核心思路
一个直观的想法是:一个好的学习器,就是能输出好策略的学习器。这似乎很合理。然而,如果两个学习器都能输出相同的最优策略,我们该如何区分它们的高下呢?
以下是两种可能的思考方向:
- 结果导向:谁在乎过程?只要最终策略一样好,它们就一样好。
- 效率导向:我会选择那个能更快找到最优策略的学习器。
理解“更快”的含义:两种关键复杂度



当我们说“更快”时,需要明确衡量的维度。在强化学习领域,有两种至关重要的“时间”或复杂度概念。



计算复杂度 💻


第一种是计算复杂度。这指的是算法运行所需的实际计算时间(或“墙钟时间”)。一个计算效率高的学习器,在寻找最优策略的过程中消耗的计算资源更少。
核心公式:计算成本 = f(CPU时间, 内存使用)

经验复杂度 🎯
第二种,也是在强化学习设定中尤为重要的,是经验复杂度。它衡量的是学习器为了学到好的策略,需要与环境进行多少次交互、收集多少经验数据。
核心概念:经验复杂度关注的是学习器达到特定性能水平所需的环境交互次数(如状态-动作-奖励序列的数量)。一个经验效率高的学习器,能用更少的试错学到同样多的知识。


总结

本节课我们一起学习了如何评估强化学习中的学习器。我们认识到,仅凭其输出的策略质量来评估是不够的,尤其是当多个学习器都能达到相同结果时。关键在于引入效率维度,主要分为两个方面:计算复杂度(消耗的计算资源)和经验复杂度(所需的环境交互经验)。一个优秀的学习器应该在策略性能、计算效率和经验效率之间取得良好的平衡。
069:本课总结 📚
在本节课中,我们将对之前讨论的强化学习核心概念进行总结,为后续学习时间差分算法等内容奠定基础。


上一节我们探讨了强化学习的哲学基础,本节中我们来系统性地回顾所学内容。


我们主要学习了三类核心知识。
以下是第一类知识:强化学习的定义。
我们学习了强化学习是什么。强化学习是关于智能体与环境交互、获取奖励并理解世界本质的框架。在此过程中,我们也认识到,相比于仅仅求解一个已知的马尔可夫决策过程,实际进行强化学习更具挑战性。
在理解了强化学习的基本范式后,我们转向了第二类知识:策略的描述与求解方法。
我们讨论了策略的定义,以及解决和评估强化学习问题的不同途径。一个好的策略意味着什么?其核心目标是最大化长期累积奖励。



最后,我们学习了第三类知识:学习器的评估方法。
我们认识到,评估学习器有多种方式,正如评估策略和计划有多种维度一样。评估可以涉及有限时域或无限时域的问题。我们可以讨论学习器的速度、效率(例如样本复杂度),以及它是否返回了高质量的价值函数。评估既可以关注其最终输出,也可以关注其求解过程。
为了能够具体地介绍算法和分析,我们将做出一些标准化的选择。但重要的是要记住,评估维度是多元的。
本节课总结
本节课我们一起回顾了强化学习的三大支柱:
- 强化学习的核心定义:智能体与环境的交互学习范式。
- 策略的概念及其评估标准。
- 评估强化学习算法性能的多维视角。


下一节课,我们将深入算法部分,开始学习时间差分学习。
强化学习导论:P72:强化学习算法家族概述
在本节课中,我们将学习强化学习算法的三种主要类别。我们将了解它们如何将状态、动作和奖励序列转化为策略,并比较它们之间的核心差异。
基于模型的强化学习算法
上一节我们介绍了强化学习的基本框架。本节中,我们来看看第一种主要算法类别:基于模型的强化学习算法。

这种算法与我们目前讨论的内容最为相似。它接收一系列状态、动作和奖励三元组,并将其发送给一个模型学习器。


模型学习器负责学习状态转移概率和奖励函数。

一旦学会了这些转移概率和奖励,就可以将它们输入到一个马尔可夫决策过程求解器中,就像我们之前讨论过的那样。
该求解器可以计算出最优动作价值函数 Q*。
获得最优价值函数后,只需对当前状态下的所有可能动作价值取最大值,就可以决定在任意给定状态下应该采取哪个动作,从而得到策略。

因此,它仍然是将状态-动作-奖励序列映射到策略,但它是通过创建这些中间值来实现的。

需要补充一点:模型学习器不仅接收它观察到的历史数据,还会结合其对转移概率和奖励的当前估计,来生成新的估计值。这就是我想用来表示学习过程的方式。

基于价值函数的强化学习算法
了解了基于模型的方法后,现在让我们看看第二种重要的强化学习算法类别。
这类算法被称为基于价值函数的算法,有时也称为无模型算法。它的起点和终点与之前相同:接收状态-动作-奖励序列并输出策略。我们甚至同样在中间生成了一个 Q* 函数,并据此生成策略。




本节课中,我们一起学习了强化学习的两大算法家族:基于模型的算法和基于价值函数的算法。基于模型的算法显式地学习环境模型,然后通过规划求解最优策略;而基于价值函数的算法则直接学习最优价值函数,无需构建环境模型。下一节我们将继续探讨第三种算法家族。
073:TD Lambda 算法 🧠
在本节课中,我们将学习时序差分学习,并重点介绍由 Sutton 提出的 TD Lambda 算法。我们将了解其核心思想,并通过一个具体的马尔可夫链示例来理解其工作原理。

时序差分学习简介


上一节我们讨论了强化学习的基础概念。本节中,我们来看看时序差分学习。时序差分学习的核心算法被称为 TD Lambda。这里的 TD 代表“时序差分”,而 Lambda 是一个参数符号。该算法的本质是学习对随时间推移发生的事件进行预测。
预测问题与具体示例
为了更好地理解时序差分方法所解决的学习问题,拥有一个具体示例来明确这些术语会很有帮助。因此,我们来看一个具体的预测场景。
假设我们有一个状态序列:状态0转移到状态1,再转移到状态2,最终到达某个终止状态。每次状态转移都会伴随一定的奖励。我们的目标是预测从某个状态开始的期望折扣奖励总和。这正是我们在强化学习中试图完成的核心任务。
这个预测能力将成为强化学习中的一个非常重要的子程序。因为我们将利用“能够预测未来奖励”这一概念,来更好地选择能够产生高奖励的动作。

以下是用于说明的马尔可夫链示例:

我们有一个包含状态 S1, S2, S3, S4, S5 和终止状态 SF 的马尔可夫链。每个状态转移弧上都标注了执行该转移后获得的即时奖励。
特别需要注意的是,从状态 S3 出发的转移是随机的:有 90% 的概率前往 S4,同时有 10% 的概率前往 S5。

核心概念与目标
总结来说,本节课我们一起学习了时序差分学习的入门知识,特别是 TD Lambda 算法。我们明确了其目标是预测未来折扣奖励的总和,并通过一个具体的马尔可夫链示例,了解了状态、转移、奖励以及随机转移等基本要素,为后续深入算法细节奠定了基础。
强化学习导论:P75:价值计算示例解析 🧮
在本节课中,我们将通过一个具体的例子,学习如何计算马尔可夫决策过程中各个状态的价值函数。我们将采用从后向前递推的方法,利用已知的最终状态价值,逐步计算出所有状态的价值。
上一节我们介绍了价值函数的基本概念,本节中我们来看看如何通过一个具体示例进行计算。首先,我们已知最终状态 S_F 的价值为0。
S_F 的价值公式如下:
V(S_F) = 0
接下来,我们计算状态 S4 的价值。从 S4 出发,执行动作后获得的即时奖励为1,并且会转移到最终状态 S_F。
因此,S4 的价值计算如下:
V(S4) = R + γ * V(S_F) = 1 + γ * 0 = 1
其中,R 代表即时奖励,γ 是折扣因子。



计算完 S4 后,我们以同样的逻辑计算状态 S5 的价值。从 S5 出发,执行动作后获得的即时奖励为10,并且同样会转移到最终状态 S_F。
因此,S5 的价值计算如下:
V(S5) = R + γ * V(S_F) = 10 + γ * 0 = 10
现在,我们来看状态 S3 的价值计算。从 S3 出发,执行动作后获得的即时奖励为0,但接下来会转移到哪个状态,其价值是多少呢?这正是我们需要通过递推来确定的。
S3 的价值公式如下:
V(S3) = R + γ * V(S_next)
这里的 V(S_next) 代表从 S3 执行动作后进入的下一个状态的价值。


本节课中我们一起学习了价值函数的递推计算方法。我们从已知的最终状态价值 V(S_F)=0 出发,逐步向前计算了 S4 和 S5 的价值,并建立了计算 S3 价值的公式框架。这种方法的核心在于利用后续状态的价值来确定当前状态的价值。
077:基于数据的价值估计
在本节课中,我们将学习如何利用从环境中收集到的实际数据,来估计一个状态的价值。我们将通过一个简单的例子,演示如何计算状态价值的经验平均值。
上一节我们介绍了状态价值函数的概念,本节中我们来看看如何从实际观测到的数据中对其进行估计。
概述
我们面临的任务是:给定若干条从状态 S1 开始的完整轨迹(或称“幕”,episode),以及每条轨迹中获得的回报,我们需要估计状态 S1 的价值 V(S1)。由于折扣因子 γ 被设为 1,一条轨迹的回报就是该轨迹中所有奖励的简单累加。状态价值的估计值,就是所有观测到的、从该状态出发的轨迹回报的平均值。
分步计算过程
以下是基于提供的数据进行计算的具体步骤。

数据回顾:
我们有三条轨迹数据。在第一条轨迹中,从 S1 出发获得的累计回报是 2。在第二条轨迹中,回报是 11。在第三条轨迹中,回报是 2。
第一步:计算三轮后的估计值
三轮后,观测到的回报分别是 2, 11, 2。其平均值为:
(2 + 11 + 2) / 3 = 15 / 3 = 5
因此,三轮后对 V(S1) 的估计是 5。
第二步:计算四轮后的估计值
假设我们获得了第四条轨迹,其回报为 2。那么四轮后的平均值为:
(2 + 11 + 2 + 2) / 4 = 17 / 4 = 4.25
因此,四轮后对 V(S1) 的估计更新为 4.25。

这个过程清晰地展示了如何通过简单的算术平均,利用越来越多的数据来改进我们对状态价值的估计。随着数据量的增加,这个平均值会越来越接近真实的期望价值。
增量计算的启示
事实上,我们可以为每一次观测(即每一幕)都计算一个估计值。更重要的是,我们接下来将要探讨的是,如何以增量式的方法来计算这个估计值,即每获得一条新数据,就快速更新现有的估计,而无需每次都重新累加所有历史数据。这对于处理海量数据或在线学习场景至关重要。
总结

本节课中我们一起学习了如何从实际数据中估计状态价值。核心方法是计算从该状态出发所观测到的所有回报的平均值。当折扣因子 γ=1 时,回报就是轨迹中奖励的直接求和。我们通过一个具体例子演示了计算过程,并指出随着数据增多,估计会越来越准确,同时引出了下一节将讨论的增量更新方法。
078:增量式计算估计值
在本节课中,我们将学习如何增量式地更新状态价值函数的估计值,而无需每次都重新计算所有历史回报的平均值。这是一种更高效的计算方法。
上一节我们介绍了通过多次试验的平均回报来估计状态价值。本节中我们来看看如何仅利用旧的平均值和新的回报数据,来增量式地更新这个估计值。


以下是推导增量式更新公式的步骤。
首先,回顾已知信息。在经历了三次试验后,状态 S1 的价值估计值 V(S1) 是 5。这意味着前三次试验回报的总和是 15。我们可以用公式表示:
总和_旧 = 旧平均值 * 旧次数 = 5 * 3 = 15
接着,我们进行了第四次试验,并得到了一个新的回报值,为 2。


现在,我们需要计算包含这四次试验在内的新平均值。新平均值等于所有试验回报的总和除以试验总次数。新的总和是旧的总和加上新的回报:
总和_新 = 总和_旧 + 新回报 = 15 + 2 = 17
试验总次数更新为 4。因此,新的平均值计算如下:
新平均值 = 总和_新 / 新次数 = 17 / 4 = 4.25
以上过程可以归纳为一个通用公式。设旧平均值为 V_旧,旧次数为 N_旧,新回报为 G_新。则新平均值 V_新 的计算公式为:
V_新 = (V_旧 * N_旧 + G_新) / (N_旧 + 1)
这个公式可以进一步调整,以更清晰地体现“更新”的概念。我们将公式变形:
V_新 = V_旧 + (1 / (N_旧 + 1)) * (G_新 - V_旧)
在这个形式中,(G_新 - V_旧) 是新回报与旧估计值之间的差值,可以理解为“误差”或“惊喜”。1/(N_旧+1) 是学习率(步长),它随着试验次数的增加而减小,确保估计值最终收敛。
因此,更新规则的核心是:用旧估计值加上一个由学习率缩放的误差项,来得到新估计值。
本节课中我们一起学习了增量式更新状态价值估计的方法。我们从一个具体例子出发,推导出了通用的更新公式 V_新 = V_旧 + α * (G_新 - V_旧),其中 α 是学习率。这种方法无需存储所有历史数据,只需保留当前的估计值和计数(用于计算学习率),即可高效地进行在线学习。
079:学习率的性质 📈
在本节课中,我们将要学习增量式学习算法中学习率序列需要满足的关键数学性质。这些性质保证了我们的估计值能够收敛到真实的期望值。
上一节我们介绍了增量式更新规则,本节中我们来看看为了保证学习算法的有效性,学习率序列必须满足哪些条件。
核心更新规则
我们讨论的增量式学习更新规则如下:

公式: V_t = V_{t-1} + α_t * (R_t - V_{t-1})


其中:
V_t是时间步t的估计值。α_t是时间步t的学习率。R_t是时间步t观察到的新样本值。

这个规则的目标是让估计值 V_t 随着时间推移,收敛到所有观察值 R 的真实期望值,即当 T 足够大时,V_T 趋近于 R 的平均值。
学习率序列的收敛条件
为了使上述更新规则能够收敛到正确的期望值,学习率序列 {α_t} 必须满足两个关键条件。
以下是学习率序列 {α_t} 必须满足的两个数学条件:
-
无穷和条件: 所有学习率之和必须发散至无穷大。
公式:∑_{t=1}^{∞} α_t = ∞
这个条件确保了学习算法有足够的“动力”去探索和修正估计值,无论初始值如何,最终都能移动到真实值。如果学习率之和是有限的,更新可能会在到达真实值之前就过早停止。 -
平方和有限条件: 所有学习率的平方和必须收敛于一个有限值。
公式:∑_{t=1}^{∞} α_t^2 < ∞
这个条件确保了学习率足够小,能够逐渐“抑制”或“平均掉”观测数据中的随机噪声(方差)。如果学习率下降得太慢(平方和不收敛),噪声会导致估计值持续波动,无法稳定到真实期望。
条件背后的直观理解
这两个条件共同作用,为学习算法提供了理想的收敛行为。
- 第一个条件(∑ α_t = ∞) 保证了算法的充分探索性。它确保学习率不会衰减得太快,以至于算法在完全收敛前就“冻结”了。
- 第二个条件(∑ α_t^2 < ∞) 保证了算法的稳定性。它确保学习率最终会变得足够小,以平滑掉观测中的随机波动,实现稳定的平均。
一个常见的满足这两个条件的序列是 α_t = 1/t。其和(调和级数)发散,而其平方和(∑ 1/t^2)收敛。

本节课中我们一起学习了保证增量式学习算法收敛的两个核心条件。总结来说,学习率序列必须满足 ∑ α_t = ∞ 以确保充分探索和最终收敛,同时满足 ∑ α_t^2 < ∞ 以确保稳定并抑制噪声。理解这些性质是设计和分析强化学习及其他在线学习算法的基础。
强化学习导论:P81:学习率选择方案解析 🎯
在本节课中,我们将学习如何为随机梯度下降(SGD)等算法选择合适的学习率序列。我们将通过分析五个具体的学习率候选方案,来理解保证算法收敛所需满足的数学条件。
为了确定一个学习率序列是否有效,我们需要验证两个关键条件。这两个条件共同确保了算法在理论上的收敛性。
以下是需要检查的两个核心条件:
- 学习率序列之和必须发散至无穷大:
∑ α_t = ∞ - 学习率平方序列之和必须收敛:
∑ (α_t)^2 < ∞
接下来,我们将逐一分析五个给定的学习率方案。我们将计算每个序列的和及其平方和,并根据上述条件判断其是否有效。
方案五:α_t = 0.1
这是最容易判断的方案。由于学习率是一个常数,其序列之和将无限累加,因此 ∑ 0.1 = ∞。同时,其平方序列 ∑ (0.1)^2 也是一个常数项的无限累加,同样发散至无穷大。这违反了第二个条件(平方和需收敛)。结论是:如果学习率不随时间减小,算法将无法保证收敛。
方案二:α_t = 1/t
这个方案是有效的,我们在之前的课程中已经讨论过。其序列 ∑ 1/t 是著名的调和级数,其和随着项数 T 的增长近似于 log(T),当 T 趋于无穷时发散。而其平方序列 ∑ 1/t^2 是一个收敛级数(p-级数,p=2>1)。因此,它同时满足两个条件。



方案一:α_t = 1/√t
现在我们来分析第一个方案。其序列之和 ∑ 1/√t 也是一个发散级数(p-级数,p=0.5<1)。而其平方序列 ∑ (1/√t)^2 = ∑ 1/t,正是我们刚才讨论过的调和级数,是发散的。这违反了平方和需收敛的条件。因此,该方案无效。
方案三:α_t = 1/t²
对于此方案,其序列 ∑ 1/t² 是收敛的(p-级数,p=2>1),这违反了第一个条件(和需发散)。其平方序列 ∑ 1/t⁴ 显然也是收敛的。由于第一个条件不满足,该方案无效。
方案四:α_t = 1/log(t)
最后,我们来看以对数函数为分母的方案。序列 ∑ 1/log(t) 的发散速度比调和级数 ∑ 1/t 更慢,但它仍然是发散的。然而,其平方序列 ∑ 1/(log(t))² 虽然衰减更快,但通过积分判别法可知,它仍然是发散的。因此,它同样违反了第二个条件,该方案无效。

本节课中,我们一起学习了如何通过检验两个数学条件来判断学习率序列的有效性。我们分析了五个具体例子,最终确认只有方案二(α_t = 1/t)同时满足“序列和发散”与“序列平方和收敛”的条件,是理论上能保证随机梯度下降算法收敛的有效学习率方案。理解这些条件对于设计和调试机器学习算法至关重要。
强化学习导论:P82:学习率选择 - 解决方案 - 2
在本节课中,我们将从上一节的讨论中提炼出一个关于学习率序列的通用规则。我们将探讨学习率序列形式为 1/t^K 时,指数 K 的取值范围如何影响算法的收敛性。
上一节我们分析了学习率序列求和的性质对算法收敛的关键作用。本节中,我们来看看如何确定指数 K 的有效范围。
我们可以从分析中总结出一个通用规则。如果学习率序列的形式是 1/t^K,那么 K 需要在某个特定范围内取值,算法才能收敛。
我们观察到,如果 K 值过大,序列和会收敛到一个有限值,这会导致算法失败。反之,如果 K 值过小,序列和会发散到无穷大,这同样会导致算法失败。
那么,K 的有效取值范围是多少?我们可以从两个条件推导出来。
首先,我们需要序列 1/t^K 本身的和是发散的(趋于无穷)。这要求指数 K ≤ 1。
其次,我们需要序列 (1/tK)2 的和是收敛的(有限值)。由于 (1/tK)2 = 1/t^{2K},这要求指数 2K > 1,即 K > 0.5。

综合这两个条件,我们得到 K 的取值范围是 0.5 < K ≤ 1。需要注意的是,当 K = 0.5 时,平方项的和为 1/t,其和是发散的,因此 K 必须严格大于 0.5。
以下是 K 取值范围的总结:
- K > 0.5:确保平方项序列 1/t^{2K} 的和收敛。
- K ≤ 1:确保原始序列 1/t^K 的和发散。
在有效范围 0.5 < K ≤ 1 内,是否有理由偏好某个特定的 K 值?这是一个很好的问题。
就我们目前讨论的收敛性而言,K 在此范围内的任何值理论上都是可行的。然而,文献中有一些有趣的结果表明,像 K = 1 这样的边界值可能过于不稳定,选择稍低一些的 K 值(例如 0.6, 0.7)可能有助于更好地平滑学习过程。
这种不稳定性从何而来?它主要源于 K = 1 处于有效范围的边界。如果初始条件或噪声非常不利,边界值可能表现出更脆弱的特性。


本节课中,我们一起学习了如何为形式为 1/t^K 的学习率序列确定保证收敛的指数 K 的取值范围,即 0.5 < K ≤ 1。同时,我们也了解到在实践中,选择略低于 1 的 K 值可能有助于提高学习过程的稳定性。
083:TD(1)规则 🧠
在本节课中,我们将学习TD(1)算法的更新规则。TD(1)是一种时序差分学习方法,它通过结合资格迹(eligibility trace)的概念,来更有效地更新状态的价值函数估计。我们将详细拆解其算法步骤,并理解其背后的逻辑。
概述
上一节我们讨论了时序差分学习的基本思想。本节中,我们来看看TD(1)的具体更新规则。该规则虽然看起来有些复杂,但我们将逐步分析,并理解其执行的是非常合理(或至少是部分合理)的操作。
TD(1)规则的结构
以下是TD(1)规则的基本结构。对于每一次我们开始一个新回合(episode)时,都会执行以下流程。

回合初始化
在每个新回合开始时,我们需要进行两项初始化操作:
- 初始化资格迹:对于所有状态
s,将其资格迹E(s)初始化为0。这意味着在回合开始时,所有状态都被视为“不具备资格”。 - 初始化价值函数:将本回合的价值函数估计
V(s)初始化为上一回合结束时的值。这是合理的,因为我们希望基于之前的学习经验继续更新。
回合内单步更新
在回合内部,每当我们执行一步,从状态S_{t-1}转移到状态S_t并获得奖励R_t时,我们执行以下更新步骤。
以下是每一步的具体操作流程:
- 更新离开状态的资格迹:首先,增加我们刚刚离开的那个状态
S_{t-1}的资格迹。具体操作为:E(S_{t-1}) = E(S_{t-1}) + 1。 - 计算时序差分误差:接着,计算一个对所有状态都相同的量——时序差分误差(Temporal Difference Error)。其公式为:
δ_t = R_t + γ * V(S_t) - V(S_{t-1})
其中,γ是折扣因子。这个误差代表了基于当前估计,所观测到的回报与预期回报之间的差异。注意,这里使用的价值函数V是来自上一轮迭代(即上一回合结束时的值)。 - 更新所有状态的价值函数:我们将上一步计算出的时序差分误差
δ_t,应用于所有状态。每个状态的价值函数更新量与其当前的资格迹E(s)成正比,同时乘以学习率α(以避免更新步伐过大)。更新公式为:
V(s) = V(s) + α * δ_t * E(s), 对所有状态s。 - 衰减资格迹:在更新完价值函数后,我们需要对所有状态的资格迹进行衰减(decay)。衰减系数是折扣因子
γ和另一个参数λ(此处λ=1)的乘积。更新公式为:
E(s) = γ * λ * E(s), 对所有状态s。 - 进入下一步:完成以上步骤后,我们便准备进入下一个时间步
t+1,重复上述过程。


总结


本节课中,我们一起学习了TD(1)的更新规则。我们了解到,该算法通过在回合开始时初始化资格迹和价值函数,并在每一步中结合即时奖励和后续状态的价值来计算出时序差分误差。随后,算法根据各状态的资格迹比例,用这个误差来更新所有状态的价值估计,并最终对资格迹进行衰减,为后续更新做准备。这个过程使得智能体能够更有效地利用历史经验来优化其决策。
强化学习导论:P84:TD(1) 算法示例详解 🧮
在本节课中,我们将通过一个微小的示例,逐步解析TD(1)算法的伪代码,以直观地理解价值函数是如何更新的。
概述
我们将模拟一个简单的回合,从初始状态开始,跟踪每一步的状态转移、奖励以及价值函数的更新过程。核心在于理解资格迹(eligibility trace)如何影响每个状态的价值更新。
算法初始化
首先,在回合开始时,我们将所有状态的资格迹初始化为0。同时,新的价值函数将继承上一回合结束时的价值函数值。在本示例中,我们将主要关注价值函数的变化量,这些变化最终会累加到上一回合的价值函数基础上。
第一步:状态转移与资格迹更新
现在,我们进行第一次状态转移:从状态 S1 转移到状态 S2,并获得奖励 R1。
这次转移对资格迹有何影响?对于刚刚访问过的状态 S1,其资格迹被设置为1。而状态 S2 和 S3 的资格迹目前仍为0。
以下是当前各状态资格迹的示意图:

第二步:价值函数更新
接下来,我们将遍历所有状态,并对每一个状态应用相同的更新规则。更新量的计算公式如下:
ΔV(s) = α * [R1 + γ * V_prev(S2) - V_prev(S1)] * e(s)
其中:
- α 是学习率。
- R1 是刚刚获得的即时奖励。
- γ 是折扣因子。
- V_prev(S2) 是上一轮迭代中状态 S2 的价值。
- V_prev(S1) 是上一轮迭代中状态 S1 的价值。
- e(s) 是状态 s 当前的资格迹。
这个计算出的更新量 ΔV 将会被应用到所有状态上,但每个状态实际接收到的更新幅度,正比于它当前的资格迹 e(s)。

由于此时只有 S1 的资格迹为1,而 S2 和 S3 的资格迹为0,因此只有 S1 的价值会根据上述公式进行更新。S2 和 S3 的价值变化量为0。
更新后的状态价值示意图如下:


总结

本节课中,我们一起学习了TD(1)算法在一个简单步骤中的运行机制。我们看到了:
- 状态转移会激活相应状态的资格迹。
- 价值函数的更新基于时序差分误差(TD Error),即
R + γ * V(s') - V(s)。 - 该误差会通过资格迹分配给所有状态,但只有资格迹不为零的状态其价值才会在当前步骤中发生实际改变。

这个示例清晰地展示了资格迹如何将当前时刻的奖励和信息“追溯”并分配给之前访问过的状态,这是时序差分学习算法的核心思想之一。
085:TD(1) 示例 - 2
在本节中,我们将继续通过一个具体示例,深入探讨TD(1)算法的更新过程。我们将一步步分析从状态S3到终止状态SF的更新,并理解其背后的数学原理。
上一节我们介绍了TD(1)算法中资格迹的更新规则,本节中我们来看看如何应用这些规则进行实际的价值函数更新。
下一步,我们从状态S3转移到终止状态SF,并在转移时获得奖励R3。
首先发生的是更新该状态的资格迹。

然后我们计算一个量,这个量将被加到所有状态的价值更新中。

这个量是 r3 + γ * V(SF) - V(S3)。







这个更新将按比例应用于所有状态,比例系数是它们各自的资格迹。
我们可以再次执行相同的操作。只需将这个量加到所有这些状态价值中,然后进行简化。
这听起来没问题。

这确实没问题,我想我终于明白这是怎么回事了。
以下是理解的关键:如果你看伪代码,它说“对于所有状态s,更新其价值”。被学习率α乘上的那部分,本质上就是你的误差。这正是TD学习的核心。
所以,它就是你想象的那样。它是你预测的价值与你实际看到奖励后的结果之间的差异。前提是你假设对未来状态价值的猜测是准确的。
正因为你刚才所做的那个巧妙紧凑的“望远镜式”推导,我想即使不把所有步骤写出来,我也能猜出下一个价值会是什么样子。
告诉我我猜得对不对。


对于状态S1的价值更新量δ,基本上会因为多看到一步信息,最终变成 R1。
本节课中我们一起学习了TD(1)算法在一个完整回合中的更新流程。我们看到了时序差分误差如何通过资格迹分配给路径上的所有状态,并理解了其更新最终会收敛到该回合所观测到的总奖励。这揭示了TD(λ)方法如何将蒙特卡洛方法和单步TD学习统一在一个框架内。
强化学习导论:P86:TD(1)示例 - 重复状态的影响
在本节中,我们将探讨在时序差分学习(特别是TD(1)算法)中,当状态序列中出现重复状态时会发生什么。我们将分析基于结果的更新方式如何处理这种情况,并理解其背后的逻辑。
上一节我们介绍了TD(1)的基本更新规则。本节中我们来看看一个特殊情况:状态序列中出现重复状态。




如果状态序列中存在重复状态,那么情况会有所不同。让我们设想一下,如果我们采用一种类似基于结果的更新方式,但在更新时忽略了序列中状态的重复性。

那么,你实际上做的是忽略在本次轨迹(episode)中已经学习到的任何中间信息。基于结果的更新方式规定,在本次轨迹进行过程中不进行学习。这意味着,所有学习都延迟到轨迹结束时,基于最终观察到的总回报来进行。
以下是基于结果更新的核心逻辑:
- 你只关注在整个轨迹中观察到的所有奖励。
- 你根据最终观察到的总回报来更新轨迹中访问过的所有状态的价值估计。
- 在轨迹进行期间,你不会利用已访问状态的中间估计值来更新其他状态。
现在,考虑一个出现重复状态的序列。假设状态序列不是 S1 -> S2 -> S3 -> SF(终止状态),而是 S1 -> S2 -> S3 -> S1(重复)-> ... -> SF。

在这种情况下,基于结果的更新会如何处理呢?我会看到一系列奖励:R1, R2, R3,以及从重复的S1出发后获得的另一个奖励(我们称之为R1‘)。然而,在进行价值更新时,我会假装自己对于第一次访问S1时(即从S1到S2并获得奖励R1)已经了解到的信息一无所知。
因为基于结果的更新在轨迹结束前“学习不到任何东西”,所以它不会利用“S1曾经转移到S2并获得R1”这个中间经验来即时更新S1的价值。它只会在轨迹完全结束后,使用整个轨迹的累计回报来一次性更新所有状态(包括S1)的价值。因此,从S1到S2的早期经验在本次轨迹的中间学习过程中被忽略了。

这正是TD(1)更新所做的事情。TD(1)可以看作是这种“基于结果更新”思想的一种实现。它的更新公式是:
V(S_t) ← V(S_t) + α [ G_t - V(S_t) ]
其中 G_t 是从时刻 t 开始到轨迹结束的实际累计回报。在计算 G_t 时,它只使用实际观察到的奖励,而不使用当前的价值估计 V(s) 进行自举(bootstrapping)。因此,在轨迹进行中,V(S1) 的值不会影响对后续状态(包括第二次出现的S1)的即时评估,直到最终用 G_t 进行更新。
本节课中我们一起学习了TD(1)算法在遇到重复状态时的行为。关键点在于,TD(1)作为一种等同于“基于结果更新”的方法,在轨迹进行期间会忽略已访问状态的中间信息,所有学习都延迟到轨迹结束时基于实际观察到的总回报进行。这导致即使状态重复出现,在本次轨迹内早期访问该状态的经验也不会被即时用于更新其价值估计。
强化学习导论:P87:为何TD(1)有时是“错误”的
在本节课中,我们将探讨时间差分学习中的TD(1)方法,并分析为何在某些情况下它可能无法给出理想的估计结果。我们将通过一个具体的马尔可夫链示例,对比TD(1)的“基于结果”的估计与最大似然估计之间的差异。
上一节我们介绍了如何通过TD(1)方法计算基于结果的估计值。本节中,我们来看看为何这种方法有时并不完全符合我们的期望。
为了说明这一点,我们将回到之前分析过的一个马尔可夫链奖励模型示例。该模型包含多个状态和对应的即时奖励。


我们观测到多条状态转移轨迹。例如,我们观测到轨迹:S1 → S3 → S4 → S最终。此外,我们还观测到另一条轨迹:S2 → S3 → S5 → S最终。


现在,我们的目标是:基于这组观测数据,使用TD(1)或基于结果的估计方法来近似状态S2的价值,并将其与最大似然估计得到的结果进行比较。

以下是需要你思考的问题:根据观测到的轨迹,使用TD(1)的基于结果的估计方法,你认为状态S2的价值估计值应该是多少?这种估计本质上是遇到状态S2后所观测到的奖励序列的平均值。



为了确保概念清晰,我们可以现在讨论一些相关问题。核心在于理解TD(1)估计的计算方式。


本节课中,我们一起学习了TD(1)方法的基本思想,并通过一个具体场景引出了对其估计有效性的质疑。我们明确了问题:基于有限的轨迹数据,如何估计特定状态的价值,并指出了接下来将对比TD(1)与最大似然估计的结果。
088:为什么TD(1)是“错误”的解决方案

在本节课中,我们将探讨基于结果的估计方法,并将其与最大似然估计进行比较,以理解为什么在某些情况下TD(1)算法可能得出不准确的解。
基于结果的估计分析
上一节我们介绍了价值估计的基本概念,本节中我们来看看一个具体的基于结果的估计例子。


我们观察状态S2。在给定的数据中,S2只出现了一次。因此,对它的估计平均值计算起来很简单,就是该次经历所获得的总回报。


以下是计算过程:
- 该次经历从S2开始,获得的即时奖励是2。
- 随后转移到S3,获得奖励0。
- 最后到达终止状态S5,获得奖励10。
- 因为折扣因子γ=1,所以总回报为 2 + 0 + 10 = 12。
因此,基于这唯一的一次观察,我们对状态S2的价值估计就是12。这正是TD(1)算法在考虑学习率和初始值等因素后,试图根据现有数据逼近的目标值。
最大似然估计对比
现在,我们来看看这个基于结果的估计是否与最大似然估计的结果一致。最大似然估计的方法是:先用数据构建一个环境模型,然后求解该模型。
在给定的数据中,除了从S3出发的转移,其他状态转移都是确定性的。在全部五次状态转移经历中,我们观察到了所有状态和奖励,因此拥有构建完整模型所需的一切信息。
以下是构建模型的关键步骤:
- 我们需要估计从S3转移到S4和S5的概率。
- 通过统计数据中从S3出发的转移次数和各自的目的地,可以计算出这些概率。
通过这种基于模型的方法计算出的状态价值,将与单纯基于单次结果平均的TD(1)估计形成对比,从而揭示后者可能存在的局限性。


总结


本节课中我们一起学习了基于结果的估计方法,并以状态S2为例进行了计算。我们看到,TD(1)算法在数据有限(如某个状态只出现一次)时,其估计完全依赖于单次采样结果。接着,我们引入了最大似然估计作为对比,该方法通过数据构建统计模型来求解价值。这种对比帮助我们理解,为什么在某些数据场景下,TD(1)可能不是最优或“正确”的解决方案。
强化学习导论:P89:TD(0)规则 🎯
在本节中,我们将学习一种称为TD(0)的规则。这个名称与TD(1)有所区别,但后续我们会将这两者联系起来。TD(0)规则用于在智能体进行状态转移时,更新其离开状态的价值估计。
TD(0)规则的形式如下,它用于计算当我们进行一次状态转移后,对刚刚离开的状态的价值估计进行更新。


在时间步T(或轨迹T),V(S_{T-1}) 是状态 S_{T-1} 之前的价值估计。我们将根据学习率 α,朝着一个目标方向移动一小步。这个目标方向是:观察到的即时奖励 R_T,加上转移后新状态 S_T 的折扣估计价值 γV(S_T),再减去离开状态 S_{T-1} 的当前估计价值 V(S_{T-1})。
公式表示如下:
V(S_{T-1}) ← V(S_{T-1}) + α [ R_T + γV(S_T) - V(S_{T-1}) ]




这个公式看起来熟悉吗?它包含了价值函数V、奖励R和学习率α。确实,它与我们之前见过的更新形式有相似之处。但让我们更精确地理解它的行为。
上一节我们介绍了TD(0)规则的具体形式,本节中我们来看看这个更新规则在平均意义上的表现。
在这个更新中,随机性主要来源于:当我们处于某个状态 S_{T-1} 并执行动作后,我们不确定会转移到哪个具体的下一个状态 S_T,转移是由环境动态(概率)决定的。因此,这个更新规则实际上是在对不同可能出现的 S_T 进行采样。
从期望的角度来看,如果我们反复进行这个更新,我们实际上是在对可能的下一个状态及其奖励取期望。更常见(出现频率更高)的状态 S_T 会对更新产生更大的影响,而不太常见(出现概率较低)的状态 S_T 影响则较小。
其数学期望可以表示为对下一个状态 S' 的求和:
E[更新量] = Σ_{S'} P(S' | S_{T-1}) * [ R(S_{T-1}, S') + γV(S') - V(S_{T-1}) ]




这个期望形式将我们引向一个更深入的理解:TD(0)更新在期望上是在推动价值估计朝着贝尔曼方程所定义的真实价值函数方向移动。

总结

本节课中我们一起学习了TD(0)规则。
- 我们首先看到了TD(0)规则的具体更新公式,它利用当前状态的估计价值、即时奖励以及下一个状态的估计价值来调整价值函数。
- 接着,我们分析了该更新规则的期望行为,认识到它本质上是在对环境转移概率进行采样,并在平均意义上依据贝尔曼方程进行更新。
- 理解TD(0)的期望形式是连接其与蒙特卡洛方法及其他时序差分算法(如TD(λ))的重要桥梁。
090:TD(λ) 规则 🧠
在本节课中,我们将学习如何将之前介绍的两种时序差分算法——TD(0) 和 TD(1)——统一到一个更通用的框架中,即 TD(λ) 算法。我们将看到,通过调整一个名为 λ 的参数,TD(λ) 可以涵盖从 TD(0) 到 TD(1) 的整个算法谱系。
上一节我们介绍了 TD(0) 和 TD(1) 两种算法。本节中,我们将探讨如何将它们统一为一个更通用的算法。
TD(0) 和 TD(1) 的更新规则都基于“时序差分”(Temporal Differences),即基于连续时间步预测值之间的差异。正是这个共同点,使得将它们统一起来成为可能。
如果我们仔细观察 TD(0) 和 TD(1) 的算法公式,会发现它们看起来非常相似,但确实存在关键区别。
以下是 TD(0) 和 TD(1) 更新规则的核心部分,它们结构相近:
TD(0) 更新规则(简化示意):
V(S_t) ← V(S_t) + α [R_{t+1} + γV(S_{t+1}) - V(S_t)]
TD(1) 或蒙特卡洛更新规则(简化示意):
V(S_t) ← V(S_t) + α [G_t - V(S_t)]
其中 G_t 是从时间步 t 开始的实际回报总和。
它们的共同点是都包含一个“预测误差”项,用于更新价值函数。TD(0) 使用一步后的估计,而 TD(1) 使用整个回合的实际回报。



为了统一它们,我们引入一个参数 λ (0 ≤ λ ≤ 1)。TD(λ) 算法的核心思想是,对从当前状态开始,未来所有 n 步的估计回报进行加权平均,并将此作为更新目标。λ 控制着这些不同步数估计的权重。



具体而言,TD(λ) 定义了一个新的目标,称为 λ-回报 G_t^λ。其公式如下:

G_t^λ = (1 - λ) * Σ_{n=1}^{∞} λ^{n-1} * G_t^{(n)}
其中,G_t^{(n)} 是 n 步回报:
G_t^{(n)} = R_{t+1} + γR_{t+2} + ... + γ^{n-1}R_{t+n} + γ^n V(S_{t+n})
这个公式的含义是:
- 当 λ = 0 时,
G_t^λ退化为一步回报G_t^{(1)},此时 TD(λ) 等价于 TD(0)。 - 当 λ = 1 时,
G_t^λ退化为整个回合的实际回报(若回合有限),此时 TD(λ) 等价于 TD(1) 或蒙特卡洛方法。 - 当 λ 介于 0 和 1 之间 时,
G_t^λ是所有 n 步回报的加权平均,越近的步数(n 小)权重越高,实现了在一步引导和完全采样回报之间的平滑折衷。
因此,TD(λ) 的更新规则可以统一地写为:
V(S_t) ← V(S_t) + α [ G_t^λ - V(S_t) ]

本节课中我们一起学习了 TD(λ) 算法。我们了解到,通过引入一个参数 λ,可以创建一个统一的框架,将 TD(0) 和 TD(1) 作为其特例包含在内。λ 的值控制着算法在“基于即时估计的引导”和“基于长期实际回报的更新”之间的权衡,为强化学习智能体提供了更灵活的学习机制。
091:K步估计器
在本节课中,我们将学习一种分析TD(λ)算法的有效方法,即通过研究K步估计器来理解其核心思想。
上一节我们介绍了时序差分学习的基本概念,本节中我们来看看如何通过多步回报来改进价值估计。
概述
K步估计器是一种用于估计状态价值函数的方法。其核心思想是,在更新当前状态的价值估计时,不仅考虑立即获得的奖励,还考虑后续多个时间步的奖励,从而形成一个更准确、更长远的估计。
从一步估计器开始
首先,我们回顾一个最简单的估计器。以下是其更新公式:
V(S_t) ← V(S_t) + α [ R_{t+1} + γV(S_{t+1}) - V(S_t) ]
这个公式估计我们离开的状态的价值,方法是将其向“立即奖励”加上“折价后的下一状态估计价值”的方向调整一小步(由学习率α控制)。
你是否见过这个公式?这正是我们之前讨论过的一步估计器,有时也称为TD(0)方法。它只向前看一步,利用立即获得的奖励和下一个状态的估计价值。
扩展到两步估计器
理解了单步估计后,我们可以自然地将其扩展。以下是两步估计器的更新公式:
V(S_t) ← V(S_t) + α [ R_{t+1} + γR_{t+2} + γ²V(S_{t+2}) - V(S_t) ]
与一步估计器相比,两步估计器在更新时,不仅考虑下一步的立即奖励(R_{t+1}),还考虑再下一步的奖励(R_{t+2}),并最终以双倍折价(γ²)考虑两步之后的状态(S_{t+2})的估计价值。这样,它融合了更长期的回报信息。
理解K步估计器
基于上述模式,我们可以定义通用的K步估计器。以下是K步估计器的目标值公式:
G_t^{(k)} = R_{t+1} + γR_{t+2} + ... + γ^{k-1}R_{t+k} + γ^{k}V(S_{t+k})
这个公式的含义是:要估计状态S_t的价值,我们累计未来k步内的实际奖励(每一步都进行折价),并在第k步时,用折价后的状态估计价值V(S_{t+k})来代表k步之后的所有可能回报。
K步估计器在偏差与方差之间进行了权衡:
- k值越小(如k=1):更新依赖于更多的估计值(V(S_{t+1})),因此偏差可能较大,但只涉及少量随机奖励,方差较小。
- k值越大:更新包含了更多步的实际奖励,减少了依赖最终估计值的部分,因此偏差减小,但由于累计了更多随机变量,方差会增大。
与TD(λ)的联系
我们研究K步估计器,最终是为了理解TD(λ)算法。TD(λ)可以看作是对所有K步估计器的回报进行一种加权平均,其中λ参数控制着权重分配。当λ=0时,它等价于TD(0)(一步估计器);当λ=1时,在特定条件下它等价于蒙特卡洛方法(考虑直至回合结束的所有步)。
这种视角帮助我们理解TD(λ)是如何通过一个参数λ,灵活地在不同步数的估计器之间进行平滑插值,从而在偏差和方差之间取得平衡。
总结
本节课中我们一起学习了K步估计器。我们从熟悉的一步估计器(TD(0))出发,扩展到两步乃至通用的K步估计器,理解了其通过融合多步回报来改进价值估计的原理。最后,我们指出了K步估计器是理解TD(λ)算法的基础,TD(λ)本质上是所有K步估计器的一种指数加权平均形式。掌握这一概念,对于深入理解时序差分学习算法的家族至关重要。
强化学习导论:P92:K步估计器与TD(λ)

在本节课中,我们将学习如何将之前讨论的K步估计器与TD(λ)算法联系起来。我们将看到,TD(λ)实际上是所有K步估计器的一个加权组合。



上一节我们介绍了不同的K步估计器,本节中我们来看看如何将它们统一起来。
核心思想是,在任何一种TD(λ)算法中,我们实际上会使用所有K步估计器的一个加权组合。每次更新一个状态的价值时,所有不同的估计器都会给出它们认为价值应该移动的方向,而我们则取这些方向的一个凸组合(加权平均)。

以下是分配给各个K步估计器的权重:
- 1步估计器的权重是
(1 - λ) - 2步估计器的权重是
λ(1 - λ) - 3步估计器的权重是
λ²(1 - λ) - K步估计器的权重是
λ^(K-1)(1 - λ) - 以此类推,直到无穷步估计器。
这里有一个重要的点需要检查:这些权重之和必须为1,以确保这是一个有效的凸组合。我们可以验证这一点,因为这是一个几何级数求和:
(1 - λ) + λ(1 - λ) + λ²(1 - λ) + ... = (1 - λ) * (1 + λ + λ² + ...) = (1 - λ) * (1 / (1 - λ)) = 1
因此,所有权重之和确实为1。
你可能注意到,公式中似乎没有明确包含无穷步估计器(即蒙特卡洛估计)的权重。实际上,当K趋向于无穷大时,λ^(K-1)项会趋向于0(只要λ < 1),所以无穷步估计器在加权组合中获得的权重趋近于0。这正是我们期望的:λ控制着我们对近期估计(小K)和远期估计(大K)的信任程度。λ越小,越信任近期估计;λ越大,远期估计的影响也越大,但当λ<1时,无穷远处的估计影响微乎其微。


本节课中我们一起学习了TD(λ)算法的核心构成。它通过一个参数λ,以几何衰减的权重λ^(k-1)(1-λ),巧妙地融合了从1步到无穷步的所有估计器。这使得我们可以在偏差(使用小K)和方差(使用大K)之间进行平滑的权衡,而不是像之前那样只能在离散的K值中进行选择。
093:TD(λ) 算法的经验性能 📊

在本节课中,我们将探讨 TD(λ) 算法在有限数据上的经验性能表现。我们将分析不同 λ 值如何影响价值函数估计的准确性,并理解为何在某些情况下,中间 λ 值能提供比 TD(0) 或 TD(1) 更好的结果。


上一节我们介绍了 TD(λ) 算法的概念,本节中我们来看看它在实际应用中的表现。


假设我们给系统提供有限数量的数据,然后使用不同的 λ 值运行 TD(λ) 算法。接着,我们提出一个问题:你学习到的价值函数 V,与拥有无限数据时应得的 V 相比,误差有多大?

以下是不同 λ 值下误差变化的典型情况:
- λ = 0 (TD(0)):在有限数据下,TD(0) 会产生一定量的误差。
- λ = 1 (TD(1)):经验表明,在有限数据下,TD(1) 通常会产生比 TD(0) 更差的误差。
- 中间 λ 值:关键在于 λ 在 0 和 1 之间时会发生什么。误差变化曲线可能是一条直线,也可能向上凸起,但典型的经验结果是曲线向下凹陷。



因此,我们通常会看到一条类似下图的误差曲线。随着 λ 增加到某个中间值(例如 0.7,具体取决于问题本身),误差量会减小,性能变得更好。之后,误差会再次开始上升,并最终在 λ 趋近于 1 时达到 TD(1) 的误差水平。


这个现象正是我们考虑使用 TD(λ) 算法的理由。它实际上结合了 TD(0) 的快速在线更新和 TD(1)(或蒙特卡洛方法)在有限数据下可能更稳定的特性,通过调整 λ 参数,我们可以在两者之间找到一个最佳的平衡点,从而在有限数据条件下获得更优的性能。


本节课中我们一起学习了 TD(λ) 算法在有限数据下的经验性能。我们了解到,λ 参数的选择对学习效果有显著影响,一个中间的 λ 值(如 0.7)往往能在有限数据下提供比 λ=0 或 λ=1 更小的估计误差。这证明了 TD(λ) 作为一种混合方法的实用价值。
强化学习导论:P94:本章总结


在本节课中,我们将回顾并总结关于时序差分学习,特别是TD(λ)算法的核心内容。我们将梳理讨论过的关键概念,并理解它们在整个强化学习框架中的位置。


上一节我们介绍了TD(λ)算法的各种变体,本节中我们来看看本章讨论的核心要点。
什么是时序差分?
时序差分指的是在不同时间步之间观测值的差异。在强化学习中,这通常指的是从一个状态转移到下一个状态时,价值估计值之间的差异。因为价值函数本身就是对长期回报的一个良好概括。



强化学习方法的分类
在深入时序差分方法之前,我们首先将其置于更广阔的强化学习问题解决框架中。以下是三种主要的解决思路:
- 基于模型的学习:学习环境模型,然后基于模型进行规划。
- 基于价值的学习:直接学习价值函数,通过价值函数来推导策略。
- 基于策略的学习:直接学习或优化策略本身。
时序差分方法主要属于基于价值的学习范畴。


时序差分更新规则
我们深入探讨了时序差分方法的核心——更新规则。其本质是一种增量式更新价值估计的方法。我们也可以将其理解为一种基于结果的学习方式,即利用实际观测到的后续状态和回报来更新当前状态的估计。

本节课中我们一起学习了时序差分学习的核心思想,明确了它在基于价值学习框架中的位置,并理解了其更新规则的本质是通过比较不同时间步的估计差异来逐步优化价值函数。
强化学习导论:P96:带动作的贝尔曼方程
在本节课中,我们将学习强化学习中一个核心概念——带动作的贝尔曼方程,并了解其对应的时序差分更新规则,即Q学习算法。我们将看到,这个公式如何同时处理对价值函数的估计和对最优策略的逼近。
上一节我们介绍了状态价值函数的贝尔曼方程,本节中我们来看看当环境中包含智能体可以执行的动作时,情况会如何变化。
核心思想依然是贝尔曼方程和对应的学习更新规则,但这次引入了动作。在包含动作的形式中,我们得到的是贝尔曼方程的Q函数形式。Q函数 Q(s, a) 定义为:在状态 s 下采取动作 a 后,所能获得的即时奖励,加上折扣后的、在后续状态 s' 中采取最佳动作所能获得的期望价值。


其数学公式表达如下:
Q(s, a) = R(s, a) + γ * Σ [ P(s' | s, a) * max_{a'} Q(s', a') ]
或者,在从环境中采样得到单次转移 (s, a, r, s') 的情况下,其期望形式可以写作:

Q(s, a) = r + γ * max_{a'} Q(s', a')
这与之前的更新思想本质相同。因此,我们可以用同样的思路将其转化为类似TD(0)的更新规则。我们将得到一个价值函数的新估计值,更新方式是从一个时间步到下一个时间步逐步调整。
更新规则适用于所有状态-动作对,但只有我们刚刚离开的那个状态-动作对(即上一步在状态 s_{t-1} 执行的动作 a_{t-1})会得到更新。对于这一对,我们会朝着“即时奖励”加上“到达状态 s_t 的折扣后价值”的方向移动一小步。这里的状态价值是相对于从该状态能采取的最佳动作来计算的。
其更新公式为:

Q(s_{t-1}, a_{t-1}) ← Q(s_{t-1}, a_{t-1}) + α * [ r_t + γ * max_{a} Q(s_t, a) - Q(s_{t-1}, a_{t-1}) ]
这同样是相同的更新规则。唯一的区别是,公式中多了一个 max 操作,用以模拟从每个后续状态中选择最佳动作的思想。
接下来,我想说明的是,这个Q学习更新规则实际上同时处理了两种不同的近似。
以下是Q学习规则同时完成的两项任务:
- 价值估计:它通过时序差分学习,逐步更新并逼近每个状态-动作对 (s, a) 的真实Q值。
- 策略改进:在更新目标中,它使用了 max_{a} Q(s_t, a)。这意味着它假设并学习的是最优策略下的价值函数,即在每个状态都选择能带来最大未来回报的动作。因此,它在学习价值函数的同时,也隐式地定义了贪婪最优策略。


本节课中我们一起学习了带动作的贝尔曼方程(即Q函数贝尔曼方程)及其对应的在线学习算法——Q学习。我们看到,Q学习通过一个简洁的更新规则,巧妙地结合了价值评估和策略改进,使其能够直接学习最优动作价值函数,是强化学习中无模型算法的基石之一。
强化学习导论:P99:贝尔曼算子与最优解

在本节课中,我们将学习贝尔曼算子的定义,并探讨如何利用它来简洁地表示和求解最优Q函数。
上一节我们介绍了贝尔曼算子的概念,本节中我们来看看如何用它来求解最优Q函数。
贝尔曼算子的定义
贝尔曼算子 B 是一个数学运算符,它作用于一个Q函数,并产生一个新的Q函数。其定义如下:
对于任意给定的Q函数 Q(s, a),应用贝尔曼算子后得到的新Q函数 BQ(s, a) 为:
BQ(s, a) = R(s, a) + γ * Σ_{s'} P(s' | s, a) * max_{a'} Q(s', a')
其中:
- R(s, a) 是在状态 s 下执行动作 a 获得的即时奖励。
- γ 是折扣因子。
- P(s' | s, a) 是从状态 s 执行动作 a 后转移到状态 s' 的概率。
- max_{a'} Q(s', a') 表示在下一个状态 s' 下,选择能最大化Q值的动作 a'。

最优Q函数的性质
最优Q函数 Q*(s, a) 有一个关键性质:它是贝尔曼算子的一个“不动点”。这意味着,如果你将最优Q函数 Q* 代入贝尔曼算子 B,得到的结果仍然是 Q* 本身。

用公式表示即为:
BQ* = Q*

推导与验证
现在,让我们验证这个性质。根据贝尔曼算子的定义,将 Q* 代入:

BQ*(s, a) = R(s, a) + γ * Σ_{s'} P(s' | s, a) * max_{a'} Q*(s', a')
观察等式的右边,这正是最优Q函数 Q* 自身的定义方程,即贝尔曼最优方程。

因此,我们得出结论:
BQ* = Q*

这个等式简洁地表明,最优Q函数 Q* 是贝尔曼算子 B 的一个固定点。

贝尔曼更新
基于上述思想,我们可以理解值迭代算法的核心步骤。当我们有一个当前的Q函数估计值 Q 时,对其应用一次贝尔曼算子,就完成了一次“贝尔曼更新”,从而得到一个改进的(更接近最优的)Q函数估计值 Q'。
用公式表示这个更新过程为:
Q' = BQ
这个过程会不断重复,直到Q函数收敛到不动点 Q*。
总结

本节课中我们一起学习了贝尔曼算子的核心应用。我们了解到,最优Q函数 Q* 是贝尔曼算子 B 的不动点,满足 BQ* = Q*。这一性质为强化学习中的值迭代算法提供了理论基础,该算法通过反复应用贝尔曼算子(即进行贝尔曼更新)来逐步逼近最优Q函数。

浙公网安备 33010602011771号