阿尔伯塔完整强化学习系统笔记-全-

阿尔伯塔完整强化学习系统笔记(全)

001:月球着陆器问题介绍 🚀

在本节课中,我们将学习如何整合前三门课程的知识,构建一个完整的强化学习系统,以解决“月球着陆器”问题。我们将从问题形式化开始,逐步探讨算法选择、函数逼近器设计等关键细节,并理解这些选择如何影响智能体的最终表现。


在课程3中,我们介绍了如何将函数逼近与强化学习结合使用。我们涵盖了使用神经网络和固定基函数方法(如瓦片编码)来逼近价值函数和策略的方法。

我们讨论了函数逼近如何实现泛化,这有助于智能体更快地学习。但我们也可能因此失去精确区分不同状态价值的能力。

函数逼近器可能无法精确拟合所有状态的价值。智能体因此需要决定如何在各状态间平衡其近似精度,即如何分配其有限的逼近资源。

我们引入了目标函数来具体说明如何平衡近似误差,并讨论了基于梯度的算法来优化这些目标。


掌握了所有这些新知识后,你已经准备好实现一个完整的强化学习系统。你将研究一个问题,该问题突显了在现实世界中应用强化学习时可能面临的一些挑战。

在课程4中,你将综合运用课程1、2和3的知识,让一个月球着陆器在月球上安全着陆。

当我和Adam开始研究一个新问题时,我们通常会先召开会议,集思广益,讨论如何最好地构建问题框架,并收集关于潜在解决方案的想法。通常没有一个绝对正确的解决方案。在整个过程中,我们将与你一起推理,探讨如何为这个问题设计一个智能体。

我们将首先讨论如何将问题形式化为一个马尔可夫决策过程

如果有人只是告诉你“设计一个智能体来让这个月球着陆器着陆”,你必须弄清楚如何将这个目标转化为一个可计算的问题形式。因此,这自然是我们开始的地方。


接下来,我们将思考如何选择一个合适的学习算法。这其中很重要的一部分,实际上是思考算法涉及的所有细节。

这包括确定智能体如何进行探索、选择何种类型的函数逼近架构,以及函数逼近器内部的细节,例如它生成的特征数量等等。本课程的一个重要部分是理解所有这些细节的重要性,以及如何尝试洞察你的算法在不同选择下的行为表现。

实践始于理解。因此,我们不只是空谈理论,让我们直接深入其中,亲手实践,当然,是与“月球尘土”打交道。

002:认识你的导师

在本节课中,我们将认识本课程的两位导师——Martha和Adam,了解他们的背景、研究兴趣以及他们为何认为强化学习是一个重要且充满前景的领域。

👋 导师介绍

我是Martha,阿尔伯塔大学的助理教授。我是Adam,阿尔伯塔大学的研究教授,同时也是DeepMind的高级研究员。

Adam因其在强化学习的预测知识方面的工作而闻名。全球多个研究小组都在基于他的思想进行研究。我个人认为这是他近年来最重要的工作之一,并且其影响力只会越来越大。他还是一位出色的实证研究者,是设计实验以触及关键问题的大师。他一直在努力提升强化学习领域的科学理解。

Martha对强化学习的算法贡献不胜枚举。她开发了多种新的离策略学习算法、新的策略梯度方法,并在表示学习方面做出了数十项令人印象深刻的贡献。她确实是强化学习领域冉冉升起的年轻新星之一。她恰好也是我最频繁的合作者以及我的人生伴侣。

🧑‍💻 进入计算机科学的契机

上一节我们认识了两位导师,本节中我们来看看他们是如何进入计算机科学领域的。

Martha的经历:
我成长于东海岸。高中时,我对科学非常感兴趣,比如物理、化学、生物,但一直没有找到特别契合的方向。于是,我有些随机地选修了一门关于计算机科学和编程的课程,用的还是GW-BASIC语言。那对我来说真是一个决定职业生涯的时刻。我记得第一次实现一个if语句或for循环时,那种能让计算机为我执行一系列指令的感觉太神奇了。从那时起,我就注定要在大学学习计算机科学了。

Adam的经历:
那么,你为何开始研究强化学习呢?为了研究生学业,我搬到了阿尔伯塔大学。我来这里原本是想做并行分布式计算,那是我本科时关注的方向。所以我选了很多系统课程。当时我还需要再选一门选修课,于是我采用了一个非常合理的策略:我浏览了教授们的照片,然后挑选了看起来最友善的那位教授。没错,那就是Rich Sutton,课程是“强化学习导论”。那门课太棒了,非常鼓舞人心。那是我第一次接触人工智能或任何形式的机器学习。我记得课程早期的一个作业是实现SARSA算法来解决一个网格世界问题。这又是一个决定性的时刻:看着智能体学会解决这个迷宫,它接收到的唯一反馈就是每步-1的奖励信号,但它却神奇地找到了迷宫中那条极其高效的路径。这再次让我感到惊奇,我被迷住了,并决定余生都要继续从事这个领域。

🧠 投身AI研究的历程

了解了他们进入计算机领域的契机后,我们再来看看Martha是如何开始人工智能研究的。

我本科其实是从数学开始的。我一直认为函数和动力系统非常优美。后来我只是为了好玩选了一门计算机科学课程,结果发现真的很有趣,于是我就继续同时学习数学和计算机科学。实际上,这两个学科对于人工智能和机器学习来说结合得非常好。之后我在暑期做了一些AI研究,并从此继续了下去。我留在这个领域,是因为随着时间的推移,它不仅仅是关于数学中的函数了。这真的是一个你可以进行大量合作的社区,你可以建立一个帮助他人的职业生涯。在我的日常工作中,我指导很多人,并与大团队一起攻克难题。能够在一个团队中研究如此有趣的问题,这真是太棒了。

🎓 研究生阶段的重要收获

对于可能想攻读强化学习研究生学位的学习者,Adam分享了他认为研究生阶段最重要的收获。

也许令人惊讶的是,我学到的一个经验可能适用于所有科学领域,事实上,适用于任何形式的研究:那就是真正热爱去理解事物的细节,专注于小问题并真正、彻底地理解它们。我认为这一点在广泛的领域中都非常适用。这也是我传授给我的学生、在我的课程中强调,并着重教导我的研究生的一点。我希望与学习这个专项课程的人们分享这一点。

❤️ 工作中最珍视的部分

接下来,Adam谈到了他工作中最珍视的部分。

我热爱做研究,但有时这也会让人有点疲惫,比如工作时间很长,同行评审过程可能有点令人沮丧。在这些时候,当你退一步审视自己的研究时,它可能显得有点渺小,有点微不足道,很难看清它将如何发展,如何影响世界并让它变得更好。所以在那些时候,你总是可以回归到教学和指导上。教学是你帮助人们第一次学习事物、理解你所在领域如何运作的地方,这非常令人兴奋。你也是他们职业生涯开端的一部分,无论他们最终进入学术界、工业界还是创办自己的公司。能成为这个过程的一部分,是一种非常奇妙的体验。你知道,在我的一周中,对我来说最好的一天总是那些日程排满了与学生会议的日子,我可以帮助他们解决问题,更好地理解强化学习。

🚀 为何强化学习如此重要

那么,为什么他们认为强化学习值得投入研究呢?以下是他们的观点。

Adam的观点:
我认为强化学习的潜力非常大,但仍然存在许多开放的挑战。机器学习已经开始被更广泛地使用,但强化学习目前只在少数几个领域得到应用。但同时,我认为强化学习可以产生非常大的影响。我认为在未来十年左右,我们将看到更多的控制工程师在他们的系统中实际使用强化学习。我们真的会看到,它是一个可以在更大的工程系统中帮助进行自动化决策的工具。但我认为,要真正实现这一点,我们需要在强化学习方面取得一些进展。我们需要更多地思考如何开发出稳健的算法,以及如何让人们乐于使用这些算法。所以我认为,随着在工业界的应用,我们需要思考如何改进强化学习算法,让这两件事能够共同发生。

Martha的观点:
很自然地,我认为强化学习是研究人工智能、推动解决人工智能问题的正确框架。但强化学习对我来说也很重要,因为我对发展性学习系统非常感兴趣。你可以想想人类婴儿在地上玩耍,或者幼年动物学习认识世界。我想了解这些系统及其工作原理。如果你思考这些系统,它们能在极短的时间内学到海量的知识。它们学习如何爬行,学习自己的身体如何工作,学习如何与环境互动、操纵物体、与世界中的其他智能体交流。总的来说,它们是非常强大的学习系统,而这一切只发生在几周到几个月的时间里。这真的令人震惊,感觉我们还有大量的工作要做,才能接近这类系统。所以我真的想理解这些系统可能使用的算法和表示方法,而我认为强化学习是观察和理解这些事物的正确视角。

🔮 强化学习的未来应用

应用总是推动领域兴趣和兴奋点的关键。强化学习在游戏和一些工业控制问题上已有一些应用,但未来的重大进展会在哪里?

Adam的展望:
我认为,强化学习的核心是一种通用的自动化决策方法。它是一个将在我们许多工程系统中帮助我们的工具。因此,我认为它将真正起飞的地方是工业控制领域。在工业控制中,专家们确实在寻找方法来优化他们的系统性能。所以我们将看到它被用于降低能源成本,或节省工业控制系统中的其他类型成本。在专家手中,我们真的可以在不远的将来让这些算法良好工作。所以我真的把它看作是一个促进专家工作的工具,而不是说取代人或使其自动化。


本节课总结:
本节课中,我们一起认识了本课程的两位导师Martha和Adam。我们了解了他们进入计算机科学和强化学习领域的个人经历,他们从研究生涯中获得的宝贵见解,以及他们为何对强化学习的未来充满热情与期待。他们认为强化学习不仅是实现通用人工智能的关键框架,也是解决现实世界工业控制与决策问题的强大工具,其发展需要算法鲁棒性与实际应用的共同推进。

003:与玛莎的初步项目会议-形式化问题

概述

在本节课中,我们将学习如何将一个复杂的现实世界任务——月球着陆——形式化为一个强化学习问题。我们将介绍一个模拟的“月球着陆器”环境,并详细说明其状态空间、动作空间以及你需要实现的奖励函数。


想象一下,你想要在月球上着陆。这看起来是一项艰巨的任务,我们需要了解大量的物理学和控制理论,并且必须预见无数可能出错的情况。

但是,如果我们将其构建为一个强化学习问题呢?

我们的智能体不需要知道真实世界的动力学原理。

它可以通过简单的交互来学习。你的智能体将做到这一点:月球着陆器将与世界交互,尽管不清楚其动力学原理。

但是,为了让着陆器按照你的意愿行动,你必须设计奖励函数。

当然,通过试错来学习如何在月球上着陆可能有点危险且成本高昂。

因此,我们将在模拟器中训练我们的智能体,以找到一个稳健且高效的着陆策略。

然后,我们可以将智能体部署到月球上,并允许它继续学习。

调整其价值函数和策略,以适应我们的模拟器与现实之间的差异。

这意味着在模拟器中训练时,我们不必担心安全或金钱问题。

但请记住,我们在这里使用的是非常简单的模拟。

它并不能反映外层空间的所有复杂性。

但我们不能使用高保真模拟器,因为我们需要你的实验能够合理地快速运行。

即使使用我们的高保真模拟器,我们的智能体在部署时可能仍然会遇到问题。

要让在模拟器中训练的智能体迁移到现实世界,需要许多技术细节。

但这个主题远远超出了这个小项目的范围。

我们的目标是帮助你处理一个中等有趣的问题,并帮助你获得将问题的文字描述转化为具体解决方案的经验。

在本视频中,我们将向你介绍你将使用的环境。

你将理解状态空间、动作空间以及你需要实现的奖励函数。

这就是月球着陆器环境的样子。

以下是智能体成功着陆的几个例子。

我们的目标是让月球着陆器降落在位于两个黄色旗帜之间的着陆区。

着陆区始终位于同一位置,但其周围的地形可能会发生变化。

我们可以点燃主推进器或任意一个侧推进器来调整模块的方向并减缓其下降速度。

状态由八个变量组成,包括模块的XY位置和速度。

以及它相对于地面的角度和角速度。

我们每条腿上还有一个传感器,用于确定它是否接触地面。

让我们更深入地看看你将实现的环境部分。

环境接收动作输入,该动作与当前状态一起传递给动力学函数,以产生下一个状态。

下一个状态和动作随后将被传递给一个编码了期望行为的奖励函数。

最后,环境将输出下一个状态和奖励。

智能体可以采取四种动作。智能体可以点燃主推进器。

点燃左侧推进器,点燃右侧推进器,或者在此时间步内什么都不做。

你需要为此环境实现奖励函数。

燃料是昂贵的,主推进器会消耗大量燃料。

我们希望阻止智能体不必要地使用主推进器。

侧推进器消耗的燃料较少,因此智能体频繁使用它们的负面影响较小。我们希望鼓励智能体向目标移动。

因此,它将根据自上一个时间步以来它离目标移动了多远而损失一些奖励。

让我们尝试阻止智能体学习以可能损坏设备的方式驾驶模块着陆,同时也要阻止它飞向外层空间或遥远的陨石坑而消失不见。

智能体将因其设法让每条腿接触地面而获得奖励。

并且,智能体将以适当的速度成功降落在着陆垫上时,将获得一大笔奖励。

更多细节,例如什么是适当的速度,将在笔记本中提供。

总结

本节课中,我们一起学习了如何将月球着陆任务形式化为强化学习问题。我们介绍了“月球着陆器”模拟环境,明确了其状态由八个变量(如位置、速度、角度等)构成,动作空间包括点燃主/侧推进器或保持不动。核心任务是设计一个奖励函数,该函数需要权衡燃料成本、朝向目标的移动、安全着陆以及成功降落在指定区域等多个目标。你本周的目标就是为这个问题实现这个奖励函数。祝你在构建环境时好运。

004:论什么是资格迹以及它们为何如此命名

概述

在本节课中,我们将学习强化学习中的一个核心概念——资格迹。我们将探讨资格迹的起源、其命名的原因,以及它在学习算法中的作用。通过理解神经元学习机制与强化学习算法之间的联系,你将看到资格迹是如何被我们一直使用的。

资格迹的起源与概念

资格迹的概念源于哈里·克洛夫的假说。哈里是美国空军科学研究办公室航空电子学理事会的一位资深科学家。他在1972年发表了一篇专著,并在1982年出版的《享乐主义神经元》一书中提出了他的核心思想。

他的假说认为,神经元个体是享乐主义者,它们努力最大化局部的“快乐”类似物,同时最小化局部的“痛苦”类似物。换句话说,根据他的观点,每个神经元都是一个强化学习智能体,而大脑则是一个由相互作用的强化学习智能体组成的社会。

