阿尔伯塔强化学习笔记-全-
阿尔伯塔强化学习笔记(全)
强化学习专项课程:P1-01:专业介绍




在本节课中,我们将通过一个生动的例子,初步了解强化学习的基本概念及其解决问题的独特思路。
亚当,你在做什么?团队最近为了测试新算法经常熬夜到很晚。众所周知,研究人员是靠汽水和披萨来补充能量的。现在,实验室开始看起来像个废品场了。
所以,你打算禁止在实验室里吃东西吗?不,那太不近人情了。我在考虑编程一个机器人,让它能在实验室里四处移动并收集空罐子。
这听起来很酷。它要怎么工作呢?嗯,我认为需要一个视觉系统来识别罐子、障碍物和人。机器人还需要构建一张地图,并确定自己在实验室中的位置。然后,我们还得编写一些导航程序。
我得在这里打断你一下。我想可能有更简单的方法来解决这个问题。让我们用强化学习来解决它。
好吧,强化学习。玛莎,你会怎么做呢?奖励可以设定为机器人收集的罐子数量。智能体可以通过试错,简单地学习如何收集尽可能多的罐子。原则上,它甚至不需要实验室的地图,可以从零开始学习一切。
概述
上述对话展示了一个传统编程方法与强化学习方法解决问题的对比。传统方法需要工程师预先定义好所有规则(如识别、建图、定位、导航),而强化学习则让一个“智能体”通过与环境的交互来自主学习最优行为策略。
核心概念解析
在强化学习框架中,有几个核心组成部分:
- 智能体:做出决策和行动的主体,例如对话中提到的机器人。
- 环境:智能体所处并与之交互的外部世界,例如布满罐子的实验室。
- 状态:环境在特定时刻的描述,例如机器人当前的位置、周围有哪些罐子和障碍物。
- 动作:智能体可以执行的操作,例如前进、转向、抓取。
- 奖励:环境对智能体动作的即时反馈信号,是智能体学习的目标导向。在例子中,奖励是收集到的罐子数量。
智能体的目标是学习一个策略,使其在与环境交互的过程中,获得的累计奖励总和最大化。这个过程通常可以形式化地表示为寻找最优策略 π*,以最大化期望回报(总奖励):
max π E[Σ γ^t * R_t | π]
其中,R_t 是时间步 t 获得的奖励,γ 是折扣因子(用于权衡近期与远期奖励)。
方法对比
为了更清晰地理解强化学习的思路,以下是两种方法的简单对比:
-
传统编程方法:
- 感知:需要复杂的视觉系统识别物体。
- 建模:需要构建环境地图。
- 规划:需要编写详细的导航与抓取逻辑。
- 执行:机器人按预设程序运行。
-
强化学习方法:
- 定义目标:设定奖励信号(如捡到罐子得+1分)。
- 交互试错:机器人尝试各种动作,观察结果(是否捡到罐子、是否撞墙)。
- 学习优化:根据奖励不断调整策略,最终学会高效收集罐子的行为。
- 结果:机器人可能学会走捷径、避开拥堵区域等策略,而无需被明确编程这些规则。
总结
本节课我们一起学习了强化学习的一个入门示例。通过“实验室机器人收集罐子”的场景,我们看到了强化学习如何通过定义奖励、让智能体与环境交互试错来解决问题,从而避免了传统方法中需要手动设计复杂规则和系统的过程。其核心思想是从交互中学习,以最大化累积奖励为目标。在接下来的课程中,我们将深入探讨实现这一目标的具体算法和理论。
002:课程介绍 🎯

在本节课中,我们将介绍强化学习领域的基本概念、其与其他机器学习范式的区别,以及本专项课程的学习路径与目标。
概述
强化学习的历史并不算久远。在21世纪初,该领域与现今情况大不相同。当时全球仅有少数实验室专注于强化学习,业界几乎无人使用,其实际成功应用也仅限于少数几个领域。
强化学习的早期成就与愿景
尽管早期应用有限,但强化学习已展现出潜力。例如,它能让直升机完成人类难以做到的倒飞动作;我们的方法能击败世界上最顶尖的双陆棋玩家,并能很好地调度电梯。然而,当时强化学习并非让机器人完成有用任务的最佳方式。一个计算机学习智能体能在电子游戏中胜过人类的想法,几乎是不可想象的。
尽管如此,我们仍抱有希望。因为我们相信,强化学习是实现人工智能进步的最佳途径。人工智能的承诺令人神往:一个学习智能体能够通过简单地尝试并观察结果,来理解世界如何运作。毕竟,我们认为人类和动物就是这样学习的。那么,为什么不能在计算机上模拟这个过程呢?
如果能够实现,它将在几乎任何应用中都发挥作用。作为一个不错的附带效果,我们也可能对自身思维的工作方式有更深入的了解。
与其他机器学习范式的区别
你可能会问,监督学习、无监督学习和强化学习之间有何区别?区别其实相当简单。
在监督学习中,我们假设学习者能够获得带有正确答案的标记示例。其核心是学习从输入到已知输出的映射。
在强化学习中,奖励信号为智能体提供了其近期行动好坏的某种反馈。你可以将监督学习想象成需要一位老师,通过告诉你正确答案来帮助你。而奖励则像是有一个能识别什么是好行为,但无法确切告诉你如何去做的人。
无监督学习听起来可能相关,但其目标截然不同。无监督学习是关于从数据中提取潜在结构,关注的是数据表示。它可以用来构建能使监督学习或强化学习系统更好的表示。事实上,在本课程后面你将看到,监督学习和无监督学习的技术都可以在强化学习中使用,以辅助泛化。
强化学习的核心:在线交互学习
在强化学习中,我们专注于在与不断变化的世界交互的过程中进行学习的问题。我们不期望智能体只是计算出一个好的行为,然后以开环方式执行该行为。我们期望智能体会犯错,并在过程中不断完善其理解。
世界不是静态的:我们会受伤,天气会变化,我们会遇到新情况,我们的目标也会改变。一个能即时整合其最新经验的智能体应该会表现得更好,特别是与那些试图完美记忆世界运作方式的智能体相比。
在线学习的理念极其强大,是强化学习的一个定义性特征。我们引入概念的方式也由这一事实决定。例如,我们先介绍赌博机和探索的概念,之后再引入来自监督学习的理念。如果你有机器学习背景,这可能会让你感觉顺序颠倒了。但正如你将看到的,困难的部分是在线学习,而不仅仅是从数据中学习。适应在线环境需要新的视角。
强化学习的现状与基础的重要性
如今,强化学习领域正以惊人的速度发展。几乎每周都有关于新算法进展以及在基准领域达到最先进性能的改进的帖子发布。搜索公司、在线零售商和硬件制造商正在探索强化学习解决方案以优化其日常运营。他们相信在线学习能提高效率、节省资金,并使人类远离危险环境。
我从未想过会有公司专门致力于强化学习的研究与应用,这确实非常了不起。然而,事物变化越快,专注于基础就越重要。强化学习中的一些思想甚至可以追溯到巴甫洛夫和他的流口水狗。
仔细观察几乎任何现代强化学习系统,你会发现它都是由比本专项课程早一二十年的思想和算法构建而成的。例如,DQN的核心结合了Q学习、神经网络和经验回放。然而,要让这些系统获得良好性能,需要重大的创新。我们绝不会贬低那些工作的重要性。事实上,我们希望你能理解这些复杂而庞大的学习系统。为此,你首先需要理解基础知识。
本课程的学习路径

这正是本课程的起点——从基础开始。在本专项课程中,我们将涵盖现代强化学习系统中使用的大部分主要思想。到最后,你将实现一个神经网络学习系统来解决一个无限状态控制任务。
但我们将从小问题开始。我们将花时间讨论强化学习中的基本挑战以及我们解决这些挑战的最佳思路。序列决策问题代表了我们这一代人最伟大的奖赏之一,因此花时间并正确处理细节是恰当的。
我们的研究将从强化学习问题的一个特例开始,称为多臂赌博机问题。智能体必须决定哪个选择平均能产生最好的结果或奖励。这个完整强化学习问题的简化实例,或许是理解和解决强化学习根本挑战的最佳场景。
本模块将介绍价值估计、增量学习、探索、非平稳性和参数调优。在接下来的四门课程中,我们将继续以不同的方式发展和组合这些思想。
总结
本节课中,我们一起学习了强化学习的定义、其与其他机器学习范式的核心区别,以及在线交互学习的核心思想。我们回顾了该领域的发展历程与现状,并强调了掌握基础原理对于理解复杂系统的重要性。最后,我们明确了本专项课程将从多臂赌博机这一基础问题入手,逐步构建完整的强化学习知识体系。
003:认识你的导师 👨🏫👩🏫

在本节课中,我们将认识阿尔伯塔大学强化学习专项课程的两位导师:Adam White和Martha White。我们将了解他们的背景、研究兴趣以及他们如何看待强化学习领域的未来。
导师介绍

Martha White:我是Martha,阿尔伯塔大学的助理教授。
Adam White:我是Adam,阿尔伯塔大学的研究教授,同时也是DeepMind的高级研究员。
Adam的研究与贡献
Adam因其在强化学习的预测知识方面的工作而闻名。全球多个研究小组都在基于这些想法进行深入研究。我个人认为这是近年来最重要的工作之一,并且其影响力只会越来越大。
他同时也是一位杰出的实证研究者,是设计实验以触及关键问题的大师。他持续致力于提升强化学习社区的科学理解。
Martha的研究与贡献
Martha对强化学习的算法贡献不胜枚举。她开发了多种新的离策略学习算法、新的策略梯度方法,并在表示学习方面做出了数十项令人印象深刻的贡献。
她确实是强化学习领域冉冉升起的年轻新星之一。她恰好也是我最频繁的合作者以及我的人生伴侣。
Adam的学术之路
那么,你是如何进入计算机科学领域的?我在东海岸长大,高中时对科学非常感兴趣,比如物理、化学、生物,但我没有找到真正适合的方向。
因此,我有些随机地选修了一门计算机科学和编程课程,用的实际上是GW-BASIC语言。那对我来说真是一个决定职业生涯的时刻,因为我记得第一次实现 if 语句或 for 循环时,能够让计算机为我执行一系列指令,这让我感到非常神奇。
从那时起,我就注定要在大学学习计算机科学了。那么,你后来为什么开始研究强化学习呢?
在研究生阶段,我搬到了阿尔伯塔。我来这里原本是为了学习并行分布式计算,那是我本科时主要关注的方向。所以我选了很多系统课程,但还有一个选修课的名额。
于是我四处寻找课程,并采用了一个非常合理的策略:我看了教授们的照片,然后挑选了看起来最友善的一位教授。
是的,那位教授就是Rich Sutton,课程是“强化学习导论”。那门课非常棒,真的很有启发性。那是我第一次接触人工智能或任何形式的机器学习。
我记得那门课的一个早期作业是实现Sarsa算法来解决一个网格世界问题。这再次成为了我职业生涯的决定性时刻:看着这个智能体学会解决迷宫,它接收到的唯一反馈是每一步-1的奖励信号,但它却神奇地找到了一条极其高效的出迷宫路径。这再次让我感到惊奇,我被深深吸引,并决定余生都要继续从事这项研究。
Martha的学术之路
Martha,你又是如何最终从事机器学习和人工智能研究的呢?实际上,我本科是从数学开始的。我一直认为函数和动力系统非常优美。
然后我只是出于兴趣选修了一门计算机科学课程,结果发现真的很有趣。所以我继续同时学习数学和计算机科学,而这两个学科对于人工智能和机器学习来说结合得非常好。
之后我在暑期做了一些人工智能研究,并从此继续了下去。我之所以留在这个领域,是因为随着时间的推移,我意识到这不仅仅是关于数学中的函数。这真的是一个你可以进行大量合作的社区,你可以建立一个帮助他人的职业生涯。
在我的日常工作中,我指导很多人,并与一个大型团队一起研究难题。能够在一个团队中研究如此有趣的问题,这真的非常棒。
给研究生的建议
可能有些学习这门RL课程的人是因为他们想在RL领域进行研究生学习。那么,你在研究生阶段学到的最重要的事情是什么?
也许令人惊讶的是,我学到的一个经验可能适用于所有科学领域,事实上,适用于任何形式的研究:那就是真正热爱深入理解事物的细节,专注于小问题并真正、彻底地理解它们。
我认为这一点在广泛的领域中都非常适用。这也是我传授给我的学生和课堂的东西,我非常注重教导我的研究生这一点,并且我希望与学习这个专项课程的人们分享这一点。
工作的意义
那么,你喜欢你工作的哪些方面?我热爱做研究,但有时这可能会让你有点疲惫,比如工作时间很长,同行评审过程可能有点令人沮丧。
在那些时候,当你退一步审视自己的研究时,它可能显得有点渺小和不重要,很难看出它将如何发展,如何影响世界并让世界变得更美好。
在那些时候,你总是可以回归到教学和指导上。教学是你帮助人们第一次学习事物、理解你所在领域如何运作的地方,这非常令人兴奋。你也是他们职业生涯开始的见证者,无论他们最终进入学术界、工业界还是创办自己的公司。
成为这个过程的一部分是一种非常奇妙的体验。你知道,在我的一周中,对我来说最好的一天总是那些日程排满了与学生会议的日子,我可以帮助他们解决问题,并更好地理解强化学习。
强化学习的重要性
那么,你为什么认为研究强化学习如此重要?强化学习的潜力确实很大,但仍然存在许多开放的挑战。机器学习已经开始被更广泛地使用,但强化学习目前只在少数几个领域得到应用。
但同时,我认为强化学习可以产生非常大的影响。我认为在未来十年左右,我们将看到更多的控制工程师在他们的系统中实际使用强化学习。我们真的会看到它是一种可以在更大的工程系统中帮助自动化决策的工具。
但我认为,要真正实现这一点,我们需要在强化学习方面取得一些进展。我们需要更多地思考如何拥有稳健的算法,以及如何让人们乐于使用这些算法。所以我认为,随着在工业界的采用,我们还需要思考如何改进强化学习算法,以便这两件事能够同时发生。
那么你呢,你为什么认为强化学习值得研究?自然,我认为强化学习是研究人工智能、朝着解决人工智能问题取得进展的绝对正确的框架。
但强化学习对我来说也非常重要,因为我对发展性学习系统非常感兴趣。你可以想想人类,比如在地板上玩耍的婴儿,或者学习认识世界的幼小动物。
我想了解这些系统以及它们是如何工作的。如果你思考这些系统,它们能在极短的时间内学到海量的知识。它们学习如何爬行,学习自己的身体如何工作,学习如何与环境互动,操纵物体,与世界中的其他智能体交流。
总的来说,它们是非常强大的学习系统,而这一切只发生在几周到几个月的时间里。这真的非常惊人,感觉我们还有大量的工作要做才能接近这类系统。所以我真的想了解这些系统可能使用的算法和表示方法,而我认为强化学习是观察和理解这些事物的正确视角。
强化学习的未来
应用总是能推动领域的兴趣和兴奋点。我们在游戏和一些工业控制问题上已经有了一些应用,但你认为强化学习的下一个重大突破会是什么?
就其核心而言,我认为强化学习是一种通用的自动化决策方法。它是一种将在我们许多工程系统中帮助我们的工具。
因此,我认为它将真正起飞的地方是工业控制领域。在工业控制领域,专家们正在真正寻找方法来优化他们的系统性能。所以我们将看到它被用于降低能源成本或节省工业控制系统中的其他类型成本。
在专家手中,我们真的可以在不久的将来让这些算法很好地工作。所以我真的把它看作是一种将促进专家工作的工具,而不是说取代人们或使他们自动化消失。

总结

本节课中,我们一起认识了阿尔伯塔大学强化学习专项课程的两位导师Adam White和Martha White。我们了解了他们进入计算机科学和强化学习领域的个人经历,他们对研究生学习的宝贵建议,以及他们对强化学习重要性及未来发展的深刻见解。Adam强调了深入理解细节的重要性,而Martha则分享了教学与指导带来的满足感。他们都认为强化学习是自动化决策的强大工具,并看好其在工业控制等领域的应用前景,同时也指出了算法鲁棒性和易用性等需要进一步发展的方向。
004:你的专业学习路线图 🗺️

在本节课中,我们将概述整个强化学习专项课程的学习路线图。我们将从基础概念开始,逐步深入到高级主题,最终通过一个顶点项目将所有知识融会贯通。
强化学习是一个热门领域,每周似乎都有新的算法或应用出现。然而,强化学习的基础原理在很大程度上是稳定不变的。最先进的学习系统通常由几个广为人知且并不复杂的核心思想构建而成。以DQN为例,这个学习系统结合了Q学习、ε-贪心动作选择、神经网络函数逼近以及其他一些思想,从而在雅达利游戏中取得了超越人类的分数。在这一系统中,我们可以看到许多强化学习系统最常见的构建模块。

本课程将紧密跟随萨顿和巴托的《强化学习导论》新版。第一版培养了两代强化学习研究者,包括玛莎和我本人。这本书以及本专项课程遵循一个简单的原则:在问题出现的最简单情境中介绍每个思想。秉承这一精神,我们将从多臂老丨虎丨机问题开始学习。
课程一:基础与规划
上一节我们提到了从简单情境入手的原则,本节中我们来看看课程一的具体内容。
我们从多臂老丨虎丨机问题入手,首次体验增量学习、探索与利用之间的复杂性。之后,我们将转向马尔可夫决策过程,以扩展强化学习方法所能解决的问题范围。在这里,我们将学习如何平衡短期与长期奖励,并介绍几乎所有强化学习系统都会用到的关键思想,如策略和价值函数。课程一将以经典的动态规划规划方法作为结束。这些方法已被用于大型工业控制问题,并且可以在给定完整世界模型的情况下计算出最优策略。
课程二:无模型学习
在掌握了基于模型规划的基础后,课程二中我们将基于这些思想,设计无需世界模型即可进行学习的算法。
我们将研究三类专为通过试错交互进行学习而设计的方法:
- 蒙特卡洛方法:通过完整的经验片段进行学习。
- 时序差分学习:包括著名的Q学习算法。
- 基于学习模型的规划方法:探讨如何利用学到的模型进行规划。
课程三:函数逼近
离开小型有限MDP的相对舒适区后,课程三我们将研究使用函数逼近的强化学习。
我们将看到,课程一和课程二中的主要概念可以迁移到具有巨大或无限状态空间的问题中。课程涵盖内容包括:
- 特征构建
- 神经网络学习
- 策略梯度方法
- 函数逼近设定下的其他特性
你会发现,本专项课程从基础材料开始,但到课程三结束时,你会看到我们如何在早期介绍的简单概念上构建出丰富的知识体系。完成课程三后,你可能会惊讶于自己学到了如此多的内容,尽管每一步在当时看来都相当简单。
课程四:顶点项目与科学方法
专项课程的最后一门课程将通过一个顶点项目将所有内容整合在一起。与理查德和安迪的书一样,在整个专项课程中,我们强调严谨、科学的强化学习方法。
我们进行了大量实验,旨在仔细比较不同算法。要产生有意义的实证结果,需要细致的规划和大量的艰苦工作。😊
在顶点项目中,我们将引导你完成这个过程的每一步,以便你能进行自己的科学实验。我们将探索从问题定义一直到生成达到出版质量的图表的所有阶段。这不仅仅是学术训练,在实际问题中,验证和理解你的系统同样至关重要。
在此之后,你应该准备好测试自己的新想法,或在工作中应对强化学习激动人心的新应用。
本节课中,我们一起学习了阿尔伯塔大学强化学习专项课程的整体路线图。我们从多臂老丨虎丨机和MDP的基础开始,逐步深入到无模型学习、函数逼近等高级主题,并最终通过强调科学方法的顶点项目完成整个学习循环。希望你能享受这段学习之旅。
005:基于评估反馈的序贯决策


在本节课中,我们将学习强化学习的核心特征:智能体通过与环境的交互来生成自己的训练数据。我们将聚焦于一个简化的决策问题——多臂老丨虎丨机问题,并借此形式化不确定性下的决策,介绍奖励、时间步和价值等基本概念。
问题引入:不确定性下的决策
在强化学习中,智能体必须通过试错来学习自身行动的后果,而不是被告知正确的行动。
上一节我们介绍了强化学习的基本范式,本节中我们来看看一个具体的简化场景。
想象一个医学试验,医生想测量三种不同疗法的效果。每当有病人就诊,医生会随机开一种处方,然后观察病人健康状况的变化。一段时间后,医生发现其中一种疗法似乎比其他两种效果更好。此时,医生面临一个抉择:是坚持使用效果最好的疗法,还是继续进行随机化研究。如果只使用一种疗法,就无法收集其他两种疗法的数据,也许它们实际上更好,只是由于偶然性显得更差。但如果其他两种疗法确实更差,继续研究就会损害其他病人的健康。这个医学试验是不确定性下决策的一个典型案例。
形式化:K臂老丨虎丨机问题
这个医学试验的例子是K臂老丨虎丨机问题的一个实例。在K臂老丨虎丨机问题中,我们有一个决策者或智能体,它需要在K个不同的动作中进行选择,并根据其选择的动作获得奖励。
以下是该问题的核心组成部分:
- 智能体:在我们的例子中,由医生扮演。
- 动作:医生需要在三个动作中选择一个,即开蓝色、红色或黄色疗法的处方。
- 奖励:病人接受治疗后的健康状况(或更易测量的指标,如血压变化)就是医生获得的奖励。
核心概念:动作价值
为了让医生决定哪个动作最好,我们必须定义执行每个动作的价值。我们称这些价值为动作价值或动作价值函数。
我们可以通过概率语言更精确地定义它。我们将选择某个动作的价值定义为采取该动作时预期获得的奖励。
公式:Q*(a) ≐ E[Rt | At = a], 对于所有可能的动作 a = 1, ..., K。
(注:符号“≐”表示“定义为”。Q*(a) 定义为在给定选择了动作a的条件下,奖励Rt的期望值。)
这个条件期望被定义为对所有可能奖励的求和。在求和内部,我们将可能的奖励乘以其被观察到的概率。对于连续奖励的情况,可以将求和替换为积分。
智能体的目标是最大化预期奖励。如果智能体选择了具有最高价值的动作,它就实现了这个目标。我们称这个过程为贪心策略,即选择使函数Q*最大化的参数(动作)。
深入理解动作价值
为了更好地理解Q*,让我们回到医学试验的例子。之前我们说奖励可以是病人接受治疗后的健康状况。但在这个例子中,我们使用更容易测量的东西,比如接受治疗后的血压变化。
每种疗法可能产生遵循不同概率分布的奖励。也许一种是伯努利分布,一种是二项分布,一种是均匀分布。Q*就是每个动作对应分布的均值。
例如,你可以轻松计算伯努利分布的期望值:只需将失败的概率乘以失败时的奖励,加上成功的概率乘以成功时的奖励。这是基础的统计学知识。

现实世界中的例子

不确定性下决策的例子有很多。例如我们已经讨论过的医学试验。
以下是其他一些例子:
- 内容推荐:比如推荐看什么电影或听什么歌。
- 餐厅点餐:你无法确定自己会喜欢什么,但你会做出你所能做的最佳选择。
为什么先研究老丨虎丨机问题?
因为最好在问题最初出现的、最简单的环境中考虑算法设计中的问题和选择。例如,最大化奖励和估计价值是老丨虎丨机问题和强化学习中共同的重要子问题。
课程总结
本节课中我们一起学习了K臂老丨虎丨机问题。我们展示了如何通过K臂老丨虎丨机问题来形式化不确定性下的决策。在老丨虎丨机问题中,我们已经看到了强化学习背后的基本思想:动作、奖励和价值函数。
006:学习动作价值 🎯

在本节课中,我们将学习如何估计不同动作的价值,这是强化学习智能体做出决策的基础。我们将从一个医生进行药物试验的例子开始,介绍样本平均法,并探讨如何基于当前知识选择动作。
还记得我们那位进行药物试验的医生吗?如果这位医生已经知道每种治疗方案的长期效果,那么选择合适的治疗方案将变得非常简单。然而,实际情况往往并非如此。
通常,医生会进行多次试验来了解每种治疗方案。每一天,医生都可以利用之前收集的所有数据来估计他们认为最好的治疗方案。让我们来学习这可能如何运作。今天我们将讨论一种估计动作价值的方法,称为样本平均法。
我们将使用这种方法来计算我们药物试验例子中每种治疗方案的价值。然后,我们将描述贪婪动作选择,最后,我们将介绍强化学习中的探索与利用困境。
回顾动作价值定义 📖
在开始之前,让我们回顾一下动作价值的定义。选择一个动作 a 的价值 Q*(a),是在采取该动作后收到的期望奖励。

Q*(a) 对于智能体来说是未知的,就像医生不知道每种治疗方案的效果一样。因此,我们需要找到一种方法来估计它。
样本平均估计法 📊

一种估计 Q* 的方法是计算样本平均值。我们只需记录每个动作获得的总奖励,然后除以该动作被选择的次数。

为了直观地理解样本平均估计,让我们看一个具体的动作,动作 A。动作 A 的估计价值是采取动作 A 时观察到的奖励之和,除以动作 A 被采取的总次数。
我们使用 T-1 是因为时间 T 的价值是基于时间 T 之前采取的动作。此外,如果动作 A 尚未被采取,我们将其价值设置为某个默认值,例如零。

应用于药物试验案例 💊
让我们回到药物试验的例子。我们的医生必须决定开三种可能的治疗方案中的哪一种。如果病人好转,医生记录奖励为 1。否则,医生记录奖励为 0。
假设我们知道真实的 Q*,但我们的医生不知道。医生在时间步骤 1 给第一位病人开了治疗方案 P。病人报告感觉好转。医生为该治疗记录奖励 1,并更新其价值估计。到目前为止只有一个数据点,所以治疗方案 P 的估计价值是 1。
第二位病人到来。医生随机地再次开了治疗方案 P。治疗失败。医生记录奖励 0,并将治疗方案 P 的价值估计更新为 0.5。其他动作的估计价值保持为零,因为我们定义初始估计值为零。
让我们稍微快进一下时间。在每种治疗方案都尝试了几次之后,我们可以根据观察到的数据计算估计价值。随着医生观察更多病人,这些估计值会接近真实的动作价值。

贪婪动作选择 🤔
在现实中,我们的医生不会随机分配治疗方案给病人。相反,他们可能会分配他们当前认为最好的治疗方案。我们称这种选择动作的方法为贪婪。贪婪动作是当前具有最大估计价值的动作。
选择贪婪动作意味着智能体正在利用其当前知识。它试图立即获得尽可能多的奖励。
我们可以通过取估计价值的 argmax 来计算贪婪动作。或者,智能体可以选择通过选择一个非贪婪动作来探索。智能体会牺牲即时奖励,希望获得关于其他动作的更多信息。
智能体不能同时选择探索和利用。这是强化学习中的一个基本问题,即探索与利用困境。我们将在接下来的视频中进一步讨论这个问题。
总结 ✨
本节课中,我们一起学习了用于估计动作价值的样本平均法,并将贪婪动作定义为具有最大价值估计的动作。我们通过医生的例子理解了如何从数据中逐步更新对动作价值的认知,并初步认识了智能体在决策时面临的探索与利用的根本性权衡。
007:增量式估计动作价值


在本节课中,我们将学习如何在不存储海量历史数据的情况下,持续更新对动作价值的估计。我们将从样本平均法的递归形式开始,推导出增量更新规则,并将其推广为一个通用学习公式。最后,我们将探讨这个通用规则如何应用于奖励分布会随时间变化的非平稳问题。
从样本平均到增量更新
上一节我们介绍了使用样本平均法来估计动作价值。然而,当数据量极大时,存储所有历史数据并重新计算平均值是不现实的。
想象你运营一个日访问量达数百万次的网站。你可以将此建模为一个K臂赌博机问题。每个广告的估计价值对应其产生的总收益。你的目标是展示能带来最多收益的广告。那么,如何在不存储数百万次点击数据的情况下,保持价值估计的实时更新呢?
以下是实现增量更新的关键步骤。我们将展示如何将样本平均法改写为递归形式,从而避免存储所有过往数据。
首先,回顾样本平均法的定义公式:
Q_n = (R_1 + R_2 + ... + R_{n-1}) / (n-1)
为了推导递归形式,我们从 Q_{n+1} 的定义开始:
Q_{n+1} = (R_1 + R_2 + ... + R_n) / n
接下来,我们将最新的奖励 R_n 从求和式中分离出来:
Q_{n+1} = [ (R_1 + ... + R_{n-1}) + R_n ] / n
此时,求和部分只包含前 n-1 个奖励。我们引入 Q_n 的定义来替换这个求和。因为 Q_n = (R_1 + ... + R_{n-1}) / (n-1),所以 (R_1 + ... + R_{n-1}) = (n-1) * Q_n。
将其代入上式:
Q_{n+1} = [ (n-1) * Q_n + R_n ] / n
对上式进行展开和整理:
Q_{n+1} = (n/n) * Q_n - (1/n) * Q_n + (1/n) * R_n
Q_{n+1} = Q_n + (1/n) * [ R_n - Q_n ]
于是,我们得到了增量更新规则:
新估计 = 旧估计 + 步长 * (目标 - 旧估计)
具体公式为:
Q_{n+1} = Q_n + α_n * [ R_n - Q_n ]
其中,步长 α_n = 1/n。
通用学习规则
上一节我们得到了增量更新公式。本节中,我们来看看这个公式如何被抽象为一个更通用的学习规则,这个规则将在整个课程中反复出现。
我们得到的方程具有一种通用形式。让我们定义其中的关键术语。
- 误差:
[ R_n - Q_n ]代表了旧估计Q_n与新观测到的目标R_n之间的差异。 - 目标:在这个例子中,新获得的奖励
R_n就是我们的目标。 - 步长:参数
α_n决定了我们朝着新目标迈出的步伐大小。
因此,通用更新规则可以描述为:通过朝着目标方向迈出一步来更新估计值,这一步的大小由步长参数和当前估计的误差共同决定。
在样本平均法的特定情况下,步长 α_n = 1/n。这个步长会随着时间推移而减小,确保估计值最终收敛到真实期望值。
应用于非平稳问题
我们已经介绍了适用于平稳环境的通用更新规则。现在,让我们考虑环境本身会发生变化的情况,即非平稳问题。
回到我们友好的医生例子。如果其中一种疗法在特定条件下更有效呢?例如,假设疗法B在冬季月份更有效。这就是一个非平稳赌博机问题的实例。这类问题与我们之前讨论的赌博机问题类似,但奖励的分布会随时间变化。医生可能不知道这种变化,但希望模型能够适应它。
在这种情况下,使用递减步长 α_n = 1/n 可能不是最佳选择,因为它会给所有历史数据赋予相同的权重(在平均意义上),导致模型难以适应新的变化。

一种选择是使用固定步长。如果 α_n 是一个常数(例如 α = 0.1),那么最近的奖励会比更早的奖励对估计值产生更大的影响。
下图展示了最近一次获得的奖励与 T 步之前获得的奖励分别对当前估计值的权重影响。当步长固定时,权重随时间呈指数衰减。

为了理解其原因,让我们再次审视增量更新方程:
Q_{n+1} = Q_n + α * [ R_n - Q_n ],其中 α 为常数。
首先分配 α 并重新排列:
Q_{n+1} = (1 - α) * Q_n + α * R_n
注意这个递归形式。我们可以将 Q_n 的定义代入这个方程,得到:
Q_{n+1} = (1 - α) * [ (1 - α) * Q_{n-1} + α * R_{n-1} ] + α * R_n
= (1 - α)^2 * Q_{n-1} + α(1 - α) * R_{n-1} + α * R_n
继续展开这种递归关系,不断用其定义替换 Q,直到回溯到初始值 Q_1:
Q_{n+1} = (1 - α)^n * Q_1 + α * Σ_{i=1}^{n} (1 - α)^{n-i} * R_i
这个方程告诉我们什么?
- 它表明了当前价值估计
Q_{n+1}与初始值Q_1以及所有观测到的奖励之间的关系。 - 第一项
(1 - α)^n * Q_1告诉我们,初始值Q_1的贡献随着时间呈指数级减少。 - 第二项是一个奖励的加权和,时间越早的奖励
R_i,其权重α(1 - α)^{n-i}越小,贡献也呈指数级减少。
总而言之,随着数据越来越多,我们对 Q 的初始化的影响力会趋近于零。最近的奖励对当前估计的贡献最大。这使得固定步长非常适合需要持续适应变化环境的非平稳问题。
总结
本节课中我们一起学习了动作价值的增量式估计方法。
我们首先将样本平均法推导为递归形式,得到了增量更新规则 Q_{n+1} = Q_n + (1/n) * [ R_n - Q_n ]。接着,我们将其概括为一个通用学习规则:新估计 = 旧估计 + 步长 * (目标 - 旧估计),并解释了误差、目标和步长的概念。最后,我们探讨了在奖励分布随时间变化的非平稳问题中,如何使用固定步长(如 α = 0.1)让价值估计更侧重于近期经验,从而快速适应环境变化。这种方法避免存储全部历史数据,是处理在线学习和大规模问题的关键技术。
008:探索与利用的权衡


在本节课中,我们将学习强化学习中的一个核心概念:探索与利用的权衡。我们将定义什么是探索与利用,并介绍一种简单的平衡方法——Epsilon-greedy策略。
想象一下,你今晚要和朋友们出去吃饭。当你到达餐厅时,你需要决定点什么菜。你之前去过几次,每次都点同样的菜,你知道如果再次点它,你会很满意。然而,菜单上的其他许多菜品看起来也非常美味。你如何决定是再次点那道熟悉的好菜,还是尝试一些新东西呢?
探索与利用的定义
在讨论权衡之前,我们先明确何时需要探索,何时需要利用。

探索允许智能体改进其对每个动作的了解,这有望带来长期收益。通过提高对动作价值估计的准确性,智能体可以在未来做出更明智的决策。
以下是一个探索行为的例子。

假设每个盘子代表你最喜欢的餐厅里的一道菜,你正在尝试选择要点哪道菜。Q(A) 是选择那道菜的估计价值。N(A) 是你选择那道菜的次数。Q*(A) 是每道菜的真实价值。

每次你光顾这家餐厅,你都遵循一个严格的方案,以轮询的方式选择每道菜。也许某道菜有时做得特别好,因此点它会得到很高的奖励。一段时间后,你就能找到最好点的那道菜。

另一方面,利用是利用智能体当前估计的价值;它选择贪婪动作以试图获得最多的奖励。但是,仅基于估计价值进行贪婪选择,实际上可能无法获得最多的奖励。
让我们看看纯粹的贪婪动作选择如何导致次优行为。
想象智能体喜欢第一道菜。智能体收到了正奖励,使得那道菜的价值估计变高。其他动作的价值估计为零。因此,贪婪动作总是选择第一道菜。这意味着智能体从未看到其他菜品的任何样本,其他两个动作的估计价值与真实价值相差甚远,导致智能体从未发现最佳动作。
探索与利用的权衡
这自然引出了探索与利用的两难问题:我们如何选择何时探索、何时利用?当我们探索时,我们能获得更准确的价值估计;当我们利用时,我们可能获得更多奖励。然而,我们无法同时进行两者。
一种在探索和利用之间进行选择的非常简单的方法是随机选择。我们可以在大部分时间选择利用,同时保留一小部分机会进行探索。
例如,我们可以掷一个骰子,如果掷出1点,我们就探索;否则,我们就选择贪婪动作。我们称这种方法为 Epsilon-greedy 策略,其中 epsilon 指的是选择探索的概率。在这个例子中,epsilon 等于 1/6。
我们可以用以下方式描述 Epsilon-greedy 策略:
在时间步 t 选择的动作 A_t,以 1 - epsilon 的概率是贪婪动作,或以 epsilon 的概率是随机动作。
Epsilon-greedy 策略在十臂赌博机问题上的演示
我们可以在教科书中的十臂赌博机测试平台上演示 Epsilon-greedy 动作选择的有效性。
十臂赌博机问题有10个动作,沿X轴显示。在Y轴上,我们将显示奖励的分布。每个奖励都是从均值为 Q*(A)、方差为1的正态分布中采样的。每个 Q*(A) 是从均值为0、方差为1的正态分布中抽取的。
每次我们运行十臂测试平台,Q* 都会从正态分布中重新抽取。请注意这个实验中涉及了多少随机性:Q* 是从正态分布中随机采样的;奖励是基于 Q* 随机采样的;并且在探索步骤中,动作是随机采取的。

为了公平地比较不同的算法选择,我们需要进行多次独立运行。



让我们看一下一个 epsilon-greedy 智能体在十臂测试平台上的单次运行。对于这个智能体,我们设置 epsilon = 0.1。X轴是时间步,Y轴是在该时间步收到的奖励。
注意这条曲线有多嘈杂,有几个尖锐的峰值。我们大致看到这些峰值中心有轻微的上升趋势,但考虑到这种程度的噪声,很难得出任何结论。
如果我们用不同的随机种子运行另一个智能体,会得到另一条嘈杂的曲线。再运行第三次也是如此。对于每个时间步,我们可以取这三个运行在该时间步观察到的奖励的平均值。这将产生一条线,代表这三个运行的平均奖励。
例如,当我们取20次这样的运行并平均奖励时,曲线上的峰值就变得不那么明显了。如果我们取100次运行并平均,我们会看到曲线形状清晰得多。在前200步中,奖励有明显的增加。用2000次运行来做这件事,我们就能清楚地看到这种方法的性能。
这个结果说明,这种行为方式在所有可能的随机结果中,期望能获得这么多奖励。在整个专项课程中,我们使用多次独立运行的平均性能来进行科学比较。如果不使用平均值这样的汇总统计量,就很难在算法之间进行公平的比较。
在这个例子中,随机种子是这个 epsilon-greedy 智能体不同运行之间的唯一区别,但性能看起来却大不相同。
不同 Epsilon 值的比较
让我们回到十臂测试平台上的实验。我们将比较具有不同 epsilon 值的 epsilon-greedy 智能体。
首先,我们研究每种算法获得的平均奖励。X轴显示时间步,Y轴显示超过2000次运行的平均奖励。
以下是 epsilon = 0 时的性能。当 epsilon 为零时,智能体不执行任何探索步骤,只执行贪婪步骤。
以下是 epsilon = 0.01 时的性能。注意,平均奖励随着时间的推移持续提高。这种方法有1%的时间在探索,最终收敛到99.1%的时间采取最优动作。
epsilon = 0.1 的智能体平均比其他方法更早获得更多奖励,但在300步之后趋于平稳。


总结
在本节课中,我们一起讨论了探索与利用之间的权衡。我们还讨论了 Epsilon-greedy 策略,这是一种平衡探索与利用的简单方法。后续课程中,我们将讨论在探索与利用之间进行选择的更复杂方法。
009:乐观初始值


在本节课中,我们将要学习一种名为“乐观初始值”的策略,它用于在强化学习中平衡探索与利用。我们将通过医生进行药物试验的例子,理解乐观初始值如何鼓励智能体在早期进行探索,并讨论这种方法的优势与局限性。

乐观初始值的概念
如果进行药物试验的医生最初对每种疗法的效果都持非常乐观的态度,会发生什么?这种面对不确定性时保持乐观的原则,是平衡探索与利用的一种常见策略。
本节中,我们将讨论如何通过设置乐观的初始值来实现这一想法。通过本视频的学习,你将理解乐观初始值如何鼓励早期探索,并能描述其作为一种探索机制的某些局限性。
乐观如何影响行动选择
上一节我们介绍了乐观初始值的概念,本节中我们来看看它如何具体影响行动选择。让我们再次以医生为例进行说明。
假设医生最初认为每种疗法都是100%有效的,直到事实证明并非如此。那么,医生会开始随机开具处方,直到其中一种疗法未能治愈患者。之后,医生可能会从剩下的两种疗法中随机选择一种,并继续这个过程,直到该疗法也失效。医生将持续这种方式,总是假设疗法具有最大效果,直到估计值需要被修正为止。

让我们通过具体的数值来看看这是如何运作的。之前,我们假设初始估计值为零,但这并不一定是乐观的。现在,我们的医生在试验开始前乐观地假设每种疗法都非常有效。为了确保我们肯定是高估了,让我们将每个行动的初始值设得非常高,例如设为 Q(a) = 2。我们假设医生总是选择贪婪行动(即当前估计价值最高的行动)。
乐观初始值的运作示例
以下是行动价值增量更新规则的回顾,我们将用其进行演示:
公式: Q(A) = Q(A) + α * (R - Q(A))
我们设定学习率 α = 0.5 用于本次演示。
-
第一位患者到来:由于所有行动的估计值当前都相等(均为2),医生随机选择疗法P。患者报告感觉好转,获得奖励
R = 1。根据更新规则,疗法P的估计值从2更新为2 + 0.5*(1-2) = 1.5。请注意,即使治疗成功,估计值也下降了,因为奖励(1)低于我们乐观的初始估计(2)。 -
第二位患者到来:医生在具有最高估计值的疗法(Y和B,均为2)中选择。随机选择了疗法Y。患者报告没有好转,奖励
R = 0。疗法Y的估计值更新为2 + 0.5*(0-2) = 1,现在低于疗法P的当前估计值(1.5)。 -
第三位患者到来:疗法B具有最高的估计值(2),医生开具疗法B。患者感觉好转,奖励
R = 1。疗法B的估计值更新为2 + 0.5*(1-2) = 1.5。

患者持续到来,医生不断提供治疗并修正价值估计。从这个例子中,我们可以看到,使用乐观初始值鼓励了学习早期的探索:医生在前三个时间步尝试了所有三种疗法,并在之后继续尝试所有疗法。
在10臂老丨虎丨机问题中的应用
让我们看另一个例子,这次是教科书中的10臂老丨虎丨机问题。每个行动的真实价值是从正态分布中采样的。对于这个问题,将初始估计值设为5很可能是乐观的,因为在此图中,所有真实价值都小于3。

每当智能体选择一个行动时,该行动第一次被选择所获得的实际奖励很可能低于乐观的初始估计。因此,该行动的估计值会下降,相比之下,其他行动开始显得更有吸引力。这自然驱使智能体去探索其他选项。
实验与局限性分析
我们运行一个实验来观察使用乐观初始值的智能体的行为。作为基线,我们运行一个ε-贪婪智能体(ε = 0.1),其初始估计值设为0(非乐观)。同时,我们运行一个使用乐观初始值的贪婪智能体。
我们绘制了智能体选择最优行动的时间百分比(多次运行的平均值)。在早期学习中,乐观智能体表现更差,因为它探索得更多。随着时间推移,其探索行为会减少,因为估计值中的乐观成分会随着更多样本而被“冲刷”掉。
使用乐观初始值并不一定是平衡探索与利用的最佳解决方案。它存在一些局限性:
- 探索的暂时性:乐观初始值只驱动学习早期的探索。这意味着智能体在一段时间后将不再继续探索。
- 非平稳环境中的问题:例如,某个行动的价值可能在若干时间步后发生变化。一个乐观智能体可能已经固守于某个特定行动,而不会注意到现在有另一个行动更优。
- 参数设置的不确定性:在实践中,我们可能并不总是知道如何设置乐观的初始值,因为我们可能不知道最大奖励是多少。
尽管存在这些局限性,乐观初始值已被证明是一种非常有用的启发式方法。在本课程的后续部分,我们将会继续使用这种方法,并经常与其他探索方法结合使用。
总结
本节课中,我们一起学习了初始价值函数估计的影响。我们描述了乐观初始值如何鼓励早期探索,并通过几个例子演示了这一点。最后,我们简要描述了乐观初始值的一些局限性。乐观初始值为我们提供了一种简单而直观的方式来引导智能体进行初步探索。


下次课我们将讨论另一种平衡探索与利用的策略。
010:置信上限(UCB)动作选择


在本节课中,我们将要学习一种名为“置信上限”的动作选择方法,它用于在强化学习中平衡探索与利用。我们将理解UCB如何利用价值估计中的不确定性来驱动智能体进行更有效的探索。
探索与利用的平衡
上一节我们介绍了几种平衡探索与利用的方法。因为我们是从采样的奖励中估计动作价值,所以我们的估计值存在固有的不确定性。我们进行探索,正是为了减少这种不确定性,以便在未来做出更好的决策。
不确定性是什么?
“估计值存在不确定性”意味着什么?假设 Q(a) 代表我们对动作 a 的当前估计值。我们可以用一个置信区间来表示这个估计的不确定性。这个区间表示我们确信动作 a 的真实价值 Q*(a) 位于这个范围内的某个位置。区间的左边界称为下界,右边界称为上界,两者之间的区域就是置信区间,它代表了我们的不确定性。
- 如果这个区域很小,我们非常确定动作的真实价值接近我们的估计值。
- 如果这个区域很大,我们则不确定动作的真实价值是否接近我们的估计值。
面对不确定性的乐观原则 😊
UCB方法遵循“面对不确定性保持乐观”的原则。这很简单:如果我们对某件事不确定,就应该乐观地假设它是好的。
例如,假设我们有三个动作及其对应的不确定性区间。我们的智能体不知道哪个最好,因此它会乐观地选择具有最高上界的那个动作。这是合理的,因为要么这个动作确实价值最高,我们能获得高奖励;要么通过选择它,我们可以了解我们最不了解的动作,从而减少其不确定性。
UCB动作选择公式
我们可以使用以下公式,通过上置信界来选择动作:
动作选择 = argmax_a [ Q(a) + c * sqrt( ln(t) / N(a) ) ]
我们将选择具有最高“估计价值”加上“乐观置信界扩展项”的动作。
这个上界项可以分解为三个部分:
Q(a):动作a的当前价值估计(利用部分)。c:一个由用户指定的参数,用于控制探索的程度。sqrt( ln(t) / N(a) ):不确定性度量(探索部分)。其中t是总时间步数,N(a)是动作a被选择的次数。
从这个公式可以清楚地看到UCB如何结合探索与利用:第一项 Q(a) 代表利用,第二项代表探索。
探索项示例
让我们看几个探索项的例子。假设到目前为止我们已经执行了 t = 10,000 步。
- 情况一:如果我们已经选择动作
a了N(a) = 5,000次,那么不确定性项大约是0.043 * c。 - 情况二:如果我们只选择动作
a了N(a) = 100次,那么不确定性项将是情况一的10倍左右。


在10臂老丨虎丨机上的性能
现在,让我们使用10臂老丨虎丨机测试平台来研究置信上限动作选择的性能。我们使用与之前相同的设置:10个动作的真实价值 Q*(a) 服从均值为0、标准差为1的正态分布。奖励则从以 Q*(a) 为均值、方差为1的正态分布中采样。我们将对2000次独立运行的结果进行平均。
为了在10臂老丨虎丨机问题上比较UCB和ε-贪心算法,我们将UCB的参数 c 设为2,将ε-贪心的参数 ε 设为0.1。


从上图我们可以看到,在大约100个时间步之后,UCB获得的平均奖励开始超过ε-贪心算法。最初,UCB会进行更多探索以系统地减少不确定性。随着时间的推移,UCB的探索会减少,而ε-贪心算法则始终有10%的时间在进行随机探索。


总结
本节课中,我们一起学习了置信上限动作选择方法。UCB利用价值估计中的不确定性来平衡探索与利用。它通过一个公式来选择动作,该公式结合了当前的价值估计(利用)和一个基于选择次数的不确定性项(探索)。与固定的ε-贪心策略相比,UCB能够更智能地分配探索努力,从而在测试中通常能获得更好的长期性能。
011:现实世界强化学习中的情境赌博机 🎰


在本节课中,我们将探讨如何将强化学习应用于现实世界,并重点介绍情境赌博机这一核心方法。我们将了解现实世界应用与模拟器训练之间的关键差异,以及为何情境赌博机是当前部署现实世界强化学习系统的主流方式。
概述:现实世界与模拟器的差异
上一节我们介绍了强化学习的基本框架。本节中,我们来看看当我们将强化学习从模拟器迁移到现实世界时会遇到哪些挑战。
典型的模拟器强化学习流程如下:模拟器提供观测值,学习算法根据策略选择一个动作,模拟器处理该动作并返回某种奖励。例如,在游戏玩法中就是如此。
然而,当你想将其应用于现实世界时,这些环节的匹配就成为了问题。现实世界的观测值通常与模拟器中的不同。基于观测值采取的动作也往往不同,因为观测性质的变化会导致即使策略相同,动作也可能不同。此外,从现实世界获得的奖励也常常与模拟器中的奖励不相似。
因此,模拟器与现实之间存在差距。虽然你可以在模拟器中学习,但所学内容对现实世界应用的适用性并不明确,在许多情况下甚至可能无法应用。
优先级的转变:支持现实世界应用
鉴于基于模拟器的强化学习(这是当前主流)与基于现实世界的强化学习之间存在差距,我们该如何进行现实世界强化学习呢?关键在于优先级的转变。
你需要将优先级转向支持现实世界强化学习应用。以下是几个转变的例子:
- 信用分配的重要性:在模拟器中,确定哪个动作导致了最终结果(信用分配)对强化学习至关重要。但在现实世界,泛化到不同观测值的能力可能更为重要。
- 环境的控制权:在模拟器中,强化学习算法可以轻松控制环境(例如,“请向前一步”)。但在现实世界,通常是环境控制着你。这是与现实世界交互时接口设计的根本区别。
- 效率的考量:在模拟器中,计算效率是关键限制因素,因为你可以计算尽可能多的样本。但在现实世界,统计效率是更大的担忧,因为你只能获得现实世界提供的有限样本,必须利用这些样本实现最大影响。
- 状态与观测:在基于模拟器的强化学习中,我们常思考“状态”,这是做出决策所需的基本信息。但在现实世界,你通常拥有非常复杂的观测值(例如,一个百万像素的摄像头图像),其中可能包含远超决策所需的信息。区分将所有可能的像素设置视为一个“状态”与其他决策方式变得很重要。
- 离策略评估:在现实世界中,能够进行离策略评估变得重要。在稍后将讨论的情境赌博机中,有些算法不仅进行学习,还能作为副产品生成可用于离策略评估的数据。自然地,这些支持离策略评估的算法变体在实际应用中更受青睐。
- 对策略的关切:在模拟器中,你可能运行很长时间,只关心最终得到的策略。但在现实世界,收集的每个数据点都涉及与世界的某种交互,你希望每次交互的性能都相当好。因此,你真正关心的是整个策略轨迹,即学习过程中产生的一系列策略。
实例:个性化新闻推荐
让我们思考一个现实世界强化学习的自然应用:个性化新闻推荐。
也许你有一组可能的新闻文章,是今天感兴趣的。某个用户访问网站,你想选择一篇他们可能感兴趣的新闻文章,然后你会获得关于他们是否实际阅读了该文章的反馈。
这是一个非常自然的强化学习结构,事实上它更简单,是一种情境赌博机结构。
情境赌博机详解
那么,什么是情境赌博机呢?在情境赌博机中,会发生以下事情:
你观察到一些特征。这可能是用户的地理位置,可能是基于用户过去行为的某种画像,也可能是可用动作(新闻文章)本身的特征。基于这些特征,你选择一个动作,然后获得一些奖励。你的目标是在此设置下最大化奖励。
这听起来很像完整的强化学习,在很大程度上确实如此。但有一个重要的前提:我们假设这里不存在信用分配问题。也就是说,展示给你的新闻文章不会影响展示给我时我的行为方式。
发展历程与工具
这个领域的发展实际上相当新近,在过去十年中世界发生了巨大变化。
以下是其关键发展节点:
- 2007年:出现了第一个情境赌博机算法,称为“Epoch-Greedy”。它本质上是ε-贪婪算法的一个变体,其ε值取决于你的知识量。我们很快发现了一篇更早的关于“Hedge算法”的论文,该算法在统计上更高效,但计算上极其糟糕。
- 2010年:我们在雅虎研究院时,部署了第一个现实世界中的个性化新闻应用。
- 2011年:我们首次将Epoch-Greedy风格的学习与Hedge风格的学习结合,实现了计算和统计上都高效的算法。
- 2014年:我们提出了一个更好的算法,至今仍可使用。
- 2016年:我们创建了决策服务的第一版,这是一个通用的云服务,可用于创建你自己的情境赌博机学习系统。
- 2019年:这最终催生了一项强化学习服务产品,即Azure认知服务中的“个性化推荐器”。基于此服务,你可以个性化你的网站或其布局等许多其他方面。它是一个通用服务,你可以输入任意特征,选择一个动作,然后发送任意奖励供其学习。基于该系统,我们实际上获得了2019年年度AI系统奖。
深入学习资源
由于时间关系,我无法在此深入细节,但如果你对情境赌博机的更多细节感兴趣,我和Alex Slivkins在2019年做过一个教程,推荐你查看。
如果你对个性化推荐器服务感兴趣,可以通过此URL访问。
如果你对个性化推荐器服务背后的算法以及情境赌博机算法的通用实现感兴趣,Vowpal Wabbit已经成为一个包含大量不同情境赌博机算法的代码库。
总结

本节课中,我们一起学习了将强化学习应用于现实世界的关键挑战,并深入了解了情境赌博机作为解决方案的核心思想。我们探讨了现实应用与模拟器训练在优先级上的根本区别,例如从强调信用分配转向重视泛化能力,从追求计算效率转向追求统计效率。通过个性化新闻推荐的实例,我们看到了情境赌博机的实际应用框架。最后,我们回顾了该领域的发展历程,并指出了进一步学习的宝贵资源。掌握情境赌博机,是迈向成功部署现实世界强化学习系统的重要一步。
012:多臂老丨虎丨机问题总结 🎰

在本节课中,我们将回顾第一周学习的核心内容:多臂老丨虎丨机问题及其相关的强化学习基础概念。我们将介绍问题设定、价值估计方法,以及探索与利用的平衡策略。
问题设定与价值函数
我们首先描述了多臂老丨虎丨机问题的设定。在这个问题中,有一个智能体(agent)需要选择动作(action),并根据所选动作获得奖励(reward)。
我们定义每个动作的价值为执行该动作时期望获得的奖励。这个真实的价值函数 Q* 对智能体来说是未知的。
为了估计 Q,我们引入了采样平均法*。该方法计算动作 a 被选中时获得的所有奖励之和,再除以动作 a 被选中的次数。其公式表示为:
Q_t(a) = (R_1 + R_2 + ... + R_{N_t(a)}) / N_t(a)
其中,N_t(a) 是动作 a 在时间 t 之前被选中的次数。
增量式更新与步长参数
上一节我们介绍了采样平均法,本节中我们来看看如何更高效地实现它。我们推导出了一个增量式更新规则,为采样平均找到了一个递归定义。
通过这种方式,我们只需要存储每个动作被选中的次数以及上一次的价值估计值,而无需保留所有历史奖励数据。其更新规则为:
Q_{n+1} = Q_n + α * (R_n - Q_n)
其中,α 是步长参数,通常设为 1/n。
我们进一步将步长参数泛化。事实上,通过使用一个恒定步长 α,我们可以更有效地解决那些奖励分布会随时间变化的非平稳老丨虎丨机问题。

探索与利用的平衡
接下来,我们遇到了强化学习中的一个核心矛盾:探索(Exploration)与利用(Exploitation)。
我们定义探索为智能体尝试新动作以改进其知识的机会。有些动作可能比我们当前认为的更好,我们必须尝试那些我们认为不是最优的动作,以改进我们的估计。
我们定义利用为智能体选择当前认为价值最高的动作,以期获得最多的即时奖励。
智能体无法同时进行探索和利用。那么,我们如何决定何时探索、何时利用呢?

为了解决这个问题,我们介绍了 ε-贪心(Epsilon-Greedy) 动作选择策略。
以下是 ε-贪心策略的核心要点:
- 探索概率 ε:智能体以 ε 的概率进行探索。
- 利用概率 1-ε:智能体以 1-ε 的概率进行利用。
- 利用时的选择:当选择利用时,智能体选择当前价值估计值最高的动作。
- 探索时的选择:当选择探索时,智能体在所有动作中均匀随机地选择一个。

乐观初始值与置信区间
我们还研究了乐观初始值(Optimistic Initial Values) 的效果。

如果我们将动作价值的初始估计值设置得比真实的 Q* 更高,智能体在初期会系统地探索所有动作。因为每个动作的初始高估会随着收到实际奖励而逐渐“降温”,智能体最终会停止探索,收敛到最优动作。
最后,我们讨论了置信区间上界(Upper Confidence Bound, UCB) 动作选择方法。

UCB 通过使用置信区间来混合利用和探索。它采用面对不确定性时的乐观(Optimism in the Face of Uncertainty) 策略。UCB 在选择动作时,不仅考虑当前的平均奖励(利用),还考虑该奖励估计的不确定性(探索),倾向于选择那些潜力(即上界)更大的动作。
总结
本节课中,我们一起学习了多臂老丨虎丨机问题以及强化学习中最基础的一些概念。
我们主要将老丨虎丨机问题视为更大规模强化学习问题的一个子集。在面对不确定性时,如何最大化奖励、如何选择动作等概念,是强化学习的核心。
我们下周将开始介绍完整的强化学习问题,请务必预习下周课程的相关教材。🚀
强化学习专项课程:第3章:马尔可夫决策过程


在本节课中,我们将要学习马尔可夫决策过程。我们将了解MDP如何为顺序决策问题提供一个通用框架,并描述MDP的动态特性是如何定义的。
从老丨虎丨机问题到MDP
上一节我们介绍了K臂老丨虎丨机问题,它引出了许多有趣的问题。然而,它并未包含现实世界问题的许多方面。
在老丨虎丨机问题中,智能体在每个时间步面临相同的情境,并且最优行动总是相同的。但在许多问题中,不同的情境需要不同的应对策略。此外,我们当前选择的行动会影响未来能获得的奖励数量。
马尔可夫决策过程的形式化框架捕捉了现实世界问题的这两个方面。
一个简单的例子:兔子觅食
让我们从一个简单的例子开始,来突显老丨虎丨机问题与MDP之间的区别。
想象一只兔子在田野里游荡觅食。它发现自己处于一种情境:右边有一根胡萝卜,左边有一棵西兰花。兔子更喜欢胡萝卜,所以吃胡萝卜会产生+10的奖励。而吃西兰花只产生+3的奖励。
但是,如果后来兔子发现自己处于另一种情境:右边是西兰花,左边是胡萝卜呢?显然,兔子此时会倾向于向左走,而不是向右走。K臂老丨虎丨机问题无法解释“不同情境需要不同行动”这一事实。
它在另一个方面也存在局限。假设我们确实考虑了不同情境下的不同行动。在这里,兔子似乎想向右走以获取胡萝卜。然而,向右走也会影响兔子接下来看到的情境。
假设就在胡萝卜的右边,有一只老虎。如果兔子向右移动,它能吃到胡萝卜。但之后,它可能来不及逃离老虎。如果我们考虑到行动的长期影响,兔子应该向左走,选择西兰花,以给自己更好的逃生机会。一个只关心即时奖励的“老丨虎丨机兔子”会选择胡萝卜,但通过考虑决策的长期影响,可以做出更好的决定。
状态、行动与奖励
现在,让我们看看随着兔子采取行动,情境是如何变化的。我们将这些情境称为状态。
在每个状态,兔子选择一个行动。例如,兔子可以选择向右移动。基于这个行动,世界会转变到一个新的状态,并产生一个奖励。
在这个例子中,兔子吃了胡萝卜并获得+10的奖励。然而,兔子现在位于老虎旁边。假设兔子选择向左移动的行动,世界会转变到一个新的状态(老虎吃掉了兔子),兔子获得-100的奖励。
从原始状态出发,兔子也可以选择向左移动,那么世界会转变到另一个新状态,兔子获得+3的奖励。
下图展示了两种可能的状态序列,实际发生的序列取决于兔子采取的行动。
状态S1 (胡萝卜在右) -> 行动A1 (向右) -> 状态S2 (老虎在旁) & 奖励R1 (+10)
状态S1 (胡萝卜在右) -> 行动A2 (向左) -> 状态S3 (安全) & 奖励R2 (+3)
我们可以用一个通用框架来形式化这种交互。
MDP框架
在这个框架中,智能体与环境在离散的时间步上进行交互。
在每个时间步 t,智能体从环境接收一个状态 S_t,它来自所有可能状态的集合 𝒮。幻灯片上展示的配置就是一个状态的例子。
基于这个状态,智能体从一个可能的行动集合中选择一个行动 A_t。𝒜(S_t) 表示在状态 S_t 下所有有效行动的集合。“向右移动”就是一个行动的示例。
一个时间步之后,部分基于智能体的行动,智能体发现自己处于一个新的状态 S_{t+1}。例如,兔子位于老虎旁边的状态。
环境同时提供一个标量奖励 R_{t+1},它来自所有可能奖励的集合 ℛ。在这个例子中,吃胡萝卜的奖励是+10。
下图总结了MDP框架中的智能体-环境交互。这种交互生成了一条由状态、行动和奖励组成的经验轨迹。行动不仅影响即时奖励,也通过影响未来状态来影响未来的奖励。
MDP的动态特性:转移概率函数
那么,我们如何表示这种交互的动态特性呢?与老丨虎丨机问题一样,结果是随机的,因此我们使用概率的语言。
当智能体在一个状态下采取一个行动时,存在许多可能的下一个状态和奖励。
转移动态函数 P 形式化了这个概念。给定一个状态 s 和行动 a,P 告诉我们下一个状态 s' 和奖励 r 的联合概率。
在本课程中,我们通常假设状态、行动和奖励的集合是有限的。但别担心,后续你将学习能够处理无限集和不可数集的算法。
由于 P 是一个概率分布,它必须是非负的,并且对所有可能的下一个状态和奖励求和必须等于1。
P(s', r | s, a) ≥ 0
∑_{s' ∈ 𝒮} ∑_{r ∈ ℛ} P(s', r | s, a) = 1
请注意,未来的状态和奖励仅取决于当前的状态和行动。这被称为马尔可夫性质。这意味着当前状态是充分的,记住更早的状态不会改善对未来的预测。

本节总结
本节课中我们一起学习了马尔可夫决策过程。MDP为顺序决策提供了一个通用框架,其动态特性由一个概率分布 P(s', r | s, a) 定义。在下一个视频中,我们将讨论几种决策任务,并将每一种形式化为一个MDP。
强化学习专项课程:P14:马尔可夫决策过程示例 🧠

在本节课中,我们将通过几个示例来探索马尔可夫决策过程(MDP)形式的灵活性。你将学习如何将决策问题形式化为MDP,并体会MDP框架的广泛适用性。
示例一:回收机器人 🤖
考虑一个在办公室环境中收集空易拉罐的回收机器人。它能探测到易拉罐,用机械臂拾取它们,并将其放入回收箱。机器人使用可充电电池运行,其目标是尽可能多地收集罐子。
现在,让我们将这个问题形式化为一个MDP。我们将从定义状态、动作和奖励开始。
我们假设传感器只能区分两种电量水平:低和高。这些电量水平代表了机器人的状态。在每个状态下,机器人有三个选择:
- 它可以搜索一段时间来寻找罐子。
- 它可以保持静止,等待有人给它带来一个罐子。
- 或者它可以去充电站给电池充电。
我们只允许在低电量状态下充电,因为当电量高时充电没有意义。
接下来,我们考虑状态转移的动态过程。首先,用空心圆表示状态。
当电量水平为高时搜索罐子,可能会将电量水平降低到低。也就是说,在高状态下执行搜索动作,可能以概率 α 保持状态不变,也可能以概率 1-α 将电量降至低。在这两种情况下,机器人搜索都会获得奖励 R_search。例如,R_search 可以是 +10,表示机器人找到了10个罐子。
机器人也可以选择等待。等待不会消耗电池,因此状态不会改变。等待动作会获得奖励 R_wait。例如,R_wait 可以是 +1。
当电量水平为低时进行搜索,可能会耗尽电池,那么机器人就需要被救援。我们将这个概率记为 1-β。如果机器人被救援,其电池会恢复,但需要救援会产生一个负奖励 R_rescue。例如,R_rescue 可以是 -20,因为我们会对机器人感到恼火。或者,电池可能没有耗尽,这种情况发生的概率是 β,机器人会获得奖励 R_search。
执行充电动作会将电池恢复到高水平,并获得零奖励。
至此,我们已经完全为回收机器人问题指定了MDP。
MDP框架的灵活性 🔄
我们讨论了一个使用MDP来精确描述问题的例子,但你可能会问,这个框架有多通用?
MDP形式可以以多种不同的方式应用于许多不同的领域。
状态可以是低级别的感官读数,例如视频帧的像素值。它们也可以是高级别的,例如物体描述。同样,动作可以是低级别的,例如这个机器人的轮速;动作也可以是高级别的,例如“去充电站”。时间步长可以非常小,也可以非常大,例如一毫秒或一个月。

让我们再看一个应用示例。
示例二:机器人手臂控制 🦾

假设我们想使用强化学习来控制一个机器人手臂执行抓取和放置任务。机器人的目标是拾取物体并将其放置到特定位置。
我们可以用多种方式形式化这个任务,这里提供一种可能性:
- 状态:可以是关节角度和速度的读数。
- 动作:可以是施加到每个电机上的电压。
- 奖励:成功放置每个物体可以获得 +100 的奖励。但同时,我们希望机器人尽可能少地使用能量,因此可以加入一个与使用能量相对应的小的负奖励。
这并不难。
总结 📝
本节课中,我们一起学习了如何将实际问题形式化为马尔可夫决策过程。我们通过回收机器人和机器人手臂控制两个具体示例,定义了状态、动作、奖励和转移概率。更重要的是,我们认识到MDP框架具有高度的灵活性,能够适应从低级控制到高级决策、从微小时间尺度到宏观时间尺度的各种顺序决策问题。
015:强化学习的目标 🎯
在本节课中,我们将正式定义强化学习智能体的目标,即最大化未来的累积奖励。我们将探讨为何不能只关注即时奖励,并介绍“回报”这一核心概念,以及一种重要的任务类型——分幕式任务。
智能体的目标
上一节我们介绍了多臂老丨虎丨机问题,其中智能体的目标是最大化即时奖励。然而,在更一般的马尔可夫决策过程中,这通常行不通。
一个在当前时间步能带来高奖励的动作,可能导致智能体转移到一个未来只能获得低奖励的状态。


因此,从短期看有利的选择,从长期来看可能并非最佳。


考虑一个学习走路的机器人,奖励可以与前进距离成正比。猛地向前冲显然能最大化即时奖励,但这个动作会导致机器人摔倒。如果机器人改为最大化总的前进距离,它就会走得又快又稳。
定义回报
现在,让我们正式定义“最大化总未来奖励”的含义。
在时间步 t 的回报,简称为从时间步 t 之后获得的所有奖励之和。我们用字母 G 表示回报。
G_t = R_{t+1} + R_{t+2} + R_{t+3} + ...

回报是一个随机变量,因为MDP的动态过程(包括状态转移和奖励)可能是随机的。


为了更好地理解这一点,想象我们的捡罐子机器人从这里开始。从这个状态出发,机器人总是采取相同的动作序列。


有时它可能获得较大的回报,有时可能获得较小的回报。


这是由于单个奖励和状态转移中存在的随机性。一般来说,从同一个状态出发,可能产生许多不同的轨迹。

这就是为什么我们要最大化期望回报。为了使这个定义有意义,奖励之和必须是有限的。
分幕式任务
具体来说,我们假设存在一个最终时间步 T,此时智能体与环境的交互终止。交互终止时会发生什么?
在最简单的情况下,交互自然地分解为称为幕的片段。每一幕的开始独立于前一幕的结束。在终止时,智能体会被重置到一个起始状态。每一幕都有一个最终状态,我们称之为终止状态。我们称这类任务为分幕式任务。
为了更好地理解分幕式任务,让我们看一个具体例子。考虑国际象棋游戏。



一局国际象棋总是以将死、和棋或认输结束。在下棋时,一幕会是什么样子?

正如你可能猜到的,单局国际象棋就构成了一幕。每局游戏都从相同的起始状态开始,所有棋子被重置。
总结
本节课中我们一起学习了强化学习智能体的目标。我们将其形式化为最大化期望回报。然后我们讨论了分幕式任务,在这种任务中,智能体与环境的交互被分解为多个独立的片段(幕)。理解目标是设计有效强化学习算法的第一步。
016:奖励假说 🎯


在本节课中,我们将学习强化学习中的一个核心概念——奖励假说。我们将探讨其基本思想、不同表述、实际应用中的挑战,以及它作为设计智能体指导原则的潜力与局限。
概述
奖励假说是强化学习领域的基石性思想。它认为,我们可以通过最大化所接收的累积标量奖励信号的期望值,来描述和实现任何目标或目的。本节课将深入解析这一假说,并探讨如何在实际中定义和使用奖励。
三种创造智能行为的方式
理解奖励假说之前,我们可以先看看三种实现智能行为的范式。
第一种方式:“授人以鱼”。这对应着传统的人工智能方法。我们直接为机器编程,赋予它我们期望的具体行为。然而,当新问题出现时,机器无法适应新环境,需要我们持续提供新的程序。
第二种方式:“授人以渔”。这对应着监督学习。我们为机器提供训练样本,机器则自己编写程序来匹配这些样本。只要我们能提供训练样本,机器就能学会编写自己的程序。但环境会变化,训练样本可能无法覆盖所有新情况。
第三种方式:“使人爱鱼”。这对应着强化学习。我们无需指定实现目标的具体机制,只需对目标本身进行编码(即定义奖励),机器便能自行设计达成目标的策略。这赋予了智能体强大的适应能力。
上一节我们介绍了实现智能的三种范式,本节中我们来看看奖励假说本身的具体表述。
奖励假说的多种表述
关于奖励假说的具体表述,学界存在一些有趣的讨论和不同版本。
- 常见表述:许多资料,如Muhammad Ashshraoff的博客和大卫·席尔瓦的课程,将其表述为:“所有目标都可以被描述为对期望累积奖励的最大化”。
- 里奇·萨顿的表述:强化学习先驱里奇·萨顿在其博客中写道:“我们所说的目标和目的,可以被很好地理解为对接收到的标量信号(奖励)的累积和的期望值的最大化”。这个版本强调了“标量”特性,并超越了单纯的目标表述。
- 迈克尔·利特曼的表述:在21世纪初的演讲中,迈克尔·利特曼将其表述为:“行为产生于个体在复杂多变的世界中,寻求最大化其接收到的奖励信号的行为”。这个版本强调了奖励的简洁性与现实世界复杂性之间的对比。
尽管措辞略有不同,但这些表述的核心精神是一致的:智能行为源于对累积奖励的追求。
理解了假说的核心思想后,我们需要思考其实际应用。如果我们接受这个假说,研究将主要围绕两个分支展开。
奖励假说引出的两个研究方向
接受奖励假说意味着我们需要解决两个关键问题:
- 确定智能体应该优化什么奖励。
- 设计最大化这些奖励的算法。
人们通常对第一个问题(如何定义奖励)给予了大量关注。接下来,我们将聚焦于这个挑战:如何定义奖励?
定义奖励的挑战
为什么定义合适的奖励本身就是一个难题?有时很简单,有时则不然。
- 简单情况:存在“通用货币”。例如,股票交易智能体的奖励可以直接用金钱(美元)定义。购买消耗美元,出售产生美元。再如,太阳能电池板追踪系统的奖励是能量,电机移动消耗能量,阳光照射产生能量。
- 困难情况:缺乏“通用货币”。例如,设计一个恒温器控制智能体。开启暖气或空调消耗能源(成本),但不开启会导致居住者不适(另一种成本)。两者没有天然的通用度量单位。虽然可以都转换为货币,但这并不自然,且难以精确量化“舒适度”的价值。
即使我们接受奖励假说,定义“正确”的奖励仍然是一项艰巨的工作。以下是两种常见的编码目标的方式。
两种目标编码方式
我们可以用奖励来表达目标。以下是两种基本方法:
- 目标奖励编码:将达成目标的状态奖励定义为 +1,其他所有状态奖励为 0。
# 伪代码示例:目标奖励编码 if state == goal_state: reward = +1 else: reward = 0 - 行动惩罚编码:在目标达成前的每一步,都给智能体 -1 的惩罚。一旦达成目标,就不再产生成本。
# 伪代码示例:行动惩罚编码 if state != goal_state: reward = -1 # 每一步的代价 else: reward = 0 # 目标达成,惩罚停止
这两种方式都能引导智能体达成目标,但存在细微差别:第一种可能缺乏紧迫感;第二种在智能体有小概率永远无法达成目标时,会导致严重问题。对于周期极长的目标(例如“获得诺贝尔奖”),这两种简单编码都可能失效,此时需要设计中间奖励来引导智能体。
既然定义奖励如此重要且具有挑战性,那么这些奖励本身从何而来呢?我们可以借鉴“授人以鱼”的三种范式来思考奖励的来源。
奖励的来源
与行为的来源类似,奖励也可以通过多种方式定义。
- 编程定义:这是最常见的方式。由人类将行为目标转化为具体的奖励值,编写成程序函数:
reward = f(state)。近期研究也探索使用如时序逻辑等特殊语言来指定任务,作为人机之间沟通的中间格式。 - 人工实时提供:由人类在智能体学习过程中实时给予奖励。但这带来了挑战,因为人类的行为模式与静态奖励函数不同,他们可能会根据智能体的学习进度动态调整奖励。标准的强化学习算法难以很好地处理这种非平稳的奖励信号。
- 从示例中学习:智能体可以学习模仿人类给出的奖励。一个非常有趣的变体是逆强化学习。在逆强化学习中,训练者演示期望的行为,学习者则反向推断训练者是在最大化什么样的奖励,才使得该行为是最优的。
- 强化学习:从 奖励 推导出 行为。
- 逆强化学习:从 行为 推导出 奖励。
- 通过优化过程衍生:如果存在某种高级行为评价标准,我们可以通过优化算法来搜索能鼓励该行为的奖励函数。这类似于进化过程:拥有良好奖励函数和优化算法的智能体得以“生存”,并将其奖励函数传递给“后代”。这属于元强化学习的范畴,即在进化层面学习,以创造个体层面更好的学习方式。
尽管奖励假说非常强大,但我们必须谨慎看待,不应过于教条地理解它。
奖励假说的局限性与思考
奖励假说是设计先进智能体的优秀工作假设,并已引领我们取得了卓越成果。但我们应保持开放态度,在其不再适用时勇于摒弃它。
以下是一些值得思考的局限性和挑战:
- 风险规避行为:如何用奖励最大化框架描述“风险规避”行为?风险规避者选择的可能不是平均收益最好的行动,而是能最小化最坏结果发生概率的行动。或许可以通过在奖励流中放大负面结果的影响来刻画这种行为。
- 行为平衡:有时期望的行为不是“一直做最好的事”,而是“平衡地做一系列事”。例如,一个纯粹最大化奖励的音乐推荐系统,可能会找出你最喜欢的歌然后无限循环播放,这显然不是我们想要的。解决思路可能是扩展状态空间,例如,如果一首歌最近刚播放过,则再次播放它获得的奖励会降低。这类似于动物喝水:只有在口渴时喝水才有高价值,刚喝过水后立刻再喝的奖励就很低。
- 对人类高级行为的适用性:一味追求显性奖励是否与人类的高级行为良好匹配?我们并不认为那些只专注于自身明确目标的人是理想的伙伴。道德哲学家指出,我们应追求的目标并非一目了然。随着年龄增长和思考深入,我们不断学习“做出好决定”和“成为有道德的人”的更深层含义。这部分是强化学习(理解行动对环境和他人的影响),但部分也涉及阐明更深层次的目的感:我们是在发掘已存在于心智中的奖励函数细节,还是在为自己创造更好的目标?
总结
本节课中,我们一起学习了奖励假说。我们了解了它的核心思想——智能体通过最大化累积奖励来学习达成目标,并探讨了其不同表述。我们认识到,在实际应用中,定义合适的奖励本身就是一个关键挑战,并分析了奖励的不同来源(如编程、人工提供、逆强化学习等)。最后,我们以批判性的眼光审视了奖励假说的局限性,提醒自己它作为一个强大的工作假设和近似模型的价值,而非绝对真理。在设计和理解智能体时,应灵活运用这一思想,同时保持对更复杂行为动机的探索。
强化学习专项课程:第17讲:持续任务
在本节课中,我们将学习持续任务的概念,了解其与分幕式任务的区别,并掌握如何为持续任务定义回报。
上一节我们讨论了分幕式问题。然而,在许多问题中,智能体与环境的交互会无限持续下去。本节中,我们来看看这类问题如何被表述为持续任务。
分幕式任务与持续任务的区别
以下是两者的主要区别:
- 分幕式任务:交互过程被分解为多个幕。每一幕必须在终止状态结束。下一幕的开始与上一幕的结束方式无关。时间步
T的回报是直到终止状态的所有奖励之和。 - 持续任务:交互过程持续进行,没有终止状态。无法被分解为独立的幕。
为了让概念更具体,考虑一个智能恒温器的例子。它可以被表述为一个持续任务,因为恒温器永远不会停止与环境的交互。状态可以是当前温度、时间、建筑内人数等。动作只有两个:打开或关闭加热器。奖励设定为:每当有人手动调节温度时,奖励为 -1,否则为 0。为了避免负奖励,恒温器将学会预测用户的偏好。
为持续任务定义回报
我们可以尝试像处理分幕式任务那样,将所有未来奖励相加。但现在我们是在对一个无限序列求和,这个回报可能不是有限的。
如何修改这个求和式,使其总是有限的呢?一个解决方案是使用一个称为折扣率的因子 γ 来对未来奖励进行折扣。γ 的取值范围是 0 ≤ γ < 1。回报公式可以修改为包含折扣:
G_t = R_{t+1} + γ * R_{t+2} + γ^2 * R_{t+3} + ...
折扣对回报的影响很简单:即时奖励对总和的贡献更大;未来的奖励贡献更少,因为它们被乘以了 γ 的更高次幂。直观上,这个选择是合理的:今天的一美元比一年后的一美元对你更有价值。
我们可以简洁地将这个和写成:G_t = Σ_{k=0}^{∞} (γ^k * R_{t+k+1}),这个表达式保证是有限的。原因如下:假设 R_max 是智能体在任何时间步能获得的最大奖励。我们可以用 R_max 替换每个奖励来得到回报 G_t 的上界。由于 R_max 是常数,可以提到求和符号外。注意第二个因子是一个几何级数,其和为 1 / (1 - γ)。因此,R_max * 1 / (1 - γ) 是有限的,并且是 G_t 的上界,所以 G_t 是有限的。
折扣因子的影响
现在来看看折扣因子 γ 对智能体行为的影响。我们可以看两个极端情况:
- 当
γ = 0时,回报G_t就等于下一个时间步的奖励R_{t+1}。此时智能体是短视的,只关心即时期望奖励。 - 当
γ接近1时,即时奖励和未来奖励在回报中的权重几乎相等。此时的智能体是远视的。
回报的递归关系
最后,讨论回报的一个简单但重要的性质:它可以被递归地定义。让我们从求和式的第二项开始提取公因子 γ:
G_t = R_{t+1} + γ * (R_{t+2} + γ * R_{t+3} + γ^2 * R_{t+4} + ...)
括号内的序列正是下一个时间步的回报 G_{t+1}。因此,我们可以将其替换:
G_t = R_{t+1} + γ * G_{t+1}
现在我们得到了一个递归方程,左边是 G_t,右边是 G_{t+1}。这个简单的方程比看起来更强大,在未来的课程中,我们将利用这个方程来设计学习算法。

总结

本节课中,我们一起学习了持续任务,其中智能体与环境的交互无限期进行。我们使用折扣来确保回报是有限的,并且看到了回报可以被递归地定义。
强化学习专项课程:P18:分段任务与持续任务示例 🎮

在本节课中,我们将通过具体示例来探讨何时应将一个问题建模为分段任务或持续任务。通过分析这些例子,你将能够理解两种任务形式的区别,并学会如何为给定问题选择最合适的建模方式。
分段任务示例 🎯
上一节我们介绍了分段任务与持续任务的基本概念,本节中我们来看看一个典型的分段任务示例。
考虑一个智能体学习玩一个简单的视频游戏。玩家(用蓝色表示)通过收集白色宝藏方块来获得分数。当玩家触碰到绿色敌人方块时,游戏结束。
这个游戏很自然地可以被建模为一个分段马尔可夫决策过程。智能体的目标是在游戏结束前,通过收集尽可能多的宝藏来获得高分。
以下是该任务的关键要素:
- 状态:一个对应于当前屏幕画面的像素值数组。
- 动作:四个方向:上、下、左、右。
- 奖励:每当智能体收集到一个宝藏方块时,获得 +1 的奖励。
- 分段终止:当智能体触碰到任意一个绿色敌人时,当前分段结束。无论分段如何结束,下一个分段都会从智能体位于屏幕中央且没有敌人出现的状态重新开始。
顺便一提,你现在看到的这个智能体是通过Q学习算法训练的,它在这个游戏中表现得相当不错。在后续课程中,你将学习这个算法并亲自实现它。

持续任务示例 🔄
了解了分段任务后,现在让我们转向一个持续任务的例子。在这个场景中,智能体需要在一组服务器上调度作业。
假设我们有三个服务器,供强化学习研究人员运行实验使用。研究人员将具有不同优先级的作业提交到一个单一队列中。
以下是该任务的关键要素:
- 状态:空闲服务器的数量,以及队列顶部作业的优先级。
- 动作:拒绝或接受队列顶部的作业(如果有服务器空闲)。
- 奖励:
- 接受作业会运行它,并产生一个等于该作业优先级的正奖励。
- 拒绝一个作业会产生一个与优先级成比例的负奖励,并将该作业送回队列末尾。
智能体需要谨慎调度低优先级作业,因为这可能会妨碍后续高优先级作业的调度。服务器在完成其作业后变得可用。研究人员会持续地向队列中添加作业,而智能体则不断地决定接受或拒绝它们。由于这个过程永无止境,因此它非常适合被描述为一个持续任务。
总结 📝

本节课中我们一起学习了分段任务与持续任务的具体示例。
- 分段任务:自然地分解为独立的片段(如一局游戏)。
- 持续任务:被假定为无限期持续进行(如持续的服务调度)。
现在你应该能够判断,对于一个给定的问题,哪种任务建模方式更为合适。
强化学习专项课程:第2周:马尔可夫决策过程总结
在本节课中,我们将总结第二周关于马尔可夫决策过程的核心内容。我们将回顾MDP的基本框架、核心概念及其在强化学习中的重要性。
当你初次听说马尔可夫决策过程时,你可能会认为这个用于描述所有强化学习问题的形式过于简单。现在,你或许开始理解它能代表许多复杂问题。
回顾一下,MDP形式化地描述了智能体与环境交互的问题。智能体和环境在离散的时间步上进行交互。在每个时间步,智能体观察环境的当前状态。

基于这个状态,智能体选择一个动作。之后,环境会转移到一个新状态并产生一个奖励。请记住,智能体的选择具有长期后果,它选择的动作会影响未来的状态和奖励。
智能体的目标是最大化未来的总奖励。这通常意味着需要在即时奖励和动作的长期后果之间取得平衡。
我们使用期望回报来形式化这个目标,它是未来奖励的期望折扣总和。通过使用小于1的折扣因子 γ,我们可以保证回报是有限的。γ 的具体值定义了我们在短期奖励与长期奖励之间的权衡程度。
我们讨论了许多可以自然地表述为回合制或持续型MDP的问题实例。MDP形式化框架可用于建模许多现实世界的问题。应用强化学习的第一步,始终是将问题表述为一个MDP。

本节课中,我们一起学习了马尔可夫决策过程的核心框架。我们明确了智能体与环境交互的循环、定义了期望回报的目标,并理解了折扣因子的作用。掌握将实际问题转化为MDP模型是学习强化学习的关键第一步。
020:策略规范 🎯

在本节课中,我们将要学习强化学习中的一个核心概念:策略。策略定义了智能体在环境中如何根据当前状态选择行动。我们将探讨策略的两种主要形式,并理解其背后的数学规范。
概述
强化学习是在不确定性下进行序贯决策的问题框架。之前我们了解到,智能体在交互中的角色是在每个时间步选择一个行动。行动的选择会直接影响即时奖励和下一个状态。本节视频将描述策略——智能体如何选择这些行动。
确定性策略
在最简单的情况下,策略将每个状态映射到单个行动。这种策略被称为确定性策略。我们使用希腊字母 π 来表示一个策略。
π(s) 表示在状态 s 下,策略 π 所选择的行动。例如,在一个策略中,它可能在状态 S0 选择行动 A1,在状态 S1 和 S2 选择行动 A0。
我们可以用一个表格来可视化确定性策略。每一行描述了策略 π 在每个状态下选择的行动。注意,智能体可以在多个状态中选择相同的行动,而某些行动可能在任何状态下都不会被选择。
考虑一个智能体在网格上向房子移动的例子。状态对应网格上的位置,行动是上、下、左、右移动。箭头描述了一个可能的确定性策略,它指引智能体向房子移动。每个箭头告诉智能体在每个状态下应向哪个方向移动。
随机性策略
上一节我们介绍了确定性策略,本节中我们来看看更一般的情况。通常,策略为每个状态下的每个行动分配一个概率。我们使用符号 π(a|s) 来表示在状态 s 下选择行动 a 的概率。
随机性策略是指多个行动可能以非零概率被选择的策略。例如,对于状态 S0,策略 π 可能指定了如下的行动概率分布:
- 行动 A0 的概率:0.2
- 行动 A1 的概率:0.8
请记住,π 为每个状态指定了一个独立的行动概率分布。因此,它必须遵循一些基本规则:
- 对于每个状态,所有行动的概率之和必须为 1。
- 每个行动的概率必须是非负的。

让我们看看另一个状态 S1。在这个例子中,π 在 S1 下对应一个完全不同的行动分布。虽然在这个例子中,每个状态下可用的行动集是相同的,但通常这个集合在每个状态下可以不同。
回到我们的房子例子,一个随机性策略可能在底行以相等的概率选择“向上”或“向右”。请注意,这个策略到达房子所需的步数与之前讨论的确定性策略相同。之前我们讨论过,像 ε-greedy 这样的随机性策略对于探索很有用。同样的探索-利用权衡也存在于马尔可夫决策过程中。
策略的依赖关系
一个重要的原则是,策略只能依赖于当前状态,而不能依赖于其他因素,如时间或之前的状态。状态定义了用于在当前 MDP 中选择行动的所有信息。
例如,在这个 MDP 中,我们可以定义一个策略,以相等的概率选择向左或向右。我们可能也想定义一个策略,选择与上一次行动相反的方向(即在左和右之间交替)。然而,这将不是一个有效的策略,因为它的选择条件依赖于上一次行动,这意味着行动依赖于状态之外的东西。
最好将其视为对状态的要求,而不是对智能体的限制。在 MVPs(马尔可夫过程)中,我们假设状态包含了决策所需的所有信息。如果交替左右能产生更高的回报,那么上一次行动就应该被包含在状态中。
总结
本节课中我们一起学习了策略的核心概念。最重要的两点是:
- 智能体的行为由策略指定,该策略将状态映射到行动的概率分布上。
- 策略只能依赖于当前状态,而不能依赖于时间或之前的状态等其他因素。
我们将在下次课程中继续深入。
021:价值函数



在本节课中,我们将要学习强化学习中的核心概念——价值函数。我们将了解状态价值函数和动作价值函数的定义、作用及其与策略的关系,并通过具体例子加深理解。
许多问题都涉及一定程度的延迟奖励。例如,商店经理可以通过降价清空库存来最大化短期收益。但从长远来看,维持库存并在需求旺盛时销售会带来更好的收益。在强化学习中,奖励捕获了短期收益的概念。然而,我们的目标是学习一个能在长期获得最多奖励的策略。价值函数正是为了形式化这一长期目标而定义的。
🎯 价值函数的定义与作用
上一节我们提到了长期收益的重要性,本节中我们来看看如何用数学语言来定义和衡量它。
粗略地说,状态价值函数是智能体从某个特定状态开始,预期能获得的未来奖励。更精确地讲,状态价值函数是在给定状态下,遵循特定策略所能获得的期望回报。由于智能体的行为(即策略)决定了它能获得多少总奖励,因此价值函数总是相对于一个给定的策略来定义的。下标 π 表示该价值函数依赖于智能体根据策略 π 来选择动作。同样,期望符号 E 的下标 π 表示该期望是根据策略 π 来计算的。
我们也可以定义动作价值函数。动作价值描述了当智能体首先选择一个特定动作后会发生什么。更正式地说,一个状态的动作价值是:如果智能体选择动作 A,然后遵循策略 π,所能获得的期望回报。
价值函数在强化学习中至关重要,它允许智能体查询其当前状况的质量,而无需等待观察长期结果。这样做的好处有两个:第一,回报并非立即可得;第二,由于策略和环境动态的随机性,回报本身也可能是随机的。价值函数通过对所有可能的未来回报取平均值,总结了所有可能性。
♟️ 价值函数示例:国际象棋
为了理解价值函数如何帮助我们评估策略,让我们看一个国际象棋的例子。
国际象棋是一个分幕式MDP。状态由棋盘上所有棋子的位置定义。动作是合法的走子。当游戏以胜利、失败或平局结束时,幕终止。我们可以将奖励定义为:获胜时奖励为+1,其他所有走子奖励为0。
这个奖励定义在比赛过程中并不能告诉我们智能体下得有多好,我们必须等到游戏结束才能看到任何非零奖励。而价值函数能告诉我们更多信息。状态价值等于未来奖励的期望总和。由于唯一可能的非零奖励是获胜时的+1,因此状态价值简单地等于遵循当前策略 π 时获胜的概率。

在这个双人游戏中,对手的走子也是状态转移的一部分。例如,环境移动了智能体的棋子(蓝色圆圈)和对手的棋子(红色圆圈),使棋盘进入新状态 S‘。注意,状态 S‘ 的价值低于状态 S 的价值。这意味着,假设我们继续遵循策略 π,从这个新状态赢得游戏的可能性更低了。动作价值函数则允许我们评估每个可能走子的获胜概率,前提是在游戏的剩余部分遵循策略 π。
🧮 价值函数示例:网格世界
为了建立更直观的理解,让我们看一个简单的持续性MDP例子。
状态由网格上的位置定义。动作是向上、下、左、右移动。智能体不能移出网格,撞墙会产生-1的奖励。大多数其他动作不产生奖励。然而,有两个特殊状态A和B。在状态A的每个动作都会产生+10奖励,在状态B则产生+5奖励。在状态A和B的每个动作都会分别将智能体转移到状态 A‘ 和 B‘。
记住,我们必须先指定策略,才能计算出价值函数。让我们看看均匀随机策略。由于这是一个持续性任务,我们需要指定折扣率 γ,这里设为0.9。
以下是计算出的每个状态的价值(已预先计算好)。首先,注意底部附近的负值。这些值很低,因为智能体在到达高价值状态A和B之前,很可能撞到墙。记住,A和B是这个MDP中唯一的正奖励来源。
状态A的价值最高。注意,这个价值小于10,尽管从状态A出发的每个动作都会产生+10的奖励。为什么?因为从A出发的每次转移都会使智能体靠近下墙,而在下墙附近,随机策略很可能撞墙并获得负奖励。另一方面,状态B的价值略大于5。从B出发的转移将智能体移动到中间位置。在中间位置,智能体不太可能撞墙,并且靠近高价值状态A和B。价值函数能如此紧凑地总结所有这些可能性,确实非常神奇。
📝 本节总结
本节课中,我们一起学习了状态价值函数和动作价值函数的定义。状态价值函数指的是在特定策略下,从给定状态出发的期望回报。动作价值函数指的是在给定状态下,选择特定动作然后遵循给定策略所能获得的期望回报。价值函数使我们能够评估策略的长期性能,是后续学习如何寻找最优策略的基础。在接下来的课程中,我们将讨论如何计算这些价值函数。
022:理查·萨顿与安迪·巴托的对话


在本节中,我们将通过强化学习领域的两位先驱——理查·萨顿与安迪·巴托的对话,了解强化学习这一领域的起源、发展以及他们所做的核心贡献。对话将揭示强化学习如何从一个“显而易见”的想法,经历被忽视,再到被重新发现和定义的过程。
我是安迪·巴托。我想介绍一下我的第一位学生,理查·萨顿。
我们在一起合作了许多年。我们两人都对早期工作所发展出的成果感到惊讶。
理查非常专注、执着,并且才华横溢。我这么说让他有些不好意思了。
许多核心思想在很大程度上都要归功于理查。这就是理查。
我感觉从你那里学到了巨大的力量,安迪。你对于让我们的工作变得学术化至关重要。
无论是对于现代还是过去,我都从作为你学生那些年学到的一切中,获得了坚实的基础。
我想说的是,我们做的主要事情是合著了那本教科书。但我们最主要的工作是重新发现了强化学习这个领域。
我有时喜欢说我们发现了它,但我知道你会对此有反应,因为天下没有新鲜事。你过去常告诉我,如果真发现了什么,那也没什么。
如果你重新发现了轮子,就像你说的,我们应该叫它轮子。它可能是一个更好的轮子。但我确实觉得我们重新发现了强化学习,并唤醒了这个已陷入被忽视状态的领域。
我们澄清了它是什么,以及它与监督学习有何不同。这被我描述为强化学习的起源故事。
这是一个显而易见的想法,马文·明斯基在1960年或1959年就知道了。它如此明显,以至于每个人都知道。
但后来它被监督学习的光芒所掩盖。直到哈里·克洛开始敲开人们的门,说:“嘿,这是一个被忽视的东西,它是真实的、重要的,我们需要把它搞清楚。”
事实上,由法林和克拉克在数字计算机上进行的第一个神经网络模拟,就是一个强化学习系统。是在1954年吗?
在他们的第二篇论文中,克拉克和法林一年后使用了同一个系统,但他们关注的是泛化,并且偏离了最初的根源。在那之后,感知机和威德罗-霍夫采用的是误差修正法。
尽管他们使用的一些词语是“试错”,但实际上变成了监督学习。当然也有例外。
我们说马文·明斯基,也许他的论文和他的“Steps”论文中充满了预测和类似时序差分学习的东西。当然还有信用分配问题,他在普林斯顿的论文就是关于强化学习的。
一个物理网络学会了走迷宫。我认为明斯基后来对它失去了兴趣,原因有很多,也许是感到尴尬。
安迪,你典型地是在谈论历史上其他人做了什么。但也许我典型地是想把它拉回到我们所做的事情上,因为我认为我们确实做了一些事。
我的意思是,我们几乎没做什么,但我们认识到了。我们只是站出来说,这是一个东西,这是一个尚未被充分研究、值得研究的东西。
我们写了关于联想搜索网络的论文,那只是一些非常简单的想法,并声称这种结合联想与试错的方法还没有人做过。
正如你所说,当时是寻找有效的方法,然后记住它。结合搜索和记忆,这就是强化思维的本质。
奇怪的是,它被忽视了。我发现了与此相关的东西,是关于记忆化。
罗宾·波普尔斯通是我在马萨诸塞大学一段时间的同事。他谈论过记忆化,这正是强化学习所做的:记忆化搜索。
你执行一些操作,然后记住结果,下次需要做时,你直接查找而不是重新计算,这节省了大量时间。
在某种意义上,强化学习就是记忆化的、上下文敏感的搜索。波普尔斯通在他的一篇论文结尾处提到了这一点,大概是1950年代,我忘了具体日期。
他谈到了使用插值法,比如用多项式代替查找表来进行带泛化的查找,这就是神经网络所做的。
我们没有发明记忆化,但我们为它找到了一种新的用途。我不确定当时是否有人以强化学习的方式进行记忆化搜索。
哈里·克洛有他关于分布式方法的想法,即由目标寻求组件组成的目标寻求系统。
他还有一个想法,他称之为“广义强化”。其中一个单元可以被各种信号强化,而不仅仅是特定信号,或者被任何信号强化。
根据我的记忆,本质的东西,我不知道该怎么称呼它,它像是一种洞见,但也像是一种洞见的缺失。
有一天我们决定,也许“目标寻求单元”这个想法本身就有趣,不需要用目标寻求组件来构建目标寻求系统,也不需要广义强化,只需要一个专门的奖励信号。
我们就研究这种学习,也许这就是需要被研究清楚的东西。对我来说,这就像暂时把所有其他花哨或令人困惑的东西放在一边,有一个重点需要阐明。
我认为强化学习就是专注于一个学习系统,它确实想要某种东西,通过试错来学习并记住,并且有一个专门的奖励信号。
本节课中我们一起学习了强化学习领域的起源故事。通过理查·萨顿和安迪·巴托的对话,我们了解到强化学习核心思想(试错学习 + 记忆 + 专门奖励信号)虽然很早被提出,但一度被监督学习掩盖。两位先驱的工作在于重新发现并清晰定义了这一领域,将其与监督学习区分开来,并强调了记忆化搜索和专门奖励信号的核心地位。他们的贡献为现代强化学习的发展奠定了基础。
023:贝尔曼方程推导 🧮
在本节课中,我们将学习强化学习的核心数学工具——贝尔曼方程。我们将了解如何从状态价值函数和动作价值函数的定义出发,推导出它们各自的贝尔曼方程,并理解这些方程如何将当前状态(或状态-动作对)的价值与其后续可能状态的价值联系起来。
在日常生活中,我们经常在没有得到明确的正反馈或负反馈的情况下学习。例如,想象你正在骑自行车,撞上了一块石头,导致你失去平衡。假设你恢复了平衡,没有受伤。你可能会学会在未来避开石头,并且如果再次撞上,反应会更快。我们如何知道撞上石头是坏事,即使这次没有发生任何坏事?答案是,我们认识到失去平衡的状态是不好的,即使没有摔倒和受伤。也许我们过去有过类似的不那么顺利的经历。
在强化学习中,一个类似的理念使我们能够将当前状态的价值与未来状态的价值联系起来,而无需等待观察所有未来的奖励。我们使用贝尔曼方程来形式化这种状态价值与其可能后继状态之间的联系。
通过本视频的学习,你将能够推导状态价值函数的贝尔曼方程,定义动作价值函数的贝尔曼方程,并理解贝尔曼方程如何联系当前价值和未来价值。
状态价值函数的贝尔曼方程
首先,我们来讨论状态价值函数的贝尔曼方程。状态价值函数的贝尔曼方程定义了一个状态的价值与其可能后继状态的价值之间的关系。
现在,我们将说明如何从状态价值函数和回报的定义中推导出这种关系。
让我们首先回顾,状态价值函数被定义为从状态 s 开始的期望回报。回顾一下,回报被定义为未来奖励的折扣总和。我们之前看到,时间 t 的回报可以递归地写为即时奖励加上时间 t+1 的折扣回报。
现在让我们展开这个期望回报。
以下是展开期望回报的步骤:
- 首先,我们将期望回报展开为对智能体可能采取的动作选择求和。
- 其次,我们在给定状态
s和动作a的条件下,对可能的奖励和下一个状态进行展开。
我们可以按这个顺序分解,因为动作选择仅取决于当前状态,而下一个状态和奖励仅取决于当前状态和动作。结果是一个加权和,每一项由即时奖励加上从下一个状态 s' 开始的期望未来回报组成。
我们所做的只是明确地将期望写出来,它被定义为可能结果的加权和,权重是它们发生的概率。
注意,大写的
R_{t+1}是一个随机变量,而小写的r代表每个可能的奖励结果。
期望回报依赖于无限远的未来状态和奖励。我们可以根据需要递归地多次展开这个方程,但这只会使表达式更复杂。相反,我们可以注意到,这个期望回报也是状态 s' 的价值函数的定义。唯一的区别是时间索引是 t+1 而不是 t。这不是问题,因为策略 π 和转移函数 p 都不依赖于时间。
进行这个替换后,我们得到了状态价值函数的贝尔曼方程。
价值函数的魔力在于,我们可以用它来代表无限多个可能未来的平均值。



动作价值函数的贝尔曼方程
上一节我们介绍了状态价值函数的贝尔曼方程,本节中我们来看看动作价值函数的贝尔曼方程。我们可以为动作价值函数推导一个类似的方程。它将是一个关于状态-动作对价值与其可能后继状态-动作对价值的递归方程。
在这种情况下,方程不是从策略选择动作开始的。这是因为动作已经作为状态-动作对的一部分被固定了。相反,我们直接跳到转移函数 p 来选择即时奖励和下一个状态 s'。
同样,我们得到一个加权和,每一项由即时奖励加上给定特定下一个状态 s' 的期望未来回报组成。然而,与状态价值函数的贝尔曼方程不同,我们不能在这里停止。我们想要一个关于下一个状态-动作对的、针对一个状态-动作对价值的递归方程。
目前,我们只有给定下一个状态的期望回报。为了改变这一点,我们可以将来自下一个状态的期望回报表达为对智能体可能动作选择的求和。
具体来说,我们可以将期望条件改为同时基于下一个状态和下一个动作,然后对所有可能的动作求和。每一项的权重是策略 π 在状态 s' 下选择动作 a' 的概率。
现在,这个期望回报与状态 s' 和动作 a' 的动作价值函数的定义相同。进行这个替换后,我们得到了动作价值函数的贝尔曼方程。

总结与意义

本节课中我们一起学习了如何推导状态价值函数和动作价值函数的贝尔曼方程。这些方程提供了状态(或状态-动作对)的价值与可能的下一个状态(或下一个状态-动作对)的价值之间的关系。
你可能会想,我们为什么如此关心这些定义和关系。贝尔曼方程捕捉了强化学习问题的一个重要结构。它之所以如此基础,是因为它将一个复杂的、涉及无限未来的期望计算,转化为一个关于当前和下一步的递归关系。在接下来的课程中,我们将讨论为什么这种关系在强化学习中如此根本,以及我们如何利用它来设计高效估计价值函数的算法。
024:为什么需要贝尔曼方程 🧮
在本节课中,我们将学习贝尔曼方程如何将计算状态价值这一复杂问题,转化为一个可求解的线性方程组。我们将通过一个简单的网格世界示例,直观地理解其工作原理和强大之处。
上一节我们介绍了贝尔曼方程,它允许我们用后续可能状态的价值来表达当前状态(或状态-动作对)的价值。本节中,我们来看看如何实际应用贝尔曼方程来计算价值函数。
考虑一个仅由四个状态(A、B、C、D)组成的简单网格世界示例。动作空间包括向上、向下、向左、向右移动。任何试图移出网格的动作都会导致智能体停留在原地。
例如,从状态C开始。向上移动会到达状态A。如果接着尝试向左移动,会撞墙并停留在状态A。然后向右移动会到达状态B。从B向下移动会到达状态D。

奖励设定为:除了智能体到达状态B时会获得+5奖励外,其他所有情况的即时奖励均为0。这包括从B开始或撞墙留在B的情况。

我们考虑一个均匀随机策略,即智能体在每个方向移动的概率均为25%。折扣因子 γ 设为 0.7。
那么,如何计算在这个策略下,每个状态(A、B、C、D)的价值呢?

回想一下,价值函数定义为在策略 π 下的期望回报。这需要对智能体可能选择的无限多个未来动作序列所获得的回报进行平均。

幸运的是,状态价值函数的贝尔曼方程提供了一个优雅的解决方案。
利用贝尔曼方程,我们可以写出状态A的价值表达式,它是基于对四个可能动作及相应后继状态的求和。
在这个特定例子中,表达式可以进一步简化,因为对于每个动作,只有一个可能的后继状态和奖励。因此,对 s‘ 和 r 的求和简化为单个值。注意,这里的 s‘ 和 r 仍然依赖于所选动作和当前状态 s,但为了符号简洁,我们没有明确写出。
以下是状态A的价值方程推导过程:
- 从状态A向右移动,会到达状态B并获得+5奖励。在随机策略下,这发生的概率是 1/4。
- 从状态A向下移动,会到达状态C且无即时奖励。同样,概率为 1/4。
- 从状态A向上或向左移动,都会留在状态A且无奖励。这两个动作各发生 1/4 的概率,因此可以合并为一个系数为 1/2 的项。
最终,我们得到状态A的价值表达式:
V(A) = (1/4) * [5 + γV(B)] + (1/4) * [0 + γV(C)] + (1/2) * [0 + γV(A)]
我们可以为其他每个状态写出类似的方程。
以下是所有状态的价值方程组:
- V(A) = (1/4)[5 + γV(B)] + (1/4)[0 + γV(C)] + (1/2)[0 + γV(A)]
- V(B) = (1/4)[5 + γV(B)] + (1/4)[0 + γV(A)] + (1/4)[0 + γV(D)] + (1/4)[0 + γV(B)]
- V(C) = (1/4)[0 + γV(A)] + (1/4)[0 + γV(C)] + (1/4)[0 + γV(D)] + (1/4)[0 + γV(C)]
- V(D) = (1/4)[0 + γV(B)] + (1/4)[0 + γV(C)] + (1/2)[0 + γV(D)]

现在我们有了一个包含四个方程和四个未知数的方程组。你可以手动求解,或将其输入自动方程求解器。
该方程组的唯一解如下:
- V(A) ≈ 6.12
- V(B) ≈ 8.23
- V(C) ≈ 3.08
- V(D) ≈ 4.85
关键点在于,贝尔曼方程将一个难以处理的、对可能未来的无限求和问题,简化成了一个简单的线性代数问题。

对于这个小问题,你或许能想出其他方法来计算各状态价值。然而,贝尔曼方程为马尔可夫决策过程提供了一个强大且通用的关系式。
在这个例子中,我们使用贝尔曼方程直接写出状态价值的方程组,并通过求解方程组找到价值。这种方法对于中等规模的MDP是可行的。
然而,在更复杂的问题中,这并不总是实用的。以国际象棋为例,我们甚至可能无法列出所有可能的状态(约有 10^45 个)。构建并求解由此产生的贝尔曼方程组将是另一回事。但人类却能学会下得很好。
不过,这个简单游戏只代表了人类经验的一小部分,而人类可以学会做很多事情。我们的智能体也应该能够学会处理许多任务。
在接下来的课程中,我们将讨论基于贝尔曼方程的算法,这些算法能够扩展到大型问题。
本节课中,我们一起学习了贝尔曼方程的核心价值。总结如下:
- 没有贝尔曼方程,我们可能不得不考虑无限多个可能的未来。
- 贝尔曼方程利用了MDP公式的结构,将这个无限求和问题简化为一个线性方程组。
- 我们随后可以通过直接求解贝尔曼方程来找到状态价值。
希望你现在能明白,为什么贝尔曼方程对于强化学习如此基础且重要。
025:最优策略
在本节课中,我们将学习强化学习的核心目标:寻找最优策略。我们将明确“最优策略”的定义,理解其性质,并探讨如何为一个给定的马尔可夫决策过程识别最优策略。
策略比较与最优策略定义
到目前为止,我们通常将策略视为给定的东西。策略规定了智能体在给定行为方式下的行动准则。然后,我们的目标是找到该策略对应的价值函数。但强化学习的目标不仅仅是评估特定策略,最终,我们希望找到一个能在长期内获得尽可能多奖励的策略。
在本节中,我们将通过“最优策略”的概念来精确阐述这一目标。
要定义最优策略,首先必须理解一个策略比另一个策略“更好”意味着什么。
下图展示了两个策略在不同状态下的价值函数。请注意,图中用连续线表示仅是为了便于说明,我们仍在讨论离散状态,并且价值在状态间可能并非平滑变化。

该图说明,在某些状态下,策略 π₁ 的价值更高;而在另一些状态下,策略 π₂ 的价值更高。因此,简单地说 π₁ 比 π₂ 好,或 π₂ 比 π₁ 好,意义不大。
我们将定义:当且仅当在每一个状态下,策略 π₁ 的价值都大于或等于策略 π₂ 的价值时,我们称策略 π₁ 不劣于策略 π₂。我们用符号 π₁ ≥ π₂ 来表示这种关系。

在上图中,代表 π₁ 价值的线始终在 π₂ 的上方,因此在这种情况下,π₁ 不劣于 π₂。
基于此,最优策略的定义如下:


最优策略是指不劣于所有其他策略的策略。也就是说,一个最优策略将在每一个状态下都拥有可能达到的最高价值。
至少存在一个最优策略,但也可能存在多个。我们使用符号 π* 来表示任意一个最优策略。


最优策略的存在性
为什么一定存在最优策略(即在每个状态下都不劣于所有其他策略的策略)?会不会出现一种情况:在一个状态表现出色,就必须在另一个状态表现糟糕?
假设存在这样的策略 π₁,它在某些状态表现出色,而策略 π₂ 在另一些状态表现出色。我们可以将这两个策略组合成第三个策略 π₃,该策略在当前状态下,总是根据 π₁ 和 π₂ 中价值更高的那个来选择行动。
那么,π₃ 在每个状态下的价值必然都大于或等于 π₁ 和 π₂。因此,我们永远不会遇到“在一个状态表现出色必须以牺牲另一个状态的价值为代价”的情况。正因如此,总是存在某个在每个状态下都是最优的策略。
这当然只是一个非正式的论证,但事实上存在严格的数学证明,表明至少存在一个最优的确定性策略。
请注意,在某些状态下,π₃ 的价值严格大于 π₁ 或 π₂。作为练习,请尝试解释:既然 π₃ 只是简单地在每个状态根据 π₁ 和 π₂ 中价值更高的那个来选择行动,这种情况是如何发生的?
最优策略示例分析
让我们看一个具体例子,以建立对最优策略的直观理解。
考虑下面所示的“二选一”MDP。唯一需要做出决策的是顶部标记为 X 的状态,智能体可以采取行动 A1 或 A2。
- 从状态 X 出发,行动 A1 将智能体带到状态 Y。在状态 Y,只有行动 A1 可用,它将智能体带回状态 X。
- 另一方面,在状态 X 采取行动 A2 会将智能体带到状态 Z。从状态 Z 出发,同样只有行动 A1 可用,它将智能体带回状态 X。
数字表示智能体在每次行动后获得的奖励。注意,虽然 A1 提供 +1 的即时奖励,但 A2 在经过一步延迟后提供更大的 +2 奖励。

在这个 MDP 中只有两个确定性策略,完全由智能体在状态 X 的选择定义:采取行动 A1 或采取行动 A2。我们称它们为 π₁ 和 π₂。这两个策略中哪个是最优的?
最优策略将是使状态 X 价值最高的那个。答案取决于折扣因子 γ。
情况一:γ = 0
此时,价值仅由即时奖励定义。状态 X 在 π₁ 下的价值是 +1,而在 π₂ 下的价值是 0(因为 +2 的奖励发生在一步延迟之后,当 γ 设为 0 时不影响回报)。因此,在这种情况下,π₁ 是最优策略。
情况二:γ = 0.9
此时,每个策略下状态 X 的价值是一个无穷级数。
- π₁ 会获得即时奖励 1,然后是 0,接着又是 1,依此类推。价值表达式中的每一项奖励都按 γ 的某次幂进行折扣。我们可以将其简洁地表示为一个几何级数。应用几何级数求和公式,我们得到 π₁ 的价值约为 5.3。
- π₂ 的价值可以类似地写出,区别在于它将在每个奇数步获得奖励 2,而不是在每个偶数步获得奖励 1。同样可以写成一个几何级数并获得闭式解。在这种情况下,解约为 9.5。

由于 9.5 高于 5.3,因此在这种情况下,π₂ 是最优策略。
寻找最优策略的挑战
在这个“二选一”MDP 中,寻找最优策略相对简单,因为只有两个确定性策略,我们只需计算每个策略的价值函数即可。
然而,在一般情况下,即使我们只考虑确定性策略,问题也不会如此简单。可能的策略数量等于 (可能的行动数量)^(状态数量)。这是一个指数级的数量。
我们可以使用暴力搜索,计算每个策略的价值函数来找到最优策略。但很容易看出,即使对于中等规模的 MDP,这种方法也会变得难以处理。
幸运的是,有一种更好的方法来组织我们对策略空间的搜索。解决方案将以另一组贝尔曼方程的形式出现,即贝尔曼最优性方程,我们将在接下来的视频中介绍。
总结
本节课中,我们一起学习了最优策略的核心概念。最重要的要点是:
- 最优策略被定义为在所有状态下都具有最高价值的策略。
- 至少存在一个最优策略,但也可能存在多个。
- 由于可能的策略数量呈指数级增长,通过暴力搜索寻找最优策略是难以处理的。这引出了对更高效方法(如贝尔曼最优性方程)的需求,我们将在后续课程中探讨。
026:最优价值函数 🎯

在本节课中,我们将学习最优价值函数的概念,并推导与之相关的贝尔曼最优性方程。我们将从回顾最优策略的目标开始,逐步引出最优状态价值函数和最优动作价值函数的定义,并最终得到它们的数学表达式。
上一节我们介绍了最优策略如何实现强化学习的长期目标,即获得尽可能多的奖励。本节中,我们将探讨与之相关的最优价值函数的概念,并引入一组相关的贝尔曼最优性方程。
在本视频结束时,你将能够:
- 推导出状态价值函数的贝尔曼最优性方程。
- 推导出动作价值函数的贝尔曼最优性方程。
- 理解贝尔曼最优性方程与之前介绍的贝尔曼方程之间的关系。
最优价值函数的定义 📈
回顾一下,对于两个策略 π₁ 和 π₂,当且仅当在所有状态下,π₁ 的价值都大于或等于 π₂ 的价值时,我们认为 π₁ 与 π₂ 一样好或更好。
一个最优策略是比所有其他策略都同样好或更好的策略。因此,最优策略的价值函数在每个状态下都具有可能的最大价值。
我们可以用数学公式表达为:
V*(s) = max_π V_π(s)
这个等式对我们状态空间中的每一个状态 s 都成立。
对策略取最大值可能不够直观,让我们花点时间来分解它的含义。想象一下,我们考虑每一个可能的策略,并计算它们对于状态 s 的价值。最优策略的价值被定义为所有计算出的价值中最大的那个。我们可以对每个状态重复这个过程,最优策略的价值总是最大的。
所有最优策略都共享同一个最优状态价值函数,我们将其记为 V*。
最优策略也共享同一个最优动作价值函数,它同样在每个“状态-动作”对上是可能的最大值。我们将其记为 Q*。

推导贝尔曼最优性方程 🔄
回忆一下状态价值函数的贝尔曼方程:
V_π(s) = Σ_a π(a|s) Σ_{s‘, r} p(s‘, r | s, a) [ r + γ V_π(s‘) ]
这个方程适用于任何策略(包括最优策略)的价值函数。通过将最优策略 π* 代入这个贝尔曼方程,我们得到了 V* 的贝尔曼方程。到目前为止,我们还没有做任何特别的事情,这只是我们之前介绍的贝尔曼方程在最优策略这个特定情况下的应用。
然而,因为这是最优策略,我们可以将这个方程重写成一个特殊的形式,这个形式不再直接引用策略本身。
请记住,总是存在一个最优的确定性策略,即在每个状态下都选择一个最优动作。这样的确定性最优策略会给达到最高价值的动作分配概率 1,而给所有其他动作分配概率 0。
我们可以用另一种方式来表达这一点,即用对动作 a 取 max 来替换对 π* 的求和 Σ_a π*(a|s)。
注意,π* 不再出现在方程中。我们推导出了一个直接适用于 V* 本身的关系式。我们称这种特殊形式为 V 的贝尔曼最优性方程*:
V(s) = max_a Σ_{s‘, r} p(s‘, r | s, a) [ r + γ V(s‘) ]
我们可以在动作价值函数的贝尔曼方程中进行同样的替换。回顾动作价值函数的贝尔曼方程:
Q_π(s, a) = Σ_{s‘, r} p(s‘, r | s, a) [ r + γ Σ_{a‘} π(a‘|s‘) Q_π(s‘, a‘) ]

在这里,最优策略出现在内部求和 Σ_{a‘} 中。我们再次用对 a‘ 取 max 来替换对 π* 的求和 Σ_{a‘} π*(a‘|s‘)。
这就得到了 Q 的贝尔曼最优性方程*:
Q(s, a) = Σ_{s‘, r} p(s‘, r | s, a) [ r + γ max_{a‘} Q(s‘, a‘) ]
与贝尔曼方程的关系及求解挑战 ⚠️
在之前的课程中,我们讨论过贝尔曼方程如何形成一个线性方程组,可以通过标准方法求解。
贝尔曼最优性方程为我们提供了最优价值的类似方程组。一个自然的问题是:我们能否以类似的方式求解这个方程组来找到最优状态价值函数?
不幸的是,答案是否定的。对动作取最大值(max)不是一个线性操作,因此求解线性方程组的标准线性代数技术将不适用。在本课程中,我们不会以通常的方式建立和求解方程组。相反,我们将使用基于贝尔曼方程的其他技术来计算价值函数和策略。
你可能会想,为什么我们不能简单地在普通贝尔曼方程中使用 π* 来得到一个关于 V* 的线性方程组?答案很简单:我们不知道 π*。如果我们知道,那么我们就已经实现了强化学习的基本目标。
如果我们能够设法求解出 V* 的贝尔曼最优性方程,我们就可以利用结果相当容易地得到 π*。我们将在下一个视频中看到如何做到这一点。
总结 📝

本节课中,我们一起学习了最优价值函数,并推导了相关的贝尔曼最优性方程。
贝尔曼最优性方程将一个状态或“状态-动作”对的价值,与在任何最优策略下其可能的后继状态的价值联系起来。

下次课见,我们将学习如何从最优价值函数中找到最优策略。
强化学习专项课程:第3章:利用最优价值函数求解最优策略

在本节课中,我们将学习如何利用已知的最优价值函数来推导出最优策略。我们将通过一个具体的网格世界示例,演示这一过程,并理解最优价值函数与最优策略之间的紧密联系。
上一节我们介绍了最优价值函数和贝尔曼最优方程。你可能会想,我们的最终目标是找到最优策略本身,而不仅仅是其价值函数,那么学习最优价值函数为何重要?本节中我们来看看,在给定最优价值函数的情况下,如何相对容易地找到与之关联的最优策略。
从最优状态价值函数推导最优策略
一般来说,只要我们同时拥有动态函数 P,利用最优状态价值函数 V* 来推导最优策略就相对直接。对于任何状态 s,我们可以查看每个可用的动作 a,并评估以下框中的项(即贝尔曼最优方程的右侧):
max over a [ Σ_{s', r} P(s', r | s, a) [ r + γ * V*(s') ] ]
总会存在某个(或某些)动作能使这个项达到最大值。一个确定性的策略 π*,如果为每个状态都选择这个最大化动作,那么它必然是最优的,因为它能获得最高的可能价值。
因此,π* 的公式几乎与 V* 的贝尔曼最优方程相同。V* 是所有动作中该“框内项”的最大值。而 π* 则是 arg max,即具体是哪个动作实现了这个最大值。
为了评估给定动作 a 的“框内项”,我们只需要向前看一步,考虑执行该动作后可能出现的下一个状态 s' 和奖励 r。这得益于我们已经拥有了 V* 和 P。
网格世界示例
让我们通过课程早期介绍的网格世界示例来具体操作。在这个环境中:
- 在状态 A,所有动作都确定性地转移到 A',并获得 +10 奖励。
- 在状态 B,所有动作都确定性地转移到 B',并获得 +5 奖励。
- 其他状态转移的即时奖励为 0。
- 撞墙的奖励为 -1。
- 折扣因子 γ = 0.9。
假设我们已经计算出了每个状态的最优价值函数 V*(数值显示在网格中)。我们的目标是找出每个状态下的最优动作。
以下是推导最优策略的步骤:
- 对于当前考察的状态,依次考虑每个可选动作。
- 对于每个动作,计算其“框内项”:
r + γ * V*(s')。由于此环境是确定性的,每个(s, a)只对应一个(s', r),因此计算简化为单一项。 - 比较所有动作的计算结果,选择值最大的动作作为该状态的最优动作。如果多个动作的值相同且最大,则它们都是最优动作,可以随机选择。
具体状态分析
-
示例状态 1:考虑图中高亮的一个状态。
- 动作
上:转移到价值为 17.5 的状态,奖励为 0。计算结果:0 + 0.9 * 17.5 = 15.75。 - 动作
右:撞墙,奖励 -1,留在原状态(价值 16)。计算结果:-1 + 0.9 * 16 = 13.4。 - 动作
下:转移到价值为 14.4 的状态,奖励为 0。计算结果:0 + 0.9 * 14.4 = 12.96。 - 动作
左:转移到价值为 17.8 的状态,奖励为 0。计算结果:0 + 0.9 * 17.8 = 16.02。 - 比较结果,
左动作的值(16.02)最大,因此是该状态的最优动作。同时,这也验证了 V* 在此状态满足贝尔曼最优方程:V*(s) = 16 ≈ max(...) = 16.02(计算舍入差异)。
- 动作
-
示例状态 2:在另一个状态中,
上和左动作都给出了相同的最大值0.9 * 19.8 = 17.82。因此,在此状态下存在两个最优动作,最优策略可以以任意概率在两者间选择。 -
示例状态 A:在状态 A,无论选择哪个动作,都会转移到 A' 并获得 +10 奖励。因此,每个动作的“框内项”计算结果相同:
10 + 0.9 * V*(A')。代入V*(A') = 16,得到10 + 0.9 * 16 = 24.4,这与图中记录的 V* 值一致。因此,在状态 A,所有动作都是最优的。
通过对每个状态重复此过程,我们可以填满整个最优策略图。最终得到的策略本质上是引导智能体尽快走向状态 A 以获取 +10 奖励。
从最优动作价值函数推导最优策略
如果我们拥有的是最优动作价值函数 Q*,那么推导最优策略会更加简单。在这种情况下,我们完全不需要进行“向前看一步”的计算。
我们只需要为每个状态 s,选择任何能使 Q*(s, a) 最大化的动作 a 即可:
π*(s) = arg max over a [ Q*(s, a) ]
动作价值函数 Q* 已经为每个状态-动作对缓存了“向前看一步”的结果。在这个意义上,寻找最优动作价值函数的问题直接对应了寻找最优策略的目标。
总结与过渡

本节课中我们一起学习了如何利用最优价值函数求解最优策略。我们了解到:
- 给定最优状态价值函数 V* 和动态模型 P,可以通过对每个动作进行一步前瞻计算并取最大值,来找到最优策略 π*。
- 给定最优动作价值函数 Q*,则可以直接通过选取使 Q* 最大化的动作来得到最优策略,过程更为简便。
最优价值函数与最优策略之间的这种对应关系,将帮助我们推导后续专项课程中将要探索的许多强化学习算法。下一节,我们将开始探讨如何实际计算这些最优价值函数。
028:策略、价值函数与贝尔曼方程总结

在本节课中,我们将回顾并总结本周学习的核心内容:策略、价值函数以及它们之间的关系。我们将重点理解贝尔曼方程如何帮助我们评估策略,并初步探索如何寻找最优策略。
策略的定义与类型
上一节我们介绍了强化学习的基本框架,本节中我们来看看智能体如何做决策,即策略。
策略告诉智能体在特定状态下应如何行动。根据定义,策略仅依赖于当前状态,而不能依赖于时间或之前的状态。这应被视为对状态表示的要求,而非对智能体的限制。状态必须为智能体提供做出良好决策所需的全部信息。这是强化学习中许多技术的重要前提。
策略主要分为两类:
- 确定性策略:将每个状态映射到一个具体的动作。每次访问状态
S时,策略都会选择关联的动作π(S)。 - 随机性策略:将每个状态映射到所有可能动作的一个概率分布上。每次访问状态
S时,策略会以概率π(a|S)从关联分布中随机抽取一个动作A。
价值函数的作用
理解了策略后,我们来看看如何衡量一个策略的好坏,这就需要引入价值函数。
价值函数非常强大,它能在特定策略下,汇总未来的总奖励。我们讨论了两种价值函数:
- 状态价值函数
Vπ(s):表示从当前状态s开始,遵循策略π所能获得的期望回报。 - 动作价值函数
Qπ(s, a):表示从状态s开始,首先选择动作a,然后遵循策略π所能获得的期望回报。
价值函数通过将众多可能的未来回报汇总为一个数字,极大地简化了问题。

贝尔曼方程
价值函数本身是如何计算的呢?这就要用到贝尔曼方程。
贝尔曼方程定义了一个状态(或状态-动作对)的价值与其后继状态价值之间的关系。以下是两种贝尔曼方程:
- 状态价值函数的贝尔曼方程:将当前状态的价值表示为所有可能的后继状态价值与即时奖励的加权和。
Vπ(s) = Σ_a π(a|s) Σ_s‘ P(s’|s,a) [ R(s,a,s‘) + γ * Vπ(s’) ] - 动作价值函数的贝尔曼方程:将一个状态-动作对的价值表示为所有可能的下一个状态-动作对价值与即时奖励的加权和。
Qπ(s, a) = Σ_s‘ P(s’|s,a) [ R(s,a,s‘) + γ * Σ_a’ π(a‘|s’) * Qπ(s‘, a’) ]

贝尔曼方程可以直接求解,从而得到特定策略下的价值函数,这个过程称为策略评估。
最优策略与贝尔曼最优性方程
贝尔曼方程帮助我们评估给定策略,但我们的最终目标是找到能获得尽可能多奖励的策略。为此,我们定义了最优策略和相关的最优价值函数。
- 最优策略
π*:在每个状态下都能获得最高可能价值的策略。至少存在一个最优策略,也可能存在多个。 - 最优状态价值函数
V*(s):等于每个状态下可能达到的最高价值。所有最优策略都共享同一个V*(s)。 - 最优动作价值函数
Q*(s, a):同理,所有最优策略也共享同一个Q*(s, a)。
与所有价值函数一样,最优价值函数也有其贝尔曼方程,即贝尔曼最优性方程。这些方程的特点是不引用任何特定策略,其本质是将标准贝尔曼方程中对动作的期望(按策略加权)替换为对所有动作取最大值。这意味着最优策略必须始终选择可用的最佳动作。
- 最优状态价值函数的贝尔曼方程:
V*(s) = max_a Σ_s‘ P(s’|s,a) [ R(s,a,s‘) + γ * V*(s’) ] - 最优动作价值函数的贝尔曼方程:
Q*(s, a) = Σ_s‘ P(s’|s,a) [ R(s,a,s‘) + γ * max_a’ Q*(s‘, a’) ]
从最优价值函数中提取策略
如果我们知道了最优价值函数,如何得到最优策略呢?
- 从
V*(s)提取:需要知道环境的单步动态模型(即转移概率P和奖励函数R),然后在每个状态s选择能最大化Σ_s‘ P(s’|s,a) [ R(s,a,s‘) + γ * V*(s’) ]的动作a。 - 从
Q*(s, a)提取:这要简单得多。我们只需在每个状态s选择具有最高Q*值的动作即可:
π*(s) = argmax_a Q*(s, a)
本节课中我们一起学习了:策略(确定性与随机性)的定义、状态与动作价值函数的作用、用于策略评估的贝尔曼方程、最优策略与最优价值函数的概念、以及用于寻找最优策略的贝尔曼最优性方程。下周,我们将学习如何利用这些贝尔曼方程来计算最优策略。
029:策略评估与策略控制


在本节课中,我们将学习强化学习中的两个核心任务:策略评估与策略控制。我们将了解它们的定义、区别,并介绍一种名为动态规划的求解方法及其适用场景。
我们经常讨论两个不同的任务:策略评估与控制。
策略评估是为一个特定策略确定其价值函数的任务。
控制是寻找一个策略以获得尽可能多奖励的任务。换句话说,是寻找一个能最大化价值函数的策略。
控制是强化学习的最终目标。
但策略评估任务通常是必要的第一步。
如果我们没有办法评估一个策略的好坏,就很难改进它。本周,我们将学习一系列称为动态规划的算法,用于解决策略评估和控制问题。
在本视频结束时,你将能够理解策略评估与控制之间的区别,解释动态规划可以应用的场景及其局限性。
策略评估详解
上一节我们介绍了两个核心任务,本节中我们来看看策略评估的具体含义。
想象有人给你一个策略,你的工作是确定这个策略有多好。策略评估是为特定策略π确定其状态价值函数Vπ的任务。
回想一下,在策略π下,一个状态的价值是如果我们按照π行动,从该状态开始的期望回报。回报本身是未来奖励的折扣总和。
我们已经看到贝尔曼方程如何将寻找Vπ的问题简化为一个线性方程组,每个状态对应一个方程。因此,策略评估问题就简化为求解这个线性方程组。
理论上,我们可以用线性代数的各种方法来解决这个任务。但在实践中,动态规划的迭代求解方法更适合于一般的马尔可夫决策过程。
控制任务详解
了解了如何评估策略后,我们来看看控制任务,即如何改进策略。
控制是改进策略的任务。回想一下,如果策略π2在每个状态下的价值都大于或等于策略π1下的价值,则认为π2与π1一样好或更好。
如果π2与π1一样好或更好,并且至少存在一个状态,π2下的价值严格大于π1下的价值,则我们说π2严格优于π1。
控制任务的目标是修改一个策略,以产生一个严格更好的新策略。
此外,我们可以尝试反复改进策略,以获得一系列越来越好的策略。当无法再改进时,意味着没有策略严格优于当前策略,因此当前策略必定等于最优策略,我们可以认为控制任务已完成。
动态规划方法
想象我们能够获知环境的动态特性P。本周的内容就是关于如何利用这些知识来解决策略评估和控制任务。
即使掌握了这些动态特性,我们仍需要仔细思考和巧妙的算法来计算价值函数和最优策略。在接下来的几个视频中,我们将研究一类称为动态规划的求解方法。
动态规划利用我们见过的各种贝尔曼方程,结合对P的了解,来计算价值函数和最优策略。
经典的动态规划完全不涉及与环境的交互;相反,我们使用动态规划方法,在给定MDP模型的情况下计算价值函数和最优策略。
尽管如此,动态规划对于理解其他强化学习算法非常有用。大多数强化学习算法都可以被视为没有模型情况下的动态规划近似。
这种联系在课程2中将介绍的基于时序差分的Dyna规划算法中最为显著。我们将在整个专项课程中重新审视这些联系。
总结

本节课中我们一起学习了强化学习的两个核心任务。
总结来说,策略评估是为策略π确定状态价值函数Vπ的任务。控制是改进现有策略的任务。
如果我们能够获知动态函数P,则可以使用动态规划技术来解决这两个任务。
下次课我们将学习如何使用动态规划进行策略评估。
030:迭代策略评估 🧮
在本节课中,我们将学习如何将贝尔曼方程转化为更新规则,从而得到动态规划算法。我们将重点介绍第一个此类算法——迭代策略评估。通过本课,你将能够概述用于估计给定策略下状态价值的迭代策略评估算法,并将其应用于计算价值函数。
从方程到算法
上一节我们回顾了贝尔曼方程。本节中,我们来看看如何将其转化为一个实用的计算过程。
贝尔曼方程为价值函数 V^π 提供了一个递归表达式。迭代策略评估的核心思想非常简单直接:我们直接将贝尔曼方程用作更新规则。这样,我们就将一个关于真实价值函数的方程,变成了一个可以迭代优化价值函数估计值的过程。这个过程将产生一系列越来越接近真实价值函数的近似值。
让我们直观地看看这个过程是如何工作的。我们首先为近似价值函数 V 进行任意初始化(称为 V0)。然后,每一次迭代都会使用幻灯片顶部所示的更新规则,产生一个更好的近似值。每一次迭代都会对状态空间中的每一个状态 s 应用此更新,这被称为一次扫描。反复应用此更新,会得到越来越接近真实状态价值函数 V^π 的近似值。
如果某次更新后,价值函数近似值保持不变(即对所有状态,V_{k+1} = V_k),那么 V_k 就等于 V^π,我们就找到了价值函数。这是因为 V^π 是贝尔曼方程的唯一解。更新能使 V_k 保持不变的唯一情况,就是 V_k 已经满足贝尔曼方程。事实上,可以证明,对于 V0 的任意初始选择,当 k 趋近于无穷大时,V_k 都会收敛到 V^π。
算法实现细节
为了实现迭代策略评估,我们通常使用两个数组,每个数组为每个状态保留一个条目。
- 一个数组
V存储当前的价值函数近似值。 - 另一个数组
V‘存储更新后的值。
使用两个数组,我们可以逐个状态地根据旧值计算新值,而不会在计算过程中改变旧值。在一次完整的扫描结束后,我们将所有新值写入 V 数组,然后进行下一次迭代。
也可以实现只使用一个数组的版本。在这种情况下,某些更新将直接使用已经计算出的新值,而非旧值。这种单数组版本同样能保证收敛,并且通常会收敛得更快,因为它能更早地使用更新后的值。但为了简单起见,我们重点讨论双数组版本。
网格世界示例 🌐
让我们通过一个具体例子看看迭代策略评估是如何工作的。考虑这里所示的 4x4 网格世界。这是一个分幕式 MDP,终止状态位于左上角和右下角(形式上它们是同一个状态)。每次状态转移的奖励都是 -1。由于问题是分幕式的,我们考虑无折扣情况,即 γ = 1。
每个状态有四种可能的动作:上、下、左、右。每个动作都是确定性的。如果动作会使智能体移出网格,则智能体保持原地不动。
现在,我们来评估均匀随机策略,该策略以各 1/4 的概率选择四个动作。价值函数表示从给定状态出发到终止的期望步数。由于我们使用的是算法的双数组版本,遍历状态的顺序并不重要。假设我们按从左到右、从上到下的顺序扫描状态。我们从不更新终止状态的值,因为它被定义为 0。
我们将 V 中的所有值初始化为 0。V‘ 中的初始值无关紧要,因为它们在使用前总会被更新。现在可以开始第一次迭代,首先更新状态 (1,1)。为了计算更新,我们必须对所有动作求和。以左动作为例,在均匀随机策略下其概率为 1/4。转移函数 p 在这里是确定性的,因此只有转移到状态 (1,1) 的奖励和状态价值对求和有贡献。求和项包括奖励 -1 和终止状态的价值 0。由于我们将所有状态价值初始化为 0,且每次转移的奖励都是 -1,其他所有动作的计算结果看起来都非常相似。结果是 V‘ 中状态 (1,1) 的值被设为 -1。
接下来,我们移动到状态 (1,2)。我们首先计算求和式中左动作对应的项。同样,动作概率是 1/4,在这种情况下,下一个状态是状态 (1,1)。尽管我们已经更新了状态 (1,1) 的价值,但我们正在运行的算法版本将使用存储在 V 中的旧值。因此,更新中使用的状态 (1,1) 的价值仍然是 0。同样,所有其他动作的结果也类似。结果是 V‘ 中状态 (1,2) 的值也被设为 -1。事实上,由于每个状态价值都初始化为 0,每个状态的价值在第一次扫描后都会被设为 -1。完成这次完整扫描后,我们将更新后的值从 V‘ 复制到 V。这仅仅是一次扫描。
完整算法流程
以下是迭代策略评估的完整算法:

我们刚刚看到了单次扫描如何进行,现在来看看如何计算多次扫描以及算法如何停止。

外层循环持续进行,直到近似价值函数的变化变得足够小。我们跟踪单次迭代中状态价值的最大更新量,称之为 Δ。当这个最大变化量小于某个用户指定的常数 θ 时,外层循环终止。如前所述,一旦近似价值函数停止变化,我们就已收敛到 V^π。类似地,一旦近似价值函数的变化非常小,就意味着我们已非常接近 V^π。
示例续算与收敛
让我们回到网格世界示例中中断的地方,我们刚刚完成了第一次扫描。选择停止参数 θ = 0.001。我们选择的 θ 值越小,最终的价值估计就越精确。
我们已经完成了一次迭代,价值的最大变化量是 1.0。由于它大于 0.001,我们继续进行下一次迭代。在第二次扫描之后,请注意终止状态的影响如何首先传播到最近的状态。

让我们再运行一次扫描。现在可以看到终止状态的影响传播得更远了。再运行几次扫描,我们可以看到每个状态的价值与其到终止状态的接近程度之间的关系。让我们持续运行,直到最大 Δ 小于 θ。

这是我们最终得到的结果。我们的近似价值函数已经收敛到随机策略下的价值函数。



总结
本节课中,我们一起学习了如何将贝尔曼方程转化为更新规则,从而迭代地计算价值函数。我们详细介绍了迭代策略评估算法,包括其双数组实现原理,并通过一个网格世界的例子逐步演示了算法的执行过程。很快我们将看到,这些思想同样可以用于策略改进。下次见!
031:策略改进 🚀
在本节课中,我们将要学习如何利用动态规划评估得到的策略价值函数来改进策略。我们将深入理解策略改进定理,并掌握如何基于任意策略的价值函数,构造出一个更优的新策略。
上一节我们介绍了如何使用动态规划迭代地评估一个策略的价值函数。本节中我们来看看如何利用这个价值函数来改进策略本身。
策略改进定理
我们之前提到,如果已知最优价值函数 V,可以通过在每个状态选择贪婪动作*来找到最优策略。贪婪动作即在每个状态下最大化贝尔曼最优方程的动作。
现在,假设我们面对的不是最优价值函数,而是任意一个策略 π 的价值函数 Vπ。如果我们根据 Vπ 选择一个贪婪动作,这个新策略会怎样?
首先,这个新策略 π‘ 必然与 π 不同。如果贪婪化操作没有改变策略,那就意味着 π 已经相对于其自身的价值函数是贪婪的。这等价于说 Vπ 满足贝尔曼最优方程,此时 π 已经是最优策略。

实际上,以这种方式得到的新策略 π‘ 必定严格优于原策略 π,除非 π 本身已经是最优的。这一结论源于一个一般性结果,即策略改进定理。
以下是策略改进定理的核心思想:
回忆 Qπ(s, a) 的定义,它表示在状态 s 采取动作 a,之后遵循策略 π 所能获得的价值。假设我们根据新策略 π‘ 选择动作 a,然后继续遵循原策略 π。如果这个动作的价值高于在原策略 π 下所选动作的价值,那么策略 π‘ 必然更好。
策略改进定理将这一想法形式化:
- 如果在每个状态下,策略 π‘ 所选动作的价值都大于或等于策略 π 所选动作的价值,那么策略 π‘ 至少和 π 一样好。
- 如果至少在一个状态下,策略 π‘ 所选动作的价值严格大于策略 π 所选动作的价值,那么策略 π‘ 严格优于 π。

网格世界示例
让我们通过之前使用的 4x4 网格世界来看策略改进是如何工作的。


上图是我们之前为均匀随机策略计算得到的最终价值函数 Vπ。
现在,基于这个 Vπ 的贪婪策略会是什么样子?我们需要在每个状态下,选择能通往价值最高(即负值最小)的下一个状态的动作。
以下是贪婪化后得到的新策略 π‘:

这个新策略与我们最初使用的均匀随机策略截然不同。根据策略改进定理,这个新策略 π‘ 被保证优于我们最初使用的均匀随机策略 π。
事实上,仔细观察这个新策略,我们可以发现它实际上就是最优策略。在每个状态下,所选动作都位于通往终止状态的最短路径上。

请注意,我们开始时使用的价值函数 Vπ 并非最优价值函数,但相对于 Vπ 的贪婪策略却是最优的。更一般地说,策略改进定理只保证新策略是对原策略的改进,我们不能总是期望如此轻易地找到最优策略。
总结
本节课中我们一起学习了:
- 策略改进定理:它告诉我们,基于任意策略价值函数 Vπ 进行贪婪化得到的新策略 π‘ 是原策略 π 的一个严格改进,除非 π 本身已经是最优的。
- 策略改进方法:我们掌握了如何利用给定策略下的价值函数,通过在每个状态选择价值更高的贪婪动作,来产生一个严格更优的策略。
下次课,我们将讨论如何利用这一结果,创建一个迭代的动态规划算法来寻找最优策略。
032:策略迭代 🎯


在本节课中,我们将学习如何通过策略迭代算法来寻找最优策略。我们将看到,通过交替执行策略评估和策略改进这两个步骤,可以系统地得到一个不断改进的策略序列,并最终收敛到最优策略。
概述
上一节我们介绍了如何利用给定策略的价值函数来找到一个更好的策略。本节中,我们将展示如何通过迭代地评估和改进一系列策略,最终找到最优策略。
策略迭代算法原理
策略改进定理告诉我们,除非给定策略已经是最优的,否则我们可以通过对其价值函数采取贪心行动来构造一个严格更好的策略。
假设我们从策略 π₁ 开始。我们可以使用迭代策略评估来计算其状态价值 V^π₁。我们称这一步为评估步骤。
利用策略改进定理的结果,我们可以对 V^π₁ 采取贪心行动,从而得到一个更好的策略 π₂。我们称这一步为改进步骤。
然后我们可以计算 V^π₂,并用它来获得一个更好的策略 π₃。这就产生了一个越来越好的策略序列。除非上一个策略已经是最优的,否则每个策略都保证比上一个策略有所改进。
因此,当我们完成一次迭代而策略保持不变时,我们就知道已经找到了最优策略。此时,我们可以终止算法。
以这种方式生成的每个策略都是确定性的,而确定性的策略数量是有限的。所以这种迭代改进最终必然会达到一个最优策略。这种寻找最优策略的方法被称为策略迭代。
策略与价值的“舞蹈”
策略迭代由两个不同的步骤重复进行:评估和改进。
我们首先评估当前策略 π₁,这为我们提供了一个新的价值函数,它准确地反映了 π₁ 的价值。改进步骤然后使用 V^π₁ 来产生一个贪心策略 π₂。此时,π₂ 相对于 π₁ 的价值函数是贪心的,但 V^π₁ 不再准确地反映 π₂ 的价值。
下一个评估步骤使我们的价值函数相对于策略 π₂ 变得准确。一旦我们这样做了,我们的策略就不再是贪心的了。
这种策略与价值的“舞蹈”来回进行,直到我们达到唯一一个相对于其自身价值函数是贪心的策略——即最优策略。此时,也只有此时,策略是贪心的,并且价值函数是准确的。

我们可以将这种“舞蹈”可视化为在两条线之间来回反弹:一条线是价值函数准确,另一条线是策略贪心。这两条线只在最优策略和价值函数处相交。策略迭代总是通过首先投影到 V = v^π 这条线,然后再投影到 π 相对于 V 是贪心的那条线,从而朝着交点前进。
当然,策略和价值函数空间的真实几何结构更为复杂,但相同的直觉是成立的。
算法伪代码
以下是策略迭代过程的伪代码描述:
初始化 V(s) 和 π(s),可以任意初始化
重复
// 策略评估
重复
Δ ← 0
对于每个状态 s:
v ← V(s)
V(s) ← Σ_{a} π(a|s) Σ_{s‘, r} p(s‘, r|s, a) [r + γ V(s‘)]
Δ ← max(Δ, |v - V(s)|)
直到 Δ < θ (一个小的正数)
// 策略改进
policy_stable ← true
对于每个状态 s:
old_action ← π(s)
π(s) ← argmax_a Σ_{s‘, r} p(s‘, r|s, a) [r + γ V(s‘)]
如果 old_action ≠ π(s), 则 policy_stable ← false
直到 policy_stable 为 true

算法步骤如下:
- 初始化价值函数 V 和策略 π。
- 调用迭代策略评估,使 V 准确反映 π 的价值。
- 在每个状态 s,将 π(s) 设置为在当前价值函数下能最大化未来回报的动作。
- 如果在任何状态选择的动作发生了改变,则策略尚未稳定。
- 检查策略是否稳定。如果不稳定,则返回步骤2,评估这个新策略。
网格世界示例

让我们通过一个简单的网格世界问题来直观理解策略迭代是如何工作的。
我们修改之前使用的4x4网格世界示例,使其控制任务更具挑战性:
- 移除其中一个终止状态,使得只有一种方式结束回合。
- 添加一些特别“坏”的状态(图中蓝色标记)。进入这些状态会获得-10的奖励。
- 其他非终止状态的转移奖励为-1。
最优策略应该沿着白色的低代价路径蜿蜒前进,到达终止状态,并避开蓝色坏状态。
以下是策略迭代的过程演示:
- 初始化:我们选择均匀随机策略,并将所有状态的价值估计初始化为0。
- 第一次评估:评估均匀随机策略。评估后,所有状态的价值都为负,但靠近目标的状态负值稍小。
- 第一次改进:对评估后的价值函数进行贪心改进。靠近终止状态的政策正确地沿着低代价路径前进。然而,在底行的状态,策略选择了更直接但会经过坏状态的路径。
- 第二次评估:评估这个新策略。经过一次改进后,价值函数看起来更合理了。
- 第二次改进:再次贪心改进。根据策略改进定理,这个新策略比上一个更好。具体来说,右下角的状态现在直接沿着低代价路径向上走。
- 后续迭代:我们继续交替进行评估和改进。每次评估都反映了策略改变带来的价值变化,每次改进都优化了动作选择。经过数次迭代后,策略收敛到了最优策略:沿着白色路径前进,避开所有蓝色坏状态。
- 终止:当我们再次尝试贪心改进时,策略不再改变。这表明策略迭代已完成,最优策略已被找到。

这个例子展示了策略迭代的强大之处:它保证我们可以遵循一个越来越好的策略序列,直到达到最优策略。当最优策略不直接明了时(在这个例子中,路径是曲折的),策略迭代能够有效地在搜索空间中穿行。我们真正关心的问题中也会出现类似的复杂性。
总结
本节课中,我们一起学习了策略迭代算法。我们了解到:
- 策略迭代通过交替进行策略评估和策略改进来工作。
- 它遵循一个策略和价值函数不断改进的序列,直到达到最优策略和最优价值函数。
- 当一次迭代后策略不再改变时,算法终止,此时已找到最优解。
策略迭代是强化学习中寻找最优策略的一种系统而有效的方法。
033:广义策略迭代框架的灵活性 🧩

在本节课中,我们将学习策略迭代框架的灵活扩展——广义策略迭代。我们将探讨如何放松策略评估与改进的严格交替过程,并介绍价值迭代这一重要特例,以及同步与异步动态规划方法的区别。
策略与价值的“舞蹈” 💃

上一节我们介绍了策略迭代作为一个相当固定的过程。它需要在评估当前策略与贪婪改进策略之间严格交替。
广义策略迭代的框架则提供了比这多得多的自由度,同时仍能保证我们找到最优解。在本节中,我们将概述其中一些替代方案。
以下是广义策略迭代的核心思想:我们可以想象放松严格的交替过程。我们不再让每个步骤都完全执行到底,而是可以遵循一个更灵活的轨迹。每次评估步骤都让我们的估计值更接近当前策略的价值,但并非完全收敛。每次策略改进步骤都让我们的策略变得更贪婪一些,但并非完全贪婪。直观上,这个过程仍应朝着最优策略和价值函数的方向前进。事实上,理论也告诉我们同样的结论。
我们将使用术语“广义策略迭代”来指代所有可以交错进行策略评估和策略改进的方式。
价值迭代:评估与改进的融合 ⚡
广义策略迭代带来的第一个算法称为价值迭代。
在价值迭代中,我们仍然会遍历所有状态,并基于当前价值函数进行贪婪改进。然而,我们不会将策略评估运行到完全收敛。我们只对所有状态执行一次遍历,之后便再次进行贪婪改进。

我们可以将其写成一个直接应用于状态价值函数的更新规则。该更新不引用任何特定策略,因此得名“价值迭代”。
完整的算法看起来与迭代策略评估非常相似。区别在于,我们不是根据固定策略更新价值,而是使用能最大化当前价值估计的动作来更新。
以下是价值迭代的更新公式:
V_{k+1}(s) = max_a Σ_{s', r} p(s', r | s, a) [r + γ * V_k(s')]
价值迭代在极限情况下仍会收敛到最优价值函数 V*。我们可以通过取使价值最大化的动作来从最优价值函数中恢复出最优策略。
在实践中,我们需要指定一个终止条件,因为我们不能无限等待。我们将使用与策略评估相同的条件:当一次完整遍历中价值函数的最大变化小于某个小值 θ 时,便终止算法。

同步与异步动态规划 🔄
价值迭代在每次迭代中遍历整个状态空间,这与策略迭代类似。像这样执行系统遍历的方法被称为同步方法。
如果状态空间很大,这可能会有问题。每次遍历都可能花费很长时间。
异步动态规划算法则以任意顺序更新状态的价值。它们不执行系统遍历。它们可能在更新另一个状态之前,多次更新某个给定的状态。
为了保证收敛,异步算法必须持续更新所有状态的价值。例如,如果一个算法永远只更新相同的三个状态,而忽略所有其他状态,这是不可接受的,因为从未被更新的状态其价值不可能正确。
异步算法可以通过选择性更新来快速传播价值信息。有时,这可能比系统遍历更高效。例如,异步方法可以更新那些最近价值发生变化的状态附近的状态。

总结 📝
本节课中,我们一起学习了广义策略迭代的灵活性框架。
你现在应该理解,价值迭代允许我们在单一步骤中融合策略评估与改进。异步动态规划方法赋予我们以任意顺序更新状态的自由。而广义策略迭代的思想统一了许多算法,包括价值迭代、异步动态规划以及本专题中将涵盖的几乎所有方法。
034:动态规划的效率
在本节课中,我们将探讨动态规划方法在解决马尔可夫决策过程问题时的效率。我们将了解两种替代方法——蒙特卡洛采样和暴力搜索,并通过对比,理解动态规划及其核心思想“自举”所带来的显著优势。
动态规划与替代方法概述
在之前的课程中,我们讨论了动态规划方法如何帮助我们计算价值函数和策略。但这些方法究竟有多大用处?与简单的替代方案相比如何?本节视频将探讨其他可能的求解策略。通过比较,你会发现动态规划实际上出奇地高效。
策略评估:动态规划 vs. 蒙特卡洛方法
上一节我们介绍了迭代策略评估,它是解决预测或策略评估问题的动态规划方案。本节中,我们来看看一种基于采样的替代方案——蒙特卡洛方法。
在蒙特卡洛方法中,每个状态的价值被视为一个完全独立的估计问题。其核心是,状态价值是从该状态出发的期望回报。具体步骤如下:
- 在策略 π 下,从目标状态收集大量回报样本。
- 计算这些回报的平均值。
这个平均值最终会收敛到该状态的真实价值。然而,这种方法可能需要从每个状态收集大量回报。每个回报都依赖于策略 π 选择的许多随机动作,以及MDP动态特性导致的许多随机状态转移。因此,每个回报可能与真实状态价值相差很大,我们需要平均大量回报才能使估计收敛,并且必须对每一个状态重复此过程。
动态规划的关键洞见在于,我们不必将每个状态的评估视为独立的问题。我们可以利用已经辛苦计算出的其他状态的价值估计。这种利用后续状态的价值估计来改进当前状态价值估计的过程,被称为自举。与独立估计每个价值的蒙特卡洛方法相比,自举通常效率更高。
策略优化:动态规划 vs. 暴力搜索
策略迭代用于计算最优策略。一种可能的替代方法是暴力搜索。
这种方法简单地逐一评估每一个可能的确定性策略,然后选择价值最高的那个。确定性策略的数量是有限的,并且总是存在一个最优的确定性策略,因此暴力搜索最终能找到答案。然而,确定性策略的数量可能极其庞大。一个确定性策略为每个状态选择一个动作,因此确定性策略的总数是状态数量的指数级函数。即使对于一个相当简单的问题,这个数字也可能是天文数字,导致求解过程耗时极长。
相比之下,策略改进定理保证了策略迭代能找到一系列越来越好(价值单调递增)的策略。这比穷举尝试每一个策略的效率有显著提升。
动态规划的效率分析
那么,与这些朴素的替代方法相比,动态规划的效率如何?
策略迭代保证能在与状态和动作数量成多项式关系的时间内找到最优策略。因此,动态规划比在策略空间上进行暴力搜索要快指数级。在实践中,动态规划通常比这个最坏情况下的理论保证还要快得多。例如,在最初的4x4网格世界问题中,策略迭代仅一步就收敛了。即使我们通过添加“坏状态”使问题变得更复杂,它也仅在五次迭代内收敛。
有人可能会觉得,必须在策略迭代的每一步都运行完整的策略评估,这显得很受限。但在实践中,这并不糟糕。随着迭代进行,策略的改变会越来越小,策略评估步骤对价值函数的改变也随之减小,因此评估步骤通常能快速终止。
维度灾难与挑战
通常,随着状态数量的增长,解决MDP问题会变得更难。维度灾难指出,状态空间的大小会随着状态变量数量的增加而呈指数级增长。一个智能体在网格世界中移动尚可处理,但如果我们想协调一个由数百个地点之间移动的数千名司机组成的交通网络呢?对可能状态进行原始枚举会导致状态数量指数级爆炸。
显然,如果我们试图通过遍历所有状态来执行策略迭代,这会导致问题。事实上,这不是动态规划本身的问题,而是我们试图解决的复杂问题本身固有的难度。存在各种技术来缓解这种诅咒,在后续的学习中,我们将继续与这个挑战作斗争。

总结

本节课中,我们一起学习了动态规划方法的效率。最重要的收获是:自举通过利用一个状态的价值与其可能后续状态价值之间的联系,使我们免于执行大量不必要的工作,从而极大地提升了计算效率。动态规划在策略评估和策略优化方面,相比蒙特卡洛采样和暴力搜索,都具有指数级或显著的速度优势,是解决中等规模MDP问题的强大工具。
035:车队管理中的近似动态规划简论 🚚


在本节课中,我们将学习如何运用近似动态规划与强化学习来解决高维度的资源分配问题,特别是以卡车车队管理为例。我们将从单辆卡车的简单场景开始,逐步扩展到整个车队的复杂管理,并介绍核心的计算方法。
单辆卡车的决策过程 🚛
上一节我们介绍了课程背景,本节中我们来看看如何为单辆卡车做决策。想象你是一名刚入职的卡车司机,起点在德克萨斯州。
系统向你展示了四批待运货物,每批货物将运往不同的目的地。由于你是新手,对所有目的地的未来价值估计均为零。因此,你将选择当前运费最高的货物。
- 运往纽约的货物:$450
- 运往加州的货物:$600
- 运往明尼苏达的货物:$400
- 运往德州的货物:$350
你选择了运费$450的货物前往纽约。在出发前,你将“位于德克萨斯州”的价值更新为$450,因为这是你本次的收益($450)加上你对纽约的未来价值估计($0)。
到达纽约后,你重复此过程。此时,若选择返回德州的货物($350),你需要将其与德州的现有价值($450)相加,总收益为$800。但有一批运往加州的货物出价$600,且你对加州的未来价值估计为$0,因此你选择了前往加州。
现在,你位于加州。有一批$400的货物前往明尼苏达,但你从未去过那里,对其价值估计为$0。同时,一批$350的货物返回德州,结合德州的现有价值$450,总收益为$800。因此,你选择返回德州。
当你再次回到德州时,面临新的选择。一批$800的货物前往科罗拉多州,但你从未去过那里。此时,你需要更新“位于德克萨斯州”的价值。旧估值是$450,新观察到的潜在收益是$800。
以下是更新价值估计的平滑公式:
新估值 = (1 - α) * 旧估值 + α * 新观察值
我们使用学习率(或步长)α = 0.1 进行计算:
新估值 = 0.9 * $450 + 0.1 * $800 = $485
于是,“位于德克萨斯州”的价值估计被更新为$485。这就是经典的近似动态规划/强化学习方法。
扩展到车队管理:维数灾难 🚚🚚
上一节我们处理了单辆卡车,本节中我们来看看管理一个车队会带来什么挑战。假设你是一家卡车公司,拥有多辆卡车。
如果只有一辆卡车,其状态可以简单地用其所在位置(如25个地点中的一个)表示。但对于两辆卡车,系统状态需要描述两辆车位置的所有可能组合。随着车队规模扩大,状态数量会呈组合爆炸式增长。
车队可能状态数量的计算公式如下:
状态总数 = (位置总数 + 车队规模 - 1)! / (车队规模! * (位置总数 - 1)!)
当车队规模从1增加到5、50,或卡车属性(如车型、状态)增多时,状态空间会变得极其庞大。传统的、基于离散状态表示的强化学习方法将无法应对这种“维数灾难”。
车队管理的解决方案:基于边际价值的近似动态规划
那么,如何将方法扩展到整个车队呢?核心思路是解决一个驾驶员与货物的分配问题,并利用边际价值来近似未来收益。
我们面临一个持续的动态任务:驾驶员不断加入或离开系统,新货物订单随时出现。我们需要在考虑未来不确定事件的前提下,做出当前时刻的最佳分配决策。
对于单辆卡车,我们可以比较两个选择:将当前收益与对目的地的未来价值估计相加,然后选总价值最高的。对于整个车队,这就变成了一个网络流分配问题,可以建模为一个线性规划问题。
以下是解决此类问题的常用工具:
- Gurobi
- CPLEX
这些工具在Python中可用,大学用户通常可以免费获取,并能快速求解大规模问题。
计算驾驶员的边际价值
关键问题在于:如何获得每个目的地的“下游价值”或每个驾驶员的“未来价值”估计?
我们为整个车队求解一次分配问题(线性规划),得到系统总贡献值。然后,我们“拿走”一名特定属性的驾驶员(例如在位置A1的司机),重新求解分配问题,得到新的系统总贡献值。
该驾驶员的边际价值计算公式为:
V̂ = 有该驾驶员时的总贡献 - 无该驾驶员时的总贡献
这个 V̂ 代表了该驾驶员对系统的边际贡献。就像更新单辆卡车的价值一样,我们用平滑公式来更新对驾驶员边际价值的估计:
V̄_new = (1 - α) * V̄_old + α * V̂
我们需要对车队中的每位驾驶员都进行这样的更新。幸运的是,在求解线性规划时,许多求解器可以直接提供这些边际价值(在优化中称为对偶变量),无需手动进行数值差分计算,这使得方法具有高度的可扩展性。
整体算法流程
整个算法的流程可以概括为以下三步迭代:
- 求解线性规划(绿色部分):基于当前对所有驾驶员边际价值
V̄的估计,求解最优分配方案x,并得到本次迭代中观察到的边际价值V̂。 - 更新价值估计(蓝色部分):使用平滑公式,用新观察到的
V̂更新平滑估计V̄。 - 模拟推进(红色部分):根据当前决策,将系统状态向前模拟一步(例如,到下一小时或下一天),产生新的驾驶员和货物状态,然后回到步骤1。
通过多次迭代,我们对驾驶员边际价值的估计会越来越准确,整体解决方案的质量也会逐步提升。虽然过程中可能会有波动,但总体趋势是向上的。
总结与资源
本节课中,我们一起学习了如何用近似动态规划处理高维度资源分配问题。我们从单辆卡车的价值迭代入手,揭示了直接扩展到车队时面临的“状态爆炸”挑战。接着,我们引入了基于线性规划和边际价值的解决方案,通过迭代地求解分配问题、更新价值估计和模拟推进,来高效管理大规模车队。
如果你想深入了解或动手实践,可以访问以下资源:
- 网站:访问 jungle.princeton.edu,在“Educational Materials”部分查找更多资料。
- 代码:在我的GitHub仓库中查找Python模块,特别是名为“blood management problem”的示例,它提供了一个很好的同类问题(医疗资源分配)的编程范例。
通过本教程,你应该对如何将强化学习思想应用于实际的大规模调度问题有了一个初步而清晰的认识。
036:车队管理中的近似动态规划详述




在本节课中,我们将学习如何运用近似动态规划来建模一个复杂的运输运营问题。我们将从一个简单的“游牧卡车司机”例子开始,逐步扩展到管理拥有数千辆卡车的大型车队,并探讨如何处理高维状态空间。课程将涵盖核心概念,如价值函数估计、线性规划求解以及分层聚合方法。
问题引入:从单辆卡车到大型车队
我将使用近似动态规划来帮助我们建模一个非常复杂的运输运营问题。这是我职业生涯的起点,一个整车运输行业的问题。对于那些熟悉Uber和Lyft的人来说,可以将其理解为卡车运输领域的“Uber和Lyft”,即卡车将一批货物从一个城市运到另一个城市,到达后卸货。这是施耐德国家公司的图片,这是第一家向我提出这个问题的公司。挑战在于将左侧的司机分配到右侧的货物,然后必须考虑司机未来的情况。在这个行业中,完成一次运输可能需要一到三天,而不是10到20分钟。这意味着一旦我完成运输,已经是几天之后了,我必须考虑是否要运送那批货物,以及司机未来的价值是多少。
让我们用一辆卡车来说明这个问题,我称之为“游牧卡车司机”。
也许这是一个第一次上路的司机,他碰巧在德克萨斯州。他登录网站,看到有四批货物可以运送,每批的运费不同。
他必须考虑目的地,以确定哪批货物最好。
但他是个新手,一无所知。所以他会将所有下游价值设为零。
他将查看立即能赚到的钱,看起来去纽约能赚450美元。所以他说,好吧,我运送去纽约的货物。
在我们出发去纽约之前,我们要记下通过从德克萨斯州运送货物赚了450美元,所以我们将把在德克萨斯州的价值更新为450美元。
然后我们将前往纽约并重复这个过程。
现在我可以运送返回德克萨斯州的货物,125美元加上450美元是575美元。
但我还有一批去加利福尼亚的货物,能付我600美元。所以我选择那批。
首先更新在纽约的价值为600美元。
现在我去加利福尼亚,我们重复整个过程。
现在情况变得有点意思,因为有一批去明尼苏达州的货物,价值400美元。
但我从未去过明尼苏达州。所以我仍然认为其下游价值为0。
但我可以去德克萨斯州,有一批价值350美元的货物。但我已经去过德克萨斯州,并且知道价值是450美元,所以我把两者相加得到800美元。
我选择800美元。我们稍后会回到这个问题。所以我们去德克萨斯州,重复整个过程。现在我有一批去科罗拉多州的货物。再一次,我从未去过科罗拉多州,但这是一批800美元的货物,我选择它。
上次我在德克萨斯州只得到450美元,所以我现在需要做的是:在德克萨斯州的旧价值是450美元,现在我有一批800美元的货物。我将把它们混合起来。
这在强化学习中被称为时序差分学习。我将设定α为0.1。那么新估计值 = (1 - α) * 旧估计值 + α * 新观察值。具体来说,就是 0.9 * 450 + 0.1 * 800 = 485。所以这将是我对在德克萨斯州价值的更新估计。强化学习社区可以用不同的策略做更多事情,他们可能有更好的想法。但这说明了只有一辆卡车时的基本步骤。
那么,如果我们有一个车队会怎样?
状态空间爆炸:组合问题
让我们想象我们有一个5x5的网格,也就是卡车的25种状态。如果我有一辆卡车,它可以处于25种状态中的任何一种。如果我有两辆卡车,现在我们有两辆卡车可能位置的所有排列组合。如果我有六辆卡车,组合数量开始变得非常大,因为这不仅仅是卡车可能的位置数量,而是系统的状态。
有一个公式可以告诉我系统有多少种状态:状态数 = C(卡车数 + 位置数 - 1, 位置数 - 1)。如果我有一辆卡车和一个位置(或者我们称之为属性,因为最终我们会称之为卡车的属性),如果我有100个位置或属性,我有100种状态。如果我有1000个,就是1000种状态。
但是,如果我有五辆卡车,看看它增长得多快。如果我只有10个位置或属性,我现在有2002种状态。但如果我有100个属性,我将达到91,962,520种状态。如果我有1000个位置,但如果有50辆卡车呢?
情况变得非常糟糕。猜猜看,我的车队可能有500辆、5000辆,甚至多达1万或2万辆卡车。这些车队规模确实很大。哦,关于属性的数量,我们马上会看到,卡车的位置并不是描述卡车的全部,可能还有许多其他我们称之为属性的特征,其数量级可能高达10^20。我们需要一套不同的工具来处理这个问题。
近似动态规划的基本方法
现在,我将阐述近似动态规划和强化学习的基本方法,但针对拥有大型车队、大量资源(不仅仅是单辆卡车问题)的场景。
假设我有一组司机(图中只能画出这么多)和一组货物,我将把司机分配给货物。这将随着时间推移而演变。随着时间向前推进,司机可能进入系统,同时也会有客户打电话来提出更多货物需求。因此,这些将随时间动态演变。我必须在时间T做出决策,决定使用哪些司机和哪些货物,同时考虑未来可能发生的情况。
让我们回到一个司机的情况。假设我有两批货物,我有一个贡献值(我能赚多少钱),然后我对每批货物有一个下游价值。这取决于我的司机的属性。目前,假设属性包括:当前时间、司机的位置、他的家庭驻地(因为他最终必须回家),以及他已经驾驶了多少小时(这被称为服务时间规则,因为政府规定了在睡觉前可以驾驶的最长时间)。
现在,我们可以将这些下游价值加到一步贡献值上,得到一个修正后的贡献值。所以这开始看起来像一个相当简单的单辆卡车问题。
扩展到车队:线性规划求解
现在,如果我有一整个车队的司机和货物。事实证明,这是一个线性规划问题。它可能看起来很难,但有现成的软件包可以解决。如果你在看这个并且说你从未上过线性规划课程,请放心。几十年前我可能会说,好吧,你需要去上一门线性规划课程。但今天,这些软件包非常易于使用,比如Gurobi和CPLEX,你可以使用Python模块将它们集成到你的Python代码中。还有用户手册,你可以在没有事先培训的情况下快速学会使用线性规划。
这些是强大的工具,可以处理拥有数百、数千名司机和货物的车队。所以突然间,我们扩展到了这些向量化的动作空间,这可能是我们在强化学习文献中未曾见过的。
假设我们解决了这个问题,三名司机被分配了三批货物。第四名司机被告知什么都不做。现在有一个下游价值。看看我要做什么,这是这里的关键技巧。我将减去其中一名司机。我会对每个司机都这样做,但我们将以第一个司机为例,将他从系统中移除。
所以,我将去掉司机A1,重新优化,得到一个新的解决方案。剩下的三名司机都被分配了货物。现在我要做的是,计算这两个解决方案之间的差异:即所有司机和货物的全局目标函数值之差。我称这个差值为 V_hat,这个 V_hat 就是该司机的边际价值。
实际上,我必须对每个司机都这样做。如果司机数量很少,这听起来不算太糟。但如果你有1000名司机呢?事实证明,这些软件包有一个巧妙的东西叫做对偶变量。它们免费提供这些 V_hat 值,只需解决一个线性规划问题,你就能得到这些 V_hat。这很酷,对于每一个司机,即使你有1000名司机,我也能得到1000个 V_hat。
价值函数平滑与更新
一旦你有了这些 V_hat,我们将进行与之前卡车回到德克萨斯州时相同的平滑操作。我们将有司机的属性,我们将有旧的估计值(称之为该属性集的 V_bar),我们将用新的边际价值 V_hat 对其进行平滑,得到一个更新的 V_bar。这就像我对德克萨斯州的司机所做的那样,但不再是司机在德克萨斯州的价值,而是边际价值。
所以步骤仍然非常简单:我计算边际价值,然后像处理价值一样,用它来解决我的修正后问题。我使用软件包,流行的有Gurobi和CPLEX。这些对学生和大学是免费的。如果你在公司使用,这些是商业系统,需要付费。还有其他免费软件可用。在解决这些问题时需要注意,如果你需要变量是0或1(这被称为整数规划),需要稍微小心一点。但可以说,有相当标准的软件包,至少在大学内部是免费供大学使用的。
算法步骤概述
假设我们已经解决了线性规划问题,这可以扩展到非常大的车队。现在我有了解决方案,然后我可以随时间不断重复这个过程,向前推进。
我可以用这三个步骤来概述这个过程:
- 从决策前状态开始:这是做出决策之前的状态,有些人称之为状态变量。
- 优化问题:这是你解决线性或整数规划的地方。变量X可以是一个向量。那些
V_hat是每个司机的边际价值。 - 平滑步骤:这是你进行平滑操作的地方。
- 时间推进模拟:这是我们将时间向前推进进行模拟的地方。那个W变量将代表所有新出现的货物,也可能代表一个刚打电话来说“嘿,我准备好工作了”的司机。司机可能离开,或者天气导致旅行时间延误。但这只是一个蒙特卡洛模拟,所以这些变量的维度无关紧要。
现在我们要做的是解决蓝色问题(优化问题),这是对我们求解器的一次调用。然后我们将向前推进时间进行模拟。但现在我必须多次重复这个过程,通过这些迭代,我学习这些下游价值函数。
如果一切顺利,你可能会得到像这样的图,结果大致上变得更好,但请注意有时会出现波动和平坦期。这在强化学习社区中是众所周知的。
处理高维属性:分层聚合
现在让我们回到一个我还没有完全触及的问题,即卡车不会自己驾驶,是卡车司机在驾驶卡车。
如果我们想要一个非常简单的资源,注意我们刚刚解决了一个可以处理数千辆卡车的问题。所以,如果我们有一辆在系统中移动的卡车,它只有,比如在我们的网络中有50个州,那么这辆卡车只有50个可能的值。
如果我把一个卡车司机放进卡车里呢?好吧,这变得复杂了,因为我们人类是非常复杂的事物。例如,这里是我可能用来描述卡车司机的10个维度。现在,不仅仅是看卡车的位置,我还必须查看这些卡车司机的所有属性。在实际系统中,我们可能有10个甚至多达15个属性,这个属性向量的可能值可能高达10^20。
事实证明,我们有方法可以处理这个问题。让我们想象一下,我们的卡车现在有了属性。随着卡车移动,这些属性会发生变化。顺便说一下,这几乎就像下棋。棋盘有更多的属性,它有64个,因为有64个方格。现在我们要做的是,当我们将司机分配给货物时,下游价值是我在那个属性空间上的求和,那是一个非常大的属性空间。事实证明,我不需要枚举它,我只需要查看我实际拥有的司机,查看我实际拥有的货物,并模拟那些实际会发生的属性。所以数字很大,但远没有10^20那么大。
让我们看看我们的司机,一个去宾夕法尼亚州的司机。我可能没有很多描述去宾夕法尼亚州的司机的数据,所以我对司机在宾夕法尼亚州的价值没有一个很好的估计。但也许我确实有一个对新英格兰地区司机价值的估计。所以我可以考虑在不同聚合层次上使用这些估计。
让我们看一个基本问题。我可以采用一个非常简单的属性空间,只关注位置。但如果我加上设备类型、到达目的地时间、维修状态、服务时间,我会从4000个属性增加到5000万个。我实际上要做的是同时处理所有这些。所以我将拥有这个分层的属性空间层次结构。
即使详细属性的数量可能非常非常大,现在这不会困扰我。我将手动创建(因为我是能理解哪些属性最重要的人类),为了近似价值函数,我将创建四个聚合层次。真实的卡车司机可能有10或20个维度,但为了说明,我创建四个聚合层次。
分层聚合的具体操作
现在我要做的是:每次我在非常详细的层次上获得一个新司机的边际价值时,我将把这个价值平滑到这四个聚合层次中的每一个的价值函数中。
现在我将有四个不同的司机价值估计。
现在我要做的是进行加权求和。这些权重将取决于聚合层次和司机的属性。权重的总和必须为1。我们将使权重与 1 / (估计值的方差 + 偏差的平方) 成比例。这个公式非常简单,只是几个简单的方程。我将在演讲结束时提供参考文献,但我正在撰写的一本书(可在普林斯顿大学网站下载)中,方程非常简单,只需搜索“分层聚合”即可。
分层聚合的优势
让我说明这种方法的威力。如果我以非常聚合的层次处理整个问题,我会得到非常快的收敛速度,工作非常迅速,但随后会停留在一个不太好的解决方案上。如果我在更细分的层次上工作,我最终会得到一个很好的解决方案,但速度非常慢,收敛非常慢。
如果我使用加权和,我既能获得非常快的初始收敛速度,又能达到非常高的解决方案质量。此外,这将适用于更大、更复杂的属性空间。这里有一个说明,我们使用了七个聚合层次,你可以看到在最初,最聚合层次的权重最高,最细分层次的权重非常非常小。随着算法变得更智能,它会逐渐演变,将更多权重放在更细分、更详细的表示上,而减少在更聚合层次上的权重。此外,这些权重对于国家的不同地区是不同的。在美国,东部人口密集,我们有大量数据。但在西部(除了加州),人口稀少,我们没有那么多数据,我们将保持对更聚合层次赋予更高的权重。随着我们在东部获得大量观察数据,我们将把更多权重放在细分层次上。
解决探索与利用困境
这样,我们也将解决之前“游牧卡车司机”中是否应该访问明尼苏达州的问题。强化学习社区会认识到这个问题:我是否应该去明尼苏达州?我的价值是零,但这只是因为我从未访问过。而我最终去了德克萨斯州,因为我去过那里。这是经典的探索与利用问题。之前我们解决它的方法是说我们将利用:我将去德克萨斯州,因为它看起来更好。现在有一些算法会说,是的,但也许我应该尝试明尼苏达州。
但现在,我们将通过使用分层聚合来修复这个问题。因为我要做的是:使用分层聚合,我将在从未访问过明尼苏达州的情况下获得对它的估计。因为在最聚合的层次上,我可能访问过德克萨斯州,而且说实话,访问德克萨斯州比完全不访问明尼苏达州能提供更好的估计。我可以做的是在分层聚合上工作。在我们的探索与利用权衡中,我们真正要做的是将其更多地视为一个学习问题。
想象一下,如果我只是非常贪婪,只基于细分估计来做决定,我可能永远不会去明尼苏达州。如果我运行这样的模拟,经过数百次迭代后,我最终只访问了七个城市。这就像那些总是去同一家餐厅、做同样事情的人,过了一段时间,你被随机地限制在一小部分城市,只是因为你去过那里,所以你一直回去。这显然不是一个好的解决方案。也许我从未访问过伟大的明尼苏达州,只是因为我没去过那里,但我访问过的地方总是足够多,以至于总有一些我去过的地方可以去。
但是,如果我们使用分层聚合,其中对某个地方价值的估计是不同聚合层次的加权和,如果我运行同样的模拟,突然间我愿意访问所有地方。我利用这种泛化能力修复了我的探索与利用问题,而不必为此设计非常具体的算法。
案例研究:施耐德国家公司
让我通过总结我们为施耐德国家公司做的一个小案例研究来结束。我必须告诉你,施耐德国家公司在20世纪70年代末就开创了分析学,早于我们任何人谈论这个领域。在我的职业生涯开始之前(我的职业生涯始于80年代初),他们来找我,询问如何处理不确定性。这就是我所有近似动态规划工作的起源。在那些日子里,施耐德有几百辆卡车,这对某些算法来说已经很多了。现在他们有近2万辆卡车。我向你展示的所有方法都可以扩展到2万辆卡车。事实上,我们已经用10万辆卡车的车队测试过这些方法。
这是施耐德国家公司的调度中心。我职业生涯中很大一部分时间曾认为我们可以取消这个中心。但我们没有,事实证明这些人做了很多好事。
这是我们基于ADP的车队模拟器的校准结果。他们会给我们不同类型司机的数据,并说,好吧,这里有两个统计数据,你必须在这个范围内。经过大量工作,我们能够让模型落在历史范围内,并得到一个非常仔细校准的模拟。
这是一个我们运行ADP算法并观察某些关键统计数据行为的案例。当我们使用近似动态规划时,统计数据进入了可接受的范围,而如果我不使用价值函数,我就得不到一个很好的解决方案。所以这表明我们实际上得到了一个更现实的解决方案,不仅仅是更好,而且更现实。
现在,我们将帮助施耐德解决从哪里招聘司机的问题。我们将使用这些价值函数来估计全国范围内司机的边际价值。这里是我们制作的一个图表,我们取一个区域,并在该区域增加越来越多的司机。可能并不奇怪,你增加的司机越多,结果越好,但随后开始趋于平缓,最终导致该区域司机过多。
但是进行这些模拟非常昂贵,因为对于每一个蓝点,我们都必须进行多次模拟。但事实证明,我可以直接从价值函数中得到边际斜率,而无需运行任何新的模拟。所以我至少可以从模型的一次运行中得到新司机的初始边际价值。这是针对将司机放在20个不同区域的20种不同类型模拟的结果。紫色条形图是来自价值函数的估计值,而误差线来自运行多次模拟并得到的统计估计。事实证明,两者相互吻合,这非常令人鼓舞。这些结果会反馈告诉我们,他们想在美国中西部招聘司机,而价值最低的司机都在沿海地区,他们认为这非常合理。他们转而问道,好吧,我们在哪里找到这些司机?但这是近似动态规划和强化学习扩展到高维问题的一个非常强大的应用。
总结
在本节课中,我们一起学习了如何将近似动态规划应用于复杂的车队管理问题。我们从单辆卡车的简单例子出发,理解了价值函数估计和时序差分学习的基本思想。随后,我们看到了将问题扩展到大型车队时面临的状态空间爆炸挑战,并引入了线性规划作为求解大规模分配问题的强大工具。我们详细介绍了通过计算边际价值并平滑更新价值函数的步骤。为了处理描述司机的高维属性空间,我们深入探讨了分层聚合这一关键技术,它不仅能有效处理大数据稀疏性问题,还能巧妙地缓解探索与利用的困境。最后,通过施耐德国家公司的实际案例,我们看到了这些方法在真实世界中的强大应用和显著效果。
037:动态编程方法总结 🧠

在本节课中,我们将回顾第四周学习的核心内容:动态编程。动态编程是解决马尔可夫决策过程(MDP)中策略评估与控制任务的基础方法,为后续更复杂的强化学习算法奠定了基石。
策略评估 📊
上一节我们介绍了动态编程的基本概念,本节中我们来看看策略评估的具体方法。
策略评估的任务是确定特定策略 π 下的状态价值函数 Vπ。

迭代策略评估将 Vπ 的贝尔曼方程转化为一个更新规则。它通过迭代计算,产生一系列对 Vπ 越来越精确的近似值。
以下是其核心更新公式:
V_{k+1}(s) = Σ_a π(a|s) Σ_{s‘, r} p(s‘, r | s, a) [ r + γ * V_k(s‘) ]
策略改进与控制 🎯

在理解了如何评估一个策略的价值后,我们接下来探讨如何改进策略,即控制任务。

控制指的是改进策略的任务。策略改进定理告诉我们如何从一个给定的策略构造出一个更好的策略。
新策略 π‘ 的构造方法很简单:基于当前的价值函数进行贪心选择。除非原策略 π 已经是最优的,否则 π‘ 保证严格优于 π。
策略迭代算法 🔄
基于策略改进定理,我们得到了用于控制的动态编程算法,称为策略迭代。
策略迭代由两个步骤循环构成:
- 策略评估:找到当前策略的价值函数。
- 策略改进:基于当前价值函数,通过贪心操作生成新策略。
这两个步骤不断重复,直到策略不再发生变化,此时该策略被保证是最优的。
广义策略迭代 ⚙️
我们还讨论了广义策略迭代的框架。在广义策略迭代中,评估和改进步骤不需要运行到完全收敛。
广义策略迭代的一个例子是价值迭代。此外,它还包括异步动态编程方法。
以下是同步与异步方法的对比:
- 同步方法:反复遍历整个状态空间进行更新。
- 异步方法:更新顺序更灵活,可以按任何顺序更新状态。它能更高效地传播价值信息,这在状态空间非常大时尤其有用。异步方法可以设计为专注于少数相关状态。
总结与展望 🌟
本节课中我们一起学习了动态编程的核心思想与应用。在动态编程中,我们假设已知MDP的完整模型(即环境动态),即便如此,高效计算最优策略仍需精巧的算法设计。
我们在本周课程中的思考与算法设计,将为后续本课程中将要学习的大多数算法带来持续的好处。
038:课程总结与展望 🎉
在本节课中,我们将对强化学习基础课程进行总结,回顾所学核心概念,并展望后续课程内容。
课程回顾
上一节我们介绍了动态规划算法,本节中我们来整体回顾本课程的知识体系。
我们首先从多臂老丨虎丨机问题入手,引入了选择动作以最大化奖励的核心思想。
在多臂老丨虎丨机中,我们面对一组固定的动作(或称“摇臂”)可供选择。每个动作会根据某个未知的分布产生一个奖励。我们的目标是始终选择平均奖励最高的那个摇臂。由于我们最初并不知道奖励分布,因此必须多次尝试每个摇臂以了解其平均奖励。
这引出了探索与利用的权衡。如果过于频繁地利用当前看起来最好的摇臂,可能会错过另一个因信息不足而暂时显得较差、但实际上更好的摇臂。反之,如果花费过多时间探索所有可能性,则可能牺牲了利用一个有充分理由相信其价值更高的摇臂的机会。

我们讨论了处理这种权衡的各种策略。
处理老丨虎丨机问题引出了许多有趣的问题,例如如何处理探索与利用的权衡。然而,老丨虎丨机问题并未涵盖所有情况。K臂老丨虎丨机问题在每个时间步向智能体呈现相同的情境。它只有一个最佳动作,无需将不同的动作与不同的情境关联起来。智能体动作选择的影响是即时的,奖励也没有延迟。
为了更好建模现实世界问题的复杂性,我们引入了马尔可夫决策过程。在MDP中,智能体选择的动作不仅影响即时奖励,还影响下一个状态。这进而影响了未来获得奖励的潜力。因此,动作可能具有长期后果。
我们引入了回报的概念,它是未来奖励的(可能经过折扣的)总和。MDP形式化框架可用于建模许多有趣的现实世界问题。我们在本专项课程中探讨的解决方法将适用于广泛的问题。

第一步始终是将你的问题构建为一个MDP。

在介绍MDP之后,我们开始描述强化学习的一些基本概念。
- 策略告诉智能体在每个状态下如何行动。
- 价值函数估计在特定策略下,每个状态或每个“状态-动作”对的预期未来回报。
- 贝尔曼方程将每个状态或“状态-动作”对的价值与其可能的后继状态的价值联系起来。
最后,我们介绍了动态规划算法。这些算法提供了解决预测和控制两大任务的方法,前提是我们能直接获取环境动态模型。
在强化学习问题中,我们通常不假设已知动态模型。毕竟在现实世界中,我们不能总是期望在尝试每个动作之前就知道其效果。动态规划算法为我们将在后续课程中介绍的强化学习算法奠定了重要基础。

总结与展望
恭喜你完成了所有内容的学习。你现在已经具备了理解强化学习设定所需的所有背景知识。
在下一门课程中,我们将讨论直接从经验中估计价值函数和策略的算法。这些基于样本的学习算法不需要、甚至不估计状态转移动态。期待在那里与你相见。
039:基于样本的学习方法

概述
在本节课中,我们将要学习基于样本的强化学习方法。这意味着我们的智能体可以仅通过试错交互和经验来学习,无需依赖对世界的精确模型。我们将从蒙特卡洛方法开始,逐步深入到时序差分学习等核心算法。
课程结构简介
上一节我们介绍了本专项课程的整体框架,本节中我们来看看第二门课程的具体内容安排。
本课程将遵循第一门课程的结构。我们首先学习用于预测的价值函数学习方法,然后学习用于控制的动作价值函数学习方法。最后,我们将讨论如何利用已学习的模型进行规划。
核心方法与算法
以下是本课程将要涵盖的核心方法:
- 蒙特卡洛方法:我们将从这里开始,学习如何从完整的经验片段中学习价值函数。
- 时序差分方法:随后,我们将讨论如何将TD方法用于预测和控制。这包括SARSA和Q-learning等关键算法。
- 探索的重要性:在基于试错交互的学习中,探索策略至关重要,我们将深入探讨这一主题。
- 离策略学习:学习如何从并非由当前策略生成的经验中进行学习,这是一项核心技能。
- Dyna架构:我们将以Dyna架构结束本课程,这是一个集规划、学习和行动于一体的综合框架。
算法基础与扩展
在探讨这些具体算法时,我们会发现许多基于样本的学习算法都植根于动态规划中的价值函数思想。例如,时序差分学习是强化学习中最基础的算法之一,其更新公式体现了这一思想:
V(St) ← V(St) + α [Rt+1 + γV(St+1) - V(St)]
我们将看到,像SARSA和Q-learning这样的TD控制方法,与广义策略迭代和贝尔曼算子有着深刻的联系。同时,当使用可能不准确的学习模型进行规划时,会产生新的问题,我们也将对此进行讨论。
课程设定与展望
本课程将在表格化设定下展开,即我们假设状态和动作空间是有限的,并可以学习一个价值表格。这为我们深入讨论算法原理和解决问题提供了清晰的基础。
课程2探索了贯穿强化学习的在线学习算法基础。目前我们继续在表格化设定下进行,假设一个有限的MDP,我们可以学习一个价值表格。在课程3中,我们将把在线算法扩展到函数近似设定。但即便在这个简化的设定中,也有许多议题需要讨论,许多问题需要解决。
总结
本节课中,我们一起学习了强化学习专项课程第二门课的概览。我们了解到,本课程将专注于基于样本的学习方法,使智能体能够不依赖模型,仅从经验中学习。我们将从蒙特卡洛方法入门,逐步掌握时序差分学习、探索与利用、离策略学习等关键概念,并最终了解集成了规划与学习的Dyna架构。让我们继续强化学习理论与实践的旅程。
040:认识你的导师 👨🏫👩🏫

在本节课中,我们将认识本专项课程的两位导师——Martha和Adam,了解他们的背景、如何进入强化学习领域,以及他们对这个领域的看法与展望。
导师介绍

Martha是阿尔伯塔大学的助理教授。Adam是阿尔伯塔大学的研究教授,同时也是Deep Mind的高级研究员。
Adam因其在强化学习的预测知识方面的工作而闻名。全球多个研究小组都在基于他的理念进行研究。他的工作被认为是近年来最重要的成果之一,影响力将持续扩大。Adam也是一位出色的实证研究者,擅长设计实验以触及核心问题,并持续致力于提升强化学习领域的科学认知。
Martha对强化学习的算法贡献众多。她开发了多种新的离策略学习算法、新的策略梯度方法,并在表征学习方面有数十项重要贡献。她是强化学习领域冉冉升起的新星之一。同时,她也是Adam最频繁的合作者以及人生伴侣。
如何进入计算机科学领域 🖥️
上一节我们认识了两位导师,本节中我们来看看他们是如何进入计算机科学领域的。
Adam成长于东海岸,高中时对物理、化学、生物等科学很感兴趣,但未找到最契合的方向。他偶然选修了一门关于计算机科学和编程的课程(使用GW-BASIC语言)。这成为了他职业生涯的转折点。他记得第一次实现if语句或for循环时,惊叹于能让计算机为自己执行一系列指令。从那时起,他就决定在大学攻读计算机科学。
那么,Adam为何开始研究强化学习呢?在研究生阶段,他来到阿尔伯塔大学,最初计划从事并行分布式计算(这是他在本科阶段关注的方向)。在选课时,他采用了一个非常合理的策略:浏览教授的照片,并选择了看起来最友善的一位。这位教授就是Rich Sutton,课程是“强化学习导论”。这门课程令人惊叹且充满启发,是Adam首次接触人工智能或机器学习。他记得早期的作业之一是实现SARSA算法来解决一个网格世界问题。看着智能体通过学习解决迷宫,仅凭“每步-1”的奖励信号就能找出极其高效的路径,这再次让他感到震撼并深深着迷,决定将此作为毕生事业。
以下是Adam提到的关键编程概念示例:
REM 示例:GW-BASIC中的循环
FOR I = 1 TO 10
PRINT I
NEXT I
如何进入人工智能研究领域 🤖
那么Martha是如何进入人工智能和机器学习研究领域的呢?她本科主修数学,一直认为函数和动力系统非常优美。后来她出于兴趣选修了一门计算机科学课程,并发现乐趣十足,因此同时继续修读数学和计算机科学。这两个学科的结合对于人工智能和机器学习研究非常有益。随后她在暑期进行了一些人工智能研究,并从此继续深入。她留在这个领域,是因为随着时间的推移,这不仅仅是关于数学函数,更是一个可以大量协作、帮助他人的社区。她的日常工作包括指导很多人,并与团队一起攻克难题,在团队中研究如此有趣的问题是非常奇妙的体验。
给研究生的建议 🎓
可能有些学习本课程的人希望攻读强化学习的研究生学位。在研究生阶段学到的最重要的一点是什么?Adam的建议可能令人意外,但这个经验适用于所有科学领域乃至任何形式的研究:真正热爱深入理解事物的细节,专注于小问题并将其理解得非常透彻。他认为这一原则适用范围很广,并传授给他的学生,也希望与本专项课程的学习者分享。
工作的意义与乐趣 💼
Adam热爱研究工作,但有时长时间工作会让人疲惫,同行评审过程也可能令人沮丧。当你退一步审视自己的研究时,可能会觉得它渺小且微不足道,难以看清它将如何影响世界、让世界变得更美好。在这种时候,你可以回归教学和指导。教学是帮助人们首次了解事物、理解领域运作方式的过程,这令人兴奋。你也是他们职业生涯起点的一部分,无论他们最终进入学术界、工业界还是创办自己的公司。参与这个过程是一种奇妙的体验。他一周中最美好的日子总是排满与学生会议的时候,可以帮助他们解决问题,更好地理解强化学习。
为何强化学习如此重要 ❓
为什么研究强化学习如此重要?Adam认为强化学习的潜力巨大,但仍存在许多开放挑战。机器学习已开始更广泛地应用,但强化学习目前仅用于少数领域。同时,他认为强化学习能产生巨大影响。在未来十年左右,我们将看到更多控制工程师在实际系统中使用强化学习。它将成为一个工具,帮助在更大的工程系统中进行自动化决策。但要让这成为现实,需要在强化学习方面取得一些进展,更多地思考如何开发稳健的算法,以及如何让人们安心使用这些算法。因此,他认为在工业界应用的同时,也需要思考如何改进强化学习算法,让这两者协同发展。
Martha则认为,强化学习是研究人工智能、推动解决人工智能问题的正确框架。强化学习对她很重要,因为她对发展性学习系统非常感兴趣。例如人类婴儿在地上玩耍,或幼年动物认识世界。她想了解这些系统如何运作。这些系统在极短时间内学习海量知识:学习爬行、了解身体如何工作、学习与环境互动、操纵物体、与世界中的其他智能体交流。它们是非常高效的学习系统,在几周到几个月内就能完成这些学习,这令人震惊。感觉我们需要做大量工作才能接近这类系统。她希望理解这些系统可能使用的算法和表征,并认为强化学习是审视和理解这些事物的正确视角。
强化学习的未来展望 🚀
应用总是推动着领域的兴趣和兴奋点。强化学习在游戏和一些工业控制问题上已有一些应用。那么,下一个重大进展会是什么?Adam认为,强化学习的核心是一种通用的自动化决策方法,是一个将在许多工程系统中帮助我们的工具。因此,他认为强化学习将在工业控制领域真正起飞。在工业控制领域,专家们正在寻找提高系统运行效率、实现最优化的方法。强化学习将用于降低能源成本或节省工业控制系统中的其他类型成本。在专家手中,这些算法在不久的将来能很好地发挥作用。因此,他真正将强化学习视为一个辅助专家工作的工具,而不是取代人或使其自动化。

总结

本节课中,我们一起认识了本课程的两位导师Martha和Adam。我们了解了他们的学术背景、进入计算机科学和强化学习领域的个人经历,以及他们对研究生学习的建议。我们还探讨了他们热爱工作的原因、研究强化学习的重要性,并对该领域的未来应用与发展方向进行了展望。希望他们的分享能为你学习强化学习带来启发。
041:什么是蒙特卡洛方法 🎲
在本节课中,我们将要学习蒙特卡洛方法。这是一种不依赖于环境模型、直接从经验中学习价值函数的核心技术。我们将了解其基本原理、适用场景以及一个基础算法。
概述
术语“蒙特卡洛”通常泛指任何依赖重复随机采样的估计方法。
在强化学习中,蒙特卡洛方法允许我们直接从经验中估计价值。它从状态、动作和奖励的序列中学习,其显著特点是智能体无需事先了解环境的动态模型,就能准确估计价值函数。
通过本视频的学习,你将能够理解如何使用蒙特卡洛方法从采样的交互中估计价值函数,并识别哪些问题适合用蒙特卡洛方法解决。
从动态规划到蒙特卡洛
上一节我们讨论了强化学习与动态规划的联系。要使用纯粹的动态规划方法,智能体需要知道环境的转移概率。
然而,在某些问题中,我们根本不知道这些概率。想象一下气象学家试图预测天气,天气的变化取决于多种环境因素,我们无法确切知道未来天气模式的精确概率。即使对于合理的任务,计算动态规划所需的转移概率也很困难。
考虑预测掷12次骰子的结果,动态规划计算的数量和复杂性使其变得繁琐且容易出错,无论是在编码还是数值精度方面。
蒙特卡洛方法的引入
这正是蒙特卡洛方法可以发挥作用的地方。让我们尝试找出掷12次骰子的平均点数之和。

蒙特卡洛方法不会像动态规划那样穷举所有可能的结果。事实上,你甚至不需要知道任何结果的概率就能使用蒙特卡洛方法。
相反,蒙特卡洛方法通过对大量随机样本进行平均来估计价值。让我们掷几次12个骰子并查看结果。在这个例子中,平均值是41.57,相当接近真实平均值42。
在强化学习中,我们希望学习一个价值函数。价值函数代表期望回报,因此,学习价值函数的蒙特卡洛方法会首先观察从同一状态出发的多个回报,然后平均这些观察到的回报,以估计从该状态出发的期望回报。
随着样本数量的增加,平均值会越来越接近期望回报。智能体从一个状态观察到的回报越多,样本平均值就越可能接近该状态的真实价值。这些回报只能在情节结束时被观察到,因此我们将专注于用于情节性任务的蒙特卡洛方法。
与赌博机方法的类比
蒙特卡洛方法和强化学习看起来有点像赌博机方法。在赌博机问题中,一个摇臂的价值是通过拉动该摇臂所获得的平均收益来估计的。蒙特卡洛方法则考虑策略而非摇臂。

在给定策略下,状态S的价值是通过遵循该策略从S到终止所采样的平均回报来估计的。
蒙特卡洛算法
现在,让我们来看一个用于估计策略状态价值函数的算法。蒙特卡洛算法必须跟踪多个观察到的回报。

我们引入一个回报列表,每个状态对应一个列表。每个列表保存从状态S观察到的回报。然后,我们通过遵循策略生成一个情节。
对于情节中的每个时间步,我们计算回报并将其添加到该状态的回报列表中。但如何高效地做到这一点呢?
假设折扣因子γ为0.5,想象一个在第5个时间步结束的情节,其奖励序列是3,4,7,1和2。让我们找出每个回报G0到G5,首先写下每个回报的方程。
请注意,每个回报都包含在前一个时间步回报的方程中。这意味着我们可以通过从G5开始反向计算来避免重复计算。
让我们现在开始计算。情节在t=5时结束,因此根据定义,G5等于0。G4等于时间步5的奖励加上γ乘以时间步5的回报,即 2 + 0.5 * 0 = 2。G3等于时间步4的奖励加上γ乘以时间步4的回报。时间步4的奖励是1,我们刚刚计算出时间步4的回报是2。解方程,我们可以看到时间步3的回报也是2。继续计算,我们可以找到时间步2的回报是7 + 0.5 * 2 = 8。最后,前两个回报G1和G0分别是8和7。
通过从终止时间步反向计算,我们可以高效地计算情节中遇到的每个状态的回报。

算法步骤
以下是算法的具体步骤:
首先,最后一个状态的回报就是最后一个奖励,所以我们把最后一个奖励添加到状态S_{T-1}的回报列表中。然后,我们将S_{T-1}的价值设置为S_{T-1}所有回报的平均值。
在前一个时间步t-2,我们像之前一样计算回报,然后将其添加到状态S_{t-2}的回报列表中。最后,我们更新S_{t-2}的价值。
如果我们继续这个循环直到情节开始,我们就更新了当前情节中访问的所有状态的价值。然后,我们可以重复整个过程许多个情节,最终学习到价值函数的一个良好估计。
增量式更新
你可能会想,我们是否可以避免将所有样本回报保存在列表中。事实上,我们可以。我们可以使用以下公式增量式地更新样本平均估计。
回想一下,我们在估计赌博机问题的动作价值时讨论过使用这种增量更新。在本模块中,我们使用概念上更简单的样本平均来专注于蒙特卡洛的核心思想。在本模块之后,我们将切换到使用增量更新。

总结
本节课中我们一起学习了蒙特卡洛方法。我们讨论了蒙特卡洛方法如何直接从交互中学习,特别是它们不需要环境的动态模型。我们还展示了一个用于在情节性问题中学习状态价值的蒙特卡洛算法。
042:使用蒙特卡洛方法进行预测 🎲
在本节课中,我们将学习如何使用蒙特卡洛方法进行预测,即估计给定策略下的状态价值函数。蒙特卡洛方法的核心思想是通过从大量经验(或“情节”)中采样来估计价值,就像通过询问一千个人的经历来做出决定一样。
蒙特卡洛预测算法详解
上一节我们介绍了蒙特卡洛方法的基本思想,本节中我们来看看其具体的算法细节。我们将通过一个经典的例子——二十一点纸牌游戏——来演示。
二十一点使用一副标准的52张扑克牌。游戏目标是使手中牌的点数之和尽可能大,但不能超过21。人头牌(J、Q、K)计为10点,A可以计为11点或1点,由玩家决定。游戏开始时,庄家和玩家各发两张牌。玩家可以看到庄家的一张明牌,另一张是暗牌。
如果玩家初始两张牌点数之和即为21(“黑杰克”),则玩家获胜,除非庄家也是21,则为平局。如果玩家初始没有21,则可以选择“要牌”(增加一张牌)或“停牌”。如果玩家牌点总和超过21,则“爆牌”并输掉游戏。否则,当玩家选择“停牌”后,轮到庄家行动。庄家在其牌点总和小于17时必须“要牌”。如果庄家“爆牌”,则玩家获胜。否则,点数更接近21的一方获胜。
我们可以将此问题建模为一个无折扣的马尔可夫决策过程,每一局二十一点游戏对应一个情节。奖励在游戏结束时给出:输为-1,平为0,赢为+1。玩家有两个动作:“要牌”或“停牌”。玩家的决策基于三个变量:是否拥有“可用A”(即一个可以计为11点而不使总和超过21的A)、玩家手牌点数和、以及庄家显示的明牌。总共有200个可能的状态。

我们假设牌是从牌堆中“有放回”地抽取,这意味着无需记录已发出的牌,且状态满足马尔可夫性质。
应用蒙特卡洛预测
现在,让我们使用蒙特卡洛方法来学习一个特定策略的价值函数。该策略是:当玩家手牌点数和为20或21时“停牌”,否则“要牌”。
假设在第一个情节中,玩家初始手牌点数和为13,没有可用A,庄家明牌为10。根据固定策略,玩家选择“要牌”,得到一张7,点数和变为20。由于点数和为20,玩家选择“停牌”。现在轮到庄家,庄家抽到一张9,点数和超过21“爆牌”,玩家赢得游戏,获得+1的奖励。
第一个情节结束后,智能体可以进行蒙特卡洛更新并开始学习。由于折扣因子为1,且唯一的非零奖励是情节结束时的+1,因此该情节中每个状态的回报都是+1。
以下是蒙特卡洛更新的具体步骤,我们从情节末尾开始向前回溯处理每个状态:
- 在最后一个非终止状态(状态A),玩家点数和为20,无可用A,庄家明牌为10。我们将+1加入状态A的回报列表中,并将状态A的价值更新为该列表的平均值。
- 回溯到倒数第二个状态(状态B),玩家点数和为13,无可用A,庄家明牌为10。同样,将+1加入状态B的回报列表中,并更新状态B的价值为列表平均值。
至此,我们处理完了第一个情节中的所有状态,完成了该情节的蒙特卡洛更新。
多次游戏后的价值函数
如果智能体玩很多局二十一点游戏,价值函数会如何变化?
让我们观察智能体在10,000个情节后学到的价值函数。我们将分别绘制拥有可用A的状态和没有可用A的状态的价值函数图。图的三个轴分别是:庄家显示的明牌、玩家手牌点数和、以及该状态的价值。

没有可用A的图比有可用A的图平滑得多。这是因为大多数二十一点游戏中玩家没有可用A,因此有可用A的状态价值是用少得多的样本估计的。两幅图的形状大致相似。
观察图表,庄家显示的明牌对价值函数的影响似乎不大。然而,观察玩家手牌点数和,当点数和为20或21时,状态价值要高得多。
为什么这些价值比点数和为19时高这么多?答案与智能体遵循的策略有关。该策略在点数和为19或更低时总是“要牌”,因此当点数和为19时,智能体很可能“爆牌”。另一方面,当点数和为20或21时,智能体会“停牌”,并很可能获胜。
现在,让我们看看500,000个情节后的价值估计。此时估计值已几乎收敛到真实的状态价值。注意现在的图表平滑得多。我们看到了相同的模式:除非点数和为20或21,否则价值较低。
蒙特卡洛学习的特点与意义
最后,我们来探讨一下蒙特卡洛学习的一些含义和特点。
首先,蒙特卡洛直接从经验中学习,因此不需要维护庞大的环境模型。其更新公式基于回报的平均值:
V(s) ← average(Returns(s))
其次,蒙特卡洛方法可以独立地估计单个状态的价值,而不依赖于其他状态的价值。在动态规划中,每个状态的价值都依赖于其他状态的价值,这是一个很大的区别。
最后,更新每个状态价值所需的计算量完全不依赖于MDP的大小,而是取决于情节的长度。

总结
本节课中,我们一起学习了如何使用蒙特卡洛预测来学习一个策略的价值函数。我们通过二十一点游戏的例子,详细讲解了算法的步骤,并观察了随着经验积累价值函数的收敛过程。我们还讨论了蒙特卡洛方法直接从经验学习、状态价值估计独立以及计算复杂度依赖于情节长度而非状态空间大小等重要特点。
043:使用蒙特卡洛方法计算动作值 🎲
在本节课中,我们将要学习如何使用蒙特卡洛方法来估计动作价值函数。我们将了解其基本过程,并探讨在算法中保持探索性的重要性。
上一节我们介绍了如何使用蒙特卡洛方法学习固定策略下的状态价值函数。本节中我们来看看如何学习动作价值函数。学完本视频后,你将能够使用蒙特卡洛方法估计动作价值函数,并理解在蒙特卡洛算法中保持探索的重要性。
学习动作价值的基本过程
学习动作价值的过程与学习状态价值几乎完全相同。回想一下,我们通过平均从某个状态出发的样本回报来学习该状态的价值。方便的是,同样的过程也适用于动作价值。我们收集遵循策略、从某个“状态-动作对”出发的回报,然后取它们的平均值。
为何需要学习动作价值?
那么,我们为什么需要学习动作价值呢?动作价值对于学习策略非常有用。它们允许我们在同一状态下比较不同的动作。如果存在更好的动作,我们就可以切换到它。然而,这只有在我们能估计其他动作的价值时才可能实现,但这可能有些棘手。
探索的必要性
让我们考虑为一个确定性策略学习动作价值函数。想象一个永远不会被该策略选中的动作。智能体将永远观察不到与该动作对应的回报,因此我们将无法形成准确的蒙特卡洛估计。智能体必须在每个状态中尝试所有动作,才能学习它们的价值。这就是强化学习中“保持探索”的问题。
让我们思考一个现实世界的例子。想象你沿着通常走的路回家。最近,附近修了一条新路。如果我们从不尝试新路,就无法知道它是否真的更好。


保持探索的方法
保持探索的一种方法叫做“探索性起点”。在探索性起点中,我们必须保证每个“状态-动作对”都能作为情节的起点。之后,智能体只需遵循其策略即可。考虑屏幕上显示的网格世界。
让我们看看探索性起点如何与图中用红色箭头表示的策略一起工作。探索性起点会在一个情节开始时随机采样一个状态和动作,如图中蓝色箭头所示。在这种情况下,蓝色动作与红色策略建议的动作不同。在初始动作之后,智能体将遵循红色策略直到情节结束。
我们必须能够以这种方式设置起始状态,才能评估像这个网格世界中这样的确定性策略。但这并非总是可行的。其他探索策略,如 ε-贪心 策略,可用于评估随机策略。

我们将在后面详细讨论这一点。

总结
本节课中我们一起学习了蒙特卡洛算法用于估计动作价值函数的基本步骤,并深入讨论了在强化学习过程中保持充分探索的重要性。理解如何准确评估不同动作的价值,是后续改进策略、实现更优决策的关键基础。
强化学习专项课程:第44讲:使用蒙特卡洛方法进行广义策略迭代 🎯
在本节课中,我们将学习如何将蒙特卡洛方法融入广义策略迭代框架,以构建一个完整的强化学习算法。我们将从回顾广义策略迭代的基本概念开始,然后详细讲解一个名为“带探索性起点的蒙特卡洛”的具体算法。
概述
我们已经掌握了使用蒙特卡洛方法估计动作价值。下一步是构建一个广义策略迭代算法。本节课将介绍如何实现这一目标。课程结束时,你将理解如何利用蒙特卡洛方法实现一个GPI算法。
广义策略迭代回顾
广义策略迭代包含策略评估和策略改进两个步骤。GPI算法能够生成一系列策略,并且后续的策略至少不会比之前的策略差。
- 对于策略改进步骤,我们可以使策略相对于智能体当前的动作价值估计变得贪婪。
- 对于策略评估步骤,我们将使用蒙特卡洛方法来估计动作价值。
需要记住的是,在GPI框架中,价值估计只需要得到一定程度的改进,而无需一步到位达到完全正确的动作价值。算法收敛的唯一要求是估计值能够持续改进。

蒙特卡洛控制方法将策略改进和策略评估结合在逐个片段的基础上进行。
算法构建:带探索性起点的蒙特卡洛
现在,让我们将这两个步骤整合到一个算法中。
上一节我们回顾了GPI的核心步骤,本节中我们来看看如何用蒙特卡洛方法具体实现它。
我们从用于学习动作价值的蒙特卡洛方法开始。算法使用探索性起点,这意味着每个片段都从一个随机选择的状态和动作开始。然后,智能体遵循其当前策略生成一个完整的片段,并沿途记录状态、动作和奖励。一旦片段完成,算法从片段的末尾开始计算每个状态-动作对的回报。接着,它将回报添加到相应的列表中。最后,通过对列表中的回报取平均值来更新每个状态-动作对的动作价值估计。至此,策略评估步骤完成。
在策略评估之后,便进行策略改进。我们只需将策略更新为相对于我们更新后的动作价值估计的贪婪动作。我们在片段中观察到的每个状态都执行此操作。
以下是该算法的核心步骤总结:
- 初始化:对所有状态
s和动作a,初始化Q(s, a)(动作价值函数)和π(s)(策略),并创建一个空的回报列表Returns(s, a)。 - 循环(对每个片段):
- 生成片段:使用探索性起点,遵循当前策略
π生成一个状态、动作、奖励序列:S0, A0, R1, S1, A1, R2, ..., ST-1, AT-1, RT。 - 计算回报:初始化
G = 0,从最后一个时间步向前遍历片段:G = γ * G + R_{t+1}(其中γ是折扣因子)- 将
G添加到Returns(S_t, A_t)列表中。 - 更新动作价值估计:
Q(S_t, A_t) = average(Returns(S_t, A_t))。
- 策略改进:对片段中访问过的每个状态
S_t,更新策略:π(S_t) = argmax_a Q(S_t, a)。
- 生成片段:使用探索性起点,遵循当前策略
这个过程比我们在动态规划中执行此步骤的方式要简单得多。至此,我们就完成了广义策略迭代算法——带探索性起点的蒙特卡洛。


总结
本节课中,我们一起学习了如何在GPI框架内使用蒙特卡洛方法,并讨论了一个名为“带探索性起点的蒙特卡洛”的GPI算法示例。该算法通过交替进行基于经验片段的策略评估和贪婪策略改进,逐步优化策略,是解决无模型强化学习问题的基础方法之一。
强化学习专项课程:P45:解决二十一点示例 🃏

在本节课中,我们将学习如何将带有探索性起点的蒙特卡洛控制方法应用于一个具体示例。我们将训练一个智能体玩二十一点游戏,并观察算法如何通过经验学习最优策略。
上一节我们介绍了广义策略迭代的蒙特卡洛控制方法。本节中,我们来看看如何将其应用于解决二十一点游戏这个马尔可夫决策过程示例。
我们的目标是使用带有探索性起点的蒙特卡洛方法来学习策略。探索性起点要求每个回合从一个随机的状态和动作开始。在我们的二十一点游戏中,初始发牌自然提供了随机状态。因此,我们只需在每个回合的第一步随机选择动作。这意味着,智能体在第一个状态会忽略其认为的最佳动作,而是随机选择“要牌”或“停牌”。
我们设定初始策略为:当智能体手牌点数总和小于20时选择“要牌”,当总和为20或21时选择“停牌”。
让我们逐步模拟一局游戏,看看算法会如何运作。
假设智能体的手牌点数为13(没有可用的A牌),庄家明牌是8。根据随机采样的第一个动作,智能体选择“要牌”。
智能体得到一张7,点数总和变为20。在下一步,智能体根据其策略选择动作,因此选择“停牌”。现在轮到庄家。
庄家抽到一张9,点数超过21,输掉游戏,智能体获得+1的奖励。
很好。现在让我们回顾游戏过程中遇到的状态-动作对,从回合的末尾开始向前回溯。
在最后一个非终止状态,智能体点数为20,没有可用A牌,庄家明牌为8。从这个状态,智能体选择了“停牌”。智能体将+1添加到该状态-动作对对应的回报列表中。该状态下“停牌”动作的估计值就是1。
让我们看看此状态下两个动作的价值。智能体从未尝试过“要牌”动作,所以其价值为0。“停牌”动作的价值是1(我们刚刚计算得出)。因此,相对于动作价值函数Q,此状态下的贪婪动作是“停牌”,因为它具有最高的估计价值。
让我们再向前回溯一步,回到起始状态。智能体点数为13,没有可用A牌,庄家明牌为8。随机选择的动作是“要牌”。同样,智能体将+1添加到该状态-动作对对应的回报列表中。列表的平均值构成了该动作价值的估计。
最后,在此状态下更新策略,使其相对于动作价值估计是贪婪的。在此状态下,我们从未尝试过“停牌”动作,其价值为0。但“要牌”动作带来了+1的回报,所以贪婪动作是“要牌”,策略也相应更新以反映这一点。
我们将这个过程重复许多回合。动作价值和策略将逐渐逼近其最优值。
以下是智能体经过长时间训练后找到的最优策略。
请注意当智能体持有可用A牌时的玩法。对于庄家的大多数明牌,智能体会持续“要牌”直到点数接近19。由于有可用A牌,智能体在计算手牌点数总和时有更大的灵活性,因此策略更具攻击性。
在没有可用A牌的情况下,策略更依赖于庄家展示的牌。当智能体点数总和为13或更高,且庄家明牌点数较低(如2或3)时,智能体会选择“停牌”。这是最优的,尽管在这种情况下获胜的机会看起来可能较低。

本节课中,我们一起学习了如何将带有探索性起点的蒙特卡洛方法应用于一个示例MDP,即二十一点游戏。我们看到了算法如何通过从随机起点开始探索、收集回报并更新策略来逐步逼近最优玩法。
强化学习专项课程:P46:ε-软策略


在本节课中,我们将学习探索性起始假设的局限性,并了解如何将ε-贪心探索与蒙特卡洛控制结合,以学习近似最优的策略。课程结束时,你将理解为何探索性起始在实际问题中可能不适用,并能描述一种替代的探索方法。
探索性起始的局限性
上一节我们介绍了基于探索性起始的蒙特卡洛控制。本节中我们来看看这种方法的潜在问题。
探索性起始要求算法必须能够从每一个可能的状态-动作对开始。否则,智能体可能探索不足,从而收敛到一个次优解。在许多实际问题中,随机采样初始状态-动作对可能非常困难或不切实际。
例如,对于一辆自动驾驶汽车,如何随机采样其初始状态和动作?要确保智能体能在所有可能的状态下开始,就需要将汽车置于繁忙高速公路的各种不同配置中,这既危险又不现实。
ε-软策略:一种替代探索方案
既然探索性起始不总是可行,我们该如何在没有它的情况下学习所有动作的价值呢?答案是使用ε-贪心探索。我们在多臂老丨虎丨机讲座中讨论过这个简单有效的方法,它同样可以与蒙特卡洛方法结合。
快速回顾一下,ε-贪心策略是一种随机策略。它通常采取贪心动作(即当前估计价值最高的动作),但偶尔会以概率 ε 随机选择一个动作。
ε-贪心策略属于一个更大的策略类别,称为 ε-软策略。ε-软策略确保在每个状态下,每个动作被选择的概率至少为 ε / |A(s)|,其中 |A(s)| 是该状态下可选动作的数量。

以下是ε-软策略的两个关键特性:
- 持续探索:由于每个动作都有非零概率被选中,智能体会持续探索所有状态-动作对。
- 随机性:ε-软策略总是随机的。与之相对,确定性策略在每个状态下只指定一个要执行的动作。
ε-软策略 vs. 确定性策略
让我们通过一个网格世界的例子来直观理解两者的区别。
假设有一个确定性策略,由箭头表示。从起始状态开始,智能体每次都会遵循完全相同的轨迹穿过网格世界。
而一个ε-贪心策略(一种ε-软策略)会有更多箭头,因为每个动作都有较小的概率被选中。因此,智能体在每一幕中可能遵循的轨迹都会略有不同。经过足够多的幕之后,它将在每个状态中至少尝试过每个动作一次。

最优ε-软策略
这种探索方式的差异也影响了我们能找到的解的性质。
如果我们的策略始终为每个动作分配至少 ε 的概率,那么它就不可能收敛到一个确定性的最优策略。探索性起始可以用来找到最优策略,但ε-软策略只能用来找到最优ε-软策略。

最优ε-软策略是所有ε-软策略中在每个状态具有最高价值的那个。虽然它通常比真正的最优策略表现稍差,但其性能往往足够好,并且允许我们摆脱对探索性起始的依赖。
基于ε-软策略的蒙特卡洛控制算法
理解了概念后,我们来看看基于ε-软策略的蒙特卡洛控制伪代码。通过对比它与探索性起始版本的不同,可以很容易理解这个算法。
主要区别有三处:
- 初始化:初始策略 π 必须是ε-软策略(例如均匀随机策略)。
- 策略评估(数据生成):由于策略本身就是ε-软的,我们不再需要探索性起始来保证探索。智能体只需遵循其当前的ε-软策略生成一幕数据。
- 策略改进:基于当前的动作价值估计 Q(s, a),将策略改进为与之对应的ε-贪心策略。
你可能会想,改进后的策略也应该是ε-软策略,而不仅仅是ε-贪心。然而,这是合理的,因为最优ε-软策略就是一个ε-贪心策略。即使这个算法找不到全局最优策略,它也能找到最优ε-软策略。

总结
本节课中,我们一起学习了探索性起始在实际应用中的局限性,并深入探讨了如何利用ε-软策略进行蒙特卡洛控制。我们了解到,ε-软策略通过保证持续的随机探索,使我们能够在无需不切实际的探索性起始条件下,学习到一个性能良好的近似最优策略——即最优ε-软策略。在未来的课程中,我们将讨论另一种名为Q学习的方法,它能够学习到真正的全局最优策略。
047:为什么离策略学习很重要 🎯


在本节课中,我们将探讨强化学习中的一个核心概念:离策略学习。我们将了解它如何帮助智能体解决探索与利用的权衡问题,并区分目标策略和行为策略这两个关键角色。
概述
我们已经讨论过探索与利用的权衡问题。其关键在于,智能体必须偶尔采取次优的探索性行动,这可能会获得较少的奖励。但或许我们根本不需要进行这种权衡。在本视频中,我们将讨论一种学习价值函数的新方法,称为离策略学习。
通过本课的学习,你将能够理解离策略学习如何帮助处理探索问题,并能举例说明目标策略和行为策略。
探索策略的局限性
上一节我们介绍了探索的必要性。本节中,我们来看看常用探索策略的不足。
ε-贪心策略通过在每一步都有一个小概率进行探索,有助于解决持续探索的问题。然而,ε-贪心策略的缺点是,它在行动和学习两方面都是次优的。ε-贪心策略既不是获取奖励的最优策略,也不是寻找最佳行动的探索最优策略。
从同策略到离策略
到目前为止,在整个课程中,我们一直在隐式地讨论同策略学习,尽管我们还没有正式强调这个名称。在同策略学习中,智能体学习的是用于生成数据的策略本身。
“学习一个策略”意味着什么?在策略评估中,它仅指学习价值函数;在控制中,它指学习最优策略。
在离策略学习中,智能体从遵循不同策略所生成的数据中学习一个策略。也就是说,我们正在学习的策略(目标策略)与我们用于选择行动的策略(行为策略)是分离的。例如,你可以在遵循完全随机策略的同时,学习最优策略。
目标策略与行为策略
我们称智能体正在学习的策略为目标策略,因为它是智能体学习的目标。目标策略通常用 π 表示。智能体正在学习的价值函数是基于目标策略的。目标策略的一个例子就是最优策略。

我们称智能体用于选择行动的策略为行为策略,因为它定义了智能体的行为。行为策略通常用 b 表示。行为策略负责为智能体选择行动。下图所示的行为策略是均匀随机策略。

为何分离策略?
那么,我们为什么要将行为与目标策略分离开呢?因为它提供了另一种持续探索的策略。
如果我们的智能体按照目标策略行动,它可能只会经历少数状态;如果我们的智能体能够按照一个倾向于探索的策略行动,它就能经历更多状态。离策略学习实际上还有其他一些有用的应用,例如从演示中学习和并行学习,但促进探索是其主要动机之一。
覆盖条件
离策略学习的一个关键规则是:行为策略必须覆盖目标策略。换句话说,如果目标策略表示在给定状态 s 下选择动作 a 的概率大于0,那么行为策略也必须表示在该状态下选择该动作的概率大于0。
这背后有重要的数学原因,我们将在后续视频中讨论。但这里也有一个直观的原因。考虑这样一个状态:行为策略总是向上走,但目标策略是向右走。智能体无法学习该状态下正确的动作价值,因为它从未观察到如果向右走会发生什么。也许它能获得+100万的奖励,但它永远不会知道。
值得注意的是,离策略学习是同策略学习的严格泛化。同策略是目标策略等于行为策略的特例。
总结
本节课中,我们一起学习了离策略学习。关键要点是:离策略学习是获得持续探索的另一种方式。我们正在学习的策略称为目标策略,而我们从中选择行动的策略称为行为策略。理解这两者的区别是掌握高级强化学习算法的基础。
强化学习专项课程:P48:重要性采样 🎯

在本节课中,我们将要学习重要性采样。正如我们将在后续视频中看到的,重要性采样使我们能够进行离策略学习,即在遵循一个策略的同时学习另一个策略。在本视频中,我们将首先描述重要性采样的工作原理。通过本视频的学习,你将能够使用重要性采样,利用来自不同分布的样本来估计目标分布的期望值。
问题定义
让我们从明确重要性采样所要解决的问题开始。
我们有一个随机变量 X,它从一个概率分布 B 中被采样。我们想要估计 X 的期望值,但这是相对于目标分布 π 的期望。
因为 X 是从 B 中抽取的,我们不能简单地使用样本平均值来计算在 π 下的期望。样本平均值给出的是在 B 下的期望值。
数学推导
我们从期望值的定义开始。对于所有可能的结果 x,其期望值公式为:
E_π[X] = Σ_x x * π(x)
接下来,我们可以在公式中乘以 b(x) / b(x),因为这一项等于 1。其中,b(x) 是在分布 B 下观察到结果 x 的概率。
重新排列分子,我们最终会得到一个 π 和 B 之间的比率:
E_π[X] = Σ_x [x * (π(x) / b(x))] * b(x)
这个比率对我们来说非常重要,被称为重要性采样比率。我们通常将重要性采样比率记为 ρ(x)。
现在,让我们更进一步。如果我们把 x 乘以重要性采样比率看作一个新的随机变量,再乘以观察到 x 的概率 b(x),那么我们可以将这个求和重写为在分布 B 下的期望:
E_π[X] = E_B [ X * (π(X) / b(X)) ] = E_B [ X * ρ(X) ]
注意,我们的期望现在是在 B 下,而不是在 π 下。

从数据中估计期望
我们已经知道如何使用重要性采样来修正期望,但如何利用数据来估计这个期望呢?这实际上非常简单。

我们只需要计算一个加权样本平均值,以重要性采样比率作为权重,如下面的公式所示:
估计值 = (1/N) * Σ_{i=1}^{N} [ x_i * (π(x_i) / b(x_i)) ]
请注意,这些样本 x_i 是从分布 B 中抽取的,而不是从 π 中抽取的。这样,我们现在就可以使用从分布 B 中抽取的样本平均值来估计在分布 π 下 X 的期望值了。
示例演示
让我们看一个使用重要性采样来估计期望的小例子。我们有两个相当不同的分布:B 和 π。
我们将根据 B 抽取样本,并尝试估计在 π 下的期望值。在右侧,我们将跟踪当前对 π 下期望值的估计。作为参考,我们在线的中间显示了真实的期望值。
以下是估计过程的步骤:
- 第一次抽样:从 B 中抽取一个样本,得到 x = 1,这在 B 下发生的概率是 0.85。如果从 π 中抽样,得到 x = 1 的概率是 0.3。代入重要性采样公式,我们得到的估计值是 0.35。
- 第二次抽样:再次从 B 中抽取样本,这次 x = 3,在 B 下的概率是 0.05,在 π 下的概率是 0.1。我们将新的观测值代入公式,并与前一次估计取平均,得到新的估计值 3.18。
- 第三次抽样:最后一次从 B 中抽取样本,代入公式计算,得到估计值 2.2。
仅仅使用来自 B 的样本,我们就成功地获得了在 π 下期望的一个相当好的估计。

总结
本节课中,我们一起学习了如何使用重要性采样来估计一个分布(π)下的期望值,而数据却是从另一个分布(B)中采样得到的。其核心在于计算重要性采样比率 ρ(x) = π(x) / b(x),并利用它来修正从行为分布 B 中获得的样本平均值,从而得到目标分布 π 下期望的无偏估计。这是实现离策略学习的关键基础。我们下次再见。
049:离策略蒙特卡洛预测 🎯

在本节课中,我们将学习如何利用蒙特卡洛方法进行离策略预测。我们将重点理解如何使用重要性采样来修正回报,并了解如何修改蒙特卡洛预测算法以适应离策略学习。
概述 📋
在之前的视频中,我们讨论了离策略学习。本节我们将具体探讨如何结合蒙特卡洛方法实现离策略预测。核心在于,当我们使用遵循行为策略 B 产生的回报来估计目标策略 π 下的状态价值时,不能直接对回报进行平均,而必须使用重要性采样比率 ρ 对每个回报进行修正。
蒙特卡洛估计的目标 🎯
蒙特卡洛估计的目标是通过计算从某个状态开始的所有回报的样本平均值,来估计每个状态的价值。公式表示如下:
V(s) = (1/N) * Σ G_t
然而,当我们尝试使用遵循行为策略 B 产生的回报来估计目标策略 π 下的价值时,会遇到问题。如果我们简单地平均在行为策略 B 下从状态 S 观察到的回报,将无法得到正确的答案。我们必须对平均中的每一个回报进行修正。
这正是重要性采样的用武之地。我们需要做的就是为每个采样到的回报计算出 ρ 值。
重要性采样比率 ρ 📊
ρ 的定义是轨迹在目标策略 π 下的概率除以该轨迹在行为策略 B 下的概率。
ρ = (P(轨迹 | π)) / (P(轨迹 | B))
这个 ρ 修正了整个轨迹的分布,从而修正了回报的分布。使用这个修正,我们就能得到我们想要的——在策略 π 下回报的期望值。
为了计算 ρ,我们需要知道如何计算一个轨迹在某个策略下的概率。
轨迹的概率分布 🔄
考虑轨迹的概率分布。这个概率可以理解为:给定智能体处于某个状态 S_t,它采取行动 A_t,然后转移到状态 S_{t+1},接着采取行动 A_{t+1} 并转移到 S_{t+2},以此类推,直到在时间 T 终止的概率。所有的行动都是根据行为策略 B 采样的。
由于马尔可夫性质,我们可以将这个概率分布分解成更小的部分。第一部分是智能体在状态 S_t 选择行动 A_t 的概率,乘以环境转移到状态 S_{t+1} 的概率。第二部分给出了下一个时间步经验的概率,依此类推。
我们可以使用连乘符号重写这个概率乘积列表。轨迹在策略 B 下的概率 P(轨迹 | B) 可以表示为:
P(轨迹 | B) = Π_{t=0}^{T-1} B(A_t | S_t) * P(S_{t+1} | S_t, A_t)
类似地,可以定义轨迹在目标策略 π 下的概率 P(轨迹 | π)。
计算重要性采样比率 🧮
现在,我们将这些概率代入 ρ 的定义中。正如我们在之前的视频中看到的,我们可以取这些概率并将它们乘以重要性采样比率。环境的状态转移动力学在每一步都相互抵消,只留下每一步策略比率的乘积。
ρ = Π_{t=0}^{T-1} [π(A_t | S_t) / B(A_t | S_t)]
这个简化的形式非常关键,它意味着我们只需要知道每个时间步上目标策略和行为策略选择特定行动的概率之比,而无需知道环境模型。

离策略估计 V(π) 📈
现在回到离策略估计 V(π)。智能体观察到许多遵循行为策略 B 产生的回报。我们可以通过用 ρ 修正每个回报来估计 V(π)。
V(π)(s) ≈ (1/N) * Σ [ρ * G_t]
接下来,我们看看如何实现这一点。
从同策略到离策略的算法修改 ⚙️
首先,回顾一下同策略蒙特卡洛预测算法。我们需要在这里做两个修改:
- 情节将不再遵循
π生成,而是遵循行为策略B生成。 - 回报需要使用重要性采样比率的乘积进行修正。

通过进行这些更改,我们得到了离策略蒙特卡洛预测算法。

以下是算法的核心步骤:
初始化:
对于所有 s ∈ S:
V(s) ← 任意值
Returns(s) ← 空列表

循环(对每个情节):
使用行为策略 B 生成一个情节:S0, A0, R1, S1, A1, R2, ..., S_{T-1}, A_{T-1}, R_T
G ← 0
W ← 1 # 重要性采样权重乘积
对于 t = T-1 到 0(倒序循环):
G ← γ * G + R_{t+1}
将 G 加入到 Returns(S_t) 中
V(S_t) ← 平均值(Returns(S_t))
W ← W * [π(A_t | S_t) / B(A_t | S_t)]
如果 W == 0:
跳出内层循环(提前终止)
请注意,情节现在是遵循行为策略生成的。回报被一个新项 W 修正,W 是情节中每个时间步重要性采样比率的累积乘积。
增量计算 ρ 📝
我们可以从时间 t 到 T-1 增量地计算 ρ(即算法中的 W)。原因如下:让我们写出每个时间步的乘积。回想一下,蒙特卡洛算法是反向遍历时间步的。
在算法的第一步,W 被设置为最后一个时间步的 ρ。在下一个时间步,W 是倒数第二个 ρ 乘以最后一个 ρ,依此类推。每个时间步在乘积中增加一个额外的项,并重用所有先前的项。

我们可以递归地计算这个值,而无需存储所有过去的 ρ 值。在算法中,这体现为 W ← W * [π(A_t | S_t) / B(A_t | S_t)]。
总结 🏁
本节课中,我们一起学习了离策略蒙特卡洛预测。我们掌握了如何使用重要性采样比率来修正由行为策略产生的回报,并成功修改了同策略蒙特卡洛预测算法,使其适用于离策略学习。关键点在于理解轨迹概率的分解、重要性采样比率 ρ 的计算及其在算法中作为权重 W 的增量更新方式。这为我们在无法直接遵循目标策略时评估其价值提供了有效工具。
050:批量强化学习 🧠

在本节课中,我们将学习批量强化学习的核心概念。这是一种利用历史数据来学习新策略的方法,尤其适用于无法进行大量在线交互的场景,例如教育或医疗领域。

大家好,我是艾玛·布伦斯基尔,斯坦福大学计算机科学系的助理教授。我的研究方向是高风险场景下的强化学习,尤其关注那些有望造福社会的应用。
我今天要和大家讨论的主题是批量强化学习。
在开始之前,我想先讲一个有趣的故事作为引子。在20世纪80年代,美国有一家名为A&W的快餐连锁店,试图与麦当劳的“四分之一磅”汉堡竞争。他们推出了“三分之一磅”汉堡,口味测试结果很好,牛肉品质也不错。然而,产品上市后却失败了。尽管“三分之一磅”汉堡的价格与“四分之一磅”汉堡大致相当,但顾客认为他们得到的牛肉更少,因为“三”小于“四”。
这个故事说明了数学教育的重要性。当我开始思考强化学习及其对社会应用的潜力时,教育成为了一个极具吸引力的例子。我和我的同事以及研究生们一起,思考如何能更好地教授分数知识,希望找到一种既吸引人又高效的教学方式。
你现在看到的这个游戏叫做“折射”,已有数十万学生玩过。但我们面临的一大挑战是:如何设计一系列活动,既能保持学生的参与度和积极性,又能确保他们真正学到知识。
我们可以将此视为一个决策策略问题:根据学生迄今为止与游戏的互动序列,我们应提供什么下一个活动,以最大化我们所关心的某个结果(奖励函数)。这个奖励函数可以是学生的坚持程度,或者是他们的学习量。
在我们的案例中,这些是可选的学习环境,因此我们非常关注如何最大化学生的坚持度。大约五年前我们开始思考这个问题,这让我对今天要简要介绍的问题产生了浓厚兴趣。
但我想强调,我绝不是第一个思考将强化学习应用于造福社会的人。实际上,从强化学习的起源(可以追溯到20世纪40年代的多臂老丨虎丨机问题)开始,就有一条并行的脉络在思考如何用强化学习帮助人类,从早期的“教学机器”到后来的“适应性临床试验”等。
我认为这在社会影响方面非常令人兴奋,但也为强化学习带来了许多基础性问题。特别是,当前强化学习取得的一些非凡成功,往往集中在机器人或游戏等领域。在这些场景中,我们通常可以访问模拟器进行尝试,即使智能体长时间学习失败,只要最终能学会,我们就满意了。
相比之下,在涉及与人交互的领域中,我们目前还没有很好的人类学习或行为模拟器。这意味着我们必须依赖真实数据,但这也带来了挑战,因为收集真实数据涉及与真人互动,我们必须谨慎对待。
因此,我和我的学生们在实验室里思考的一个关键问题是:如何开发强化学习技术,以尽量减少智能体学习所需的数据量?以及任何智能体要做出良好决策所需信息量的基本极限是什么?我认为,如果我们能回答这些问题,不仅能在强化学习的基础层面取得进步,还能帮助更多的人。
首先,我想简要回顾一下马尔可夫决策过程的背景知识。大家应该已经熟悉状态、动作、下一状态、动态模型和奖励等概念。
今天我们要思考的是反事实情况。我们将从过去的数据中学习,这些数据可能来自某个特定的行为策略,我们想利用这些数据来制定未来更好的决策。
这是一个充满挑战的问题,原因有很多,特别是它涉及到反事实推理。你可以想象,我们有一个智能体在过去做出了一系列决策并得到了一些结果,而且它可能不止一次地这样做。
挑战之一在于,你永远无法知道如果你现在不看这个视频,你的生活会是什么样子——那是一个反事实,你永远无法体验它。因此,当我们试图利用旧数据来思考未来做出不同、更好的决策时,这是一个关键挑战。
具体来说,就像在多臂老丨虎丨机中一样,我们面临数据截断问题:我们无法看到替代动作会带来什么结果,无法获得那些本应得到的奖励。即使在多臂老丨虎丨机中,这也是一个挑战。但当我们考虑使用旧数据进行强化学习时,我们实际上还面临一个额外的挑战:泛化问题。


如果你考虑一个智能体不是做一次决策,而是做一系列决策,那么策略的组合可能性会随着决策时间步长的增加而急剧增加。
因此,如果我们希望从过去的数据中泛化,去思考我们从未经历过的动作序列可能会发生什么,我们就需要某种泛化的方法。
现在,我们中有很多人对“如何利用旧数据做出未来更好的决策”这个问题感到兴奋。这与因果推理和反事实推理等领域密切相关。这些领域在统计学、流行病学和其他计算机科学领域有着悠久的历史。但近年来,人们非常热衷于尝试将这些思想与机器学习方法和强化学习相结合,以产生更大的影响。
我认为,我们许多人都非常希望能够进行所谓的反事实强化学习或批量强化学习。我们获取旧数据,从中学习一个新策略,并且能够知道这个策略在未来部署时的价值。这既涉及策略评估(我们评估替代策略好坏的能力),也涉及策略优化(我们在可能的策略集合上取最大值或最优值)。
我想先简要谈谈策略评估问题。需要指出的是,有大量文献研究这个问题,在其他领域常被称为处理效应估计。计量经济学领域的人们通过思考“如何评估一个治疗方案是否优于对照决策”等问题,对此进行了广泛研究。


然而,当我们考虑序列决策时,我们又遇到了挑战。
这是一篇来自我同事们的近期优秀论文,它说明了当我们开始使用旧数据尝试制定新决策时出现的一些挑战。
具体来说,假设你有一组以特定方式治疗过的病人,现在你想考虑一种特定的治疗序列。随着我们做出决策(例如选择是否给病人使用呼吸机或镇静剂),那些接受过特定干预序列或特定动作序列的先前病人的数量会变得非常少。因此,即使我们一开始有相当大量的数据(比如十万名病人,这是一个合理的数字),最终可能只有几百名病人实际接受了与我们想要评估的策略相匹配的治疗。
本质上,我们可以将此视为协变量偏移的挑战。当我们有不同的策略时,这些策略通常会采取不同的动作,而这些不同的动作会导致不同的状态分布。我们真正需要思考的是,在我们预期会遇到的那些不同的状态和动作分布下,会产生什么样的奖励结果。
为了应对这种分布不匹配的问题,一个重要工具是重要性采样。作为复习,在重要性采样中,我们可以将一个策略的价值视为观察到特定轨迹的概率(这里我考虑的是有限时间步长的情况)。我们可以考虑生成特定状态和动作轨迹的概率,乘以该特定轨迹的奖励,然后对所有可能接收到的轨迹进行平均。
重要性采样允许我们使用从不同策略生成的数据,并对其进行重新加权,从而得到正确的期望值。其中一个美妙之处在于,我们实际上不需要知道世界的动态模型,因为世界的动态模型在分子和分母中是相同的,所以会相互抵消。
自这种方法被引入强化学习以来,这个领域出现了许多令人兴奋的工作。它是策略评估的关键工具,因为我们可以用它来利用现有的旧数据,并在某些假设下评估替代策略的价值。
现在我想指出,使用重要性采样进行策略评估也存在一些挑战。

重要性采样为我们提供了一个无偏估计量,但通常可能具有非常高的方差。事实上,在我们之前的一些工作中,我们说明了方差有时会随着时间步长呈指数级增长。这意味着如果我们没有大量数据,或者时间步长很长,这些估计量可能对未来新策略的表现做出非常差的近似。

另一种方法是使用参数化模型,就像在MDP规划部分听到的那样。这些模型可能存在偏差,因为我们使用的函数近似器或选择的模型规格可能不正确,与数据生成的真实世界不匹配。但作为回报,它们可以具有非常低的方差。因此,过去几年一个令人兴奋的创新是双重稳健估计量的思想。这个思想源于统计学,在过去十年中被引入到强化学习和老丨虎丨机问题中。其核心思想是结合基于模型的估计量和重要性采样的优点,以获得更低的方差和更低的偏差。
因此,这是我们尝试进行策略评估的一种方式。我们真正想做的是在此基础上进行策略优化。我们近期的研究表明,我们可以利用重要性采样这类思想,来实际制定未来更好的决策。
这里我展示了一个来自CartPole环境的示例。底线显示了当前行为策略的好坏。通过使用基于重要性采样的先进技术,我们实际上可以进行策略优化,并学习到比用于收集数据的策略好得多的策略。我认为,通过使用这类技术可能带来的性能提升,是非常令人兴奋的。
我认为这只是第一步。关于如何真正解决这个问题,特别是在我们希望对性能有正式保证的情况下,还有大量的增长空间和开放性问题。在我的实验室里,我们做了很多关于策略评估、策略优化以及尝试推导正式界限的工作,以便在部署这些策略时能有信心。我的同事们在这些领域也正在进行许多非常令人兴奋的工作。
所以我认为我们还有很长的路要走。但在结束之前,我想给出一个乐观的理由。如果我们回到一开始提到的“折射”游戏例子,我们的目标是利用大约11,000名学生的旧数据,找出是否有更好的教学方法来保持学生的参与度。
我们使用了一种基于重要性采样的方法,得到了一个我们认为能将坚持度提高约30%的策略。我们随后对另外2000名学生进行了研究,发现坚持度确实提高了约30%到32%。
因此,我认为这非常令人兴奋,它证明了有时我们可以用这类方法准确预测未来,并且我们真的可以带来改变。谢谢。

本节课总结
在本节课中,我们一起学习了批量强化学习的核心概念。我们了解到,这是一种利用历史数据(通常来自旧的行为策略)来学习新策略的方法,尤其适用于无法进行大量在线实验的领域(如教育、医疗)。我们探讨了其中的关键挑战:反事实推理、数据截断和泛化问题。我们介绍了重要性采样作为策略评估的重要工具,它能处理数据分布不匹配的问题,但也存在高方差的挑战。我们还提到了结合模型与重要性采样的双重稳健估计量,以及如何利用这些方法进行策略优化。最后,通过一个教育领域的成功案例,我们看到了批量强化学习在实际应用中创造积极影响的潜力。
051:第一周总结 🎯

在本节课中,我们将对第一周关于蒙特卡洛方法的学习内容进行回顾与总结。我们将梳理从价值函数估计到探索策略的核心概念,并明确不同算法之间的区别与联系。
恭喜你完成了第一周课程的学习。
本周的核心内容是利用从环境中获得的经验来估计价值函数并寻找最优策略。
我们学习了同策略和异策略的蒙特卡洛方法,并重新审视了多臂老丨虎丨机中的探索问题。
现在,让我们回顾一下目前学过的材料。
蒙特卡洛算法回顾
蒙特卡洛算法是基于样本的方法。当环境模型未知或难以建模时,可以使用这类方法。
蒙特卡洛算法通过对多个观察到的回报进行平均来估计价值函数。它们需要等待一个完整的回报序列结束后才更新价值估计。因此,蒙特卡洛方法仅适用于分幕式马尔可夫决策过程。
我们讨论了蒙特卡洛方法如何应用于广义策略迭代框架。这引出了我们的第一个基于样本的控制算法:带探索性开端的蒙特卡洛控制。
与动态规划不同,蒙特卡洛算法不会遍历整个“状态-动作”空间。因此,它们需要一个探索机制来确保能够学习到每一个“状态-动作”对。

探索策略的演进

我们首先考虑了“探索性开端”。这种方法要求每个幕开始时,第一个状态和动作都是随机选择的。然而,探索性开端并非总是可行或安全的。例如,很难想象在自动驾驶汽车上使用这种方法。
这一认识促使我们去研究其他的探索方法。
我们介绍了解决探索问题的另外两种策略:使用ε-软策略的同策略学习和异策略学习。
同策略:ε-软策略
对于第一种策略,智能体遵循并学习一个随机策略。它大部分时间采取贪婪动作,但有一小部分时间会随机选择动作。通过这种方式,所有“状态-动作”对的价值估计都能随着时间的推移持续得到改进。这种同策略方法迫使我们学习一个接近最优的策略,而非绝对最优的策略。

那么,如果我们既想学习最优策略,又想保持探索性,该怎么办呢?

异策略学习
答案在于异策略学习。我们为异策略学习引入了一些新的定义,现在来回顾一下。
- 行为策略:智能体用来选择动作的策略。
- 目标策略:智能体在其价值函数中学习的目标策略。
通过设定一个合适的、具有探索性的行为策略,智能体可以学习任何确定性的目标策略。
一种在遵循一个策略的同时学习另一个策略的方法是使用重要性采样。重要性采样允许智能体根据从行为策略下采样的经验,来估计目标策略下的期望回报。
重要性采样比率对样本进行重新加权。它增加了在目标策略 π 下更可能出现的回报的重要性,并降低了那些不太可能出现的回报的重要性。样本平均值有效地包含了每个回报的正确比例,使得在期望上,这些回报就像是从目标策略 π 下采样得到的一样。
本节课中,我们一起学习了蒙特卡洛方法的核心思想及其在无模型强化学习中的应用。我们比较了同策略与异策略学习的区别,并深入探讨了重要性采样这一关键技术,它使得从行为策略的经验中学习目标策略成为可能。
本模块的内容到此结束。接下来,我们将讨论强化学习中最基本的概念之一:时序差分学习。下次见。
052:什么是时序差分(TD)学习 ⚡
在本节课中,我们将讨论强化学习中最核心、最基础的思想之一。引用教科书中的话:“如果必须找出强化学习中一个核心且新颖的思想,那便是时序差分学习。” 通过本视频的学习,你将能够定义时序差分学习、定义时序差分误差,并理解TD(0)算法。
概述
在预测问题中,我们的目标是学习一个价值函数,用于估计从给定状态开始的回报。在开始之前,我们先对蒙特卡洛策略评估方法进行一个小的修改。
从蒙特卡洛到增量更新
上一节我们介绍了蒙特卡洛方法需要完整的轨迹来计算回报。本节中,我们来看看如何实现增量式更新。
我们可以使用以下公式来增量式更新我们的价值估计:
V(St) ← V(St) + α [Gt - V(St)]
注意,这里使用了恒定步长α,类似于我们在多臂老丨虎丨机学习算法中的做法。这意味着该算法无需保存完整的回报列表即可形成蒙特卡洛估计。
然而,为了计算回报Gt,我们必须对整个轨迹进行采样。这导致我们无法在回合(episode)进行中学习,而必须等到回合结束。我们的目标是能够在回合结束前就进行增量式学习,为此,我们需要提出一个新的更新目标。
递归的价值函数与TD目标
回想一下折扣回报的定义。我们之前看到,它可以被递归地表示如下:
Gt = Rt+1 + γ * Gt+1
时间t的状态价值是时间t的期望回报。我们可以用上述递归定义替换这个期望内的回报。
利用期望的线性性质,我们可以进一步拆分这个方程。我们得到下一时间步回报的期望,也就是下一个状态的价值。现在,我们也递归地写出了价值函数。
让我们回到增量式蒙特卡洛更新规则。我们希望朝着回报Gt更新,但又不想等待它。我们可以将时间t的回报替换为即时奖励加上对下一个状态回报的估计:
Rt+1 + γ * V(St+1)
我们可以将下一个状态的价值视为直到回合结束的回报的替代品。这样,我们无需等到回合结束,但仍需等到下一个时间步。我们称之为TD目标。
时序差分误差

方括号内的项类似于一个误差,我们称之为时序差分误差。TD误差通常用δt表示:
δt = Rt+1 + γ * V(St+1) - V(St)
我们的更新规则则变为:
V(St) ← V(St) + α * δt
起初,这个更新目标可能看起来有些奇怪。TD方法将一个状态的价值朝着它对下一个状态价值的估计进行更新。随着对下一个状态价值的估计不断改进,我们的目标也会随之改进。

TD学习与动态规划的比较
事实上,我们在动态规划中做过类似的事情。在动态规划中,我们朝着所有可能下一个状态的价值期望进行更新。主要区别在于,在动态规划中,我们需要对所有可能的下一个状态求期望,这要求我们有一个环境模型来计算这个期望。而在TD学习中,我们只需要下一个实际出现的状态,这可以直接从环境中获得,无需模型。

TD(0)算法流程
现在我们来谈谈如何直接从环境中获得下一个状态。将时间T+1视为当前时间步,时间T视为前一个时间步。因此,我们只需存储前一个时间步的状态,以便进行TD更新。
我们看到的是一个经验流:状态、动作、奖励、下一个状态,如此循环。从时间t的状态出发,我们采取一个动作并观察到时间t+1的下一个状态。只有在这之后,我们才能更新前一个状态的价值。

现在我们可以完整地描述表格型TD(0)算法。TD算法将待评估的策略作为输入,还需要一个步长参数α和价值函数的初始估计。
以下是TD(0)算法的步骤:
- 初始化:对于所有状态s,初始化价值函数V(s)。设定步长参数α。
- 循环每个回合:
- 初始化起始状态S。
- 当状态S非终止状态时,循环:
- 根据策略π选择动作A。
- 执行动作A,观察奖励R和下一个状态S‘。
- 计算TD误差:
δ = R + γ * V(S') - V(S) - 更新价值估计:
V(S) ← V(S) + α * δ - 更新状态:
S ← S'
我们只需要跟踪前一个状态即可进行更新。这就是TD(0)算法。强化学习中的许多算法都基于TD思想。


总结
本节课中,我们一起学习了时序差分学习,它使用“自举”的回报估计。我们了解了TD误差的概念,并讨论了TD(0)算法的原理和流程。TD学习的核心优势在于它能够在线、增量式地从经验中学习,无需等待回合结束或依赖完整的环境模型。
053:理查德·萨顿论时序差分学习的重要性 🧠


在本节课中,我们将学习理查德·萨顿教授关于时序差分学习重要性的核心观点。时序差分学习是一种专门用于预测学习的方法,被认为是本世纪人工智能领域最关键的技术之一。
我的名字是理查德·萨顿。我是一名科学家,一生都在研究强化学习。我在阿尔伯塔大学和DeepMind Alberta工作。我的名字拼写是SUTTON,理查德·S·萨顿。今天我来讲述时序差分学习的重要性。
时序差分学习是一种专门用于预测学习的方法。这使其成为本世纪人工智能领域最重要的事物。我们知道,我们专注于那些能随计算能力扩展的方法。近年来,计算能力大幅提升,因此这些方法的影响力也大得多。在各种学习类型中,最能彻底、最广泛地随计算能力扩展的,就是预测学习。预测学习意味着你试图预测接下来会发生什么。你做出一个预测,然后等待并观察实际发生的情况,接着根据结果进行学习。由于你只需要等待,因此不需要训练数据集,也不需要人们做大量准备工作。学习预测是最具扩展性的学习类型。
时序差分学习是一种专门为学习预测而设计的学习方法。那么,预测学习有什么特别之处呢?首先,时间在流逝,你会做出一系列预测。在每个时刻,你都会做出一个又一个预测。然后,当你知道实际发生了什么时,你就得到了所有这些预测的正确答案。为了处理这种时间结构带来的影响,你需要专门的学习规则,这就是我们有时序差分学习的原因。
现在,我相信你已经学习或听说过监督学习方法。监督学习意味着有某种“监督者”告诉你正确答案是什么。在学校里可能会发生这种情况,但在正常生活中,并没有监督者或指导者告诉我们该做什么。然而,在预测学习中,我们确实有“监督”。你做出预测,然后只需等待,就会发现发生了什么。这非常特别。
你可能会说,预测学习是有监督的,因为你等待并发现了结果,这指导了你。但你也可以说它是无监督的,因为你不需要一个监督者,你只是等待,并通过事件的自然进程发现了你应该说什么。因此,我有时喜欢认为预测学习是无监督的监督学习。
请记住,时序差分学习是一种专门用于多步预测学习的方法。关于监督学习,我还想再说一点。你可能经常听到监督学习被描述为预测学习,在某种意义上确实如此。但在最重要的意义上,它不是。监督学习是你做出预测,然后被告知答案是什么,而不是你实际必须等待观察会发生什么。监督学习完全基于训练集。而预测学习在一种特殊情况下——即你只尝试预测一步时——你可以将其视为传统的监督学习问题:做出预测,等待一步,看到结果。然而,我们的大多数预测都不是一步预测。一步是什么?一步可能被认为是十分之一秒。当然,我们会在十分之一秒的尺度上做预测,但在我们的生活中,长期预测更为重要。因此,预测学习和时序差分学习是一种重要的学习类型。
你可能会预期,这种学习方式可能出现在自然系统、动物和人类中。这几乎是我们人工智能领域发展的附带产物,但确实如此:时序差分学习在动物学习理论,特别是奖励系统理论中扮演了主要角色。时序差分模型现在是大脑奖励系统的标准模型。我们可以在大脑中观察到与时序差分误差对应的信号,这些信号驱动着学习,正如时序差分学习模型所预测的那样。
你可能听说过多巴胺。在哺乳动物中,传递时序差分误差信号的物质就是多巴胺神经递质。在其他动物中,则是不同的递质。例如,在蜜蜂中,携带时序差分误差的信号被称为章鱼胺,但本质是相同的。即使在动物、昆虫、哺乳动物、灵长类动物,甚至海蛞蝓这些非常不同的系统中也是如此。
我想再多说一点关于工程学或人工智能学习模型与自然学习系统的心理学模型之间的关系。这种联系可能被过度解读,但我仍然为时序差分学习在人工智能和心理学、神经科学中都是一个严肃而重要的话题感到自豪。因为它在这些各自独立的领域中都因其领域内成功所依据的完全不同的标准而受到重视。在人工智能领域,我们推崇时序差分学习,因为它是一种强大且广泛适用的学习方法。在神经科学领域,他们推崇时序差分学习,因为它能准确建模和预测动物行为。
所有这些的核心都是预测学习。预测学习是人工智能的关键。预测学习是最重要的单一学习类型。而时序差分学习是一种专门的方法,它利用了学习预测所具有的时间结构优势。
非常感谢。还有一些材料。
本节课总结
在本节课中,我们一起学习了理查德·萨顿教授阐述的时序差分学习的重要性。我们了解到:
- 时序差分学习是专门为预测学习设计的方法。
- 预测学习因其只需等待观察结果,无需人工标注数据,是最具扩展性的学习范式。
- 时序差分学习通过利用预测问题中的时间结构,能高效处理多步预测。
- 这种方法不仅在人工智能领域至关重要,其原理也与大脑中基于多巴胺的奖励学习机制相吻合,在神经科学和心理学中得到了验证。
- 预测学习可以被视为一种无监督的监督学习,是连接人工智能与自然智能学习原理的关键桥梁。
强化学习专项课程:P54:时序差分学习的优势

在本节课中,我们将学习时序差分学习方法,并重点探讨其相较于动态规划和蒙特卡洛方法的独特优势。我们将通过一个日常生活中的例子来直观理解这些优势。
在上一节视频中,我们介绍了时序差分学习。TD方法巧妙地结合了动态规划和蒙特卡洛方法的核心思想。与动态规划类似,TD方法使用自举。与蒙特卡洛方法类似,TD可以直接从经验中学习。这种结合产生的效果比单独使用任何一种方法都更强大。
通过本节学习,你将能够理解使用TD进行在线学习的益处,并识别TD方法相对于动态规划和蒙特卡洛方法的关键优势。
让我们考虑一个下班开车回家的例子。每天你都会预测到家需要多长时间。你的预测基于时间、星期几、天气和其他因素。假设你已经多次开车回家,对于从途中可能遇到的各种情况到家所需的时间,你有一个不错的估计。
让我们来看一次回家旅程的估计值。一天晚上,你离开办公室时,预测需要30分钟到家。大约5分钟后,你驶出停车场,注意到正在下雨。雨天交通较慢,因此你估计从此刻起还需要35分钟。又过了15分钟,你比预期更早地驶出高速公路,并估计现在还需要15分钟到家。旅程进行到30分钟时,你被一辆慢速卡车挡住,预测还需要额外10分钟。10分钟后,你驶入家所在的街道,通常从这里到家需要3分钟。3分钟后,你到家了。
圆圈中的数字代表我们对剩余驾驶时间的预测。我们如何改进这些预测呢?为了理解如何更新预测,我们需要指定奖励。让我们使用所花费的时间作为奖励。你花了5分钟驶出停车场,我们可以给这个转移标上奖励值5。你又花了15分钟驶出高速公路,依此类推。你预测需要30分钟到家,但实际上花了43分钟。或许你可以从这次经历中学习。
首先,我们来看一种蒙特卡洛方法,具体来说,我们将使用alpha等于1的恒定alpha蒙特卡洛方法。在蒙特卡洛方法中,你将估计值更新朝向回报,而回报只有在回合结束时才可获得。只有当我们到家后,才能更新每个状态的估计值。
我们可以从离开办公室时开始。从办公室出发,你总共花了43分钟到家。因此,在时间零点的回报是43。由于alpha为1,我们将估计值完全移向实际回报。从你驶出停车场时起,你花了38分钟到家,我们相应地更新估计值。我们以同样的方式更新剩余状态的估计值。
但是,在学习开始之前,真的有必要等到最终结果已知吗?
让我们重置时钟,看看如何使用TD进行更新。从办公室出发,你花了5分钟驶出停车场,从那里你做出了35分钟的预测。根据退出状态,你可以更新办公室的估计值。
你从办公室的当前估计是30分钟。你获得了5的奖励。下一个状态的值是35。因此,我们将估计值更新为40分钟。
让我们考虑下一个状态。你的当前估计是35分钟。从停车场到驶出高速公路,你花了15分钟。当你驶出高速公路时,到家的估计时间也是15分钟。因此,我们将驶出停车场时的估计剩余时间减少到30分钟。这是合理的,因为我们比预期更早地驶出了高速公路。
我们类似地更新剩余状态的估计值。在我们回家的路上,我们可以在线学习,而无需像蒙特卡洛方法那样等待知道最终结果。
现在,让我们总结使用TD的优势。

- 无需环境模型:与动态规划不同,TD方法不需要环境的模型,它们可以直接从经验中学习。
- 在线更新:与蒙特卡洛不同,TD可以在每一步进行更新。自举允许我们基于其他估计来更新当前估计。
- 收敛性:TD渐近地收敛到正确的预测。此外,TD方法通常比蒙特卡洛方法收敛得更快,我们将在下一个视频中看到一个例子。
在本节课中,我们一起学习了时序差分学习的优势。我们通过一个开车回家的例子,对比了蒙特卡洛方法和TD方法的更新过程,直观地理解了TD能够进行在线、增量式更新的特点。最后,我们总结了TD方法相对于动态规划和蒙特卡洛方法的核心优势:无需模型、在线学习以及更快的收敛速度。
055:时序差分与蒙特卡洛方法对比



在本节课中,我们将深入比较时序差分学习与蒙特卡洛方法。通过一个精心设计的实验,我们将直观地展示两种方法在估计价值函数时的差异,并帮助你理解时序差分学习的经验优势。
实验环境介绍 🧪
在之前的视频中,我们介绍了时序差分方法,并讨论了它相对于动态规划和蒙特卡洛方法的优势。
本节中,我们将通过一个科学实验来更深入地比较时序差分和蒙特卡洛方法。
考虑一个简单的马尔可夫决策过程。我们有五个非终止状态。在每个状态,我们有两个确定性动作:向左和向右。我们的目标是评估一个均匀随机策略,并估计其价值函数。
所有片段都从状态 C 开始。片段在左侧或右侧终止。所有状态转移的奖励都是零,除了在右侧终止时奖励为 +1。
我们将此问题的折扣因子设为 1。此时,价值具有直观的含义:每个状态的价值是从该状态出发,最终在右侧终止的概率。
起始状态 C 的价值是 0.5。这意味着从中心开始随机游走,有50%的概率在右侧终止。这很合理。
实验设置 🤖
我们在幻灯片顶部标注了MDP的真实价值。我们的智能体(一个可爱的小机器人)将使用时序差分方法来估计价值函数。在底部,另一个智能体使用蒙特卡洛方法。
我们将两个智能体的近似价值函数初始值都设为 0.5。
第一轮片段分析 🔍
让我们观察两个智能体在第一个片段中的表现。
请注意,时序差分智能体只更新了状态 E 的价值。要理解这一点,可以考虑从状态 C 到 D 的转移。时序差分误差等于转移的奖励,加上下一个状态 D 的价值,减去状态 C 的价值。
由于这是一个非终止转移,奖励为零。状态 C 和 D 的价值都是 0.5,因此时序差分误差为 0,我们不对 C 的估计值进行任何更改。
除了从状态 E 进入终止状态的转移外,每一步都发生同样的情况。
相比之下,蒙特卡洛智能体更新了机器人在该片段中访问的所有状态的价值。
后续片段与渐进性能 📈
让我们观察下一个片段。注意在片段中价值是如何更新的。
最终,时序差分智能体在每一步都进行了价值更新。相比之下,蒙特卡洛智能体等到片段结束后才进行更新。
让我们再看几个片段。时序差分智能体的价值估计似乎正在向真实价值移动。
这个过程耗时较长,让我们直接跳到后面评估其渐进性能。
我们绘制了学习过程中几个时间点的估计价值。X 轴代表 MDP 中的每个状态。Y 轴代表估计价值。图中也标出了真实价值和初始价值估计(回忆一下,我们将其初始化为 0.5)。
红色曲线显示了第一个片段结束后的学习价值。正如我们讨论过的,在第一个片段结束时,时序差分方法只更新了一个状态的价值。
100 个片段后的估计值已经接近它们能达到的最佳水平。记住,我们使用了恒定的步长 0.1。这意味着价值会根据最近片段的输出而波动。如果我们使用更小的学习率,或者更好的衰减学习率,我们可能会得到更好的估计。
性能比较:时序差分 vs. 蒙特卡洛 ⚖️
一个很自然的问题是:时序差分学习是否比蒙特卡洛更快?
让我们在我们的示例问题上比较时序差分和蒙特卡洛的性能。这里,X 轴代表片段数量。Y 轴代表价值函数与学习估计值之间的均方根误差。
红色学习曲线代表了蒙特卡洛方法在几个不同 alpha(学习率)值下的性能。每条曲线是超过 100 次独立运行的平均值。例如,这个点代表了学习率为 0.01 时,经过 50 个片段后达到的平均误差。
现在让我们看看时序差分的性能。我们看到时序差分的表现始终优于蒙特卡洛。
让我们更仔细地观察。注意,学习率为 0.15 时误差下降更快,但最终导致更高的最终误差。使用较小的学习率时,时序差分学习速度较慢,但能达到更低的最终误差。

总结 📝
本节课中,我们一起进行了一个严谨的实验来比较时序差分和蒙特卡洛方法。

实验结果表明,在这个特定问题中,时序差分方法收敛更快,并且能达到更低的最终误差。
我们下次再见。
056:安迪·巴托与理查德·萨顿访谈补遗

在本节课中,我们将回顾强化学习领域的早期发展历程,了解它如何从一个不被重视的概念演变为今天的热门学科。我们将跟随两位先驱者——安迪·巴托和理查德·萨顿的对话,探索该领域形成过程中的关键转折点、核心思想的演变,以及他们坚持研究的内在动力。
早期研究的开端
上一节我们介绍了本次访谈的背景,本节中我们来看看强化学习作为一个独立研究领域是如何被确立的。
当最初决定将强化学习作为一个独立的研究领域时,我们并未立即获得广泛认可。我想谈谈那些早期岁月,因为其中发生了一些引人注目的事情。
理查德是我的第一个研究生。哈里·克洛什在麻省大学签订了一份合同,旨在研究他关于“享乐主义神经元”的假说是否有意义,因此我被聘为博士后。根据迈克尔(另一位首席研究员)后来发表的回忆录所述,哈里要求他们必须聘用我,否则他们将无法获得资金支持。
互补的研究风格
我认为我们合作如此成功的一个原因是,我天性风险规避,而理查德是风险寻求型的人。他敢于与鲨鱼共泳,这与我截然不同。风险寻求意味着你不愿随大流,这解释了为何在强化学习变得如此流行时,你几乎不会亦步亦趋。我选择进入一个正交(不同)的方向,仅仅是因为我无法跟上主流领域的文献,所以寻找一个覆盖稀疏的领域以便做出贡献。不过,既然我已经退休,目前并未朝任何正交方向前进。
我对大家目前在强化学习领域所做的工作感到惊叹。我很庆幸不必身处工业级强化学习研究的激烈竞争之中。现在有大量有趣的论文涌现,但我并未完全跟进。
领域形成的挑战与坚持
我想讨论的是,这种风险寻求的特质促使你离开了终身教职岗位,去研究一个当时不受欢迎的领域。我不建议任何人离开一个稳定的职位去研究冷门领域,所以我知道你并不认为这是风险寻求,但我认为任何其他普通人都会这么看。你只是想追求你认为重要的事情。
实际上,我更想谈谈这个领域本身。当时,整个领域对学习感兴趣,但并非强化学习,而是监督学习。在60年代的第一波神经网络和机器学习浪潮中,研究转向了监督学习。50年代的早期研究者讨论过类似奖励的概念,但最终却研究起了监督学习。
这种现象在历次浪潮中反复出现。总有新事物出现,但总存在一点监督学习与强化学习的较量。我曾在当前文献中看到,一些资深学者误解了误差修正与试错学习之间的区别。这种误解贯穿了整个历史,贯穿了早期的三次浪潮。
我们当时受命评估哈里的想法是否值得研究。我们回溯并审视了一切,发现确实有一些人在进行真正的强化学习研究,但整个领域却聚焦于监督学习。这些区别对当时的人们来说并不清晰,这真是一个重大的发现。我记得我早期的系列讲座就是关于这个主题,强调存在试错学习,而非仅仅是监督学习。这确实令人惊讶。
我最近写了一篇AI杂志文章,梳理了其中一些令人惊讶的发现,这(监督学习的主导地位)就像是头号发现。当然,这吸引了我,因为也许我们可以做一些创新性的工作。因为大多数人没有这么做,除了工程领域的随机控制研究者,他们一直在做类似的事情,但人工智能社区并未真正接纳这一点。
我记得我们查阅了所有不同的领域,找不到有谁在研究为了优化某个信号而进行的学习,除了学习自动机。但几乎没人知道它,而且它是非关联性的。基本上,文献非常稀少,只有少数关于多臂赌博机的工作。这很奇怪,因为这是一种重要的学习类型。现在,我们正在推出该领域的教科书第二版,并开设相关课程,但在1980年,它还不是一个独立的主题。它被淹没、吞噬、掩盖,因为监督学习占据了主导地位。
与行为主义的关系
行为主义是当时最不时髦的理论之一。强化学习包含了行为主义的元素,但并非全部。我们认为,人们在拒绝行为主义时,也抛弃了常识性的强化学习原则,这是把孩子和洗澡水一起倒掉了。但即使在今天,它有时被称为“新行为主义”,这令人不快,因为强化学习包含模型、价值函数等概念,这是纯粹行为主义所不允许的。强化学习关注的是头脑中算法内部发生了什么,而纯粹行为主义至少会反对这种不可观察的内部状态。
我从行为主义中学到了很多,它变得不受欢迎实在可惜,许多知识因此丢失。另一方面,这又像给了我一件秘密武器,因为我理解了行为主义者学到的东西,而许多其他人没有费心去学习。时序差分学习就来源于此。
内在动机与长期坚持
我指的是内在动机,心理学家称之为内在动机,即你为了事情本身而做某事,而非为了某种外在奖励。我认为这非常强大。我对此感兴趣是因为我认为,并且仍然认为,这是创造未来可能有用(也可能没用)的技能或“选项”的好方法,就像基础研究一样。基础研究是由内在动机驱动的,无论其是否有直接效用。事实证明,它产生了巨大的效用,但这并非驱动力,这与明确的项目驱动研究不同。我认为动物也会经历一个由内在动机驱动的阶段,它们学习各种技能,变得能够熟练应对世界。然后当它们遇到必须解决的问题时,它们就拥有了可以运用的技能储备,我认为这是一个重要原则。
我认为理查德也对这些现在属于强化学习范畴的议题有着内在动机。对我来说,它们就是有趣。它们有效并带来回报,但这至少对我来说,并非主要的驱动力。
安迪,我们在强化学习领域取得了巨大成功,我只想祝贺你,与你一同庆祝,并给你一个击掌。
强化学习专项课程:第二周:时序差分学习总结


在本节课中,我们将对第二周学习的时序差分学习方法进行总结。我们将回顾TD学习的核心思想,比较其与动态规划和蒙特卡洛方法的异同,并通过一个预测回家时间的例子和一个随机游走实验来加深理解。
上一节我们介绍了蒙特卡洛方法,本节中我们来看看如何结合动态规划和蒙特卡洛的优点,形成时序差分学习。

🎯 TD学习的核心:自举法
TD学习借鉴了动态规划中一个重要的概念——自举法。TD更新朝着一个“自举回报”的目标进行。我们可以将时间步T之后的回报,替换为即时奖励加上对下一个状态价值的估计。
用公式表示,TD的更新目标为:
G_t = R_{t+1} + γ * V(S_{t+1})
其中,V(S_{t+1})是对下一个状态的估计值。
我们说TD是“用一个猜测去更新另一个猜测”,它将其价值估计朝着下一个状态的价值进行自举更新。

📊 表格型TD(0)算法
我们讨论了表格型TD(0)算法。这里的核心要点是,TD可以在情节的每一步都更新其价值估计。
以下是TD(0)算法的关键特性:
- 在线更新:无需等待整个情节结束。
- 记忆需求低:只需记住前一个状态。
⚖️ TD与其他方法的比较
那么,TD与蒙特卡洛和动态规划相比如何呢?以下是三者的主要区别:
- 与蒙特卡洛相比:TD通常收敛得更快。
- 与动态规划相比:TD不需要环境模型。
- 综合优势:TD是在线且完全增量的,这一点蒙特卡洛和动态规划都不具备。

🔍 TD的预测更新机制
我们学习了TD如何根据接收到的新信息来更新其预测。我们通过预测下班回家所需时间的例子演示了这一点。
我们使用TD在开车回家的每个阶段,持续优化预测的到达时间。预测随着每一步的实际经历而不断调整。
🧪 实验:TD与蒙特卡洛在随机游走中的对比
最后,我们进行了一个实验,在随机游走问题上比较TD和蒙特卡洛方法。
以下是实验的主要发现:
- TD的更新方式:在每次状态转移后,TD都会更新价值函数以反映最新信息。
- 蒙特卡洛的更新方式:蒙特卡洛仅在每个情节结束时更新其价值函数。
- 结果:从长期来看,TD比蒙特卡洛学习得更快,并且达到了更低的最终误差。
📝 总结
本节课中我们一起学习了时序差分学习方法。我们了解了TD如何通过自举法结合动态规划和蒙特卡洛的优点,实现了在线、增量式的学习。通过比较和实验,我们看到TD在无需模型的情况下,往往能比蒙特卡洛更快地收敛。在接下来的课程中,我们将基于TD来构建控制算法。
058:基于时序差分的SARSA通用策略迭代 🧠
在本节课中,我们将学习如何将时序差分(TD)学习融入通用策略迭代(GPI)框架,并详细介绍SARSA控制算法。我们将从回顾GPI的基本概念开始,逐步过渡到使用TD进行策略评估,最终理解SARSA如何通过每一步的更新来实现策略优化。
概述
在之前的课程中,我们讨论了如何使用通用策略迭代来寻找最优策略。我们也介绍了使用时序差分方法来估计价值函数。那么,如果我们在通用策略迭代的策略评估步骤中使用时序差分方法,会是什么样子呢?本节课结束时,你将能够解释如何将通用策略迭代与时序差分结合以寻找改进的策略,并描述SARSA控制算法。
通用策略迭代回顾
通用策略迭代结合了两个部分:策略评估和策略改进。我们看到的第一个采用这种形式的算法是策略迭代。策略迭代在策略改进之前,会运行策略评估直至收敛。
随后,我们看到了结合蒙特卡洛方法的通用策略迭代,它在每个回合结束后执行一次策略评估和改进的循环。
为了更好地记忆结合蒙特卡洛的通用策略迭代,可以想象一只老鼠在一个四状态的走廊里,尽头有奶酪。老鼠最初一无所知,遵循一个随机策略。最终,老鼠会通过随机移动偶然碰到奶酪。在那一刻,老鼠会更新其动作价值函数。然后,它根据其动作价值函数进行策略改进。随着这个过程重复,它最终将学会最优策略。
请注意,结合蒙特卡洛的通用策略迭代在改进之前并不执行完整的策略评估步骤。相反,它在每个回合后进行评估和改进。更进一步,我们甚至可以在仅仅一次策略评估步骤后就改进策略。我们将使用时序差分方法来实现这一点。
在GPI中使用TD学习
为了在通用策略迭代中使用时序差分,我们需要学习一个动作价值函数。因此,我们需要看一个与你过去所见略有不同的时序差分版本。
我们不再关注从状态到状态的转移并学习每个状态的价值,而是关注从“状态-动作对”到下一个“状态-动作对”的转移,并学习每个“状态-动作对”的价值。这个算法被称为SARSA预测。
让我们更详细地看一下它。
SARSA预测算法详解
SARSA这个缩写描述了更新中所使用的数据:状态、动作、奖励、下一个状态和下一个动作。SARSA对“状态-动作对”的价值进行预测。
以下是算法的步骤:
- 智能体在初始状态选择一个动作,从而创建第一个“状态-动作对”。
- 接着,它在当前状态下执行该动作,并观察即时奖励 R_{t+1} 和下一个状态 S_{t+1}。
- 在SARSA中,智能体在更新其价值估计之前,需要知道下一个“状态-动作对”。这意味着它必须在更新前确定下一个动作。
- 由于我们的智能体正在为特定策略学习动作价值,它使用该策略来采样下一个动作。
完整的更新公式如下:
Q(S_t, A_t) ← Q(S_t, A_t) + α [R_{t+1} + γ Q(S_{t+1}, A_{t+1}) - Q(S_t, A_t)]
这个公式看起来与状态价值的时序差分更新非常相似,只是状态价值 V(S) 被替换为了动作价值 Q(S, A)。
我们刚刚描述的算法是用于策略评估的,它为某个特定的固定策略学习动作价值。然而,得益于通用策略迭代框架,我们可以将其转变为一个控制算法。这次,我们将在每个时间步改进策略,而不是在一个回合后或收敛后才改进。
从评估到控制:SARSA算法
将SARSA预测嵌入通用策略迭代框架,就得到了SARSA控制算法。其核心思想是:在每一步,我们使用当前的策略(通常是ε-贪婪策略)来采样动作,执行该动作并观察结果,然后使用上述SARSA更新公式来更新动作价值函数 Q。紧接着,我们基于更新后的 Q 值来改进策略(例如,调整ε-贪婪策略中的贪婪动作选择)。
这个过程在每一步交互中同时进行,实现了评估与改进的紧密交织。

总结

本节课中,我们一起学习了如何将通用策略迭代与时序差分学习相结合以寻找改进的策略。SARSA控制算法是结合时序差分的通用策略迭代的一个典型例子。它通过在每一步交互中利用当前策略采样到的“状态-动作-奖励-下一个状态-下一个动作”序列来更新动作价值,并即时改进策略,从而能够在线、增量式地学习最优策略。
059:风世界网格中的SARSA算法
在本节课中,我们将学习SARSA控制算法在一个具体示例——风世界网格中的实际运行过程。通过分析其性能,我们将更好地理解该算法的学习机制。
算法回顾与任务引入
上一节我们介绍了SARSA算法的基本概念。本节中,我们来看看该算法在一个名为“风世界”的网格环境中的具体应用。
风世界是一个有特殊规则的网格环境。状态构成一个网格,其中包含一个起始状态和一个终止状态。智能体可以按通常的四个方向移动。每走一步,智能体会收到-1的奖励,这激励智能体尽快找到出口。由于这是一个分幕式任务,折扣因子γ设为1。
此环境的特殊之处在于“风”:当智能体从某些特定状态移动时,风会将其向上吹。每个状态的风力强度取决于其所在的列。例如,如果智能体处于风力强度为1的列中并执行向左的动作,它将先向左移动一格,然后被风向上吹一格。若移动会撞墙,则动作无效。
应用SARSA算法

现在,我们将SARSA算法应用于此任务。我们将使用ε-贪心策略进行动作选择。在此示例中,参数设置如下:
- ε = 0.1
- α = 0.5
- 初始动作价值Q(s, a)初始化为0
ε=0.1意味着每10步中约有1步会随机选择动作。初始价值设为0是乐观的,这鼓励了系统性的探索。
以下是算法运行结果的性能图,显示了随时间步增加所完成的总幕数,结果是100次运行的平均值。

可以观察到,最初的几幕需要数千步才能完成。随后曲线逐渐变陡,表明完成每幕所需的时间步数在减少。大约在7000步之后,贪心策略停止改进,幕完成率停止增长。这意味着智能体的策略在最优策略附近徘徊,但由于探索的存在,不会完全收敛到最优策略。
与蒙特卡洛方法的对比
值得注意的是,蒙特卡洛方法在此环境中可能不太适用。这是因为许多策略无法到达终止状态。蒙特卡洛方法只在幕终止时才进行学习,因此一个糟糕的策略可能使智能体陷入困境,永远无法在此网格世界中学习到好的策略。
例如,如果策略在起始状态总是选择向左的动作,智能体将永远无法到达终点。SARSA算法避免了这种陷阱,因为它能在幕中进行学习,及时认识到不良策略的价值很低,从而切换到其他策略,不会一直被困住。


总结
本节课中,我们一起学习了SARSA控制算法在一个具体风世界MDP示例中的运行过程。我们分析了算法的学习曲线,并将其与蒙特卡洛方法进行了对比,从而更深入地理解了SARSA在线学习、避免策略陷入局部困境的优势。
强化学习专项课程:P60:什么是Q学习


在本节课中,我们将学习Q学习算法。这是一种重要的在线强化学习算法,已被成功应用于玩Atari游戏、控制交通信号灯乃至自动配置网络系统等多个领域。课程结束时,你将能够描述Q学习算法,并解释它与贝尔曼最优方程之间的关系。
Q学习算法于1989年被提出,是最早的重要在线强化学习算法之一。
让我们先看一下它的伪代码。这个格式我们之前见过:智能体在某个状态下选择一个动作,执行该动作,然后观察下一个状态和奖励。接着,智能体进行一次更新,循环往复。
在众多熟悉的元素中,Q学习的新颖之处是什么?Q学习的新元素在于其动作价值更新。其更新目标为:Rt+1 + γ * max_a Q(St+1, a)。这与SARSA算法不同,SARSA在其更新目标中使用的是下一个“状态-动作”对的价值。
为什么Q学习使用最大值,而不是下一个“状态-动作”对的价值?这种联系可以追溯到动态规划的内容。观察SARSA的更新方程,会发现它与动作价值的贝尔曼方程惊人地相似。事实上,SARSA正是基于样本来求解动作价值贝尔曼方程的算法。
Q学习同样利用环境样本来求解一个贝尔曼方程。但它使用的不是标准的贝尔曼方程,而是动作价值的贝尔曼最优方程。最优方程使得Q学习能够直接学习最优动作价值函数Q*,而无需在策略改进和策略评估步骤之间切换。


尽管SARSA和Q学习都基于贝尔曼方程,但它们基于的是截然不同的贝尔曼方程。
SARSA是策略迭代的样本化版本,它使用的是依赖于某个固定策略的动作价值贝尔曼方程。
Q学习则是价值迭代的样本化版本,它迭代地应用贝尔曼最优方程。应用贝尔曼最优方程会严格改进价值函数,除非它已经是最优的。因此,价值迭代持续改进其价值函数估计,并最终收敛到最优解。
基于同样的原因,只要智能体持续探索并对所有“状态-动作”空间区域进行采样,Q学习也会收敛到最优价值函数。
本节课中,我们一起学习了Q学习算法,并描述了它与贝尔曼最优方程之间的联系。
061:风世界网格中的Q学习

在本节课中,我们将学习如何在“风世界网格”环境中应用Q学习算法,并将其与SARSA算法的性能进行比较。通过一个具体的实验,我们将直观地理解两种算法的差异以及参数选择对学习效果的影响。
上一节我们介绍了Q学习的基本概念。你可能对其为何有效还缺乏直观的理解。
本节中,我们将在风世界网格环境中演示Q学习的应用并讨论结果。通过本视频,你将了解Q学习在一个示例马尔可夫决策过程中的表现,并洞察Q学习与SARSA算法之间的差异。
让我们回到风世界网格世界。这是一个无折扣的网格世界,其中存在“风”,当智能体经过有风的状态时,会被向上吹动。网格每一列下方显示的风力强度代表了该列的风力。智能体可以向四个方向移动,每一步都会获得-1的奖励。
为了进行比较,以下是SARSA算法在ε=0.1、α=0.5参数下的表现。和之前一样,这张图的Y轴表示完成的幕数,X轴表示时间步数。回忆一下,SARSA在前几幕学习缓慢,随后呈指数级改进,最后趋于平缓。
现在,让我们使用相同的参数设置来运行Q学习。
在展示结果之前,我们先思考一下可能会发生什么。也许SARSA的策略会表现得更好,因为它的价值函数考虑到了其ε-贪婪行为。也许Q学习会学得更快,因为它直接学习最优策略的价值函数。你认为会发生什么?
以下是实验结果。在开始时,两种算法以相似的速度学习。到了后期,Q学习似乎学到了一个更好的最终策略。
为什么Q学习在这里表现得更好?在没有进行更有针对性的实验之前,我们无法确定。也许Q学习的更新目标更稳定。Q学习对下一个动作的价值取最大值,因此只有当智能体学习到某个动作优于另一个时,它才会改变。相比之下,SARSA使用下一个动作价值的估计值作为其目标,每当智能体采取探索性动作时,这个目标就会改变。
也许你可以设计一个实验来彻底弄清这个问题。现在,让我们继续。
我们如何能让SARSA表现得更好呢?对于这个实验,步长参数α=0.5可能有点太高了。当智能体采取探索性动作时,这些大的更新可能会给SARSA带来麻烦。SARSA的最终策略显然不是最优的。
让我们将实验运行得更久一些,这次将α设为0.1。我们预计SARSA在较小的α下学习会更慢,但会找到一个更好的策略。看看发生了什么。
预测得到了证实。SARSA最终学到了与Q学习相同的策略,但速度更慢。我们知道两种算法都收敛到了相同的策略,因为两条线的斜率相等。斜率相等意味着两个智能体以相同的速率完成每一幕。
这个实验也凸显了强化学习中参数选择的影响。α、ε、初始值以及实验的长度都可能影响最终结果。

在本节课中,我们评估了Q学习在风世界网格中的表现,并深入了解了在这个简单的MDP上Q学习与SARSA的差异。我们看到了参数调整如何显著影响学习速度和最终策略的质量。
062:Q学习为何是离策略的?🤔
在本节课中,我们将探讨Q学习算法的一个核心特性:它是一种离策略算法,但却没有使用重要性采样。我们将理解其背后的原理,并比较在策略与离策略学习在控制任务中的不同表现。
核心概念回顾
上一节我们介绍了离策略算法通常使用重要性采样。本节中,我们来看看Q学习如何在不使用重要性采样的情况下实现离策略学习。
首先,回忆一下关键定义:智能体根据其目标策略下的期望回报来估计价值函数。在实际行为中,它遵循的是行为策略。当目标策略与行为策略相同时,智能体是在进行在策略学习;否则,就是离策略学习。
Q学习的离策略本质
SARSA是一个典型的在策略算法。在SARSA中,智能体基于其将要执行的下一个动作的价值进行自举更新,而这个动作是从其行为策略中采样得到的。
Q学习则不同。它基于下一个状态中最大的动作价值进行自举更新。这相当于从一个对最优策略的估计中采样动作,而不是从行为策略中采样。由于Q学习学习的是它可能采取的最佳动作,而不是它实际采取的动作,因此它是离策略的。
目标策略与行为策略
对于任何强化学习算法,一个自然的问题是:它的目标策略和行为策略分别是什么?
- Q学习的目标策略始终是相对于其当前价值函数的贪婪策略。
- 其行为策略可以是任何能在学习过程中持续访问所有“状态-动作”对的策略,例如ε-贪婪策略。
目标策略与行为策略之间的这种差异,证实了Q学习是离策略的。
为何无需重要性采样?
既然Q学习是离策略的,为什么我们看不到任何重要性采样比率呢?
原因在于,智能体是在用一个已知的策略(即贪婪目标策略)来估计动作价值。它不需要重要性采样比率来修正动作选择上的差异。
以下是其工作原理:
- 动作价值函数
Q(s, a)代表了在给定状态下采取每个动作后能获得的回报。 - 目标策略
π(a|s)代表了在给定状态下采取每个动作的概率。 - 将这两者结合,智能体可以计算出在目标策略下,从任何给定状态(特别是下一个状态
s_{t+1})出发的期望回报。
Q学习正是利用了这一技术来实现离策略学习。由于智能体的目标策略相对于其动作价值是贪婪的,所有非最大价值的动作概率为零。因此,从该状态出发的期望回报就等于该状态下的最大动作价值,即 max_a Q(s_{t+1}, a)。
在策略与离策略学习的性能比较
之前我们提到,Q学习不交替进行策略评估和策略改进,而是直接学习最优价值函数。直接学习最优策略听起来很棒,但在某些特定情况下,存在一些细微差别使其不那么理想。
让我们通过“悬崖行走”的例子来理解这些细微差别。
环境描述:
悬崖行走环境是一个无折扣的分幕式网格世界,底部边缘有一道悬崖。
- 在大多数步骤中,智能体获得-1的奖励。
- 如果掉下悬崖,智能体会回到起点,并获得-100的奖励。
我们在此环境中比较Q学习和SARSA,设置ε=0.1。
以下是两种算法的表现分析:
- Q学习:由于它学习最优价值函数,因此很快学会最优策略是紧贴悬崖边缘行走。然而,由于其行为是ε-贪婪的,紧贴悬崖行走偶尔会导致掉下悬崖。
- SARSA:它学习当前策略的价值,并考虑了ε-贪婪动作选择的影响。考虑到偶尔的探索性动作,它学会了走一条更长但更可靠的路径,通常可以避免随机掉下悬崖。
由于其更安全的路径,SARSA能够更可靠地到达目标。

总结

本节课中,我们一起学习了:
- Q学习是离策略算法:它通过基于对最优策略的估计(即最大Q值)进行更新来实现离策略学习,而不是基于实际采取的行为策略。
- 无需重要性采样:因为它使用已知的贪婪目标策略来计算下一个状态的期望回报(即最大Q值),所以不需要重要性采样来纠正策略差异。
- 性能差异:在像“悬崖行走”这样的任务中,直接学习最优策略的Q学习可能因为探索行为而承担更高风险;而在策略的SARSA通过考虑探索的影响,可能学到更安全、更稳健的策略。选择在策略还是离策略学习取决于具体任务的需求。


强化学习专项课程:P63:期望SARSA算法


在本节课中,我们将学习第三种时序差分控制方法——期望SARSA。我们将了解它与SARSA和Q学习的区别,并理解其核心思想、更新规则以及优缺点。
上一节我们讨论了SARSA和Q学习这两种时序差分控制方法。本节中,我们将介绍另一种方法:期望SARSA。通过本视频,你将能够解释期望SARSA算法。
回忆一下动作价值函数的贝尔曼方程,其中包含了对下一个“状态-动作”对价值的期望。将这个期望分解,我们可以看到它是对所有可能的下一状态和下一动作的求和。
SARSA通过从环境中采样下一个状态,并从其策略中采样下一个动作来估计这个期望。但智能体已经知道自己的策略,为什么还要采样下一个动作呢?相反,它应该直接计算这个期望。在这种情况下,我们可以对所有可能的下一动作的价值进行加权求和。权重是智能体策略下采取每个动作的概率。显式地计算对下一动作的期望,是期望SARSA算法背后的核心思想。
现在让我们看看期望SARSA的学习更新规则。
由于期望SARSA仍然基于动作价值函数的贝尔曼方程,它使用了我们熟悉的学习更新形式。该算法与SARSA几乎完全相同,除了TD误差使用的是下一动作价值的期望估计值,而不是下一动作价值的采样值。
这意味着在每一个时间步,智能体都必须根据策略的概率分布,对下一状态的动作价值进行平均。
例如,对于以下价值和策略,期望SARSA会使用值1.4作为其对期望下一动作价值的估计。
# 假设下一状态的动作价值 Q(s', a) 和策略 π(a|s')
Q_values = {'left': 1.0, 'right': 2.0}
policy = {'left': 0.6, 'right': 0.4}
# 计算期望值
expected_value = Q_values['left'] * policy['left'] + Q_values['right'] * policy['right']
print(expected_value) # 输出:1.4
然而,显式计算期望有一个巨大的好处:期望SARSA比SARSA拥有更稳定的更新目标。
让我们看一个例子来更清楚地说明这一点。在这个例子中,中间奖励是确定性的+1。SARSA和期望SARSA都从下一状态的真实动作价值开始。即使在这种理想情况下,SARSA所做的下一动作采样也可能导致其价值更新方向错误。它依赖于在多次更新的期望中方向是正确的这一事实。相比之下,期望SARSA的更新目标是完全正确的,并且不会使估计值偏离真实值。总的来说,期望SARSA的更新目标方差比SARSA低得多。

不过,较低的方差也带来了一个缺点。随着动作数量的增加,计算下一动作的平均值会变得更加昂贵。当存在许多动作时,计算平均值可能需要很长时间,尤其是因为每个时间步都必须计算这个平均值。
本节课中,我们一起学习了期望SARSA算法。我们了解到,该算法显式计算其策略下的期望值,这虽然比采样更昂贵,但具有更低的方差。
064:悬崖世界中的期望SARSA算法 🧠

在本节课中,我们将学习期望SARSA控制算法,并通过在悬崖行走环境中的实例,观察其实际表现。我们还将从经验上比较期望SARSA与SARSA算法的性能差异。
上一节我们介绍了期望SARSA控制算法。本节中,我们来看看它在具体环境中的运行效果。
通过本视频的学习,你将能够:
- 描述期望SARSA在悬崖行走环境示例中的行为。
- 通过实验比较期望SARSA和SARSA算法。
我们将再次使用悬崖行走环境,以便可以同时讨论SARSA、Q学习和期望SARSA算法。让我们先回顾一下这个环境。这是一个无折扣的分幕式网格世界,底部边缘有一片悬崖。
智能体移动到悬崖会使其回到起点,并获得-100的奖励。在其他情况下,每一步的奖励为-1。SARSA算法在这个领域表现优于Q学习,因为SARSA的策略考虑到了自身的探索行为。
今天,我们将比较ε=0.1时,期望SARSA与SARSA的表现。
下图是通过用不同的步长参数α值测试每个智能体而创建的。我们进行了100幕,并在50,000次独立运行中平均了所有结果。
Y轴显示每幕的平均回报,X轴显示步长值。
SARSA的性能随着步长值的增大而提高,但仅在一定范围内。在此例中,SARSA的最佳α值为0.9。期望SARSA在几乎所有α值上都优于SARSA。
期望SARSA能够更有效地使用更大的α值。这是因为它明确地对自身策略带来的随机性进行了平均。这个环境是确定性的,因此没有其他随机性来源需要考虑。这意味着对于给定的状态和动作,期望SARSA的更新是确定性的。相比之下,SARSA的更新可能因下一个动作的不同而有显著差异。
现在,让我们看看在100,000幕之后每幕的平均回报。此时,每个算法都已学到了所有能学到的内容。
期望SARSA的长期行为不受α影响。在这个例子中,它的更新是确定性的。因此,步长只决定了估计值接近其目标值的速度。
SARSA在这里的表现则大不相同。对于较大的α值,它甚至无法收敛。随着α减小,SARSA的长期性能逐渐接近期望SARSA。

在本节课中,我们一起学习了期望SARSA算法在悬崖世界中的表现。我们看到,期望SARSA能够在该环境中快速学习到一个良好的策略,并且相比SARSA算法,它对较大的步长参数具有更强的鲁棒性。
强化学习专项课程:P65:期望SARSA算法的通用性 🧠

在本节课中,我们将探讨期望SARSA算法与Q学习算法之间的关系,并理解期望SARSA如何在不使用重要性采样的情况下进行离策略学习。

到目前为止,我们已经学习了三种用于控制的时序差分算法:SARSA、Q学习和期望SARSA。其中,SARSA和期望SARSA都近似于同一个贝尔曼方程。本节中,我们将重点分析期望SARSA与Q学习之间的联系。
通过本视频的学习,你将理解期望SARSA如何在不使用重要性采样的前提下进行离策略学习,并解释期望SARSA如何将Q学习泛化。
首先,我们从同策略的情况开始分析,此时行为策略和目标策略是相同的。考虑期望SARSA的更新公式:
Q(S, A) ← Q(S, A) + α [R + γ * 𝔼[Q(S', A') | S'] - Q(S, A)]
在这种情况下,下一个动作 A' 是从策略 π 中采样的。然而,请注意,对动作的期望计算独立于在下一个状态中实际选择的动作。事实上,目标策略 π 不必等于行为策略。这意味着,与Q学习类似,期望SARSA可以在不使用重要性采样的前提下进行离策略学习。

接下来,我们看看当目标策略相对于其动作价值估计是贪婪策略时会发生什么。此时,在期望计算中只考虑具有最高价值的动作。这等价于计算下一个状态中所有动作的最大值,正如Q学习所做的那样。换句话说,Q学习是期望SARSA的一个特例。
在本节课中,我们展示了期望SARSA和Q学习在更新目标时都使用了其目标策略的期望。这一特性使得它们能够在不使用重要性采样的前提下进行离策略学习。当期望SARSA的目标策略是相对于其动作价值的贪婪策略时,它就完全等同于Q学习算法。
强化学习专项课程:04:第三周总结


在本节课中,我们将回顾第三周学习的核心内容,即如何使用时序差分方法进行控制。我们将总结SARSA、Q学习和期望SARSA这三种关键算法,并比较它们的特点。
上一节我们介绍了时序差分预测方法,本节中我们来看看如何将这些方法应用于控制问题,即寻找最优策略。本周学习的时序差分控制算法均基于贝尔曼方程。
以下是本周学习的三种主要算法:
- SARSA:该算法使用基于样本的贝尔曼方程版本。其目标是学习当前策略π下的动作价值函数 Qπ。其更新公式为:
Q(S, A) ← Q(S, A) + α [R + γ * Q(S‘, A’) - Q(S, A)] - Q学习:该算法基于贝尔曼最优方程。其目标是直接学习最优动作价值函数 Q*。其更新公式为:
Q(S, A) ← Q(S, A) + α [R + γ * maxₐ Q(S‘, a) - Q(S, A)] - 期望SARSA:该算法使用与SARSA相同的贝尔曼方程,但采用不同的采样方式。它在更新时对下一个状态可能采取的动作价值求期望。其更新公式为:
Q(S, A) ← Q(S, A) + α [R + γ * Σ π(a|S‘) * Q(S‘, a) - Q(S, A)]
接下来,我们探讨同策略与异策略学习的区别。
以下是关于同策略和异策略学习的要点:
- SARSA是一种同策略算法,它学习的是其当前正在遵循的策略的动作价值。
- Q学习是一种异策略算法,它学习的是最优策略的动作价值。
- 期望SARSA兼具两者特点,它既可以作为同策略算法,也可以作为异策略算法,能够学习任意给定策略的动作价值。
在衡量在线性能时,SARSA的表现可能优于Q学习。这是因为同策略控制方法会考虑其自身的探索行为。在悬崖漫步世界中,我们看到Q学习由于其探索性行动而频繁坠崖。相比之下,SARSA学会了更长但更安全的路径,很少坠崖,从而获得了更高的累积奖励。
随后,我们研究了一种对SARSA的改进算法,称为期望SARSA。在悬崖漫步世界的测试中,期望SARSA在所有步长参数值下的表现都优于SARSA。这是因为期望SARSA通过求期望值,减少了因其策略本身随机性带来的方差。正如其名,期望SARSA对下一个动作的价值进行了期望计算。

本节课中我们一起学习了三种基于时序差分的控制算法:SARSA、Q学习和期望SARSA。我们理解了它们与贝尔曼方程的关系、同策略与异策略的区别,并通过悬崖漫步示例看到了它们在性能上的差异。下一模块,我们将学习如何将规划、学习和行动结合起来。
强化学习专项课程:03:什么是模型

在本节课中,我们将要学习强化学习中的一个核心概念:模型。我们将了解模型是什么,它如何帮助智能体进行规划,以及两种主要的模型类型:样本模型和分布模型。
有时我们做决定时不会过多思考,例如决定如何开车去上班。其他时候,我们会基于对世界的理解,坐下来想象许多可能的情景。我们可以利用这些想象的结果来决定做什么或不做什么。例如,如果我们用一只手拿着一个易碎物品,我们可以想象它掉落并摔碎的情景,并据此做出选择。
我们已经见过像时序差分这样的基于样本的方法,它们仅从样本经验中学习。我们也见过像动态规划这样的方法,它们利用关于事物运作方式的完整信息进行规划,而无需实际做出决策。

如果能获得一种结合两者优点的中间方法,那将会更好。本周,我们将通过Dyna架构来统一这些策略。在本视频中,我们将讨论模型。视频结束时,你将能够描述模型及其用途,将模型分类为分布模型或样本模型,并识别何时使用分布模型或样本模型。
模型用于存储关于环境动态的知识。当我们想象不同情景以辅助决策时,这植根于我们对世界运作方式的知识。给定一个特定的状态和动作,模型应该能产生一个可能的下一个状态和奖励。这使我们能够看到动作的结果,而无需实际执行它。
模型允许进行规划。规划指的是利用模型来改进策略的过程。使用模型进行规划的一种方法是模拟经验,并像这些经验真实发生一样执行价值函数更新。通过改进价值估计,我们可以做出更明智的决策。
模拟经验提高了样本效率。增加模拟经验意味着智能体需要更少地与真实世界交互,就能得出相同的策略。
现在,让我们谈谈可能对我们有用的不同类型的模型。
以下是两种主要的模型类型:
- 样本模型:它根据某些潜在概率产生一个实际的结果。例如,抛硬币的样本模型可以生成一个随机的正面和反面序列。
- 分布模型:它完整地指定了每个结果的可能性或概率。在抛硬币的例子中,它会说正面可能出现50%的时间,反面可能出现50%的时间。它还可以利用这些信息计算出任何正面和反面序列出现的几率。
样本模型在计算上可能成本较低,因为可以根据一组规则产生随机结果。例如,要抛五次硬币,样本模型可以独立地随机选择0或1五次,它只需要为每次抛掷产生一个单一结果。

作为实践中样本模型的一个例子,在2017年,Cloudflare公司使用从熔岩灯墙采样的随机模式来加密全球10%的互联网流量。这些样本是在给定时间点熔岩灯墙的随机配置,生成这些样本的规则程序由熔岩灯的动态定义。

分布模型包含更多信息,但可能难以指定,并且可能变得非常庞大。让我们回到抛五次硬币的例子。一个分布模型会枚举五次抛掷中你可能得到的所有可能的正面和反面序列,并为每个序列分配一个概率。对于这个简单的问题,这将包括完整描述32种可能的结果。
分布模型可以通过根据每个结果的明确概率抽取结果,来用作样本模型。但它们包含的信息可能比仅仅为了获取样本所需的信息更多。

在本节课中,我们一起学习了模型如何通过一个称为规划的过程来改进策略。我们讨论了两种不同类型的模型:样本模型和分布模型。下次,我们将更深入地探讨这些模型之间的区别。
068:样本模型与分布模型的比较 🎲
在本节课中,我们将学习模型如何表示世界运作的知识。我们将重点讨论两种类型的模型:样本模型和分布模型。通过一个具体的例子,我们将阐明这两种模型之间的关键区别。课程结束时,你将能够描述样本模型和分布模型的优缺点,并解释为何样本模型通常比分布模型更紧凑。
模型代表了我们对世界运作方式的知识。我们已经讨论过两种类型的模型:样本模型和分布模型。本节视频中,我们将聚焦于一个具体示例,以阐明样本模型与分布模型之间的核心区别。
一个具体的例子:掷骰子 🎯
让我们考虑掷12个骰子的问题。只要有足够的耐心,用一个骰子重复掷12次就可以轻松完成。

将单个骰子掷12次是样本模型的一个例子。在程序上,这意味着生成12次1到6之间的随机数。
这种方法非常紧凑,并且不考虑联合概率。
相比之下,为掷12个骰子建立完整的联合分布模型则需要多得多的工作。我们必须考虑12个骰子的每一种可能结果,并为每种结果分配一个概率。
以下是随着骰子数量增加,可能结果数量的增长情况:
- 1个骰子:6种结果
- 2个骰子:36种结果
- 3个骰子:216种结果
- 4个骰子:1,296种结果
- 当达到12个骰子时,我们需要考虑超过20亿种可能的结果。
然而,分布模型有一个有用的特性:它能产生结果的精确概率。例如,我们可以直接计算期望结果,或者量化结果的可变性。
两种模型的优缺点总结 ⚖️

上一节我们通过掷骰子的例子看到了两种模型的基本形式。现在我们来总结一下每种模型的优势。

以下是样本模型的主要优点:
- 所需内存更少:表示方式非常紧凑。
另一方面,分布模型具有以下优势:
- 可计算精确期望值:通过对所有可能结果按其概率加权求和,可以直接计算出精确的期望结果。需要注意的是,样本模型只能通过平均许多样本来近似这个期望值。
- 具备风险评估的灵活性:了解精确的概率分布使得评估风险成为可能。例如,医生在开药时,会考虑许多可能的副作用及其发生的概率。
课程总结 📝
本节课中,我们一起学习了样本模型与分布模型的比较。
我们描述了样本模型如何能比分布模型更紧凑,以及分布模型中明确的概率信息如何在某些情况下(例如计算期望值)非常有用。
069:随机表格Q规划 🧠

在本节课中,我们将学习如何利用模型(Model)进行规划(Planning),即在不与环境实际交互的情况下,通过模拟经验来改进策略。我们将重点介绍一种具体的规划方法:随机采样一步表格Q规划。
模型与规划
上一节我们介绍了模型的概念。本节中,我们来看看如何将模型应用于强化学习。
规划是一个以模型作为输入,并输出一个改进后策略的过程。一种可能的规划方法是先从模型中采样经验。这类似于根据你对世界运作方式的理解,想象世界中可能发生的情景。然后,这些生成的经验可以像真实世界交互一样,用于更新价值函数。基于这些改进后的价值函数采取贪婪行为,就能得到一个改进的策略。


从Q学习到Q规划
回顾一下,Q学习利用来自环境的经验,执行更新以改进策略。在Q规划中,我们则利用来自模型的模拟经验,执行类似的更新来改进策略。
随机采样一步表格Q规划(Random sample one-step tabular Q-planning)阐释了这一思想。该方法假设我们拥有一个关于状态转移动态的采样模型,并且假设我们有一个采样相关状态-动作对的策略。一种可能的选项是均匀地采样状态和动作。
以下是该算法的步骤:
- 从所有状态和动作的集合中,随机选择一个状态-动作对
(S, A)。 - 用这个状态-动作对查询采样模型,以生成下一个状态
S'和奖励R的样本。 - 对这个模型转移样本执行一次Q学习更新。更新公式为:
Q(S, A) ← Q(S, A) + α [R + γ * max_a Q(S', a) - Q(S, A)] - 根据更新后的动作价值函数,通过采取贪婪行为来改进策略。
一个关键点是,这种规划方法只使用想象或模拟的经验。所有这些更新都可以在不与环境交互的情况下完成,或者与交互循环并行执行。
规划的优势与应用场景
想象一下,智能体只能在特定的时间点采取行动,但学习更新可以相对快速地执行。这就导致了从一次学习更新完成到采取下一个动作之间,存在一些等待时间。我们可以用规划更新来填充这段等待时间。
设想我们有一个站在悬崖边的机器人。假设它的模型知道掉下悬崖的后果,但这种后果尚未在其价值函数或策略中得到准确体现。它可以生成掉下悬崖的模拟经验,并对这些转移样本执行多次规划步骤。最终,它的价值函数将能更好地反映掉下悬崖是糟糕的,其策略也会让它远离悬崖。

总结
本节课中,我们一起学习了:
- 规划方法如何利用模拟经验来改进策略。
- 随机采样一步表格Q规划如何使用采样模型来随机生成经验。
- 价值函数如何通过Q学习更新得到改进。
070:Dyna架构 🧠


在本节课中,我们将要学习如何将直接强化学习与规划相结合,介绍一种名为Dyna的架构。我们将了解模拟经验与真实环境经验的区别,并理解Dyna如何整合这两种更新方式,从而更高效地利用有限的经验数据。
经验的两个来源
到目前为止,我们讨论了两个经验来源:环境和模型。
在直接强化学习中,智能体通过与真实世界交互产生的经验进行学习,例如Q学习算法。
同时,智能体也可以从模型中生成模拟经验,并将其用于规划。
结合直接RL与规划:Dyna架构
上一节我们介绍了经验的两种来源,本节中我们来看看如何将它们结合起来。
Dyna架构就是一种结合直接强化学习更新和规划更新的方法。以下是其主要组成部分:
- 环境与策略:它们生成一系列真实经验流。
- 直接RL更新:我们使用上述真实经验进行直接强化学习更新。
- 模型:要进行规划,我们需要一个模型。这个模型需要通过某种方式获得。
- 模型学习:环境经验可用于学习这个模型。
- 搜索控制:我们希望控制模型如何生成模拟经验,即智能体将从哪些状态开始规划。
- 规划更新:使用模型生成的模拟经验执行规划更新。
Dyna工作原理图解
为了更直观地理解,让我们通过一个简单的迷宫示例来看看Dyna是如何工作的。
我们有一个迷宫和一个试图找到出口的机器人。这是一个折扣问题,机器人在目标点获得+1奖励,其他情况奖励为0。
- 初始探索:开始时,机器人一无所知。它随机遍历迷宫,直到第一次偶然到达目标。
- 直接RL更新:机器人只更新了一个动作价值(用蓝色表示),这是唯一产生非零奖励的状态转移。这次更新由直接强化学习完成。
- 模型学习:Dyna利用第一轮探索中产生的所有经验来学习环境模型。黄色方格代表第一轮中访问过的状态。
- 规划阶段:第一轮结束后,规划开始发挥作用。机器人脑海中的“思想泡泡”代表其内部模型。模型知道机器人在第一轮中访问过的所有状态会发生什么。
- 执行规划:在第二轮开始时运行规划循环。Dyna可以模拟从第一轮访问过的任何“状态-动作”对出发的转移。规划过程回放这些模拟转移,就像它们在真实世界中发生一样。
- 策略改进:规划的每一步都对模拟转移应用Q学习更新来更新价值函数。经过足够的规划步骤,智能体可以改进其在第一轮访问过的所有状态下的策略。
- 结果:规划产生了一个相当不错的策略(尽管并非完美,在某些未访问过的状态策略仍是随机的,用白色方格表示)。现在,机器人仅经过一轮真实探索,就知道如何快速到达目标。
相比之下,纯Q学习需要许多轮探索才能达到类似的性能。Dyna在每一步进行了更多计算,但更高效地利用了有限的经验。
注意:这是一个简化示意图。实际的Dyna在第二轮中会继续探索和规划,因此策略偶尔会采取随机动作,并因持续的规划而不断改进。
总结与预告
本节课中我们一起学习了Dyna架构,它通过结合直接强化学习和规划更新,能够同时从环境和模型经验中学习。

我们将在下次讨论如何具体实现Dyna。
本节课的内容到此结束。希望下次课程再见。
071:Dyna算法详解

在本节课中,我们将深入探讨强化学习中的Dyna架构,并详细介绍其一个具体实现——表格型Dyna-Q算法。我们将学习该算法如何统一规划、学习和行动,并理解其核心组成部分。

概述
上一节我们介绍了Dyna架构如何统一规划、学习和行动,并引入了模型学习和搜索控制等概念。本节中,我们将具体分析这些部分是如何协同工作的。
表格型Dyna-Q算法
表格型Dyna-Q是Dyna架构的一个具体实例。通过本部分的学习,你将能够描述表格型Dyna-Q的工作原理,并识别算法中的直接强化学习、规划、模型学习和搜索控制部分。
模型学习
首先,我们来讨论表格型Dyna-Q算法如何学习模型。该算法假设环境转移是确定性的。例如,当智能体(如一只兔子)在状态A选择向右移动的动作时,只会产生一个确定的结果:兔子以零奖励转移到状态B。同样,在状态B选择向右移动,兔子会停留在状态B并获得奖励1。在状态B选择向左移动,则总是以零奖励转移到状态A。
当智能体经历过这些转移后,模型就知道了这些状态-动作对会发生什么。如果一个转移发生过一次,那么未来它总会以相同的方式发生。模型可以对此确信无疑。
算法流程详解
让我们详细查看Dyna-Q算法的流程。首先,算法包含通常的智能体-环境交互循环。
在当前状态下,智能体根据其ε-贪婪策略选择一个动作,然后观察得到的奖励和下一个状态。接着,它使用这个转移进行Q学习更新,这一步我们称之为直接强化学习。如果算法在此停止,那么得到的就是标准的Q学习算法。
从这里开始,Dyna-Q与无模型方法产生了区别。Dyna-Q会利用这个转移执行一个模型学习步骤。具体做法是,算法会记忆给定状态-动作对所产生的下一个状态和奖励。这之所以可行,是因为我们假设环境是确定性的。
随后,Dyna-Q会执行多步规划。每个规划步骤包含三个子步骤:搜索控制、模型查询和价值更新。
以下是规划步骤的具体过程:
- 搜索控制:随机选择一个智能体之前访问过的状态-动作对。这必须是一个智能体曾经见过的状态-动作对,否则模型将不知道接下来会发生什么。
- 模型查询:给定这个状态-动作对,我们查询模型以获得下一个状态和奖励。这样我们就生成了一个模拟的转移。
- 价值更新:Dyna-Q使用这个模拟的转移执行一次Q学习更新。
规划步骤会重复多次。最重要的一点是,Dyna-Q会对每一次环境转移执行多次规划更新。
以上就是表格型Dyna-Q,它是Dyna架构的一个简单实例。
示例:机器人寻宝
让我们通过一个机器人朋友的例子来更好地理解Dyna-Q算法。请注意,这只是一个用于建立直观理解的示意图。
和之前一样,机器人最初对环境一无所知。它通过与环境的交互逐步构建模型。在第一个回合中,机器人用了184步才到达目标,在此期间,智能体只改变了目标旁边那个状态-动作对的价值。
如果没有规划,接下来的几个回合可能同样漫长。
现在让我们观察下一个回合,并研究在每一步执行100次规划步骤所带来的影响。上一次我们讨论这个机器人时,它在每一步做了更多的规划,因此这次Dyna-Q需要更长的时间才能找到一个好的策略。
仅仅经过一步,规划就更新了另外两个状态的价值。现在,智能体知道了在最后一条走廊中应该采取的正确动作。
让我们再运行Dyna-Q一段时间。规划的影响是相当显著的。Dyna-Q将奖励信息传播到了整个状态空间。最终,智能体知道了从大多数状态导航到目标的有效策略。
仅经过两个回合,通过规划计算出的策略只需要18步就能到达目标。这比第一个回合的步数缩短了10倍以上。
表格型Dyna-Q对价值函数执行了比没有规划时多得多的更新。它更好地利用了与环境的有限交互。

总结
本节课中,我们一起学习了表格型Dyna-Q如何通过价值函数将规划、学习和行动结合起来。我们还研究了Dyna-Q在一个小型网格世界环境中是如何更新其价值函数的。该算法通过利用经验进行模型学习和模拟规划,显著提高了数据利用效率和学习速度。
072:简单迷宫中的Dyna-Q学习 🧠

在本节课中,我们将通过一个简单的网格世界迷宫环境,对比分析表格型Dyna-Q算法与无模型Q学习算法的性能。我们将重点关注规划步骤如何影响学习效率,并解释模型如何让智能体以更少的环境交互次数学到有效的策略。
上一节我们介绍了Dyna架构及其如何结合规划、学习和行动。本节中,我们来看看Dyna-Q在一个具体网格世界中的实际运行效果。
今天我们将在这个小型迷宫环境中进行一些实验。和之前一样,智能体有四个可执行的动作。进入目标状态会产生+1的奖励,所有其他状态转移产生的奖励均为0。这是一个分幕式任务,我们将使用折扣因子 γ = 0.95。
我们将比较具有不同规划步数的Dyna-Q算法。我们设置了三个智能体进行对比:
- 每个智能体都使用学习率
α = 0.1和探索率ε = 0.1。 - 所有三个智能体的动作价值估计初始值都设为0。
- 实验共运行50幕,重复30次,然后对结果取平均。
以下是实验结果:
我们可以绘制出智能体在经历越来越多幕之后,完成每一幕所需的平均步数。如果智能体表现良好,那么随着幕数增加,所需步数应该减少。也就是说,在Y轴上,数值越低越好。
- 如果使用0个规划步数运行Dyna-Q,我们得到的就是精确的Q学习算法。如图所示,它进步缓慢,最终稳定在每幕约14步的水平。
- 如果使用5个规划步数运行Dyna-Q,它能达到与Q学习相同的性能,但速度要快得多。
- 使用50个规划步数的Dyna-Q仅需大约3幕就能找到一个优秀的策略。
Dyna-Q的效率要高得多。观察Y轴,在经历2幕之后,Q学习找到的策略仍然需要数百步才能走出迷宫。而对于相同次数的环境交互,Dyna-Q能学到的东西要多得多。这表明,如果模型正确,规划能更有效地利用环境经验。

为了更直观地理解,让我们在一个略有不同的迷宫中可视化学习过程。我们使用箭头表示每个状态下根据估计价值得出的贪婪动作。没有箭头的状态表示在该策略下所有动作被选择的概率均等。
经过第一幕后,Q学习只更新了一个动作价值,即目标旁边状态中“向上”动作对应的价值。因为这是唯一经历了非零奖励转移的状态。需要再经过好几幕,才能通过自举将状态价值传播回附近的其他状态。
让我们更仔细地观察搜索控制如何影响规划。我们的机器人将采取与标准Dyna-Q略有不同的操作,以便更清晰地阐明观点。
我们首先设置10个规划步数,并连续调用规划循环10次。这样总共进行了100步规划。正如你所见,许多规划更新并未改变价值函数。事实上,在100步规划之后,智能体只更新了两个“状态-动作”对的价值。
我们继续实验。这次,我们尝试每次调用进行100步规划,并让智能体运行更长时间。即使有100个规划步数,最初几次调用也只更新了少数几个动作价值。
为什么智能体需要这么多规划步数才能学到合理的价值函数和策略?智能体需要大量规划步数,是因为搜索控制是随机采样“状态-动作”对的。如果采样的“状态-动作”对产生的时序差分误差为零,那么规划更新将不会产生任何效果。在这个环境中,由于所有奖励都是零,且初始价值也是零,这种情况经常发生。
如果我们以更高效的方式排序“状态-动作”对会发生什么?事实证明,智能体可以仅使用六分之一的规划更新就学会一个好策略。在大型环境中,随机搜索控制会带来更大的问题。如果你想深入了解这个主题,请查阅教材的第8.4节。

本节课中,我们在一个简单的网格世界中测试了表格型Dyna-Q算法。我们看到了规划如何能显著加速学习。在我们的实验中,进行的规划越多,智能体的表现就越好。规划使智能体能够从真实经验和模型经验中同时学习,从而更高效地利用有限的环境交互。
强化学习专项课程:P73:模型不准确时的应对策略 🧠
在本节课中,我们将探讨当智能体使用的模型不准确时会发生什么。我们将学习识别模型不准确的几种方式,解释使用不准确模型进行规划的影响,并描述智能体如何能够成功地与不完整的模型一起进行规划。
模型不准确的含义
到目前为止,在课程中我们已经讨论了智能体如何通过使用模型生成的经验进行规划,来改进其策略或价值函数。
那么,如果智能体使用来自不准确模型的经验进行规划,会发生什么情况呢?
首先,我们来谈谈模型不准确意味着什么。当模型存储的状态转移与环境实际发生的情况不同时,模型就是不准确的。
在学习开始时,智能体尚未尝试过几乎所有状态中的大多数动作。与在这些状态下尝试这些动作相关的转移信息,在模型中完全是缺失的。我们称这种缺少转移信息的模型为不完整模型。
如果环境发生变化,模型也可能变得不准确。在某个状态下采取一个动作,可能导致的下一个状态和奖励,与智能体在环境变化前观察到的情况不同。我们说模型不准确,是因为实际发生的情况与模型所描述的情况不同。

使用不准确模型进行规划的影响
使用不准确模型进行规划的效果,取决于模型不准确的具体方式。
在开始时,模型是不完整的。由于模型无法产生下一个状态或奖励,因此无法用于规划。然而,随着智能体与环境交互,模型会存储越来越多的转移信息。然后,智能体可以通过模拟它以前见过的转移来执行更新。这意味着,只要智能体见过一些转移,它就可以使用模型进行规划。
现在,让我们思考环境变化如何影响规划。
想象一下,智能体已经访问过每一个“状态-动作”对,并将其经验存储在模型中。然后环境发生了变化。模型中的某个转移不再反映环境中的实际转移。当智能体尝试使用其不准确的模型进行规划时,会发生什么?
如果智能体尝试使用模型中一个不正确的转移来执行规划更新,那么智能体更新的价值函数或策略可能会朝着错误的方向改变。请记住,规划是根据模型认为会发生的情况来改进策略,而不是根据环境中实际会发生的情况。当环境发生变化时,模型就会过时。使用该模型进行规划,很可能会使智能体的策略相对于环境变得更差。
如何与不完整模型成功规划
既然我们已经了解了模型可能不准确的两种主要方式,现在让我们思考智能体如何能够成功地与不完整的模型一起进行规划。
实际上,我们已经介绍过一种这样的算法:Dyna-Q。
让我们看看 Dyna-Q 是如何与不完整模型一起进行规划的。
在规划步骤中,我们必须确定使用哪些“状态-动作”对来查询模型。模型只知道它已经访问过的“状态-动作”对的下一个状态和奖励。因此,Dyna-Q 只能从先前访问过的“状态-动作”对进行规划更新。

以下是 Dyna-Q 算法的核心规划步骤代码表示:
# 假设 model 是一个存储了已访问 (state, action) -> (next_state, reward) 的字典
# visited_sa_pairs 是已访问过的 (state, action) 对列表
for _ in range(num_planning_steps):
# 仅从已访问过的对中采样
state, action = random.choice(visited_sa_pairs)
next_state, reward = model[(state, action)]
# 使用这些模拟经验进行 Q-learning 更新
# ... 更新 Q(state, action) ...
Dyna-Q 只对它已经见过的转移进行规划,因此在学习的最初几个时间步,Dyna-Q 可能会对同一个转移进行相当多的规划更新。然而,随着 Dyna-Q 在环境中访问更多的“状态-动作”对,其规划更新在整个“状态-动作”空间中的分布会变得更加均匀。

总结
在本节课中,我们一起学习了:
- 模型可能因为不完整(缺少转移信息)或环境发生变化而变得不准确。
- 使用不准确的模型进行规划,是根据模型(而非真实环境)来改进策略或价值函数,这可能导致策略在真实环境中表现变差。
- Dyna-Q 算法通过仅采样先前访问过的“状态-动作”对进行模拟更新,实现了与不完整模型的成功规划。
理解模型准确性的局限性和应对方法,是构建稳健强化学习智能体的关键一步。
074:深入探讨变化环境中的问题 🧠

在本节课中,我们将学习当智能体的环境模型因环境变化而变得不准确时,智能体应如何应对。我们将探讨模型不准确性如何引发新的探索与利用权衡,并详细介绍Dyna-Q+算法如何通过引入探索奖励来解决这一挑战。
我们之前讨论了智能体如何在模型不完整的情况下进行规划。

现在,让我们探讨智能体如何应对因环境变化而导致模型不准确的问题。
通过本视频的学习,你将能够:解释模型不准确性如何产生另一种探索与利用的权衡,并描述Dyna-Q+算法如何应对这种权衡。
当智能体的模型不准确时,基于此模型的规划很可能会使策略或价值函数相对于真实环境变得更差。
这意味着智能体有强烈的动机确保其模型保持准确。在这个例子中,兔子的初始模型认为,如果它在最左侧格子选择向右移动,将直接到达胡萝卜处。
然而,在向右移动后,兔子发现自己处于中间的格子。
经历了这次状态转移后,兔子可以更新它对世界的模型。
这次更新反映了在最左侧格子选择向右移动动作将导致移动到中间格子。
我们看到兔子在环境中经历一次转移后纠正了它的模型。
通常,智能体可能希望复核其模型中所有的状态转移是否正确。
然而,复核那些低价值动作对应的转移通常会导致低回报。
在变化的环境中,智能体的模型可能随时变得不准确。
因此,智能体必须做出选择:进行探索以确保模型准确;或者假设模型正确,利用模型来计算最优策略。
当环境发生变化时,模型将变得不正确。
它将保持不正确,直到智能体重新访问环境中发生变化的那个部分并更新模型。
这表明智能体应该探索它有一段时间未曾访问过的地方。
让我们思考一下这如何实现。粗略地说,模型在智能体长时间未访问的状态上更可能出错。
例如,假设兔子知道乌龟起始于某个格子。
由于乌龟移动缓慢,它在最初几个时间步内无法移动很远。然而,经过很长时间后,乌龟可能处于与起始位置完全不同的格子,这使得兔子的模型变得不准确。
为了鼓励智能体定期重新访问状态,我们可以在规划使用的奖励上添加一个奖励加成。
这个加成项是 Kappa * sqrt(tau)。其中,R是来自模型的奖励,tau是该状态-动作对上次在真实环境中被访问后经过的时间。
tau不会在规划循环中更新,因为那并非一次真实的访问。
Kappa是一个小的常数,用于控制加成项对规划更新的影响程度。如果Kappa为零,我们将完全忽略这个加成。
将这种探索奖励加成添加到规划更新中,就得到了Dyna-Q+算法。
通过人为地增加规划中使用的奖励,我们提高了最近未被访问过的状态-动作对的价值。
这具体是如何鼓励探索的呢?想象一个状态-动作对(s, a)已经很长时间没有被访问过。这意味着tau值会很大。
随着tau增长,奖励加成变得越来越大。最终,由于巨大的加成,规划过程将改变策略,使智能体直接前往状态s。
当智能体最终访问状态s时,它可能会看到高额奖励,也可能会失望。
无论哪种情况,模型都将被更新以反映环境的真实动态。
让我们通过“捷径迷宫”的例子来理解Dyna-Q和Dyna-Q+的区别。在这个例子中,目标是从起始状态尽快到达目标状态。
除终止转移产生+1的奖励外,其他所有转移的奖励均为零。
折扣因子小于1,因为我们希望鼓励智能体快速到达目标。
Dyna-Q和Dyna-Q+都使用ε-贪心动作选择。
在实验的前半段,Dyna-Q和Dyna-Q+的行为非常相似。在这种情况下,Dyna-Q+增强的探索性帮助它更快地找到了一个好的策略。这就是为什么图中Dyna-Q+的曲线位于Dyna-Q曲线上方。
现在,我们在墙的右侧创建一条捷径。
让我们看看Dyna-Q和Dyna-Q+如何适应这个变化。它们能找到穿过墙右侧到达目标的更短路径吗?
以下是结果:Dyna-Q+在环境变化后不久就找到了捷径。而Dyna-Q在给定的时间内没有找到捷径。
最终,Dyna-Q通过使用ε-贪心策略重新探索整个状态-动作空间也能找到捷径,但这至少需要连续执行七次探索性动作,因此可能需要非常长的时间。
在这个环境中,Dyna-Q+持续且系统性的探索是关键。

在本节课中,我们讨论了模型不准确性如何产生一种新的探索与利用权衡变体。智能体必须进行探索以确保其模型准确。
我们还探讨了Dyna-Q+算法如何利用探索奖励加成来探索环境,从而在动态变化的世界中更有效地学习和适应。
075:自动驾驶、机器人技术与基于模型的强化学习 🚗🤖


在本节课中,我们将跟随Aurora Innovation的首席技术官Drew Bagnell,探讨自动驾驶、机器人技术领域如何应用基于模型的强化学习。我们将重点了解处理连续状态和动作空间的核心方法,特别是二次价值函数近似技术。
大家好,我是Drew Bagnell,Aurora Innovation的首席技术官。
今天我将与大家探讨自动驾驶、机器人技术以及基于模型的强化学习。
我们正处在一场机器人技术革命的起点,从机械臂操作到无人机,再到自动驾驶汽车。
这些技术普遍深度依赖于机器学习。
例如,在感知领域,近二十年来,如果没有机器学习,我们几乎无法实现可靠的感知系统。
大家现在看到的视频中,一辆自动驾驶汽车正在典型的城市复杂环境中行驶。
蓝色框显示的是基于机器学习的感知系统,它正在检测和理解停放及行驶中车辆的运动。
金色框标识的是共享道路的骑行者。
红色框则标识了密集的行人群。
在这些应用中,实现所有天气和遮挡情况下的极高精度至关重要。
过去十年中,一个有趣的趋势是在决策过程中使用机器学习的重要性日益增加。
在城市环境中,决策制定非常复杂。
例如,这里展示的是一辆自动驾驶汽车在密集的人流中寻找穿行间隙。
这项任务的难点在于场景上下文和其他参与者的重要性。
事实证明,为类似此处演示的问题,甚至是像停车标志或并道这样简单的情况,手工制定规则都非常困难。
大家会注意到,我讨论的这些机器人技术示例都依赖于连续的状态和动作空间。
这里展示的是一个将基于模型的强化学习应用于特技直升机控制的精彩案例。
在Pieter Abbeel及其同事的这项工作中,他们证明了可以在连续的状态和动作空间(即模型直升机的位置、速度和控制指令)上,使用基于模型的强化学习技术,使其完成卓越的特技飞行。
使此类技术变得实用的关键,在于使用了直升机动力学的连续状态和动作模型。
什么是模型?🤔
那么,模型指的是什么?
所谓模型,我指的是一个转移函数或动力学模型,它是一个将当前状态和动作映射到下一个状态的函数。
同时,也包括一个可以评估在特定状态和动作下成本的函数。
该领域一个不为人知的秘密是,实际上所有涉及决策的机器人学习问题,在某种程度上都是基于模型的。
你可能会问,为什么会这样?
从根本上说,机器人与世界的交互是昂贵且耗时的。
常言道,宁可在仿真中失败,也不要在现实世界中犯错。
将这种直觉形式化的方法是讨论样本复杂度,即要达到高性能需要与世界进行多少次交互。
我们从实践和近期的理论研究中了解到,使用模型进行学习所需的交互次数,可能比不使用模型时呈指数级减少。
利用连续状态动作模型 🧮
接下来,我将带大家了解如何利用连续状态和动作模型。
我们将使用二次价值函数近似。
二次价值函数近似是一种用于基于模型的强化学习的强大技术,其根源可追溯到20世纪60年代的最优控制理论。
这类技术正是上面看到的精彩直升机特技表演中所使用的,并且被广泛用于从无人机到医疗机器人,从机械臂到自动驾驶汽车的轨迹生成。
这种对价值函数(同样是连续状态和动作)的二次形式近似特别优雅,原因有几个:
- 对于一类简单的系统(特别是那些动力学是线性且成本是二次型的系统),这种二次价值函数近似是精确的,而非近似。
- 对于其他问题,当动作价值函数在连续状态或动作上是凸的或局部凸的时,它被证明是对真实动作价值函数的优秀局部近似。
这里的关键在于,给定这种近似,我们可以以闭式解的形式快速计算出最优策略,即使是在连续动作空间中。
因此,实际动手计算最优策略是什么,是一个有趣的练习。
计算最优策略:一个练习 ✍️
对于单个标量状态变量 X 和单个标量控制或动作变量 A,手动进行这个计算是值得的。
如果你熟悉矩阵微积分,这会是一个非常快速的计算;但如果不熟悉,花些时间理解其工作原理是值得的。
美妙之处在于,一旦计算出这个最优策略,你可以将其代回动作价值函数,并提取出最优价值函数 V,而 V 也将是二次型的。
利用这一点的通用技术家族被称为微分动态规划。
整合与迭代:微分动态规划 🔄
一旦完成了上述练习,你可以将其与已在动态规划或使用贝尔曼方程中学到的技术结合起来,计算所有时间步的最优策略。
其思想是,我们以标准的动态规划形式反向进行时间迭代。
在每个时间步,我们计算模型和已知成本函数的一阶或二阶泰勒级数近似。
然后,我们使用贝尔曼方程,在给定未来价值的二次近似以及我们刚刚计算的模型和成本的二次近似的情况下,反向推导出动作价值函数的二次近似。
接着,你使用上面所做的练习来计算时间步 t-1 的最优策略,从而得到该步的最优价值。
这个过程在时间上反向迭代。
现在,利用我们描述的方法,然后回过头来利用我们得到的新策略来改进泰勒级数近似,是非常常见的。可以将其视为为我们提供了一个新的点来对模型进行线性化。
深入学习资源 📚
关于其中的代数运算和实际实现,有很多细节。幸运的是,网上有大量优秀的资源可供利用,以深入了解这些技术。
你可以找到我关于上述讨论技术的笔记,以及Katerina Fragkiadaki关于同一主题的讲座。
我还要指出,Yevgen Chebotar等人的论文《Online Trajectory Optimization》对于我刚描述的方法阐述得特别清晰易懂。
总结 📝
本节课中,我们一起学习了基于模型的强化学习在自动驾驶和机器人技术中的关键作用。
我们了解到,使用模型可以显著降低学习的样本复杂度。
我们重点探讨了二次价值函数近似这一强大工具,它允许我们在连续状态和动作空间中高效地计算最优策略。
通过微分动态规划方法,我们可以迭代地优化策略。
最后,我们掌握了如何通过泰勒级数近似来构建和优化模型,从而解决实际的强化学习问题。
现在,我们已经有了一种可以利用连续状态和动作模型来学习最优或接近最优策略的技术,下一步我们将讨论如何构建模型以解决更广泛的RL问题。
强化学习专项课程:04:第四周总结


在本节课中,我们将回顾第四周学习的核心概念与算法。本周我们聚焦于规划、学习与行动的结合,探讨了模型、规划算法以及如何整合它们以构建更高效的智能体。
🧠 第一课:模型介绍
上一节我们完成了对学习方法的探讨,本节中我们来看看智能体如何利用对环境的理解进行规划。我们首先引入了模型的概念,并讨论了分布模型与样本模型的区别。
- 分布模型:存储每个可能结果发生的概率。然而,这可能需要大量的内存。
- 样本模型:通常比分布模型紧凑得多,因为它们不显式存储每个结果的概率。
🔄 第二课:一步Q规划
了解了模型的基本类型后,我们来看看如何利用模型进行规划。我们介绍了一步Q规划。Q规划使用与Q学习相同的更新规则,但其使用的经验是由模型生成的,而非来自真实环境。
其更新公式与Q学习一致:
Q(S, A) ← Q(S, A) + α [R + γ * max_a Q(S', a) - Q(S, A)]
区别在于 (S, A, R, S') 这个元组来源于模型模拟,而非实际交互。
🏗️ 第三课:Dyna架构
我们已经分别学习了利用真实经验的学习和利用模型经验的规划,本节我们将二者结合。我们引入了Dyna架构。Dyna将规划和学习整合在同一个智能体中。
我们看到,Dyna-Q智能体可以通过执行多次规划更新,显著加快学习速度。其核心流程是:智能体从真实环境获得经验,用此经验学习更新模型和Q值,同时利用已学习的模型反复进行规划来更新Q值。
⚠️ 第四课:不准确模型的影响
然而,模型并非总是准确的。在第四课中,我们讨论了不准确的模型如何影响规划。
我们指出,Dyna-Q可以利用一个不完整的模型(即只覆盖部分状态-动作对)进行有效规划,但如果模型是错误的(即对状态转移或奖励的预测有误),规划就会产生问题,导致智能体学到次优策略。
🚀 第五课:Dyna-Q+ 算法
为了解决模型不准确的问题,我们最后介绍了Dyna-Q+ 算法。该算法在其规划更新中使用了一个奖励加成,以鼓励对长期未访问的状态-动作对进行探索。
通过主动探索,Dyna-Q+ 能使其模型保持更新和准确,从而获得更好的性能。其规划更新中的奖励公式可表示为:
R + κ * √(τ)
其中 τ 代表自某个状态-动作对被访问以来经过的时间步数,κ 是一个调节探索强度的参数。

📚 本周总结
本节课中,我们一起学习了第四周的核心内容。我们首先区分了分布模型和样本模型,然后介绍了一步Q规划算法。接着,我们探讨了将规划与学习结合的Dyna架构,并分析了模型不准确时带来的挑战。最后,我们引入了Dyna-Q+算法,它通过奖励加成鼓励探索,以维持模型的准确性。本周涵盖了从基础模型到高级整合算法的大量内容,为构建更高效的强化学习智能体奠定了重要基础。
强化学习专项课程:第77讲:课程回顾与总结 🎉

在本节课中,我们将回顾基于采样学习方法课程的全部内容。我们将总结已涵盖的核心概念,并简要展望后续课程的方向。
您已经完成了整个基于采样学习方法的课程。让我们快速回顾一下所涵盖的内容。
我们讨论了两种从采样经验中学习的方法。第一种是蒙特卡洛方法,它通过平均回报来估计价值函数。第二种是时序差分学习,它在更新目标中使用对下一状态的估计价值。
我们发现,时序差分学习像蒙特卡洛一样从采样经验中学习,但也像动态规划一样进行自举更新。我们展示了如何实现时序差分算法来估计状态价值函数和动作价值函数。
随后,我们讨论了使用Sarsa、期望Sarsa和Q学习进行控制的方法。Sarsa是一种同策略算法,它估计其正在遵循的策略的价值。Q学习是一种异策略算法,它估计最优策略的价值函数。期望Sarsa既可以用于同策略,也可以用于异策略。它在更新目标中显式计算下一状态的期望价值。这个期望可以基于任何策略进行计算,因此期望Sarsa可以用于异策略学习。我们证明了Q学习是期望Sarsa的一个特例。
在最后一个模块中,我们讨论了使用模型经验进行规划。我们介绍了Dyna架构,它结合了从模型经验进行规划和从环境经验进行学习。我们讨论了Dyna-Q,它结合了Q学习和Q规划。在一个实验中,我们看到Dyna-Q的规划更新使其比单纯的Q学习具有更高的样本效率。
最后,我们考虑了当模型不准确时会发生什么。我们展示了Dyna-Q+如何在规划更新中添加探索奖励,以鼓励探索。这个奖励帮助Dyna-Q+注意到Dyna-Q可能忽略的环境变化。
我们希望您喜欢学习基于采样的学习方法。在下一门课程中,我们将看到如何将基于采样的学习与函数近似相结合。我们将学习泛化,这是一种扩展强化学习并显著提高样本效率的强大工具。
您已学到的许多概念将会延续,但也将面临一些新的挑战。请继续关注,我们将一同探索如何解决它们。

在本节课中,我们一起回顾了基于采样学习方法的核心内容,包括蒙特卡洛与时序差分学习、多种控制算法(如Sarsa、Q学习、期望Sarsa),以及结合规划与学习的Dyna架构。最后,我们展望了下一阶段将函数近似与强化学习结合的前景。
078:函数近似简介 🚀

在本节课中,我们将要学习强化学习课程3的核心内容。课程3标志着学习旅程的一个重要转折点,我们将从表格型方法转向函数近似。这既包含了对已学概念的延续,也引入了全新的技术视角,例如目标函数、梯度下降和参数化函数。
新旧交融的旅程 🔄
课程3的故事是关于“旧”与“新”的结合。
我们即将开启在函数近似框架下的强化学习新旅程。说它“新”,是因为我们将首次深入讨论目标函数、梯度下降、参数化函数、泛化与区分这些概念。
但你已经为此做好了充分准备。关于探索、利用、价值函数、策略的核心理念,以及你已经学过的许多算法,都能以一种自然的方式迁移到函数近似的设定中。
视角的重大转变 🧠
课程的开篇代表着一个重要的视角转变。我们需要将焦点转向学习参数化函数。
我们将不再假设能够将所有状态的价值存储在一个表格中。事实上,我们甚至无法保证能再次见到同一个状态。取而代之的是,我们将学习由一组权重(例如神经网络)参数化的函数,来近似估计价值。
我们无法使这种近似达到完美。这意味着在某些状态下,我们必须接受价值函数存在不准确性。
尽管如此,转向参数化价值函数整体上是积极的,因为它带来了泛化能力。这实际上反映了我们人类的学习方式:你会根据修读其他课程的经验,来泛化预测这门课程需要投入多少工作量。
技术概念的深化 ⚙️
接下来的概念会更具技术性。我们将分析智能体遇到的状态分布,以及这如何影响价值函数的准确性。我们将计算目标函数的梯度,并推导出新的学习规则。
在专项课程的这个阶段,你已经学习了许多内容,现在我们将学习一系列新东西。这很容易让人迷失方向,更糟的是,你可能会看不清哪些算法对当前任务最相关。

为了帮助解决这个问题,我们开发了一张课程地图。
课程地图导航 🗺️

课程地图的理念是,你可以从树状图的顶部开始,逐步向下找到最适合你问题的算法。请记住,这是一张课程地图,它并未包含强化学习中的所有算法,只涵盖了我们讨论过的那些。这张地图旨在总结本课程的算法,并不一定是分类更广泛RL算法的最佳方式,因此请将其视为对本课程内容的一个心智模型。
让我们借助地图回顾一下在课程一和课程二中涵盖的内容。

我们最初假设智能体可以用表格完美地表示价值。这样做是为了专注于强化学习的基本概念,而不被近似问题所困扰。
我们讨论的第一类RL方法使用一个给定的(而非学习的)世界模型。我们使用动态规划方法,无需与环境交互,直接从模型计算价值函数和最优策略。地图的这个分支展示了我们讨论过的所有三种DP算法。

在下一门课程中,我们涵盖了基于样本的方法。我们首先讨论了必须等到一个回合结束后才能进行更新的蒙特卡洛方法。我们学习了两种用于预测和两种用于控制的MC方法。

之后,我们向你介绍了时序差分学习。这类算法允许智能体在回合的每一步更新价值函数和策略。在这里,我们学习了一些强化学习中最广泛使用的算法,包括 Q学习、SARSA 和 期望SARSA。
我们通过循环回到基于模型的规划方法来结束课程二,研究了智能体在与世界交互时学习模型的Dyna架构。

课程3的学习路径 ➡️

对于课程3,我们只需要这张地图的右侧部分。
我们将首先介绍参数化函数,以及如何用它们来近似价值函数。我们将讨论泛化与区分,以及特定的函数近似器,包括粗编码和神经网络。

和之前一样,我们将从预测开始,利用监督学习和梯度下降的思想,推导出新的蒙特卡洛和TD算法。

然后,我们将讨论用于函数近似的控制算法,这包括期望SARSA和Q学习。

之后,我们将用一种称为平均奖励的、表述持续性控制问题的新方法,彻底颠覆你的认知。

我们将以参数化策略作为课程3的收尾。简而言之,我们可以像参数化价值函数一样参数化策略。我们将讨论如何在平均奖励设定下做到这一点。
总结与展望 🎯

在本节课中,我们一起学习了课程3的总体框架和核心转变。我们了解到,课程3将结合已学的强化学习基础,引入函数近似这一关键技术,包括目标函数、梯度下降和参数化表示。
通过本课程的学习,你将掌握将强化学习扩展到实际问题所需的大部分知识。然后,你将能够在课程4中运用所有这些新获得的理解,去实现一个完整的强化学习系统。


那么,让我们开始吧!
079:认识你的导师 👨🏫👩🏫

在本节课中,我们将认识本专项课程的两位导师:Adam White和Martha White。他们是阿尔伯塔大学的教授,也是强化学习领域的杰出研究者。我们将了解他们的学术背景、研究兴趣以及他们对强化学习领域的看法。
导师介绍
Adam White 是阿尔伯塔大学的研究教授,同时也是Deep Mind的高级研究员。他以在强化学习的预测知识方面的工作而闻名,全球多个研究小组都在基于他的思想进行深入研究。他的工作被认为是近年来最重要的研究之一,影响力深远。Adam也是一位出色的实证主义者,擅长设计实验来揭示关键问题,并持续致力于提升强化学习领域的科学理解。
Martha White 是阿尔伯塔大学的助理教授。她对强化学习的算法贡献不胜枚举,包括开发了多种新的离策略学习算法、新的策略梯度方法,以及在表示学习方面的众多杰出贡献。她是强化学习领域冉冉升起的年轻新星之一。同时,她也是Adam最频繁的合作者以及生活中的伴侣。
学术之路
上一节我们介绍了两位导师,本节中我们来看看他们是如何进入计算机科学和强化学习领域的。
Adam的历程:
Adam在高中时期对物理、化学、生物等科学很感兴趣,但并未找到最契合的方向。他偶然选修了一门关于计算机科学和编程的课程(使用GW-BASIC语言),这成为了他职业生涯的转折点。他回忆第一次实现 if 语句或 for 循环时,那种能让计算机为自己执行一系列指令的感觉非常奇妙。从那时起,他就决定在大学攻读计算机科学。
在研究生阶段,Adam来到阿尔伯塔大学,最初计划从事并行分布式计算。在需要选修一门课程时,他采用了一个“非常合理”的策略:浏览教授们的照片,并选择了看起来最友善的一位。这位教授正是Rich Sutton,课程是“强化学习导论”。这门课程令人惊叹且充满启发,是他首次接触人工智能或机器学习。课程的一个早期作业是实现SARSA算法来解决一个网格世界问题,这再次成为他职业生涯的决定性时刻。看着智能体学会解决迷宫,仅凭每一步-1的奖励信号,就能找出极其高效的路径,这让他着迷并决定终生投身于此。
Martha的历程:
Martha本科主修数学,一直认为函数和动力系统非常优美。后来她出于兴趣选修了一门计算机科学课程,并发现其乐趣无穷,因此同时继续了数学和CS的学习。这两个学科的结合对于人工智能和机器学习研究非常有益。她在暑期进行了一些AI研究,并从此留在了这个领域。对她而言,这个领域不仅仅是关于数学函数,更是一个可以大量协作、帮助他人的社区。她的日常工作包括指导许多学生,并与团队一起攻克难题,在团队中研究如此有趣的问题让她感到非常充实。
研究生涯的感悟
以下是Adam分享的在研究生阶段学到的最重要一课,这一课适用于所有科学领域乃至任何形式的研究。
- 深入理解细节:真正热爱去理解事物的细节,专注于小问题并将其理解得非常透彻。这是一种广泛适用的能力,也是他传授给学生并在课程中强调的理念,他希望与本专项课程的学习者分享这一点。
工作的意义与挑战
那么,Adam如何看待他的工作呢?他热爱研究,但有时长时间的工作和同行评审过程会令人有些沮丧。当你退一步审视自己的研究时,可能会觉得它渺小且微不足道,难以看清它将如何影响世界、让世界变得更美好。在这些时候,你可以回归教学和指导。教学是帮助人们首次了解事物、理解领域运作方式的过程,这非常令人兴奋。无论学生最终进入学术界、工业界还是创办自己的公司,你都是他们职业生涯开端的一部分。参与这个过程是一种奇妙的体验。对他而言,一周中最好的日子总是那些日程排满了与学生会议的日子,他可以帮他们解决问题,更好地理解强化学习。
强化学习的重要性
上一节我们谈到了工作的意义,本节中我们来看看两位导师为何认为强化学习如此重要。
Adam的观点:
强化学习的潜力巨大,但仍面临许多开放性的挑战。机器学习已经开始被更广泛地应用,但强化学习目前仅应用于少数几个领域。同时,他认为强化学习可以产生非常大的影响。他预计在未来十年左右,我们将看到更多的控制工程师在实际系统中使用强化学习。它将成为一个工具,帮助在更大的工程系统中进行自动化决策。但为了实现这一点,我们需要在强化学习方面取得一些进展,更多地思考如何开发稳健的算法,以及如何让人们放心地使用这些算法。因此,他认为在工业界采用的同时,我们也需要思考如何改进强化学习算法,使这两者能够协同发展。
Martha的观点:
自然,她认为强化学习是研究人工智能、推动解决人工智能问题的精确框架。同时,强化学习对她非常重要,因为她对发展性学习系统非常感兴趣。例如,人类婴儿在地上玩耍,或者幼年动物认识世界。她想了解这些系统及其工作原理。这些系统在极短的时间内学习了海量知识:学习爬行、了解自己的身体、学习与环境互动、操纵物体、与世界中的其他智能体交流。它们是非常高效的学习系统,在几周到几个月内就能完成这些学习,这令人震惊。感觉我们需要做大量工作才能接近这类系统。因此,她非常想理解这些系统可能使用的算法和表征,而强化学习正是审视和理解这些事物的正确视角。
未来的应用展望
应用总是推动领域兴趣和兴奋点的关键。强化学习在游戏和一些工业控制问题上已有应用,那么下一个重大进展会是什么呢?
Martha的预测:
她认为,强化学习的核心是一种通用的自动化决策方法,是一个将在许多工程系统中帮助我们的工具。因此,她认为强化学习真正起飞的地方将是工业控制领域。在工业控制中,专家们一直在寻找提高系统运行效率、优化性能的方法。我们将看到强化学习被用于降低能源成本或节省工业控制系统中的其他类型成本。在专家手中,我们可以在不远的将来让这些算法良好工作。因此,她真正将强化学习视为一个辅助专家工作的工具,而不是取代人或使其自动化。

在本节课中,我们一起认识了本课程的两位导师Adam White和Martha White,了解了他们进入强化学习领域的历程、对研究生涯的感悟,以及他们对强化学习重要性及未来发展的深刻见解。他们的分享为我们学习这个充满潜力的领域提供了宝贵的背景和视角。
080:转向参数化函数


在本节课中,我们将要学习如何从表格化方法转向使用参数化函数来近似价值函数。我们将理解参数化函数的概念,解释线性函数近似,并认识到表格化表示其实是线性价值函数近似的一个特例。
从表格化方法到函数近似
上一节我们介绍了表格化方法,即存储一个表格,为每个可能的状态单独学习一个价值。
在现实世界的问题中,这些表格会变得异常庞大。想象一个通过摄像头观察世界的机器人,我们显然无法为每一张可能的图像都存储一个表格条目。
幸运的是,表格化并非唯一的选择。本节中,我们将探讨更通用的近似价值函数的方法。
理解参数化函数近似
在之前的课程中,我们花了大量时间思考如何估计价值函数。到目前为止,我们的价值近似始终采用同一种形式:为每个状态在表格中存储一个独立的价值,并在学习过程中查找和修改这些值。
但这并非近似价值函数的唯一方式。原则上,我们可以使用任何以状态为输入、输出一个实数的函数。例如,在一个网格世界中,我们的价值函数近似可以接收x和y坐标,并将它们相加来产生一个价值估计。
这只是一个启发性的例子。我们不会真的使用这个函数作为价值函数,因为它无法被修改,我们也就无法进行学习。
这正是参数化函数概念的用武之地。我们引入一组实数值权重,通过调整这些权重来改变函数。例如,在这个网格中,我们可以使用形如 W1 * x + W2 * y 的函数,而不是固定的x与y之和。
权重 W1 和 W2 参数化了我们的函数,它们允许我们改变函数生成的输出。为了表示这个函数近似于真实的价值函数,我们使用符号 V_hat。W 是一个向量,包含了参数化近似的所有权重。
我们不再需要存储整个价值表格,而只需存储两个权重来表示我们的价值函数近似。你可以想象,对于大型状态空间,这种紧凑的表示方式非常有用。
参数化函数的影响
使用表格化表示时,修改一个状态的价值估计不会影响其他状态。对于参数化函数,情况则不同。
观察当我们改变 W1 时,每个状态的价值估计会发生什么变化。如果我们改变 W1 或 W2,将会改变每一个状态的价值估计。
现在,我们的学习算法将修改权重,而不是修改单个状态的价值。
线性价值函数近似
我们刚刚讨论的例子是一个特例,称为线性价值函数近似。在这种情况下,每个状态的价值由权重的线性函数表示。
这意味着每个状态的价值被计算为权重乘以状态某些固定属性(称为特征)的总和。我们可以简洁地表达这一点:近似价值由特征向量和权重向量的内积给出。
我们用粗体 x(S) 来表示特征向量。
公式:
V_hat(S, W) = x(S)^T * W
我们的特征选择会影响我们能够表示的价值函数类型。例如,考虑我们目前讨论的近似方法。使用它,我们只能表示那些随特征 x 和 y 线性变化的价值函数。
考虑一种情况,真实价值函数由网格上的数字给出。我们无法将其表示为 x 和 y 的线性函数。为了让外围的值正确,W1 和 W2 都需要为0。然而,这将意味着内部的值不正确,因为要使和为5,W1 和 W2 中至少有一个必须非零。
但我们不必使用 x 和 y 作为特征。线性函数近似的关键在于拥有好的特征。在这里,x 和 y 对于这个问题来说不是好特征。不过,正如你稍后将看到的,有许多强大的方法可以构造特征。
表格化是线性近似的特例
线性函数近似实际上非常通用。事实上,表格化表示是线性函数近似的一个特例。
为了构建一个线性价值函数来表示这个表格化价值函数,我们需要定义特征。让我们选择特征为特定状态的指示函数。
对于状态 S_i,特征 i 为1,其余特征为0。我们有16个特征,每个状态一个。
让我们用这些特征计算一个状态的近似价值。由于除了一个特征外,所有特征都为零,内积就等于与该状态相关联的单个权重。
由于每个状态的价值都由一个独立的权重表示,这等价于一个表格化价值函数。
其他参数化函数类型
这些参数值是通用的,我们可以考虑许多不同类型的函数。
神经网络是非线性状态函数的一个例子。网络的输出是给定状态的近似价值。状态作为输入传递给网络。网络中的所有连接都对应实数值权重。当数据通过连接传递时,权重会乘以其输入。这个过程通过一系列层转换输入状态,最终产生价值估计。我们将在后续课程中深入探讨神经网络。

总结

本节课中,我们一起学习了参数化函数的概念,以及如何利用它们来近似价值函数。你现在应该对参数化函数及其在价值函数近似中的应用感到熟悉。
我们了解到,线性函数近似是一种强大的方法,它通过特征向量和权重向量的组合来表示价值,而表格化方法只是其一个特例。我们还认识到,除了线性函数,还有其他如神经网络等非线性函数可用于近似。
在接下来的课程中,我们将讨论如何在智能体与世界交互的同时,更新这些近似的价值函数。
081:泛化与辨别

在本节课中,我们将要学习函数近似中两个核心且相互关联的概念:泛化与辨别。理解它们如何影响智能体的学习效率和最终性能至关重要。
泛化的概念与益处
上一节我们介绍了函数近似的基本思想,本节中我们来看看泛化的具体含义。泛化直观上意味着将特定情境中学到的知识,应用到更广泛的情境中得出结论。在策略评估的语境下,泛化指的是对一个状态价值估计的更新,会影响到其他状态的价值。
想象一个机器人收集易拉罐的任务,它通过分布在各地的传感器观察世界。在许多位置,机器人开车到最近易拉罐所需的时间是相同的。尽管这些位置对应的传感器读数不同,但它们具有相似的价值,因此我们希望价值函数能在这些状态之间进行泛化。
泛化可以通过更好地利用已有经验来加速学习。如果我们能从相似状态学习到一个状态的价值,那么我们可能无需频繁访问每一个状态就能获得其正确的价值估计。
辨别的必要性

然而,仅有泛化是不够的。辨别指的是区分两个状态价值的能力,即为两个状态赋予不同价值。
回到机器人收集易拉罐的例子。设想一个状态:易拉罐在3英尺外,但隔着一堵墙。对比另一个状态:易拉罐同样在3英尺外,但有一条畅通的路径可以到达。机器人需要为这两个状态分配不同的价值。
因此,虽然在与最近易拉罐距离相似的状态之间进行泛化很有用,但当其他信息可能影响状态价值时,基于这些信息对不同状态进行辨别也同样重要。
泛化与辨别的权衡
我们可以用一个以泛化和辨别为二维坐标的图来可视化可能的方法空间。
- 表格方法位于图的下方。它们能完美地区分不同状态,但完全不会泛化学到的价值。每个价值都是独立表示的。
- 另一个极端是将所有状态视为相同。每次更新都会泛化到所有状态,但完全无法进行辨别。最多只能学到独立于当前状态的平均回报,这并不实用。
我们真正需要的是一种能实现良好泛化和良好辨别的学习方法。这种方法会将学到的价值泛化到相似状态,从而学得更快;同时也能区分状态,这意味着随着数据增多,价值函数近似可以准确地表示价值。
在实践中,我们更可能得到一个权衡点,例如用一定程度的辨别能力来换取泛化能力。我们可能会将相似的状态组合在一起,并用一个数字来表示它们的价值。

实例分析:国际象棋
为了建立更多直觉,让我们以国际象棋游戏作为一个具体例子。
- 极端情况一:将所有状态视为相同。这个价值对应于不考虑游戏状态时的获胜概率。对于实力相当的玩家,这个数字可能是50%。
- 极端情况二:表格情况,将每个状态都视为完全不同。这对于小问题可行,但在像国际象棋这样的游戏中,甚至枚举所有可能状态都是不切实际的(大约有10^46个状态)。进一步想象,单独学习所有这些状态的价值需要多长时间。
我们显然需要一种介于两者之间的方法,在获胜概率相似的状态之间进行泛化。如何识别这些相似性以获得这样的分组是一个难题,没有单一的答案。如何进行泛化对我们的算法性能有重大影响,这也是机器学习和强化学习中的一个核心主题。
总结

本节课中我们一起学习了:
- 表格表示法提供了良好的辨别能力,但没有泛化能力。
- 泛化对于加速学习非常重要。
- 同时具备泛化和辨别能力是理想状态,但在实践中通常需要进行权衡。
在接下来的几个模块中,我们将在研究具体的函数近似器时,再次探讨这些概念。
强化学习专项课程:05:将价值估计构建为监督学习问题


在本节课中,我们将学习如何将强化学习中的价值估计问题,构建成一个监督学习问题。我们还将认识到,并非所有的函数近似方法都适用于强化学习。
监督学习方法通过一组输入-目标示例来学习一个函数,这与强化学习非常不同。
然而,监督学习方法对于处理强化学习问题的某些部分可能很有用。
到本视频结束时,你将能够理解价值估计如何被构建为监督学习问题,并认识到并非所有的函数近似方法都适合用于强化学习。
监督学习概述
监督学习涉及在给定一组输入-目标对数据集的情况下近似一个函数。
例如,假设我们有一份房屋价格列表,以及每栋房屋的一系列属性。
我们可以使用监督学习来训练一个函数,该函数以房屋属性作为输入,并估计该房屋的预期价格。
我们希望学习到的函数也能推广到训练集中未出现的房屋,近似其预期价格。
这个参数化函数可以用多种方式表示,例如,一个神经网络。
将策略评估构建为监督学习问题
强化学习中的策略评估问题可以类似地构建。
这种相似性在蒙特卡洛方法中最为明显。
请记住,蒙特卡洛方法使用回报样本来估计价值函数。
我们可以将其视为一个监督学习问题的例子,其中输入是状态,目标是回报。
通过在足够多的示例上进行训练,我们希望学习到的函数的输出能够很好地近似预期回报,换句话说,近似每个状态的价值。
时序差分方法
时序差分方法也可以构建为监督学习。
在这种情况下,目标是单步自举回报。
原则上,监督学习中的任何函数近似技术都可以应用于策略评估任务。
然而,并非所有技术都同样适用,让我们看看原因。
强化学习的独特挑战
在强化学习中,智能体与环境交互并不断生成新数据。
这通常被称为在线设置,以区别于离线设置。在离线设置中,完整的数据集从一开始就可用,并且在学习过程中保持不变。
如果我们想使用函数近似技术,我们应该确保它能在在线设置中工作。
有些方法与在线设置不兼容,因为它们要么是为固定批次数据设计的,要么不是为时间相关的数据设计的。
而强化学习中的数据总是相关的。
自举带来的额外复杂性
在应用监督学习技术时,时序差分方法引入了额外的复杂性。
时序差分方法使用自举,这意味着我们的目标现在依赖于我们自己的估计。
这些估计会随着学习的进行而改变,因此我们的目标也在不断变化。
这与监督学习不同,在监督学习中,我们有一个真实标签作为目标。
例如,房屋的价格不依赖于我们的估计,也不会因为我们的估计改变而改变。
监督学习方法通常不是为变化的目标而设计的,也不是为从智能体自身估计计算出的目标而设计的。

总结
本节课中,我们一起学习了如何将策略评估任务构建为监督学习问题。
但我们也认识到,并非所有来自监督学习的方法都适用于强化学习。
我们需要与在线更新和自举兼容的方法。下次见。
083:价值误差目标 🎯

在本节课中,我们将学习如何将价值估计问题形式化为一个监督学习问题,并明确其需要优化的目标函数。
上一节我们讨论了将价值估计视为监督学习问题的框架。在监督学习中,确定需要优化的目标是一个关键步骤。本节中,我们将更精确地定义我们希望优化的目标。
理想化场景与目标定义
首先,让我们想象一个理想化的场景:我们获得了一系列状态及其对应真实价值的数据对。我们的目标是找到一个参数化的函数,使其能够紧密地近似真实的价值函数 Vπ。
我们通过调整函数权重来实现这一点,使得对于给定的状态,函数的输出能尽可能接近其关联的真实价值。然而,我们通常无法在所有状态上都完美匹配价值函数。我们所选择的函数近似方法会限制我们能够表示的价值函数范围。
为了使目标更精确,我们需要定义一个衡量标准,来量化我们的近似值与真实价值函数之间的接近程度。

均方价值误差目标
考虑一个用 V̂(s, w) 表示的线性价值函数近似。为了可视化更简单,我们假设状态是单维且连续的。下图展示了我们估计的价值函数。
现在,假设真实的价值函数如下图所示。显然,我们的近似并不完美,但差距有多大呢?
让我们更精确地定义这个差距。首先,我们定义一个衡量单个状态价值与其近似值之间误差的指标。一个自然的选择是平方误差,即真实价值与近似值之差的平方。
然而,仅凭单个状态的误差不足以定义函数近似的整体目标。因为提高一个状态的估计精度,往往意味着会降低另一个状态的精度。
因此,我们需要指定我们有多关心每个状态的价值估计准确性,我们将这个权重称为 μ(s)。关于这一点,稍后会详细说明。
现在,我们可以将完整的目标函数写为在整个状态空间上加权平方误差的总和,其中每个状态的权重是 μ(s)。我们称此目标为均方价值误差。
状态分布 μ(s) 的作用
回到 μ(s) 的选择问题。记住,μ(s) 应该告诉我们有多关心每个状态。
一个自然的衡量标准是,在遵循策略 π 时,访问每个状态的时间比例。这意味着我们希望最小化在遵循策略 π 时所访问状态的平均价值误差。策略花费更多时间访问的状态,在目标函数中具有更高的权重;而对于策略较少访问的状态,我们对其误差的关心程度则较低。
μ(s) 是一个概率分布,如幻灯片所示。在这个例子中,策略在状态空间两端花费的时间很少。这意味着在均方价值误差目标下,我们允许价值近似在这些状态上具有更高的误差。

目标的意义与后续步骤
请记住定义这个目标的目的:我们希望调整权重参数 w,以使均方价值误差 VĒ(w) 尽可能低。
以某种方式改变权重可能会增加价值误差,而以另一种方式改变则可能减少价值误差。在下一讲中,我们将讨论如何利用梯度下降法来逐步调整权重。

本节课中,我们一起学习了为什么在函数近似下进行策略评估需要我们指定一个目标函数,而均方价值误差是其中一个可能的目标。我们明确了误差的衡量方式,并理解了状态访问分布 μ(s) 在加权误差、定义整体优化目标中的关键作用。
强化学习专项课程:第2章:梯度下降简介 🎯


在本节课中,我们将要学习一种用于最小化目标函数的通用策略——梯度下降。我们将理解其基本思想,并了解它如何收敛到驻点。
上一节我们介绍了如何将价值函数估计构建为监督学习问题,并通过指定一个目标函数使其精确化。现在,我们希望找到解决这个目标函数的方法。
本节中,我们来看看一种名为梯度下降的通用优化策略。在后续视频中,我们将介绍强化学习中针对特定目标函数的算法。
目标:最小化价值误差
我们希望最小化均方价值误差,使我们的价值估计接近真实的价值函数。回想一下,我们的价值估计由一个关于状态的函数给出,该函数由一组实值权重 w 参数化。这些权重决定了如何为每个状态计算价值,改变权重将修改许多状态的价值估计。
为了最小化整体价值误差,我们需要考虑如何改变权重,这需要用到一些微积分知识。
导数与梯度的概念
希望你还记得微积分中导数的概念。对于一个以标量参数 W 为自变量的函数 F,导数告诉我们如何局部地改变 W 来增加或减少 F。
- 在某点 W 处,F 的导数的符号指示了改变 W 以增加 F 的方向。
- 导数的大小表示函数 F 在该点 W 处的斜率,即随着 W 变化,F 变化的快慢程度。
如果 F 由多个变量(即向量 W)参数化,则需要引入梯度的概念来描述 F 如何随向量 W 的变化而变化。
- 梯度是一个由偏导数组成的向量,指示了 W 的每个分量发生局部变化时对函数的影响。
- 梯度中每个分量的符号指明了改变 W 对应分量以增加 F 的方向(正或负)。
- 分量的大小指明了 F 随 W 在该方向移动而变化的快慢程度。
- 无论大小如何,梯度给出了最陡上升的方向,即局部上能使 F 最大程度增加的方向。
线性价值函数的梯度示例
以下是一个具体示例,我们来推导线性价值函数的梯度。记住,线性价值近似只是权重与状态特征向量的内积:
V̂(s, w) = w · x(s)
其对单个权重 w_i 的偏导数就是与该权重相关联的特征 x_i(s):
∂V̂/∂w_i = x_i(s)
这意味着线性价值近似的梯度就是该状态的特征向量 x(s)。
梯度下降更新规则
我们的目标函数(例如均方价值误差)是权重的函数,因为它是 V̂ 的函数,而 V̂ 又是权重的函数。我们的目标是调整权重以使目标函数值变小。
梯度下降的核心思想是:为了减少目标函数,我们应该沿着负梯度的方向移动权重。这被总结为以下更新规则:
w ← w - α * ∇_w J(w)
其中:
- α 是步长参数,控制我们移动的距离,以防止步幅过大(因为沿此方向移动仅保证在局部减少目标函数)。
- ∇_w J(w) 是目标函数 J 关于权重 w 的梯度。
通过以足够小的 α 重复进行此类更新,我们最终将收敛到一个梯度为零的驻点。
驻点与收敛
这个驻点很可能是一个局部最小值,意味着这些权重比紧邻区域的所有权重都要好,但可能不是全局最优的。其他可能的驻点包括局部最大值和鞍点,这些是不稳定的解;我们算法中固有的随机性通常足以避免陷入这些不良驻点。
另一方面,局部最小值是稳定的,因此即使是随机算法也倾向于收敛到那里。因此,我们通常讨论算法收敛到局部最小值。
在某些情况下,梯度下降保证收敛到全局最小值,即目标函数权重的最佳可能设置。例如,对于使用线性函数近似的均方价值误差,这一点是成立的。
对于更复杂的函数近似器(如神经网络),一个驻点可能不是全局最小值。请注意,全局最小值不一定对应于真实的价值函数。它受到我们选择的函数参数化的限制,并取决于我们选择的目标函数。
想象一个特征向量,它只包含一个始终为1的元素(无论处于什么状态)。那么,最小化均方价值误差的近似价值函数将收敛到所有状态价值的平均值,这并不是一个很好的价值函数。然而,就价值误差目标而言,这仍然是在该参数化下我们能做的最好结果。

本节课中我们一起学习了梯度下降的基本原理,理解了它如何通过沿负梯度方向更新参数来最小化目标函数,并认识到其解通常会收敛到局部最小值,而不一定是全局最优解。下一节,我们将探讨如何将梯度下降具体应用于强化学习问题。
085:用于策略评估的梯度蒙特卡洛法




在本节课中,我们将学习如何将梯度下降法与策略评估的目标相结合,从而近似价值函数。我们将重点介绍梯度蒙特卡洛算法,这是一种利用采样回报来估计价值函数的方法。
概述
你已经掌握了一种最小化目标函数的方法——梯度下降法。同时,我们也为策略评估定义了一个明确的目标——价值误差。现在,我们应该能够将这两者结合起来,以近似价值函数。让我们回顾一下老朋友蒙特卡洛法,看看它如何被用来最小化价值误差。
观看本节后,你将能够:理解如何使用梯度下降和随机梯度下降来最小化价值误差,并概述用于价值估计的梯度蒙特卡洛算法。
计算价值误差的梯度
我们刚刚学习了如何使用梯度下降来最小化目标函数。要使用这种方法,第一步是找到目标函数相对于参数的梯度。
因此,让我们从计算均方价值误差相对于近似函数权重 w 的梯度开始。请记住,这个目标函数是所有状态上误差平方的加权和。
根据微积分法则,我们可以将梯度算子移入求和符号内。
然后,我们对求和内的每一项求梯度,这需要用到链式法则。V_π(s) - V_hat(s, w) 的梯度等于 -V_hat(s, w) 的梯度,因为 V_π(s) 不是 w 的函数。换句话说,改变 w 不会改变 V_π(s)。
价值函数近似 V_hat(s, w) 的梯度取决于我们使用的具体参数化函数。在线性函数近似的情况下,梯度的计算特别简单,正如我们在上一个视频中展示的,它简单地等于该状态下的特征向量 x(s)。
这个梯度是有意义的:价值函数近似的梯度指明了如何改变权重以增加该状态的价值估计。我们沿着这个方向,乘以真实价值与我们的估计值之间的差值。
如果差值为正,意味着真实价值高于我们的估计,因此我们应该朝着增加估计值的方向改变权重。如果当前误差为负,我们应该朝相反方向改变权重。
从梯度下降到随机梯度下降
计算均方价值误差的完整梯度需要对所有状态求和,这通常是不可行的。此外,我们可能并不知道分布 μ。
因此,让我们来近似这个梯度。设想一个理想化场景:我们虽然无法显式获得 μ,但可以通过遵循策略 π 来从中采样状态。假设我们采样到一个状态 S1,并知道其目标价值 V_π(S1)。
我们可以使用这一对数据来更新权重,以减少在该样本上的误差。以下是针对单个状态的梯度。我们可以使用这个梯度进行梯度下降,以减少该状态上的误差。
以下是针对 S1 的对应梯度更新规则:
w ← w + α * [V_π(S1) - V_hat(S1, w)] * ∇_w V_hat(S1, w)
我们可以执行此更新以减少这对数据上的误差。然后,我们可以对遵循策略 π 时观察到的另一个状态 S2 重复此过程。通过对每个样本对进行小的、改善其误差方向的更新,虽然有时可能会增加整体目标函数的误差,但总体趋势将是朝着最小化整体目标前进。
这种更新方法被称为随机梯度下降,因为它只使用了梯度的随机估计。事实上,每个随机梯度的期望值等于目标函数的真实梯度。你可以将这个随机梯度视为真实梯度的一个有噪声但计算成本低得多的近似,它仍然可以稳步向最小值前进。
处理未知的真实价值 V_π
随机梯度下降允许我们通过采样梯度来高效地更新每一步的权重。然而,还有一个实际的问题:我们无法获得真实的 V_π。
让我们看看如何从更新规则中去除它。我们可以用 V_π 的一个估计值来替代它。一个选择是使用对每个访问状态 S_t 的回报采样,就像我们在蒙特卡洛方法中所做的那样。这是合理的,因为价值函数正是这些样本的期望值。
事实上,当我们使用采样回报代替真实价值时,梯度的期望值仍然等于均方价值误差的梯度。

梯度蒙特卡洛算法

这引出了用于估计 V_π 的梯度蒙特卡洛算法。
以下是算法的步骤:
- 选择待评估的策略:我们选择任意想要评估的策略
π。 - 选择可微函数:我们选择一个函数
V_hat(s, w),它将状态和权重映射为一个实数,并且该函数在给定权重w时可微。对于一组给定的权重,V_hat是一个输出近似价值的状态函数。 - 设置步长:我们选择步长参数
α的值。 - 初始化权重:我们以任意方式初始化参数化我们估计的权重
w,例如全部设为0。 - 迭代过程:
- 在每次迭代中,智能体与环境交互,生成一个完整的回合。
- 我们为回合中访问的每个状态计算采样回报
G_t。 - 然后,我们遍历回合中的每一步,基于采样回报执行一次随机梯度下降更新。更新规则为:
w ← w + α * [G_t - V_hat(S_t, w)] * ∇_w V_hat(S_t, w)
总结
本节课中,我们一起学习了如何利用随机梯度下降来估计价值函数,并详细介绍了梯度蒙特卡洛算法的工作原理。该算法通过采样回报替代未知的真实价值,结合随机梯度下降,实现了对策略价值函数的高效近似。在接下来的课程中,你将看到这个算法的实际应用。
强化学习专项课程:P86:基于蒙特卡洛的状态聚合 🎯


概述
在本节课中,我们将学习一个使用状态聚合技术进行价值函数近似的具体例子。我们将结合蒙特卡洛方法和状态聚合,来近似求解一个大型随机游走任务中的状态价值。通过这个例子,你将理解状态聚合如何工作,以及如何应用梯度蒙特卡洛算法。
大型随机游走任务示例
上一节我们介绍了函数近似的概念,本节中我们来看看一个具体的应用场景。考虑一个大型随机游走任务,其中函数近似可以帮助加速学习。
- 状态编号从 1 到 1000,从左到右排列成一条线。
- 所有回合都从线的中间,即状态 500 开始。
- 有两个动作:
左和右。 左动作会使智能体向左移动,但并非只移动一格。智能体会向左随机跳转到 100 个相邻状态中的任意一个。- 同理,
右动作会使智能体向右随机跳转到 100 个相邻状态中的任意一个。 - 我们评估的策略是均匀随机策略,即以相等概率选择向左或向右移动。
- 靠近左侧终止状态的状态,其左侧的相邻状态少于 100 个。所有试图跳出链条边界的动作都会导致进入终止状态,右侧同理。
- 在左侧终止会获得奖励
-1。 - 在右侧终止会获得奖励
+1。 - 所有其他转移的奖励均为
0。 - 折扣因子
γ = 1。
这个任务看似简单,但要学习 1000 个状态的价值可能需要很长时间。因此,我们可以从某种函数近似中受益。
什么是状态聚合?
这里我们将使用一种称为状态聚合的技术。顾名思义,状态聚合将某些状态视为相同的状态。
例如,在一个有 8 个状态的表格中,我们可以选择每 4 个状态聚合为一组。这样,价值函数就不再是一个有 8 个条目的表格,而只有 2 个条目。当我们更新第一组中任何一个状态的价值时,该组中所有其他状态的价值也会被更新。
状态聚合是线性函数近似的另一个例子。
- 每个状态组对应一个特征。
- 如果当前状态属于某个组,则该组对应的特征值为
1,否则为0。 - 一个状态的近似价值就是该状态所属组对应的权重。
用公式表示,近似价值函数为:
v̂(s, w) = w[group(s)]
其中 group(s) 是状态 s 所属的组索引。
梯度蒙特卡洛与状态聚合
现在,让我们看看结合状态聚合的梯度蒙特卡洛算法。我们已经知道如何计算给定状态的价值,现在需要思考如何计算价值函数的梯度,以便使用核心更新公式。
状态聚合是线性函数近似的一个例子,因此梯度就等于特征向量。对于状态 s,其特征向量 x(s) 是一个“独热”向量,只有状态 s 所属组对应的位置为 1。
因此,更新规则仅修改与当前活动组对应的权重。让我们思考这个更新规则如何改变权重:
- 如果估计值
v̂(St, w)小于采样回报Gt,则权重会增加。 - 如果估计值
v̂(St, w)大于采样回报Gt,则权重会减少。
权重更新公式为:
w = w + α * [Gt - v̂(St, w)] * x(St)
应用于随机游走任务
让我们回到随机游走任务,看看如何应用状态聚合。
首先,我们必须选择如何聚合状态。状态聚合强制同一组中的状态使用相同的价值估计。因此,理想情况下,如果我们有理由相信某些状态的价值相似,就应该将它们分在一组。在这个问题中,选择很容易:彼此靠近的状态应该具有相似的价值。
接下来,我们必须选择每组包含多少个状态。如果分组很小,我们的价值估计最终会更准确,但学习时间会更长。我们使用 10 个组,每组包含 100 个状态。这比我们开始时面对的 1000 个状态要简洁得多。
以下是梯度蒙特卡洛算法的步骤演示:
- 输入:策略、我们选择的状态聚合函数、一个小的步长参数
α。 - 将所有权重初始化为零。
- 生成一个回合(轨迹)。
- 一旦获得完整的轨迹,我们就逐步遍历所有访问过的状态并进行更新。
假设在一个回合中,智能体在右侧终止,获得奖励 +1。那么从每个状态出发的回报 Gt 都是 1(因为 γ=1,且后续奖励均为0)。我们的第一次更新是针对状态 500,它属于第 5 组。因此,我们基于采样回报 1 对该组的权重执行梯度蒙特卡洛更新。
我们对轨迹中的每个状态都进行类似的更新,最终处理到状态 936(这是终止前访问的最后一个状态)。由于状态 936 属于第 10 组,我们最后更新的是权重 w10。
完成所有更新后,我们的价值估计可能如下图所示。该图显示了单个回合后的估计值。我们绘制了从状态 1 到 1000 的每个状态的学习价值。状态空间不是连续的,但将近似价值绘制成一条线是有意义的。
注意,每组的价值估计都是非负的。这是因为第一个回合的回报是正的,而我们的初始估计是零。
再看另一个回合后的同一张图。这次智能体在左侧终止,获得奖励 -1。这意味着每个状态的回报都是 -1。被访问状态对应的权重略有下降。
运行许多回合后,我们得到的状态价值如下图所示。图中的每个“台阶”对应一组共享相同近似价值的状态。
作为对比,图中也显示了真实的价值函数。尽管我们通过聚合许多状态进行了大幅近似,但我们的价值估计并没有差太多。
理解近似误差:状态分布 μ 的作用
你可能会问:为什么红色真实价值线没有直接穿过所有蓝色台阶的中心?这就是状态分布 μ(s) 发挥重要作用的地方。
回顾一下,μ(s) 是状态 s 的访问频率。靠近链条中心的状态比靠近终止状态的状态访问更频繁,如下图所示。
例如,让我们看看最左边的一组状态(状态 1 到 100)。靠近状态 100 的状态比靠近状态 1 的状态访问次数多得多。因此,近似价值会偏向靠近状态 100 的那些状态的真实价值。这是因为在价值误差中,μ 给这些状态赋予了更高的权重。

总结
本节课中,我们一起学习了梯度蒙特卡洛算法在实践中与状态聚合结合时是如何工作的。我们通过一个大型随机游走的具体例子,演示了如何通过将状态分组来简化问题,并应用梯度更新规则来学习近似的价值函数。关键点在于,状态聚合是一种有效的线性近似方法,而状态访问分布 μ 会影响我们最终学到的近似函数的形态。
087:用于策略评估的半梯度时序差分法 📈


在本节课中,我们将学习如何将时序差分(TD)学习的思想应用于函数近似场景,并理解其核心算法——半梯度时序差分法。
上一节我们介绍了蒙特卡洛方法在函数近似中的应用。本节中,我们来看看如何利用TD学习进行更高效的价值函数估计。
TD学习与函数近似

TD学习的核心思想是,智能体可以利用其自身对价值函数的估计来更新预测。我们已经在表格型案例中见过TD学习。今天我们将描述它在函数近似下的工作原理。

从蒙特卡洛到TD目标
回顾梯度蒙特卡洛更新公式:
w ← w + α [G_t - v̂(S_t, w)] ∇ v̂(S_t, w)
该公式将当前的价值估计向回报 G_t 的样本靠近。
但我们也可以考虑使用其他目标,而非完整的回报。事实上,我们可以用任何对价值的估计来替换此更新中的回报。
w ← w + α [U_t - v̂(S_t, w)] ∇ v̂(S_t, w)
我们称此估计为 U_t。如果 U_t 是真实价值的无偏估计,那么在适当的条件下,我们的函数近似器将收敛到一个局部最优解。回报 G_t 就属于这种情况。
然而,我们也可以用自举目标来替换 U_t,例如一步TD目标 R_{t+1} + γ v̂(S_{t+1}, w)。这仍然是对回报的一个估计,但此估计是有偏的。TD目标使用了我们当前的价值估计,而该估计很可能不等于真实的价值函数。因此,我们无法保证此算法会收敛到价值误差的局部最小值。
其优势在于,TD目标通常比回报样本具有更低的方差。这意味着TD方法往往能以更少的更新次数收敛。
理解“半梯度”
TD更新实际上并非一个真正的随机梯度下降更新。为了理解原因,我们计算单个样本误差相对于权重 w 的梯度。记住,U_t 等于TD目标。使用链式法则,我们得到单个样本平方误差梯度的展开表达式:
∇ [1/2 (U_t - v̂(S_t, w))^2] = (U_t - v̂(S_t, w)) (-∇ v̂(S_t, w) + ∇ U_t)
但这看起来并不像TD更新公式。只有当 U_t 的梯度为零时,这两个表达式才会相等。对于TD方法而言,情况并非如此。在TD中,目标包含了对价值的估计,而该估计依赖于权重 w。这意味着 U_t 的梯度不为零,如下所示:∇ U_t = γ ∇ v̂(S_{t+1}, w)。因此,TD并非在平方误差上执行梯度下降更新,我们称之为半梯度方法。尽管如此,TD在我们关心的许多情况下都能收敛。我们将在后续视频中讨论TD的收敛性质。
半梯度TD算法
以下是半梯度TD的伪代码。它实际上与表格型设置的TD算法非常相似。
该算法无需等到一个回合结束才进行更新。与梯度蒙特卡洛不同,TD在每一步都执行一次更新。
以下是算法的步骤概述:
在每个回合的每一步中:
- 智能体在状态
S_t下选择一个动作A_t。 - 利用得到的奖励
R_{t+1}和下一个状态S_{t+1}计算TD目标:U_t = R_{t+1} + γ v̂(S_{t+1}, w)。 - 立即更新权重:
w ← w + α [U_t - v̂(S_t, w)] ∇ v̂(S_t, w)。 - 以这种方式继续,直到到达终止状态(其价值定义为0)。然后开始一个新的回合。
它与表格型TD的区别真的不大。


本节课中我们一起学习了半梯度时序差分算法。你现在应该理解了半梯度TD算法的原理、它与梯度下降的区别,以及其在线更新的步骤。
088:状态聚合下时序差分与蒙特卡洛方法的比较 🔍

在本节课中,我们将探讨在函数近似背景下,时序差分方法与蒙特卡洛方法的核心差异。我们将通过理论分析和一个小型实验,理解时序差分方法的偏差特性及其对学习速度的影响。
概述 📋
上一节我们介绍了函数近似下的蒙特卡洛方法和时序差分方法。本节中,我们将深入比较这两种方法,重点关注时序差分更新的偏差问题,并通过一个随机游走实验来观察它们在实践中的表现差异。
理论差异:偏差与收敛性 ⚖️

在合理的假设下,梯度蒙特卡洛方法会随着样本增多,逐渐逼近价值误差均方差的局部最小值。这是因为其使用了价值误差梯度的无偏估计。理论上,我们需要运行算法很长时间并衰减步长参数才能实现这种收敛。实践中,我们使用恒定步长,因此算法会在局部最小值附近振荡。
公式表示:蒙特卡洛的更新目标是实际回报 G_t,它是价值 v_π(s) 的无偏估计。
另一方面,时序差分的目标依赖于我们对下一状态价值的估计。这意味着我们的更新可能是有偏的,因为目标中的估计可能不准确。由于我们的价值近似永远不可能完美,即使在极限情况下,目标也可能保持偏差。因此,我们无法保证半梯度时序差分会收敛到价值误差均方差的局部最小值。当然,随着我们估计的改进,这种偏差会减小。

公式表示:时序差分(TD(0))的更新目标是 R_{t+1} + γ * V(S_{t+1}),其中 V(S_{t+1}) 是当前估计值,可能不准确。
实验:随机游走中的表现对比 🧪
让我们回到三状态随机游走的例子,观察时序差分更新中的偏差如何影响实际表现。这次,我们将使用半梯度时序差分(而非蒙特卡洛)来学习近似价值。
在长时间运行时序差分算法直至价值估计不再变化后,我们得到的结果显示,许多状态的价值估计与真实值吻合得并不好。时序差分的估计不如蒙特卡洛学习到的估计准确。在这个使用状态聚合的领域中,蒙特卡洛在长期性能方面具有优势。
学习速度的较量:早期学习性能 ⏱️
但学习速度如何呢?时序差分和蒙特卡洛,谁能更好地利用有限的样本?为了探究这个问题,我们进行了一个专注于早期学习的实验,只运行30幕(上一个实验使用了1000幕)。
两种算法的性能都取决于我们如何设置步长参数 α。为了进行公平比较,我们为每种算法测试了在0到1之间均匀分布的100个α值,并选取使训练30幕后价值误差最低的那个α值作为最佳步长。
以下是实验的关键参数:
- 最佳TD步长 (α):
0.22 - 最佳MC步长 (α):
0.01
让我们绘制两种算法的性能对比图。Y轴表示1000个状态上、经过100次运行平均后的均方根价值误差。X轴表示幕数。我们预期每种算法的价值误差会从高位开始,随着幕数增加而逐渐降低。
以下是实验结果的分析:
- 时序差分方法更快地达到了更低的误差。
- 这不是偶然结果,时序差分通常比蒙特卡洛学得更快。
- 这是因为时序差分可以在幕内学习,并且其更新的方差更低。
蒙特卡洛更好的长期性能并非总是首要考虑因素。在实践中,我们可能永远无法运行足够长的实验来达到渐近性能,因此早期学习速度往往更为重要。

总结 🎯
本节课中,我们一起学习了函数近似下时序差分更新的偏差特性。我们看到,尽管时序差分更新可能存在偏差,但我们通常仍然更倾向于使用时序差分学习而非蒙特卡洛,因为它可以更快地学习。理解这种权衡对于在实际问题中选择合适的强化学习算法至关重要。
089:利用强化学习为AI智能体构建知识 🧠


在本节课中,我们将探讨强化学习智能体如何构建和利用知识。我们将学习智能体需要掌握的两种核心知识类型,并深入理解一种称为“选项”的时域抽象方法,它能让智能体进行更高效、更长远的规划。
我的名字是多伊娜·普雷库普,我是麦吉尔大学的教授,同时也作为研究科学家在DeepMind工作。我的许多研究兴趣与强化学习中的抽象概念有关。
强化学习智能体需要获取两种知识。
第一种是程序性知识,即“如何做事情”。策略是这方面最基本的一个例子。但实际上,我们可能还希望智能体拥有其他知识,例如如何与特定物体互动,或如何在不同的地点之间移动。我将从技能、选项或有时称为目标驱动行为的角度来讨论这类知识。
第二种是预测性知识或模型知识。这意味着智能体需要知道在其行为条件下可能会发生什么。价值函数是这类知识的一个例子,但还有其他形式,例如环境模型。
我们希望这些知识具备某些特性。首先,我们希望知识是可学习的,以便智能体能从数据中获取它。其次,我们希望知识是可表达的,智能体应能了解不同事物和不同情境。最后,我们希望智能体能够组合已有的知识片段,形成更大的知识单元。
这些是我们对知识表示的主要愿景。知识表示必须在智能体行为的时间尺度上,以及在智能体对其感知世界进行推理的能力上,都能实现泛化。这就是状态抽象和函数逼近发挥作用的地方。
接下来,我将更详细地讨论程序性知识在不同时间尺度上的泛化。
为何需要时域抽象?⏳
我们的智能体在“诞生”之初,通常只有一组非常有限的动作,并且这些动作总是持续一个时间步长,这是为了符合马尔可夫决策过程的框架。
但在现实情况下,智能体可能需要执行持续多个时间步长的行动过程。例如,如果你计划从蒙特利尔前往埃德蒙顿,你不会考虑肌肉抽搐级别的动作,而是会考虑“打车去机场”、“飞往埃德蒙顿”、“打车去大学”、“可能顺便吃个晚饭”这样的步骤。这些是持续一段时间的行为单元,它们各不相同。
智能体应该能够在这个层面进行推理,因为这意味着它的计划会变得更短(可能只有四步,而不是成千上万步),并且这个计划在其他情境下可能是可复用的。例如,如果目的地不是埃德蒙顿而是多伦多或其他城市,智能体仍然会经历相同类型(打车、飞行等)的步骤。
如何形式化时域或行为层面的抽象?🔧
实现这种抽象的一种方法是通过选项这个概念。
我们将一个选项视为由三个部分组成:
- 启动集:指可以启动该选项的环境状态集合。例如,只有当我们身处机场时,才能执行“飞行”这个选项。因此,“在机场”就是“飞行”选项的启动集。
- 内部策略:指选项在执行过程中选择原始动作的方式。例如,如果我们正在“走向登机口”,“行走”这个动作序列就是一个策略。它负责接管控制并执行,本质上是在给定智能体状态下选择原始动作的概率分布。
- 终止条件:这通常也是随机的。它告诉我们智能体在任一特定状态下结束该行为的概率。例如,在“走向登机口”时,我们可能因为到达登机口而结束该行为,也可能因为突发警报需要离开建筑而切换到其他行为。
基于这些组件,智能体现在拥有了可以执行的行为单元。我们也可以为这些行为单元配对模型。每个选项都有一个模型,其模型包括智能体在执行过程中可能获得的预期奖励,以及一个关于它最终可能到达状态的转移概率分布。
由于选项持续的时间长度不同,我们不仅要考虑转移到下一个状态,还要考虑转移到下一个时间点。因此,这实际上是一个关于状态和时间的联合分布。
半马尔可夫决策过程 🔄
一旦智能体被赋予了选项,它的推理方式与在MDP中基本相同,只是现在它在一个半马尔可夫决策过程中运行。马尔可夫性质仍然成立,但一个行为的持续时间不再是固定的,而是基于概率分布。
然而,所有你已经熟悉和喜爱的规划与学习算法,例如价值迭代、时序差分学习,以及本课程中讨论的所有其他方法,在SMDP中的工作方式与在MDP中几乎完全相同。因此,我们可以运用所有这些算法的思想来学习关于选项的知识。
开放的研究挑战 ❓
一个有趣的问题是如何在实现时域抽象的同时,也进行状态抽象或函数逼近。理想情况下,我们希望两者兼得:就像我们希望思考“去机场”的行为而不是肌肉抽搐一样,我们也希望思考“机场”这个概念而不是空间中的具体厘米坐标。
然而,这两者实际上是不同的,我们希望它们能以某种方式协同工作。但如何同时获得良好的时域抽象和状态抽象,并让它们之间能够良好地“沟通”,这仍然是一个开放的研究问题。
同样,另一个有趣的开放研究问题是确定选项从何而来。谁告诉我们什么是好的终止条件?这是我们希望弄清楚但尚未完全掌握的问题。
在本节课中,我们一起学习了强化学习智能体构建知识的框架。我们明确了程序性知识和预测性知识的区别,并深入探讨了选项作为时域抽象的核心工具,它由启动集、内部策略和终止条件三部分组成。通过选项,智能体可以在半马尔可夫决策过程的框架下进行更高效的规划和推理。最后,我们了解到,如何让时域抽象与状态抽象协同工作,以及如何自动发现有用的选项,仍然是该领域激动人心的开放挑战。
090:线性时序差分更新




在本节课中,我们将要学习线性函数近似在时序差分(TD)学习中的应用。我们将推导线性TD更新公式,理解表格型TD是其特例,并探讨线性方法的重要性。
线性函数近似简介
原则上,我们可以使用任何类型的函数近似进行强化学习。
线性函数近似是一个重要的特例。它足够简单,便于我们深入理解,同时仍然相当强大。事实上,结合TD的线性函数近似已被用于构建在许多游戏中超越人类表现的Atari智能体。
线性半梯度TD更新推导
上一节我们介绍了函数近似的概念,本节中我们来看看线性情况下的具体更新规则。
回顾半梯度TD的更新规则。它根据TD误差乘以近似价值函数关于权重的梯度方向来调整权重。
在线性情况下,某个状态的近似价值函数的梯度就是该状态的特征向量。
因此,半梯度TD的更新公式如下所示:
权重更新公式:
w ← w + α * δ * ∇w v̂(s, w)
在线性情况下,v̂(s, w) = x(s)^T * w,其梯度∇w v̂(s, w) = x(s)。
线性TD更新公式:
w ← w + α * δ * x(s)
其中,δ = R + γ * v̂(s‘, w) - v̂(s, w) 是TD误差。
权重沿着特征向量乘以TD误差的方向更新。如果一个特征值很大,那么对应的权重对预测的影响就很大。反之,如果特征值为零,则该权重对预测没有影响,梯度也为零。
由专家设计的特征所构成的固定基,对更新有重大影响。如果设计得当,我们可以通过简单的更新获得有效的价值函数近似。
作为特例的表格型TD
我们已经看到线性价值函数近似是表格型价值函数近似的严格泛化。我们可以证明,线性TD是表格型TD和状态聚合TD的严格泛化。
让我们更仔细地查看算法,以明确地看到表格型TD是特例。
想象我们有一个表格型状态表示。只有一个特征(对应当前状态的那个)等于1,其余特征都为零。一个状态的近似价值等于与当前状态相关联的权重。因此,我们可以将权重向量视为一个价值表,每个状态对应一个值。
以下是使用这些表格特征时半梯度TD的更新公式:
表格型TD更新公式:
w(s) ← w(s) + α * δ

在更新中,状态s的特征向量x(s)选择了与当前状态相关联的单个权重。这个权重就是该状态的价值估计,因此这个更新对应于我们在先前课程中看到的表格型TD更新。
我们可以使用相同的分析来证明,状态聚合TD也是线性TD的一个特例。

为何关注线性函数近似?
但是,为什么我们如此关注线性函数近似这个特例呢?
以下是几个关键原因:
- 易于理解和分析:线性方法更简单,便于数学理解和分析。TD学习的大部分理论都是针对线性设置的,我们将在下一个视频中进一步讨论。
- 可利用专家知识:在某些应用中,你可能拥有专家知识来帮助你设计好的特征。也许你就是领域专家,或者你可以与非常了解你应用的人交流。
- 性能与效率:如果我们能很好地设计这些特征,那么我们可以期望线性方法学习得更快,并达到良好的预测精度。特征设计提供了一种融入领域知识的方式,可以在实践中获得良好的性能。
总结
本节课中我们一起学习了线性TD更新。我们推导了线性半梯度TD的更新公式,理解了表格型TD是其一个特例,并探讨了线性函数近似之所以有用的原因。下次见。
091:时序差分法的真实目标 🎯

在本节课中,我们将深入探讨线性函数逼近下时序差分法的理论基础。我们将了解TD算法收敛到的“TD不动点”,并分析该解与最小均方值误差解之间的关系。
在之前的课程中,我们介绍了半梯度TD算法,将其视为在均方值误差上的近似梯度下降。但这只是对一个更微妙故事的简化。TD算法并不精确地优化这个目标。实际上,对于线性函数逼近的半梯度TD,我们可以考虑一个不同的目标。
事实上,线性TD被证明会收敛到一个被充分理解的近似解,称为TD不动点。我们今天就来讨论这个内容。
通过本视频的学习,你将能够理解线性TD的不动点,并描述在TD不动点处均方值误差的一个理论保证。
线性TD更新公式的深入分析 🔍
上一节我们介绍了TD不动点的概念,本节中我们来看看线性TD的具体更新过程。
在函数逼近下,一个状态的价值是状态特征与学习权重向量的内积。为了简化符号,我们用 Xt 表示与状态 St 相关联的特征向量。
价值函数可以表示为:
V(St) = Xt^T * w
我们可以将TD更新规则展开如下:
w ← w + α [Rt+1 + γ * Xt+1^T * w - Xt^T * w] * Xt
我们可以用一点线性代数知识重写这个公式。首先,将 Xt 提取到括号内。然后利用标量的转置等于其本身这一事实。
现在,让我们思考一下这个更新在期望下的表现。理解期望更新是证明收敛性的关键。TD更新可以重写为期望更新加上一个噪声项,因此其行为主要由期望更新的行为主导。

期望更新描述了权重从一个时间步到下一个时间步的预期变化。
TD不动点的定义与性质 ⚖️
理解了期望更新后,我们来看看TD算法最终会收敛到哪里。
期望TD更新可以写成一个向量 b 减去一个矩阵 A 乘以当前权重 w:
E[Δw] = b - A * w
其中,矩阵 A 是根据特征的期望定义的:
A = E[ Xt * (Xt - γ * Xt+1)^T ]
而向量 B 是根据特征和奖励定义的:
B = E[ Rt+1 * Xt ]
当这个期望TD更新为零时,我们说权重收敛了。我们称这个点为 w_TD。如果 A 是可逆的,我们可以将其表示为:
w_TD = A^{-1} * b
更一般地说,w_TD 是这个线性系统的解。我们称这个解为 TD不动点。可以证明,线性TD会收敛到这个点。事实上,可以证明TD最小化了一个基于这个 A 和 B 的目标。

这个目标将TD与贝尔曼方程之间的联系扩展到了函数逼近的设置中。回想一下,在表格型设置中,我们将TD描述为求解贝尔曼方程的基于样本的方法。线性TD类似地近似求解贝尔曼方程,最小化所谓的投影贝尔曼误差。
这个目标的细节超出了本课程的范围,但你可以参考课程教科书以获取更多细节。关键要点是,尽管TD没有收敛到最小均方值误差,但它确实收敛到了一个基于贝尔曼方程的有原则的目标的最小值。
TD不动点与最小均方误差解的关系 🔗
尽管如此,我们仍然希望理解TD找到的解与最小值误差解之间的关系。我们可以用以下公式正式描述这种关系:
||w_TD - w_MSE|| ≤ C * (1 / (1-γ)) * 最小可能误差
如果折扣因子 γ 接近1,TD不动点与最小价值误差解之间的差异可能会很大。另一方面,如果 γ 非常接近零,则TD不动点非常接近最小价值误差解。
这个界限也取决于特征的质量。如果特征有限,最小均方值误差和TD不动点处的值误差都可能很大。如果我们能完美地表示价值函数,那么无论 γ 是多少,TD不动点都等价于最小价值误差解。这是因为不等式两边都将是零。
那么,为什么一般情况下TD不动点不等于最小价值误差解呢?这是因为函数逼近下的自举。如果由于函数逼近,我们对下一个状态的估计持续不准确,那么TD可能会永远朝着一个不准确的目标更新。另一方面,如果我们的函数逼近器非常好,那么我们对下一个状态的估计将变得非常准确,因此基于这个估计的自举就不会有问题,TD解的误差就接近最小价值误差。
总结 📝
本节课中我们一起学习了线性半梯度TD算法收敛性的理论基础。
你现在应该更了解为什么线性半梯度TD保证会收敛到一个称为TD不动点的点,以及TD不动点与最小均方值误差之间的关系。关键在于,TD优化的是一个与投影贝尔曼误差相关的目标,而非直接的均方值误差,其最终解的质量受到折扣因子 γ 和特征表示能力的共同影响。
092:函数逼近方法总结 🧠
在本节课中,我们将总结第一周关于如何将强化学习从表格型方法扩展到函数逼近方法的核心内容。许多现实世界问题无法通过枚举所有可能状态来构建表格,因此转向函数逼近是使强化学习更广泛应用的关键一步。
本周内容概览
本周我们学习了大量关于函数逼近的知识,内容繁多,容易混淆。现在,让我们退一步,看看本周的主题如何融入整个课程的宏观图景。
下图展示了本专项课程中涵盖的所有算法及其相互关系。请注意,此图仅包含课程中介绍的算法。

本周的主要概念转变是采用了参数化函数逼近的框架。这意味着我们不再使用表格来存储每个状态的价值,这使我们处于地图的左侧。关于平均奖励的讨论将在后续进行,本周我们主要关注策略评估问题。
核心算法回顾
在策略评估的框架下,我们介绍了两种算法:梯度蒙特卡洛和半梯度时序差分。

- 梯度蒙特卡洛:在每个回合结束时进行更新。
- 半梯度时序差分:利用下一时间步的价值估计进行自举更新,因此无需等待一个回合结束即可学习。
函数逼近的关键概念
现在,让我们快速回顾一些关键细节。
我们描述了参数化价值函数,它是一个从状态到实数的映射。其输出由一个实值权重向量 W 控制。我们使用符号 v̂(s, W) 来表示近似价值函数,这表明价值估计由当前状态和学习的权重向量共同决定。
以下是参数化价值函数的两个例子:
- 线性函数:基于固定或专家设计的特征。
- 神经网络。
我们讨论了函数逼近的两个关键属性:泛化和区分。
- 泛化:更新一个状态的价值可以改进其他状态的价值估计,这可以加速学习。
- 区分:我们希望价值函数在状态差异很大时能赋予不同的价值。


从监督学习到价值函数学习
接下来,我们讨论了如何利用监督学习的思想来学习近似价值函数。我们无法保证对每个状态的价值都做到完美逼近,因此需要定义一个目标函数,来衡量我们的近似值与真实值之间的距离。
我们使用了均方价值误差作为目标函数,即每个状态的真实价值与我们的近似价值之间的平方误差之和,并按状态访问频率 μ 进行加权。
我们讨论了如何使用随机梯度下降来优化这个目标函数。
- 梯度蒙特卡洛算法:使用采样得到的回报来执行随机梯度下降更新权重。这意味着它可以从智能体与世界交互产生的经验中学习近似价值。
- 半梯度时序差分:作为随机梯度下降的一种近似被引入。它利用了自举法的优势,在实践中可能比蒙特卡洛方法收敛得快得多。其名称中的“半梯度”提醒我们,它并非一个严格的梯度下降算法。
最后,我们讨论了线性半梯度时序差分算法,或称线性函数逼近的TD。线性TD被证明可以收敛到一个有明确理论解释的点。

总结与展望

本节课中,我们一起学习了将强化学习扩展到函数逼近的核心思想。你现在已经具备了理解参数化函数强化学习的良好基础。我们介绍了从表格法到函数逼近的转变,探讨了泛化与区分的概念,并学习了梯度蒙特卡洛和半梯度时序差分这两种关键的策略评估算法。
接下来,我们将讨论构建状态和状态-动作特征的不同方法。下次课再见!
093:粗编码


在本节课中,我们将学习一种为线性价值函数创建特征的有效方法——粗编码。我们将了解它如何从表格表示法和状态聚合中演变而来,并理解其工作原理。

概述
用于构建价值估计的特征是强化学习智能体最重要的组成部分之一。本节将讨论一种简单但有效的特征构建方法。通过本视频的学习,你将能够描述粗编码,并阐述其与状态聚合的关系。
从表格表示到特征向量
首先,让我们回顾一下如何为线性价值函数创建特征。近似价值函数由一个权重向量 W 参数化。要计算一个状态的价值,我们首先需要计算其特征,并构建该状态的特征向量 x(S)。然后,状态的价值近似为权重向量与特征向量的点积:V(S) ≈ W · x(S)。
表格表示法可以表达为一个二进制特征向量。每个状态对应一个不同的特征。如果智能体处于某个状态,那么该状态对应的特征值为1,所有其他特征值均为0。表格情况只是线性函数近似的一个特例,其中特征向量是状态的指示器或独热编码。当然,当状态空间的大小远大于智能体可用内存时,这种方法就不可行了。
状态聚合的引入
假设我们想表示一条在池塘中游动的鱼的位置,这是一个二维状态。鱼可以处于无限多个位置中的一个。用一个有限的查找表来表示所有这些位置是不可能的。
回想一下,我们可以使用状态聚合,将附近的状态与相同的特征关联起来。这就像将每个方格内的所有状态视为同一个状态。在这个例子中,所有组都有大致相同的形状。但使用相同的形状并非必要。一般来说,我们可以使用任何我们想要的形状来聚合状态,只要这些形状没有间隙或重叠。状态聚合通常不允许形状重叠,但这个限制并非必需。事实上,通过允许重叠,我们获得了一类更灵活的特征表示,称为粗编码。
粗编码的工作原理
让我们看一个池塘中鱼当前位置的特征向量示例。请记住,特征向量中的每个索引对应一个形状。如果鱼在某个圆圈内,则对应圆圈的特征被激活或设置为1;否则,该特征设置为0。特征的感受野对应于激活该特征的位置。
当鱼移动到一个新位置时,它通常被一组不同的圆圈覆盖。附近的状态将具有相似的特征激活模式,但它们也可能激活不同的特征分量,包括不同数量的激活特征。在这个例子中,总是至少有一个激活特征,最多有三个激活特征。
我们目前讨论的所有思想并不局限于二维状态空间,粗编码也可以应用于更高维度的输入。

总结
本节课中,我们一起学习了表格情况如何用状态的二进制独热编码来表示,以及粗编码如何作为状态聚合的推广。通过允许特征感受野的重叠,粗编码提供了一种更灵活、更强大的方式来为大规模或连续状态空间构建特征。
094:粗编码的泛化特性


在本节课中,我们将要学习粗编码(Coarse Coding)表示方法中,特征形状、大小和数量等属性如何影响智能体的泛化能力和区分能力,并最终影响学习的速度与价值函数近似的准确性。
上一节我们介绍了几种不同的特征表示方法,包括表格法、状态聚合和粗编码。但我们没有解释为什么粗编码可能有用。本节中,我们来看看改变粗编码的属性如何影响泛化与区分。
通过本视频的学习,你将能够描述粗编码的参数如何影响泛化与区分,以及这如何影响学习的速度和准确性。
🎯 特征形状与大小对泛化的影响
我们讨论过,粗编码将状态分组到任意形状和尺寸的特征中。这些特征可以是圆形、椭圆形、正方形或不同形状的组合。
以下是特征形状和大小如何影响泛化与区分,进而影响学习速度和我们能表示的价值函数。


请注意,对一个状态的权重进行更新,会改变所有位于激活特征感受野内的状态的价值估计。
如果激活特征的感受野的并集很大,则特征表示的泛化程度更高。反之,如果并集很小,则泛化程度很低。上图中,右侧较大的圆形泛化更广,将更新分布到了更多的状态上。
然而,泛化不仅仅是一个标量。在粗编码中使用不同的形状也可以改变泛化的方向。
让我们将之前圆形的例子与使用垂直拉长的椭圆形进行粗编码的泛化方式进行比较。

由椭圆形构成的感受野长度大于宽度。使用这些椭圆形,粗编码主要在垂直维度上进行泛化。

🔍 感受野重叠与区分能力
我们已经讨论了感受野的形状和大小如何影响泛化及学习速度。但关于我们估计的最终准确性呢?这就涉及到区分能力。
回忆一下,区分两个不同状态价值的能力被称为区分。
在粗编码中,圆形之间的重叠决定了区分的水平。我们不可能做到完美的区分,因为我们永远无法更新一个状态的价值而不影响其他状态的价值。
下图中的彩色形状描绘了这种特定粗编码的区分能力。为了可视化简洁,我们只高亮显示了几个区域。

每个位于同一彩色形状内的状态将拥有完全相同的特征向量。因此,它们都必须具有相同的近似价值。这些区域越小,我们的区分能力就越好。
使用更多的圆形,区域会变得更小,我们就能更精细地区分不同状态的价值。或者,我们也可以使圆形本身变小。

因此,特征的大小、数量和形状都会影响表示的区分能力。
📈 一维示例:学习阶跃函数
让我们看一个一维输入空间的简单例子:考虑学习一个阶跃函数的近似。
我们假设可以采样真实函数值来更新我们的估计。这个例子将帮助你更好地理解表示选择如何影响学习速度和最终近似的质量。
对于我们的一维函数,每个特征的感受野将被表示为重叠的区间。让我们从这个相对较短的区间开始。我们将放置大约50个这样的区间,让它们在我们的函数定义域上随机重叠。
以下是随着我们随机采样函数的真实值,我们的函数估计如何变化。

我们从初始估计值0开始,描绘为一条平坦的线。
每个特征的感受野相当小,因此即使在许多次采样之后,我们对阶跃函数的近似也不是很好。经过更多训练,我们的近似最终与真实函数接近匹配,但并不完美。通过检查函数顶部的近似很容易看出这一点,它远不够平坦或平滑。
让我们用更长的区间再试一次。

每个特征的感受野相当大。这意味着我们可以用相对较少的样本来近似函数的粗略形状。
随着我们对函数进行更多采样,我们的估计形成了对真实函数越来越好的近似。
较长区间的广泛泛化使学习速度更快,我们需要更少的样本来获得良好的近似。大量较长区间也带来了更好的区分能力,即对真实函数更好的最终近似。
在这个例子中,较长的区间最终实现了更好的泛化和区分,但这可能并非总是如此。每个任务可能需要不同的特征属性,并没有一个通用的解决方案。
✅ 总结
本节课中我们一起学习了特征的大小、数量和形状如何影响泛化,以及由此产生的形状交集如何影响区分能力。
粗编码是一种非常通用的表示类型。理解它在学习过程中如何进行泛化和区分,将帮助我们理解其他表示方法,包括神经网络。
095:瓦片编码 🧱

在本节课中,我们将学习一种计算高效的粗编码方法——瓦片编码。我们将探讨其工作原理、优势与局限性,并理解它如何实现泛化与区分。
概述
上一节我们介绍了粗编码。本节中,我们来看看一种计算高效的粗编码实现方式:瓦片编码。通过本视频的学习,你将能够解释瓦片编码如何同时实现泛化与区分,并理解其优势与局限性。
什么是瓦片编码?
瓦片编码是粗编码的一种特定类型。它使用重叠的网格对状态空间进行详尽划分。
这或许通过一个例子能更好地理解。
让我们重新审视生活在二维连续状态空间(池塘)中的鱼朋友。与使用任意形状的粗编码不同,瓦片编码使用正方形。
在一个空间上布置一堆正方形最便捷的方式是什么?那就是网格。
我们称这个网格为一个“瓦片层”。到目前为止,这仅仅是状态聚合。更大的瓦片将导致更强的泛化能力,尽管理想的瓦片大小取决于具体问题,但通常使用较大的瓦片是个好主意。
提升区分能力

为了提升瓦片编码的区分能力,我们可以将多个瓦片层叠加在一起。每个瓦片层都偏移一个很小的量。
偏移每一层瓦片会创建许多小的交叉区域,这带来了更好的区分能力。在实践中,使用大量瓦片层是有用的。
对于单个瓦片层,泛化只发生在正方形内部。但有了多个瓦片层,对这个状态的更新会泛化到这些其他状态。在这种情况下,泛化是沿对角线的。如果我们使用了随机偏移,那么泛化将更接近球形且均匀。这在教科书中有更详细的讨论。
控制泛化属性
接下来,我们谈谈如何进一步控制泛化属性。
我们可以通过创建矩形网格而非正方形网格来实现这一点。一个高效的方法是缩放状态空间的每个维度。
环境在这里看起来被挤压了。实际上,在这个被挤压的环境上叠加正方形,就像在未被挤压的环境上叠加矩形一样。
通过使用矩形,我们可以控制泛化在状态空间每个维度上的广度。
优势与局限性
瓦片编码可以表示广泛的函数,但其效用不止于此。瓦片编码还具有计算高效的特点。由于网格是均匀的,很容易计算当前状态位于哪个单元格中。
得益于其计算效率,瓦片编码可用于在低维环境中快速运行初步实验。
然而,随着维度的增加,所需的瓦片数量呈指数级增长。因此,有时可能需要单独处理输入维度。输入维度是否可以独立处理,取决于具体问题。

总结
本节课中,我们一起学习了瓦片编码,理解了它是如何通过重叠网格实现高效计算,并在泛化与区分之间取得平衡的。我们看到了它作为状态聚合的泛化形式,在低维问题中的实用性,也认识到了其在高维空间面临的挑战。下一节再见。
强化学习专题:P96:在时序差分法中使用瓦片编码 🧩

在本节课中,我们将学习如何将瓦片编码与线性时序差分学习结合使用,以高效地近似价值函数。我们将探讨瓦片编码表示的重要特性,并通过一个实验将其与状态聚合方法进行比较。
到目前为止,你已经学习了瓦片编码,但我们尚未将其与强化学习联系起来。今天,我们将解释如何将瓦片编码与线性时序差分法结合使用。
通过本视频的学习,你将能够解释如何在时序差分学习中使用瓦片编码,并识别瓦片编码表示的重要属性。
瓦片编码表示的一个重要属性是:激活瓦片的数量始终显著少于瓦片总数。我们可以利用这一特性来高效地计算价值函数。
回想一下,在线性函数近似中,价值函数是权重向量和特征向量之间的点积。让我们看看当特征向量是稀疏的二进制向量时,这个点积是什么样子。

如果我们对两个向量进行逐元素相乘,许多元素乘积将为零。这意味着我们只需要考虑特征向量中非零元素对应的权重。由于特征是二进制的,非零特征处的权重将乘以一。
以常规方式计算点积会非常耗时。相反,我们可以直接对激活特征对应的权重进行求和。请注意,这需要的时间是恒定的,因为每个状态中激活特征的数量是相同的。瓦片编码产生的特征向量使得查询价值函数在计算上非常廉价。
让我们看一个使用瓦片编码特征计算价值函数的例子。

假设我们回到有两个瓦片覆盖的旧池塘环境,每个瓦片覆盖包含四个瓦片。我们已经用颜色编码了瓦片覆盖,每个瓦片方格都有索引,如图所示。
如果鱼的位置和权重因子如图所示,鱼所在位置的价值是多少?
我们可以看到,鱼与紫色瓦片覆盖中的方格1和橙色瓦片覆盖中的方格4相交。这为该状态生成了以下特征向量。
现在,我们只需通过点积计算该状态的价值。特征向量是二进制的,因此我们可以直接将非零特征位置对应的权重相加。这给我们一个价值为2。
现在,让我们运行一个使用瓦片编码的实验,并将其与状态聚合进行比较。
回想一下,瓦片编码本质上是多个状态聚合实例(或称瓦片覆盖)的叠加。我们的环境是1000个状态的随机游走,状态编号从1到1000,所有回合都从状态500开始。在每个时间步,智能体随机转换到任一侧的200个相邻状态之一。超出状态1或1000将导致转换到终止状态。例如,查看状态2左侧的可能转换:一个会转到状态1,其余199个会转到终止状态。
让我们讨论如何在这个问题中使用函数近似。我们将从状态聚合开始。假设我们使用一个包含5个组的状态聚合,每组对应200个状态。现在,让我们为这个问题设计一个包含50个瓦片覆盖的瓦片编码器。我们将1000个状态视为一个区间,其中每个瓦片对应200个状态。由于每个瓦片有200个状态,你可能会认为我们只需要5个瓦片就能覆盖1000个状态的整个空间。然而,每个瓦片覆盖都相对于其他覆盖有轻微的偏移。由于这种偏移,需要一个额外的瓦片来覆盖因此留下的未覆盖空间。所以,我们的每个瓦片覆盖包含6个瓦片,而不是5个。
让我们使用梯度蒙特卡洛方法来比较这两种函数近似器。步长参数alpha根据激活特征的数量进行缩放:瓦片编码为50,状态聚合为1。让我们看看结果。

我们绘制了每个回合后30次运行的平均价值误差。由于积极的泛化,两个智能体都学习得很快。然而,瓦片编码表示能够更好地区分状态,并实现了更低的价值误差。有趣的是,尽管瓦片编码器有更多的参数,但它学习的速度与核心状态聚合一样快,同时还实现了更好的区分能力。这是因为多个重叠瓦片创建的小交叉区域。
本节课中,我们一起学习了如何将瓦片编码用于策略评估中的价值函数近似,并通过一个简单示例比较了瓦片编码与状态聚合。下次课,我们将超越固定表示,开始学习使用神经网络学习表示。
097:什么是神经网络 🧠

在本节课中,我们将学习神经网络。这是一种灵活且强大的非线性函数近似器。我们将了解其基本结构、工作原理,以及如何将其视为一个参数化的函数。
前馈神经网络的结构
上一节我们介绍了神经网络的概念,本节中我们来看看它的具体结构。
神经网络由节点和连接组成。节点被组织成不同的层。数据从输入层进入,通过连接传递到下一层的节点。每一层对数据进行计算,然后将结果传递给下一层,直到最后一层产生最终输出。
我们称之为前馈神经网络,因为数据始终向前通过各层。没有任何连接会回环到网络的前面。如果存在回环,一个节点的输出可能影响其自身的输入,这种网络则被称为循环神经网络。
以下是神经网络的基本组成部分:
- 节点: 进行计算的单元。
- 连接: 节点之间的信息传递通道,每条连接都有一个权重。
- 层: 节点的集合,包括输入层、隐藏层和输出层。
节点的计算与激活函数
了解了网络结构后,我们来看看单个节点是如何工作的。
当数据通过一条连接传递时,会乘以一个权重。节点将所有加权输入求和,然后对这个和值应用一个激活函数。激活函数通常是一个非线性变换。


常见的激活函数包括:
- Sigmoid型函数: 如
tanh或逻辑函数。 - 整流线性单元: 即
ReLU函数。 - 阈值单元。
数学表示:前向传播
现在,让我们从数学角度看看如何表示神经网络的前向传播过程。

在每个节点,我们有两个向量:输入向量和每个输入对应的权重向量。权重 w_{ij} 的第一个下标 i 表示连接来源的节点,第二个下标 j 表示连接指向的节点。
节点的计算可以表示为:
output_j = activation_function( sum_i (input_i * w_{ij}) )
注意,这里输入 S 被视为行向量,因此计算加权和时无需转置。
每一层都由许多这样的节点组成。因此,神经网络本质上就是一个参数化的函数,尽管从节点集合的角度看可能不太直观。
矩阵化表示
为了更清晰地理解神经网络作为参数化函数的本质,让我们使用矩阵向量乘法来重写网络中的运算。
我们可以将一层的输入视为一个行向量,将该层的所有权重视为一个矩阵(即一个二维数组)。这样,我们可以使用矩阵乘法计算整个层的输出。
公式如下:
Z = X * W + b (其中 X 是输入行向量,W 是权重矩阵,b 是偏置向量)
A = activation_function(Z)
然后,我们对输出向量 Z 的每个元素应用激活函数,得到该层的激活值 A。如果这个输出不是最终层,那么 A 就成为下一层的输入向量,我们重复这个过程。
通过这种表示,可以清楚地看到,神经网络就是一系列参数化(权重 W 和偏置 b)的线性变换与非线性的激活函数的组合。

总结
本节课中,我们一起学习了神经网络的基础知识。我们解释了神经网络如何由处理和传递信息的节点网络构成,讨论了前馈神经网络的结构,并通过数学公式和矩阵运算展示了它如何作为一个参数化的函数进行工作。理解这些基本概念是后续学习深度强化学习的重要基石。
强化学习专项课程:P98:使用神经网络进行非线性逼近

在本节课中,我们将学习神经网络如何作为一种特征构造策略,用于非线性函数逼近。我们将理解神经网络如何从输入状态中学习并生成有用的特征表示,并将其与之前学习的瓦片编码方法进行对比。

瓦片编码是一种为预测创建固定特征集的方法。神经网络则提供了一种学习有用特征集的策略。本节将讨论神经网络如何创建这些特征。
通过本视频的学习,你将理解神经网络如何进行特征构造,以及神经网络如何成为状态的非线性函数。
重温前馈神经网络
当我们首次构建神经网络时,需要指定初始权重。初始化权重的方式很重要,但关于这一点我们稍后再详述。现在,我们假设权重是从某个随机分布中抽取的。
让我们看看当给定输入向量通过网络传递时会发生什么。首先,我们只关注网络中的一个节点。
以下是单个节点的计算过程:
- 每个输入乘以对应的权重。
- 这些加权输入的总和被传递给一个非线性激活函数。
- 最终结果是输入的一个非线性函数。
这个过程在层中的每个节点上重复进行。每个节点都有一组不同的权重,因此会产生不同的输出,我们称之为一个“特征”。所有这些新特征共同构成了新的表示。
与瓦片编码的类比
这个过程实际上与瓦片编码没有太大不同。我们将输入传递给瓦片编码器,得到一个新的表示。因此,在这两种情况下,我们都构建了一个输入到特征的非线性映射。并且,在这两种情况下,我们都对表示进行线性组合以产生输出,即当前状态的近似价值。
通过对比瓦片编码,我们可以更深入地理解神经网络的表示。
回想一下,在创建瓦片编码器时,我们必须设置几个参数:瓦片的大小和形状,以及瓦片的数量。这些参数在学习之前是固定的。
在神经网络中,我们有类似的参数,对应于层数、每层的节点数和激活函数。这些通常也在学习之前固定。从这个意义上说,两者都利用先验知识来帮助构造特征。
然而,除此之外,神经网络还具有可调整的参数,这些参数可以在学习过程中改变特征。神经网络可以利用数据来改进特征,而瓦片编码器则可以从数据中整合新信息。
非线性特征的可视化
瓦片编码和神经网络都产生在输入空间上非线性的特征。我们可以通过可视化预训练神经网络的隐藏层来更好地理解这一点。
我们训练了一个智能体在一个连续的二维空间中,该空间包含两面墙之间的狭窄走廊。这里我们绘制了网络学习到的单个特征的感受野。
坐标轴对应于XY位置,即MDP的状态空间。图中的每个点对应于该XY状态的特征值,颜色越深表示激活程度越大。如果是白色,则表示该特征在该状态下未被激活。
这个图意味着什么?它显示了该特征对哪些状态是活跃的,即特征幅度超过了一个小阈值。因此,在更高层次上,这个图展示了这个特征如何进行泛化:对其权重的更新会改变所有这些状态的值。
观察几个特征的感受野,我们可以看到不同的特征以不同的方式泛化,并形成复杂的非线性形状。这些激活不像瓦片编码那样具有硬边界。
这些学习到的特征可以具有平滑变化的边界。这个特征根据状态的不同,具有不同程度的泛化能力。有趣的是,这个网络中的特征激活还向我们展示了两面墙的位置。


本节课到此结束。你学习了神经网络如何被视为一种构造特征的方式,并且认识到神经网络是状态的非线性函数。
099:深度神经网络




在本节课中,我们将要学习神经网络架构的选择如何影响性能。我们将重点探讨“深度”在神经网络中的作用,理解深度如何通过特征的组合与抽象来促进学习。
神经网络架构的选择对性能有很大影响。这包括节点的数量、激活函数的选择,以及节点如何排列和连接。今天我们将提供一些关于网络深度所扮演角色的直观理解。
通过本视频的学习,你将理解深度神经网络如何由许多层组成,并理解深度如何通过组合与抽象来促进特征学习。
神经网络作为模块化系统 🧱
我们可以将神经网络视为一个模块化系统,其中每一层都是一个模块。我们可以添加或移除层,也可以更改我们使用的层类型。
网络的深度由网络中隐藏层的数量定义。从理论上讲,神经网络不一定是深的。一个具有单个隐藏层的神经网络,只要足够宽,就可以近似任何连续函数。我们称之为通用近似定理。
然而,实践经验和理论都表明,深度神经网络可能使近似复杂函数变得更容易。
深度促进特征组合 🔗
深度之所以有益,一个原因是它允许特征的组合。组合可以通过组合模块化组件来产生更专门化的特征。
考虑一个直观的例子:输入是图像的原始像素。较早的层可能学会捕捉低级特征,比如各种角度的线条。下一层可能学会将这些线条组合成各种形状。基于这些,网络或许能够检测图像中的物体或动物。这种方法通常比试图直接从原始像素推断这些信息效果更好。
通过向每一层添加更多层或更多单元,我们可以表示更复杂的函数。
深度有助于获得抽象 🎯
深度神经网络组合了许多较低层次的抽象层,每一连续层都有助于形成越来越抽象的表示。

考虑之前的例子,网络最终可能用一个比特来表示“猫头鹰”这个概念。0 表示图像不包含猫头鹰,1 表示图像包含猫头鹰。在这个层次上,图像中所有额外的细节都已被移除。我们不再知道猫头鹰的颜色,甚至不知道背景中有什么。

事实上,我们可以明确地设计网络来从输入中移除不必要的细节。例如,可以设计一个带有瓶颈层的网络。其思想很简单:每一连续层包含的节点都比前一层少。表示层是节点最少的层,它包含了预测所需的关键细节。
总结与展望 📝
总的来说,网络的深度可以显著提高我们智能体学习特征的能力。在本视频中,我们描述了网络如何由多层组成,并讨论了深度如何促进组合与抽象。
今天我们讨论了深度神经网络在实践中可能带来的一些好处。选择合适的架构可能很困难,并且会显著影响性能。在本课程中,我们将不再进一步讨论网络架构。关于这个主题有很多优秀的资源,如果你想了解更多,可以去查阅。
接下来,我们将讨论如何学习神经网络的参数。
本节课中我们一起学习了深度神经网络的基本概念,理解了深度如何通过特征的组合与抽象来增强网络的学习能力,并简要介绍了瓶颈层等设计思想。
100:训练神经网络的梯度下降法 🧠


在本节课中,我们将学习如何为神经网络推导梯度,并实现梯度下降算法。我们将看到,尽管神经网络结构更复杂,但其训练的核心思想仍然是梯度下降。
概述
我们之前讨论的算法更新通常比较简单,并且大多基于梯度下降。对于神经网络而言,情况也是如此。反向传播算法实际上并不复杂,它本质上就是梯度下降,但由于嵌套函数的存在,梯度的计算会稍微复杂一些。
通过本视频的学习,你将能够推导神经网络的梯度,并在神经网络上实现梯度下降。
定义损失函数
与线性函数近似一样,第一步是定义关于神经网络参数的损失函数,然后推导其梯度。
损失函数衡量了网络预测值与正确值之间的差距。我们训练神经网络的目标是找到能够最小化这个损失函数的参数。
函数的梯度指向函数值增长最快的方向。通过向梯度的相反方向移动,我们就能朝着最快速最小化损失的方向前进。
计算神经网络的梯度
那么,我们如何计算神经网络损失函数的梯度呢?在开始之前,让我们先建立一些符号约定。
- 网络的输入是 S,输出是 Ŷ。
- 隐藏层学习特征,我们称之为 X。权重 A 用于生成特征,权重 B 则对 X 进行线性加权以产生输出。
- 网络每一层的输出都可以表示为一个向量,这里就是 X 和 Ŷ。
- 权重矩阵的第一个索引指向该层的输入,第二个索引指向输出。
我们暂时假设有一个通用的损失函数 L,以便描述基本思想。L 的一个例子是平方误差。在推导过程中,我们将保持 L 的通用性,稍后会给出使用平方误差时的具体更新公式。
在深入推导之前,让我们先了解一下方向。虽然推导过程有些复杂,但我们会发现最终的更新公式相当简单。
每一层参数矩阵的更新都类似于一个误差项 δ 乘以该层的输入。对于 A,输入是 S;对于 B,输入是 X。此外,我们还会发现 δ_A 可以有效地计算为 δ_B 的函数。来自网络输出的误差 δ_B 被反向传播到更早的层,以帮助确定 A 在产生该误差中所起的作用。
推导梯度
现在,我们如何得到 δ_A 和 δ_B 呢?为了趣味和教育目的,让我们现在进行完整的推导。让我们从网络的输出开始,向后推导,这样做有一个很好的理由,你马上就会看到。
我们首先计算损失函数 L 对第一组权重 B 的偏导数。
我们使用链式法则,得到 L 对 Ŷ 的导数乘以 Ŷ 对 B 的导数。
下一步是再次使用链式法则计算这个导数。为了简化,我们引入一个新变量 θ。θ 是隐藏层输出与最后一组权重的乘积。让我们把它写在旁边以便记住。现在,让我们用 θ 重写 Ŷ。
让我们展开 Ŷ 对 B 的导数。使用链式法则,我们得到 f_B 对 θ 的导数乘以 θ 对 B 的导数。
θ 对 B 的导数是 X。这是因为 θ 是 B 的线性函数,并且 X 不依赖于 B。
现在我们已经完成了对 B 的梯度推导,接下来我们将推导 A 的梯度。但在那之前,让我们为损失函数和激活函数做出一些选择,以便能看到 B 的通用方程的一个具体实例。
让我们定义 L 为平方误差,并在最后一层使用线性激活函数。
损失函数对 Ŷ 的导数是:
∂L/∂Ŷ = Ŷ - Y
输出层激活函数的导数是 1。这是因为 f_B 是恒等函数,θ 对自身的导数是 1。
这是损失函数对 B 的通用梯度:
∂L/∂B = (∂L/∂Ŷ) * (∂f_B/∂θ) * (∂θ/∂B)
将其代入对 B 的梯度,我们得到:
∂L/∂B = (Ŷ - Y) * 1 * X
为了在计算对 A 的梯度时简化符号,让我们定义一个新项 δ_B:
δ_B = (∂L/∂Ŷ) * (∂f_B/∂θ)
现在,对 B 的梯度可以重写为 δ_B 乘以它的输入 X。
接下来,为了计算对 A 的梯度,我们需要经历与 B 相同的步骤,主要区别在于我们多了一个链式法则步骤,因为权重 A 也会影响 X。
让我们从这里开始。让我们使用链式法则展开这个导数。在展开下一项之前,让我们引入另一个辅助变量 ψ:
ψ = 输入 S * A
我们把它放在一边,并用它重写 X。然后我们展开下一项。

再次使用链式法则,我们得到 f_A 对 ψ 的导数乘以 ψ 对 A 的导数。
因为 ψ 是 S 乘以 A,所以我们得到 ∂ψ/∂A = S。
将所有部分放在一起,我们最终得到了对 A 的导数。我们现在拥有了计算网络参数梯度所需的一切。我们可以通过再次定义一个项 δ_A 来简化这个导数。
现在,对 A 的导数是 δ_A 乘以它的输入 S。
请注意,两个梯度都可以重写为相似的形式:它们都有一个包含误差信号的 δ 项乘以它们的输入。
反向传播算法伪代码
让我们简要看一下实现随机梯度下降反向传播算法的一些伪代码。
对于数据中的每个数据点 (S, Y):
- 我们首先从网络获得预测值 Ŷ,这通常称为前向传播。
- 然后我们从输出开始计算梯度。
- 我们首先计算 δ_B 和 B 的梯度。
- 然后我们使用这个梯度更新参数 B,步长为 α_B。
- 接下来我们更新参数 A。
- 我们计算 δ_A,它使用了 δ_B。
- 请注意,通过首先计算网络末端的梯度,我们避免了为 A 重新计算那些已经为 δ_B 计算过的相同项。实际上,这正是反向传播背后的主要思想。它只是梯度下降,并配有一个高效计算梯度的策略。
- 然后我们计算 A 的梯度,并使用步长 α_A 用这个梯度更新 A。
这个推导和算法很容易扩展到更深的网络:更早层的 δ 类似地使用下一层的 δ 递归计算。每一层的更新总是采用 δ 乘以该层输入的形式。
本质上,网络将存储在每个层 δ 中的误差信息传递回去。为了让这更具体,让我们看一个特定网络的反向传播算法。
以下是如果我们对隐藏层使用 ReLU 激活函数、对输出层使用线性单元时的伪代码:
- 首先,我们计算输出层的误差。
- 然后我们计算 ReLU 单元对 ψ 的导数。
- 最后,我们使用来自输出层的误差信号以及导数来计算隐藏层的误差信号。

其余部分保持不变。
总结
本节课到此结束。今天我们推导了神经网络的梯度,并讨论了反向传播的主要思想:从网络输出开始计算梯度可以节省计算量。
这是一个相当详细的推导,你实际上不需要记住所有这些步骤。我们的目标是让你对神经网络的更新方式有一些了解,以及它如何随着损失函数、激活函数和网络层的不同选择而变化。在你的评估中,你将实现本视频末尾给出的伪代码。
在下一个视频中,我们将为你提供更多工具,使你的神经网络实现在实践中更加有效。
101:神经网络的优化策略 🚀

在本节课中,我们将学习如何更有效地训练神经网络。我们将探讨两个关键方面:如何为网络设置一个好的起点(权重初始化),以及如何改进训练过程中的更新机制(优化策略)。这些简单的策略极大地促进了深度神经网络的训练和广泛应用。
权重初始化的重要性 🎯
上一节我们介绍了神经网络训练是一个迭代过程。本节中我们来看看这个过程的起点——权重初始化。这个起点的选择对神经网络的性能有重大影响。
让我们看一个只有一个权重的例子。在y轴上,我们展示损失函数;在x轴上,我们展示权重的值。梯度下降法会迭代地将权重移向最近的驻点。
但神经网络的损失函数并非如此简单。如果我们从这个近乎平坦的区域开始,由于梯度接近0,梯度下降法可能很难取得进展。相反,如果我们从这个小的“碗”状区域内部开始,就能快速找到局部最优点。然而,如果我们能从某个更好的位置开始,从而快速找到更优的点,岂不是更好?
一个简单而有效的初始化策略是从一个方差很小的正态分布中随机采样初始权重。这样,同一层中的每个神经元都有与其他神经元不同的输出,这提供了一组更多样化的潜在特征。通过保持方差很小,我们确保每个神经元的输出与其相邻神经元的输出在同一范围内。
这个策略的一个缺点是,当我们为一个神经元增加更多输入时,其输出的方差会增大。我们可以通过将权重的方差按 1 / sqrt(输入数量) 的比例进行缩放来解决这个问题。
改进更新机制:动量法 ⚡
在确定了网络的起点之后,我们开始使用随机梯度下降步骤对权重进行增量式的小改进。另一种改进训练的方法是考虑更复杂的更新机制。两种常见策略是使用“重球法”(也称为动量法)和向量步长自适应。我们先来谈谈动量法。

想象一下,这是二维权重向量在随机梯度下降下的轨迹。这是标准的随机梯度下降更新规则:
w_{t+1} = w_t - α * ∇L(w_t)
这是修改后包含动量的更新规则:
w_{t+1} = w_t - α * ∇L(w_t) + λ * (w_t - w_{t-1})
注意,它类似于常规的随机梯度下降更新,加上一个称为动量的额外项。动量项使用梯度衰减和(衰减率为λ)来总结梯度的历史。
如果最近的梯度都指向相似的方向,那么我们就会在该方向上获得动量。这意味着我们在该方向上迈出一大步。如果最近的更新方向相互冲突,那么它会抵消动量,动量项对更新的影响很小,我们将进行常规的梯度下降步骤。
动量法被证明可以加速学习,意味着它能更快地到达驻点。
改进更新机制:步长自适应 📈

另一个潜在的改进是为网络中的每个权重使用单独的步长。到目前为止,我们只讨论了一个全局标量步长α。众所周知,这可能会出现问题,因为这可能导致对某些权重的更新太大,而对其他权重的更新太小。
在实践中,根据学习过程的统计数据为每个权重自适应调整步长,可以带来更好的性能。

那么更新规则如何改变呢?改变非常简单。不再使用标量α进行更新,而是使用一个步长向量(用下标t表示它在每个时间步可以变化):
w_{t+1} = w_t - α_t ⊙ ∇L(w_t)
其中 ⊙ 表示逐元素乘法。梯度的每个维度都由其对应的步长(而不是全局步长)进行缩放。
有多种方法可以自适应调整步长向量,你将在作业中实现其中一种。
总结 🎓
本节课中我们一起学习了改进神经网络训练的方法。具体来说,我们讨论了一种初始化神经网络权重的策略,以及如何使用动量法和步长自适应来加速学习。现在,你已经准备好用神经网络实现一个TD智能体了。祝你学习愉快!
102:深度强化学习与人工智能 🧠
在本节课中,我们将探讨深度强化学习,了解其如何将强化学习的问题框架与深度学习的解决方案相结合,从而解决复杂的人工智能任务。
强化学习:一个通用的决策框架 🤔
上一节我们介绍了课程背景,本节中我们来看看为什么需要强化学习。
强化学习是一个通用的框架,用于思考各类决策问题。它提供了一种思考方式,适用于任何涉及智能体的问题。该智能体在世界中采取行动,其行动会影响世界,世界随之变化并向智能体返回一些观察结果。智能体的目标是选择能最大化其性能的行动,该性能由某种奖励信号衡量。
这是一个非常通用的问题,可以应用于从机器人到游戏,再到金融交易等各种场景。强化学习就是这样一个让我们能够处理所有这些问题的框架。
深度学习:通用的表示学习方法 🎯
上一节我们了解了强化学习的问题框架,本节中我们来看看深度学习的角色。
深度学习是一种帮助我们解决广泛问题的通用框架。它是一种以非常通用的方式思考表示学习的方法。具体来说,如果给定一个目标,深度学习提供了一种构建能够实现该目标的表示的方法。它从输入开始,通过系统过滤并构建一些特征,以有助于理解这些输入,从而在无需向系统注入大量知识的情况下解决问题。
例如,你只需输入一张猫或狗的图片,系统就会构建特征来理解图像的局部区域,然后是更复杂的特征,最终做出决策,例如判断这是猫还是狗。
深度强化学习:问题与解决方案的结合 ⚡
上一节我们分别介绍了强化学习和深度学习,本节中我们来看看如何将它们结合。
深度强化学习是两者的结合。我们试图寻找一个能够解决任何人类级别任务的智能体,这是我们许多人对人工智能感兴趣的终极目标。如果我们想实现这个目标,该如何做?问题可以由强化学习定义,而深度学习或许为我们提供了实现目标的机制。因此,强化学习像是问题,而深度学习更像是解决方案。
这里有一个重要的猜想:强化学习 + 深度学习。将两者结合,为我们提供了一条可能实现宏大目标的途径,即解决任何此类问题的雄心。
深入理解深度学习 🧠
上一节我们提出了结合猜想,本节中我们更深入地理解深度学习的核心。
深度学习的核心是神经网络。深度神经网络可以被视为一个多层函数,一个复合函数,即函数的函数。
以下是其主要组成部分:
- 输入:进入系统的数据,例如描述猫或狗的图片。
- 处理层:由一系列不同的函数处理,产生内部状态或特征。每个函数都有权重参数
w,决定了函数的具体行为。 - 输出:经过所有计算层后,神经网络输出结果,例如系统认为这是猫还是狗。
- 损失函数:定义系统目标的最后一步,它是一个标量值,用于衡量系统表现的好坏。例如,分类正确则为1,错误则为0。
深度神经网络的特别之处在于,你不仅可以正向计算,还可以反向传播信息流,以确定哪些参数导致了损失的好坏。我们可以理解,如果朝特定方向调整这些参数,这些变化将如何影响输出和最终的损失。我们通过反转信息流方向,并利用微积分的链式法则计算整个系统的梯度来实现这一点,这被称为反向传播。
训练深度神经网络的主要思想就是利用这个梯度来调整参数。我们计算损失相对于参数的梯度,这可以看作是指引我们在“地形”中下坡的方向。这个“地形”的每个点代表参数的一种潜在选择,“地形”的高度代表其好坏(损失大小),下坡意味着更低的误差。我们通过沿着梯度方向移动参数,不断向误差最低的点前进。
这就是训练神经网络的基本思想,也是深度学习的核心理念。
构建深度强化学习智能体 🤖
上一节我们掌握了深度学习的训练原理,本节中我们回到强化学习,看看如何将这些部分结合起来。
理解强化学习智能体的结构非常有用。我认为,智能体内部可能包含以下主要组件,这定义了智能体的类型:
- 策略:决定智能体行为的组件。如果智能体包含策略,我们称之为基于策略的强化学习方法。
- 价值函数:描述智能体对其将获得多少奖励(或其他项)的预测的组件。如果包含价值函数,我们称之为基于价值的强化学习智能体。
- 模型:描述智能体认为环境如何工作的组件,即它认为接下来会发生什么。如果包含模型,我们称之为基于模型的强化学习方法。
我们可以通过使用深度神经网络作为函数近似器来结合深度学习和强化学习。这个函数近似器可以用来表示强化学习这三个主要组件中的任何一个:
- 它可以用来表示策略。
- 它可以用来表示价值函数。
- 它可以用来表示模型。
为了训练这个系统,主要思想是必须选择一个损失函数,即一个目标,该目标根据强化学习算法的这三种类型之一来描述我们真正想要的东西:
- 如果进行基于策略的强化学习,我们可能会选择遵循策略梯度。
- 如果进行基于价值的强化学习,我们可能会选择最小化时序差分误差。
- 如果进行基于模型的强化学习,我们可能会选择最小化下一步预测误差。
那么算法是什么?算法非常简单,就像在深度学习中一样,我们所要做的就是通过梯度下降来优化那个损失函数,沿着“地形”不断下降,直到我们的损失越来越低,表现越来越好。

深度强化学习的应用与成就 🏆
上一节我们介绍了深度强化学习智能体的构建方法,本节中我们来看看其实际应用和取得的成就。
将上述内容结合起来,为我们提供了一套在强化学习中实现各种有趣目标的方案。其中一些已经促成了近年来我们看到的一些激动人心的成功案例。
例如:
- 游戏:使用深度强化学习方法可以将游戏玩到非常高的水平。我们已经看到智能体能够在围棋游戏中击败人类世界冠军,在国际象棋等其他游戏中也是如此。在现代,你也可以用它来玩电子游戏。我们有深度强化学习智能体能够玩雅达利系统中的50多个完全不同的游戏。最近,一个系统能够玩极具挑战性的游戏《星际争霸》,这是对人类来说最具挑战性的视频游戏之一。
- 机器人操作:深度强化学习智能体可以学习以高度的灵活性操纵物体。
- 化学合成:深度强化学习智能体能够通过称为“逆合成”的方法解决化学合成问题。
- 金融交易:深度强化学习智能体可以在现实世界中进行交易,例如在交易平台上算法化地决定如何操作。
总结 📝
本节课中我们一起学习了深度强化学习的核心概念。

当我们把强化学习的问题与深度学习的解决方案结合起来,并使用这些深度学习方法为我们提供强大的函数近似工具包时,我们实际上拥有了一种非常灵活且强大的方法。这种方法能够让我们在解决人工智能中许多我们关心的问题上走得很远。
103:大规模状态空间表示方法复习 🧠

在本节课中,我们将复习第二周的核心内容:如何表示大规模甚至连续的状态空间。我们将探讨特征构建的方法,并理解表示学习与函数近似之间的关系。


表示是智能体对状态的一种内部编码方式。智能体通过构建特征来总结当前的输入信息。当我们讨论特征和表示学习时,我们实际上已经进入了函数近似的领域。
这让我们来到了课程地图的左侧部分。
上一节我们提到了表示学习,本节中我们来看看几种具体的特征构建方法。以下是两种主要技术:
- 粗编码:这种方法与状态聚合相关,它将相邻的状态分组在一起,每个分组可以具有任意的形状。一个二维粗编码的例子可以用一系列重叠的圆来表示。每个圆是一个特征:当状态位于圆内时,该特征值为1;在圆外时,值为0。
- 瓦片编码:这是粗编码的一种特定类型。它使用一组重叠的网格来生成特征。每个网格被称为一个铺砌。一个铺砌内部的方格之间没有重叠或间隙,因此同一铺砌内每次只有一个特征能被激活。

通过堆叠多个偏移的铺砌,我们可以区分不同的状态。铺砌的形状、大小和数量帮助我们平衡泛化能力、区分能力和计算效率。

我们之前讨论的方法都是在学习开始前就固定了表示。接下来,我们探讨一种能够在线学习表示的强大工具:神经网络。

一个前馈神经网络通过一系列层来生成表示。在每一层中,多个神经元接收相同的输入并产生不同的输出;这些输出随后被馈送到下一层,该过程不断重复。
每个神经元通过计算其输入的加权和,并将该和通过一个激活函数来产生输出。这个过程可以用以下公式描述:
输出 = 激活函数(权重 * 输入 + 偏置)

为了训练神经网络,我们使用一种称为梯度下降的迭代过程:
- 将输入传入网络以产生预测。
- 将这些预测与真实输出进行比较,并计算损失函数。
- 计算损失函数关于权重的导数,并应用学习规则来更新权重。
本节课中我们一起学习了如何为大规模状态空间构建表示。我们介绍了粗编码和瓦片编码这两种预定义特征的方法,以及使用神经网络进行在线表示学习的原理。这些技术是解决复杂强化学习问题的基石。

下周,我们将讨论如何结合函数近似来学习最大化奖励。
强化学习专项课程:P104:基于函数逼近的分段式Sarsa算法 🧠
在本节课中,我们将学习如何将函数逼近方法应用于控制问题,并重点介绍分段式Sarsa算法。我们将从如何构建依赖于动作的特征表示开始,然后讲解如何将Sarsa算法与函数逼近结合,用于回合制任务。
我们之前已经学习了如何构建特征和逼近函数,但那些都是在固定策略下进行预测的背景下进行的。本周,我们将讨论基于函数逼近的控制方法。在本视频中,我们将从广义策略迭代(GPI)算法——回合制Sarsa开始。通过本视频的学习,你将能够理解如何为近似的动作价值函数构建依赖于动作的特征,并解释如何在函数逼近的回合制任务中使用Sarsa算法。
回想一下,价值函数逼近包含两个组成部分:一个权重向量和一个特征向量。在给定状态下,价值估计是这两个组成部分的点积。
为了从TD方法过渡到Sarsa,我们需要动作价值函数。因此,特征表示也必须能够表示动作。
一种方法是为每个动作使用一个独立的函数逼近器。这可以通过堆叠特征来实现,即我们可以为每个动作使用相同的状态特征,但只激活对应动作的特征。为了更清楚地理解这一点,让我们看一个例子。
假设有四个状态特征和三个动作。这四个特征代表你所在的状态。但我们想学习一个关于状态和动作的函数。我们可以通过为每个动作重复这四个特征来实现。
现在,特征向量在这里有12个分量,每四个特征组成的片段对应一个独立的动作。我们称这种特征表示为“堆叠的”,因为每个动作的权重是堆叠在一起的。因此,只有指定动作的特征会被激活,而其他动作的特征则被设为零。
让我们看一个如何从给定状态计算动作价值的例子。
假设有四个特征和三个动作。权重向量如下所示:
w = [w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11]
使用堆叠特征,我们得到状态S下动作0的特征向量如下(其他动作的特征被置零):
x(S, a0) = [f0, f1, f2, f3, 0, 0, 0, 0, 0, 0, 0, 0]
然后,我们提取权重向量中对应每个动作的片段。动作价值就是每个权重片段与特征向量的点积:
Q(S, a0) = w0*f0 + w1*f1 + w2*f2 + w3*f3
Q(S, a1) = w4*f0 + w5*f1 + w6*f2 + w7*f3
Q(S, a2) = w8*f0 + w9*f1 + w10*f2 + w11*f3
你可能会认为,通过堆叠特征来创建动作价值是线性函数逼近特有的,但事实并非如此。例如,用神经网络表示动作价值的常见方法是生成多个输出,每个输出对应一个动作价值。然而,这等同于我们刚刚描述的堆叠过程。
神经网络输入状态,最后一个隐藏层产生状态特征。每个动作价值都是使用这些状态特征,通过一组独立的权重计算出来的。一个动作价值的权重与另一个动作价值的权重互不干扰,就像在堆叠中一样。
出于与泛化状态相同的原因,我们可能也希望泛化动作。那么这在神经网络中如何实现呢?我们会将状态和动作都输入网络。网络只有一个输出,即该状态-动作对的近似动作价值。我们也可以通过将状态和动作都作为输入,在瓦片编码中实现类似的功能。
好的,现在我们知道了如何处理函数逼近中的动作价值。接下来,让我们讨论如何使用Sarsa进行基于函数逼近的控制。
该算法与表格版本非常相似,因此我们只回顾其中的不同之处。
我们使用参数化的动作价值函数来估计动作价值。
更新规则也改为使用梯度来更新权重,类似于半梯度TD方法。
就是这样,这就是基于函数逼近的Sarsa控制算法。
以下是算法的关键步骤:

- 初始化权重向量 w。
- 对每个回合:
- 初始化状态 S。
- 根据当前权重 w 和状态 S 的特征,选择动作 A(例如使用 ε-贪心策略)。
- 对回合中的每一步:
- 执行动作 A,观察奖励 R 和下一个状态 S‘。
- 如果 S’ 是终止状态:
- 目标 = R
- 否则:
- 根据当前权重 w 和状态 S‘ 的特征,选择下一个动作 A’(例如使用 ε-贪心策略)。
- 目标 = R + γ * Q(S‘, A’)
- 计算时序差分误差:δ = 目标 - Q(S, A)
- 更新权重:w ← w + α * δ * ∇Q(S, A)
- 设置 S ← S‘, A ← A’。

在本视频中,我们讨论了依赖于动作的特征,并介绍了基于函数逼近的回合制Sarsa算法。在接下来的课程中,我们将介绍更多的控制算法。下次见。
105:山地车环境中的分段式Sarsa算法 🚗


在本节课中,我们将学习分段式Sarsa算法在一个连续状态环境——山地车问题中的实际应用。我们将可视化学习到的价值函数,并直观理解Sarsa算法学到的策略。通过本课,你将获得分析近似时序差分控制方法性能的经验。
环境介绍:山地车问题
上一节我们介绍了分段式Sarsa算法的理论基础,本节中我们来看看它在经典控制问题“山地车”中的表现。
山地车是一个分段式任务,目标是驾驶一辆动力不足的汽车爬上山坡。重力强于汽车的引擎,因此智能体无法直接开上山。唯一的逃脱方法是先倒车爬上左侧斜坡,然后冲下山谷以获得足够动量,最终冲上右侧山坡并逃脱。
- 状态空间:智能体可以观测汽车的当前位置和速度。这是一个二维的、连续取值的状态。
- 动作空间:智能体有三个可选动作:向前加速、向后加速或滑行。
- 奖励与终止:回合从汽车随机出现在山谷底部附近开始,当汽车到达山顶的旗帜处时结束。为了鼓励智能体尽快完成回合,每一步的奖励是 -1,并且不使用折扣。
函数近似与算法设置
为了处理连续状态,我们需要使用函数近似。以下是本示例中的具体设置:
我们使用瓦片编码对位置和速度这两个维度进行联合编码。我们使用 8 个瓦片组,这意味着对于二维输入空间,我们使用了 8 个 8x8 的重叠网格。我们采用堆叠特征表示法来独立处理每个动作。
我们将权重初始化为 0。由于每一步的奖励是 -1,任何策略下的价值都小于 0,因此 0 初始化实际上是乐观的。这种乐观的初始值会导致广泛且系统的探索。因此,我们可以直接采用贪婪策略,而无需额外的随机探索。
学习结果分析
让我们观察智能体在运行很长时间后,其价值函数的样子。理想情况下,我们希望绘制每个状态的价值函数,但状态是无限不可数的,因此我们只能对状态集进行采样。我们使用每个采样状态中的最大值,这个数字代表了智能体在其贪婪策略下认为逃脱所需的步数。由于每步奖励是 -1,我们取这个数字的负值,就得到了智能体对从每个状态出发所需步数的估计。
下图展示了智能体在 9000 个回合后 对期望步数的估计。对于这个问题,这是一个非常长的训练时间,因此我们确信价值估计已接近其所能达到的最佳水平,但由于函数近似,它们并非完美。

- 绿色线代表目标位置,它与速度无关。
- 在目标附近,如果速度足够大,智能体可以直接开出。但如果速度太低,则需要很多步才能逃脱,因为它必须再次退回山谷并爬上左侧以获得足够动量。
- 峰值对应起始状态,大约需要 120 步才能到达旗帜处。
- 绿色轨迹揭示了习得策略在状态空间中采取的路径。
学习曲线与参数影响
价值函数看起来很有趣,但让我们通过观察学习曲线来更好地了解学习速度。
我们尝试使用三个不同的 alpha 值运行 Sarsa 算法,即算法的三个变体。我们关注的是每回合的步数,这在本例中对应于每回合的回报。我们期望每回合的步数随着学习而减少。X 轴越低,代表策略越好(即平均能以最少的步数到达目标)。与往常一样,我们对多次独立运行的结果进行了平均。
以下是结果:

到 500 个回合 时,每回合的步数大致稳定下来,所有学习曲线都呈现出熟悉的指数衰减轮廓。较小的步长参数值 0.1 导致学习速度较慢,而 0.5 的 alpha 值使智能体学习更快,并在 500 个回合内找到了更好的策略。
请注意,我们将每个 alpha 值都除以了 8。如果我们没有使用步长向量,通常会按特征向量的范数来缩放步长参数。在本例中,我们的瓦片编码器使用了 8 个瓦片组,这意味着特征向量中 1 的数量始终为 8。作为一个简单的练习,请证明 8 对应特征向量的 L1 范数。
总结
本节课中,我们一起学习了分段式Sarsa算法结合线性函数近似在山地车环境中的评估过程。我们观察了学习到的价值函数形态,分析了不同学习率对算法收敛速度和最终策略性能的影响,并理解了在函数近似设置下参数初始化和缩放的重要性。通过这个实例,我们获得了对近似时序差分控制方法性能分析的直接经验。




强化学习专项课程:P106:基于函数逼近的期望Sarsa算法


在本节课中,我们将学习如何将期望Sarsa算法与函数逼近方法结合。我们将从回顾Sarsa的函数逼近形式开始,然后推导出期望Sarsa的更新公式,并最终展示Q学习作为其特例的实现方式。
到目前为止,我们已经讨论了结合函数逼近使用Sarsa算法。现在,让我们继续探索近似控制方法,并了解期望Sarsa算法。通过本视频的学习,你将能够解释基于函数逼近的期望Sarsa更新公式,以及基于函数逼近的Q学习更新公式。
从Sarsa到期望Sarsa
上一节我们介绍了函数逼近下的Sarsa算法,本节中我们来看看如何在使用函数逼近时,将Sarsa转变为期望Sarsa。
首先,回顾Sarsa的更新公式。Sarsa的更新目标包含了下一个状态和动作的动作价值。

现在回想一下,期望Sarsa则使用其目标策略下的期望值来计算。为了计算这个期望,我们只需将动作价值按其目标策略下的概率加权求和。

即使我们使用函数逼近,也可以计算相同的期望值。让我们看看具体如何操作。
期望Sarsa的函数逼近更新
以下是实现步骤:
首先,回顾使用函数逼近的Sarsa更新公式。它看起来与表格型设置类似,只是动作价值估计由权重向量 W 参数化。我们还有一个梯度项,用于将误差适当地分配到权重上。

基于函数逼近的期望Sarsa遵循类似的结构。我们为下一个状态的所有动作计算来自权重向量的动作价值。然后,我们计算这些价值在目标策略下的期望。这就是将Sarsa改为期望Sarsa所需做的全部工作。
扩展到Q学习
现在,我们如何为函数逼近下的Q学习实现这一点?幸运的是,Q学习是期望Sarsa的一个特例。在Q学习中,目标策略是关于近似动作价值的贪婪策略。在贪婪策略下计算期望,等同于计算最大动作价值。
因此,使用函数逼近的Q学习更新实际上非常直接。我们只需用最大值代替期望值。


总结
本节课中,我们一起学习了基于函数逼近的期望Sarsa算法,并展示了如何将其扩展到基于函数逼近的Q学习。核心在于将下一个状态-动作对的单一采样值,替换为目标策略下所有可能动作的期望值(对于Q学习则是最大值)。
下一次,我们将探讨在使用函数逼近时如何进行探索。在那之前,请保持清晰的学习路径。
107:函数逼近下的探索策略 🧭

在本节课中,我们将学习如何在函数逼近的背景下进行探索。我们将回顾乐观初始值在表格型设置中的工作原理,并探讨将其以及ε-贪心策略应用于函数逼近时需要考虑的细节。
平衡探索与利用的需求,是序列决策问题的一个决定性特征。
我们之前讨论过在赌博机和表格型强化学习中促进探索的几种简单方法。但在函数逼近的背景下,探索有什么特别之处吗?今天,我们将一探究竟。
在本视频结束时,你将能够描述如何将乐观初始值和ε-贪心策略与函数逼近结合使用。
表格型设置中的乐观初始值回顾 📊
首先,让我们简要回顾一下如何在表格型设置中使用乐观初始值。
我们将价值函数初始化为高于其真实值的数值。这就像是智能体想象自己通过采取某个动作能获得的奖励,比现实中实际能获得的更多。
通常,以这种方式初始化价值函数会导致智能体系统地探索状态-动作空间。随着智能体对价值的估计越来越准确,这种初始化的影响会越来越小。

这在表格型设置中很容易实现,因为每个状态-动作对的更新都独立于其他所有状态-动作对。
函数逼近中的乐观初始值 🧠
上一节我们回顾了表格型方法,本节中我们来看看函数逼近的情况。
在函数逼近中,乐观初始值对应于初始化权重参数,使得产生的价值估计是乐观的。在某些情况下,这很简单。例如,当特征是二元的,我们只需将每个权重初始化为可能的最大回报值。那么,只要每个状态至少有一个活跃的特征,其价值估计就会是乐观的,甚至可能过于乐观。
然而,在许多情况下,乐观初始化很困难。例如,在神经网络中,最终输出值与输入特征之间的关系可能非常复杂。

想象一个由ReLU激活函数组成的网络,即使初始权重为正,网络也可能输出负值。
但这还不是全部。根据我们的特征如何进行泛化,乐观初始值可能不会产生我们在表格型案例中看到的那种系统性探索。
考虑一个极端例子:我们只有一个特征,其值始终为1。我们可以乐观地初始化,但每次更新都会改变所有状态的价值。这意味着,在某些状态甚至被访问之前,其价值估计就已经下降到不再乐观的程度。
为了促进系统性探索,对价值函数的改变需要更加局部化。例如,使用瓦片编码的函数逼近可以产生这种局部化的更新。神经网络也能提供局部更新,但神经网络也可能进行激进的泛化。
在实践中,如果没有特殊考虑,神经网络会相对较快地失去其乐观性。
函数逼近中的ε-贪心策略 ⚖️
接下来,我们探讨一个更通用的探索策略。
ε-贪心策略通常适用且易于使用,即使在非线性函数逼近的情况下也是如此。ε-贪心策略唯一需要的就是动作价值估计,这与它们如何初始化或如何近似无关。
然而,ε-贪心策略不是一种有导向的探索方法。它依赖随机性来发现当前策略附近状态下的更好动作。因此,它不如那些依赖乐观性的探索方法那样系统。
改善函数逼近设置下的探索仍然是一个开放的研究问题,因此在本课程中,我们将坚持使用这种简单的策略。
总结 📝
本节课中我们一起学习了将探索策略与函数逼近结合时的诸多微妙之处。

在本视频中,我们讨论了结合乐观初始值与函数逼近时的许多细微差别,以及ε-贪心策略如何能与任何函数近似方法结合使用。
下次见。
108:一种新的控制问题表述方式 📈

在本节课中,我们将学习一种针对持续性任务的新目标函数——平均奖励。我们将探讨平均奖励的定义、它与折扣奖励的区别,并介绍差分价值函数的概念。通过本讲,你将能够描述平均奖励设定,解释平均奖励最优策略与折扣奖励策略的不同之处,并理解差分价值函数的基本原理。
概述
在持续性任务中,我们可能关注极长视野下的性能表现。到目前为止,我们使用折扣奖励来处理持续性任务,以平衡短期表现和长期收益。然而,这不是表述问题的唯一方式。今天,我们将学习一种称为平均奖励形式的新方法。
近视MDP示例
为了理解平均奖励,我们首先来看一个简单的示例任务,其中状态排列在两个相交的环中,我们称之为近视MDP。
在大多数状态下,只有一个动作可用,因此无需做出决策。只有一个状态可以做出决策,在该状态下,智能体可以决定遍历哪个环。这意味着存在两种确定性策略:遍历左环或遍历右环。
奖励在所有地方都为零,除了每个环中的一个转移。在左环中,奖励在状态S之后立即为+1。在右环中,奖励在状态S之前立即为+2。
直观上,你会选择正确的动作,因为你知道会获得+2奖励。但价值函数会告诉我们做什么呢?
折扣奖励下的价值函数
如果我们使用折扣奖励,这两种不同策略下状态S的价值是多少?
选择左动作的策略的价值为:
V_L = 1 / (1 - γ^5)
选择右动作的策略的价值为:
V_R = (2 * γ^4) / (1 - γ^5)
让我们思考特定γ值下这两种策略的状态S价值。
如果γ为0.5,V_L约为1,V_R约为0.1。这意味着在这种更近视的折扣下,采取左动作的策略更可取。
尝试更大的γ值,0.9。V_L现在约为2.4,V_R约为3.2,因此现在我们更倾向于另一种策略。
实际上,我们可以计算出使智能体偏好向右策略的最小γ值。γ需要至少为0.841。
这里的问题是折扣幅度取决于具体问题。对于这个示例,0.85足够大,但如果每个环有1000个状态,这个折扣因子需要超过0.99。
一般来说,确保智能体动作随时间最大化奖励的唯一方法是不断增加折扣因子趋近于一。根据问题,我们可能需要γ相当大,并且记住在持续性设定中不能将其设为一,因为那样回报可能是无限的。
大γ值的问题
那么,拥有大γ值有什么问题呢?大的γ值也可能导致更大且更易变的总和,这可能难以学习。那么有替代方案吗?
平均奖励目标
让我们讨论一种称为平均奖励的新目标。
想象智能体与世界交互了H步。这是它在这些步骤中平均获得的奖励,换句话说,是它的奖励率。如果智能体的目标是最大化这个平均奖励,那么它对近期和远期奖励同等重视。
我们用R(π)表示策略的平均奖励。更一般地,我们可以使用状态访问分布μ来写平均奖励:
R(π) = Σ_s μ_π(s) Σ_a π(a|s) Σ_s' p(s'|s,a) r(s,a,s')
内项是策略π下状态的期望奖励。外和取该状态被访问频率的期望。合起来,我们得到跨状态的期望奖励,换句话说,策略的平均奖励。
在近视示例中,两种可能的确定性策略无限期地访问左环或右环。在这两种情况下,每个环中的五个状态被访问的次数相等。
在左环中,除了一个获得+1的状态外,所有状态的即时期望奖励为+0。这导致每五步平均奖励为1,或0.2。
右环中的大多数状态也有+0的即时期望奖励,但这次最后一个状态获得+2。这给出每五步平均奖励为2,或0.4。
我们可以看到,平均奖励更偏好获得更多总奖励的策略,而无需考虑越来越大的折扣。
差分回报
平均奖励定义直观地说明了一个策略是否优于另一个,但我们如何决定从一个状态出发的哪些动作更好?我们需要的是这个新设定下的动作价值。
第一步是弄清楚回报是什么。在平均奖励设定中,回报是根据奖励与平均奖励R(π)之间的差异来定义的,这称为差分回报。
让我们看看近视MDP中的差分回报是什么。差分回报表示智能体从当前状态和动作开始,相比策略的平均奖励,将获得多少额外奖励。
让我们看看从状态S开始,首先选择动作L,然后遵循π_L的差分回报。该策略的平均奖励为0.2。
差分回报是未来奖励的总和,每个奖励都减去平均奖励。这个和从状态S开始,动作为L。
我们可以通过求和到某个有限视野H,然后取H趋于无穷大的极限来计算它。
我们通过这个极限符号稍微简化了事情。虽然这种符号在许多情况下有效,但当环境是周期性时,我们需要使用不同的技术。在这种情况下,我们使用更一般的极限(称为Cesàro和)来计算回报,但这个技术细节并不关键,这里的主要点是直觉。
我们发现差分回报为0.4。现在让我们看看另一个动作。这次,我们可以将差分回报分为两部分。首先,通过右环的单次轨迹的和,我们可以明确写出和,它等于1。然后,对应于无限期采取左动作的和。这个和与我们刚刚计算的差分回报相同,0.4。将两部分加在一起,我们发现差分回报为1.4。
因此,如果智能体的策略总是采取左动作,它可以观察其差分回报并意识到应该切换到采取右动作。
现在让我们看看如果智能体的策略总是采取右动作的差分回报。该策略导致平均奖励为0.4,在状态S采取右动作的策略的差分项为-0.8。
现在,在状态S采取一次左动作然后无限期采取右动作的差分回报是多少?像之前一样,我们将和分为两部分,采取左环一次导致前五个时间步的和为-1。加上从状态S遵循π_R的差分项(我们之前发现为-0.8),得到我们的答案-1.8。再次,我们看到右动作更受青睐。
差分价值函数
你可能已经注意到,π_R的差分回报低于π_L的差分回报,即使π_R具有更高的平均奖励。这是因为差分回报表示在特定策略下,在某个状态采取动作比平均情况好多少。

只有在后续时间步遵循相同策略时,差分回报才能用于比较动作。要比较策略,应改用它们的平均奖励。
有趣的是,只有当减去的常数等于真实平均奖励时,差分回报才是收敛和。如果减去较低或较高的数字,和将发散到正无穷或负无穷。
现在我们有了平均奖励的有效回报定义,我们像往常一样将价值函数定义为期望回报。类似地,我们也可以将差分价值函数定义为策略下从给定状态或状态-动作对开始的期望差分回报。
这个量捕捉了智能体从特定状态开始,相比如果遵循固定策略在所有状态上的平均情况,将获得多少额外奖励。
与折扣设定类似,差分价值函数可以写成贝尔曼方程。方便的是,它们看起来像我们之前见过的方程,它们只在从即时奖励中减去R(π)且没有折扣这一点上有所不同。
折扣情况下的许多算法可以重写以适用于平均奖励情况。例如,差分SARSA与你之前见过的SARSA算法非常相似。
让我们逐步了解差异。一个关键区别是,差分SARSA必须跟踪其策略下平均奖励的估计,并在更新中从样本奖励中减去它。这个实现使用了我们在整个课程中见过的增量平均技术。
给定这个估计,它然后在更新中从采样的奖励中减去R_bar。
在实践中,我们可以通过对该算法稍作修改来获得更好的性能。我们使用这个更新来计算R_bar,而不是奖励的指数平均,它具有更低的方差。

总结
在本节课中,我们介绍了平均奖励目标,并为此设定定义了差分回报和差分价值函数。下周,我们将讨论优化这个平均奖励目标的另一种方法,届时再见。
109:Satinder Singh论内在奖励 🧠


在本节课中,我们将探讨强化学习中一个根本性问题:智能体的奖励从何而来?我们将跟随Satinder Singh的讲解,了解标准强化学习框架如何将设计者的偏好与智能体的目标参数混为一谈,并介绍一种将两者分离,通过优化内在奖励来提升智能体性能的新思路。
概述:奖励的来源问题
当我们学习强化学习时,通常假设奖励函数是给定的,然后研究如何优化这些奖励。但一个有趣的问题是:这些奖励最初从何而来?
偏好与参数的混淆
在人工智能领域,起点通常是智能体设计者拥有一个目标或外在奖励函数,该函数规定了设计者对智能体行为的偏好。然而,这个外在奖励函数通常过于稀疏和延迟。因此,问题就变成了:我应该给智能体什么函数?智能体的奖励函数应该是什么?换句话说,奖励从何而来?
从这个角度思考,标准强化学习框架中的单一奖励函数,从设计者的角度来看,同时混淆了两种角色:
- 偏好:它体现或捕捉了设计者对智能体行为的偏好。
- 参数:通过奖励假说,它表达了智能体的目标或目的,因此成为实际智能体行为的参数。
同一个奖励函数在标准RL框架中同时捕捉了两件事:设计者对行为的偏好,以及智能体用于将奖励函数转化为行为的任何算法的参数。我们提出的问题是:这些角色似乎是不同的,它们是否应该被混淆到一个单一的奖励函数中?
分离奖励:内在与外在
我们建议的答案是:不应该混淆。我们可以设想两种不同的奖励函数。
以下是标准强化学习智能体的图示,其中奖励函数被认为是环境的一部分。批评者是环境的一部分,智能体的任务是优化该奖励函数的某种累积度量。
这是另一个图示,我们将智能体分解为所谓的“有机体”。在智能体内部有一个批评者,它向智能体提供奖励,然后智能体进行优化。同时存在一个外部环境,它提供了先前环境中存在的外在奖励。
当然,当你想到有机体时,例如自然界的生物,你会认为进化能够深入我们内部并配置我们的内在奖励函数,它是适应的场所。因此,智能体的奖励是内部的或内在的,因为它们本质上是需要由人工智能体的设计者或自然智能体的进化来设计的参数。
设计奖励函数的现有方法
许多人思考过如何设计奖励函数,存在许多方法。例如:
- 逆强化学习:一种将专家行为转化为奖励函数的方法。
- 奖励塑形:关于如何改变奖励函数以使其对智能体学习更有效的想法。
- 偏好启发:一种从智能体设计者那里引出偏好或奖励的方法。
- 经济学中的机制设计:思考如何设计奖励等等。
此外,还有许多其他启发式方法,在设计奖励函数方面通常凭经验非常成功。
最优奖励框架

接下来,我将介绍我一直在追求的一项工作,称为“最优奖励框架”或“最优奖励问题”。
问题定义
最优奖励问题是什么?正如我一直主张的,存在两种不同的奖励概念:
- 真实奖励:我们无法改变,因为真实奖励是目标奖励,记作 R₀ 或 R_O。
- 智能体奖励:即内在奖励,记作 R_I。
最优奖励问题用数学语言描述如下:给定一个奖励函数空间,我应该给智能体哪个奖励函数,以便在智能体将该奖励函数转化为行为时,最终能优化设计者的目标奖励函数?
这是一个搜索问题。我们可以将其视为一个元问题,就像一个外循环,你在优化奖励,而内循环则在给定奖励的情况下优化行为。下面我将展示我们在实验室中为优化内在奖励而开发的几个快速想法。
方法一:用于奖励设计的策略梯度
第一个想法基于一个简单的观察,我们称之为PGRD。

我们一直有用于优化外在奖励的策略梯度方法。这些策略梯度方法采用以某种方式指定策略的参数。一种思考内在奖励的方式是,它本质上只是参数化了智能体策略的参数。因此,正如策略梯度方法可以优化策略的参数一样,它们也可以优化内在奖励函数。
这是一种基本方法,即利用外在奖励相对于策略参数的梯度,来更新内在奖励的参数。我们在2010年NIPS的一篇特定论文中做了这项工作。
梯度计算

这张幻灯片描述了在进行策略梯度时,如何计算相对于内在奖励参数的梯度。
顶部的第一个方框展示了如何定义目标奖励在轨迹上相对于策略(相对于策略中采取行动的概率)的梯度。
第二部分告诉你如何获取这些策略选择或行动概率相对于内在奖励参数的梯度。这基本上是一个相当直接的迭代过程,你可以计算它。这样,智能体就可以随着在环境中的学习经验而更新其内在奖励。

应用实例:与UCT规划结合
我们做的第一个项目是在2016年,展示了如何使用PGRD(用于奖励设计的策略梯度)来优化内在奖励函数,并与UCT(一种策略梯度算法)作为规划算法结合使用,以根据给定的内在奖励计算行为。
我们使用UCT,它实际上是一种用于从模型计算策略的搜索过程。UCT具有固定的轨迹数量和固定的搜索深度作为参数。我们使用了一个内在奖励,并且能够通过UCT规划过程进行梯度计算来更新奖励函数。

我们没有详细讲解算法细节,但我们用UCT实现了PGRD。这里有一张幻灯片显示了在25个Atari游戏上的结果。垂直线表示,如果条形图位于垂直线上,意味着我们仅仅匹配了UCT的性能。条形图向右延伸意味着我们提高了UCT的性能。你可以看到,在大多数游戏中,我们能够显著提高性能。
在这些结果中,唯一被学习的是内在奖励函数。我们使用UCT进行规划,因此从内在奖励到行为的转换是通过UCT这个固定的规划过程完成的。我们从经验中学习的唯一东西是内在奖励函数,我们可以看到我们可以显著提高性能。
方法二:与学习算法结合

那么,我们能否针对学习算法而不是规划算法来做这件事呢?这就是我要告诉你的下一个结果。
这是在2018年NeurIPS上由我的学生Siyu Zhang和Junlin Guan展示的。这完全是相同的想法,只不过现在我们要通过一个学习算法而不是规划算法来实现。
起初我并不清楚,你实际上可以通过学习过程来获取梯度以更新内在奖励,因为从概念上讲,你可以想象,当你扰动内在奖励时,你扰动了学习的动态。我们需要做的是,通过学习动态变化的梯度来更新内在奖励,从而优化学习过程。我们通过一个元梯度过程展示了我们可以做到这一点。
智能体架构
这是该场景下智能体的图示。智能体有两个方框:策略方框执行行动,批评者方框接收内在奖励(在这种情况下是外在奖励和内在奖励的总和),并进行策略梯度(Actor-Critic)来更新策略。我们将使用这个元梯度过程来更新内在奖励。
我将跳过具体的符号表示,但存在一种特定的方式来更新内在奖励的参数,前提是我们正在使用Actor-Critic更新策略的参数。
第一个方程展示了一个标准的Actor-Critic更新(本质上是REINFORCE版本的更新)。第二组方程展示了我们如何根据策略参数的更新来更新内在奖励的参数。因此,我们可以沿着提高学习策略性能的方向移动内在奖励参数。
实验结果
这里有一些结果,我们在一些Atari游戏中进行了测试。你可以在X轴上看到游戏名称,Y轴显示了我们相对于仅使用外在奖励(使用相同的Actor-Critic架构)所获得的性能提升百分比。可以看到,学习内在奖励可以显著提高性能。
总结与结论

当我们思考强化学习问题时,教科书和你听到的所有讲座都从假设奖励函数是给定的开始,智能体的目标是将该奖励函数转化为良好的行为。
我们在这个简短片段中提出的问题是:我们如何有效地设计这些奖励函数?本片段最后给出的答案是一种用于更新内在奖励的梯度过程,这样我们可以学习到更好的内在奖励。这在许多方面都可能有用。
我今天强调的方式是,智能体可能以多种不同的方式受到限制,而内在奖励是克服这些限制的一种方法。这可以被视为用户和智能体设计者之间价值对齐的一种方式,也可以被视为解决持续学习和终身学习问题的一种途径。
在本节课中,我们一起学习了:
- 标准强化学习框架中奖励函数混淆了设计者偏好和智能体参数的问题。
- 将奖励分离为外在奖励和内在奖励的概念。
- 最优奖励框架的核心思想:寻找能使智能体行为最优化设计者目标的内在奖励。
- 两种实现方法:PGRD(与规划算法如UCT结合)和元梯度方法(与学习算法如Actor-Critic结合)。
- 通过优化内在奖励,智能体可以克服自身限制,更高效地学习,并可能更好地与设计者目标对齐。
110:函数近似下的控制方法复习 🧠

在本节课中,我们将复习第3周的核心内容:如何在函数近似(Function Approximation)的框架下进行控制(Control)。我们将回顾如何估计动作价值、探索不同的控制算法,并介绍一种处理持续性任务的新思路。
函数近似下的动作价值估计
上一节我们介绍了函数近似的基础。本节中,我们来看看如何用它来估计动作价值。
当动作空间是离散的时,最直接的方法是将状态特征按动作“堆叠”起来。如果动作空间是连续的,或者你希望模型能泛化到不同的动作,那么可以将动作本身作为一个输入变量,与状态特征一同传递给函数近似器。
为了理解后续内容,我们先看一下算法地图。函数近似将我们置于地图的左侧分支。



控制算法:SARSA、期望SARSA与Q学习

本周第一讲的重点是地图左下角的控制算法:SARSA、期望SARSA和Q学习。


这些算法都是我们在第2周学过的表格型控制算法的扩展。它们与表格型版本唯一的区别在于更新方程。
以下是这些更新方程的通用形式,它们都以相同的方式为函数近似进行了调整,即使用梯度来更新权重参数 w:
# 以半梯度更新为例,δ是时序差分误差
w = w + α * δ * ∇_w Q(S, A, w)

我们还看到了分幕式SARSA如何被用于解决“山地车”问题。在该案例中,较大的步长参数(如0.5)能使学习速度更快。

探索策略的考量
接下来,我们讨论了探索策略。乐观初始值法可以与一些结构化的特征表示(如瓦片编码)结合使用。但对于非线性函数近似器(如神经网络),通常不清楚如何进行乐观初始化,并且其效果可能不符合预期(例如,乐观性可能消退过快)。
相比之下,ε-贪婪策略可以不受函数近似器类型的限制,普遍适用。
持续性任务的新视角:平均奖励框架
最后,我们介绍了一种思考持续性控制问题的新方法。与其最大化从当前状态开始的折扣回报,我们可以考虑最大化策略随时间获得的平均奖励。
为此,我们定义了差分回报和差分价值函数。它们使智能体能够在平均奖励设定下评估动作的相对价值。
我们进而引入了差分半梯度SARSA算法,它通过近似差分价值函数来学习策略。


差分SARSA同样位于算法地图的左侧,但与本周早先介绍的算法不同,它使用的是平均奖励框架。


总结
本节课中我们一起学习了:
- 如何在函数近似下估计动作价值。
- 将表格型控制算法(SARSA、期望SARSA、Q学习)扩展到函数近似设置,其核心更新依赖于梯度下降。
- 探索策略(如乐观初始化和ε-贪婪)在函数近似环境下的应用考量。
- 针对持续性任务,引入了以最大化平均奖励为目标的新框架,并学习了差分半梯度SARSA算法。
下周,我们将全面探讨如何在不学习价值函数的情况下进行强化学习。
111:03_直接学习策略 🎯
在本节课中,我们将学习一种新的强化学习方法:直接学习策略。我们将了解如何将策略定义为参数化函数,并介绍一种基于Softmax函数的策略参数化方法。
概述
到目前为止,我们学习的所有用于寻找优秀策略的方法,都依赖于估计动作价值。每一个我们研究过的控制算法,都建立在广义策略迭代的框架之上。在本模块中,我们将探索一类新的方法,即直接对策略进行参数化。
直接指定策略的含义
上一节我们介绍了基于动作价值的策略改进方法。本节中,我们来看看直接指定策略意味着什么。我们将以“山地车”环境为例进行说明。
之前,我们使用ε-贪婪策略将近似的动作价值转换为策略。但我们也可以考虑一种直接将状态映射到动作的策略,而无需先计算动作价值。
例如,在山地车环境中,我们可以定义这样一个策略:当速度为正值时,选择向右加速的动作;否则,选择向左加速的动作。换句话说,这个策略是沿着我们当前运动的方向加速。事实上,这个简单的“能量泵”策略已经接近最优了。
这个策略完全没有使用动作价值。但这只是一个激发直觉的例子,旨在说明我们不需要动作价值也能构建策略。我们实际上不会手动指定策略,而是要学习它们。
策略的参数化表示
我们可以使用函数近似的语言来直接表示和学习策略。我们将使用希腊字母 θ 表示策略参数向量,以区别于近似价值函数的参数 W。
我们将使用符号 π(a|s, θ) 来表示参数化策略。对于给定的输入状态和动作,参数化策略函数将输出在该状态下采取该动作的概率。这个映射由参数 θ 控制。
参数化函数必须生成一个有效的策略。这意味着它必须为每个状态生成一个有效的动作概率分布。具体来说,选择某个动作的概率必须大于或等于零,并且对于每个状态,所有动作的概率之和必须为一。
要满足参数化函数的这些条件需要一些思考。例如,这意味着我们不能像在价值函数近似中那样直接使用线性函数,因为无法保证线性函数的输出之和为一。因此,我们需要限制可用于构建策略的函数类别。
Softmax策略
让我们考虑一种满足这些条件的简单而有效的方法,称为Softmax策略。
以下是Softmax策略的定义:
π(a|s, θ) = exp(h(s, a, θ)) / Σ_b exp(h(s, b, θ))
这里显示的函数 h 被称为动作偏好。在某个状态下,对某个特定动作的偏好越高,意味着该动作被选中的可能性越大。动作偏好是状态、动作以及参数向量 θ 的函数。
使用Softmax计算选择动作的概率很简单:我们取动作偏好,对其进行指数运算,然后除以所有动作的指数偏好之和。指数函数保证了概率为正。分母对每个动作的输出进行归一化,使得所有动作的概率之和为一。
动作偏好可以按照我们喜欢的任何方式进行参数化,因为Softmax会强制执行概率分布的约束。例如,动作偏好可以是状态-动作特征的线性函数,也可以是更复杂的函数,如神经网络的输出。
以下是将一组特定的动作偏好通过Softmax函数后得到的结果:
- 输入的偏好值可以是任意大,甚至是负数。
- 如果一个偏好值远大于所有其他值,其对应的动作概率将接近1。无论偏好值有多大,概率永远不会大于1。
- 如果一个偏好值非常小,Softmax策略仍会以非零概率选择该动作。例如,如果某个偏好为负值而其他为正值,该负值动作仍将具有非零概率。
- 在Softmax策略下,具有相似偏好的动作将以近乎相等的概率被选择。
动作偏好与动作价值的区别
区分动作偏好和动作价值非常重要。
- 动作偏好表示智能体对每个动作的喜好程度,但它们不是对未来奖励的总结。只有偏好之间的相对差异才是重要的。例如,我们可以给所有偏好加上100,这不会改变策略。
- 从动作价值导出的ε-贪婪策略的行为可能与基于动作偏好的Softmax策略非常不同。
以下是两种策略的主要区别:
- 在ε-贪婪策略中,对应最高价值动作的动作以高概率被选择。选择所有其他动作的概率非常小。具有相近但较低价值的动作被选择的概率要低得多。另一方面,由于ε探索步骤,即使动作价值非常差,该动作仍会被频繁选择。
- 因此,即使智能体学习到某个动作会导致糟糕的后果,在ε-贪婪策略下,它继续选择该动作的频率仍会比在Softmax策略下高得多。

总结

本节课中,我们一起学习了直接参数化策略的方法。我们了解到需要定义能够产生有效概率分布的参数化形式,并深入理解了Softmax策略参数化的原理。
112:策略参数化的优势 🎯


在本节课中,我们将要学习直接学习参数化策略的优势。我们将探讨为何这种方法比单纯学习价值函数更具灵活性,并通过具体例子来理解其在实际问题中的应用价值。
概述
你已经知道直接学习参数化策略是可行的。这意味着我们在解决问题时可以获得更大的灵活性。目前我们考虑了学习近似价值和学习近似策略。但直接学习策略真的有用吗?通过本视频的学习,你将能够理解使用参数化策略的一些优势。
策略参数化的主要优势
直接学习策略参数具有许多优势。以下是其核心优点:
1. 实现自主的探索-利用平衡 🤖
上一节我们介绍了参数化策略的概念,本节中我们来看看它的第一个优势:自主性。
智能体可以随着时间的推移使其策略变得更加贪婪。在开始时,智能体的估计并不准确,因此我们希望智能体进行大量探索。随着估计变得更加准确,智能体应该变得越来越贪婪。
回想我们之前使用的ε-贪婪策略。ε步骤选择一个随机动作以确保持续探索。然而,ε概率限制了最终策略能达到的最佳效果。当然,当我们认为智能体已经充分探索时,可以切换到贪婪策略。但我们希望智能体是自主的,不希望它们依赖我们来决定何时完成探索。
使用参数化策略可以避免这个问题。策略可以从随机性开始以保证探索,然后随着学习的进行,策略可以自然地收敛到一个确定性的贪婪策略。一个softmax策略可以通过使某个动作的偏好非常大来充分近似确定性策略。
2. 避免确定性策略在函数近似下的失败 🚫
在表格设置中,我们了解到总是存在一个确定性的最优策略。但在函数近似中,我们可能无法表示这个确定性策略。相反,最优的近似策略可能是一个随机策略。这表明学习随机策略可能是有用的。
我们可以通过一个例子来理解这一点。想象智能体在一个走廊中,它总是从最左边的状态开始。在左右状态中,左右动作具有通常的后果。然而,在中间状态,左右动作是互换的:向左移动会使智能体向右,向右移动会使智能体向左状态。每一步的奖励是-1,任务是片段式的。
假设函数近似将所有状态视为相同,所有三个状态共享相同的近似价值。如果我们限制自己使用确定性策略,我们将别无选择,只能在所有状态中选择相同的动作。这只会给我们两种选择:总是向左移动或总是向右移动。
以下是两种确定性策略的结果:
- 如果总是向左移动,我们将永远无法离开起始状态,因此该策略的期望回报是负无穷。
- 如果总是向右移动,我们将到达中间状态,然后移回起始状态并永远持续下去,因此期望回报也是负无穷。
然而,如果我们被允许随机选择动作,我们可以做得更好。我们可能会被困住一段时间,但只要每个动作都有非零概率,我们最终会到达终止状态。事实上,在这种函数近似下的最佳策略有点特别:59%的时间选择向右动作,其余时间选择向左动作。该策略实现了大约-11.6的期望回报,明显优于负无穷。
这个例子可能看起来有点刻意,但类似的情况在现实世界中也会出现。例如,在我们自己的实验室中,一个机器人因为具有确定性策略和有限的函数近似器而卡在房间的角落里。
3. 策略有时比价值函数更简单 🏔️
有时策略比价值函数更简单。记住山地车问题,我们花了很多时间设计一个基于价值的智能体来学习最优策略。然而,在这个问题中,我们之前看到的能量泵送策略几乎是最优的。
智能体只需根据当前速度选择其动作:
- 如果速度为负,则智能体采取加速向左的动作。
- 如果速度为正,则智能体采取加速向右的动作。
这个策略允许智能体快速逃离山谷。正如你所看到的,这是一个相当简单的策略。另一方面,价值函数则相当复杂。


总结
本节课中我们一起学习了参数化随机策略之所以有用的原因:
- 它们可以随着时间的推移自主减少探索。
- 它们可以避免因函数近似能力有限而采用确定性策略所导致的失败。
- 有时策略本身比价值函数更简单、更易于表示和学习。
在接下来的视频中,我们将看到动作价值方法和基于策略的方法之间并不存在严格的区分。事实上,我们可以使用动作价值来使学习参数化策略变得更加容易。下次见。
113:学习策略的目标 🎯

在本节课中,我们将学习如何为直接参数化的策略设定一个学习目标。我们将看到,与基于动作价值的方法不同,当策略被直接参数化时,我们可以将强化学习的终极目标——最大化长期奖励——直接作为学习目标。
从参数化策略到学习目标

上一节我们介绍了直接参数化策略的思想。本节中,我们来看看如何学习并改进一个参数化的策略。
与基于动作价值的方法类似,基本思路是:指定一个目标函数,然后找出如何从智能体的经验中估计该目标函数的梯度。完成本节学习后,你将能够描述策略梯度算法的目标。

定义策略学习目标
为学习参数化策略制定目标,在某种意义上比基于动作价值的方法更直接。
我们多次强调,强化学习的终极目标是学习一个能在长期获得尽可能多奖励的策略。事实证明,当我们直接参数化策略时,我们也可以将这个目标直接作为学习目标。
长期奖励的不同表述
在本系列课程中,我们介绍了对“长期获得尽可能多奖励”的几种不同解释:
- 分幕式任务:使用无折扣回报,即整个幕中奖励的总和。
- 持续性任务:引入折扣回报,更强调即时奖励,以保证总和有限。
- 平均奖励表述:最大化奖励的长期平均值。这里合适的回报是即时奖励与其平均值之差的累加和(因为减去了长期平均值)。即使没有折扣,这个和也是有限的。
我们面临三种潜在的问题表述。接下来,我们将把注意力限制在具有平均奖励的持续性任务设定上。

我们的目标是找到一种直接优化策略参数的方法。第一步是将平均奖励目标写成我们可以优化的形式。
平均奖励目标的数学形式
之前,我们在Sarsa的平均奖励变体中,通过估计平均奖励来学习动作价值。现在,我们的目标是学习一个直接优化平均奖励的策略。
为此,让我们从一个更有用的形式开始,写出在某个策略下的平均奖励。特定策略 π 所获得的平均奖励可以写成如下公式:
J(π) = Σ_s μ_π(s) Σ_a π(a|s) Σ_{s‘, r} p(s‘, r|s, a) r
让我们分解这个公式,从内层求和开始向外看:
- 内层求和:
Σ_{s‘, r} p(s‘, r|s, a) r给出了从状态 s 采取动作 a 时的期望奖励。这简单来说就是所有可能获得的奖励的加权和,权重由从 (s, a) 出发的概率决定。 - 中层求和:
Σ_a π(a|s) [内层求和]是对所有可能动作的求和,权重由策略 π 下的概率给出。这给出了从特定状态 s 出发,在策略 π 下的期望奖励。 - 外层求和:
Σ_s μ_π(s) [中层求和]通过考虑在策略 π 下处于状态 s 的时间比例 μ_π(s),来获得整体平均奖励。状态间的期望奖励是每个状态的期望奖励以其 μ(s) 为权重的总和。
J(π) 就是我们的平均奖励学习目标。策略优化的目标将是找到一个能最大化平均奖励的策略。
我们的基本方法将是:估计目标函数相对于策略参数的梯度,并根据这个估计值调整参数。采用这种思想的方法类别通常被称为策略梯度方法。
与之前方法的对比
到目前为止,我们使用了一种非常不同的方法:我们使用广义策略迭代框架来学习近似的动作价值,然后间接地使用这些近似值来推断一个好的策略。现在我们感兴趣的是直接学习策略。
还有一个表面上的区别:之前我们是在最小化均方价值误差,而现在我们是在最大化一个目标函数。这意味着我们将希望沿着梯度的方向移动,而不是负梯度的方向。

计算梯度面临的挑战
然而,计算这个梯度存在一些挑战。主要困难在于:修改我们的策略会改变状态分布 μ。
这与价值函数近似形成对比。在价值函数近似中,我们在特定策略下最小化均方价值误差,那里的分布 μ 是固定的,它不随参数化价值函数中权重的变化而改变。因此,我们能够简单地通过遵循策略来对从 μ 中抽取的状态估计梯度。
在策略优化中,这就不那么直接了,因为 μ 本身依赖于我们正在优化的策略。幸运的是,有一个出色的理论答案可以应对这个挑战,称为策略梯度定理。我们将在后续课程中详细讨论。

总结
本节课中,我们一起学习了如何为策略优化设定目标。我们了解到,可以将平均奖励直接作为优化参数化策略的目标函数。我们还对比了策略梯度方法与之前基于价值函数的方法的区别,并指出了在计算梯度时,由于策略变化会导致状态分布变化所带来的主要挑战。在接下来的课程中,我们将讨论如何从采样经验中实际优化这个目标。
114:策略梯度定理 📈

在本节课中,我们将学习策略梯度定理。这是一个关键的理论成果,它允许我们将平均奖励的梯度表示为更容易从经验中估计的形式。
上一节我们讨论了策略优化的目标,本节中我们来看看智能体如何基于自身经验来优化这个目标。
梯度上升方法
为了优化平均奖励目标,我们使用基于随机梯度下降的方法。策略梯度方法采用类似的方法,但针对的是平均奖励目标和策略参数θ。
我们希望最大化平均奖励,而不是最小化它。这意味着我们进行梯度上升,并沿着正梯度的方向移动。
解决问题的简单步骤是:首先指定一个目标,然后估计该目标的梯度,最后沿着该方向调整权重。第一步已完成,下一步是估计我们目标的梯度。

计算梯度
回忆平均奖励目标,我们来计算其梯度。我们可以对目标应用微积分的乘积法则,得到两项。这看起来相当复杂,让我们更仔细地看一下。
第一项涉及状态平稳分布μ的梯度。不幸的是,μ的梯度不容易估计,因为平稳分布μ依赖于策略与环境之间的长期交互。

策略梯度定理
幸运的是,策略梯度定理为我们提供了这个梯度的一个更简单的表达式。以下是定理的结果,值得仔细分析这个表达式。

在内层求和中,我们有策略的梯度乘以动作价值函数。让我们尝试更好地理解这一项。
以下是策略梯度定理给出的梯度表达式:
理解梯度项
只要我们的策略参数化是可微的,策略的梯度就很容易计算。策略的梯度告诉你如何调整参数以增加特定动作的概率。
考虑这里展示的简单网格世界。通常,智能体可以向上、下、左、右移动。为简化起见,假设策略仅由两个参数控制。
参数当前设置在图中标记的点。箭头表示在当前参数设置下,智能体在特定状态下的动作概率。
图中向上动作的梯度可能看起来像这样。梯度告诉我们如何改变策略参数,使得在给定状态下选择该动作的可能性更大。通过沿着梯度方向移动参数,我们增加了向上动作的概率,这必然意味着降低其他一些动作的概率。
不同的动作有不同的梯度。例如,向左动作概率的梯度可能看起来像这样。沿着该方向移动参数将增加向左动作的概率,并降低其他一些动作的概率。
这听起来可能有点抽象,但在接下来的课程中,我们将展示计算此梯度的具体示例。
引入奖励
现在让我们将奖励引入这种情况,并思考整个项的含义。这是每个动作概率梯度的加权和,权重是相关动作的价值。
想象一下,我们在右下角添加了一个有奖励的状态。向上和向左的动作远离它,应该具有负价值;向下和向右的动作朝向它,应该具有正价值。精确的价值取决于当前策略,但假设它们看起来像这样。
加权和给出了一个移动参数的方向,该方向会降低向上或向右移动的概率(因为它们的价值为负),同时增加向下或向左移动的概率(因为它们的价值为正)。这个方向可能看起来像这样。

策略梯度定理给出的梯度表达式将此表达式对每个状态求和。这给出了移动策略参数以最快速提高整体平均奖励的方向。
总结
以上就是策略梯度定理的内容。我们现在有了一个简单的梯度表达式。重要的是,这个表达式不包含难以估计的状态分布μ的梯度。

策略梯度定理的证明可以在课程教科书中找到。正如我们将在下一讲中看到的,这个梯度很容易估计,这意味着我们将能够使用智能体的经验构建一个增量策略梯度算法。
本节课中我们一起学习了策略梯度定理如何为我们提供了平均奖励梯度的表达式,并理解了梯度中的各项含义。
115:策略梯度估计




在本节课中,我们将学习如何利用智能体与环境交互的经验,来估计策略梯度定理给出的目标函数梯度。我们将推导出一个基于样本的梯度估计方法,并最终得到一个简洁的策略参数更新规则。
从目标到梯度估计
上一节我们介绍了策略优化的目标函数以及策略梯度定理。本节中,我们来看看如何近似计算这个梯度。我们的目标是推导出一个用于策略参数的梯度上升算法。我们已有目标函数及其梯度,现在需要找到近似这个梯度的方法。实际上,我们将获得梯度的随机样本。
回忆平均奖励目标的梯度表达式。对状态求和在实际中难以实现。但我们可以采用与推导策略评估的随机梯度下降规则时相同的方法。
我们只需根据策略 π 观察到的状态进行更新。从状态 S_t 计算出的梯度,为平均奖励的梯度提供了一个近似。正如之前讨论的随机梯度下降,我们可以用这个近似来调整权重,并仍能保证收敛到一个驻点。
随机梯度上升更新
以下是策略参数的随机梯度上升更新公式:
θ ← θ + α * ∇θ J(θ) 的近似
我们可以在此停止,但让我们进一步简化。让我们从基于期望的角度重新审视这个问题。这将帮助我们简化更新规则,并让你更深入地理解更新为何有效。
注意,以 μ 加权的状态和可以重写为在 μ 下的期望。回忆 μ 是 π 的平稳分布,反映了在 π 下的状态访问频率。实际上,我们遵循 π 时观察到的状态是按照 μ 分布的。通过从状态 S_t 计算梯度,我们得到了这个期望的一个无偏估计。
将随机梯度视为无偏估计,这提示了另一种简化方法。
简化动作求和项
注意,在期望内部,我们有一个对所有动作的求和。我们希望进一步简化这一项,去掉对所有动作的求和。如果这是一个关于动作的期望,我们也可以对其进行随机采样,从而避免对所有动作求和。
接下来,我们将看到如何仅使用智能体采取的那个动作 A_t 来获得一个无偏的梯度估计。如果我们的动作和是以 π 加权的,那么它就是在 π 下的一个期望。这样我们就可以使用智能体的动作选择(其分布遵循 π)来对其进行采样。事实证明,解决这个问题很容易。为了得到一个对应于期望的加权和,我们只需乘以并除以 π(a|s)。
现在,对于这一项,我们有了一个从 π 中抽取动作的期望。新的随机梯度上升更新规则如下所示:
θ ← θ + α * ∇θ log π(A_t|S_t, θ) * Q_π(S_t, A_t)
对数梯度技巧
顺便提一下,通常会将这个梯度重写为 π 的自然对数的梯度。这是基于微积分中对数梯度的公式。使用这个规则,我们得到 ∇θ log π = ∇θ π / π,因此这个更新与我们最初的形式是等价的。
为什么要这样做?一个原因是,对于某些分布,计算其对数的梯度实际上更简单。另一个不太重要的原因仅仅是它让我们能更紧凑地书写这个梯度。归根结底,这只是一个数学技巧,所以不要让它分散你对底层算法的注意力。
最终的更新规则
我们现在得到的规则看起来像本课程中使用的许多学习规则:我们按照目标函数随机梯度的比例调整参数 θ。我们使用步长参数 α 来控制该方向上的步长幅度,因此 α 的作用与以往相同。至此,我们得到了一个简洁清晰的策略参数更新规则。
最后要讨论的是如何为给定的状态和动作实际计算这个随机梯度。
我们只需要两个部分:策略的梯度,以及差分动作值的估计。第一部分很简单。我们知道策略及其参数化形式,因此可以计算其梯度。
动作值可以用多种方式近似。例如,我们可以使用一个学习差分动作值的时序差分算法。在接下来的视频中,我们将详细介绍一种特定的选择,以及如何计算特定策略参数化的梯度。


总结
本节课中,我们一起推导了平均奖励设定下的策略梯度学习规则。在下一个视频中,我们将看到如何使用这个规则。
116:演员-评论家算法 🎭🤖
在本节课中,我们将学习一种结合了策略学习和价值学习的强大方法——演员-评论家算法。我们将探讨如何让一个“演员”负责选择动作,同时让一个“评论家”评估这些动作的好坏,两者协同工作以改进策略。
我们是否必须在直接学习策略参数和学习价值函数之间做出选择?答案是否定的。
即使在策略梯度方法内部,像时序差分这样的价值学习方法仍然扮演着重要角色。在这种设置中,参数化的策略扮演着“演员”的角色,而价值函数则扮演着“评论家”的角色,负责评估演员选择的动作。这些所谓的演员-评论家方法,是强化学习中最早引入的基于时序差分的方法之一。
上一节我们介绍了策略梯度的基本概念,本节中我们来看看如何将价值函数估计融入其中,形成完整的演员-评论家算法。
我们以上一视频结束时的策略梯度学习规则表达式作为起点:
但我们无法直接获得真实的动作价值函数 \(Q^{\pi}\),因此必须对其进行近似。我们可以采用通常的时序差分方法,使用一步自助回报(one-step bootstrapped return)作为估计:
其中,\(\hat{v}\) 是价值函数的参数化估计(在本例中是差分价值函数)。这就是演员-评论家算法中的“评论家”部分,它为演员提供即时反馈。
为了训练评论家,我们可以使用任何状态价值学习算法。这里我们将使用平均奖励版本的半梯度时序差分法来更新价值函数参数 \(\mathbf{w}\)。
参数化的策略就是“演员”,它使用上面展示的策略梯度进行更新。我们可以直接使用这种更新形式,但还可以做最后一项改进来优化算法:减去一个称为“基线”的值。
我们不单独使用一步价值估计,而是减去状态 \(S_t\) 的价值估计,从而得到如下形式的更新:
这里的 \(\hat{v}(S_t, \mathbf{w})\) 就是基线。请注意,方括号内的表达式恰好等于时序差分误差 \(\delta_t\)。
这个更新的期望值与之前的版本相同。为什么?让我们在给定特定状态 \(S_t\) 的条件下,计算更新的期望值。期望的求和等于求和的期望,我们可以利用这一点将原始项的期望与涉及被减价值函数项的期望分离开。结果证明,第二项的期望值为0。因此,我们可以在不改变更新期望值的情况下添加这个基线。您可以自行验证这一点:将期望写为对动作的求和,并将 \(\hat{v}\) 项从求和中提出。
那么,如果更新的期望值相同,我们为什么还要添加这个基线呢?减去这个基线有助于降低更新的方差,从而带来更快的学习速度。

从直觉上理解,这个更新也很有道理:在我们执行一个动作后,我们使用时序差分误差来判断该动作相对于该状态的平均水平有多好。如果时序差分误差为正,意味着所选动作带来的价值高于预期,那么更频繁地采取该动作应该能改进我们的策略。这正是此更新所做的:它根据评论家的判断,改变策略参数以增加那些优于预期的动作的概率。相应地,如果评论家“失望”且时序差分误差为负,则该动作的概率会降低。
演员和评论家同时学习,不断交互。演员不断改变策略以超越评论家的期望,而评论家则不断更新其价值函数以评估演员不断变化的策略。
有了策略更新规则,我们现在可以梳理完整的平均奖励演员-评论家算法了。
以下是算法的关键步骤:
- 初始化:首先,我们需要指定策略的参数化形式和价值函数的参数化形式。例如,我们可以使用瓦片编码来构建近似价值函数,并使用softmax策略参数化。我们还需要像在差分SARSA算法中那样,维护一个平均奖励 \(\bar{R}\) 的估计,通常初始化为0。权重和策略参数可以按喜好初始化。我们还需要为价值估计、策略和平均奖励的更新分别初始化步长参数,它们可以各不相同。
- 与环境交互:从环境中获取初始状态,然后开始行动和学习。
- 循环(每一步):
- 根据当前策略 \(\pi(\cdot|S_t, \theta_t)\) 选择动作 \(A_t\)。
- 执行动作 \(A_t\),从环境中接收下一个状态 \(S_{t+1}\) 和奖励 \(R_{t+1}\)。
- 计算差分时序差分误差:\(\delta_t = R_{t+1} - \bar{R}_t + \hat{v}(S_{t+1}, \mathbf{w}) - \hat{v}(S_t, \mathbf{w})\)。
- 更新平均奖励估计:\(\bar{R}_{t+1} = \bar{R}_t + \beta \delta_t\)。
- 更新价值函数权重(评论家):\(\mathbf{w}_{t+1} = \mathbf{w}_t + \alpha^w \delta_t \nabla \hat{v}(S_t, \mathbf{w}_t)\)。
- 更新策略参数(演员):\(\theta_{t+1} = \theta_t + \alpha^\theta \delta_t \nabla \ln \pi(A_t|S_t, \theta_t)\)。
这个算法是为持续性任务设计的,因此我们可以无限期地运行它,并持续改进策略。

本节课中我们一起学习了演员-评论家算法的核心思想。我们认识到,学习一个价值函数来估计策略参数的梯度是非常有用的。演员-评论家算法通过一个为演员学习价值函数的评论家来实现这一想法,两者协同工作,不断优化策略。
强化学习专项课程:P117:基于Softmax策略的演员-评论家算法 🎭


在本节课中,我们将学习演员-评论家算法的一个具体实现。我们将使用线性函数近似和Softmax策略参数化,来构建一个适用于连续状态和有限动作集的算法。
演员-评论家算法巧妙地结合了直接策略优化、价值函数和时间差分学习。我们之前讨论的演员-评论家方法较为通用,没有指定函数近似或策略参数化的具体形式。
本节中,我们来看看一个具体的实现:使用线性函数近似和Softmax策略参数化的演员-评论家算法。

策略参数化:Softmax策略
我们首先讨论策略的参数化。对于有限动作集,一个常见的选择是之前讨论过的Softmax策略。
我们可以使用函数近似来表示动作偏好。该函数的参数就是策略参数,记作 θ。因此,我们的策略梯度学习规则将更新 θ。
我们使用一个Softmax策略,它将偏好值进行指数化,然后除以总和。这保证了生成的动作概率为正且总和为1。
公式:
π(a|s, θ) = exp(h(s, a, θ)) / Σ_b exp(h(s, b, θ))
请注意,策略被写为当前状态的函数。这就像为每个状态都有一个不同的Softmax分布。
智能体在状态空间中移动时,依赖于状态的动作偏好会导致每个状态可能产生不同的分布。
以下是选择动作的步骤:
- 在当前状态下,我们为每个动作查询Softmax函数。
- 这会生成一个概率向量,每个动作对应一个条目。
- 根据这些概率,按比例选择一个动作。
函数近似的选择
现在,让我们讨论参数化选择如何影响价值函数、动作偏好以及更新方程。
我们为价值估计和策略使用相同的特征。请记住,评论家更新的是状态价值函数的估计。因此,评论家只需要一个表征当前状态的特征向量。
演员的动作偏好则依赖于状态和动作。因此,我们的动作偏好函数需要一个“状态-动作”特征向量。
我们之前遇到过这个问题。我们采用与之前相同的策略:堆叠状态特征。也就是说,我们为每个动作使用一份状态特征向量的副本。
策略参数向量 θ 的大小大于评论家使用的权重 w。例如,如果有三个动作,θ 的大小就是 w 的三倍。
更新方程
接下来,我们看看使用线性Softmax参数化时,演员和评论家的更新方程。
第一个方程很简单。线性价值函数的梯度就是特征向量本身。
因此,评论家的权重更新就是学习率α乘以TD误差δ再乘以特征向量。
公式:
w ← w + α * δ * x(s)
这与我们熟悉的半梯度TD方法相同。
演员对偏好的更新需要更多思考。幸运的是,梯度并不复杂。我们省略推导过程,直接给出最终结果。你可以自行验证。
梯度由两部分组成:
- 所选动作的“状态-动作”特征。
- 所有动作的“状态-动作”特征乘以策略概率后的总和。
公式:
θ ← θ + α * δ * (x(s, a) - Σ_b π(b|s, θ) * x(s, b))

总结
本节课中,我们一起学习了演员-评论家算法的一个具体实现。你现在已经掌握了独立实现该算法所需的所有知识。
我们介绍了如何使用线性函数近似和Softmax策略来参数化策略,并推导了相应的演员和评论家更新方程。下次,我们将尝试运行这个算法模型,看看它的实际效果。
118:演员-评论家算法演示 🎬


在本节课中,我们将学习演员-评论家算法如何应用于一个经典的控制任务——钟摆上摆问题。通过本课,你将能够为平均奖励演员-评论家算法设计函数近似器,并分析其智能体的性能表现。
任务介绍:钟摆上摆问题 🤖
上一节我们介绍了演员-评论家算法的基本框架,本节中我们来看看它在一个具体问题上的应用。
今天我们将研究钟摆上摆任务。智能体控制一个钟摆;其控制方式很简单,智能体可以在枢轴点(图中黑点所示)施加扭矩。目标是让钟摆平衡在竖直向上的位置。
钟摆从静止位置开始,即无初速度地下垂状态。钟摆可以自由运动,仅受重力和智能体施加的动作影响。
钟摆的状态是杆的角度和角速度。两者都是实数值。我们的模拟只有三个离散动作:施加恒定的顺时针角加速度、逆时针角加速度或不施加角加速度。
我们为此任务使用 softmax 策略,因为动作空间是离散的。稍后,我们将为钟摆任务的连续动作变体使用不同的参数化方法。
定义奖励函数与任务形式 🎯
下一步是找到奖励函数。目标是让钟摆直接指向正上方并保持该状态。
因此,奖励等于与垂直方向夹角的负绝对值。公式表示为:奖励 = -|角度|。
如果钟摆达到较大的角速度,则可能损坏系统,这是不好的。为了避免这种情况,我们将角速度范围限制在 -2π 到 2π 之间。如果超过此限制,则将钟摆重置到静止位置。
目标是始终让钟摆尽可能接近竖直位置。这个过程无限期持续,没有分幕或终止。因此,将其表述为一个持续性任务是合理的。
任务难点与算法应用 🧩
钟摆任务有几个有趣之处:动作的强度不足以将钟摆直接从静止位置移动到竖直位置。一个好的策略必须施加使钟摆远离目标位置的动作,以获得足够的动量向上摆动。最后,竖直位置是不稳定的,因此一个好的策略必须持续平衡杆。
现在,让我们将 softmax 演员-评论家算法应用到模拟的钟摆任务中。在此之前,我们必须设计函数近似器和策略参数化方法。
设计函数近似器 🛠️
钟摆任务是一个低维状态问题,只有角度和角速度。这个二维问题非常适合使用瓦片编码。
近似价值函数和动作偏好将是瓦片编码特征的线性函数,但在状态变量上是非线性的。
设置瓦片编码的第一步是确定每个状态变量的范围。对于角位置来说这很容易,它只需要在 π 和 -π 之间。由于之前讨论的约束,角速度将位于 2π 和 -2π 之间。
通常最好使用大的瓦片和多个瓦片层:宽泛的瓦片支持相当大的泛化,从而实现快速的早期学习;而多个瓦片层有助于区分。这应该能产生对价值函数和动作偏好的准确近似。
我们使用了 32 个大小为 8x8 的瓦片层。请记住,对于动作偏好,我们需要为每个“状态-动作”对准备一个特征向量。和之前一样,我们只需为每个动作使用状态特征的独立副本。
设置算法参数 ⚙️
关于平均奖励、演员和评论家的步长参数呢?参数相当多,且每个都对性能有很大影响。
我们进行了系统的参数扫描,以确定每个参数的良好设置。这符合我们的一般节奏:我们希望评论家以更快的速度更新。这样,评论家可以准确地评判变化较慢的策略。
要在此任务上获得良好性能,还需要一些其他细节。由于时间关系,我们将跳过这些,但别担心,你将在评估中学习到所有关于此实现的内容。
智能体学习过程演示 📈
让我们看一段视频,了解智能体刚开始与钟摆环境交互时的情况:智能体开始时随机行动,但很快学会增加能量以达到更接近竖直的状态。
让我们快进一点,最终的行为看起来是这样的。我们添加了随机扰动,以展示所学策略的鲁棒性。这就像偶尔用手指轻弹钟摆。扰动仅在智能体学会良好的平衡策略后引入。视频中用黑色箭头显示了这些扰动,我们可以看到训练有素的智能体如何平稳恢复,并对这些轻弹具有鲁棒性。
性能评估与结果分析 📊
观看我们编程的智能体掌握钟摆问题确实令人满意,但我们也必须是持怀疑态度的科学家。这只是一个演示,智能体是否每次都成功学会平衡,还是我们只是运气好?它学习的速度和鲁棒性如何?
为了回答这些问题,我们进行了100次实验并平均了性能。为了衡量智能体的性能,我们绘制了所有时间步上奖励的指数加权平均值。误差线显示了均值的标准误。误差线非常小,事实上小到几乎看不见,因此我们相当确信,此图准确地反映了我们智能体在使用所选参数时在此任务上的平均性能。
平均奖励开始时很低,但一开始就迅速增加。经过短暂时间后,改进速度放缓,但随着智能体继续优化其策略,改进仍在继续。性能在接近零处达到峰值,这意味着智能体通常能够平衡钟摆竖直向上,仅有微小偏差。之后,性能从此点开始保持稳定。


总结 📝
本节课中我们一起学习了演员-评论家学习系统的一个具体实现,并在一个经典控制任务上进行了测试。我们介绍了钟摆上摆问题,设计了基于瓦片编码的函数近似器,设置了算法参数,并分析了智能体从随机探索到稳健平衡的学习过程与性能。再见。
119:连续动作的高斯策略 🎯


在本节课中,我们将要学习如何将基于策略的方法应用于连续动作空间。具体来说,我们将探讨如何参数化一个依赖于状态的高斯分布策略,并推导出相应的演员-评论家更新规则。
概述
基于策略的方法有一个显著优点:它们为我们处理非常大甚至连续的动作空间提供了一种自然的方式。我们无需为每个独立动作分配概率,而是可以学习某个动作分布的参数。本节视频将讨论如何学习一个依赖于状态的、针对连续动作的高斯分布。
从离散到连续动作空间
上一节我们介绍了在离散动作空间下的策略参数化。本节中,我们来看看如何处理连续动作。
让我们回顾之前探讨过的钟摆上摆任务。状态空间和奖励函数完全相同。但这次,我们将为动作空间使用一个连续区间,而不仅仅是三个离散的角加速度等级。角加速度可以在-3到+3之间的任何值,这是最小值和最大值。
我们无法为每个动作单独分配概率,因为可能的动作空间是无限的。一种解决方案是将动作限制在整个可能范围内的一个离散子集,这正是我们之前所做的。但这种方法限制了智能体应用更大加速度的能力。我们更希望智能体能在适当的时候应用大加速度,并用较小的加速度来调整平衡。
高斯分布策略
为了实现这个目标,另一种策略是将策略参数化为一个连续分布,例如高斯分布。
一个高斯随机变量X具有如下所示的概率密度函数(PDF):
PDF(x) = (1 / (σ * √(2π))) * exp(-(x - μ)² / (2σ²))
以下是具有不同均值和方差的PDF示例。请注意,在这种情况下,y轴表示的是密度,而不是概率。概率密度意味着,对于给定范围,x落在该范围内的概率将是概率密度曲线下的面积。
参数μ控制分布的均值。如果μ为0,分布将围绕零中心。参数σ是标准差,即方差的平方根。如果σ很小,分布将在均值μ周围急剧峰值。随着σ变大,分布会更加分散,x会从更广的值域中抽取。
定义高斯策略
让我们使用一个关于动作的高斯分布来定义我们的策略。我们将参数μ和σ定义为状态的函数。这样,智能体可以为不同的状态分配不同的动作分布。
μ(x)可以是任何参数化函数,但为了简单起见,我们将其设为状态特征的线性函数。与μ相关的策略参数记为θ_μ。
参数化函数σ有一个约束:它必须是正数。为了强制执行这一点,我们将将其参数化为一个线性函数的指数。与σ相关的策略参数记为θ_σ。
我们的策略参数现在由这两个大小相等的堆叠参数向量组成。
我们已经定义了高斯策略。请记住,策略的主要目的是为我们提供一种选择动作的方式。要使用此策略选择动作,我们从高斯分布中采样。许多编程库都包含从高斯分布采样的函数,因此我们在此不赘述。
该过程很简单:在某个状态下,我们从该状态计算μ和σ。然后,我们使用该μ和σ调用高斯随机数生成器。
在一个状态下,μ和σ可能看起来像这样。对于这个状态,很可能会采样到广泛范围的动作。这是在此状态下可能采样的一个动作。
在另一个状态下,μ和σ可能看起来像这样。对于这个状态,只有很窄范围的动作可能被采样。这是在此状态下可能采样的一个动作。
σ本质上控制了探索的程度。我们通常将方差初始化为较大值,以便在学习过程中尝试广泛的动作。随着学习的进行,我们期望方差会缩小,策略会集中在每个状态下的最佳动作周围。
与许多参数化策略一样,智能体可以通过学习随时间减少探索量。
演员-评论家算法的应用
尽管我们现在有了连续动作而不是离散动作,但我们仍然可以使用相同的演员-评论家架构。算法实际上非常相似,主要区别在于策略的梯度不同,因为参数化方式不同。
从本质上讲,目标函数看起来也略有不同,因为我们对动作进行积分而不是求和。但采样梯度最终是相同的,因此我们所要做的就是计算出策略自然对数的梯度。
我们将跳过这里的推导步骤,但结果如幻灯片所示。作为练习,请尝试自己验证它。
以下是推导出的演员-评论家更新规则的核心公式。对于均值参数θ_μ和标准差参数θ_σ,其梯度更新分别涉及优势函数A(s, a)与对应特征向量的乘积:
Δθ_μ = α_μ * A(s, a) * (a - μ(s)) / σ(s)² * ∇_θ μ(s)
Δθ_σ = α_σ * A(s, a) * [((a - μ(s))² / σ(s)²) - 1] * ∇_θ σ(s)
其中,α_μ和α_σ是各自的学习率步长。
为何使用连续动作?
现在我们有了连续动作的更新规则,但为什么要做所有这些工作呢?考虑到我们之前使用的离散动作在这个问题上似乎效果不错。
最明显的原因是,为问题选择一个离散的动作集可能并不简单。例如,想象一个训练来打高尔夫球的机器人。精确推杆需要相当高的精度。我们可以尝试选择一组离散的力施加到球杆上,并希望它足够好,但不可避免地会出现不够用的情况。根据距离和地形,我们可能需要使用全部的力范围。
连续动作还允许我们在动作之间进行泛化。例如,高斯策略平滑地将概率密度分配给附近的动作。假设发现某个动作很好,更新会增加该动作的密度。附近动作的密度也会增加,智能体会泛化地认为这些动作可能也很好。
最后,即使真实的动作集是离散的但非常大,将其视为连续范围可能更好。这提供了一种自然的方式来对它们进行泛化,并避免了独立探索每个动作的昂贵过程。
算法性能演示
现在让我们看看这个演员-评论家算法在钟摆上摆任务上的表现。我们再次扫描了许多步长值。我们为θ_μ和θ_σ使用了单独的步长。
这里我们可视化了早期学习阶段的策略。它看起来与我们使用离散动作集时没有太大不同。它很快学会了来回摆动钟摆。枢轴周围误差的大小表示在给定时间应用的角加速度的大小。
这里我们可视化了学习结束时的策略。它学习到了一个非常好的平衡策略。我们再次添加了扰动,以突出所学策略的鲁棒性。

总结
本节课中,我们一起学习了如何将演员-评论家算法应用于具有连续动作的问题。我们展示了如何通过高斯策略参数化在一个简单环境中实现这一点。你现在应该理解如何推导高斯策略的演员-评论家更新,并将其应用于连续动作任务。
强化学习专项课程:第4周:策略梯度与Actor-Critic方法总结
在本节课中,我们将总结第四周的核心内容:从参数化动作价值函数转向直接学习参数化策略的全新方法。我们将介绍新的优化目标和一个名为Actor-Critic的算法框架。
课程定位与概览
首先,让我们回顾一下新知识在整个学习版图中的位置。我们使用函数近似来学习策略,因此我们仍处于版图的左侧部分。本周我们聚焦于使用平均奖励目标的Actor-Critic方法,这使我们定位在此处。
根据动作空间是连续还是离散,我们引入了两种可能的参数化方式。对于离散动作,我们使用Softmax策略参数化。对于连续动作空间,我们使用高斯策略,它可以从一个连续范围内采样动作。这是我们首次实现针对连续动作的算法。
平均奖励Actor-Critic可用于与我们之前介绍的差分半梯度Sarsa算法相同的场景中。
从价值到策略:参数化策略
本周我们首先实现了从参数化动作价值到参数化策略的转变。参数化策略接收状态-动作对,并输出相应的动作概率。这个函数由一个参数向量θ参数化。
一个参数化策略必须是一个有效的概率分布。这意味着每个动作概率必须大于零,并且在给定状态下所有动作的概率之和必须为1。在离散动作空间中,对动作偏好值进行Softmax操作是确保参数化策略遵守这些约束的一种方法。
直接参数化策略具有许多潜在优势。这些优势包括:能够在使用随机策略进行早期探索的同时,随时间自主收敛到确定性策略;能够学习随机策略,这在最优确定性策略无法被函数近似表示时非常有用;最后,一个好的策略可能比精确的动作价值函数更容易学习和表示。
新的目标与优化策略
为了学习参数化策略,我们必须考虑一个新的优化目标和一种新的优化策略。我们重新审视了平均奖励目标。我们展示了平均奖励可以像这样展开。我们的优化策略是使用随机梯度上升。为此,我们需要一个对平均奖励梯度的估计。
这具有挑战性,因为状态分布μ依赖于策略参数。策略梯度定理提供了一个便于优化的平均奖励目标梯度的表达式。这种形式允许我们通过遵循策略π从μ中采样状态来估计梯度。
Actor-Critic算法框架
利用策略梯度定理,我们推导出了Actor-Critic算法。Actor-Critic同时学习一个参数化策略(Actor)和一个对该策略价值函数的估计(Critic)。
来自Critic的TD误差反映了Actor的表现是优于还是差于Critic的预期。Actor被训练为倾向于选择那些超出Critic预期的动作,而Critic则被训练以改进其对Actor的价值估计,从而知道对于这个Actor它应该期望什么价值。
我们演示了Actor-Critic算法如何用于离散和连续动作空间。对于离散动作,我们使用了Softmax策略参数化。对于连续动作,我们使用了具有状态依赖均值和方差的高斯策略。
以下是高斯策略的公式表示,它使得动作的高斯分布以状态为条件:
π(a|s, θ) = N(μ(s, θ), σ²(s, θ))

总结
现在,除了我们之前研究过的动作价值方法,你也掌握了如何直接参数化和学习策略。这是你强化学习工具箱中一个宝贵的新工具。

本节课中,我们一起学习了:
- 从价值函数学习转向直接策略学习的动机与优势。
- 参数化策略的定义与要求。
- 用于优化策略的平均奖励目标与策略梯度定理。
- Actor-Critic算法的核心思想与工作流程。
- 针对离散(Softmax)和连续(高斯策略)动作空间的具体实现方法。
121:月球着陆器项目概述 🚀

在本节课中,我们将综合运用前三个课程的知识,完成一个完整的强化学习项目:设计一个智能体,使其能够控制月球着陆器安全着陆。我们将从问题形式化开始,逐步探讨算法选择、函数逼近器设计等关键细节,并最终实现一个完整的系统。
从目标到问题形式化
上一节我们介绍了函数逼近在强化学习中的应用与挑战。本节中,我们来看看如何将一个实际目标转化为可计算的强化学习问题。
如果有人要求你“设计一个能让这个月球着陆器着陆的智能体”,你必须首先将这个目标转化为一个具体的问题形式化框架。这是我们开始的地方。
我们将讨论如何将月球着陆任务形式化为一个马尔可夫决策过程。这包括定义状态空间、动作空间、奖励函数和转移概率。
选择与设计学习算法
在明确了MDP框架后,下一步是选择合适的强化学习算法。这个过程涉及对算法各个细节的深入思考。
以下是选择算法时需要考虑的一些关键细节:
- 确定智能体如何进行探索。
- 选择函数逼近架构的类型。
- 决定函数逼近器内部的细节,例如它生成的特征数量。
- 以及其他一系列参数设置。
本课程的一个重要部分是理解所有这些细节的重要性,以及如何尝试洞察你的算法在不同选择下的行为表现。
实践:理解与实现
实际的实现始于深入的理解。因此,我们不只是空谈理论,让我们直接开始动手,当然,是与月球的尘土打交道。
我们将利用第一、第二和第三课程的知识,实现一个完整的强化学习系统。你将研究一个能突出在现实世界中应用强化学习时可能面临的一些挑战的问题。
本节课中我们一起学习了如何启动一个强化学习项目。我们从将高层目标(着陆月球着陆器)形式化为马尔可夫决策过程开始,然后探讨了如何选择并细致设计学习算法,强调了理解算法每个细节对实践成功的重要性。接下来,我们将深入具体实现,让智能体真正开始学习。
122:第4课介绍 🚀

在本节课中,我们将学习如何整合前三门课程的知识,构建一个完整的强化学习系统,并应用于一个实际挑战——控制月球着陆器着陆。
在课程3中,我们介绍了如何使用函数近似的强化学习方法。我们涵盖了如何使用神经网络和固定基函数(如瓦片编码)来近似价值函数和策略。我们讨论了函数近似如何实现泛化,这有助于智能体更快地学习。但我们也可能失去精确区分不同状态价值的能力。函数近似器可能无法准确获取所有状态的价值。此时,智能体必须决定如何在各状态间平衡准确性,即如何分配其有限的近似资源。为此,我们引入了目标函数来明确如何平衡近似误差,并讨论了基于梯度的算法来优化这些目标。
课程目标与实践项目 🌕
利用所有这些新知识,你已经准备好实现一个完整的强化学习系统。你将研究一个问题,该问题突显了在现实世界中应用强化学习时可能面临的一些挑战。
在课程4中,你将综合运用课程1、2和3的知识,完成一个任务:控制一个月球着陆器在月球上安全着陆。当我和Adam开始研究一个新问题时,我们通常会先召开会议,集思广益,讨论如何最好地构建问题框架,并收集关于潜在解决方案的想法。通常没有一个绝对正确的解决方案。在本课程中,我们将与你一同推理,探讨如何为这个问题设计一个智能体。
问题形式化与算法选择 🤔
我们将首先讨论如何将问题形式化为一个马尔可夫决策过程。如果有人只是告诉你“设计一个智能体来让这个月球着陆器着陆”,你必须弄清楚如何将这个目标转化为一个可计算的问题形式。这当然是我们开始的地方。
接着,我们将思考如何选择一个合适的学习算法。这其中很重要的一部分实际上是思考算法涉及的所有细节。这包括确定智能体如何进行探索、选择何种类型的函数近似架构,以及函数近似器内部的细节,例如它生成的特征数量等等。本课程的一大重点是理解所有这些细节的重要性,以及如何尝试洞察你的算法在不同选择下的行为表现。
从理解到实践 🛠️
实际的实现始于深入的理解。因此,我们不只是空谈理论,让我们直接深入其中,亲自动手实践——当然,是与“月球尘土”打交道。
本节课中,我们一起学习了如何将强化学习的理论知识整合起来,应用于一个具体的、具有挑战性的实际问题——月球着陆。我们回顾了函数近似的作用与权衡,并概述了将实际问题形式化、选择并调整算法的完整流程,为接下来的动手实践奠定了基础。
123:认识你的导师 👨🏫👩🏫

在本节课中,我们将认识阿尔伯塔大学强化学习专项课程的两位导师:Adam White和Martha White。通过他们的自我介绍和学术历程,我们可以了解他们进入强化学习领域的契机、对研究的看法以及对该领域未来的展望。
导师介绍

我是Martha,我是阿尔伯塔大学的助理教授。
我是Adam,我是阿尔伯塔大学的研究教授,同时也是DeepMind的高级研究员。
Adam因其在强化学习的预测知识方面的工作而闻名。世界各地的几个研究小组都在这些想法的基础上进行构建。我个人认为这是近年来最重要的工作之一,并且只会变得更具影响力。
他也是一位令人印象深刻的经验主义者,是设计实验以切入关键问题的大师。他一直在努力提升强化学习社区的科学理解。
Martha对强化学习的算法贡献不胜枚举。她开发了几种新的离策略学习算法、新的策略梯度方法,并在表示学习方面做出了数十项令人印象深刻的贡献。她确实是强化学习领域冉冉升起的年轻新星之一。她也恰好是我最频繁的合作者以及我的人生伴侣。
学术之路:Adam的故事
上一节我们介绍了两位导师,本节中我们来看看他们是如何进入计算机科学和强化学习领域的。
Adam首先分享了他的经历。
我是在东海岸长大的。高中时,我对科学非常感兴趣,比如物理、化学、生物,但我没有找到真正适合我的方向。因此,我有些随机地选修了一门关于计算机科学和编程的课程,用的还是GW-BASIC语言。
那对我来说确实是一个决定职业生涯的时刻。我记得第一次实现if语句或for循环时,那种能让计算机为我执行一系列指令的感觉真是太神奇了。
从那时起,我就注定要在大学学习计算机科学了。
那么,你为何开始研究强化学习呢?
在研究生阶段,我搬到了阿尔伯塔大学。我来这里原本是为了学习并行分布式计算,那是我本科时主要关注的方向。我的课程表上排满了系统课程,只剩下一个选修课名额。
我采用了一个非常合理的策略来选课:我浏览了教授们的照片,然后挑选了看起来最友善的那位教授。
是的,那位教授就是Rich Sutton,课程是“强化学习导论”。那门课非常棒,真的很有启发性。那是我第一次接触人工智能或任何形式的机器学习。
我记得那门课的一个早期作业是实现SARSA算法来解决一个网格世界问题。这再次成为了我职业生涯的决定性时刻。看着这个智能体学会解决迷宫,它接收到的唯一反馈是每步-1的奖励信号,但它却神奇地找到了一条极其高效的出迷宫路径。这再次让我感到惊奇,我被迷住了,并决定余生都要继续从事这项工作。
学术之路:Martha的故事
接下来,Martha讲述了她的研究之路。
Martha,你是如何最终从事机器学习和人工智能研究的呢?
我本科其实是从数学开始的。我一直认为函数和动力系统很美。
然后我只是为了好玩选了一门计算机科学课程,结果真的非常有趣。所以我就继续同时学习数学和计算机科学,而这两个学科对于人工智能和机器学习来说结合得非常好。之后我在暑期做了一些人工智能研究,并从此继续了下去。
我留在这个领域,是因为随着时间的推移,它不仅仅是关于数学中的函数。这真的是一个你可以进行大量合作的社区,你可以建立一个帮助他人的职业生涯。
在我的日常工作中,我可以指导很多人,也可以在一个大团队中研究难题。能够在一个团队中研究如此有趣的问题,真的非常棒。
研究生涯的感悟
现在我们对两位导师的背景有了了解,本节我们来听听他们对研究生涯的重要体会。
可能有些人学习这门强化课程是因为他们想在强化学习领域攻读研究生。那么,你在研究生阶段学到的最重要的事情是什么?
也许令人惊讶的是,我学到的一个经验可能适用于所有科学领域,事实上,适用于任何形式的研究。那就是真正热爱去理解事物的细节,专注于小问题并真正、彻底地理解它们。我认为这一点在广泛的领域中都非常适用,这也是我传授给我的学生和课堂上的东西。我特别注重教给我的研究生这一点,我也希望能与学习这个专项课程的人们分享。
那么,你喜欢你工作的哪些方面呢?
我喜欢做研究,但有时它也会让你有点疲惫,比如工作时间真的很长。同行评审过程可能有点令人沮丧。
在那些时候,当你退一步审视自己的研究时,它可能显得有点渺小和不重要,很难看出它将如何影响世界并让世界变得更美好。在那些时候,你总是可以回归到教学和指导上。教学是你帮助人们第一次学习事物、理解你所在领域如何运作的地方,这非常令人兴奋。你也是他们职业生涯开端的一部分,无论他们最终进入学术界、工业界还是创办自己的公司。成为这个过程的一部分是一种非常奇妙的体验。
在我的一周中,对我来说最好的一天总是日程排满与学生会议的日子,我可以帮助他们解决问题,更好地理解强化学习。
强化学习的重要性与未来
上一节我们探讨了研究的价值,本节我们聚焦于强化学习这个领域本身。
你认为研究强化学习为什么如此重要?
我认为强化学习的潜力非常大,但仍然存在许多开放的挑战。机器学习已经开始被更广泛地使用,但强化学习目前只在少数几个领域得到应用。
但同时,我认为强化学习可以产生非常大的影响。我认为在未来十年左右,我们将看到更多的控制工程师在他们的系统中实际使用强化学习。我们真的会看到它成为一种工具,可以在更大的工程系统中帮助实现自动化决策。
但我认为,要真正实现这一点,我们需要在强化学习方面取得一些进展。我们需要更多地思考如何开发出稳健的算法,以及如何让人们乐于使用这些算法。因此,我认为在工业界采用的同时,我们也需要思考如何改进强化学习算法,让这两件事能够共同发生。
那么你呢,为什么认为强化学习值得研究?
自然,我认为强化学习是研究人工智能、推动解决人工智能问题取得进展的精确正确框架。
但强化学习对我来说也非常重要,因为我对发展性学习系统非常感兴趣。你可以想想人类,比如在地板上玩耍的婴儿,或者学习认识世界的幼小动物。我想了解这些系统及其工作原理。
如果你思考这些系统,它们能在极短的时间内学到海量的知识:它们学会爬行,了解自己的身体如何工作,学会与环境互动、操纵物体、与世界中的其他智能体交流。总的来说,它们是非常强大的学习系统,而这一切只发生在几周到几个月的时间里。这真的令人震惊,感觉我们还有大量的工作要做才能接近这类系统。
因此,我真的很想理解这些系统可能使用的算法和表示方法,而我认为强化学习是观察和理解这些事物的正确视角。
应用与展望
最后,我们来探讨强化学习的应用前景。应用总是能推动一个领域的兴趣和兴奋点,强化学习在游戏和一些工业控制问题上已有一些应用,但你认为强化学习的下一个重大突破会是什么?
我认为,强化学习的核心是一种通用的自动化决策方法。它是一种将在我们许多工程系统中帮助我们的工具。
因此,我认为它将真正起飞的地方是工业控制。在工业控制领域,专家们一直在寻找方法来优化系统性能。我们将看到它被用于降低能源成本,或节省工业控制系统中其他类型的成本。在专家手中,我们真的可以在不远的将来让这些算法发挥良好作用。
所以我真的把它看作是一种促进专家工作的工具,而不是说要取代人或实现完全的自动化。


本节课中我们一起认识了阿尔伯塔大学强化学习课程的两位导师Adam和Martha。我们了解了他们从接触计算机科学到投身强化学习研究的个人历程,聆听了他们对研究生涯的深刻感悟,例如注重细节和理解小问题的重要性,以及教学指导带来的满足感。最后,我们探讨了他们眼中强化学习的重要性——既是研究通用人工智能的正确框架,也是未来在工业控制等领域辅助专家决策的强大工具——以及对该领域未来发展的展望。他们的分享为这门课程奠定了坚实而充满热情的开端。
124:问题形式化 🚀

在本节课中,我们将学习如何将一个现实世界的问题(例如月球着陆)形式化为一个强化学习问题。我们将介绍一个具体的模拟环境——月球着陆器,并详细说明其状态空间、动作空间以及需要你实现的奖励函数。
想象一下,你想要在月球上着陆。这似乎是一项艰巨的任务。我们需要了解大量的物理学和控制理论,并且必须预见到无数可能出错的情况。
但是,如果我们将其构建为一个强化学习问题呢?
我们的智能体不需要知道现实世界的动力学原理。它可以通过简单的交互来学习。你的智能体将做到这一点:月球着陆器将与世界交互,尽管不清楚其动力学原理。
但是,为了让着陆器按照你的意愿行动,你必须设计奖励函数。
当然,通过试错来学习如何在月球上着陆可能有点危险且成本高昂。因此,我们将在模拟器中训练我们的智能体,以找到一个稳健且高效的着陆策略。
然后,我们可以将智能体部署到月球上,并允许它继续学习,调整其价值函数和策略,以适应我们的模拟器与现实之间的差异。
这意味着在模拟器中训练时,我们不必担心安全或金钱问题。
但请记住,我们在这里使用的是非常简单的模拟,它并不能反映外层空间的所有复杂性。
我们无法使用高保真模拟器,因为我们需要你的实验能够合理地快速运行。
即使使用高保真模拟器,我们的智能体在部署时可能仍然会遇到问题。让在模拟器中训练的智能体迁移到现实世界需要许多技术细节,但这个主题远远超出了这个小项目的范围。
我们的目标是帮助你处理一个中等难度的问题,并帮助你获得将问题的文字描述转化为具体解决方案的经验。
在接下来的部分,我们将详细介绍你将使用的环境。
环境介绍 🌕
上一节我们介绍了将问题形式化的思路,本节中我们来看看具体的模拟环境。
这是月球着陆器环境的样子,以下是智能体成功着陆的几个示例。
我们的目标是让月球着陆器降落在位于两个黄色旗帜之间的着陆区。着陆区始终位于同一位置,但其周围的地形可能会发生变化。
我们可以点燃主推进器或任意一个侧推进器来调整着陆器的方向并减缓其下降速度。
状态空间 📊
状态由八个变量组成。它包括着陆器的XY位置和速度,以及其相对于地面的角度和角速度。
我们还有一个用于每条着陆腿的传感器,用于确定它是否接触地面。
环境流程 🔄
让我们更深入地看看你将实现的环境部分。
环境接收动作输入,该动作与当前状态一起传递给动力学函数,以产生下一个状态。
然后,下一个状态和动作将被传递给一个编码了期望行为的奖励函数。
最后,环境将输出下一个状态和奖励。
以下是智能体可以采取的四种动作:
- 点燃主推进器。
- 点燃左侧推进器。
- 点燃右侧推进器。
- 在当前时间步什么都不做。
奖励函数设计 🏆
你需要为此环境实现奖励函数。
燃料是昂贵的,主推进器会消耗大量燃料。我们希望阻止智能体不必要地使用主推进器。侧推进器消耗的燃料较少,因此智能体频繁使用它们的负面影响较小。
我们希望鼓励智能体向目标移动,因此它将根据自上一个时间步以来其偏离目标的距离而损失一些奖励。
我们将尝试阻止智能体学习以可能损坏设备的方式将着陆器撞向表面,同时也会阻止它飞向外层空间或遥远的陨石坑而消失不见。
智能体将因其成功使每条着陆腿接触地面而获得奖励。
并且,智能体将以适当的速度成功降落在着陆垫上时获得大量奖励。
更多细节,例如什么是适当的速度,将在配套的笔记本中提供。

总结 📝
本节课中,我们一起学习了如何将月球着陆问题形式化为强化学习任务。我们介绍了你将在此课程中使用的月球着陆器环境,详细说明了其状态、动作以及奖励函数的设计原则。你本周的目标就是为这个问题实现奖励函数。祝你在构建环境时顺利!
125:什么是资格迹及其命名由来 🧠


在本节中,我们将探讨强化学习中的一个核心概念——资格迹。我们将了解其思想起源、命名原因,以及它在算法和神经科学背景下的意义。通过本节学习,你将理解资格迹的基本原理,并认识到它其实一直隐含在你已学过的许多算法之中。
概述
资格迹的概念源于神经科学中的一个假说。理解其起源有助于我们把握其在强化学习算法设计中的核心作用。本节将首先介绍该假说,然后解释资格迹的两种类型,最后说明其在演员-评论家架构中的应用。
资格迹的思想起源
上一段我们提到了资格迹的概念,本节中我们来看看它的具体起源。资格迹的思想来源于哈里·克洛夫的假说,即“享乐主义神经元假说”。哈里曾是美国空军科学研究办公室航空电子学指挥部的高级科学家。
他在1972年发表的一篇专著以及1982年出版的《享乐主义神经元》一书中提出了这一观点。他的假说认为,神经元个体是享乐主义者,它们致力于最大化局部的“快乐”类似物,同时最小化局部的“痛苦”类似物。
换句话说,根据他的观点,每个神经元都是一个强化学习智能体,而大脑则是由众多相互作用的强化学习智能体组成的社会。
神经元与突触
为了理解克洛夫的假说,我们需要一些关于神经元的基础知识。
以下是关于神经元的关键点:
- 神经元的输出或动作称为“动作电位”。
- 动作电位通过神经元的轴突传递给其他神经元。当神经元产生动作电位时,我们称其为“放电”。
- 动作电位通过“突触”作用于其他神经元。
- 突触具有“效能”或“权重”、“强度”,这些会在学习过程中发生改变。
下图是一个突触的示意图。动作电位会通过顶部的“突触前末梢”到达,并影响底部的“突触后神经元”。我们通常认为突触权重或效能存在于这个连接中,而“资格”这个概念通常被认为是由轴突内部的生物化学过程实现的,可能就在这个突触前末梢。

克洛夫的具体假说
克洛夫的具体假说是:当神经元放电产生一个动作电位时,所有促成此次放电的突触都变得“有资格”改变其效能或权重。
如果在此动作电位之后的一个合适时间窗口内出现了奖励的增加,那么所有具备资格的突触的效能就会增加(如果是惩罚,则减少)。
这就引出了一个关键问题:资格迹的形状应该是怎样的?这里的资格迹指的是存储在突触处的、基于神经元先前活动的记忆记录。
克洛夫指出,神经元嵌入在许多持续时间各不相同的反馈回路中。有些反馈回路在神经系统内部,因此非常短;有些则通过环境延伸到生物体外部,再通过感觉器官返回,因此是更长的反馈回路。因此,神经元活动的后果会以不同的时间延迟返回给它。
资格迹的形状就是这些反馈回路持续时间的一种“直方图”。
下图展示了这种资格迹可能的样子。在神经元放电后,首先有一些非常短的反馈回路返回信息,可能在某个时间点(例如600毫秒,当然不同神经元会不同)达到最大数量,然后还有少数非常长的反馈回路。因此,克洛夫假设的资格迹形状大致如此。

两种类型的资格迹
现在,我们来看看资格迹的两种主要类型。
以下是两种资格迹的定义:
- 关联性资格迹:取决于突触前和突触后活动,正如克洛夫所假设的。突触前输入需要参与引发突触后活动。这导致了一个三因素学习规则:
学习信号 = f(突触前活动, 突触后活动, 后续的强化信号)。 - 非关联性资格迹:仅由突触前活动触发。这导致了一个两因素学习规则:
学习信号 = f(突触前活动, 强化信号),而不依赖于突触后神经元的活动。
下图展示了这些概念。顶部曲线是几个突触前动作电位,下一行是几个突触后动作电位。可以看到,在两个实例中,它们大致同时发生,表明突触前动作电位有助于引发突触后动作。对于关联性资格迹,只有这两种情况会触发资格迹。而对于非关联性资格迹,最后一个仅由突触前脉冲触发的情况也会被计入,即使当时没有突触后脉冲。
在演员-评论家架构中的应用
观察你已经学过的演员-评论家架构,特别是策略梯度方法,我们会发现一个主要区别。
演员和评论家之间的主要区别在于:演员使用关联性资格迹,而评论家使用非关联性资格迹。因此,在第一种情况下,演员试图最大化强化信号,而在评论家的情况下,它试图预测强化信号。这主要就是由于这两种资格迹类型的差异造成的。
强化学习中的简化
在强化学习中,我们使用了克洛夫所建议的那种迹的简化版本,它看起来像这样:一个指数衰减的迹 λ^t(其中λ是衰减率,t是时间步)。与我们之前展示的更复杂的迹相比,这种形式更容易实现和分析。但有时,更接近克洛夫原始设想的迹可能表现更好,不过目前还没有太多研究深入探讨这个问题。
你一直在使用资格迹
实际上,你一直在使用资格迹,尽管是最简单的一种。即使是仅考虑一个时间步延迟的情况,也可以被认为是用资格迹实现的。
例如,如果时间线上在时刻 t 发生了一个事件,那么在 t+1 时刻的迹就记录了它。这意味着反馈回路只花费一个时间步,并且这是唯一被考虑的情况。所以,这几乎是一种退化的情况。几乎所有你看过的强化学习算法,都将其作为其机制的一部分在使用。
总结
本节课中我们一起学习了资格迹的核心概念。以下是关键要点:
- 资格迹由哈里·克洛夫作为其“享乐主义神经元”假说的一部分提出。
- 资格迹记录了突触过去的活动,使得在该活动之后到达的反馈能够改变突触的强度。
- 在演员-评论家架构中,演员和评论家的主要区别在于:资格迹对演员是关联性的,对评论家是非关联性的。
- 资格迹对于在突触学习规则中考虑信号时序的作用至关重要。
- 最后,神经科学正在积累证据,表明神经系统确实存在非常类似资格迹的机制。
126:回顾马尔可夫决策过程




在本节课中,我们将要学习马尔可夫决策过程。我们将了解MDP如何作为序贯决策问题的通用框架,并详细描述其动态特性是如何定义的。
从老丨虎丨机问题到真实世界问题
上一节我们介绍了K臂老丨虎丨机问题,它引出了许多有趣的问题。然而,它并未包含现实世界问题的许多方面。
在老丨虎丨机问题中,智能体在每个时刻面临相同的情境,并且最优动作总是相同的。但在许多实际问题中,不同的情境需要不同的应对策略。此外,我们当前选择的动作会影响未来能获得的奖励量。
马尔可夫决策过程形式化地捕捉了现实世界问题的这两个关键方面。
一个简单的例子:兔子的困境
让我们从一个简单的例子开始,以突显老丨虎丨机问题与MDP之间的区别。
想象一只兔子在田野里游荡寻找食物。它发现自己处于一种情境:右边有一根胡萝卜,左边有一棵西兰花。兔子更喜欢胡萝卜,所以吃胡萝卜会产生+10的奖励。而吃西兰花只产生+3的奖励。
但是,如果后来兔子发现自己处于另一种情境:右边是西兰花,左边是胡萝卜。在这里,兔子显然会更倾向于向左走,而不是向右走。
K臂老丨虎丨机问题没有考虑到“不同情境需要不同动作”这一事实。它在另一个方面也存在局限。
考虑动作的长期影响
假设我们确实考虑了不同情境下的不同动作。在这里,兔子似乎想向右走以获得胡萝卜。然而,向右走也会影响兔子接下来看到的情境。
假设就在胡萝卜的右边,有一只老虎。如果兔子向右移动,它能吃到胡萝卜。但之后,它可能不够快以逃脱老虎。如果我们考虑到动作的长期影响,兔子应该向左走,选择西兰花,以给自己更好的逃脱机会。
一个只关心即时奖励的“老丨虎丨机兔子”会选择胡萝卜。但通过考虑我们决策的长期影响,可以做出更好的决定。
定义MDP的核心要素
现在让我们看看随着兔子采取行动,情境是如何变化的。我们将这些情境称为状态。
在每个状态,兔子选择一个动作。例如,兔子可以选择向右移动。基于这个动作,环境会转变到一个新的状态并产生一个奖励。在这个例子中,兔子吃了胡萝卜并获得+10的奖励。然而,兔子现在紧挨着老虎。
假设兔子选择了向左的动作。环境转变到一个新的状态,老虎吃掉了兔子,兔子获得-100的奖励。从原始状态,兔子也可以选择向左移动,那么环境会转变到一个新的状态,兔子获得+3的奖励。
图表现在显示了两条潜在的状态序列。实际发生的序列取决于兔子采取的动作。
形式化智能体与环境的交互
我们可以用一个通用框架来形式化这种交互。在这个框架中,智能体与环境在离散的时间步上进行交互。
在每个时间步 t,智能体从环境接收一个状态 S_t,该状态来自一组可能的状态集合 𝒮。幻灯片上显示的配置就是一个状态的例子。
基于这个状态,智能体从一组可能的动作集合中选择一个动作 A_t。𝒜(S_t) 是在状态 S_t 下的有效动作集合。向右移动就是一个动作的例子。
一个时间步之后,部分基于智能体的动作,智能体发现自己处于一个新的状态 S_{t+1}。例如,这个状态是兔子紧挨着老虎的状态。
环境还提供一个标量奖励 R_{t+1},它来自一组可能的奖励集合 ℛ。在这个例子中,吃胡萝卜的奖励是+10。
下图总结了MDP框架中的智能体-环境交互。这种交互产生了一条由状态、动作和奖励组成的经验轨迹。动作既影响即时奖励,也通过影响未来状态进而影响未来的奖励。

用概率描述动态特性
那么,我们如何表示这种交互的动态特性呢?与老丨虎丨机问题一样,结果是随机的,因此我们使用概率的语言。
当智能体在一个状态下采取一个动作时,存在许多可能的下一个状态和奖励。
转移动态函数 P 形式化了这个概念。给定一个状态 s 和一个动作 a,P 告诉我们下一个状态 s‘ 和奖励 r 的联合概率。
在本课程中,我们通常假设状态、动作和奖励的集合是有限的,但别担心,您也将学习能够处理无限集和不可数集的算法。
由于 P 是一个概率分布,它必须是非负的,并且对所有可能的下一个状态和奖励求和必须等于1。
P(s‘, r | s, a) = Pr{S_{t+1}=s‘, R_{t+1}=r | S_t=s, A_t=a}
注意,未来的状态和奖励仅取决于当前的状态和动作。这被称为马尔可夫性。这意味着当前状态是充分的,记住更早的状态不会改善对未来的预测。

总结与预告
本节课中我们一起学习了马尔可夫决策过程。MDP为序贯决策制定提供了一个通用框架,其动态特性由一个概率分布定义。
在下一个视频中,我们将讨论几种决策制定任务,并将每一种形式化为一个MDP。
127:回顾分幕式任务与持续性任务的示例 🎮

在本节中,我们将通过更多具体示例,深入理解分幕式任务与持续性任务的区别。学习结束后,你将能够判断何时应将一个问题建模为分幕式任务,何时应建模为持续性任务。
分幕式任务示例 🎯
上一节我们介绍了分幕式任务的基本概念,本节中我们来看看一个具体的分幕式任务例子。
考虑一个智能体学习玩一个简单的视频游戏。玩家(用蓝色方块表示)通过收集白色的宝藏方块来获得分数。当玩家触碰到绿色的敌人方块时,游戏结束。
这个游戏很自然地可以被建模为一个分幕式马尔可夫决策过程。智能体的目标是在游戏结束前,通过收集尽可能多的宝藏来获得高分。
以下是该任务的关键要素:
- 状态:一个与当前游戏屏幕像素值对应的数组。
- 动作:四个方向的动作:上、下、左、右。
- 奖励:每当智能体收集到一个宝藏方块时,获得+1的奖励。
- 幕的终止:当智能体触碰到任意一个绿色敌人时,当前幕结束。无论上一幕如何结束,下一幕都会从智能体位于屏幕中央且没有敌人出现的状态重新开始。
顺便一提,你现在看到的这个智能体是通过Q学习算法训练的,它在这个游戏中表现得相当不错。在课程的第二部分,你将学习这个算法并亲自实现它。

持续性任务示例 🔄
看完了分幕式任务的例子,接下来我们转向持续性任务。我们将探讨一个服务器作业调度的场景。
假设我们有三台服务器,供强化学习研究人员运行实验使用。研究人员将具有不同优先级的作业提交到一个单一的队列中。
以下是该任务的关键要素:
- 状态:空闲服务器的数量,以及队列顶部作业的优先级。
- 动作:拒绝或接受队列顶部的作业(如果有空闲服务器)。
- 奖励:
- 接受一个作业会运行它,并产生一个等于该作业优先级的正奖励。
- 拒绝一个作业会产生一个与优先级成比例的负奖励,并将该作业送回队列末尾。
- 任务特性:智能体需要谨慎调度低优先级作业,因为这可能会妨碍后续高优先级作业的调度。服务器在完成当前作业后会变得可用。研究人员会持续地向队列中添加新作业,而智能体则不断地决定接受或拒绝它们。
由于这个过程永远不会停止,因此它非常适合被描述为一个持续性任务。
总结 📝

本节课中,我们一起学习了分幕式任务与持续性任务的具体示例。
- 分幕式任务:能够自然地分解为独立的、可重复的片段(幕),例如一局游戏。
- 持续性任务:假设会无限期地持续下去,没有自然的终止点,例如一个持续运行的调度系统。
现在,你应该能够根据问题的特性,判断哪种任务形式化方法更为合适。
强化学习专项课程:P128:选择学习算法 🚀
在本节课中,我们将为“月球着陆器”项目选择合适的学习算法。我们将回顾问题的形式化定义,并利用课程三中的算法地图,系统地筛选出最适合本项目的算法。
到目前为止,我们已经讨论了一个有趣的问题——让航天器在月球上着陆。我们将此问题形式化为一个马尔可夫决策过程。本周,我们将开始讨论如何解决这个MDP,即从你学过的众多算法中,决定哪些算法适合这个问题。
你可能还记得课程三中帮助我们梳理所有算法的课程地图。让我们用它来决定在这个毕业设计项目中使用什么算法。

第一步:我们能否仅用表格来表示价值函数?
让我们回顾一下月球着陆器问题的状态空间。智能体观测到登月舱的位置、方向、速度和接触传感器信息。八个状态变量中有六个是连续的,这意味着我们无法用表格来表示它们。无论如何,我们都希望利用泛化能力来加速学习。

因此,我们排除了仅使用表格表示法的分支,需要使用函数近似方法。
第二步:这能否很好地表述为一个平均奖励问题?
思考一下这个问题的动态特性。登月舱从低轨道开始下降,直到在月球表面静止。然后这个过程重复进行,每次新的着陆尝试都独立于前一次的结果而开始。这正是我们对分幕式任务的定义。
平均奖励公式适用于持续性任务,因此在这里不是最佳选择。所以,我们排除了算法地图中的那个分支。
第三步:思考是否可能且有益于在每个时间步更新策略和价值函数。
我们可以使用蒙特卡洛法或时序差分法。但请思考在月球上着陆模块的情景。如果在幕中我们的任何传感器受损,我们希望能在幕结束前更新策略。这类似于我们在“开车回家”例子中讨论的情况。我们预计时序差分方法在这类问题中表现更好。
因此,我们选择时序差分方法。
最后,不要忘记我们的目标。 我们希望在模拟器中学习一个安全且稳健的策略,以便能在月球上使用。我们希望学习一个能最大化奖励的策略,因此这是一个控制任务。
这为我们留下了三种算法:SARSA、期望SARSA和Q学习。
由于我们使用函数近似,学习一个ε-软策略将比学习一个确定性策略更稳健。请记住那个由于状态混叠导致确定性策略次优的例子。期望SARSA和SARSA都允许我们学习最优的ε-软策略,但Q学习不行。
现在,我们需要在期望SARSA和SARSA之间做出选择。我们在之前的视频中提到,期望SARSA通常比SARSA表现更好,因此我们排除SARSA。

本周内容到此结束。我们现在已经选择了一个算法,它将为我们智能体的构建奠定基础。下周见。
129:回顾期望SARSA算法 📚


在本节课中,我们将学习另一种时序差分控制方法——期望SARSA算法。我们将了解其核心思想、更新规则,并分析它与SARSA和Q学习算法的区别与联系。
概述
上一节我们讨论了SARSA和Q学习这两种时序差分控制方法。本节中,我们将介绍第三种方法:期望SARSA。通过本视频的学习,你将能够解释期望SARSA算法的工作原理。
期望SARSA的核心思想
我们首先回顾动作值函数的贝尔曼方程。方程中包含了对下一个“状态-动作”对值的期望。
将这个期望分解,我们可以看到它包含了对可能的下一个状态以及可能的下一个动作的求和。
SARSA算法通过从环境中采样下一个状态,并从其策略中采样下一个动作来估计这个期望。
但智能体已经知道自己的策略,为什么还需要对下一个动作进行采样呢?相反,它应该直接计算这个期望。在这种情况下,我们可以对所有可能的下一个动作值进行加权求和。
权重是智能体策略下采取每个动作的概率。
显式地计算下一个动作的期望,是期望SARSA算法背后的主要思想。
期望SARSA的学习更新
由于期望SARSA仍然基于动作值函数的贝尔曼方程,它使用了我们熟悉的学习更新形式。
该算法与SARSA几乎完全相同,除了时序差分误差使用的是下一个动作值的期望估计,而不是下一个动作值的样本。
这意味着在每一个时间步,智能体都必须根据策略下每个动作的可能性,对下一个状态的动作值进行平均。
例如,给定以下动作值和策略,期望SARSA会使用值1.4作为其对期望下一个动作值的估计。
然而,显式计算期望有一个巨大的优势:期望SARSA比SARSA拥有更稳定的更新目标。
让我们看一个例子来更清楚地说明这一点。在这个例子中,中间奖励是确定性的。SARSA和期望SARSA都从下一个状态的真实动作值开始。
即使在这种理想情况下,SARSA所做的下一个动作采样也可能导致其向错误的方向更新值。它依赖于这样一个事实:在多次更新的期望中,方向是正确的。
相比之下,期望SARSA的更新目标是完全正确的,并且不会将估计值从真实值改变。
总的来说,期望SARSA的更新目标方差比SARSA低得多。
不过,较低的方差也带来了一个缺点。随着动作数量的增加,计算下一个动作的平均值会变得更加昂贵。当存在许多动作时,计算平均值可能需要很长时间,尤其是因为每个时间步都必须计算这个平均值。

总结
本节课中,我们一起学习了期望SARSA算法。我们了解到,该算法显式计算了其策略下的期望值,这虽然比采样更昂贵,但具有更低的方差。
130:回顾Q学习算法


在本节课中,我们将学习Q学习算法。这是一种在强化学习领域具有里程碑意义的算法,已被成功应用于玩雅达利游戏、控制交通信号灯乃至自动配置网络系统等多个领域。课程结束时,你将能够描述Q学习算法,并解释它与贝尔曼最优方程之间的关系。
Q学习算法简介
Q学习算法于1989年被提出,是最早的重要在线强化学习算法之一。让我们先来看一下它的伪代码。
以下是Q学习算法的核心步骤:
- 初始化Q(s, a)表。
- 对每个回合(episode):
a. 初始化状态S。
b. 当状态S不是终止状态时,循环:
i. 根据当前Q值和探索策略(如ε-greedy)选择动作A。
ii. 执行动作A,观察奖励R和下一个状态S‘。
iii. 使用以下公式更新Q值:
Q(S, A) ← Q(S, A) + α [ R + γ * max_a Q(S‘, a) - Q(S, A) ]
iv. 将状态更新为S‘。
这个流程包含智能体在状态中选择动作、执行动作并观察结果、然后进行更新的循环。这与我们之前见过的算法框架相似。
Q学习的核心更新机制
那么,Q学习的新颖之处在哪里?关键在于其动作价值函数的更新方式。
在更新公式 Q(S, A) ← Q(S, A) + α [ R + γ * max_a Q(S‘, a) - Q(S, A) ] 中,目标值 是 R + γ * max_a Q(S‘, a)。这与SARSA算法不同,SARSA使用的是下一个“状态-动作对”的价值,即 R + γ * Q(S‘, A‘)。
Q学习为何使用最大值 max,而不是下一个具体的动作价值呢?这需要追溯到动态规划的内容。
与贝尔曼方程的关联
如果你观察SARSA的更新方程,会发现它与动作价值的贝尔曼方程惊人地相似。实际上,SARSA是一种基于样本的算法,用于求解给定策略下的动作价值贝尔曼方程。
Q学习同样使用环境样本来求解一个贝尔曼方程。但它求解的不是标准的贝尔曼方程,而是动作价值的贝尔曼最优方程。

这个最优方程使得Q学习能够直接学习最优动作价值函数 Q*,而无需在策略改进和策略评估步骤之间来回切换。

Q学习与SARSA的本质区别
尽管SARSA和Q学习都基于贝尔曼方程,但它们基于的是完全不同的方程。
- SARSA 是策略迭代的样本化版本。它依赖于一个特定策略下的贝尔曼方程。
- Q学习 是价值迭代的样本化版本。它迭代地应用贝尔曼最优方程。
应用贝尔曼最优方程会严格改进价值函数(除非它已经是最优的)。因此,价值迭代持续改进其对价值函数的估计,并最终收敛到最优解。同理,只要智能体持续探索并采样所有“状态-动作”空间,Q学习也能收敛到最优价值函数。
课程总结
本节课中,我们一起学习了Q学习算法,并描述了它与贝尔曼最优方程之间的紧密联系。我们了解到,Q学习通过使用下一个状态的最大Q值作为更新目标,直接近似最优动作价值函数,这是它与同策略算法SARSA的关键区别。
131:平均奖励与差分值函数

在本节课中,我们将学习一种处理持续性任务的新方法:平均奖励设定。我们将了解如何定义平均奖励,以及如何通过差分回报和差分值函数来评估策略和动作。最后,我们将看到如何将熟悉的算法(如SARSA)调整到这种新设定中。
概述:持续性任务的新视角
在持续性任务中,我们关注的是极长视野下的性能表现。到目前为止,我们使用折扣因子来平衡短期表现和长期收益。然而,这不是表述问题的唯一方式。本节将学习一种称为“平均奖励设定”的新方法来表述持续性任务。
近视MDP示例
为了理解平均奖励的必要性,让我们想象一个简单的任务,其状态排列在两个相交的环中,我们称之为“近视MDP”。在大多数状态下,只有一个可用动作,因此无需做出决策。只有一个状态可以做出决策:智能体可以决定遍历哪个环。这意味着存在两种确定性策略:遍历左环或遍历右环。
奖励在所有地方都为零,除了每个环中的一个转移。在左环中,奖励+1在状态S之后立即获得。在右环中,奖励+2在状态S之前立即获得。直观上,你会选择右边的动作,因为你知道会得到+2奖励。但值函数会告诉我们做什么呢?
如果我们使用折扣,在这两种不同策略下,状态S的值是多少?
- 选择左动作的策略的值为:
1 / (1 - γ^5)。 - 选择右动作的策略的值为:
2 * γ^4 / (1 - γ^5)。
让我们思考特定γ值下,状态S在这两种策略下的值:
- 如果γ=0.5,VL ≈ 1,VR ≈ 0.1。这意味着在这种更短视的折扣下,采取左动作的策略更优。
- 如果γ=0.9,VL ≈ 2.4,VR ≈ 3.2。所以现在我们更倾向于另一个策略。
事实上,我们可以计算出使智能体偏好向右策略所需的最小γ值。γ需要至少为0.841。这里的问题是,折扣的大小取决于具体问题。对于这个例子,0.85足够大,但如果每个环有1000个状态,这个折扣因子需要超过0.99。
一般来说,确保智能体行为能最大化长期奖励的唯一方法是不断将折扣因子向1增加。根据问题不同,我们可能需要γ非常大。记住,在持续性设定中我们不能将其设为1,因为那样回报可能是无限的。
那么,使用较大的γ有什么问题呢?大的γ值也会导致更大、更不稳定的求和,这可能难以学习。那么,有替代方案吗?
平均奖励目标
让我们讨论一个称为“平均奖励”的新目标。想象智能体与世界交互了H步。这是它在这些步骤中平均获得的奖励,换句话说,是它的奖励率。如果智能体的目标是最大化这个平均奖励,那么它对近期和远期奖励的关心程度是相等的。
我们用r(π)表示策略π的平均奖励。更一般地,我们可以使用状态访问分布μ来写平均奖励:
r(π) = Σ_s μ_π(s) Σ_a π(a|s) Σ_s‘ p(s’|s,a) r(s,a,s‘)
内层项是策略π下状态的期望奖励。外层求和取该状态被访问频率的期望。合起来,我们得到跨状态的期望奖励,即策略的平均奖励。
在近视示例中,两种可能的确定性策略会无限期地访问左环或右环。在这两种情况下,每个环中的五个状态被访问的次数相等。
- 在左环中,除了一个获得+1的状态外,所有状态的即时期望奖励为+0。这导致每五步平均奖励为1,即0.2。
- 在右环中,大多数状态的即时期望奖励也是+0,但这次最后一个状态获得+2。这给出每五步平均奖励为2,即0.4。
我们可以看到,平均奖励更倾向于获得总奖励更多的策略,而无需考虑越来越大的折扣因子。
差分回报
平均奖励的定义对于判断一个策略是否优于另一个很直观,但我们如何判断从一个状态出发的哪个动作更好呢?我们需要的是这个新设定下的动作值函数。
第一步是弄清楚回报是什么。在平均奖励设定中,回报是根据奖励与平均奖励r(π)之间的差值来定义的,这称为差分回报。
让我们看看近视MDP中的差分回报是什么。差分回报表示智能体从当前状态和动作开始,相比遵循该策略的平均奖励,将多获得多少奖励。
让我们看看从状态S开始,首先选择动作L,然后遵循策略π_L的差分回报。该策略的平均奖励是0.2。差分回报是未来奖励的总和,其中每个奖励都减去了平均奖励。这个求和从状态S和动作L开始。
我们可以通过求和到某个有限视野H,然后取H趋于无穷的极限来计算它。我们通过这个极限符号稍微简化了事情。虽然这个符号在许多情况下有效,但当环境是周期性时,我们需要使用不同的技术。在这种情况下,我们使用一种更一般的极限(称为Cesàro和)来计算回报,但这个技术细节并不关键,这里的主要点是其直观含义。
我们发现差分回报是0.4。现在让我们看看另一个动作。这次,我们可以将差分回报分成两部分。首先,通过右环的单次轨迹的求和,我们可以明确地写出这个和,它等于1。然后是无限期采取左动作的求和部分。这个和与我们刚刚计算的差分回报相同,即0.4。将两部分相加,我们发现差分回报是1.4。因此,如果智能体的策略总是采取左动作,它可以观察其差分回报并意识到应该切换到采取右动作。
现在让我们看看如果智能体的策略总是采取右动作,其差分回报是多少。该策略产生的平均奖励为0.4,在状态S下采取右动作的策略的差分项是-0.8。现在,在状态S下一次采取左动作,然后无限期采取右动作的差分回报是多少?和之前一样,我们将和分成两部分,遍历左环一次导致前五个时间步的和为-1。加上从状态S开始遵循π_R的差分项(我们之前发现是-0.8),得到答案-1.8。我们再次看到,右动作更受青睐。
你可能已经注意到,π_R的差分回报低于π_L的差分回报,尽管π_R的平均奖励更高。这是因为差分回报表示在特定策略下,在某个状态采取一个动作比该策略的平均情况好多少。只有在后续时间步遵循相同策略时,差分回报才能用于比较动作。要比较策略,应改用它们的平均奖励。
有趣的是,只有当减去的常数等于真实平均奖励时,差分回报才是一个收敛的和。如果减去一个更低或更高的数字,和将发散到正无穷或负无穷。
差分值函数与贝尔曼方程
现在我们有了平均奖励回报的有效定义,我们可以像往常一样将值函数定义为期望回报。类似地,我们也可以将差分值函数定义为在给定策略下,从给定状态或状态-动作对开始的期望差分回报。

这个量捕捉了智能体从特定状态开始,相比遵循固定策略在所有状态上的平均情况,将多获得多少奖励。
与折扣设定类似,差分值函数可以写成贝尔曼方程。方便的是,它们看起来像我们之前见过的方程,它们的不同之处仅在于从即时奖励中减去了r(π),并且没有折扣。
折扣情况下的许多算法可以重写以适用于平均奖励情况。例如,差分SARSA与你之前见过的SARSA算法非常相似。
让我们逐步了解其差异。一个关键区别是,差分SARSA必须跟踪其策略下平均奖励的估计值,并在其更新中从样本奖励中减去它。这个实现使用了我们在整个课程中见过的增量平均技术。给定这个估计,它然后在更新中从采样的奖励中减去r_bar。
在实践中,我们可以通过对该算法稍作修改来获得更好的性能:我们使用方差更低的更新来计算r_bar,而不是奖励的指数平均。

总结
在本节课中,我们介绍了平均奖励目标,并为此设定定义了差分回报和差分值函数。我们了解到,当折扣因子需要设置得非常大以确保长期最优性时,平均奖励提供了一种替代方案,它平等地对待所有时间步的奖励。我们还看到了如何将值函数和算法(如SARSA)调整到这种无折扣的设定中。下周,我们将讨论优化这个平均奖励目标的另一种方法。
强化学习专项课程:04:回顾演员-评论家算法 🎭🤖
在本节课中,我们将学习演员-评论家算法。这是一种结合了策略梯度方法与价值函数学习的强化学习方法。我们将了解其核心思想、算法流程以及为何它能有效工作。
我们必须在直接学习策略参数和学习价值函数之间做出选择吗?答案是否定的。
即使在策略梯度方法内部,像时序差分这样的价值学习方法仍然扮演着重要角色。
在这种架构中,参数化的策略扮演着“演员”的角色,而价值函数则扮演着“评论家”的角色,负责评估演员选择的动作。这些所谓的演员-评论家方法,是强化学习中最早引入的基于时序差分的方法之一。
上一节我们介绍了策略梯度方法的基本框架,本节中我们来看看如何将价值函数学习融入其中,形成演员-评论家算法。
我们以上一个视频中的策略梯度学习规则表达式作为起点:
Δθ ∝ ∇ log π(A|S, θ) * Q(S, A)
但我们无法直接获得真实的动作价值函数 Q,因此需要对其进行近似。我们可以采用常用的时序差分方法,使用一步自助回报作为目标:
R - R̄ + V̂(S')
其中,V̂ 是参数化的价值函数估计值,在这里特指差分价值函数。这就是演员-评论家算法中的“评论家”部分,它为演员提供即时反馈。
为了训练评论家,我们可以使用任何状态价值学习算法。这里我们将使用平均奖励版本的半梯度时序差分法。
参数化的策略是“演员”,它使用如下所示的策略梯度进行更新:
Δθ = α * ∇ log π(A|S, θ) * (R - R̄ + V̂(S'))
我们可以直接使用这种更新形式,但还可以做一项改进来优化算法:减去一个称为“基线”的值。我们不单独使用一步价值估计,而是减去状态 S_t 的价值估计,得到如下更新:
Δθ = α * ∇ log π(A|S, θ) * [ (R - R̄ + V̂(S')) - V̂(S) ]
这里的 V̂(S_t) 就是基线。注意,这个表达式等于时序差分误差 δ。
这个更新的期望值与之前的更新是相同的。原因如下:
让我们计算在给定特定状态 S_t 的条件下,这个更新的期望值。期望的和等于和的期望。我们可以利用这一点,将原始项的期望与涉及被减价值函数的期望分离开。结果证明,第二项的期望值为0。因此,我们可以在不改变更新期望值的情况下添加这个基线。你可以自行验证这一点:将期望写为动作概率的求和,并将 V̂ 项从求和中提出。

那么,如果更新的期望值相同,我们为什么还要添加这个基线呢?减去基线有助于降低更新的方差,从而带来更快的学习速度。
从直观上理解,这个更新也很有道理:在我们执行一个动作后,我们使用时序差分误差来判断该动作相对于该状态的平均水平有多好。如果时序差分误差为正,意味着所选动作带来的价值高于预期,那么更频繁地采取该动作应该能改进我们的策略。这正是此更新所做的:它根据评论家的判断,改变策略参数以增加那些优于预期的动作的概率。相应地,如果评论家“失望”,时序差分误差为负,则该动作的概率会降低。
演员和评论家同时学习,不断交互。演员持续改变策略以超越评论家的期望,而评论家则不断更新其价值函数以评估演员变化中的策略。
在明确了策略更新规则后,我们现在可以梳理完整的平均奖励演员-评论家算法流程。
以下是算法的主要步骤:
- 初始化:首先,我们需要指定策略的参数化和价值函数的参数化方式。例如,可以使用瓦片编码来构建近似价值函数,并使用柔性最大化策略参数化。我们还需要维护一个平均奖励的估计值,就像在差分SARSA算法中一样,初始化为零。权重和策略参数可以按喜好初始化。同时,初始化价值估计、策略和平均奖励的步长参数,它们可以各不相同。
- 与环境交互:从环境中获取初始状态,然后开始行动和学习。
- 循环执行以下步骤:
- 根据当前策略选择动作。
- 从环境中接收下一个状态和奖励。
- 利用这些信息,计算差分时序差分误差
δ = R - R̄ + V̂(S') - V̂(S)。 - 更新平均奖励的运行估计值
R̄。 - 使用时序差分更新规则更新价值函数的权重
w。 - 使用策略梯度更新规则更新策略参数
θ。
这个算法是为持续性任务设计的,因此我们可以无限期地运行它,并持续改进策略。

本节课中我们一起学习了演员-评论家算法。你现在应该理解,学习一个价值函数来估计策略参数的梯度是有用的,而演员-评论家算法通过一个为演员学习价值函数的评论家来实现这一思想。这种方法结合了策略学习和价值学习的优势,是强化学习中的一个重要框架。
133:Csaba Szepesvári谈问题格局 🧭

在本节课中,我们将学习如何清晰地定义强化学习问题。明确问题格局是选择正确算法和工具的第一步,它决定了解决方案的范围和适用性。

我的名字是Csaba Szepesvári,是阿尔伯塔大学计算机科学系的教授。
首先,如果你想找到一个解决方案,就必须清楚你的问题是什么,因为你的解决方案将完全取决于你所处理的问题。
有时,你的目标并非解决特定问题,而是开发工具。当你开发工具时,你需要知道这些工具适合解决哪些问题,在哪些问题上表现良好,在哪些问题上可能不太适用。
因此,在思考如何用强化学习解决问题时,有两件重要的事情需要从开始就明确。
第一,你必须非常清楚你的目标是什么。目标可以是多种类型的,比如解决某一类特定问题,或者仅仅是某个具体问题。或者,你可能对开发某种工具感兴趣。在这种情况下,你需要明确开发这些工具的目标是什么,以及你希望将这些工具应用在何处。
当具体定义一个问题时,你应该考虑以下几个方面:数据将如何收集、如何评估你将要开发的算法,以及环境可能具有的任何特定属性。
接下来,我将详细展开说明。
关于数据收集
根据你获取数据的方式,问题可以分为不同类型。
- 与现实世界交互:如果你的系统将与现实世界交互,那么现实世界以其自身的速度运行,数据效率将成为一个主要关注点。
- 与模拟器交互:如果你的系统与模拟器交互,那么你可能只关心计算资源的使用量。
- 无交互,使用静态数据:如果完全没有交互,所有数据都已存储在磁盘上,那么你关心的是能从这些数据中提取多少信息。
根据数据来源的不同,你的目标会发生变化,需要应用的算法也会相应地改变。
关于算法评估
定义强化学习问题的另一个方面是,你打算如何评估你的算法。
你是否关心高效学习?如果你关心(很可能你应该关心),那么你是关心学习结束后系统的表现,还是关心在学习过程中系统也表现良好?
根据你所在的情况,你可能会选择不同的算法。例如,如果你只关心学习结束时的表现,你的算法可能会进行激进的探索,这在学习过程中可能会以牺牲大量奖励为代价。但如果你处于第二种情况,即关心学习过程中收集的奖励,那么你可能就不想进行那么多激进的探索。因此,你需要再次选择不同的解决方案。
关于性能指标
最后,你需要选择性能指标,这里也有多种可能性。
- 你可能关心总奖励。
- 你可能想使用折扣因子。
- 你可能关心解决方案的敏感性。
- 你可能关心算法在不同环境中的表现,无论是最坏情况还是平均情况。
- 你可能不关心奖励,而是关心在学习期结束时获得了多少知识或掌握了什么技能。
在所有这些不同的设定下,你评估算法的方式会不同,并且可能为不同的设定选择截然不同的算法。
关于环境特性
最后,思考你所关注环境的特定方面也非常重要。
最简单的方面是环境中有多少个状态和动作。
- 如果你有大量状态,状态之间是否存在可以加以利用的规律性?
- 如果你有大量动作,特别是连续动作,那么一些算法将变得不可用,因为它们无法处理这些设定。但如果你有有限数量的动作,那么这些算法可能突然又变得可用,你可能就会想选择它们。
其他方面可能包括:
- 环境中的奖励或成本可能会爆炸式增长(无界)。你可能不希望冒面对无界成本的风险。
- 奖励或环境本身可能是随机的,也可能不是随机的。如果环境不是随机的,你可以使用利用这一点的专用算法,问题会简单得多。
所有这些环境方面都非常重要,你将根据所处的具体情况来选择算法。
你可能会问,为什么这很重要?作为一个简单的说明,考虑一个简单的赌博机问题:你有两个臂,臂背后的奖励分布是未知的随机分布。
但是,如果你恰好知道这些分布属于某个特定家族(例如,它们是正态分布或伯努利分布),那么你就可以选择依赖于这些分布知识的算法。利用这些属性,你的算法会表现得更好。
总而言之,为了选择正确的算法,也为了明确你的解决方案的适用范围,清晰地定义你正在解决的问题至关重要。你需要对此有清晰的认识。
本节课中,我们一起学习了如何定义强化学习的问题格局。我们明确了思考目标的必要性,并详细探讨了在定义问题时应考虑的三大方面:数据收集方式、算法评估方法以及环境的具体属性。理解这些要素是设计有效强化学习解决方案的基础。
134:安迪和里奇给学生的建议 🎓

在本节课中,我们将学习阿尔伯塔大学强化学习课程中,安迪·巴托和里奇·萨顿两位教授分享的关于学术研究、风险态度以及学者品质的深刻见解。这些建议对于任何领域的研究者,尤其是初学者,都具有宝贵的指导意义。
上一节我们探讨了强化学习中的一些技术概念,本节中我们来看看两位先驱学者对研究态度和方法的思考。
回到风险偏好与风险规避的话题。我的风险规避倾向促使我去关注前人的工作。因为我不愿冒这样的风险:有人指出“哦,这不过是三十年前我们做过的东西”。我总是被一种动力驱使着去避免这种情况。
因此,我回顾历史,在某种程度上成为了一名本领域的“历史学家”。当然,这个领域本身也在不断发展。但正是这些联系让我着迷,我热爱事物之间的关联性。这个知识网络,你知道的,动态规划、控制理论、预测问题,更不用说心理学和神经科学了,这类跨领域的联系让我着迷。
在那篇发表在AI杂志的文章里,我重申了在首届RLDM会议上开幕致辞时说过的话。我说:如果你重新发明了一个轮子(强化学习里有很多类似轮子的基础概念),你应该就叫它“轮子”,或者叫“改进型轮子”,而不是起一个完全不同的名字。因为只有这样,才能将这个领域与整个知识体系连接起来,推动领域在算法和技术库方面不断前进。所以,不要给它起一个无法建立连接的名字。
我想问你关于这方面的问题。我提到过,在我研究生成长阶段,你对我产生了重要影响,我从你那里学到,并且至今仍在学习很多东西。其中很重要的一点就是学术素养。你知道,在我和你共事、撰写文章时,你会告诉我,比如,你曾说我写的是“华丽辞藻”,过于感情用事。你希望我更严谨、更尊重前辈的工作。我认为这是我从你身上学到的东西,并且现在我正试图将其传递给他人——学术素养与工匠精神。
我知道你也是一位木匠。我只是好奇你是如何形成这种态度的,以及你如何看待作为科学家的工匠精神与学术素养?
以下是安迪对此的回应:
你母亲教写作,而我在你论文草稿上给了你很多“刁难”,结果你抱回来这么高一摞关于写作的书。现在,他成了一位非常优秀的写作者。我的学生们仍然会抱怨……我是说,如果文字不够好,我就无法专注于技术内容本身。除非写作过得去,否则我读不下去。学生们起初并不擅长,但他们后来都进步了。
关于工匠精神,我想在某种意义上我是个完美主义者。这也是为什么书中的错误让我非常困扰。但我喜欢做出能持久的东西,一个成品,我不需要反复修补。里奇曾把我们的草稿发到网上,我其实不太喜欢。虽然这带来了很多精彩的修改意见……哦,那个还不完美。你知道,我不希望别人读到不完美的版本。所以里奇,你知道的,把一切都公开了。这没问题,但我个人更倾向于在最终呈现给人们一个完美的版本。
那么,这是否也是风险规避导致的呢?我的意思是,当我动手制作东西时,如果有一个小错误我不去修正,那么日后每当我看到这个成品时,它都会困扰我。
我认为这对我们领域来说是一个非常及时的话题。因为有一种感觉是,我们希望发展得更快,因为一切都在加速升温。所以这里存在一种张力:一方面是渴望更快完成、更快到达某个地方、做出好东西;另一方面,我们又希望成果能持久。
本节课中我们一起学习了安迪和里奇教授分享的宝贵建议。核心在于:重视学术传承,尊重前人工作(避免重复发明并错误命名基础概念);培养严谨的学术素养与工匠精神,追求作品的持久价值;同时认识到在快速发展与追求完美、持久之间存在张力。这些思考对于培养扎实的研究态度至关重要。
135:与Martha探讨设计选择概述 🧠

在本节课中,我们将一起探讨毕业项目第三周的核心任务:为智能体实现做出具体的元参数选择。我们将讨论函数近似器、优化器以及探索策略的设计决策。
概述
现在,你正处于毕业项目的第三周。这意味着我们已经完成了构建完整强化学习系统的一半工作。到目前为止,我们已经使用马尔可夫决策过程的形式化语言定义了“月球着陆器”问题。上周,我们讨论了使用哪种算法来解决该MDP。现在,让我们讨论为了完全实现智能体而必须做出的元参数选择。这意味着我们需要决定函数近似器的选择、用于更新动作值的优化器选择,以及如何进行探索。
函数近似器的选择
上一节我们讨论了算法选择,本节中我们来看看如何表示价值函数。我们需要决定使用哪种函数近似器。我的通用建议是,对于函数近似,始终从简单的开始。这意味着使用像瓦片编码这样的固定基函数。
然而,对于这个问题,如果不仔细设计瓦片编码器,这可能不是最佳选择。如果你将所有输入一起进行瓦片编码,特征数量会随着输入维度呈指数级增长。例如,对于这个八维问题,如果你想在每个维度上使用10个瓦片,你最终可能会得到1亿个特征。
因此,也许我们应该考虑使用神经网络。一个隐藏层应该足够强大来表示月球着陆器的价值函数,并且对你来说实现起来也更容易一些。
以下是关于神经网络设计的关键决策点:
- 隐藏层大小:你需要决定该层中隐藏单元的数量。请记住,你可以选择神经网络隐藏层的大小。随着向层中添加更多节点,你会增加更多的表示能力。然而,添加的节点越多,需要学习的参数也就越多。
- 激活函数:我们需要选择激活函数。我们可以使用像
tanh这样的S型函数,但这些函数存在饱和问题。考虑当激活函数的输入幅度很大时(无论是正还是负),梯度是在激活函数的这些平坦区域计算的。这种接近零的梯度无法为改变我们的权重提供太多信号,并且会减慢学习速度。我们也可以使用线性阈值单元,但同样,这些平坦区域使得训练神经网络变得困难。一个非常有效且常见的选择是使用修正线性单元。因此,让我们继续使用ReLU。
优化器的选择
我们已经确定了函数近似器的结构,接下来需要决定如何训练它。使用普通的随机梯度下降对于这个项目来说可能太慢了,那么我们还有其他选择吗?
以下是几种优化器的考量:
- AdaGrad:我们可以尝试名为AdaGrad的算法。这种方法的缺点是AdaGrad会将步长衰减到零,这对于非平稳学习来说可能是有问题的。
- RMSProp:我们可以尝试RMSProp,它利用损失函数的曲率信息来改进下降步长。
- Adam:然而,我们还希望结合动量来加速学习。一个不错的选择可能是Adam优化器,它结合了RMSProp的曲率信息和动量。
探索策略的选择
最后,我们需要讨论将使用哪种探索方法。乐观初始值怎么样?如果我们使用的是具有非负特征的线性函数近似器,这将是一个合理的选择。但由于我们使用的是神经网络,很难保持乐观值,因此不太可能有效。
我们也可以考虑ε-贪婪策略,这非常容易实现。但缺点是,它的探索完全忽略了动作值可能包含的任何信息。它探索一个具有非常负价值的动作的概率与探索一个具有中等价值的动作的概率是相等的。
那么,使用Softmax策略如何?这个选择可能更好,因为选择一个动作的概率与该动作的价值成正比。这样,我们就不太可能去探索我们认为非常糟糕的动作。顺便说一下,在课程3中,我们只讨论了基于动作偏好的Softmax策略,我们使用策略梯度方法来调整动作偏好。但是,考虑使用像期望SARSA这样的动作价值方法,并直接对学习到的动作值使用Softmax,这并不是一个很大的跨越。
以下是使用Softmax策略时需要考虑的几个要点:
- 对更新的影响:首先,考虑它如何影响期望SARSA更新。请记住,我们需要计算下一个状态下动作值的期望。这意味着我们首先需要计算在Softmax函数下所有动作的概率。
- 温度参数:其次,我们还需要考虑智能体对最高价值动作的关注程度。我们可以用一个名为
τ的温度参数来控制这一点。如果τ很大,那么智能体更具随机性,会选择更多的动作。对于非常大的τ,智能体的行为几乎像均匀随机策略。对于非常小的τ,智能体主要选择贪婪动作。 - 数值稳定性技巧:最后,我们需要考虑一个额外的技巧,以避免在计算Softmax时出现溢出问题。想象一下,如果动作值很大。对这些值进行指数运算可能会变得非常大。相反,我们可以利用一个事实:在计算概率时从动作值中减去一个常数没有影响。例如,我们可以减去最大动作值除以温度,这样所有的指数都是负的,从而避免了计算大正数的指数。

总结
本节课中,我们一起学习了为智能体实现进行设计选择的过程。总的来说,现在我们有了一套合理的策略来学习一个最优的软策略,并且比ε-贪婪策略更智能地进行探索。智能体根据其当前的Softmax策略采取行动,并使用期望SARSA进行更新。
今天,我们集思广益,讨论了智能体中的一些关键选择。总的来说,需要做出很多选择。我们通过推理什么可能是最合适的来设定了大多数选择,就像我们对函数近似器中的选择所做的那样。其他选择,如优化器中的特定步长或温度等探索参数,则不那么容易直接选定。我们将在模块5中讨论更多确定这些参数的方法。到时见。
136:回顾神经网络中的非线性逼近


在本节课中,我们将学习神经网络如何作为一种非线性函数逼近器,用于强化学习中的特征构造。我们将回顾前馈神经网络的基本工作原理,并将其与之前学习的瓦片编码方法进行对比,以理解神经网络如何从数据中学习有用的特征表示。
特征构造的两种策略 🧩
瓦片编码是一种为预测创建固定特征集的方法。神经网络则提供了一种学习有用特征集的策略。本节将讨论神经网络如何创建这些特征。
通过本视频的学习,你将理解神经网络如何进行特征构造。同时,你将理解神经网络如何成为状态的非线性函数。
重温前馈神经网络 ⚙️
上一节我们介绍了特征构造的概念,本节中我们来看看神经网络的具体实现。当我们首次构建神经网络时,需要指定初始权重。初始化权重的方式很重要,但关于这一点我们稍后再详细讨论。现在,我们假设权重是从某个随机分布中抽取的。
让我们看看当一个给定的输入向量通过网络传递时会发生什么。首先,我们只关注网络中的一个节点。
以下是单个节点的计算过程:
- 每个输入都乘以其对应的权重。
- 这些加权输入的总和被传递给一个非线性激活函数。
- 最终结果是输入的一个非线性函数。
这个过程在层中的每个节点上重复进行。每个节点都有一组不同的权重,因此会产生不同的输出,我们称之为一个“特征”。所有这些新特征共同构成了新的状态表示。
与瓦片编码的对比 🔄
这个过程实际上与瓦片编码没有太大不同。我们将输入传递给瓦片编码器,得到一个新的表示。因此,在这两种情况下,我们都构建了一个输入到特征的非线性映射。在这两种情况下,我们都对表示进行线性组合以产生输出,即当前状态的近似价值。
通过与瓦片编码对比,我们可以更深入地理解神经网络的表示能力。
回想一下,当我们创建瓦片编码器时,必须设置几个参数:瓦片的大小和形状,以及瓦片的数量。这些参数在学习之前是固定的。在神经网络中,我们有类似的参数,对应于层数、每层的节点数和激活函数。这些通常也在学习之前固定。从这个意义上说,两者都利用先验知识来帮助构造特征。
然而,除此之外,神经网络还具有可调整的参数,这些参数可以在学习过程中改变特征。神经网络可以利用数据来改进特征,而瓦片编码器则可以从数据中纳入新信息。
非线性特征的可视化 📊
瓦片编码和神经网络都产生了在输入空间上非线性的特征。我们可以通过可视化预训练神经网络的隐藏层来更好地理解这一点。我们在一个连续的二维空间中训练了一个智能体,该空间包含两面墙之间的狭窄走廊。
这里我们绘制了网络学习到的单个特征的感受野。坐标轴对应于XY位置,即MDP的状态空间。图中的每个点对应于该XY状态的特征值,颜色越深表示激活程度越大。如果是白色,则表示该特征在该状态下不活跃。
那么这张图意味着什么?这张图显示了该特征对哪些状态是活跃的,即特征幅度超过了一个小阈值。因此,在更高层次上,这张图向你展示了这个特征是如何泛化的,对其权重的更新会改变所有这些状态的值。
观察几个特征的感受野,我们可以看到不同的特征以不同的方式泛化,并形成复杂的非线性形状。这些激活不像瓦片编码那样具有硬边界。这些学习到的特征可以具有平滑变化的边界。这个特征根据状态的不同,具有不同程度的泛化能力。有趣的是,这个网络中的特征激活还向我们展示了两面墙的位置。


总结 📝
本节课中我们一起学习了神经网络如何被视为一种特征构造的方法,并且认识到神经网络是状态的非线性函数。我们比较了神经网络与瓦片编码在特征构造上的异同,并通过可视化理解了神经网络学习到的非线性特征的形态。
137:系统辨识与最优控制 🚁


在本节课中,我们将学习基于模型的强化学习中,如何通过系统辨识来学习模型,并探讨一种更有效的迭代式交互方法。
上一讲我们讨论了使用模型的关键优势,即能够在仿真中学习,从而大幅减少与现实世界交互的成本和时间。当然,实现这一点的关键在于我们学习模型的能力。在本节中,我们将以自主直升机控制(具体任务是“漏斗内悬停”)为例,探讨如何从观测数据中学习模型,以便应用最优控制算法。
传统方法:系统辨识
传统观点将这个过程称为系统辨识,它在工程统计学中本质上是一种监督学习方法。
以下是其基本流程:
- 数据收集:通过某种探索策略(例如,由飞行员控制直升机并引入控制偏差以探索状态空间)来收集数据。
- 监督学习:将观测到的数据应用于监督学习算法(例如线性回归),学习一个模型
f_θ。该模型将状态和动作映射到下一个状态。 - 策略生成:将学习到的模型与一个成本函数结合,使用规划或最优控制合成算法(也可视为强化学习算法)来输出一个学习到的策略,希望该策略在现实世界中是最优的。
然而在实践中我们发现,优秀的工程师通常不采用这种一次性流程,而是采用一种迭代式的方法来构建模型。
为何需要迭代方法?
让我们看看原因。在上述直升机任务中,如果我们从专家演示中收集数据,然后应用上一讲提到的最优控制算法来生成策略,结果往往会失败得很彻底。
这为什么会出错?根本原因在于,系统辨识本质上是一个“先有鸡还是先有蛋”的问题。我们真正需要学习的,是强化学习算法或最优控制算法在学习策略时可能访问到的状态区域的准确模型。
不幸的是,如果我们先学习一个模型,然后针对它进行规划或优化,几乎必然会在过程中访问到一些模型不准确的状态(这些状态在数据收集过程中采样不足)。然后,强化学习算法可能会找到任何方法来利用这种不准确性,从而学习到一个性能不佳的策略,因为现实世界在这些状态下与模型不匹配。
这个普遍问题有时被称为协变量偏移或分布偏移。只要我们将统计学习与决策制定相结合,这就是一个根本性问题。结果就是,无论在理论上还是实践中,你都可以构建出误差很低的动态统计模型,并对其应用优秀的优化器或强化学习算法,但在现实世界中仍然得到糟糕的性能。
交互式模型学习方法
我发现,将基于模型的强化学习视为优化器(RL算法) 与模型学习器+世界之间的一个双人博弈,是一种非常有用的思考方式。找到模拟器中不准确性的最佳方法,就是让一个强化学习算法去尝试利用它,寻找模型中的“漏洞”。
因此,我们需要更稳健、本质上更具交互性的方法来寻找好的模型和控制器。以下介绍一种本质上是交互式的方法。
其核心思想是,我们将从我们当前认为的最优策略以及之前描述的探索策略中收集数据。
以下是该迭代算法的步骤:
- 数据收集与聚合:收集描述直升机从某个状态、采取某个动作、到达下一个状态的转移数据。将这些数据与之前迭代中收集到的所有转移数据聚合在一起。
- 模型拟合:再次拟合模型(例如使用线性回归)。
- 策略生成:将模型交给最优控制合成方法(规划器或强化学习算法),得到一个新的、据称最优的策略。
- 循环迭代:运行这个循环:从新策略(混合一些探索策略的数据)中收集数据,与之前所有数据聚合,拟合新模型,生成新策略,如此反复。
事实证明,运行这个循环(Stefan Ross 等人已证明),这种更接近专家工程师实际使用的交互式方法,在实践中效果非常好,并能提供更强的理论保证。
核心概念与保证
这里提到了两个核心概念:
- 无遗憾学习:这是一个强大的概念,在任何类似博弈的语境中都很有用。你可以将其简化为这样一类算法:它们不会因为训练数据的微小扰动而大幅改变其输出的模型,并且能在数据量足够大时获得良好性能。
- 性能保证:如果你使用一个稳定的函数逼近器,在多次交互迭代中学习到一个低误差模型,并使用一个好的最优控制求解器来生成策略,那么你必须获得良好的现实世界性能。反之,如果使用一个无遗憾学习算法(我们用来针对模型进行优化的那类算法)却没有获得良好的现实世界性能,那么原因必然是:在某个时刻,你未能构建出一个能准确描述世界运作方式的低误差模型。
方法对比与结果
我们可以将之前提到的“漏斗内悬停”问题,应用上述描述的交互式循环。结果如下:使用这种数据聚合方法收集相同数量的样本,结合相同的合成算法,唯一的不同在于我们以交互方式收集数据(即提出最优控制器、尝试、收集更多数据、然后重建模型),最终我们成功地执行了漏斗内悬停任务。
总结
本节课中,我们一起学习了基于模型的强化学习中的模型学习过程。我们首先介绍了传统的系统辨识方法及其面临的分布偏移根本挑战。接着,我们探讨了一种更有效的迭代式交互方法,该方法通过循环执行数据收集、模型拟合和策略生成,使模型学习集中在策略可能访问的状态区域,从而在实践中获得更好的性能。最后,我们了解了无遗憾学习的概念以及该方法所提供的理论保证基础。希望这些内容能为你将模型和强化学习应用于现实世界提供一个良好的开端。
138:移动健康中的强化学习应用 🏥
在本节课中,我们将跟随哈佛大学的苏珊·墨菲教授,了解强化学习在移动健康领域的具体应用、面临的挑战以及未来的研究方向。
概述
苏珊·墨菲教授来自哈佛大学,任职于统计学与计算机科学领域。她的研究工作聚焦于移动健康,特别是如何将强化学习应用于移动健康场景。她的团队参与了多种类型的研究,其中许多涉及成瘾问题、青少年健康等。
移动健康的目标与强化学习的作用
上一节我们介绍了研究背景,本节中我们来看看移动健康的核心目标以及强化学习如何发挥作用。
在移动健康领域,我们的目标是帮助那些与健康问题作斗争的人们,这些问题通常是慢性疾病,例如成瘾或抑郁症。我们希望为他们提供长期的支持。同时,我们也希望测试因果推断,即理解某个治疗行动(在强化学习中即“动作”)是否真的对个人产生了影响。
此外,在移动健康中,我们思考如何能够持续学习与实验,从而不断为每个人改进移动健康应用程序。这正是强化学习可以大展身手的领域。
移动健康中的强化学习基本框架
了解了目标后,我们来看看移动健康中强化学习的基本设置。
对于任何给定的用户,他们可以接收到各种各样的干预措施,即“动作”。以下是一些例子:
- 提醒:例如提醒服药、提醒进行特定类型的锻炼。
- 建议:提供生活建议,或将用户与有相似经历的人联系起来。
这些干预可以随着时间的推移反复进行。每次我们提供一个不同类型的治疗行动后,会观察一个“奖励”。奖励可以是多样的,例如:
- 如果目标是帮助用户更活跃,奖励可以是接下来30分钟内的总步数。
- 如果应用程序旨在帮助管理压力,奖励可以是直到下一次感到压力所经过的时间。
案例研究:促进用户参与度
理论框架需要实际案例来印证。接下来,我们通过一个具体的研究案例,看看如何应用强化学习来保持用户的参与度。
一项刚刚完成的研究,目标是帮助年轻人更积极地回答关于他们的压力与孤独感的问题。研究对象是从急诊室招募的、曾因饮酒过量而陷入麻烦的青少年和大学生。
在这个强化学习问题中,所有“动作”都围绕着如何提供“强化物”,以使用户保持参与并回答问题。研究采用了游戏化的界面(一个水族馆),用户回答问题可以丰富自己的水族馆并升级。
研究主要关注两个问题:
- 提供何种奖励(如表情包、礼物)能帮助用户更投入,从而在明天继续回答问题。
- 如果今天赠送礼物,用户是否更可能在今晚回答问题。
这项研究的整体目标,就是寻找能保持用户参与回答生活问题的最佳策略。




个性化与算法应用
保持参与是第一步,更深层的目标是为每个用户提供个性化服务。本节中我们来看看如何利用研究数据初始化强化学习算法,实现个性化。
我们现在正利用这类研究来初始化移动健康中的强化学习算法。其核心思想是,强化学习算法应该为每个用户个性化定制应用程序。从我们的视角看,这等同于为每个用户学习一个最优策略。
在我们的实验室中,主要使用贝叶斯强化学习。贝叶斯强化学习的主要优势之一,在于其随时间更新个体用户信息的方式。同时,它以一种随机的方式选择动作,这有助于我们在研究结束后也能从数据中学习。
移动健康中强化学习面临的挑战
实现个性化并非易事。将强化学习应用于移动健康场景时,我们面临诸多挑战。
其中一个问题是通知的侵扰性。如果你曾下载过应用程序,你一定能理解这一点。当应用程序频繁通知时,会令人非常烦恼。通常,应用程序在当下有潜力帮助你(对即时奖励有积极影响),但可能产生负面的延迟效应。这正是强化学习的经典应用场景。
我们必须解决的一些挑战包括:
- 如何近似价值函数:以便我们能够快速学习,同时在选择动作时不犯错误。
- 如何利用群体数据实现个性化:我们总是拥有许多不同的用户,每个人都是独特的。如何利用一个用户的数据来为每个特定用户个性化或确定一个好的策略,这是我们当前正在努力解决的一大挑战。
- 如何进行因果推断:研究结束后,我们总希望进行因果推断,即帮助科学家更多地了解人们为何会采取某些行为(例如为何复吸毒品或重新吸烟)。我们希望利用这些数据来回答此类问题,即使数据是通过强化学习算法收集的,我们也需要找出使用方法。
- 如何将当前研究数据用于未来用户:以便他们能从当前研究的学习成果中受益。
另一个案例:辅助戒烟
最后,让我们再看一个很酷的、即将结束的研究案例,它展示了强化学习在复杂健康干预中的潜力。
在这项研究中,每个人都在尝试戒烟。研究从他们决定戒烟的那天开始。参与者佩戴各种可穿戴设备,传感器数据持续流入并用于形成多种预测。其中一个关键的预测是:用户当前是否处于生理压力状态。
我们正在使用算法来测试:如果用户当前处于压力状态,是否应该提供提醒,建议其进行压力管理练习。当然,长期目标是为每个用户找到最优策略。

总结
本节课中,我们一起学习了苏珊·墨菲教授关于强化学习在移动健康中应用的分享。我们了解了移动健康的目标是提供长期个性化支持与进行因果推断,探讨了其基本框架(动作、奖励、策略),并通过促进用户参与度和辅助戒烟两个具体案例,看到了强化学习的实际应用。同时,我们也认识到在该领域应用强化学习所面临的挑战,如平衡即时与延迟效应、实现真正的个性化以及从数据中进行有效的因果推断。这些研究正在推动移动健康技术向更智能、更贴心的方向发展。

祝大家学习顺利,再见。
强化学习专项课程:第139讲:与Adam的会议:完善智能体细节 🚀

在本节课中,我们将讨论如何完善智能体的实现细节,特别是关于神经网络的设计与更新方法。我们将回顾如何使用神经网络来近似动作价值函数,并深入探讨Adam优化算法的细节。

上一节我们讨论了智能体的高层设计选择,本节中我们来看看具体的实现细节,这些决策在实践中对性能有重大影响。

我们决定使用神经网络来估计动作价值。让我们回顾一下其工作原理。你可能还记得在第三门课程中,神经网络接收状态并生成一种新的表示。例如,在本案例中,状态可能包含着陆器的位置和速度等信息。然后,我们将使用生成的表示来估计每个动作的价值。我们通过构建一个网络来实现这一点,该网络为每个动作都有一个输出节点。
接下来,我们讨论如何训练这个神经网络以近似动作价值函数。
我们将使用时序差分误差来训练网络。更准确地说,我们将通过修改权重来减少每个时间步的TD误差。我们只更新与所选动作对应的输出权重。例如,如果动作1被选中,我们就不更新最后一层中对应动作2和动作3的权重。
你可能会问,这通常有问题吗?一般来说没有,但这里有一些细微之处需要考虑。对于线性函数近似,我们也为每个动作价值维护了独立的权重,并且只更新被采取动作的权重。而在神经网络中,每次更新一个动作时,所有动作的共享表示也会随之改变。但在学习过程中,每个动作的结果可能会对表示产生不同的、甚至可能是冲突的更新。然而,这实际上是我们所期望的:我们希望神经网络学习到一个对所有动作都有用的表示。对多个预测都有益的特征通常具有更好的泛化能力。
相比之下,我们也可以为每个动作学习完全独立的神经网络。但那样每个动作的表示将用更少的样本学习,而我们也就无法获得学习共享表示的潜在好处。
我们做出的另一个决定是使用Adam算法。该算法结合了向量化步长和一种动量形式。
在第三门课程中,我们讨论了一个步长向量:网络中的每个权重都有自己的步长,该步长根据学习过程的统计数据进行自适应调整。这意味着我们可以对一些权重进行较大的更新,而对其他权重进行较小的更新。这在损失函数在某些维度上较为平坦时可能很有用。或者,我们可以在损失变化更剧烈的其他维度上采取较小的步长。
我们还讨论了如何使用动量来加速学习,尤其是在我们处于损失函数的平坦区域时。请记住,沿相同方向重复步进会积累动量,而沿不同方向步进则会消除动量。
Adam算法结合了这两种思想。它保持梯度的移动平均值以计算动量,其中参数 β_m 控制动量的量。Adam还保持梯度平方的移动平均值,这为我们提供了一个步长向量。这种更新方式通常能带来更高的数据效率,因为每次更新都更有效。
你可能已经注意到,我们刚刚引入了几个需要设置的新超参数。我们有两个衰减率、分母中的小偏移量大小以及一个全局步长。因此,我们并未实现免超参数学习。事实上,我们用一个超参数换来了四个。幸运的是,通常使用经验法则不难为这些超参数找到良好的设置,但通过单独调整它们通常可以获得更好的性能。许多人正在研究降低强化学习中对超参数选择敏感性的方法,但这仍然是一个悬而未决的问题。在本顶点项目中,你将研究不同全局步长选择的影响,而其他参数我们将使用固定值。
以上就是本周的全部内容。你现在应该具备了实现智能体所需的所有工具。
在本节课中,我们一起学习了如何设计用于动作价值近似的神经网络,以及如何使用TD误差和Adam优化算法来有效地训练它。这些实现细节对于构建一个高性能的强化学习智能体至关重要。

接下来,就是用强化学习让航天器在月球上着陆了。🌕
140:回顾神经网络的优化策略 🧠

在本节课中,我们将回顾深度神经网络训练中的关键优化策略。这些策略对于高效训练神经网络至关重要,也是后续将神经网络应用于强化学习算法的基础。
基于深度神经网络的监督学习系统,现已成为图像分类、语音识别和自然语言处理领域的首选方案。部分原因在于训练数据量的大幅增加以及计算成本的降低。然而,要真正利用这些增长的数据和算力,训练方法的改进是必需的。一些简单的优化策略使得训练网络变得更加容易,并加速了其应用普及。本节课我们将讨论这些策略。
在本视频结束时,你将能够理解神经网络初始化的重要性,并描述用于训练神经网络的优化技术。
权重初始化策略
与许多机器学习方法一样,神经网络通过迭代过程进行训练。这个过程必须有一个起点,而这个起点的选择对神经网络的性能有重大影响。
让我们看一个只有一个权重的例子。在y轴上,我们展示损失函数;在x轴上,我们展示权重的值。正如你所知,梯度下降会迭代地将权重移向最近的驻点。
但神经网络的损失函数并非如此简单。如果我们从这个近乎平坦的区域开始,由于梯度接近0,梯度下降可能很难取得进展。相反,如果我们从这个小的“碗状”区域内部开始,那么我们可以快速找到局部最优点。但是,如果我们能从某个更好的位置开始,从而快速找到更优的点,岂不是更好?
以下是一种简单而有效的初始化策略:
- 随机初始化:从方差较小的正态分布中随机采样初始权重。
- 保持多样性:这样,层内的每个神经元会与其他神经元产生不同的输出,从而提供更多样化的潜在特征。
- 控制方差:通过保持方差较小,我们确保每个神经元的输出与其相邻神经元处于同一范围。
这种策略的一个缺点是,随着神经元输入数量的增加,其输出的方差也会增长。我们可以通过将权重的方差按 1 / sqrt(输入数量) 进行缩放来解决这个问题。

优化更新机制
在确定了网络的起点之后,我们开始使用随机梯度下降步骤对权重进行增量式的小幅改进。
另一种改进训练的方法是考虑更复杂的更新机制。两种常见策略是使用动量法和向量化步长自适应。我们先来讨论动量法。
想象这是二维权重向量在随机梯度下降下的轨迹。这是标准的随机梯度下降更新规则:
w_{t+1} = w_t - α * ∇J(w_t)
而这是加入了动量项的更新规则:
w_{t+1} = w_t - α * ∇J(w_t) + λ * (w_t - w_{t-1})
请注意,它类似于常规的随机梯度下降更新,加上了一个称为动量的额外项。动量项使用梯度衰减和(衰减率为λ)来总结梯度的历史。
- 积累动量:如果最近的梯度都指向相似的方向,那么我们就会在该方向上获得动量,这意味着我们会朝该方向迈出一大步。
- 抵消动量:如果最近的更新方向相互冲突,则会抵消动量,动量项对更新的影响很小,我们将进行常规的梯度下降步骤。

动量法被证明可以加速学习,意味着它能更快地到达驻点。
自适应步长

另一个潜在的改进是为网络中的每个权重使用单独的步长。到目前为止,我们只讨论了一个全局标量步长α,众所周知这会产生问题,因为它可能导致某些权重的更新太大,而其他权重的更新太小。
在实践中,根据学习过程的统计数据为每个权重自适应调整步长,能带来更好的性能。
那么更新规则如何改变呢?改变非常简单,不再使用标量α进行更新,而是使用一个步长向量(用下标t表示它可以在每个时间步改变):
w_{t+1} = w_t - α_t ⊙ ∇J(w_t)
梯度的每个维度都由其对应的步长(而不是全局步长)进行缩放。有多种方法可以自适应调整步长向量,你将在作业中实现其中一种。
本节课中,我们一起学习了改进神经网络训练的方法。具体来说,我们讨论了一种初始化神经网络权重的策略,以及如何使用动量法和步长自适应来加速学习。现在,你已经准备好用神经网络实现一个时序差分智能体了。祝你学习愉快!
强化学习专项课程:P141:函数逼近下的期望SARSA与Q学习


在本节课中,我们将学习如何将期望SARSA算法扩展到函数逼近的设定下,并理解其与Q学习在函数逼近下的关系。
到目前为止,我们已经讨论了在函数逼近下使用SARSA算法。现在,让我们继续探索近似控制方法,来看看期望SARSA算法。通过本视频的学习,你将能够解释函数逼近下期望SARSA的更新公式,并解释函数逼近下Q学习的更新公式。
让我们看看在使用函数逼近时,如何将SARSA转变为期望SARSA。
首先,回顾一下SARSA的更新公式。SARSA的更新目标包含了下一个状态和动作的动作价值。

现在回想一下,期望SARSA则使用其目标策略下的期望值。为了计算这个期望,我们只需将动作价值按其目标策略下的概率加权求和。

即使在使用函数逼近时,也可以计算相同的期望值。
让我们看看具体如何操作。首先,回顾一下函数逼近下SARSA的更新公式。
它看起来与表格设定下的公式相似,只是动作价值估计由权重向量 W 参数化。我们还有一个梯度项,用于将误差适当地分配给权重。

函数逼近下的期望SARSA遵循类似的结构。我们为下一个状态中的每个动作,根据权重向量计算其动作价值。然后,我们计算这些价值在目标策略下的期望。这就是将SARSA转变为期望SARSA所需做的全部改变。

那么,对于函数逼近下的Q学习,我们该如何操作呢?幸运的是,Q学习是期望SARSA的一个特例。在Q学习中,目标策略是关于近似动作价值的贪婪策略。在贪婪策略下计算期望,等同于计算最大动作价值。

因此,函数逼近下的Q学习更新实际上非常直接。我们只需用最大值代替期望值。

本节简短的课程到此结束。今天我们介绍了函数逼近下的期望SARSA算法,并展示了如何将其扩展到函数逼近下的Q学习。下一节,我们将探讨在函数逼近下如何进行探索。在此之前,请保持思路清晰。
142:回顾简单迷宫中的Dyna-Q学习算法 🧠


在本节课中,我们将学习Dyna-Q架构,并了解它如何结合规划、学习和行动。我们还将研究Dyna-Q在网格世界中的运行方式。接下来,我们将通过实验来检验Dyna-Q的实际效果。本视频将使用一个小型网格世界来比较表格型Dyna-Q和无模型的Q学习算法。学习结束后,你将能够描述从真实经验和模型经验中学习如何影响性能,并解释模型如何让智能体以更少的环境交互次数进行学习。
实验设置与环境 🧪
今天我们将在这个小型迷宫环境中进行一些实验。与之前一样,智能体有四个可执行的动作。进入目标状态会产生+1的奖励,所有其他状态转移产生的奖励均为零。这是一个分幕式问题,我们将使用折扣因子 γ = 0.95。
我们将比较具有不同规划步数的Dyna-Q算法。实验涉及三个智能体,每个智能体都使用学习率 α = 0.1 和探索率 ε = 0.1。所有智能体的动作价值估计初始值都设为零。实验运行了50幕,重复30次,然后对结果取平均值。
性能比较与结果分析 📊
我们可以绘制智能体在完成越来越多幕之后,平均每幕所需的步数。如果智能体表现良好,那么随着幕数增加,所需步数应该减少。也就是说,在Y轴上数值越低越好。
如果我们运行规划步数为零的Dyna-Q,得到的就是纯粹的Q学习算法。如图所示,它进步缓慢,最终稳定在每幕约14步的水平。如果我们运行规划步数为5的Dyna-Q,它能达到与Q学习相同的性能,但速度要快得多。而规划步数为50的Dyna-Q仅需大约三幕就能找到一个优秀策略。Dyna-Q的效率要高得多。观察Y轴,在两幕之后,Q学习找到的策略仍然需要数百步才能走出迷宫。对于相同数量的环境交互,Dyna-Q能学到更多东西。这表明,如果模型正确,规划能更有效地利用环境经验。


搜索控制对规划的影响 🔍
上一节我们比较了不同算法的性能,本节中我们来看看搜索控制如何影响规划过程。让我们在一个略有不同的迷宫中可视化正在发生的情况。我们用箭头表示根据每个状态的估计价值所选择的贪婪动作。没有箭头的状态表示在该策略下所有动作被选择的概率均等。
在一幕之后,Q学习只更新了一个动作价值,即目标旁边状态中“向上”动作对应的价值。因为这是唯一经历了非零奖励转移的状态。需要更多幕才能将状态的价值“引导”回附近的其他状态。
让我们更仔细地观察搜索控制如何影响规划。我们的机器人将采取与标准Dyna-Q略有不同的操作,以便更清晰地阐明观点。我们将从10个规划步数开始,并连续调用规划循环10次,总共进行100步规划。如图所示,许多规划更新未能改变价值函数。事实上,在100步规划之后,智能体只更新了两个“状态-动作”对的价值。
我们继续实验。这次,我们尝试每次调用进行100步规划,并让智能体运行更长时间。即使有100个规划步数,前几次调用也只更新了少数几个动作价值。为什么智能体需要这么多规划步数才能学习到合理的价值函数和策略呢?
智能体需要大量规划步数,是因为搜索控制是随机采样“状态-动作”对的。如果采样的“状态-动作”对产生的时序差分误差为零,那么规划更新将不会产生任何效果。在这个环境中,由于所有奖励都是零,且初始价值也是零,这种情况经常发生。如果我们以更有效的方式排序“状态-动作”对,会发生什么?事实证明,智能体可以仅用六分之一的规划更新就学会一个好策略。在大型环境中,随机搜索控制的问题会更加突出。如果你想了解更多关于这个主题的内容,请查阅教材的第8.4节。


总结 📝
本节课中,我们一起学习了在简单网格世界中测试表格型Dyna-Q算法。我们看到了规划如何能显著加速学习过程。在我们的实验中,进行的规划越多,智能体的表现就越好。
143:与Martha深入探讨经验回放机制 🧠

在本节课中,我们将学习如何让使用函数近似的智能体更高效地利用样本数据。我们将重点介绍一种名为“经验回放”的简单方法,并探讨它与Dyna-Q算法的关联。

在课程3中,您实现的智能体每个样本只更新一次价值函数或策略。但这很可能不是利用我们已有数据最高效的方式。实际上,您在课程2中已经见过一种更智能的方法,即讨论Dyna-Q作为提高样本效率的途径。但我们当时只讨论了表格设定下的Dyna。
本节视频中,我们将讨论在使用函数近似时,如何让您的智能体更高效地利用样本。我们将讨论一种名为“经验回放”的简单方法,以及它与Dyna的关系。
为了获得对经验回放的直观理解,让我们首先回顾一个我们熟知的方法:Dyna-Q。其核心思想是利用采样到的经验来学习一个模型,然后可以从这个模型中获得模拟经验来更新价值。这种利用模拟经验改进价值估计的过程被称为“规划”。
为了聚焦于Dyna-Q的关键思想,我们当时做了一些简化假设。具体来说,Dyna-Q假设状态转移是确定性的,并且状态空间相对较小。在这种设定下,学习模型很简单:对于每个访问过的状态-动作对,我们记录观察到的奖励和下一个状态。这只在表格设定下有效,因为表格设定下的状态-动作对数量足够小,可以存入计算机内存。
如果我们试图在连续状态域中应用这种方法,将会有无限多的状态-动作对需要存储。更糟糕的是,如果世界是随机的,我们将不会再次看到完全相同的状态。
一种选择是利用您关于函数近似的所有新知识来学习一个模型。例如,您可以学习一个参数化函数,它输入状态和动作,输出下一个状态和奖励。不幸的是,即使在这种学习到的动态模型中出现微小误差,似乎也会导致严重问题。如何在强化学习智能体中有效使用学习到的模型,仍然是一个开放的研究问题。
幸运的是,对于您的结业项目,有一个更简单的选择。经验回放是一种尝试获得Dyna优势的简单方法。其基本思想是保存一个经验缓冲区,并让数据本身充当模型。我们从该缓冲区中采样经验,并用这些样本来更新价值函数,类似于在Dyna中从模型采样并更新价值。
经验回放的关键选择包括缓冲区的大小、存储哪些经验以及每步执行多少次更新。首先,让我们看看如何存储经验。为简单起见,让我们回到表格网格世界。当我们与世界交互时,我们观察到一个(状态,动作,奖励,下一个状态)元组。我们将这些经验添加到一个缓冲区,称之为经验回放缓冲区。
随着我们继续与世界交互,我们向该缓冲区添加更多样本,直到最终将其填满。当这种情况发生时,我们可以选择一个旧的经验进行删除,并用新经验替换。我们还需要考虑缓冲区的大小。通过允许缓冲区变得非常大,我们可以记住许多时间步之前潜在有用的转移。然而,智能体确实有实际限制,我们需要考虑大型缓冲区使用的内存量,以及存储和访问大型缓冲区带来的任何计算影响。
一旦我们决定存储一个缓冲区,一个自然的想法是使用小批量。从经验回放缓冲区使用单个样本会产生一个噪声很大的更新。相反,我们可以使用缓冲区中的多个样本来创建一个平均更新,以减少这种噪声。从较大缓冲区中抽取的这小部分样本集合被称为“小批量”。
小批量更新简单地涉及对这个小批量中K个随机样本的更新进行平均。以下是一个Q学习平均更新的示例。我们将平均更新存储在一个变量中,称之为 Ubar。然后我们从缓冲区获取几个样本,并为每个样本计算Q学习更新,最后平均这些更新以获得小批量更新。
将所有内容整合起来,我们得到以下经验回放伪代码:
# 经验回放伪代码示例
initialize replay buffer D
for each episode:
initialize state S
for each step in episode:
choose action A from S using policy derived from Q
take action A, observe reward R, next state S'
store experience (S, A, R, S') in D
# 执行多次回放更新(规划步骤)
for i in range(num_replay_updates):
sample a mini-batch of experiences from D
for each experience (s, a, r, s') in mini-batch:
compute target = r + gamma * max_a' Q(s', a')
compute update = target - Q(s, a)
accumulate update
apply averaged update to Q-values
S = S'
与Dyna-Q类似,我们可以将规划步骤视为在后台发生。智能体可以执行多次这些规划更新(即回放更新),对应于环境中的每个真实步骤。更多的更新意味着我们从已观察到的数据中提取更多信息。这些回放更新中的每一个都包含一个小批量更新,以减少该更新的噪声。
就是这样。经验回放允许智能体更好地利用其数据,从而提高样本效率。此外,它确保智能体像在Dyna中一样,在环境的许多部分进行更新。本周您将看到如何在您的智能体中使用经验回放。
本节课中,我们一起学习了经验回放机制。我们了解到,通过存储和重用过去的经验,智能体可以更高效地学习,减少数据浪费,并通过小批量更新获得更稳定的学习过程。这借鉴了Dyna-Q中“规划”的思想,但避免了学习显式动态模型的复杂性,使其成为函数近似设定下一个强大而实用的工具。
144:数据高效强化学习的收集与推断框架 🧠


在本节课中,我们将学习一种特别适用于设计和开发数据高效学习智能体的强化学习视角——收集与推断框架。这个框架尤其适合应用于现实世界的动态系统控制。

引言

我是 Martin Riedmiller,DeepMind 控制团队的负责人。我在为动态系统控制开发新型强化学习智能体方面已有超过20年的工作经验。
强化学习与控制
控制现实世界的动态系统是强化学习控制器一个有吸引力的应用领域。例如自动驾驶汽车的控制、足球机器人的控制,或者从像素输入进行赛车控制。它们都共享相同的基本反馈控制结构:控制器接收观测值,计算动作,并将其应用于环境。
传统的控制理论会首先将过程建模为一组微分方程,然后必须解析地推导出控制律。这是一项繁琐的工作,特别是当系统复杂或高度非线性时。相比之下,强化学习承诺,只要指定了总体控制目标,就能自主学习控制器。这通常通过定义即时奖励来实现。强化学习控制器会优化随时间累积的奖励总和的期望值。
因此,强化学习为解决动态系统的反馈控制问题提供了合适的框架。我们寻找的是一个能优化随时间累积奖励期望的策略。
从模型无关到函数逼近

在模型无关的设置中,这可以通过迭代一个动作价值函数 Q 来实现。由于在大多数控制应用中,我们通常处理连续的状态和动作,因此我们使用一个以状态 S 和动作 A 为输入的神经网络来计算 Q 值。
贝尔曼方程被转化为一个二次损失函数,通过梯度下降来最小化网络参数。
数据效率的核心挑战
当涉及到在真实系统上学习时,核心问题是如何实现数据高效。在经典的强化学习中,价值函数的更新规则以在线方式应用:智能体观察输入,计算动作,观察结果状态,然后相应地更新其控制器。每个转移经验只使用一次。经验表明,这会导致高度消耗数据的学习行为。如果我们的环境是模拟器并提供无限数据,这可能没问题,但对于数据不丰富的现实世界系统来说,这通常行不通。
收集与推断框架
如果数据有限,那么核心观点是:数据是宝贵的,数据是真实的。因此,我们不应丢弃任何转移经验 (S, A, S'),而应将它们全部存储在转移记忆中。
学习是在整个数据集上进行的。在这一步中,我们从转移记忆中推断知识。推断出的知识只能和转移记忆中的数据一样好。因此,收集正确的数据是我们框架的第二个重要组成部分。
这两个步骤共同构成了所谓的强化学习收集与推断框架。这个视角让我们专注于数据高效强化学习的两个主要问题:
- 推断:意味着从给定的转移数据集中榨取最多的信息。
- 收集:意味着从环境中采样最具信息量的数据。
由于时间关系,本讲座的剩余部分我们将只专注于“推断”部分。
神经拟合Q迭代算法
神经拟合Q迭代算法完全体现了从存储的转移经验集中学习的理念。给定一组 N 个转移元组 D = {(s_i, a_i, s'_i, r_i)},算法步骤如下:
以下是 NFQ 算法的核心步骤:
- 将训练集
M初始化为整个数据集D。 - 基于动态规划原理推导出的 Q 迭代规则,为
M中的每个样本计算 Q 目标值。 - 一旦为
M中的所有转移计算了目标值,就通过一个普通的监督学习步骤,将神经网络拟合到这些目标值上。 - 外循环可以重复任意次数的动态规划步骤,直到在令人满意的精度内逼近最优价值函数
Q*。 - 最终,控制律由在状态
S下对Q*进行贪婪评估给出:π(s) = argmax_a Q*(s, a)。
NFQ 基本上将强化学习转化为一系列监督学习问题。它假设总是在整个可用的转移集上进行更新,这对于非常大的数据集可能不切实际。
深度Q网络
DQN 是 NFQ 的一个流行变体,它使用小批量样本进行更新,并进行了一些额外的调整以处理海量数据集。
应用实例:倒立摆

作为一个例子,考虑现实中的经典倒立摆系统。在这里,它是完全从零开始学习的。奖励函数的定义相当简单:如果杆子直立则为1,否则为0。或者,也可以考虑小车位置作为奖励函数的额外输入。
经典的在线 Q-learning 在模拟版本中需要大约100万次试验才能学会平衡杆子。而使用 NFQ,训练只需要不到300次试验,速度快了几个数量级。这使得将新型强化学习直接应用于现实世界系统成为可能。
总结

本节课中,我们一起学习了强化学习的收集与推断框架。我们了解到,通过珍惜并存储所有转移经验,以及从整个数据集中进行推断学习,可以显著提高强化学习的数据效率。神经拟合Q迭代算法及其变体深度Q网络是这一框架的具体实现。该框架为将强化学习范式应用于日益复杂的现实世界应用打开了大门。
145:与Adam探讨强化学习中的参数研究 🧪

在本节课中,我们将学习如何通过参数研究来深入理解强化学习算法,并探讨如何为算法选择合适的关键参数。

这是顶点项目的最后一周。完成本周的学习后,你将成功实现一个完整的强化学习系统,从问题定义到元参数的谨慎选择。
上一节我们介绍了构建完整系统的重要性,本节中我们来看看如何“谨慎选择元参数”这一部分。
回想在顶点项目早期阶段我们确定的所有关键性能参数。如果我们希望构建一个成功的学习智能体,就需要为这些参数中的每一个都选取合适的值。
在实践中,我们可能不得不依赖经验法则来做出许多选择。然而,在某些情况下,我们有机会研究参数的影响以获得更深入的见解。
例如,在我们的模拟器中学习时,我们可以用许多不同的参数配置来测试智能体。这可以帮助我们确定某个特定参数的良好取值范围。
当我们最终将智能体部署到月球上进行研究时,这也有助于我们设定参数。在研究中,我们可能会在各种模拟问题中,用许多不同的参数设置来测试算法。这可以提供关于算法在一般情况下可能如何表现的见解。
运行这样的科学研究不仅对科学家有用,在工业界也同样有用。在这两种情况下,真正理解你所部署的方法都至关重要。
让我们思考一下,如何能更好地理解算法在不同参数下的行为。
我们可以为每个参数选择一个范围,并在该范围内测试多个值。我们可以用参数敏感性曲线来可视化结果。
以下是绘制参数敏感性曲线的步骤:
- 在Y轴上,我们使用某种性能度量。例如,如果让智能体运行50幕,这个度量可以是这50幕的总回报之和,我们称之为总回报。
- 然后,我们计算多次运行的平均值,得到平均总回报。
- 在X轴上,是我们正在测试的参数值。
- 对于元参数的每个值,我们进行一次完整的运行。这意味着智能体会运行指定的步数(例如10,000步),并运行期望的次数(例如30次)。
- 我们计算每次运行的总回报,并对这30次运行的数字进行平均。
- 我们为每个选定的元参数绘制这些平均值,从而得到敏感性曲线。
这条曲线揭示了算法在其元参数范围内的行为方式,以及选取这些参数的难度。
如果曲线非常尖锐,则表明良好参数的范围很窄。如果你事先不知道这一点,那么你不太可能找到这个良好的参数设置。即使你设法选择了一个非常接近最佳值的元参数,性能也可能差很多。因此,尽管在最佳情况下算法可以表现良好,但在实践中,它的表现可能会差得多。你可能会想,一旦我找到了这个好的设置,我就可以直接使用那个元参数并获得良好的性能。不幸的是,对于一个新问题,最佳的元参数很可能不同。相反,这个分析表明你在选择元参数时可能会遇到困难,因此我们在部署时需要小心。
另一方面,如果良好参数的范围很广,那么你更有可能成功选择一个好的参数。此外,这可能表明你的算法总体上对其元参数不太敏感。如果你在不同问题上观察到对元参数有类似的敏感性,那么这一点就更可能成立。
为了产生有意义的曲线,我们必须注意几个因素。
以下是需要注意的关键点:
- 首先,我们必须测试足够多的元参数值。否则,我们对真实参数敏感性曲线的近似会很差。想象一下,关于alpha的真实曲线是这样的。如果我们只抽样测试少数几个点,可能会意外地跳过这些参数的最佳值。
- 我们还需要测试足够宽泛的参数范围。如果我们选择的范围使得最佳值位于该范围的一端,我们可能会错过更好的元参数值。
别担心,我们不会要求你详尽地测试每个元参数组合。你只需要为你的期望SARSA智能体扫描其中一个参数。这样,你将获得一些进行参数研究的经验,但无需等待程序运行数小时。我们会为其余的参数建议合适的值。

必须注意的是,我们并不使用参数扫描来为实际问题实际选择参数。相反,这是在简化设置中理解我们算法的一种策略。

系统地用许多元参数测试智能体通常并不可行。我们怎么能用可能导致反复坠毁的不良元参数设置,一遍又一遍地测试在月球上着陆模块呢?你很快就会因此被解雇。
理解我们的算法以及它们可能如何表现是如此重要,在现实世界(或者在本例中,在外太空)的部署中尤其如此。
今天的视频内容就到这里,祝你在顶点项目的最后阶段好运。
本节课中我们一起学习了如何通过参数敏感性研究来理解强化学习算法的行为。我们探讨了绘制敏感性曲线的方法,分析了曲线形状(尖锐或平缓)所揭示的算法特性,并强调了在真实部署中谨慎选择参数的重要性。理解这些概念对于构建稳健且有效的强化学习系统至关重要。
146:时序差分与蒙特卡洛方法对比实验 🧪


在本节课中,我们将深入比较时序差分学习与蒙特卡洛方法。我们将通过一个精心设计的实验,直观地展示两种方法在估计价值函数时的表现差异,并分析其背后的原因。
在之前的课程中,我们介绍了时序差分学习,并讨论了它相对于动态规划和蒙特卡洛方法的优势。本节中,我们将通过一个科学实验,更深入地比较时序差分与蒙特卡洛方法。
考虑一个简单的马尔可夫决策过程。我们有五个非终止状态。在每个状态下,有两个确定性动作:向左和向右。我们的目标是评估一个均匀随机策略的价值函数。
所有回合都从状态 C 开始。回合在到达最左侧或最右侧时终止。所有状态转移的奖励均为零,除了在右侧终止时会获得 +1 的奖励。
我们设折扣因子 γ = 1。在这个问题中,状态价值具有直观的含义:每个状态的价值等于从该状态出发,最终在右侧终止的概率。起始状态 C 的价值是 0.5,这意味着从中心开始随机游走,有50%的概率在右侧终止。
让我们为其余状态标上它们的真实价值。现在,我们开始进行实验。
在幻灯片顶部,我们标注了MDP各状态的真实价值。我们的智能体——一个可爱的小机器人——将使用时序差分方法来估计价值函数。在底部,另一个智能体使用蒙特卡洛方法。我们将两个智能体的近似价值函数初始值都设为 0.5。
以下是第一个回合中两个智能体的表现分析:
- 时序差分智能体:只更新了状态 E 的价值。要理解这一点,可以考虑从状态 C 到 D 的转移。时序差分误差 δ 的计算公式为:
δ = R + V(D) - V(C)
由于这是一个非终止转移,奖励 R = 0。状态 C 和 D 的初始价值都是 0.5,因此 δ = 0,我们对 C 的估计不做任何改变。除了从状态 E 进入终止状态的那一步,其他每一步都会发生同样的情况。 - 蒙特卡洛智能体:更新了机器人在该回合中访问过的所有状态的价值。
让我们观察下一个回合。请注意在回合进行过程中价值是如何更新的。
最终,时序差分智能体在每一步都进行了更新。相比之下,蒙特卡洛智能体则等到回合结束后才进行所有更新。
再看几个回合,时序差分智能体的价值估计似乎在向真实价值移动。这个过程可能较慢,让我们直接跳到后面,评估它们的渐近性能。
我们绘制了在学习过程中几个时间点的估计价值。X轴代表MDP中的每个状态,Y轴代表估计的价值。图中也标出了真实价值曲线和初始估计值(均为0.5)。
- 第一回合后(红色曲线):正如我们讨论的,时序差分只更新了一个状态的价值。
- 100回合后:估计值已经接近它们能达到的最佳水平。请注意,我们使用了恒定步长 α = 0.1,这意味着价值会根据最近回合的结果产生波动。如果使用更小的学习率,或者更好的衰减学习率,我们可能会得到更精确的估计。
一个自然而然的问题是:时序差分学习是否比蒙特卡洛方法更快?
让我们在示例问题上比较时序差分和蒙特卡洛的性能。下图展示了学习曲线:

- X轴:回合数。
- Y轴:真实价值函数与学习到的估计值之间的均方根误差。
- 红色曲线:代表蒙特卡洛方法在不同学习率 α 下的性能(每条曲线是100次独立运行的平均值)。
- 黑色曲线:代表时序差分方法在不同学习率下的性能。
从图中可以看出,时序差分方法的性能始终优于蒙特卡洛方法。让我们更仔细地观察:
- 当时序差分的学习率 α = 0.15 时,误差下降更快,但最终误差较高。
- 使用较小的学习率时,时序差分学习速度较慢,但能达到更低的最终误差。

本节课中,我们一起进行了一个严谨的实验来比较时序差分与蒙特卡洛方法。实验结果表明,在这个特定问题中,时序差分方法能够更快地收敛到更低的最终误差。这验证了其作为在线、增量式学习方法的优势。我们下次再见。
147:构建可复现、可重用且鲁棒的系统


在本节课中,我们将探讨在强化学习领域构建可复现、可重用且鲁棒的系统所面临的挑战与重要性。我们将通过具体的研究案例,分析当前研究中存在的问题,并学习如何更严谨地进行实验设计与结果解读。
大家好,我是乔尔·皮诺。我是麦吉尔大学计算机科学学院的教员,同时也是蒙特利尔Facebook人工智能研究实验室的研究经理。今天我很高兴能在这里,与大家分享我们在构建可复现、可重用且鲁棒的强化学习系统方面所做的一些工作。
你可能会好奇,为什么我要将这三个“R”(可复现、可重用、鲁棒)联系在一起,它们有什么共同点。让我引用美国国家科学基金会的一段话:可复现性指的是研究者使用原始研究者所用的相同材料,复制先前研究结果的能力。可复现性是研究结果可信且具有信息量的最低必要条件。因此,作为科学家,这些组成部分对我们实践科学的方式非常重要,对于我们分享研究成果的方式也同样重要。
不仅在机器学习领域,整个科学界都曾讨论过“可复现性危机”。《自然》杂志在2016年进行了一项非常有趣的研究,调查了约1500名科学家,询问他们是否认为其所在领域存在可复现性危机,其中很大一部分人给出了肯定的回答,认为存在轻微或严重的危机。
在我们的一些工作中,我们一直试图弄清楚,发出警报和回答调查是一回事,但仔细审视我们自己进行比较时数据告诉了我们什么,则是另一回事。就强化学习而言,过去几年我们看到的进展速度确实令人印象深刻。系统展示了在许多情况下玩游戏的能力,其表现水平超过了最优秀的人类。
我们曾认为其中一些游戏非常困难,可能需要数十年才能解决,但我们已经取得了一些令人瞩目的成果,特别是在围棋游戏上,也在一些具有挑战性的视频游戏上,我们的强化学习系统能够取得非常好的成绩。
在游戏和模拟中表现出色是很好的,这让我们看到了这项技术的潜力。但从长远来看,我们真正关心的是这项技术、我们的算法,能多好地帮助我们解决现实世界的问题。因此,为了了解这门科学已经发展到什么程度,以及我们距离解决这些困难、复杂的现实问题有多近,我们开始深入研究近期的文献。
我们查看了过去大约25年的强化学习论文。你可以看到这条曲线增长非常迅速:21世纪初,每年只有几百篇相关主题的论文发表;最近,每年有超过20,000篇论文发表。因此,每年都有大量的新发现涌现。当我们问及所有这些方法中,哪些真正能在现实世界中发挥作用时,筛选所有这些信息变得非常困难。因此,回到今天的核心主题,论文中报告研究结果的方式是否符合我们在可靠性、鲁棒性和可复现性方面的标准,变得至关重要。
为了验证这一点,我们进行了一项小调查。我们从大量论文中挑选了四篇,特别是四篇被广泛引用、常用且代码可用的论文,并开始研究这些论文中的发现有多鲁棒。我今天要传达的信息实际上超越了这些论文本身,真正关注的是我们如何在这个领域实践实证科学。
我们开始比较这四种不同的方法。这些是策略梯度算法,是策略梯度的不同变体,用于训练一个非常简单的智能体学习行走。我们称之为“半猎豹”领域,有点像一只被分成两半的卡通猎豹,所以只有两条腿,它必须学会奔跑而不摔倒。我们比较了四种不同的算法。在左边的图中,你可以看到这四种算法。基于此,你可能会认为红色算法比其他算法表现好得多。这里具体是哪种算法并不重要,我们的核心信息是关于如何进行公平的比较,以及我们的结论是否由此得出并具有鲁棒性。基于这一个结果,似乎红色算法表现更好。
现在,我们将此扩展到控制器的略微不同变体。还有另一个例子是“跳跃者”,另一个叫做“游泳者”,是我们必须控制的这个角色的略微不同版本。当你查看底部两个图时,你实际上会发现蓝色算法似乎表现得好得多。在左下方,蓝色算法表现相当好,置信区间非常窄;而在右侧,蓝色算法也表现良好,但置信区间非常宽。因此,综合所有这些结果,你会认为,如果在更多领域测试每种算法的性能,就能更好地理解它的效果,并更好地预测它是否可能在现实世界中有用。而我们在这里发现,随着每个实验的进行,我们只是越来越困惑,因为结果彼此之间并不一致。


我们开始更深入地挖掘幕后可能发生了什么。我们想,当然,我们没有自己实现这些算法,我们使用了一些可用的开源代码。所以我们想,也许我们没有找到正确的源代码,也许我们在某个地方得到了一个糟糕的实现。我们开始挖掘不同的实现。我在图中展示的是来自这四种算法之一(称为TRPO)的三种不同的公开可用实现。你在这里看到的是,其中一个版本(蓝色版本)的表现比其他两个版本好得多。
我们想,也许TRPO作为一种策略梯度方法,有点不稳定,代码难以实现。我们查看了其他一些情况,结果非常相似。从一个代码库到另一个代码库,它们声称是相同的算法,应该工作方式相同,对吧?然而,我们在实证性能上看到了非常显著的差异。
随着我们提出越来越多的问题,并深入探究可能解释这些差异的原因,我们注意到,在许多情况下,有许多不同的超参数需要配置。根据你设置这些参数的方式,你会得到非常不同的结果。


大多数代码库都附带一组默认的超参数。人们很容易直接采用那组默认值,不做更改,即开即用。我们发现,一旦你开始调整这些不同的超参数,算法的性能真的会改变。这是一个需要记住的教训:要非常小心超参数是什么、如何设置,以及这可能会如何影响算法在新问题上运行时的性能。


你可能会想说,我们是在比较不同的算法,最公平的比较方式是给它们相同的数据量、相同的计算量,一切都相同。但根据我们的分析,正如我提到的,我们真正发现的是,要得出鲁棒的结论,重要的是更深入地思考这个问题,特别是承认一个事实:不同的算法将有不同的超参数,你不能只是从一个算法到另一个算法使用相同的设置。
不同的方法对这些超参数有不同的敏感性。对于其中一些参数,你可能需要比其他的搜索更长时间、更仔细。哪种方法最好通常取决于你拥有多少数据以及你能负担多少计算量。因此,这将根据你的数据来源以及你试图部署AI系统的平台类型,在不同的应用之间发生巨大变化。
综合以上所有内容,回到主要问题,我认为我今天要传达的主要信息是,我们必须非常小心地解释我们在论文中读到的信息。要非常小心我们如何设置实验,如何比较不同的方法。当我们这样做时,我们可以得出更鲁棒的结论。这实际上回到了科学的基础:科学是一项我们参与的集体活动,其目的真正在于理解和解释现象。要做到这一点,我们必须始终非常小心你做事的方式。
非常感谢。
148:与Martha讨论您的研究成果 🚀


在本节课中,我们将回顾并可视化您在顶点项目中的学习成果,通过观察智能体在学习过程中的行为变化,来加深对强化学习训练过程的理解。
恭喜您完成了顶点项目。
通过成功完成项目中的每一个步骤,您应该已经能够训练出一个智能体,使其能够控制一个模块在月球上着陆。
您还应该对智能体对其某个元参数的敏感程度有所了解。
您已经对解决方案的细节有了很多了解,并查看了学习曲线和参数敏感性图。
因此,在本视频中,我们将转而深入了解智能体在学习过程中的表现。
我们将通过一次运行来可视化智能体的行为,以感受智能体在此问题上可能的学习方式。
当然,亲眼看到我们的智能体学习也很有趣。
这是一段我们智能体经过一些训练后的视频。您会注意到策略仍然不完美,但已经相当不错了,而智能体显然不是一开始就这样的。
请记住,它最初对这个世界一无所知,必须通过试错来学习。
在训练的早期阶段,智能体的行为明显是次优的。
例如,智能体可能在整个回合中只决定开启一侧的推进器,这显然没有成功。
在那之后,有时智能体学会了只使用底部的推进器,然而,这会将智能体远远推离屏幕,导致它获得很大的负奖励。
如果智能体不能一直使用主推进器,也不能一直使用侧推进器,那么显然正确的选择就是什么都不做。
我们可以尝试假设一些可能导致这种情况的原因。一种可能性是神经网络在早期产生了糟糕的表征。
例如,如果侧推动作在某个状态下导致了很高的负奖励,智能体可能会过度泛化,认为侧推动作在所有状态下都很糟糕。
随着表征的改进,智能体能更好地区分不同状态;当然,这只是一个假设,要找出真正的原因还需要一些实验。
经过更多回合的学习后,智能体的表现要好得多。智能体下降的速度稍快了一点,导致一个角落撞到了地面,但从这里开始微调策略相对容易。
本视频的内容就到这里。观看您的智能体着陆的视频很有趣,但这也可能是一种调试和理解智能体的有用方式。只要有可能,就值得花时间进行这种可视化,以更深入地理解您的智能体。
本节课总结
本节课中,我们一起学习了如何通过可视化智能体在学习过程中的行为来评估和洞察其学习进展。我们观察了智能体从随机探索到逐渐掌握着陆策略的演变过程,并探讨了早期次优行为可能的原因,例如神经网络的表征能力不足或过度泛化。这种可视化不仅是检验成果的有趣方式,也是调试和理解智能体行为的重要工具。
强化学习专项课程:P149:课程总结

在本节课中,我们将对第四门课程进行总结,回顾我们构建的完整强化学习系统。
首先,恭喜你完成了第四门课程,并成功构建了一个完整的强化学习系统。让我们快速回顾一下这个系统。在整个顶点项目中,我们逐步添加了用于解决“月球着陆器”问题的工具。
我们首先将问题形式化为一个马尔可夫决策过程,并实现了环境。这主要涉及精确指定奖励函数,以引导智能体成功着陆。
上一节我们介绍了问题形式化,本节中我们来看看如何设计智能体。我们讨论了如何设计一个智能体,使其能在此环境中学习到一个优秀的策略。第一步是确定哪种强化学习算法适合给定的问题设置。我们遵循在第三门课程中构建的课程地图,将范围缩小到三种算法:预期SARSA、SARSA和Q学习。
接下来,我们研究了元参数的选择如何影响智能体的成功。所有具体的实现细节,包括关于函数逼近、探索和优化的细节,都可以被视为元参数。我们如何指定这些参数会对智能体的性能产生重大影响。
以下是几个关键的元参数选择及其常见经验法则:
- 神经网络结构:我们基于常规经验决定了神经网络的层数和激活函数。
- 步长:像步长这样的参数可能难以选择,这引出了项目的最后一部分——对步长进行参数研究。
理解我们的算法和系统对于成功部署至关重要。最后,你得以看到你的智能体实际运行。

我们希望你已经对在实践中应用强化学习方法的细微之处有了一些了解。这其中需要做出许多选择,并且需要相当多的专业知识和经验才能做好。我们的目标是为你提供一些实践经验,希望这能帮助你在未来将强化学习应用于现实世界的努力中。
本节课中我们一起学习了如何从形式化问题、选择算法、调整参数到最终部署,系统地构建一个强化学习智能体来解决“月球着陆器”问题。
150:课程回顾与展望 🎓

在本节课中,我们将一起回顾整个强化学习专项课程的核心内容与学习路径,并对未来的学习与应用进行展望。

恭喜你完成了强化学习专项课程。从第一门课程学习价值函数、策略和序贯决策问题的基本概念开始,我们已经走过了很长的路。
回顾所学知识最简单的方法是再次查看我们的课程地图。
从表格化方法到函数近似 📊
我们首先从表格化设定开始,这让你能在不涉及函数近似带来的额外复杂性的情况下,熟悉强化学习的许多关键概念。
我们最初假设你拥有一个完美的模型,并专注于预测和控制中的核心思想。我们讨论了动态规划方法以及它们如何解决贝尔曼方程。
基于样本的方法与无模型学习 🔄
上一节我们介绍了基于完美模型的方法,本节中我们来看看当智能体不再被给定模型时的情况。我们转向基于样本的方法,智能体主要通过与环境的试错交互进行学习。
以下是智能体不学习模型的相关算法:
- 蒙特卡洛算法:通过完整的回合经验进行学习。
- 时序差分学习算法:利用自举,可以在每个时间步进行学习和策略更新。
这些算法包括用于控制的 Q-learning、Sarsa、Expected Sarsa,以及用于预测的 TD 方法。
引入函数近似 🧠
之后,我们使用函数近似来学习近似的价值函数和策略,重新审视了所有这些概念。

我们首先讨论了蒙特卡洛和时序差分算法如何扩展到使用函数近似。这需要定义一个损失函数,并理解基于梯度的优化方法。
接着,我们探讨了两个新概念:平均奖励和策略梯度方法。
我们学习了使用平均奖励作为在持续任务中表述智能体目标的新方式。我们也学习了策略梯度方法如何通过直接优化平均奖励目标来学习策略。
掌握基础的重要性 ⚙️

本专项课程的目标是为你提供基础知识。理解基本原理对于恰当地使用强化学习至关重要。你现在应该能更好地理解强化学习何时适合解决特定问题,以及如何将你的问题表述为一个强化学习问题。
这个看似简单的事情代表了一大步。人们常常会想:“我如何能将最先进的强化学习技术应用到我的问题上?”而实际上,有时一个非常简单的方法就足够了,或者问题本身最初就没有被很好地构建为强化学习问题。我们希望你现在能更明智地判断。
希望你学到了一些关于在使用强化学习时保持条理性和科学性的方法。你现在知道了形式化你的马尔可夫决策过程或多臂老丨虎丨机问题、确定合适的算法、以及仔细评估和理解你的自主学习系统性能是多么重要。
展望未来 🚀
掌握基础知识是学习更高级强化学习主题的第一步。你在这里学到的知识也将有助于揭开你在博客文章或科学论文中读到的、初看似乎很复杂的算法的神秘面纱。你现在应该能够看到,最先进的算法系统实际上是建立在相对简单的思想之上的。
永远不要为你所不理解的事物所震慑。我的目标是帮助更多人理解并有效地使用强化学习。我期待着看到你运用新技能所取得的成就。
我们非常享受与你共度的时光。第一次学习一个新主题是如此令人兴奋。我们也坚信,强化学习与人工智能将使世界变得更美好。你现在已经准备好在这个更美好的世界中扮演你的角色了。
本节课中我们一起学习了:整个强化学习专项课程的知识体系,从表格化方法、动态规划,到无模型的蒙特卡洛与时序差分学习,再到函数近似、平均奖励和策略梯度方法。我们强调了理解基础原理的重要性,并对如何将知识应用于实际问题以及未来的学习方向进行了展望。

浙公网安备 33010602011771号