为了理解克洛夫的假说,我们需要了解一些神经元的基础知识。神经元的输出或动作被称为动作电位,通过神经元的轴突传递给其他神经元。当神经元产生动作电位时,我们称其为“放电”。动作电位通过突触作用于其他神经元,而突触具有效能或权重/强度,这些会在学习过程中发生改变。

下图是一个突触的示意图。动作电位通过顶部的突触前末梢到达,并影响底部的突触后神经元。我们通常认为突触权重或效能存在于这个连接中,而“资格”这个概念通常被认为是由轴突内部的生物化学过程实现的,可能就在此处所示的突触前末梢。

克洛夫的具体假说如下:当神经元放电产生一个动作电位时,所有促成此次放电的突触都变得有“资格”去改变其效能或权重。如果在此动作电位之后的一个合适时间窗内出现了奖励的增加,那么所有具备资格的突触的效能就会增加(如果是惩罚,则减少)。

这就引出了一个问题:资格迹的形状应该是怎样的?资格迹是存储在突触处、基于神经元先前活动的记忆记录。

资格迹的形状与类型

克洛夫指出,神经元嵌入在持续时间各不相同的众多反馈回路中。有些反馈回路在神经系统内部,因此非常短;有些则通过环境延伸到生物体外部,再通过感觉器官返回,因此是更长的反馈回路。所以,神经元活动的后果会以不同的时间延迟返回给它。

资格迹的形状就是这些反馈回路持续时间的一种直方图。下图展示了资格迹可能呈现的形状:在神经元放电后,有少数非常短的反馈回路会迅速返回信息;可能在某个时间点(例如600毫秒)达到最大数量(当然,不同神经元会不同);然后还有少数非常长的反馈回路。因此,克洛夫假设的资格迹形状大致如下所示。

资格迹主要分为两种类型:

  • 依存性资格迹:取决于突触前和突触后活动,正如克洛夫所假设的。突触前输入需要参与引发突触后活动。这导致了一个三因素学习规则:突触前活动、突触后活动以及稍后到达的强化输入。
  • 非依存性资格迹:仅由突触前活动触发。这导致了一个两因素学习规则:突触前活动和强化输入,而不依赖于突触后神经元的活动。

下图展示了这些概念。顶部的曲线是几个突触前动作电位,下面的曲线是几个突触后动作电位。可以看到,在两个实例中,它们大致同时发生,表明突触前动作电位有助于引起突触后动作。对于依存性资格迹,只有这两个实例会触发资格迹。而非依存性资格迹则会包含最后一个实例,它仅由突触前脉冲触发,即使当时没有突触后脉冲。

资格迹在演员-评论家架构中的应用

现在,看看你们已经学过的演员-评论家架构(特别是在策略梯度方法中)。事实证明,演员和评论家之间的主要区别在于:演员使用依存性资格迹,而评论家使用非依存性资格迹

因此,在第一种情况下,演员试图最大化强化信号,而在评论家的情况下,它试图预测强化信号。这主要就是由于这两种资格迹类型的差异造成的。

强化学习中的简化与实现

在强化学习中,我们使用了克洛夫所建议的那种迹的简化版本,它看起来像这样:一个指数衰减的迹。相比于我之前展示的更复杂的迹,这种形式更容易实现和分析。但有时,更接近克洛夫原始设想的迹可能表现更好,不过目前我还不清楚是否有深入研究这个问题的相关工作。

实际上,你们一直在使用资格迹,尽管是最简单的那种。仅仅一个时间步的延迟就可以被认为是用资格迹实现的。如果这是时间线,事件发生在时间 t,那么在 t+1 时刻就是迹。这意味着反馈回路只考虑了一个时间步长,这是唯一被考虑的情况。所以,这可以说是一种退化的情况,你们研究过的几乎所有强化学习算法都将其作为其机制的一部分。

总结

本节课中,我们一起学习了资格迹的核心概念。以下是几个关键要点:

  • 资格迹由哈里·克洛夫作为其“享乐主义神经元”假说的一部分提出。
  • 资格迹记录了突触过去的活动,以便在该活动之后到达的反馈能够改变突触的强度。
  • 在演员-评论家架构中,演员和评论家的主要区别在于:演员的资格迹是依存性的,而评论家的是非依存性的。
  • 资格迹对于在突触学习规则中考虑信号时序的作用至关重要。
  • 最后,神经科学正在积累证据,表明神经系统确实存在非常类似于资格迹的机制。

005:马尔可夫决策过程回顾 02_02_01

在本节课中,我们将要学习马尔可夫决策过程。我们将从多臂老丨虎丨机问题的局限性出发,理解为什么需要MDP框架来建模更复杂的现实世界问题。我们将通过一个兔子的例子,直观地展示MDP的核心概念,并最终用数学公式来形式化地定义MDP的动态特性。

从老丨虎丨机到序列决策 🐇

上一节我们介绍了多臂老丨虎丨机问题,它引出了许多有趣的问题。然而,它没有包含现实世界问题的许多方面。

在老丨虎丨机问题中,智能体在每个时刻面临相同的情况,并且总是存在一个最优动作。但在许多问题中,不同的情况需要不同的应对策略。此外,我们现在选择的动作会影响未来能获得的奖励数量。

马尔可夫决策过程形式化地捕捉了现实世界问题的这两个方面。

一个简单的例子:兔子的选择 🥕

让我们从一个简单的例子开始,来突出老丨虎丨机问题和MDP之间的区别。

想象一只兔子在田野里游荡寻找食物,它发现自己处于这样一种情况:右边有一根胡萝卜,左边有一棵西兰花。我们的兔子更喜欢胡萝卜,所以吃胡萝卜会产生+10的奖励。而吃西兰花只产生+3的奖励。

但是,如果后来兔子发现自己处于另一种情况:右边是西兰花,左边是胡萝卜呢?显然,兔子此时会倾向于向左走,而不是向右走。多臂老丨虎丨机问题无法解释“不同情况需要不同动作”这一事实。

它在另一个方面也有局限。假设我们确实考虑了不同情况下的不同动作。在这里,兔子似乎想向右走以获得胡萝卜。然而,向右走也会影响兔子接下来看到的情况。

假设就在胡萝卜的右边,有一只老虎。如果兔子向右移动,它就能吃到胡萝卜。但之后,它可能不够快,无法逃脱老虎。如果我们考虑到行动的长期影响,兔子应该向左走,选择西兰花,给自己一个更好的逃跑机会。

一个只关心即时奖励的“老丨虎丨机兔子”会选择胡萝卜。但通过考虑我们决策的长期影响,可以做出更好的决定。

定义MDP的核心要素 📝

现在让我们看看随着兔子采取行动,情况是如何变化的。我们将这些情况称为状态。在每个状态下,兔子选择一个动作。例如,兔子可以选择向右移动。

基于这个动作,世界会转变为一个新的状态并产生一个奖励。在这个例子中,兔子吃了胡萝卜并获得+10的奖励。然而,兔子现在紧挨着老虎。假设兔子选择了向左的动作。世界转变为一个新的状态,老虎吃掉了兔子,兔子获得-100的奖励。

从原始状态,兔子也可以选择向左移动,然后世界转变为一个新的状态,兔子获得+3的奖励。这个图表现在显示了两种可能的状态序列,实际发生的序列取决于兔子采取的行动。

我们可以用一个通用框架来形式化这种交互。在这个框架中,智能体环境在离散的时间步上进行交互。

在每个时间步t,智能体从环境接收一个状态S_t,它来自一组可能的状态集合S。幻灯片上显示的配置就是一个状态的例子。

基于这个状态,智能体从一组可能的动作集合A(S_t)中选择一个动作A_tA(S_t)是状态S_t中有效动作的集合。向右移动就是一个动作的例子。

一个时间步之后,部分基于智能体的动作,智能体发现自己处于一个新的状态S_{t+1}。例如,这个状态是兔子紧挨着老虎的状态。

环境还提供一个标量奖励R_{t+1},它来自一组可能的奖励集合R。在这个例子中,吃胡萝卜的奖励是+10。

下图总结了MDP框架中的智能体-环境交互。这种交互生成了一条由状态、动作和奖励组成的经验轨迹。动作既影响即时奖励,也影响未来的状态,并通过那些状态影响未来的奖励。

形式化动态特性:转移概率函数 🧮

那么,我们如何表示这种交互的动态特性呢?与老丨虎丨机问题一样,结果是随机的,因此我们使用概率的语言。

当智能体在一个状态下采取一个动作时,存在许多可能的下一个状态和奖励。转移动态函数 P 形式化了这个概念。

给定一个状态s和动作aP告诉我们下一个状态s‘和奖励r的联合概率。在本课程中,我们通常假设状态、动作和奖励的集合是有限的,但别担心,你也会学习能够处理无限集和不可数集的算法。

由于P是一个概率分布,它必须是非负的,并且对所有可能的下一个状态和奖励的求和必须等于1。

公式表示:

P(s‘, r | s, a) = Pr{ S_{t+1} = s‘, R_{t+1} = r | S_t = s, A_t = a }

并且满足:

∑_{s‘ ∈ S} ∑_{r ∈ R} P(s‘, r | s, a) = 1, 对于所有 s ∈ S, a ∈ A(s)

需要注意的是,未来的状态和奖励仅取决于当前的状态和动作。这被称为马尔可夫性。这意味着当前状态是充分的,记住更早的状态不会改善对未来的预测。

总结与展望 🎯

本节课中我们一起学习了马尔可夫决策过程。MDP为序列决策制定提供了一个通用框架,其动态特性由一个概率分布定义。

总结一下,MDP的核心要素包括:

  • 状态:描述环境情况的变量。
  • 动作:智能体可以做出的选择。
  • 奖励:环境对智能体动作的即时反馈。
  • 转移概率函数 P:定义了在给定状态和动作下,转移到下一个状态并获得相应奖励的概率。

在下一个视频中,我们将讨论几种决策制定任务,并将每一种形式化为一个MDP。

006:区分回合制与持续型任务 🎮

在本节课中,我们将通过具体例子,学习如何判断一个强化学习问题应该被建模为回合制任务还是持续型任务。理解这一区别对于正确设计智能体及其学习目标至关重要。

回合制任务示例 🕹️

上一节我们介绍了回合制任务的基本概念,本节中我们来看看一个具体的例子。

考虑一个智能体学习玩一个简单的视频游戏。玩家(用蓝色方块表示)通过收集白色宝藏方块来获得分数。当玩家触碰到绿色敌人方块时,游戏结束。

这个游戏很自然地可以被建模为一个回合制马尔可夫决策过程。智能体的目标是在游戏结束前,通过收集尽可能多的宝藏来获得高分。

以下是该任务的关键要素:

  • 状态:一个与当前游戏屏幕对应的像素值数组。
  • 动作:四个方向:上、下、左、右。
  • 奖励:每当智能体收集一个宝藏方块时,获得 +1 的奖励。
  • 回合终止:当智能体触碰到任意一个绿色敌人时,当前回合结束。无论回合如何结束,下一个回合都会从智能体位于屏幕中央且没有敌人出现的初始状态重新开始。

顺便一提,你现在看到的这个智能体是通过Q学习算法训练的,它在这个游戏中表现得相当不错。在课程的第二部分,你将学习这个算法并亲自实现它。

持续型任务示例 💻

了解了回合制任务后,我们再来看看一个持续型任务的场景。

假设有一个智能体负责在一组服务器上调度作业。我们有三台服务器,供强化学习研究人员运行实验。研究人员将具有不同优先级的作业提交到一个队列中。

以下是该任务的关键要素:

  • 状态:空闲服务器的数量,以及队列顶部作业的优先级。
  • 动作:拒绝或接受队列顶部的作业(如果有空闲服务器)。
  • 奖励
    • 接受作业会运行它,并产生一个等于该作业优先级的正奖励。
    • 拒绝作业会产生一个与优先级成比例的负奖励,并将该作业送回队列末尾。

智能体需要谨慎调度低优先级作业,因为这可能会阻碍后续高优先级作业的调度。当服务器完成当前作业后,会重新变为可用状态。研究人员会持续地向队列中添加新作业,而智能体则不断地决定接受或拒绝它们。

由于这个过程永远不会停止,因此它非常适合被描述为一个持续型任务

总结 📝

本节课中,我们一起学习了回合制任务与持续型任务的具体例子。

  • 回合制任务:能够自然地分解为独立的回合,每个回合有明确的开始和结束(如电子游戏的一局)。
  • 持续型任务:被假定为无限期持续进行,没有自然的中断点(如持续运行的服务器作业调度系统)。

现在,你应该能够根据问题的特性,判断哪种任务形式化方法更为合适了。

007:与尼科的会议-选择学习算法

在本节课中,我们将为“月球着陆器”项目选择合适的学习算法。我们将回顾问题形式化,并利用课程三中的算法地图,系统地筛选出最适合本项目的算法。

概述

本周,我们将开始讨论如何解决月球着陆器这个马尔可夫决策过程问题。核心任务是,从已学过的众多算法中,选择一个最适合本问题的算法。

回顾问题与算法地图

上一节我们已将月球着陆问题形式化为一个MDP。本节中,我们来看看如何利用课程三的算法地图来指导我们的选择。

以下是算法决策流程:

  1. 能否用表格表示价值函数?
    首先,回顾月球着陆器的状态空间。智能体观测到着陆器的位置、方向、速度和接触传感器等八个状态变量。其中六个是连续变量,这意味着我们无法用表格来精确表示所有状态。此外,我们希望利用泛化能力来加速学习。因此,表格型方法不适用

  2. 这适合建模为平均奖励问题吗?
    接下来,思考问题的动态特性。月球着陆器从低轨道开始下降,直到在月球表面静止。这个过程会不断重复,每次新的着陆尝试都独立于上一次的结果而开始。这正是分幕式任务的定义。平均奖励公式适用于持续式任务,因此在这里不是最佳选择。我们可以排除平均奖励分支的算法

  3. 是否可能且有益于在每个时间步更新策略和价值函数?
    我们可以使用蒙特卡洛方法或时序差分方法。考虑在月球上着陆模块:如果在幕中任何传感器受损,我们希望能在幕结束前就更新策略。这类似于我们讨论过的“开车回家”的例子。我们预计时序差分方法在这类问题上表现更好。

  4. 最终目标是什么?
    最后,不要忘记我们的目标。我们希望在模拟器中学习一个安全、鲁棒的策略,以便能在月球上使用。我们希望学习一个能最大化奖励的策略,因此这是一个控制任务

经过以上筛选,我们剩下三个候选算法:SARSA、期望SARSA和Q学习。

在候选算法中做出最终选择

由于我们使用函数近似,学习一个ε-软策略将比学习一个确定性策略更鲁棒。请记住那个由于状态混叠导致确定性策略次优的例子。

以下是最终决策考量:

  • 期望SARSA和SARSA都允许我们学习最优的ε-软策略。
  • Q学习则不能保证这一点。

因此,我们首先排除Q学习。

现在需要在期望SARSA和SARSA之间选择。我们在之前的视频中提到过,期望SARSA通常比SARSA表现更好。因此,我们选择排除SARSA。

总结

本节课中,我们一起学习了如何为月球着陆器项目系统地选择学习算法。我们回顾了问题的MDP形式,并利用算法决策地图,逐步排除了不合适的选项。最终,我们选择了期望SARSA算法作为智能体实现的基础。下周我们将基于此算法继续构建我们的智能体。

008:期望Sarsa算法详解 🧠

在本节课中,我们将学习第三种时序差分控制方法——期望Sarsa。我们将探讨其核心思想、更新规则,并与之前学过的Sarsa和Q学习算法进行比较。

上一节我们介绍了Sarsa和Q学习这两种时序差分控制方法。本节中,我们来看看另一种基于动作值函数贝尔曼方程的算法:期望Sarsa。

核心思想:从采样到期望计算

回顾动作值函数的贝尔曼方程,其中包含了对下一个“状态-动作”对值的期望。这个期望可以分解为对可能的下一个状态和可能的下一个动作的求和。

Sarsa算法通过从环境中采样下一个状态,并从其策略中采样下一个动作来估计这个期望。但智能体本身已知其策略,为何还需要采样下一个动作?它应该可以直接计算期望。具体而言,我们可以对所有可能的下一个动作的值进行加权求和,权重即为策略下采取每个动作的概率。

公式表示
E[Q(S', A')] = Σ_a π(a|S') * Q(S', a)

显式计算下一个动作的期望,就是期望Sarsa算法背后的核心思想。

算法更新规则

由于期望Sarsa仍然基于动作值函数的贝尔曼方程,因此其学习更新遵循熟悉的形式。该算法与Sarsa几乎相同,关键区别在于其时序差分误差使用的是下一个动作值的期望估计,而非下一个动作值的采样值

这意味着在每一步,智能体都需要根据策略下各动作出现的可能性,对下一个状态的所有动作值进行平均。

代码描述更新规则

# 假设已知策略概率 pi 和下一个状态的所有动作值 Q_next
expected_next_q = sum(pi[a] * Q_next[a] for a in actions)
td_target = reward + gamma * expected_next_q
td_error = td_target - Q_current
Q_current = Q_current + alpha * td_error

稳定性优势与计算代价

显式计算期望带来一个巨大优势:期望Sarsa的更新目标比Sarsa更稳定。

让我们通过一个例子来更清楚地说明这一点。在一个中间奖励确定为正的示例中,即使Sarsa和期望Sarsa都从下一个状态的真实动作值开始,Sarsa对下一个动作的采样仍可能导致其更新方向错误。它依赖于在多次更新的期望中方向是正确的。相比之下,期望Sarsa的更新目标是完全准确的,不会使估计值偏离真实值。

总的来说,期望Sarsa的更新目标方差比Sarsa低得多。然而,较低的方差也伴随着一个缺点:随着动作数量的增加,计算下一个动作的平均值会变得更加昂贵。当存在许多动作时,计算平均值可能需要很长时间,尤其是这个平均值需要在每个时间步都进行计算。

以下是期望Sarsa与Sarsa的简要对比:

  • 更新目标:期望Sarsa使用期望值,Sarsa使用采样值。
  • 方差:期望Sarsa的更新方差更低,更稳定。
  • 计算成本:期望Sarsa需要计算加权平均,在动作空间大时成本更高;Sarsa只需采样,计算更高效。

总结

本节课中,我们一起学习了期望Sarsa算法。该算法的核心在于显式计算其策略下的期望值,而非进行采样。这种做法虽然比采样计算代价更高,但带来了更低的方差和更稳定的学习过程。理解期望Sarsa有助于我们更全面地认识时序差分控制方法的谱系,并在实际应用中根据问题特性(如对稳定性的要求、动作空间的大小)在算法间进行权衡选择。

009:Q学习算法回顾 🧠

在本节课中,我们将学习Q学习算法,并探讨它与贝尔曼最优方程之间的关系。Q学习是强化学习领域一个经典且重要的在线学习算法。

Q学习算法简介

Q学习算法于1989年被提出,是最早的主要在线强化学习算法之一。近年来,许多强化学习的应用,例如学习玩雅达利游戏、控制交通信号灯,甚至自动配置网络系统,都基于这一单一算法。

Q学习伪代码解析

以下是Q学习算法的伪代码结构。我们之前见过类似的格式:智能体在状态中选择一个动作,执行该动作,然后观察下一个状态和奖励。接着,智能体进行一次更新,循环重复。

初始化 Q(s, a)
对于每一个回合:
    初始化状态 s
    当状态 s 不是终止状态时:
        根据策略(如ε-greedy)从状态 s 中选择动作 a
        执行动作 a,观察奖励 r 和下一个状态 s'
        Q(s, a) ← Q(s, a) + α [ r + γ * max_a' Q(s', a') - Q(s, a) ]
        s ← s'

在众多熟悉的元素中,Q学习的新颖之处在于其动作价值更新方式。其更新目标为:奖励 Rt+1 + γ * 后续状态中的最大动作价值。这与SARSA算法不同,SARSA在其更新目标中使用的是下一个“状态-动作”对的价值。

Q学习与贝尔曼最优方程的关系

Q学习为何使用最大值,而不是下一个具体的“状态-动作”对?这种联系可以追溯到动态规划的内容。

SARSA的更新方程与动作价值的贝尔曼方程非常相似。实际上,SARSA是一种基于样本的算法,用于求解给定策略下的动作价值贝尔曼方程。

Q学习同样使用环境样本来求解一个贝尔曼方程。但它使用的不是标准的贝尔曼方程,而是动作价值的贝尔曼最优方程。最优方程使Q学习能够直接学习最优动作价值函数Q*,而无需在策略改进和策略评估步骤之间切换。

尽管SARSA和Q学习都基于贝尔曼方程,但它们基于的是非常不同的贝尔曼方程。

  • SARSA是基于样本的策略迭代版本,它使用依赖于固定策略的贝尔曼方程。
  • Q学习是基于样本的价值迭代版本,它迭代地应用贝尔曼最优方程。

应用贝尔曼最优方程会严格改进价值函数,除非它已经是最优的。因此,价值迭代会持续改进其价值函数估计,并最终收敛到最优解。同理,只要智能体持续探索并对状态-动作空间的所有区域进行采样,Q学习也会收敛到最优价值函数。

本节总结

本节课中,我们一起学习了Q学习算法,并描述了它与贝尔曼最优方程之间的核心联系。Q学习通过直接逼近最优动作价值函数,为求解强化学习问题提供了一种高效且理论基础坚实的途径。

010:平均奖励与差分值函数

在本节课中,我们将学习一种用于持续任务的新问题表述方法——平均奖励设定。我们将了解其核心概念,并理解为何在某些情况下,基于平均奖励的最优策略会与基于折扣奖励的最优策略不同。

持续任务与折扣方法的局限性

上一节我们介绍了折扣奖励在平衡短期与长期收益中的应用。然而,这并非表述持续任务的唯一方式。

在持续任务中,我们可能关注极长视野下的性能表现。到目前为止,我们使用折扣因子来处理持续问题,以平衡短期表现和长期收益。但这种方法存在局限性。

近视MDP示例

今天我们将通过一个称为“近视MDP”的简单示例来探讨这个问题。想象一个状态排列成两个相交环的任务。在大多数状态下,只有一个可用动作,因此无需做出决策。仅在一个特定状态S,智能体可以决定遍历哪个环。这意味着存在两种确定性策略:遍历左环或遍历右环。

奖励在所有地方都为零,除了每个环中的一个转移。在左环中,紧接状态S之后,奖励为+1。在右环中,紧接状态S之前,奖励为+2。

直观上,你会选择右边的动作,因为你知道会获得+2的奖励。但价值函数会告诉我们怎么做呢?

折扣价值分析

如果我们使用折扣方法,这两种不同策略下状态S的价值是多少?

选择左动作的策略的价值为:
V_L = 1 / (1 - γ^5)

选择右动作的策略的价值为:
V_R = (2 * γ^4) / (1 - γ^5)

让我们思考在特定γ值下,状态S在这两种策略下的价值。

  • 如果γ=0.5,V_L ≈ 1V_R ≈ 0.1。这意味着在这种更短视的折扣下,采取左动作的策略更优。
  • 如果γ=0.9,V_L ≈ 2.4V_R ≈ 3.2。因此现在我们更倾向于另一种策略。

事实上,我们可以计算出使智能体偏好向右策略所需的最小γ值。γ需要至少为0.841。

这里的问题是,折扣幅度取决于具体问题。对于这个例子,0.85就足够大了,但如果每个环有1000个状态,这个折扣因子就需要超过0.99。通常,确保智能体行为能最大化长期奖励的唯一方法是不断将折扣因子向1增加。根据问题不同,我们可能需要γ非常大。请记住,在持续设定中我们不能将其设为1,因为那样回报可能是无限的。

那么,使用较大的γ有什么问题呢?较大的γ值也可能导致更大、更不稳定的求和结果,这可能难以学习。那么,有替代方案吗?

平均奖励目标

让我们讨论一种称为平均奖励的新目标。

想象智能体与世界交互了H步。这是它在这些步骤中平均获得的奖励,换句话说,是它的奖励率。如果智能体的目标是最大化这个平均奖励,那么它对近期和远期奖励的关心程度是相等的。

我们用r(π)表示策略π的平均奖励。更一般地,我们可以使用状态访问分布μ来书写平均奖励:
r(π) = Σ_s μ_π(s) Σ_a π(a|s) Σ_{s‘, r} p(s’, r|s, a) r

内层项是策略π下状态的期望奖励。外层求和取该状态被访问频率的期望。合起来,我们得到跨状态的期望奖励,即策略的平均奖励

在近视MDP示例中,两种可能的确定性策略会无限期地访问左环或右环。在这两种情况下,每个环中的五个状态被访问的次数相等。

  • 在左环中,除了一个获得+1的状态外,所有状态的即时期望奖励为+0。这导致平均每5步获得1的奖励,即平均奖励为0.2。
  • 在右环中,大多数状态的即时期望奖励也是+0,但这次最后一个状态获得+2。这给出平均每5步获得2的奖励,即平均奖励为0.4。

我们可以看到,平均奖励更倾向于总体上获得更多奖励的策略,而无需考虑越来越大的折扣因子。

差分回报与差分值函数

平均奖励的定义对于判断一个策略是否优于另一个策略是直观的,但我们如何判断从一个状态出发的哪个动作更好呢?我们需要的是这个新设定下的动作价值。

第一步是弄清楚回报是什么。在平均奖励设定中,回报是根据奖励与平均奖励r(π)之间的差值来定义的。这被称为差分回报

让我们看看在近视MDP中差分回报是什么。差分回报表示智能体从当前状态和动作开始,与遵循该策略的平均奖励相比,将多获得多少奖励。

差分回报只有在减去的常数等于真实平均奖励时,才是一个收敛的和。如果减去一个更低或更高的数字,和将发散到正无穷或负无穷。

现在我们有了平均奖励的有效回报定义,我们可以像往常一样将价值函数定义为期望回报。类似地,我们也可以定义差分值函数,作为从给定状态(或状态-动作对)开始,遵循策略的期望差分回报。

这个量捕捉了智能体从特定状态开始,与如果遵循固定策略在所有状态上平均获得的奖励相比,将多获得多少奖励。

与折扣设定类似,差分值函数可以写成贝尔曼方程。方便的是,它们看起来与我们之前见过的方程相似,不同之处仅在于它们从即时奖励中减去了r(π),并且没有折扣。

算法应用

折扣情况下的许多算法可以重写以应用于平均奖励情况。例如,差分SARSA与你之前见过的SARSA算法非常相似。

以下是关键区别。差分SARSA必须跟踪其策略下平均奖励的估计值,并在其更新中从样本奖励中减去它。这个实现使用了我们在整个课程中见过的增量平均技术。

给定这个估计值,它然后在更新中从采样的奖励中减去r_bar

在实践中,我们可以通过对该算法稍作修改来获得更好的性能。我们使用以下更新来计算r_bar,而不是奖励的指数平均,因为它具有更低的方差:
δ_t = R_{t+1} - r_bar_t + q(S_{t+1}, A_{t+1}) - q(S_t, A_t)
r_bar_{t+1} = r_bar_t + β * δ_t
q(S_t, A_t) = q(S_t, A_t) + α * δ_t

总结

本节课中,我们一起学习了平均奖励目标,并为此设定定义了差分回报和差分值函数。我们了解到,平均奖励提供了一种不依赖折扣因子的、评估持续任务长期性能的方法,并且通过差分值函数,我们可以比较同一策略下不同动作的优劣。下周我们将讨论优化这个平均奖励目标的另一种方法。

011:Actor-Critic算法回顾

在本节课中,我们将要学习Actor-Critic算法。这是一种结合了策略学习和价值学习的强化学习方法,它通过“演员”和“评论家”两个组件的交互来共同优化策略。

概述

上一节我们介绍了策略梯度方法。本节中我们来看看如何将价值函数学习融入其中,从而形成Actor-Critic算法。

我们是否必须在直接学习策略参数和学习价值函数之间做出选择?答案是否定的。即使在策略梯度方法内部,像时序差分(TD)这样的价值学习方法仍然扮演着重要角色。在这种设置中,参数化策略扮演“演员”的角色,而价值函数则扮演“评论家”的角色,用于评估演员选择的动作。这些所谓的Actor-Critic方法,是强化学习中最早引入的基于TD的方法之一。

从策略梯度到Actor-Critic

我们以上一视频的策略梯度学习规则表达式结束:

公式:策略梯度更新

但我们无法直接获得真实的动作价值函数 Q,因此需要对其进行近似。我们可以采用通常的TD方法,使用一步自举回报,即差分奖励加上下一个状态的价值。

公式:一步TD目标

与往常一样,参数化函数 V_hat 是价值函数的学习估计。在本例中,V_hat 是差分价值函数。这就是Actor-Critic算法中的“评论家”部分,它为演员提供即时反馈。

为了训练评论家,我们可以使用任何状态价值学习算法。这里我们将使用平均奖励版本的半梯度TD方法。

引入基线减少方差

参数化策略是“演员”,它使用如下所示的策略梯度更新。

我们可以直接使用这种更新形式,但还可以做最后一件事来改进算法:减去一个称为基线的值。我们不单独使用一步价值估计,而是减去状态 S_t 的价值估计,从而得到如下更新:

公式:带基线的策略梯度更新

这里的 V_hat(S_t) 就是基线。请注意,这个表达式等于TD误差

这个更新的期望值与之前的更新相同。为什么?

让我们以特定时间 T 的状态 S 为条件,计算更新的期望值。求和的期望等于期望的和。我们可以利用这一点,将原始项的期望与涉及被减价值函数的期望分离开。事实证明,第二项的期望为0。因此,我们可以在不改变更新期望值的情况下添加这个基线。

你可以自行验证这一点。首先,将期望写为动作的求和,并将 V_hat 项从求和中提取出来。我们将其留作练习。

那么,如果更新的期望值相同,我们为什么要添加这个基线呢?减去这个基线有助于减少更新的方差,从而带来更快的学习速度。

算法直观理解

这个更新在直观上是有道理的。在我们执行一个动作后,我们使用TD误差来判断该动作相对于该状态的平均水平有多好。如果TD误差为正,意味着所选动作带来的价值高于预期。更频繁地采取该动作应能改进我们的策略。这正是此更新所做的:它根据评论家的判断,改变策略参数以增加那些优于预期的动作的概率。

相应地,如果评论家“失望”且TD误差为负,则该动作的概率会降低。演员和评论家同时学习,不断交互。演员不断改变策略以超越评论家的期望,而评论家则不断更新其价值函数以评估演员不断变化的策略。

完整的平均奖励Actor-Critic算法

有了策略更新规则,我们就可以介绍完整的平均奖励Actor-Critic算法了。

以下是算法的主要步骤:

  1. 初始化:指定策略参数化和价值函数参数化。例如,可以使用瓦片编码来构建近似价值函数和softmax策略参数化。我们还需要维护一个平均奖励的估计,就像在差分SARSA算法中一样,初始化为零。我们可以按喜好初始化权重和策略参数。初始化价值估计、策略和平均奖励的步长参数,它们可以各不相同。从环境中获取初始状态,然后开始行动和学习。
  2. 循环(每一步)
    • 根据当前策略选择动作,并从环境中接收下一个状态和奖励。
    • 利用这些信息,计算差分TD误差,并更新我们对平均奖励的运行估计。
    • 使用TD更新规则更新价值函数的权重。
    • 最后,使用我们的策略梯度更新规则更新策略参数。

这个算法是为持续性任务设计的,因此我们可以无限期地运行它,并持续改进策略。

总结

本节课中我们一起学习了Actor-Critic算法。你现在应该理解,学习一个价值函数来估计策略参数的梯度是非常有用的。Actor-Critic算法通过一个为演员学习价值函数的评论家来实现这一思想。这种演员与评论家协同工作的框架,是强化学习中一个强大且基础的概念。

012:论问题格局

我是阿尔伯塔大学的计算机科学教授 Chaba Sapeshfani。

概述

在本节课中,我们将探讨如何清晰地定义强化学习问题。明确问题是选择正确解决方案的基础,因为你的解决方案将是所处理问题的函数。我们将从目标设定、数据收集、评估方法以及环境特性等多个维度来剖析问题定义。

明确目标 🎯

首先,你需要非常清楚自己的目标。目标可以分为不同类型:你可能想解决某一类特定问题,或者仅仅是一个具体问题;你也可能对开发某种工具感兴趣。如果是后者,你需要明确开发这些工具的目标,以便将来能有效地应用它们。

问题定义的关键要素

在具体定义一个强化学习问题时,你需要考虑以下几个方面:数据将如何收集、如何评估你将要开发的算法,以及环境的特定属性(如果有的话)。接下来,我们将逐一展开说明。

数据收集方式

根据获取数据的方式,问题可以分为不同类型。你的系统可能与现实世界交互,也可能与模拟器交互,或者完全没有交互,数据已存储在磁盘上。根据你处于哪种情况,你可能需要选择截然不同的工具和技术,并关注不同的问题。

以下是几种数据收集场景及其关注点:

  • 与现实世界交互:现实世界以其自身速度运行,因此数据效率将成为主要关注点。
  • 与模拟器交互:你可能只关心将使用多少计算资源
  • 无交互(离线数据):所有数据已保存在磁盘上,你关心的是能从这些数据中提取多少信息

数据来源决定了你的目标,相应地,你需要应用的算法也会随之改变。

评估方法

定义强化学习问题的另一个方面是如何评估你的算法。你是否关心高效学习?如果你关心(很可能应该关心),那么你是关心学习结束时系统的表现,还是试图开发一个在学习过程中也表现良好的系统?

根据你所处的情况,你可能会选择不同的算法。例如,如果你只关心学习结束时的表现,你的算法可能会进行大胆的探索,这在学习过程中可能会以奖励为代价,非常“昂贵”。但如果你处于第二种情况,关心学习期间收集的奖励,那么你可能就不想进行那么多探索。因此,你需要再次选择不同的解决方案。

性能指标

最后,你需要选择性能指标,这方面也有多种可能性。你可能关心总奖励,可能想使用折扣因子,可能关心解决方案的敏感性,也可能关心算法在一系列不同环境中的最差情况或平均表现。

也许你并不关心奖励,而是关心在学习期结束时获得了多少知识或掌握了哪些技能。在所有不同的设定下,你评估算法的方式会不同,并且可能为不同的设定选择非常不同的算法。

环境特性

同样重要的是,思考一下你感兴趣的环境的具体方面。最简单的方面是环境中存在多少状态和动作。

如果你有大量的状态,状态之间是否存在可以加以利用的规律性?如果你有大量的动作,特别是连续的动作空间,那么一些算法将不可用,因为它们无法处理这些设定。但如果你有有限数量的动作,那么这些算法可能突然变得可用,你可能就会想选择它们。

其他方面可能包括:环境中的奖励或成本可能会爆炸式增长,变得无界,那么你可能不希望冒面对无界成本的风险;奖励可能是随机的,或者环境是随机的,也可能不是。同样,如果环境不是随机的,你可以使用利用这一点的专用算法,问题会简单得多。所有这些环境方面都相当重要,你将根据所处的情况来选择算法。

为何重要?🤔

你可能会问,为什么这很重要?作为一个简单的说明,考虑一个简单的赌博机问题:你有两个臂,臂的底层分布(随机赌博机)是未知的。但如果你恰好知道分布属于某个特定家族(例如正态分布或伯努利分布),那么你将选择依赖于这些分布的算法。算法的选择取决于你对这些分布的了解程度,如果你能利用这些特性,你的算法会表现得更好。

总结

总而言之,为了选择正确的算法,也为了明确解决方案的适用范围,清晰地定义你正在解决的问题至关重要。你的解决方案将取决于此,你需要对此有清晰的认识。

013:Andy和Rich给学生的建议

概述

在本节课中,我们将学习Andy和Rich两位教授关于学术研究、风险态度以及学者素养的深刻见解。这些建议对于任何领域的研究者,尤其是强化学习领域的新手,都具有重要的指导意义。


关于风险寻求与风险规避

上一节我们讨论了研究中的不同态度,本节中我们来看看Andy教授个人对风险规避的看法。

我的风险规避倾向促使我去审视前人的工作。我不愿冒这样的风险:有人指出“哦,这不过是三十年前我们做过的东西”。我总是被一种动力驱使,去避免这种情况。因此,我选择回顾历史。在某种程度上,我成了这个领域的历史学家。当然,Rich本身也是如此。

这种联系让我着迷,我热爱事物之间的关联。这个知识网络——动态规划、控制理论、预测,更不用说心理学和神经科学——这些联系让我着迷。


学术传承与命名

在AI杂志的那篇文章里,我重复了在首届RLDM会议上开幕致辞时说过的话。我当时说:如果你重新发明了一个轮子,而强化学习里有很多类似轮子的东西,就称它为轮子。或者也许是一个改进的轮子,而不是一个完全不同的东西。

因为正是这些命名,将这个领域与整个知识体系连接起来,推动着我们在算法和技术库方面不断前进。所以,不要给它起一个无法建立连接的名字。


学术素养与工匠精神

我想就此请教您。我提到过,在研究生成长阶段,您对我产生了重要影响,我从您那里学到,并且仍在继续学习很多东西。其中最重要的一点就是学术素养。

当我跟随您学习并撰写文章时,您会告诉我,比如,您曾说我写的是“华丽的散文”,过于感情用事。您希望我更精确、更尊重前辈。我认为这是我从您那里学到的东西,并且现在我正试图将其传递给他人——即学术素养和工匠精神。我知道您也是一位木匠。

我只是想知道您是如何成为这样的,以及您如何看待作为科学家的工匠精神和学术素养?


写作与完美主义

你母亲教写作,而我在你论文草稿上给了你很多难处。结果他回来时,桌上堆了这么高的关于写作的书。现在,他是一位非常优秀的写作者。我的学生们仍然会抱怨……我的意思是,我不能自夸是个好作家,不,不是关于我,你喜欢教人成为好作家。这很重要,除非文字功底尚可,否则我无法专注于技术内容。这让学生们很头疼,但我不确定为什么。

至于工匠精神,我想在某种意义上我是个完美主义者。这既是优点也是缺点。我希望事物能够持久,成为我不必反复折腾的成品。

Rich把我们的草稿发布到了网上,我其实不太喜欢。虽然这带来了很多精彩的评论。哦,它并不完美,我不想让别人读到不完美的东西。所以Rich把它都公开了。这没问题,但我更倾向于在最后呈现一个完美的版本给大家。我不确定。这是否也是风险规避导致的呢?


持久性与时代张力

当我动手制作东西时,如果有一个小错误我不去修正,那么多年后每当我看到那个成品时,它都会困扰我。

我认为这对我们的领域来说是一个非常及时的话题。因为有一种感觉,我们希望发展得更快,因为一切都在升温。

因此,这里存在一种张力:一方面是渴望更快完成、更快到达某个地方、做出好东西的欲望;另一方面,我们又希望成果能够持久。


总结

本节课中我们一起学习了Andy和Rich教授分享的宝贵建议。核心在于:重视学术传承,尊重并连接前人的工作(“称它为轮子”);培养严谨的学术素养与工匠精神,追求写作的准确与成品的完美;同时认识到在快速发展的领域中,平衡“追求速度”与“追求持久价值” 之间的张力。这些思考对于塑造一位负责任且富有成效的研究者至关重要。

014:代理架构-与玛莎的会议-设计选择概述

在本节课中,我们将讨论构建强化学习代理时所需做出的关键设计选择。我们将涵盖函数逼近器、优化器和探索策略的决策过程。

概述

现在,我们进入了顶点项目的第三周,这意味着我们已经完成了构建完整强化学习系统的一半工作。到目前为止,我们已经使用马尔可夫决策过程的形式化语言描述了“月球着陆器”问题。上周,我们讨论了用于解决该MDP的算法。现在,让我们讨论为了完全实现代理而必须做出的元参数选择。

函数逼近器的选择

上一节我们讨论了算法选择,本节中我们来看看如何表示价值函数。我们需要决定使用哪种函数逼近器。

我的通用建议是,对于函数逼近,始终从简单的方法开始。这意味着使用像瓦片编码这样的固定基函数。然而,对于这个问题,如果不精心设计瓦片编码器,这可能不是最佳选择。

以下是瓦片编码的潜在问题:

  • 如果你将所有输入维度一起进行瓦片编码,特征数量会随着输入维度呈指数级增长。
  • 例如,对于这个八维问题,如果你想每个维度使用10个瓦片,最终可能会得到1亿个特征。

因此,也许我们应该考虑使用神经网络。一个隐藏层应该足以表示月球着陆器问题的价值函数,并且对你来说实现起来也更容易一些。

神经网络的具体设计

我们决定使用神经网络,现在需要确定其具体结构。我们需要决定该隐藏层中隐藏单元的数量。请记住,你可以选择神经网络隐藏层的大小。随着向一层添加更多节点,模型的表示能力会增强。然而,添加的节点越多,需要学习的参数也就越多。

我们还需要选择激活函数。我们可以使用像tanh这样的S型函数,但这些函数存在饱和问题。考虑当激活函数的输入幅度很大时,无论是正还是负,梯度会在激活函数的平坦区域计算。这种接近零的梯度无法为权重的更新提供足够的信号,并可能减慢学习速度。

我们也可以使用线性阈值单元,但同样,这些平坦区域使得训练神经网络变得困难。一个非常有效且常见的选择是使用整流线性单元,所以我们决定使用它们。

优化器的选择

我们讨论了函数逼近器,接下来需要决定如何训练神经网络。对于这个项目,使用普通的随机梯度下降可能太慢,那么我们有哪些其他选择呢?

以下是几种优化器选项:

  • 我们可以尝试AdaGrad算法。其缺点是AdaGrad会将步长衰减至零,这对于非平稳学习可能是个问题。
  • 我们可以尝试RMSProp,它利用损失函数的曲率信息来改进下降步长。
  • 然而,我们还希望结合动量来加速学习。

一个不错的选择可能是Adam优化器,它结合了RMSProp的曲率信息和动量。

探索策略的选择

我们最后需要讨论将使用哪种探索方法。乐观初始值怎么样?如果我们使用的是具有非负特征的线性函数逼近器,这将是一个合理的选择。但由于我们使用的是神经网络,很难保持乐观值,因此不太可能有效。

我们也可以考虑ε-贪婪策略,这非常容易实现。然而,其缺点是它的探索完全忽略了动作价值可能包含的任何信息。它探索一个价值为负的动作与探索一个价值中等的动作的可能性是相等的。

那么,使用Softmax策略如何?这个选择可能更好,因为选择动作的概率与该动作的价值成正比。这样,我们就不太可能去探索我们认为非常糟糕的动作。顺便说一下,在课程3中,我们只讨论了基于动作偏好的Softmax策略,我们使用策略梯度方法来调整动作偏好。但考虑使用像期望SARSA这样的动作价值方法,并直接在学习的动作价值上使用Softmax,这并不是一个大的跨越。

使用Softmax的注意事项

我们选择了Softmax策略,但在使用时需要考虑一些事项。首先,考虑它如何影响期望SARSA更新。请记住,我们需要计算下一个状态下动作价值的期望值。这意味着我们首先需要计算在Softmax函数下所有动作的概率。

其次,我们还需要考虑代理对最高价值动作的关注程度。我们可以用一个称为温度参数 τ 来展示这一点。如果 τ 很大,那么代理更具随机性,会选择更多的动作。对于非常大的 τ,代理的行为几乎像均匀随机策略。对于非常小的 τ,代理主要选择贪婪动作。

最后,我们需要考虑一个额外的技巧,以避免在计算Softmax时出现溢出问题。想象一下,如果动作价值很大。对这些值取指数可能会变得非常大。相反,我们可以利用一个事实:在计算概率时,从动作价值中减去一个常数没有影响。例如,我们可以减去最大动作价值除以温度,这样所有的指数都是负数,从而避免了计算大正数的指数。

总结

本节课中,我们一起学习了为强化学习代理制定设计策略的关键步骤。总而言之,我们现在有了一个合理的策略来学习一个最优的软策略,该策略的探索比ε-贪婪策略更智能一些。代理根据其当前的Softmax策略采取行动,并使用期望SARSA进行更新。

代理的更新公式如下:

Q(S, A) ← Q(S, A) + α [R + γ Σ_a π(a|S') Q(S', a) - Q(S, A)]

其中,π(a|S') 是由当前动作价值通过Softmax函数计算得到的策略。

今天的视频就到这里。我们集思广益,讨论了你的代理中的一些关键选择。总的来说,需要做出很多选择。其中大多数选择,我们是通过推理什么可能是最合适的来设定的,就像我们对函数逼近器的选择所做的那样。其他选择,比如优化器中的具体步长或温度等探索参数,可能不那么容易直接选定。我们将在模块5中讨论更多确定这些参数的方法。到时见。

015:使用神经网络的非线性近似

在本节课中,我们将学习神经网络如何作为一种非线性函数近似器,用于强化学习中的特征构造。我们将对比之前学习的瓦片编码方法,理解神经网络如何从数据中学习有用的特征表示。

概述

上一节我们介绍了瓦片编码作为特征构造的一种方法。本节中,我们来看看神经网络如何提供一种学习有用特征集的策略。我们将理解神经网络如何创建特征,以及它如何成为状态的非线性函数。

神经网络如何构造特征

前馈神经网络是我们构建非线性函数近似的基础。当我们首次构建神经网络时,需要指定初始权重。权重的初始化方式很重要,但关于这一点我们稍后再详细讨论。现在,我们假设权重是从某个随机分布中抽取的。

让我们看看一个给定的输入向量在通过网络时会发生什么。首先,我们只关注网络中的一个节点。

以下是单个节点的计算过程:

  1. 每个输入乘以对应的权重。
  2. 这些加权输入的和被传递给一个非线性激活函数。
  3. 结果是输入的一个非线性函数。

这个过程在层的每个节点上重复进行。每个节点都有一组不同的权重,因此会产生不同的输出,我们称之为一个特征。所有这些新特征共同构成了新的状态表示。

与瓦片编码的对比

这个过程实际上与瓦片编码没有太大不同。我们将输入传递给瓦片编码器,得到一个新的表示。因此,在这两种情况下,我们都构建了一个输入到特征的非线性映射。在这两种情况下,我们都对表示进行线性组合以产生输出,即当前状态的近似价值。

通过对比瓦片编码,我们可以更深入地理解神经网络的表示能力。

回想一下,当我们创建瓦片编码器时,必须设置几个参数:瓦片的大小和形状,以及瓦片的数量。这些参数在学习之前是固定的。在神经网络中,我们有类似的参数,对应于层数、每层的节点数和激活函数。这些通常也在学习之前固定。从这个意义上说,两者都使用先验知识来帮助构造特征。

然而,除此之外,神经网络还具有可调整的参数,可以在学习过程中改变特征。神经网络可以利用数据来改进特征,而瓦片编码器则可以从数据中纳入新信息。

非线性特征的可视化

瓦片编码和神经网络都产生了在输入空间上非线性的特征。我们可以通过可视化预训练神经网络的隐藏层来更好地理解这一点。

我们在一个包含两面墙之间狭窄走廊的连续二维空间中训练了一个智能体。这里我们绘制了网络学习到的单个特征的感受野。坐标轴对应于XY位置,即MDP的状态空间。图中的每个点对应于该XY状态的特征值,颜色越深表示激活越大。如果是白色,则表示该特征在该状态下不活跃。

这个图意味着什么?它显示了该特征对哪些状态是活跃的,即特征幅度高于一个小的阈值。因此,在更高层次上,这个图向你展示了这个特征是如何泛化的:对其权重的更新会改变所有这些状态的价值。

观察几个特征的感受野,我们可以看到不同的特征以不同的方式泛化,并形成复杂的非线性形状。这些激活不像瓦片编码那样有硬边界。这些学习到的特征可以具有平滑变化的边界,这个特征根据状态的不同具有不同程度的泛化能力。有趣的是,这个网络中的特征激活还向我们展示了两面墙的位置。

总结

本节课中,我们一起学习了神经网络如何被视为一种构造特征的方式,并且理解了神经网络是状态的非线性函数。我们对比了瓦片编码,看到了神经网络如何通过可学习的参数从数据中自动生成复杂且适应性强的特征表示,从而为强化学习智能体提供更强大的函数近似能力。

016:Drew Bagnell论系统识别与最优控制

📘 概述

在本节课中,我们将学习基于模型的强化学习中的一个核心环节:模型学习。我们将探讨为什么传统的“系统识别”方法在实践中常常失败,并介绍一种更有效的、交互式的迭代方法。课程将以自动驾驶直升机完成“漏斗内悬停”任务为例,帮助你理解如何构建一个能在真实世界中表现良好的模型与策略。


🔍 传统方法:系统识别

上一节我们讨论了使用模型进行模拟学习的优势。本节中,我们来看看如何学习这个模型。

传统的工程统计学方法被称为系统识别,其本质是一种监督学习。

以下是其标准流程:

  1. 使用一个探索策略(例如,飞行员手动控制直升机并引入扰动)来收集数据。
  2. 将观测到的数据应用于监督学习算法(例如线性回归)。
  3. 学习一个模型 f_θ(s, a),该模型将状态和动作映射到下一个状态。
  4. 将这个模型与成本函数结合,使用规划或最优控制合成算法(即强化学习算法)来输出一个学习到的策略,希望该策略在真实世界中是最优的。

公式表示:
f_θ(s, a) → s'
其中,s 是当前状态,a 是采取的动作,s' 是预测的下一个状态。


⚠️ 传统方法的缺陷:协变量偏移

然而在实践中我们发现,优秀的工程师并不直接采用上述方法,而是采用迭代式的方法来构建模型。让我们看看原因。

如果我们收集专家演示“漏斗内悬停”任务的数据,并应用最优控制算法来生成策略,结果往往会失败得很彻底。

其根本原因在于,系统识别本质上是一个“先有鸡还是先有蛋”的问题。我们真正需要的是一个在策略学习过程中可能访问到的状态区域上表现良好的模型。不幸的是,如果我们针对一个模型进行规划或优化,几乎必然会在过程中访问到那些在数据收集中采样不足、模型不准确的状态。然后,强化学习算法会找到任何方式来利用这种不准确性,从而学到一个在真实世界中表现不佳的策略,因为真实世界在这些状态下与模型不匹配。

这个普遍问题有时被称为协变量偏移分布偏移。只要我们将统计学习与决策制定相结合,这就是一个根本性的问题。结果就是,无论在理论上还是实践中,你都可以构建一个误差很低的动态统计模型,并对其应用一个优秀的优化器或强化学习算法,但在真实世界中仍然得到糟糕的性能。


🎮 交互式迭代方法

理解基于模型的强化学习的一个有效方式,是将其视为优化器(RL算法)与模型学习器(及世界)之间的双人博弈。正如多年前从Chris Atkeson那里学到的:发现模拟器中不准确性的最佳方法,就是让一个强化学习算法去尝试利用它

因此,我们需要更稳健、本质上更具交互性的方法来寻找好的模型和控制器。

接下来,我们将介绍一种本质上是交互式的方法。其核心思想是,我们将从我们当前认为的最优策略以及之前提到的探索策略中收集数据。

以下是该交互式循环的步骤:

  1. 从当前的最优策略和探索策略中收集状态转移数据 (s, a, s')
  2. 将这些新的转移数据与之前收集的所有历史数据聚合在一起。
  3. 再次拟合模型(例如使用线性回归)。
  4. 将这个模型交给最优控制合成器(规划器/RL算法),得到一个新的、声称最优的策略。
  5. 回到第1步,用这个新策略(混合一些探索数据)继续收集数据,并重复此循环。

研究表明,运行这个循环的交互式方法,更接近优秀工程师实际使用的方式,在实践中效果很好,并能提供更强的理论保证。


✅ 理论保证与“无悔学习”

如果使用一个稳定的函数逼近器,在多次交互迭代中学习到一个低误差的模型,并使用一个好的最优控制求解器来生成策略,那么你必须获得良好的真实世界性能。

反之,如果使用一个“无悔学习”算法(我们用来针对模型学习一个好的优化器的那类算法)却未能获得良好的真实世界性能,那么原因必然是:在某个时刻,你未能构建出一个能准确描述世界运作方式的低误差模型。

“无悔学习”是一个强大的概念,在任何类似博弈的语境中都很有用。你可以将其简化为这样一类算法:它们不会因为训练数据中的微小扰动而大幅改变其返回的模型,并且能在数据量足够大的情况下获得良好性能。


🚁 实践结果:成功悬停

现在,我们可以将之前提到的“漏斗内悬停”问题,应用上述描述的交互式循环。

结果如下:我们使用这种数据聚合方法收集相同数量的样本。在这种情况下,我们实际上能够解决问题。这很有趣,因为唯一的不同之处在于数据收集方式:我们以交互式的方式收集数据,即提出最优控制器、尝试它们、收集更多数据、然后重建模型。最终结果是,我们成功地执行了“漏斗内悬停”任务。


📝 总结

本节课中,我们一起学习了基于模型的强化学习中模型学习的关键点。我们认识到,传统的、一次性的系统识别方法由于协变量偏移问题,在实践中常常失败。取而代之的是一种交互式迭代方法,它通过不断在最新策略下收集数据、更新模型、再优化策略的循环,更稳健地逼近真实世界动态,从而成功学习到有效的控制策略。这种方法不仅更符合工程实践,也具备更坚实的理论保证。

017:移动健康中的强化学习应用

概述

在本节课中,我们将跟随哈佛大学的Susan Murphy教授,学习强化学习在移动健康领域的具体应用、面临的挑战以及实际研究案例。


大家好,我是苏珊·墨菲,来自哈佛大学。我同时在统计系和计算机科学系任职。我的研究方向是移动健康,特别是如何将强化学习应用于移动健康领域。在大家面前的幻灯片上,可以看到我们参与过的各种不同类型的研究。许多研究涉及成瘾问题,也有很多涉及青少年等群体。

在移动健康领域,我们的目标是什么?我们的目标是帮助那些正在与问题作斗争的人们,这些问题通常是慢性疾病,例如有人正在与毒瘾斗争并试图保持清醒,或者有人正在与抑郁症抗争。我们旨在为个人提供长期支持。我们也希望能够进行因果推断测试,以真正理解在强化学习情境下的治疗行动是否真的对那个人产生了影响。

此外,在移动健康中,我们思考如何能够持续学习。我们可以持续进行实验,从而不断为每个人改进移动健康应用程序。这正是这张幻灯片所讨论的内容。


基本设置与干预措施

上一节我们了解了移动健康的研究背景,本节中我们来看看其基本设置。

对于任何给定的用户,他们可以接收到各种各样的干预措施,也就是行动。我在幻灯片上列出了一些例子,例如提醒(可能是提醒服药、提醒进行特定类型的锻炼等)、关于生活中可以做什么的建议、如何将你与经历过类似问题的其他人联系起来等等。这些干预可以随着时间的推移反复进行。

每次我们提供不同类型的治疗行动后,我们会观察一个奖励。奖励可以是多种形式,例如,如果我的目标是帮助你更活跃,奖励可能是接下来30分钟内的总步数;如果应用程序旨在帮助你管理压力,奖励可能是直到你再次感到压力所经过的时间。

在下一张幻灯片中,我将展示一项刚刚完成的研究。在这项研究中,我们的目标是帮助人们在回答关于压力和孤独感的问题时更加积极。这项研究招募了青少年和大学生(并非总是大学生),他们是从我们的急诊室招募的,因为他们饮酒过量。研究思路是,如果我们能了解他们的孤独感和抑郁程度,我们就可以开发一个应用程序来帮助他们管理这些情绪。


一项具体研究:用户参与度

接下来,我们深入看一项具体研究,它专注于如何保持用户的参与度。

这个强化学习问题中的所有行动都围绕着:我们如何给予你强化激励,以便你保持参与并回答我们的问题。你可以看到我们有一个游戏化的界面,它是一个水族馆。当你回答问题后,你的水族馆会变得越来越丰富,你也可以在水族馆环境中升级到更高的等级。

但我主要感兴趣的是:如果你回答问题,我们如何为你提供奖励(这是图表中的首要目标)?什么样的奖励(如表情包、礼物)能帮助你更投入,以便你明天继续回答我们的问题?我也感兴趣的是:如果我们今天给你一份礼物,你是否更有可能在今晚回答我们的问题?因此,这项研究的全部目标是找到良好的策略,以保持人们参与回答关于他们生活的问题。



当前工作与贝叶斯强化学习

基于上述研究,我们现在的工作是利用这类研究来初始化移动健康中的强化学习算法。

其核心思想是,强化学习算法应该为每个用户个性化定制应用程序。从我们的角度来看,多年来,我们认为这与为每个用户学习一个最优策略是相同的。在我的实验室,我们主要使用贝叶斯强化学习

你们可能还没有学习过贝叶斯强化学习,但对我们来说,它的主要工具和优势之一在于它随时间更新个体用户信息的方式。同时,它在每个时间点以随机(stochastic)的方式选择行动,这有助于我们在研究结束后也能从数据中学习。


移动健康中强化学习的挑战

那么,当试图在我的设置(即移动健康)中使用强化学习时,会遇到哪些挑战呢?其中一个问题是,如果你曾经下载过应用程序,你完全明白我在说什么。当应用程序频繁通知你时,可能会变得非常恼人。

因此,应用程序通常有很大潜力在当下帮助你,对即时奖励产生积极影响,但也会带来负面的延迟效应。这正是强化学习的经典设定。

以下是我们必须弄清楚如何解决的一些问题:

  • 价值函数近似:如何近似价值函数,以便我们能够快速学习,同时在选择行动时不犯错误。
  • 个性化策略:我们总是有许多不同的用户,每个人都是独特的。如何利用一个用户的数据来为每个特定用户个性化或确定一个好的策略,这是我们目前正在努力应对的一大挑战。
  • 因果推断:研究结束后,我们总是希望进行因果推断研究,以帮助科学家更多地了解人们为何会采取某些行为,例如为什么人们会复吸毒品或复吸香烟。这些都是因果推断问题。我们想利用这些数据来做这件事,即使数据是通过强化学习算法收集的,我们也必须弄清楚如何利用它。
  • 知识迁移:我们如何将当前研究的数据用于未来的用户,以便他们能够从我们在当前研究中学到的东西中受益?


另一项研究:戒烟与压力管理

最后,我想展示下一张也是最后一张幻灯片上的另一项研究。

这项研究相当酷,它即将结束。在这项研究中,每个人都在尝试戒烟。研究从他们决定戒烟的那天开始。他们佩戴各种可穿戴设备,度过日常生活,所有的传感器数据流不断传入并被使用。传感器数据用于形成各种预测,其中一个特定的预测是:他们当前是否处于生理压力状态。我们正在使用算法来测试:如果你当前处于压力状态,我们是否应该提供提醒,建议你练习压力管理练习。当然,长期目标是为每个用户找到最优策略

谢谢。

祝你的课程学习顺利。


总结

本节课中,我们一起学习了强化学习在移动健康领域的应用。我们从基本设置和干预措施入手,分析了一项旨在提高用户参与度的具体研究,探讨了利用贝叶斯强化学习进行个性化策略学习的当前工作,并梳理了在该领域应用强化学习时面临的独特挑战,如平衡即时与延迟效应、进行因果推断等。最后,我们了解了一项利用传感器数据帮助戒烟者管理压力的前沿研究。这些内容展示了强化学习在提供个性化、适应性健康干预方面的巨大潜力。

018:与亚当的会议-实现代理细节_05_01_01

欢迎来到顶点项目的倒数第二周。

这是一个激动人心的时刻,因为你终于可以开始构建你的代理了。

上周我们头脑风暴了一些高层次的代理设计选择,本周我们将讨论一些关于网络及其更新方式的实现细节。

在实践中,这些决策会对性能产生重大影响。

今天我们将讨论如何更新我们的动作价值估计,以及Adam算法的细节。

我们决定使用神经网络来估计动作价值。

让我们回顾一下它的工作原理。你可能还记得在课程三中,神经网络接收状态并产生一个新的表示。

例如,在这个案例中,状态可能由着陆器的位置和速度等信息组成。

然后,我们将使用得到的表示来估计每个动作的价值。

我们通过构建一个网络来实现这一点,该网络为每个动作都有一个输出节点。

让我们讨论如何训练这个神经网络来近似动作价值函数。

我们将使用时间差分误差来训练网络。更准确地说。

我们将修改权重以减少每个时间步上的TD误差。

我们只更新与所选动作对应的输出权重。

我们只是不更新最后层中对应动作2和3的权重。你可能会问。

这有问题吗?一般来说没有,但这里有一些细微之处需要考虑。

对于线性函数近似,我们也为每个动作价值维护独立的权重。

我们只更新被采取动作的权重。对于神经网络。

每次更新一个动作时,所有动作的共享表示也会改变。

但在学习过程中,每个动作的结果可能会对表示产生不同的、可能相互冲突的更新。

但这实际上是我们想要的。

我们希望神经网络学习一个对所有动作都有用的表示。

对多个预测都有用的特征通常是泛化能力更好的特征。

相反,我们可以学习完全独立的神经网络,每个动作一个。

但那样每个动作的表示是用更少的样本学习的。

并且我们可以从学习共享表示中获得潜在的好处。

我们做出的另一个决定是使用Adam算法。

该算法结合了向量步长和一种动量形式。在课程三中。

我们讨论了一个步长向量,网络中的每个权重都有自己的步长,该步长根据学习过程的统计数据进行调整。

这意味着我们可以对某些权重进行较大的更新,对其他权重进行较小的更新。

如果损失在某些维度上更平坦,这可能会有用。或者。

我们可以在损失变化更剧烈的其他维度上采取较小的步长。

我们还讨论了如何使用动量来加速学习。

特别是当我们发现处于损失的平坦区域时。

请记住,在同一方向上重复步长会建立动量,而在不同方向上采取步长会消除动量。

Adam算法结合了这两种思想。它保持梯度的移动平均值来计算动量。

beta_m参数是一个控制动量大小的超参数。

Adam还保持梯度平方的移动平均值。这为我们提供了一个步长向量。

这种更新通常会导致更高效的数据学习,因为每次更新都更有效。

你可能已经注意到,我们刚刚引入了几个需要设置的新超参数。

我们有两个衰减率、分母中的小偏移量大小以及一个全局步长。

所以我们在这里并没有实现无超参数学习。事实上。

我们用四个超参数取代了一个。

幸运的是,通常不难根据经验法则为这些超参数找到良好的设置。

但通过单独调整它们通常可以获得更好的性能。

许多人正在研究减少强化学习中对超参数选择敏感性的方法。

但这仍然是一个非常开放的问题。在这个顶点项目中。

你将研究不同全局步长选择的影响。

我们将为其他参数使用固定值。

本周的内容就到这里,你现在应该拥有实现代理所需的所有工具了。

接下来,就是用强化学习让航天器在月球上着陆。

019:神经网络优化策略回顾

在本节课中,我们将回顾训练深度神经网络时使用的关键优化策略。这些策略对于高效训练模型至关重要,特别是在处理大规模数据和复杂任务时。


基于深度神经网络的监督学习系统,现已成为图像分类、语音识别和自然语言处理领域的首选方案。部分原因在于训练数据量的大幅增加以及计算成本的降低。然而,要真正利用这些增长的数据和计算资源,训练方法的改进是必需的。一些简单的优化策略使得训练网络变得更加容易,并加速了其普及。我们今天将讨论这些策略。

在本视频结束时,你将能够理解神经网络初始化的重要性,并描述用于训练神经网络的优化技术。

初始化的重要性

与许多机器学习方法一样,神经网络使用迭代过程进行训练。这个过程必须有一个起点,而这个起点的选择对神经网络的性能起着重要作用。

让我们看一个只有一个权重的例子。在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智能体了。

020:函数逼近下的期望SARSA与Q学习 🧠

在本节课中,我们将学习如何将表格型强化学习中的期望SARSA和Q学习算法,扩展到使用函数逼近的场景。我们将重点理解其更新公式的推导与核心差异。

上一节我们介绍了使用函数逼近的SARSA算法。本节中,我们来看看如何将其进一步发展为期望SARSA,并理解Q学习在函数逼近下的特殊形式。

从SARSA到期望SARSA

首先,回顾表格型SARSA的更新目标,它包含了下一个状态和动作的动作价值。

SARSA更新公式(表格型)
Q(S, A) ← Q(S, A) + α [R + γ * Q(S‘, A’) - Q(S, A)]

期望SARSA则不同,它使用目标策略下的期望值来计算更新目标。这个期望值是通过对目标策略下所有可能动作的动作价值进行加权求和得到的。

期望SARSA更新目标(表格型)
目标 = R + γ * Σ [π(A‘|S’) * Q(S‘, A’)]
其中,π(A‘|S’) 是目标策略在状态S‘下选择动作A’的概率。

函数逼近下的实现

当我们使用函数逼近时,同样可以计算这个期望值。以下是具体的实现步骤。

首先,回顾使用函数逼近的SARSA更新公式。它与表格型设置类似,但动作价值估计由权重向量 w 参数化。此外,我们还需要一个梯度项来将误差适当地分配到各个权重上。

SARSA更新公式(函数逼近)
w ← w + α [R + γ * q̂(S‘, A’, w) - q̂(S, A, w)] * ∇ q̂(S, A, w)

函数逼近下的期望SARSA遵循相似的结构。以下是其更新过程:

  1. 我们使用权重向量 w 为下一个状态的所有可能动作计算其动作价值估计 q̂(S‘, a, w)
  2. 然后,我们计算这些估计值在目标策略 π 下的期望。

期望SARSA更新公式(函数逼近)
w ← w + α [R + γ * Σ π(a|S‘) * q̂(S‘, a, w) - q̂(S, A, w)] * ∇ q̂(S, A, w)

这就是将SARSA转变为期望SARSA所需做的全部改动。

扩展到Q学习

那么,如何为使用函数逼近的Q学习实现这一点呢?

幸运的是,Q学习是期望SARSA的一个特例。在Q学习中,目标策略是关于近似动作价值的贪婪策略。

在贪婪策略下计算期望,等同于计算最大动作价值。因此,函数逼近下的Q学习更新实际上非常直接:我们只需用最大值(max)代替期望(expectation)即可。

Q学习更新公式(函数逼近)
w ← w + α [R + γ * maxₐ q̂(S‘, a, w) - q̂(S, A, w)] * ∇ q̂(S, A, w)


本节课中我们一起学习了函数逼近框架下的期望SARSA和Q学习算法。我们看到了期望SARSA如何通过计算目标策略下的期望值来改进SARSA,而Q学习则作为其贪婪策略下的特例,使用最大值操作进行更新。下一节,我们将探讨在使用函数逼近时如何进行有效的探索。

021:在简单迷宫中回顾Dyna-Q学习

在本节课中,我们将通过实验来比较表格型Dyna-Q算法和无模型的Q学习算法在小型迷宫环境中的性能。我们将观察规划步骤如何影响学习效率,并理解从真实经验和模型经验中学习的不同作用。

Dyna-Q架构回顾

上一节我们介绍了Dyna-Q的架构。它结合了规划、学习和行动三个过程。

Dyna-Q的核心思想是,智能体不仅从与环境的真实交互中学习,还利用学到的环境模型进行“想象”或规划,从而更高效地更新价值函数。

实验设置:小型迷宫环境

本节中,我们来看看具体的实验环境。我们将使用一个简单的网格世界迷宫。

  • 状态与动作:智能体有四个动作(上、下、左、右)。
  • 奖励:只有进入目标状态(Gulf)会获得+1的奖励,其他所有转移的奖励均为0。
  • 任务类型:这是一个分幕式任务。
  • 折扣因子:γ = 0.95。

我们将比较三个智能体,它们都使用相同的参数:学习率 α = 0.1,探索率 ε = 0.1,并且所有动作价值估计初始化为0。实验运行50幕,重复30次后取平均结果。

规划步骤对性能的影响

以下是不同规划步骤下智能体性能的比较结果。

我们绘制了智能体完成每一幕所需的平均步数。步数越少,表示性能越好。

  • 0步规划(即标准Q学习):性能提升缓慢,最终稳定在每幕约14步。
  • 5步规划(Dyna-Q):达到与Q学习相同的性能水平,但速度更快。
  • 50步规划(Dyna-Q):仅需大约3幕就能找到一个优秀策略。

实验表明,Dyna-Q的学习效率远高于Q学习。在相同数量的环境交互后,Dyna-Q能学到更多知识。这证明了如果模型正确,规划可以更有效地利用环境经验。

搜索控制对规划效率的影响

让我们更仔细地观察搜索控制(即如何从模型中选择状态-动作对进行规划)如何影响规划过程。

为了更清晰地说明问题,我们调整了实验:智能体每次连续调用规划循环10次,每次进行10步规划,总计100步规划。

观察发现,许多规划更新并未改变价值函数。事实上,经过100步规划后,智能体只更新了两个状态-动作对的价值。

即使将单次规划步数增加到100步,最初的几次规划调用也仅更新了少数几个动作价值。

为什么智能体需要如此多的规划步骤才能学到合理的价值函数和策略?

原因是搜索控制随机采样状态-动作对。如果采样的状态-动作对产生的时序差分误差(TD error)为零,那么这次规划更新就无效。在这个奖励稀疏(除目标外均为0)且价值初始化为0的环境中,这种情况经常发生。

如果采用更高效的顺序(例如,优先更新那些TD误差大的状态-动作对),智能体可能仅用6次规划更新就能学到优秀策略。在大型环境中,随机搜索控制的问题会更加突出。

可视化学习过程

我们换一个迷宫来可视化学习过程。用箭头表示每个状态下根据估计价值的贪婪动作,没有箭头的状态表示策略下所有动作概率均等。

经过第一幕后,Q学习只更新了一个动作价值:即目标旁边状态中“向上”动作的价值。因为这是唯一经历了非零奖励转移的状态。需要更多幕才能将价值“回溯”到附近的其他状态。

相比之下,Dyna-Q通过规划,能更快地将价值信息传播到整个状态空间。

总结

本节课中,我们一起学习了在简单网格世界中测试表格型Dyna-Q算法。

我们看到了规划如何能显著加速学习过程。在我们的实验中,规划步骤越多,智能体的表现就越好。关键在于,Dyna-Q通过从模型生成的模拟经验中学习,减少了对昂贵环境交互的依赖,从而实现了更高的数据效率。

022:与玛莎的会议-深入探讨经验回放

概述

在本节课中,我们将学习如何提高智能体在函数逼近场景下的样本效率。我们将重点介绍一种名为“经验回放”的简单方法,并探讨它与Dyna方法的关系。

从Dyna到函数逼近的挑战

在课程3中,您实现的智能体每个样本只更新一次价值函数或策略。但这可能不是利用数据最高效的方式。实际上,您在课程2中已经见过一种更智能的方法,即Dyna,它旨在提高样本效率。然而,我们只在表格化设定中讨论过Dyna。

本节中,我们将探讨在使用函数逼近时,如何让您的智能体更高效地利用样本。我们将讨论一种称为“经验回放”的简单方法,以及它与Dyna的联系。

回顾Dyna-Q

为了理解经验回放的原理,我们首先回顾一个熟悉的方法:Dyna-Q。其核心思想是利用采样到的经验来学习一个模型,然后可以从这个模型中生成模拟经验来更新价值估计。这种利用模拟经验改进价值估计的过程称为“规划”。

为了聚焦Dyna的核心思想,我们之前做了一些简化假设。Dyna-Q假设状态转移是确定性的,并且状态空间相对较小。在这种设定下,学习模型很简单:对于每个访问过的状态-动作对,我们记录观察到的奖励和下一个状态。这只在表格化设定中有效,因为状态-动作对的数量足够小,可以存入计算机内存。

连续状态空间带来的问题

如果我们尝试在连续状态领域应用这种方法,将会有无限多的状态-动作对需要存储。更糟糕的是,如果世界是随机的,我们将不会再次看到完全相同的状态。

一种选择是利用您关于函数逼近的所有新知识来学习一个模型。例如,您可以学习一个参数化函数,它输入状态和动作,输出下一个状态和奖励。不幸的是,即使在这种学习到的动态模型中出现微小误差,似乎也会导致严重问题。如何在强化学习智能体中有效使用学习到的模型,仍然是一个开放的研究问题。

经验回放:一个更简单的选择

幸运的是,对于您的毕业项目有一个更简单的选择。经验回放是一种试图获得Dyna优势的简单方法。其基本思想是保存一个经验缓冲区,并让数据本身充当模型。我们从该缓冲区中采样经验,并用这些样本来更新价值函数,类似于在Dyna中从模型采样并更新价值。

经验回放的关键设计选择

经验回放的关键选择包括缓冲区的大小、存储哪些经验以及每步执行多少次更新。首先,让我们看看如何存储经验。为简单起见,让我们回到表格化的网格世界。

当我们与世界交互时,我们观察到一个(状态,动作,奖励,下一个状态)元组。我们将这些经验添加到一个缓冲区,称之为经验回放缓冲区。随着我们继续与世界交互,我们向该缓冲区添加更多样本,直到最终将其填满。当这种情况发生时,我们可以选择一个旧的经验进行删除,并用新经验替换。

我们还需要考虑缓冲区的大小。通过允许缓冲区非常大,我们可以记住许多时间步之前潜在有用的转移。然而,智能体有实际限制,我们需要考虑大型缓冲区使用的内存量,以及存储和访问大型缓冲区带来的任何计算影响。

使用小批量更新

一旦我们决定存储一个缓冲区,一个自然的想法是使用小批量。从经验回放缓冲区使用单个样本可能会产生有噪声的更新。相反,我们可以使用缓冲区中的多个样本来创建一个平均更新,以减少这种噪声。从较大缓冲区中抽取的这小部分样本集合称为一个小批量。

小批量更新简单地涉及对迷你批次中K个随机样本的更新进行平均。以下是一个Q学习平均更新的示例。我们将平均更新存储在一个变量中,称之为Ubar。然后我们从缓冲区获取几个样本,并为每个样本计算Q学习更新,最后平均这些更新以获得小批量更新。

经验回放伪代码

综上所述,我们得到以下经验回放的伪代码。与Dyna类似,我们可以将规划步骤视为在后台发生。智能体可以执行多次这些规划更新(即回放更新),对应于环境中的每个真实步骤。更多的更新意味着我们从已观察到的数据中提取更多信息。每个回放更新都包含一个小批量更新,以减少该更新的噪声。

总结

本节课中,我们一起学习了经验回放方法。经验回放允许智能体更好地利用其数据,从而提高样本效率。此外,它确保智能体像在Dyna中一样,在环境的许多部分进行更新。本周您将看到如何在您的智能体中使用经验回放。

023:数据高效强化学习的收集与推断框架

在本节课中,我们将学习一种特别适用于数据高效强化学习智能体设计与开发的视角——收集与推断框架。我们将探讨如何通过精心管理数据来学习控制现实世界的动态系统。

概述

强化学习为动态系统的反馈控制提供了合适的框架。我们寻找一个能够优化长期累积奖励期望的策略。在大多数控制应用中,我们通常处理连续的状态和动作,因此会使用一个以状态S和动作A为输入的神经网络来计算Q值。贝尔曼方程被转化为一个二次损失函数,通过梯度下降来优化网络参数。

然而,当涉及到在真实系统上学习时,核心问题是如何实现数据高效。在经典强化学习中,价值函数的更新规则以在线方式应用,每个转移样本只使用一次。这在模拟环境中或许可行,但对于数据稀缺的真实世界系统来说,通常行不通。

核心框架:收集与推断

如果数据有限,那么核心洞见是:数据是宝贵的,数据是真实的。因此,我们不应丢弃任何转移经验 (S, A, S'),而应将它们全部存储在一个转移记忆库中。学习则在整个数据集上进行。在这个步骤中,我们从转移记忆库中推断知识。

推断出的知识只能与转移记忆库中的数据质量相当。因此,收集正确的数据是我们框架的第二个重要组成部分。

这两个步骤共同构成了所谓的强化学习收集与推断框架。这个视角让我们专注于数据高效强化学习的两个主要问题:推断(即从给定的转移数据集中榨取最大价值)和收集(即从环境中采样最具信息量的数据)。由于时间关系,本讲座的剩余部分将只专注于推断部分。

推断实践:神经拟合Q算法

神经拟合Q算法完全贯彻了从存储的转移数据集中学习的理念。给定一组包含N个转移元组的数据集D,我们首先将训练集M设置为整个数据集D。然后,我们基于动态规划原理推导出的Q迭代规则,为M中的每个样本计算Q目标值。

一旦为M中的所有转移计算了目标值,神经网络就会通过一个普通的监督学习步骤来拟合这些目标值。外层循环可以重复任意次数的动态规划步骤,直到最优价值函数Q在令人满意的精度内被近似出来。最终,控制策略由在状态S下对Q进行贪婪评估给出。

NFQ基本上将强化学习转化为一系列监督学习问题。它假设总是在整个可用的转移数据集上进行更新,这对于非常大的数据集可能不切实际。

深度Q网络是NFQ的一个流行变体,它使用小批量样本进行更新,并采用一些额外的调整来处理海量数据集。

应用实例:经典倒立摆系统

作为一个例子,考虑现实中的经典倒立摆系统。这里的智能体是完全从零开始学习的。奖励函数的定义相当简单:如果杆子直立,奖励为1,否则为0。当然,也可以将小车位置作为奖励函数的额外输入。

经典的在线Q学习在模拟版本中需要大约100万次尝试才能学会平衡杆子。而使用NFQ,训练只需要不到300次尝试,速度快了几个数量级。这使得将神经强化学习直接应用于现实世界系统成为可能。

总结

本节课中,我们一起学习了强化学习的收集与推断框架。我们了解到,通过将宝贵的转移数据存储起来并进行集中推断,可以极大地提高学习的数据效率。神经拟合Q算法及其变体(如DQN)是该框架的实践体现,它们将强化学习问题转化为监督学习问题,从而使得在数据有限的真实物理系统(如倒立摆)上直接进行高效学习成为可能。该框架为强化学习范式在日益复杂的现实世界应用打开了大门。

024:与亚当的会议-强化学习中的参数研究

在本节课中,我们将学习如何通过参数研究来深入理解强化学习算法。我们将探讨如何系统地测试不同的超参数设置,并通过可视化结果来评估算法的性能与参数敏感性。

概述

这是顶点项目的最后一周。完成本周的学习后,你将成功实现一个从问题定义到超参数精心选择的完整强化学习系统。今天我们将重点讨论如何精心选择超参数。

超参数选择的重要性

回想一下我们在项目早期阶段确定的所有关键性能参数。如果我们希望构建一个成功的学习智能体,就需要为这些参数选择良好的值。

在实践中,我们可能不得不依赖经验法则来做出许多选择。然而,在某些情况下,我们有机会通过研究参数的影响来获得更深入的见解。

例如,在我们的模拟器中学习时,我们可以用许多不同的参数配置来测试我们的智能体。这可以帮助我们确定特定参数的合理取值范围。当我们最终在月球上部署智能体时,这些研究也可能帮助我们设定参数。

如何进行参数研究

在研究中,我们可能会在各种模拟问题中,用许多不同的参数设置来测试我们的算法。这可以提供关于我们的算法在一般情况下可能如何表现的见解。

运行这样的科学研究不仅对科学家有用,在工业界也同样重要。在这两种情况下,真正理解你所部署的方法都至关重要。

让我们思考一下如何更好地理解算法在不同参数下的行为。

以下是进行参数研究的基本步骤:

  1. 为每个参数选择一个取值范围,并在该范围内测试多个值。
  2. 使用参数敏感性曲线来可视化结果。

理解参数敏感性曲线

在Y轴上,我们使用某种性能度量。例如,如果我们让智能体运行50个回合,这个度量可以是这50个回合的总回报之和,我们称之为总回报

然后,我们在多次运行中取平均值,得到平均总回报。在X轴上,我们放置正在测试的参数值。

对于超参数的每个值,我们进行一次完整的运行。这意味着我们让智能体运行指定的步数(例如10,000步),并运行期望的次数(例如30次)。我们计算每次运行的总回报,然后将这些数字在30次运行中取平均值。我们为每个选定的超参数绘制这些平均值,从而得到敏感性曲线。

这条曲线提供了关于算法在其超参数范围内的行为表现,以及选择这些参数的难易程度的见解。

曲线形状的启示

如果曲线非常尖锐,则表明良好参数的范围很窄。如果你事先不知道这一点,那么你不太可能找到这个良好的参数设置。即使你设法选择了一个非常接近最佳值的超参数,性能也可能差很多。因此,尽管在最佳情况下算法可以表现良好,但在实践中,它的表现可能会差得多。

你可能会想,一旦我找到了这个良好的设置,我就可以直接使用那个超参数并获得良好的性能。不幸的是,对于一个新问题,最佳超参数很可能不同。相反,这个分析表明你可能很难选择超参数,因此我们在部署时需要小心。

另一方面,如果良好参数的范围很广,那么你更有可能成功选择一个好的参数。此外,这可能表明你的算法总体上对其超参数不太敏感。如果你在不同问题中观察到对超参数有类似的敏感性,那么这一点就更可能成立。

生成有效曲线的注意事项

为了产生有意义的曲线,我们必须注意几个因素。

首先,我们必须测试足够数量的超参数值。否则,我们对真实参数敏感性曲线的近似会很差。为了理解这一点,想象一下关于参数α的真实曲线是这样的:f(α) = -α^2 + 10α - 20。如果我们只抽样测试少数几个点,我们可能会意外地跳过这些参数的最佳值。

其次,我们需要测试足够宽泛的参数范围。如果我们选择的范围使得最佳值位于范围的一端,我们可能会错过更好的超参数值。

别担心,我们不会要求你详尽地测试每个超参数组合。你只需要为你的期望SARSA智能体扫描其中一个参数。这样,你将获得一些进行参数研究的经验,而不必等待程序运行数小时。我们会为其余的参数建议合适的值。

参数研究的实际应用

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

系统地用许多超参数测试智能体通常并不可行。我们怎么能用可能导致反复坠毁的不良超参数设置,一遍又一遍地测试在月球上着陆模块呢?你很快就会因此被解雇。

理解我们的算法以及它们可能如何表现是如此重要,尤其是在现实世界(或者在这种情况下是外太空)中进行部署时。

总结

本节课中,我们一起学习了强化学习中的参数研究方法。我们探讨了如何通过测试不同超参数值并绘制敏感性曲线来评估算法性能。我们了解到,尖锐的曲线表明参数选择困难且对性能敏感,而平缓的曲线则意味着算法更稳健。我们还讨论了进行有效参数研究的注意事项,包括测试足够多的值和足够宽的范围。最后,我们明确了参数研究的主要目的是理解算法行为,而非直接为实际部署选择参数。

025:TD与蒙特卡洛方法对比实验

在之前的课程中,我们介绍了时序差分学习,并讨论了它相对于动态规划和蒙特卡洛方法的优势。

在本节课中,我们将通过一个精心设计的科学实验,更深入地比较TD学习和蒙特卡洛方法。

在本节课结束时,你将能够识别TD学习在实证上的优势。

实验环境设定

考虑一个简单的马尔可夫决策过程,它有五个非终止状态。在每个状态中,我们有两个确定性的动作:向左和向右。我们的目标是评估一个均匀随机策略,并估计其价值函数。

所有回合都从状态C开始。回合在到达最左侧或最右侧时终止。除了在右侧终止时获得+1奖励外,所有状态转移的奖励均为0。我们将折扣因子γ设置为1。

在这个问题中,状态价值有一个直观的含义:每个状态的价值等于从该状态出发,最终在右侧终止的概率。起始状态C的价值是0.5,这意味着从中心开始随机游走,有50%的概率在右侧终止。这很合理。

让我们为其余状态标上它们的真实价值。现在开始运行实验。

第一回合对比

幻灯片顶部标注了MDP各状态的真实价值。我们的智能体——一个可爱的小机器人——使用TD学习来估计价值函数。在底部,另一个智能体使用蒙特卡洛方法。我们将两个智能体的近似价值函数初始值都设为0.5。

让我们观察两个智能体在第一个回合中的表现。

注意,TD智能体只更新了状态E的价值。要理解这一点,考虑从状态C到D的转移。TD误差的计算公式为:

δ = R + γ * V(S‘) - V(S)

在这个转移中,奖励R为0(因为是非终止转移),状态C和D的价值都是0.5,所以TD误差δ为0,因此我们不对C的估计值进行任何更新。除了从状态E进入终止状态的这一步外,其他每一步都会发生同样的情况。

相比之下,蒙特卡洛智能体更新了机器人在该回合中访问过的所有状态的价值。

后续回合与渐进性能

让我们观察下一个回合。注意在回合中价值是如何更新的。

最终,TD智能体在每一步都进行了更新。相比之下,蒙特卡洛智能体则等到回合结束后才进行更新。

再看几个回合,TD智能体的价值估计似乎在向真实价值移动。这个过程太长了,让我们直接跳到后面,评估它们的渐进性能。

学习过程可视化

让我们绘制在学习过程中几个时间点的估计价值。

  • X轴代表MDP中的每个状态。
  • Y轴代表估计的价值。
  • 图中标出了真实价值。
  • 我们也绘制了初始价值估计(均为0.5)。
  • 红色曲线显示了第一个回合结束后学到的价值。正如我们讨论过的,在第一回合结束时,TD只更新了一个状态的价值。
  • 100个回合后的估计值已经接近它们能达到的最佳水平。记住,我们使用的是恒定步长α=0.1,这意味着价值会根据最近回合的结果产生波动。如果我们使用更小的学习率,或者更好的衰减学习率,可能会得到更精确的估计。

TD vs. 蒙特卡洛:学习速度

一个很自然的问题是:TD学习比蒙特卡洛更快吗?

让我们在我们的示例问题上比较TD和蒙特卡洛的性能。

  • X轴代表回合数。
  • Y轴代表价值函数与学习到的估计值之间的均方根误差
  • 红色学习曲线代表了蒙特卡洛方法在不同α值下的性能。每条曲线是100次独立运行的平均结果。例如,这个点代表了学习率α=0.01时,50个回合后达到的平均误差。

现在来看TD的性能。我们看到TD的表现始终优于蒙特卡洛。

让我们更仔细地观察。注意,学习率α=0.15时,误差下降更快,但最终导致了更高的最终误差。

使用更小的学习率时,TD学习得更慢,但达到了更低的最终误差。


总结

在本节课中,我们一起进行了一个严谨的实验来比较TD学习和蒙特卡洛方法。

实验结果表明,在这个特定问题中,TD学习收敛更快,并且能达到更低的最终误差。

我们下节课再见。

026:可复现、可重用与鲁棒性

在本节课中,我们将探讨构建强化学习系统时至关重要的三个特性:可复现性、可重用性与鲁棒性。我们将通过分析实际研究案例,理解当前领域面临的挑战,并学习如何更严谨地进行实验设计与结果解读。


大家好,我是Jo Pino。我是Miguill大学计算机科学学院的教员,同时也是蒙特利尔Facebook人工智能研究实验室的研究经理。今天我很高兴能在这里,与大家分享我们在构建强化学习系统方面的一些工作,特别是关于如何使这些系统具备可复现、可重用和鲁棒的特性。

你可能会好奇,为什么我要将这三个“R”联系在一起,它们有什么共同点。让我引用美国国家科学基金会的一段话来说明:可复现性指的是研究者使用原始研究者所用的相同材料,复制先前研究结果的能力。可复现性也是让研究发现可信且具有信息量的最低必要条件。因此,作为科学家,这些组成部分对我们实践科学的方式非常重要,对于我们分享工作成果也同样关键。

不仅在机器学习领域,整个科学界都曾讨论过“可复现性危机”。《自然》杂志在2016年进行了一项非常有趣的研究,调查了约1500名科学家,询问他们是否认为其所在领域存在可复现性危机。很大一部分人给出了肯定的回答,认为存在轻微或严重的危机。

在我们的一些工作中,我们一直试图弄清楚,发出警报和回答调查是一回事,但仔细审视我们进行比较时数据所揭示的信息则是另一回事。就强化学习而言,过去几年我们看到的进步速度令人印象深刻。系统在许多情况下展示了玩游戏的能力,其表现水平超过了最优秀的人类。

我们曾认为一些游戏非常困难,可能需要数十年才能解决,但我们已经取得了一些令人瞩目的成果,特别是在围棋游戏上,也在一些具有挑战性的视频游戏上,我们的强化学习系统能够取得非常好的成绩。

在游戏和模拟中表现出色是很好的,这让我们看到了这项技术的潜力。但从长远来看,我们真正关心的是这项技术、我们的算法,能多好地帮助我们解决现实世界的问题。因此,为了理解科学已经发展到什么程度,以及我们距离解决这些困难、复杂的现实问题有多近,我们开始深入挖掘近期的文献。

我们查看了过去大约25年的强化学习论文。你可以看到图中的曲线增长非常迅速:21世纪初,每年只有几百篇相关主题的论文发表;最近,每年有超过20,000篇论文发表。这意味着每年都有大量的新发现涌现。当我们问及所有这些方法中哪些在现实世界中真正有效时,筛选所有这些信息变得非常困难。因此,回到今天的核心主题,论文中报告发现的方式是否符合我们在可靠性、鲁棒性、可复现性方面的标准,变得至关重要。

为了验证这一点,我们进行了一项小调查。我们从大量论文中挑选了四篇,特别是四篇被广泛引用、常用且代码可用的论文。我们开始审视这些论文中的发现有多鲁棒。我今天要传达的信息实际上超越了这些具体的论文,真正关注的是我们在这个领域如何进行实证科学研究。

我们开始比较这四种不同的方法。这些是策略梯度算法,是策略梯度的不同变体。我们训练一个非常简单的智能体学习行走,我们称之为“半猎豹”领域——有点像一只被切成两半的卡通猎豹,所以只有两条腿,它必须学会奔跑而不摔倒。我们比较了四种不同的算法。在左边的图中,你可以看到这四种算法。基于此,你可能会认为红色算法比其他算法表现好得多。在这个例子中,具体哪个算法是哪个并不重要,我们的核心信息是关于如何进行公平的比较,以及我们的结论是否从此得出是鲁棒的。基于这一个结果,似乎红色算法表现更好。

上一节我们比较了单一任务上的算法表现,本节中我们来看看当我们将实验扩展到更多样化的任务时会发生什么。

我们将实验扩展到控制器的略微不同的变体。另一个例子是“跳跃者”,还有一个叫做“游泳者”。这些都是我们需要控制的角色的略微不同版本。当你看到底部两个图时,你会发现蓝色算法似乎表现得更好。在左下图中,蓝色算法表现相当好,置信区间非常窄;而在右下图中,蓝色算法也表现良好,但置信区间非常宽。因此,综合所有这些结果,你会认为,如果在更多领域测试每种算法的性能,就能更好地理解它的效果如何,并更好地预测它是否可能在现实世界中有用。但我们在这里发现,随着每个实验的进行,我们只是变得越来越困惑,因为结果彼此之间并不一致。

我们开始更深入地挖掘背后可能发生的情况。我们想,当然,我们没有自己实现这些算法,我们使用了一些可用的开源代码。所以我们想,也许我们没有找到正确的源代码,也许我们在某个地方得到了一个糟糕的实现。我们开始挖掘不同的实现。我在图中展示的是来自这四种算法之一(称为TRPO)的三种不同的公开可用实现。你在这里看到的是其中一个版本(蓝色版本)比其他两个版本表现好得多。

我们想,也许TRPO作为一种策略梯度方法有点不稳定,代码难以实现。我们查看了其他一些情况,结果非常相似。从一个代码库切换到另一个,它们声称是相同的算法,应该工作方式相同,对吧?然而,我们在实证性能上看到了非常显著的差异。

随着我们提出越来越多的问题并深入探究可能解释这些差异的原因,我们注意到,在许多情况下,有许多不同的超参数需要配置。根据你如何设置这些参数,你会得到非常不同的结果。

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

你可能会想说,我们是在比较不同的算法,进行这些比较最公平的方式是给它们相同的数据量、相同的计算量,一切都一样。但从我们的分析中,正如我提到的,我们真正发现的是,要得出鲁棒的结论,需要更深入地思考这个问题,特别是要承认一个事实:不同的算法将有不同的超参数,你不能只是从一个算法到另一个算法使用相同的设置。

不同的方法对这些超参数有不同的敏感性。对于其中一些参数,你可能需要比其他的搜索更长时间、更仔细。哪种方法最好通常取决于你拥有多少数据以及你能负担多少计算量。因此,这将根据应用程序的不同而发生巨大变化,取决于你的数据来源以及你试图部署AI系统的平台类型。

综合以上所有内容,回到主要问题,我认为我今天要传达的主要信息是,我们必须非常小心地解释我们在论文中读到的信息。要非常小心我们如何设置实验,如何比较不同的方法。当我们这样做时,我们可以得出更鲁棒的结论。这归根结底回到了科学的基础:科学是一项我们参与的集体活动,其目的真正在于理解和解释现象。要做到这一点,我们必须始终非常小心你做事的方式。

非常感谢。


本节课中我们一起学习了强化学习系统构建中可复现性、可重用性与鲁棒性的重要性。我们通过案例分析看到,算法的表现可能因实现方式、超参数设置和测试环境的不同而产生巨大差异。因此,严谨的实验设计、详尽的超参数搜索以及对结果背景的审慎解读,对于得出可靠、可推广的结论至关重要。这不仅是良好科学实践的核心,也是将强化学习技术成功应用于现实世界问题的关键一步。

027:与玛莎的会议-讨论你的结果

在本节课中,我们将通过可视化智能体在学习过程中的表现,来深入理解其学习行为。我们已经完成了顶点项目,训练了一个能让登月舱着陆的智能体,并分析了其对超参数的敏感性。现在,我们将观察智能体在训练过程中的实际表现,以直观地了解它是如何学习的。

观察训练后的智能体

上一节我们分析了学习曲线和参数敏感性图。本节中,我们来看看智能体在训练过程中的行为表现。

以下是一段智能体经过一定训练后的演示视频。你会注意到,虽然策略尚未完美,但已经相当不错。然而,智能体并非一开始就如此。

  • 智能体起初对这个世界一无所知,必须通过试错来学习。
  • 在训练早期,智能体的行为明显不是最优的。
  • 例如,智能体可能在整个回合中只决定开启一侧的推进器,这显然无法成功着陆。
  • 之后,智能体有时学会了只使用底部主推进器。然而,这会将智能体远远推离屏幕,导致它获得很大的负奖励。

分析早期学习行为

如果智能体不能一直使用主推进器,也不能一直使用侧推进器,那么一个明显的错误选择就是完全不做任何动作。

我们可以尝试假设一些可能导致这种情况的原因:

  • 一种可能性是神经网络在早期产生了不良的表征。
  • 例如,智能体可能过度泛化。如果侧推动作在某个状态下导致了很高的负奖励,智能体可能会过度泛化,认为侧推动作在所有状态下都很糟糕。
  • 随着表征的改进,智能体能更好地区分不同状态。当然,这只是一个假设,要找出真正的原因还需要一些实验。

观察改进后的表现

经过更多回合的学习后,智能体的表现要好得多。

  • 智能体下降的速度仍然稍快,导致一个角撞到了地面。
  • 但从这里开始微调策略相对容易。

总结与意义

本节课中,我们一起学习了通过可视化来观察智能体的学习过程。

观看智能体着陆的视频不仅有趣,也是一种调试和理解智能体的有效方法。只要条件允许,花时间进行这种可视化是值得的,它能帮助你更深入地理解你的智能体。

028:课程总结

在本节课中,我们将回顾并总结整个强化学习系统的构建过程。从问题形式化到智能体设计,再到参数调优,我们将系统性地梳理所学内容。


🎉 课程回顾与系统总结

恭喜你!你已经完成了课程,并构建了一个完整的强化学习系统。

让我们快速回顾一下你所构建的系统。在整个顶点项目中,我们逐步添加了用于解决月球着陆器问题的工具。

我们首先将问题形式化为一个马尔可夫决策过程,并实现了环境。这主要涉及精确指定奖励函数,以引导智能体成功着陆。

上一节我们介绍了问题形式化,本节中我们来看看如何设计智能体。

我们接着讨论了如何设计一个智能体,使其能在此环境中学习到一个优秀的策略。第一步是确定哪种强化学习算法适合给定的问题设置。

我们遵循在课程3中构建的课程地图,将选择范围缩小到三种算法:期望SARSASARSAQ学习

以下是这三种算法的核心更新公式:

  • 期望SARSA:
    Q(S, A) ← Q(S, A) + α [R + γ * Σ π(a|S') * Q(S', a) - Q(S, A)]
  • SARSA:
    Q(S, A) ← Q(S, A) + α [R + γ * Q(S', A') - Q(S, A)]
  • Q学习:
    Q(S, A) ← Q(S, A) + α [R + γ * max_a Q(S', a) - Q(S, A)]

接下来,我们研究了元参数的选择如何影响智能体的成功。所有具体的实现细节,包括关于函数近似、探索和优化的细节,都可以被视为元参数。我们如何指定这些参数会对智能体的性能产生重大影响。

我们讨论了其中的几种选择以及常见的经验法则。例如,我们根据常规经验决定了神经网络的规模和激活函数。然而,像步长这样的元参数可能难以选择。

这引出了项目的最后一部分:对步长进行参数研究。理解我们的算法和系统对于成功部署至关重要。

最后,你得以看到你的智能体实际运行。


📚 总结与展望

本节课中我们一起学习了将强化学习方法应用于实践的完整流程。我们构建了一个解决月球着陆器问题的完整系统,涵盖了从环境定义、算法选择到参数调优的全过程。

我们希望你已经对在实践中应用强化学习方法的细微之处有了一些了解。这其中需要做出许多选择,并且需要相当多的专业知识和经验才能做好。我们的目标是让你获得一些实践经验,希望这能帮助你在未来将强化学习应用于现实世界的努力中。

029:专业化总结

在本节课中,我们将回顾整个强化学习专项课程的核心内容,梳理从基础概念到高级方法的知识脉络,并对学习成果进行总结。

课程概述

恭喜你完成了强化学习专项课程。从第一门课程学习价值函数、策略和序贯决策问题的基本概念开始,我们已经走过了很长的路。

回顾所学知识最简单的方法是再次查看我们的课程地图。

表格化设置入门

我们从表格化设置开始,让你在不被函数逼近带来的额外问题困扰的情况下,熟悉强化学习的许多关键概念。

我们首先假设你拥有一个完美的模型,并专注于预测和控制中的关键思想。我们讨论了动态规划方法以及它们如何解决贝尔曼方程。

转向基于样本的方法

上一节我们介绍了在已知模型下的规划方法,本节中我们来看看当智能体不再被给定模型时的情况。

我们转向基于样本的方法,智能体主要通过与环境的试错交互进行学习。

我们首先考虑智能体不学习模型的算法,包括蒙特卡洛算法和使用自举的时间差分学习算法,后者可以在每个时间步学习和更新策略。

以下是这些算法的核心:

  • 预测算法:TD(λ) 用于价值预测。
  • 控制算法:Q-learning、Sarsa 和 Expected Sarsa 用于学习最优策略。

引入函数逼近

在掌握了样本方法后,我们使用函数逼近重新审视了所有这些概念,以学习近似的价值和策略。

我们首先讨论了蒙特卡洛和TD算法如何扩展到使用函数逼近。这需要定义一个损失函数,并理解基于梯度的优化方法。

新目标与策略优化

接着,我们讨论了两个新思想:平均奖励和策略梯度方法。

我们学习了使用平均奖励作为在持续任务中表述智能体目标的新方法。我们也学习了策略梯度方法如何通过直接优化平均奖励目标来学习策略。

学习成果与展望

本专项课程的目标是为你提供基础性知识。理解基本原理对于恰当地使用强化学习至关重要。

你现在应该能更好地理解强化学习何时适合解决特定问题,以及如何将你的问题表述为一个强化学习问题。这个看似简单的事情代表了一大步。人们常常思考:“我如何将最先进的强化学习技术应用到我的问题上?”而实际上,有时一个非常简单的方法就足够了,或者问题本身最初就没有被很好地表述为强化学习问题。我们希望你能更明智地判断。

希望你学到了一些关于在使用强化学习时保持条理性和科学性的方法。你现在知道了形式化你的马尔可夫决策过程或赌博机问题、确定合适的算法以及仔细评估和理解你的自主学习系统性能是多么重要。

掌握基础知识是学习强化学习高级主题的第一步。你在这里学到的知识也将有助于揭开你在博客文章或科学论文中读到的、乍一看很复杂的算法的神秘面纱。你现在应该能够看到,最先进的系统实际上是建立在相对简单的思想之上的。永远不要对你不理解的事物感到敬畏。

我的目标是帮助更多人理解并有效地使用强化学习。我期待着看到你用新技能所取得的成就。

我们非常享受与你共度的时光。第一次学习一个新主题是如此令人兴奋。我们也坚信,强化学习和人工智能将使世界变得更美好。你现在已经准备好在这个更美好的世界中发挥你的作用了。😊

总结

本节课中我们一起回顾了整个强化学习专项课程的旅程。我们从表格化环境下的基础概念和动态规划出发,学习了无模型的蒙特卡洛和时间差分方法,进而扩展到使用函数逼近处理大规模问题,并最终探讨了平均奖励目标和直接优化策略的策略梯度方法。这套知识体系为你奠定了坚实的理论基础,使你能够明智地判断问题、选择方法,并向着更高级的强化学习应用与创新迈进。

posted @ 2026-03-26 12:21  布客飞龙III  阅读(6)  评论(0)    收藏  举报