UCB-CS285-深度强化学习笔记-全-
UCB CS285 深度强化学习笔记(全)
课程 P1:CS 285 第1讲,引言(第一部分)🤖
在本节课中,我们将要学习强化学习的基本概念及其动机。我们将探讨为何在某些复杂问题中,强化学习比传统的监督学习更具优势,并了解其历史渊源和现代应用。
让我们假设你想要构建一个系统,使用机器人拾取物体。机器人从相机中看到图像,目标是输出空间中的坐标。这将允许它成功拾取物体。
这是一个相当棘手的问题。虽然你可能认为只需要在图中定位物体并输出位置,但正确拾取物体的方法实际上有很多特殊情况和例外需要考虑。
如果你想手动设计解决方案,刚性物体的拾取相对直接,只需要将手指放在两侧。但如果物体形状怪异、质心分布复杂,你需要确保更接*质心来拾取它,以防它从抓握器中掉出。
如果物体柔软可变形,那么可能需要一套完全不同的策略,例如夹住它。每当遇到有许多特殊情况、例外和小细节的场景,使用机器学习就变得非常吸引人。因此,将其设置为一个机器学习问题会更好。

与其手动处理所有小例外,你可以运行一种通用的机器学习程序,也许使用卷积神经网络自动从图像中提取适合的抓握位置。问题在于,我们在监督学习中的标准工具并不容易实现这一点。
因为它们需要我们在某种程度上获取一个数据集,该数据集由图像和适合的抓握位置组成的配对。问题是,甚至人类也不能必然确定最佳的抓握位置,因为抓握是机器人与其环境之间的物理交互属性,并非完全由人类的直觉所决定。
我们没有很多使用机器人手指拾取东西的经验。我们能否以某种方式使用机器学习,同时避免需要手动监督这个过程?
如果我们让机器人自己收集大量的尝试,尝试不同的抓握并观察哪些成功、哪些失败,这实质上是强化学习的主要思想。在本课程中,我们将讨论解决这个问题的不同方法。
在强化学习设置中,我们不会尝试手动指定机器人应该如何抓取物体。相反,机器本身将收集一个不一定由好例子组成、但由结果标记的数据集。
数据集将包含机器人行为的图像,以及该行为导致失败或成功的结果。更一般地,我们将此称为奖励函数:机器人将为成功获得奖励,为失败受到惩罚。

强化学习算法与监督学习算法有很大的不同。它不仅仅是试图复制数据中的所有内容,而是试图使用这些成功/失败标签(即奖励标签),以找出它应该做什么来最大化成功的数量或最大化奖励。

这样,我们或许可以得到一个比机器人在收集数据时实际执行的*均行为更好的策略。这个策略能够利用经验来改进它通常的行为。
上一节我们介绍了强化学习解决机器人抓取问题的基本思路。现在,让我们将其放在*期人工智能发展的背景下,看看我们在人工智能方面看到了哪些最*的进步。

过去几年在人工智能领域非常活跃。我们看到了相当显著的进步,例如,在AI系统能够根据文本提示生成图片的能力上。
你可以获取一个扩散模型,让它根据提示(如“请提供一个充满活力的萨尔瓦多·达利的肖像画,面部一半是机器人”)生成一幅可能的图片。
我们还可以获取能够进行对话的语言模型。这些模型可以告诉你关于“牛去哈佛学习牛科学专业”的笑话,或者作为助手解释甚至回答复杂的编码提示。
在标准的生成模型应用之外,我们也看到了许多有趣的结果。例如,在生物科学中,你可以使用生成模型来设计能够与特定病毒结合的蛋白质。
数据驱动的AI已经取得了巨大的进步。我们从图像生成到文本处理等方面都看到了许多进步。许多这些在过去几年中取得的、被广泛报道的进步,在某种意义上都基于与监督学习方法非常相似的思想。
在我讨论机器人示例时提到的图像生成模型、语言模型等,其原理本质上是一种密度估计:估计变量 x 的概率分布 p(x),或在给定 x 的条件下估计 y 的条件概率分布 p(y|x)。
对于语言模型,通常是估计自然语言句子的分布。对于图像生成模型,可能是基于提示生成图像的条件分布。但这是一种非常相似的思想,并且在两种情况下,这些实际上只是我们在统计课程中学到的那种密度估计的大规模扩展版本。
当你在进行密度估计时,一个非常重要的事情是要记住,你本质上在进行监督学习,学习的是关于数据分布的知识。这使你非常重视考虑数据实际上来自哪里。
如果数据由从网络上挖掘的大量图像组成,并且这些图像被标记为文本提示,那么你实际上学习的是关于人们在网上上传的图像种类。在文本情况下,你学习的是人们通常输入的内容。
如果你的目标是生成与人类生成的内容相似的内容(例如人类可能会画的画作、可能会写的文本),那么从这些数据中学习可以给你非常强大的能力。
当然,生成与人类相似的内容并不是我们想要自动化系统做的唯一事情。在我们深入讨论这一点之前,让我们先看看强化学习如何能做得更好,以及它来自哪里。
现代强化学习可以追溯到两个主要学科。第一个是心理学,特别是在动物行为的研究上。
这是斯金纳的照片,他是一位著名的研究者,研究了动物对各种奖励反应的行为。从那条研究路线产生的工作,构成了我们今天在计算机科学中所做的强化学习的基础。它模型化了智能体与其环境的交互,并使其响应奖励来适应环境。
但是,有一个不同的渊源也对现代强化学习产生了重大影响,那就是控制理论和优化领域,其根源包括进化算法等。
这是一段1994年由卡尔·辛姆斯制作的视频。它展示了一种优化程序(他称之为“进化”,但具有类似的原则),被用来优化这些虚拟生物的形式和行为。这些虚拟生物会做像走路、跑步甚至互相战斗这样的事情,它们的行为会被优化并不断演进。

这与我们今天常想到的、以复制人类行为为目标的机器学习有很大的不同。在这里,目标是产生不需要由人类设计就能实现的行为。
如果我们快进几十年,可以看到更复杂的算法。例如,这个结果是展示一个类人型的模拟机器人,自动找出如何做像走路和跑步这样的事情。

这两门学科实际上共同影响了现代深度强化学习的研究。现代深度强化学习可以被视为大规模优化与古典强化学习算法思想的结合。一旦我们接受了那些古典强化学习的想法,然后用现代计算和优化工具来放大它们,我们就可以得到非常强大的涌现行为。
你们中许多人可能听说过阿尔法狗。在阿尔法狗的一场冠军赛中,有一个被称为“第37步”的著名时刻。阿尔法狗系统执行了一步让观赛专家非常惊讶的移动,因为这不是人类玩家可能会做出的移动类型。这就是涌现行为。

我们*年来看到的生成式人工智能结果非常令人印象深刻,正是因为它们看起来像是一个人可能会产生的东西(如图片或文本)。而强化学习最令人印象深刻的结果,其令人印象深刻之处恰恰在于没有人想过它。
我们之所以对阿尔法狗的结果感兴趣,是因为其出现的新现象——一个自动化算法能够发现超越人类所做出的解决方案。如果我们要严肃对待AI的研究,那么这一点非常重要。
因为如果我们仅仅复制人类,那么我们可能无法获得与人类相关联的那种灵活的智能。我们必须找出如何让算法发现完成任务的最佳解决方案的方法,而不仅仅是一个人可能会采取的解决方案。这样,当面对新颖的情况时,它们才能够智能地反应。
这就是我们要讨论强化学习的动机。在本讲座的剩余部分,我将带你了解课程的结构,并稍微描述一些更多的动机。

本节课中,我们一起学习了强化学习的基本动机。我们了解到,对于存在许多特殊情况和物理交互的复杂任务(如机器人抓取),强化学习通过让智能体从自身尝试的成功与失败(奖励)中学习,比需要大量精确标注数据的监督学习更具优势。我们还回顾了强化学习与心理学、控制优化等领域的渊源,并认识到其追求超越人类已有解决方案、产生智能涌现行为的核心价值。在接下来的课程中,我们将深入探讨强化学习的具体算法和实现。
课程 P10:CS 285 第4讲,第2部分 - 强化学习算法概述 🧠
在本节课中,我们将学习强化学习算法的通用框架。我们将了解大多数算法如何由三个核心部分组成,并探讨这些部分在不同算法中的具体实现及其计算成本。
算法通用结构 🔧
上一节我们介绍了强化学习的基本概念,本节中我们来看看算法的通用解剖结构。从高层次看,大多数强化学习算法都包含三个基本部分。

以下是这三个核心部分:
- 生成样本(橙色部分):强化学习通过试错法学习。这部分意味着在实际环境或模型中运行你的策略,与马尔可夫决策过程交互并收集数据。样本通常是轨迹,即从由策略诱导的轨迹分布中采样得到的数据序列。
- 评估表现(绿色部分):这部分对应于估计当前策略的表现。例如,评估策略获得了多少奖励,或者学习环境的动态模型。
- 改进策略(蓝色部分):这是实际优化策略、使其表现更好的步骤。完成评估后,算法会根据评估结果调整策略参数。

大多数算法都包含这三部分,尽管在不同算法中,某些部分可能非常简单,而另一些部分可能非常复杂。
算法实例分析 📊
现在,我们通过两个具体例子来看看这三部分是如何运作的。
策略梯度算法
在策略梯度算法中,这三个部分的具体实现如下:
- 生成样本:运行当前策略,生成一系列轨迹(如图中黑线所示)。
- 评估表现:评估这些轨迹的好坏。具体做法非常简单,仅仅是对轨迹中获得的奖励进行求和。这个总和(即回报)告诉我们策略的优劣。
- 改进策略:目标是增加好轨迹(绿色对勾)的概率,减少坏轨迹(红色叉)的概率。这通过计算策略关于奖励的梯度,并应用梯度上升来更新策略参数
θ来实现。
这是一种直观的试错法:运行策略、测量好坏、然后调整策略使好的结果更可能出现。
基于模型的强化学习
在基于模型的强化学习方法中,这三个部分有不同的侧重点:
- 生成样本:同样是通过运行策略收集轨迹数据。
- 评估表现:这部分变得复杂。我们不是简单求和,而是学习一个环境动态模型。例如,训练一个神经网络
f_φ,使其能够预测下一个状态:s_{t+1} ≈ f_φ(s_t, a_t)。这个模型在橙色部分生成的数据上进行监督学习训练。 - 改进策略:改进策略时,我们可以将策略
π_θ和学到的模型f_φ组合起来,通过模型反向传播奖励信号来优化策略参数。这相当于在学习的“模拟器”中规划更好的行动。
基于模型的方法将更多计算成本放在了绿色部分(学习模型)和蓝色部分(通过模型进行规划或优化)。

各部分计算成本考量 ⚖️
不同部分的计算成本差异很大,这会影响我们对算法的选择。
以下是各部分的成本分析:
- 生成样本(橙色部分)的成本:成本高度依赖于具体问题。
- 如果在真实系统(如机器人、汽车)中收集数据,成本可能极高,因为数据必须实时获取。
- 如果在快速模拟器(如MuJoCo)中收集数据,成本可能很低。
- 评估表现(绿色部分)的成本:成本范围也很广。
- 如果只是对奖励求和,成本极低。
- 如果是训练一个庞大的神经网络模型,成本可能非常高,相当于在算法循环内进行大规模监督学习。
- 改进策略(蓝色部分)的成本:
- 如果只是采取一个梯度步,成本相对较低。
- 如果需要通过整个模型和策略进行反向传播(如某些基于模型的方法),成本可能很高。
不同的算法会将计算努力分配在不同的部分。例如,我们将在下周讨论的Q学习算法,就将其主要努力放在了绿色部分(学习价值函数)。

总结 🎯

本节课中,我们一起学习了强化学习算法的通用框架。我们了解到,大多数算法都由生成样本、评估表现和改进策略三部分组成。我们通过策略梯度和基于模型学习两个例子,看到了这些部分的具体实现方式。最后,我们分析了各部分的计算成本,认识到根据实际应用场景(如真实系统还是模拟器),选择合适的算法以*衡样本效率与计算开销至关重要。
课程 P11:价值函数与Q函数 🎯
在本节课中,我们将学习强化学习中的两个核心概念:价值函数与Q函数。它们是评估和优化策略的关键工具,理解它们对于设计强化学习算法至关重要。
概述 📖
强化学习的目标通常被定义为对轨迹分布相关奖励总和的期望。本节课我们将看到,这个目标可以递归地分解,并引出价值函数和Q函数的定义。我们将探讨它们的含义、相互关系以及它们在改进策略中的重要作用。
强化学习目标的递归分解 🔄
上一节我们提到了强化学习的目标。本节中我们来看看如何递归地分解这个期望值。
强化学习的目标可以定义为一个期望值,即对轨迹分布相关奖励总和的预期。这等价于对每个状态-动作对的预期奖励进行时域求和。
我们可以应用概率链规则,将与该分布相关的期望值写为一系列嵌套的期望值。最外层的期望是对初始状态分布 p(s1) 的期望。其内部,我们有一个关于动作 a1 按照策略 π(a1|s1) 分布的期望值。
既然我们对 s1 和 a1 都有了期望,我们可以计入第一个奖励 R(s1, a1)。注意,这个内部关于 a1 的期望依赖于 s1。
然后,我们将添加所有未来的奖励,但这需要引入另一个期望。这个期望是关于下一个状态 s2 的分布 p(s2|s1, a1),因此它依赖于 s1 和 a1。
在这个内部,我们还有一个关于动作 a2 按照策略 π(a2|s2) 分布的期望。之后我们可以计入奖励 R(s2, a2),并继续为 s3 添加期望,如此递归下去,直至无穷。
引入Q函数 💡
上一节我们看到了目标的复杂嵌套形式。本节中我们引入一个关键概念来简化它。
如果我们有一个函数,能告诉我们从 (s1, a1) 开始,未来所有奖励的期望总和,那么优化第一步的策略就会变得非常简单。
让我们为这部分定义一个符号。设 Q(s1, a1) = R(s1, a1) + E[关于s2, a2, ...的未来奖励总和]。那么,原始的强化学习目标就可以简单地写成 E_{s1, a1}[Q(s1, a1)]。

这个定义的重要性在于:如果你知道 Q(s1, a1),那么优化第一步的策略将非常容易。你只需要为每个状态 s1 选择能使 Q(s1, a1) 期望值最大的动作 a1,并将全部概率分配给这个最优动作。
定义Q函数与价值函数 📝
上一节我们为第一步引入了Q函数的概念。本节中我们将其推广到更一般的形式。
这个更一般的概念就是Q函数。Q函数可以在任何时间步 t 定义,而不仅仅是第一步。定义如下:
Q^π(s_t, a_t) = E[ Σ_{t'=t}^T R(s_{t'}, a_{t'}) | s_t, a_t ]
它依赖于策略 π,表示在状态 s_t 采取动作 a_t 后,遵循策略 π 所能获得的期望总奖励。
与Q函数密切相关的一个量是价值函数。价值函数 V^π(s_t) 定义为从状态 s_t 开始,然后遵循策略 π 所能获得的期望总奖励。
价值函数可以写成Q函数关于动作的期望值:
V^π(s_t) = E_{a_t ∼ π(·|s_t)}[ Q^π(s_t, a_t) ]
因为Q函数告诉你从 (s_t, a_t) 开始的期望总奖励,对其按策略 π 取期望,就得到了从 s_t 开始的期望总奖励。
一个重要的观察是:状态 s1 处的价值函数 V^π(s1) 的期望,就是整个强化学习的目标。这与之前将目标写为 E[Q(s1, a1)] 是一致的。
Q函数与价值函数的用途 🛠️
上一节我们正式定义了这两个函数。本节中我们来看看它们为何有用。
Q函数和价值函数的核心用途在于评估和改进策略。
如果我们有一个策略 π,并且能够计算出它完整的Q函数 Q^π(s, a),那么我们就可以改进这个策略。例如,我们可以定义一个新策略 π',它在每个状态 s 下,都将概率1分配给能使 Q^π(s, a) 最大的动作 a。可以证明,策略 π' 至少和 π 一样好,甚至可能更好。
这是一类称为策略迭代算法的基础,这类算法本身又能推导出Q学习算法。关键在于,无论 π 是什么,你都可以用这种方式改进它。
此外,当我们讨论策略梯度时,也会用到这个思想。直觉是:如果 Q^π(s, a) > V^π(s),那么动作 a 在该状态下的表现优于*均水*(因为 V^π(s) 是策略 π 下的*均表现)。因此,你可以修改策略 π(·|s),增加那些Q值高于状态价值 V(s) 的动作的概率。这可以用于推导基于梯度的策略更新规则。
这些思想在强化学习中至关重要,在后续关于无模型强化学习算法的课程中,我们会反复用到它们。
在算法框架中的位置 🧩
在强化学习算法的典型框架中,Q函数和价值函数通常位于评估当前策略好坏的模块中。你会在这个模块中拟合或学习它们,以指导策略的更新。

总结 ✨

本节课我们一起学习了强化学习的核心评估工具:
- 价值函数
V^π(s):衡量从状态s开始,遵循策略π的期望总回报。 - Q函数
Q^π(s, a):衡量在状态s采取动作a,然后遵循策略π的期望总回报。 - 两者关系为
V^π(s) = E_{a∼π}[Q^π(s, a)]。 - 它们的主要用途是评估策略,并通过选择具有更高Q值的动作来改进策略,这构成了策略迭代、Q学习以及部分策略梯度方法的基础。

理解价值函数和Q函数是打开深度强化学习算法大门的关键钥匙。
强化学习算法概览课程 P12 🧠
在本节课中,我们将快速概览不同类型的强化学习算法。我们将了解每种算法的核心思想,以便在后续深入讨论时不会感到陌生。强化学习算法通常旨在优化之前定义的期望总奖励目标。
基于模型的强化学习算法 🤖
上一节我们介绍了强化学习算法的分类,本节中我们来看看基于模型的强化学习算法。这类算法的核心是学习一个关于环境的过渡模型。

过渡模型通常表示为 p(s_{t+1} | s_t, a_t),即给定当前状态和动作,预测下一个状态的概率分布。这可以是一个神经网络,输入 (s_t, a_t),输出对 s_{t+1} 的预测(概率分布或确定值)。
学习到模型后,蓝色框(即利用模型的部分)有多种实现方式。以下是几种常见的选择:

- 直接用于规划:例如,学习国际象棋规则后,使用蒙特卡洛树搜索等规划算法来下棋;或学习机器人物理模型后,使用最优控制方法进行轨迹优化。
- 通过模型反向传播:使用学习到的模型来计算奖励函数关于策略参数的梯度。这需要技巧来保证数值稳定性,例如使用二阶方法通常比一阶方法效果更好。
- 辅助学习价值函数:使用模型通过动态规划方法来学习一个价值函数或Q函数,进而改进策略。
- 生成模拟数据:使用模型为无模型强化学习算法生成额外的训练数据,这通常很有效。
基于价值函数的算法 💎
接下来,我们看看基于价值函数的算法。这类方法的核心是拟合对状态价值 V(s) 或动作价值 Q(s, a) 的估计。

价值函数通常由神经网络表示,输入状态 s(或状态-动作对 (s, a)),输出一个实数值估计。
对于蓝色框(即策略改进部分),基于价值的方法与策略梯度方法有所不同:
- 纯价值方法:策略被隐式地定义为选择能最大化
Q(s, a)的动作,即π(s) = argmax_a Q(s, a)。策略本身并非一个独立的神经网络。 - 策略梯度方法:策略被显式地参数化(例如为一个神经网络
π_θ)。蓝色框通过计算期望奖励关于策略参数θ的梯度,并执行梯度上升步骤来更新策略。梯度估计的方法将在后续课程讨论。其绿色框(数据收集)相对简单,主要涉及在环境中运行策略(或称“部署”)并累计算轨迹的总奖励。 - 演员-批评者算法:这是前两者的混合体。像价值函数方法一样,它拟合一个价值函数或Q函数(批评者);像策略梯度方法一样,它对显式的策略(演员)执行梯度上升,并利用拟合的价值函数来获得更准确的梯度估计。
总结 📝
本节课中我们一起学习了强化学习算法的三大主要类型:
- 基于模型的算法:核心是学习环境动态模型,并利用该模型进行规划、梯度计算或数据生成。
- 基于价值函数的算法:核心是学习价值函数,并通常通过贪心选择(
argmax)来隐式定义策略。 - 策略梯度与演员-批评者算法:核心是直接参数化并优化策略。策略梯度直接使用轨迹奖励,而演员-批评者则引入价值函数来辅助策略梯度的估计。


理解这些基本分类将为我们后续深入探讨具体算法奠定坚实的基础。
强化学习算法概览与权衡 📊

在本节课中,我们将学习为什么存在多种不同的强化学习算法,以及如何根据具体问题在这些算法之间进行权衡。我们将重点讨论样本效率、稳定性与易用性等核心概念,并了解不同算法背后的假设。
1. 为何存在多种算法?🤔
上一节我们介绍了强化学习的基本框架,本节中我们来看看为什么没有一种“万能”的算法。强化学习算法之间存在许多权衡,这些权衡决定了哪种算法在特定情况下表现最佳。
随着后续课程的深入,我们将讨论这些权衡。其中一个重要的权衡是样本效率,它指的是算法需要在环境中收集多少样本(即执行橙色框中的步骤)才能得到一个好的策略。
另一个权衡是稳定性和易用性。强化学习算法可能相当复杂,涉及许多参数和设计选择,例如如何收集样本、如何探索、如何拟合模型或价值函数、以及如何更新策略。每个选择都可能引入额外的超参数,使得针对特定问题做出正确选择变得困难。
不同的方法还基于不同的假设,例如:
- 能否处理随机环境,还是仅适用于确定性环境?
- 能否处理连续的状态和动作空间,还是仅适用于离散状态和动作?
- 能否处理有限时间步长(episodic)问题,还是能处理无限时间步长(continuing)问题?

在某些设定下,直接表示策略可能更容易,即使环境动态非常复杂;而在另一些设定下,学习模型可能比直接学习策略更简单。因此,我们通常需要根据面临的具体问题来做出权衡,例如:
- 为了获得更易用或能处理随机性、部分可观测性的算法,可能选择样本效率较低的算法。
- 如果样本收集成本极高,则可能选择样本效率非常高的算法,但同时接受其可能只支持离散动作等限制。

2. 样本效率 📈
样本效率是衡量算法性能的核心概念之一。它指的是算法需要从当前策略中采样多少次(即需要执行多少次橙色框中的步骤),才能得到一个性能良好的策略。

以下是决定算法样本效率的最重要因素之一:算法是离线策略(off-policy) 还是在线策略(on-policy)。
- 离线策略算法:可以使用过去收集的样本来改进当前策略。
- 在线策略算法:每次策略更新后,都必须丢弃旧样本并重新收集新数据。
因此,在线策略算法的样本效率通常远低于离线策略算法。例如,策略梯度(Policy Gradient)是一种在线策略算法,每次沿策略梯度方向更新时,都必须收集新的样本,因为策略的微小改变也会导致数据分布的变化。

如果我们将算法按样本效率从高到低(从左到右)排列,主要的分界线就是在线策略 vs 离线策略。

- 效率最低的(最右端):进化策略等无梯度方法。
- 效率较低:在线策略的策略梯度算法。
- 效率中等:演员-评论家(Actor-Critic)方法(可在线也可离线)。
- 效率较高:纯粹的离线策略方法,如Q学习。
- 效率可能最高:基于模型的深度强化学习方法。
那么,为什么我们有时还会选择效率较低的算法呢?这是因为随着我们向效率更高的方向移动,其他方面的权衡可能变得不利,例如计算时间(时钟时间)。
算法的样本效率并不等同于其计算效率。在某些应用中,生成样本(例如在快速模拟器中运行)的成本非常低,大部分计算时间实际上花在更新价值函数、模型和策略上。在这种情况下,我们可能并不在意样本效率。

有趣的是,在这种情况下,算法的时钟时间排序可能与样本效率排序相反。如果模拟非常廉价,位于光谱右端(样本效率低)的算法在计算上可能更便宜、更快;而左端(样本效率高)的算法计算开销可能更大。
3. 稳定性与易用性 ⚖️
在讨论稳定性和易用性时,我们关注以下问题:
- 算法是否收敛?即运行足够长时间后,是否会稳定在一个固定解,还是会持续振荡甚至发散?
- 如果收敛,它收敛到什么?是强化学习目标的局部最优解,还是其他明确定义的目标?
你可能会问,为什么收敛性在强化学习中会成为一个问题?因为在监督学习或凸优化中,我们通常只关心那些保证收敛的方法。然而在强化学习中,能保证收敛的算法实际上是一种“奢侈品”。实践中许多常用方法在一般情况下并不保证收敛。
这是因为强化学习通常不纯粹是梯度下降或上升。许多算法本质上是定点迭代(fixed point iteration),其收敛性保证通常只在简化的假设下成立(如表格化、离散状态),而这些假设在实践中往往不成立。
以下是不同算法类别的收敛特性:

- Q学习:是一种定点迭代。其收敛性在理论上是开放问题。
- 基于模型的强化学习:模型本身被训练以准确预测状态转移,这个训练过程是收敛的。但没有保证更好的模型一定会带来更高的奖励。
- 策略梯度:执行的是真实目标函数的梯度上升,因此理论上会收敛。但它是样本效率最低的方法之一。
- 价值函数拟合:是一种旨在最小化贝尔曼误差(Bellman error) 的定点迭代。即使价值函数预测准确,也不保证能产生高性能的策略。在最坏情况下,使用非线性函数*似器(如神经网络)的流行深度强化学习算法甚至可能不收敛。
4. 常见假设与适用范围 🎯

不同的强化学习算法基于不同的假设,了解这些假设对选择合适算法至关重要。

假设一:完全可观测性
大多数价值函数拟合方法(如Q学习)假设环境是完全可观测的马尔可夫决策过程(MDP),即智能体观察到的信息足以唯一确定系统状态(满足马尔可夫性质)。在部分可观测环境(POMDP)中,这些方法可能失效,但可以通过添加循环网络或记忆机制来缓解。
假设二:情景式学习
许多策略梯度方法假设问题是情景式(episodic) 的,即智能体可以多次“重置”环境并从头开始尝试。虽然这不是大多数基于价值的方法的技术性假设,但它们在满足此条件时通常工作得更好。一些基于模型的方法也依赖此假设。

假设三:连续性或*滑性
在连续状态和动作空间中,一些基于价值函数的方法和许多源自最优控制领域的基于模型的强化学习方法,都假设环境动态是连续或*滑的。这个假设对于这些方法的良好运行至关重要。
在接下来的课程中,当我们讨论具体算法时,会明确指出其依赖的假设。请记住,不同方法对这些假设的依赖程度和严格性要求各不相同,这直接影响它们在实践中的表现。
总结 ✨

本节课中,我们一起学习了强化学习算法的多样性与核心权衡。我们了解到,没有一种算法适用于所有情况,选择时需要权衡样本效率、计算时间、稳定性和易用性。关键区别在于算法是在线策略还是离线策略。此外,不同算法基于不同的假设,如完全可观测性、情景式学习或环境动态的连续性。理解这些权衡和假设,是为你手头的特定问题选择最合适强化学习算法的第一步。
课程 P14:深度强化学习算法概览 🧠
在本节课中,我们将简要了解几种实际的深度强化学习算法。这部分内容旨在让你对这些算法有一个直观的认识,并预览后续课程将深入探讨的主题。我们将通过一些有趣的例子和视频来展示这些算法的应用。
算法类别简介 📚
上一节我们介绍了深度强化学习的整体框架,本节中我们来看看几种主要的算法类别。这些算法将在后续课程中详细讨论。
以下是三种主要的深度强化学习算法类别:
-
价值函数拟合方法
- 这类方法的核心是学习一个价值函数(如状态价值函数 V(s) 或动作价值函数 Q(s, a)),并通过优化价值函数来改进策略。
- 常见算法包括:Q学习、深度Q网络(DQN)、时间差分学习(TD Learning)。
- 核心思想通常可以表示为 Q(s, a) ← Q(s, a) + α [R + γ max_a‘ Q(s‘, a‘) - Q(s, a)] 这样的更新公式。
-
策略梯度方法
- 这类方法直接参数化策略 π(a|s; θ),并通过梯度上升来优化策略参数 θ,以最大化期望回报。
- 常见算法包括:强化学习、自然梯度、信任域策略优化(TRPO)、*端策略优化(PPO)。
-
演员-评论家算法
- 这类方法结合了价值函数和策略梯度,通常包含一个“演员”(负责选择动作的策略)和一个“评论家”(负责评估动作的价值)。
- 常见算法包括:异步优势演员-评论家(A3C)、软演员-评论家(SAC)、深度确定性策略梯度(DDPG)。

- 基于模型的强化学习算法
- 这类方法会学习或利用环境的动态模型(即状态转移概率和奖励函数),并基于此模型进行规划或策略优化。
- 常见算法包括:Dyna、引导策略搜索(GPS)、最大后验策略优化(MPO)、随机值梯度(SVG)。

算法实例与应用 🎮
现在,让我们通过一些具体的例子来看看这些算法在实际中是如何工作的。
示例一:玩雅达利游戏的Q学习
这是一个使用Q学习算法直接从像素输入学习玩雅达利游戏的例子。该算法使用卷积神经网络来估计Q值。
- 算法核心:Q学习(一种价值函数方法)。
- 环境特点:雅达利游戏属于离散动作环境,即动作空间是有限的、离散的集合。
- 决策过程:对于每个状态,神经网络会为每个可能的动作输出一个Q值。智能体通过选择具有最高Q值的动作(即 arg max_a Q(s, a))来进行决策。

示例二:机器人技能学习的引导策略搜索
这个例子展示了机器人学习各种技能,如放置物体。它使用了基于模型的强化学习算法——引导策略搜索。

- 算法核心:引导策略搜索(GPS)。
- 技术组合:该方法结合了环境的动态模型和基于图像的卷积神经网络策略。
- 应用:使机器人能够执行需要精确视觉和运动协调的任务。
示例三:人形机器人行走的策略梯度
这个例子展示了训练一个小型人形机器人学习行走。它使用了策略梯度方法的一个变体——信任域策略优化(TRPO)。

- 算法核心:信任域策略优化(TRPO),这是一种演员-评论家算法。
- 特点:TRPO在更新策略时引入了信任域约束,以确保每次更新是稳定且有益的。它同时结合了策略函数和价值函数*似。

示例四:机器人抓取的Q学习
这个例子是第一节课中展示过的机器人抓取任务。有趣的是,这个结果也是由一种Q学习算法产生的,尽管其具体实现与玩雅达利游戏的例子有所不同。

- 算法核心:Q学习。
- 说明:这表明同一类算法(如Q学习)经过不同的设计和优化,可以应用于从视频游戏到复杂机器人操作等截然不同的领域。
总结 ✨

本节课中,我们一起学习了深度强化学习的几种主要算法类别及其实际应用。
我们简要介绍了:
- 价值函数方法(如DQN),通过评估动作价值来学习。
- 策略梯度方法(如TRPO、PPO),直接优化策略参数。
- 演员-评论家方法(如A3C、SAC),结合了前两者的优点。
- 基于模型的方法(如GPS),利用环境模型进行规划。
通过玩雅达利游戏、机器人操作和行走等生动例子,我们看到了这些算法如何解决不同类型的实际问题。在接下来的课程中,我们将对这些算法进行更深入、更技术性的探讨。

课程 P15:CS 285 第5讲第1部分 - 策略梯度基础 🧠

在本节课中,我们将要学习强化学习中的第一个核心算法——策略梯度。我们将从回顾强化学习的目标函数开始,推导出策略梯度的基本形式,并了解如何通过采样来估计和优化这个目标。
概述 📋

策略梯度算法是强化学习中最直接的算法之一。它通过直接对强化学习的目标函数进行求导,然后对策略参数执行梯度下降,从而使策略得到改进。本节课将详细介绍其数学基础和工作原理。

强化学习目标回顾 🔄


上一节我们介绍了强化学习的基本框架。本节中我们来看看如何形式化其优化目标。

我们有一个参数为 θ 的策略 π。该策略定义了在给定状态 s(或观测 o)时,动作 a 的概率分布。如果策略由一个深度神经网络表示,那么 θ 就是网络的权重。网络以状态为输入,输出动作的概率。

智能体与环境交互,产生一个轨迹 τ,它包含一系列状态和动作:τ = (s₁, a₁, s₂, a₂, ..., s_T, a_T)。轨迹的概率分布 p_θ(τ) 由初始状态分布、策略和状态转移概率共同决定:

p_θ(τ) = p(s₁) ∏_{t=1}^{T} π_θ(a_t | s_t) p(s_{t+1} | s_t, a_t)

强化学习的目标是找到能最大化期望累积奖励的策略参数 θ。目标函数 J(θ) 定义为:

J(θ) = E_{τ ∼ p_θ(τ)} [∑_{t=1}^{T} r(s_t, a_t)]

为简化符号,我们常将轨迹的总奖励记为 R(τ) = ∑_{t=1}^{T} r(s_t, a_t)。因此,目标函数可写为:
J(θ) = E_{τ ∼ p_θ(τ)} [R(τ)]

目标函数的评估 📊
在我们讨论如何优化目标之前,首先需要知道如何评估它。由于我们通常不知道真实的环境动态(初始状态分布 p(s₁) 和转移概率 p(s_{t+1} | s_t, a_t)),我们无法直接计算期望值。
然而,我们可以通过与真实环境交互来采样估计。以下是评估目标函数的步骤:
-
使用当前策略 π_θ 在环境中运行 N 次,收集 N 条轨迹样本 {τ⁽ⁱ⁾}。
-
计算每条轨迹的总奖励 R(τ⁽ⁱ⁾)。
-
目标函数的无偏估计是所有样本轨迹奖励的*均值:
J(θ) ≈ (1/N) ∑_{i=1}^{N} R(τ⁽ⁱ⁾)
样本数量 N 越大,这个估计就越准确。
策略梯度的推导 🧮
我们的目标不仅是评估 J(θ),更是要优化它。为此,我们需要计算目标函数关于策略参数 θ 的梯度 ∇_θ J(θ)。
我们从梯度的定义出发,并运用一个关键的数学技巧(对数导数法则):

∇_θ J(θ) = ∇_θ ∫ p_θ(τ) R(τ) dτ = ∫ ∇_θ p_θ(τ) R(τ) dτ
利用恒等式 ∇_θ p_θ(τ) = p_θ(τ) ∇_θ log p_θ(τ),我们可以将上式重写为:
∇_θ J(θ) = ∫ p_θ(τ) ∇_θ log p_θ(τ) R(τ) dτ = E_{τ ∼ p_θ(τ)} [∇_θ log p_θ(τ) R(τ)]
现在,我们需要处理 ∇_θ log p_θ(τ)。回顾轨迹分布的对数形式:
log p_θ(τ) = log p(s₁) + ∑_{t=1}^{T} [log π_θ(a_t | s_t) + log p(s_{t+1} | s_t, a_t)]

当我们对 θ 求梯度时,与 θ 无关的项(如 log p(s₁) 和 log p(s_{t+1} | s_t, a_t))的梯度为零。因此,只剩下策略项:

∇_θ log p_θ(τ) = ∑_{t=1}^{T} ∇_θ log π_θ(a_t | s_t)
将这个结果代回梯度表达式,我们得到策略梯度的核心公式:
∇_θ J(θ) = E_{τ ∼ p_θ(τ)} [ (∑_{t=1}^{T} ∇_θ log π_θ(a_t | s_t)) R(τ) ]

这个公式非常强大,因为期望内的所有项都是已知或可计算的:
- ∇_θ log π_θ(a_t | s_t):策略模型在给定状态下对执行动作的对数概率的梯度。由于我们知道策略模型(如神经网络),我们可以直接计算它。
- R(τ):轨迹的总奖励,可以通过采样获得。
所有未知的环境动态(p(s₁), p(s_{t+1} | s_t, a_t))只体现在采样分布 p_θ(τ) 中,而我们正是通过采样来*似这个期望的。

REINFORCE 算法 ⚙️

基于上述推导,我们可以得到最基本的策略梯度算法,称为 REINFORCE 算法。它包含以下三个步骤:

- 采样:使用当前策略 π_θ 与环境交互,收集 N 条轨迹样本 {τ⁽ⁱ⁾}。
- 计算梯度估计:对于每条样本轨迹 τ⁽ⁱ⁾,计算其总奖励 R(τ⁽ⁱ⁾),并计算策略对数概率的梯度之和。然后,按照以下公式估计策略梯度:
∇_θ J(θ) ≈ (1/N) ∑_{i=1}^{N} [ (∑_{t=1}^{T} ∇_θ log π_θ(a_t⁽ⁱ⁾ | s_t⁽ⁱ⁾)) R(τ⁽ⁱ⁾) ] - 策略更新:使用估计的梯度执行一步梯度上升(因为我们要最大化奖励):
θ ← θ + α ∇_θ J(θ)
其中 α 是学习率。
这个过程直观地对应了强化学习算法的一般结构:采样(橙色)、评估(绿色)、改进(蓝色)。

总结与展望 🎯

本节课中我们一起学习了策略梯度算法的基础。我们从强化学习的目标函数出发,推导出了策略梯度的核心公式,并介绍了最简单的 REINFORCE 算法实现。该算法允许我们仅通过与环境交互采样,就能估计目标函数的梯度并改进策略。


然而,直接按照上述方式实现的 REINFORCE 算法在实践中可能效果不佳,因为它存在高方差等问题。在接下来的课程中,我们将探讨对策略梯度的直观理解,并学习如何通过引入基线(Baseline)、价值函数等技巧来改进算法,使其在实际应用中更加有效和稳定。
课程 P16:CS 285 第5讲,第2部分 - 策略梯度直觉与挑战 🧠
在本节课中,我们将深入探讨策略梯度的直观含义,理解它在做什么,并分析其在实际应用中可能遇到的问题。我们将从与监督学习的对比开始,逐步构建对策略梯度的理解,并讨论其在高方差和部分可观测性方面的挑战。
策略梯度的直观理解 🔍

上一节我们介绍了策略梯度的数学推导。本节中,我们来看看策略梯度实际上在做什么。
我们之前得到的策略梯度*似表达式为:
[
\nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \left( \sum_{t=1}^{T} \nabla_\theta \log \pi_\theta(a_t^i | s_t^i) \right) R(\tau^i)
]
其中,(\nabla_\theta \log \pi_\theta) 是关键项。
与监督学习的对比
为了理解策略梯度,我们可以将其与监督学习中的最大似然估计进行对比。
在监督学习(例如模仿学习)中,我们收集人类专家选择的动作数据,然后通过最大化观察到的动作的对数概率来训练策略。其梯度为:
[
\nabla_\theta J_{ML}(\theta) = \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_\theta \log \pi_\theta(a_t^i | s_t^i)
]


以下是两者的核心区别:
- 监督学习(最大似然):简单地增加所有观测动作的对数概率,因为我们假设数据中的动作都是“好”的。
- 策略梯度:根据轨迹的总奖励 (R(\tau)) 来加权增加或减少动作的对数概率。高奖励轨迹的概率会增加,低奖励轨迹的概率会减少。

因此,策略梯度可以看作是一种加权版本的最大似然梯度。奖励值充当了权重的角色。

离散动作与连续动作
策略梯度的形式取决于动作空间是离散的还是连续的。
对于离散动作(例如驾驶图像映射到“左转”、“右转”):
- 策略 (\pi_\theta) 输出每个动作的概率。
- (\log \pi_\theta) 是所选动作的对数概率。
- 其梯度 (\nabla_\theta \log \pi_\theta) 是该对数概率对神经网络参数 (\theta) 的导数。
对于连续动作(例如控制人形机器人行走):
- 策略需要输出一个连续值动作的分布,通常使用高斯分布(正态分布)。
- 神经网络输出分布的均值 (\mu_\theta(s)),方差 (\Sigma) 可以是固定的或学习的。
- 动作 (a_t) 的对数概率公式为:
[
\log \pi_\theta(a_t | s_t) = -\frac{1}{2} (a_t - \mu_\theta(s_t))^T \Sigma^{-1} (a_t - \mu_\theta(s_t)) + \text{常数}
] - 其梯度 (\nabla_\theta \log \pi_\theta) 可以通过自动微分工具(如PyTorch)计算,核心项涉及 ((a_t - \mu_\theta(s_t))) 对参数 (\theta) 的导数。

无论动作空间如何,(\nabla_\theta \log \pi_\theta) 项都对应于一种根据奖励调整的、加权后的最大似然梯度。
策略梯度的核心思想与形式化 ✅
综合来看,策略梯度算法在做什么?
我们可以将梯度公式更简洁地写为:
[
\nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \nabla_\theta \log \pi_\theta(\tau^i) R(\tau^i)
]
其中 (\nabla_\theta \log \pi_\theta(\tau^i) = \sum_{t} \nabla_\theta \log \pi_\theta(a_t^i | s_t^i))。

其直观思想是:
- 采样得到一系列轨迹。
- 计算每条轨迹的奖励(可能为正、负或零)。
- 增加高奖励轨迹(“好”的尝试)的概率。
- 降低低奖励轨迹(“坏”的尝试)的概率。
因此,策略梯度是将“试错学习”这一概念形式化为一种梯度下降算法。它通过反复试验,并根据结果的好坏来调整策略。
处理部分可观测性 👁️
一个重要的扩展是:策略梯度能否用于部分可观测马尔可夫决策过程(POMDPs)?

在POMDP中,智能体接收的是观察(observation)而非完全的状态(state)。状态满足马尔可夫性(未来只依赖于当前状态),而一般的观察值不满足。
关键在于,我们在推导策略梯度时,并未使用状态的马尔可夫性质。这意味着,即使我们将状态 (s) 替换为观察 (o),整个推导过程依然成立。轨迹的分布将变为状态、动作和观察的联合分布,但最终得到的策略梯度方程形式保持不变。
因此,策略梯度算法可以直接应用于部分可观测环境,无需任何修改。只需要让策略 (\pi_\theta) 基于观察 (o_t) 而非状态 (s_t) 来做出决策即可。
策略梯度的问题与挑战 ⚠️
然而,按照我们目前描述的基础策略梯度方法,在实际中可能效果不佳。主要问题在于其估计方差非常高。
高方差问题示例
考虑一个简单场景:横轴代表不同的轨迹(简化为标量),纵轴代表奖励。假设真实的奖励函数是一个钟形曲线,我们采样了三个轨迹。
- 情况A:采样轨迹的奖励值有正有负。策略梯度会降低负奖励轨迹的概率,提高正奖励轨迹的概率,这会使策略分布向右移动,这是合理的。
- 情况B:我们在所有奖励上加上一个很大的常数,使它们都变为正数。根据马尔可夫决策过程理论,给奖励函数加上一个常数不会改变最优策略。然而,对于策略梯度估计器来说,现在所有样本的奖励都是正的,因此它会倾向于提高所有轨迹的概率(尽管提高幅度不同)。这可能导致策略更新方向与情况A不同。
高方差的后果
对于有限的样本数量,奖励值的微小偏移(如加上常数)会导致策略梯度估计值发生巨大变化。这使得学习过程非常不稳定,收敛缓慢,甚至难以收敛。
核心问题:虽然当样本数量趋于无穷时,策略梯度估计是无偏的,但对于有限的样本,其方差过高,实用性差。
因此,策略梯度算法的大部分研究和改进都围绕着如何有效降低方差。在接下来的课程中,我们将介绍一些用于降低方差的关键技术。
本节总结 📝

本节课中我们一起学习了:
- 策略梯度的直观理解:它可被视为一种加权最大似然方法,根据轨迹的奖励来调整动作概率,形式化了“试错学习”。
- 不同动作空间的处理:对于离散和连续动作,核心都是计算 (\nabla_\theta \log \pi_\theta),在连续情况下常假设动作服从高斯分布。
- 对部分可观测性的兼容性:策略梯度天然适用于POMDPs,只需将策略的输入从状态改为观察。
- 策略梯度的核心挑战:基础形式的策略梯度估计方差极高,对有限样本敏感,这使其在实际应用中面临困难,也引出了后续对降低方差方法的需求。

在下一讲中,我们将开始探讨解决这些挑战、使策略梯度真正实用的方法。
课程 P17:CS 285 第5讲第3部分 - 降低策略梯度方差 🎯
在本节课中,我们将学习如何修改策略梯度计算,以降低其方差,从而得到一个可用于实际强化学习算法的实用版本。我们将从利用“因果关系”这一基本属性开始,然后介绍“基线”技巧,并推导最优基线以最小化方差。
利用因果关系降低方差 🔄
上一节我们介绍了策略梯度的基本形式。本节中我们来看看如何利用因果关系来改进它。
因果关系指出,时间 t 的策略不能影响时间 t' 的奖励,如果 t' < t。这意味着当前的动作不会影响过去已获得的奖励。这与马尔可夫性质不同,后者是关于状态的条件独立性。因果关系在任何时间向前流动的过程中总是成立。
我们之前得到的策略梯度估计器并未利用这一事实。我们可以通过重写策略评分方程来引入它。具体做法是,将奖励的总和分配到每个时间步的对数策略梯度上。
原始形式涉及对所有时间步的奖励求和。利用因果关系,我们可以证明,在期望上,当前时间步 t 的动作对数概率只应乘以从当前时刻 t 到最终时刻 T 的奖励之和(即未来奖励),因为过去的奖励与当前动作无关。
因此,我们可以将估计器修改为只对未来的奖励求和。虽然对于有限样本,这改变了估计值,但它仍然是无偏的,并且由于求和项更少,其方差更低。

这个未来奖励的总和有时用符号 Q̂(s_t, a_t) 表示,它是对 Q 函数的一个单样本估计。

引入基线进一步降低方差 📉
仅仅利用因果关系降低方差还不够。我们还可以使用一个称为“基线”的技巧。
回顾策略梯度的直观理解:我们希望增加高奖励轨迹的概率,降低低奖励轨迹的概率。但如果所有奖励都是正数,策略梯度会倾向于增加所有轨迹的概率,只是程度不同。这并不完全符合我们的直觉。

我们希望“居中”奖励,使得高于*均值的轨迹概率增加,低于*均值的概率降低。这可以通过从每个奖励中减去一个常数 b(例如*均奖励)来实现。新的梯度项变为 ∇_θ log π_θ(τ) * (r(τ) - b)。
可以证明,对于任何常数 b,这个新估计器的期望值(即真实的策略梯度)保持不变,因此它是无偏的。但它会改变估计器的方差。选择合适的 b 可以有效降低方差。
以下是推导过程的核心步骤,证明了减去基线 b 不影响期望值:
- 新项的期望为
E[∇_θ log π_θ(τ) * b]。 - 利用恒等式
π_θ(τ) ∇_θ log π_θ(τ) = ∇_θ π_θ(τ),可将其重写为b * ∇_θ ∫ π_θ(τ) dτ。 - 由于概率分布的积分恒为1,即
∫ π_θ(τ) dτ = 1,其梯度为0。 - 因此,
E[∇_θ log π_θ(τ) * b] = 0,证明完毕。
推导最优基线 🧮
上一节我们知道了减去基线 b 能保持无偏性并影响方差。本节中我们来推导一下能最小化方差的“最优”基线 b*。

随机变量 X 的方差公式为 Var(X) = E[X^2] - E[X]^2。我们将此公式应用于策略梯度估计器 g(τ) * (r(τ) - b),其中 g(τ) = ∇_θ log π_θ(τ)。
方差中只有 E[(g(τ) * (r(τ) - b))^2] 项依赖于 b。我们对 b 求导并令导数为零,以找到最小化方差的 b。
经过展开和求导运算(具体步骤见原讲稿),我们得到最优基线的解为:
b* = E[g(τ)^2 * r(τ)] / E[g(τ)^2]
这个结果有直观的解释:最优基线 b* 不是简单的*均奖励,而是奖励的期望值,但以梯度大小的*方 g(τ)^2 进行加权。这意味着,如果策略参数是向量,理论上每个参数维度都应有不同的基线值。
在实际应用中,计算这个最优基线通常比较繁琐,因此更常见的做法是直接使用*均奖励作为基线,它虽然次优但简单有效。
总结 📝

本节课中我们一起学习了两种降低策略梯度方差的重要技巧:
- 因果关系:通过只使用未来奖励(
t到T)而非全部奖励(1 到T)来估计梯度,减少了无关的噪声项,从而降低了方差。 - 基线:通过从奖励中减去一个常数(如*均奖励),可以使梯度更新更倾向于增加高于*均值的轨迹概率,同时保持估计的无偏性。我们还推导了理论上能最小化方差的最优基线公式。

结合这两种技巧,我们可以得到方差更低、更稳定的策略梯度估计器,为构建实用的强化学习算法奠定了基础。
课程 P18:从在线到离线策略梯度 🚀
在本节课中,我们将学习如何将策略梯度算法从在线策略设置扩展到离线策略设置。我们将探讨为什么标准的策略梯度被视为在线算法,并学习使用重要性采样技术来利用旧策略或其他来源(如人类演示)的数据,从而显著提高样本效率。
为什么策略梯度是在线策略算法?🤔
上一节我们介绍了策略梯度的基本概念。本节中,我们来看看为什么它通常被归类为在线策略算法。
策略梯度算法的一个经典特点是:每次更新策略参数后,都需要使用新策略重新采样数据。其根本原因在于策略梯度的数学形式。
策略梯度的目标是最大化期望回报,其梯度公式为:
∇θ J(θ) = Eτ∼pθ(τ) [∇θ log pθ(τ) * R(τ)]

这里的关键在于,期望 E 是在当前策略 pθ(τ) 下计算的。我们通过运行最新策略来采样轨迹 τ,以估计这个期望值。由于梯度计算依赖于在参数 θ 下采样的样本,因此每次我们改变 θ 时,都必须丢弃旧的样本并重新采样。
这意味着策略梯度本质上是一种在线策略算法:每个更新步骤都需要新鲜的样本。我们不能重复使用来自旧策略的数据,也不能使用来自其他来源(例如演示)的数据。

在线策略的挑战与离线策略的动机 💡
在强化学习中,一个典型的循环包含三步:
- 从当前策略中采样。
- 基于样本评估梯度。
- 执行梯度上升以更新策略。
对于策略梯度,我们不能跳过第一步。然而,在深度强化学习中,这带来了一个实际问题:神经网络参数在每个梯度步骤中通常只改变一点点,因为大幅度的更新可能导致训练不稳定。因此,我们往往需要进行大量微小的梯度更新,而每一步都需要重新采样。
如果采样成本很高(例如在真实物理系统中运行机器人,或使用计算昂贵的模拟器),这种在线策略的学习方式会变得非常低效和昂贵。当然,如果采样极其廉价,策略梯度因其简单和直接而是一个不错的选择。
为了克服这一限制,我们希望利用离线策略的样本,即重用旧策略或其他策略生成的样本。这就需要引入重要性采样技术。
重要性采样简介 📊
上一节我们了解了在线策略的局限性。本节中,我们来看看如何使用重要性采样来利用离线数据。

重要性采样是一种通用技术,用于在目标分布 p(x) 下估计某个函数 f(x) 的期望值,而我们只有来自另一个不同分布 q(x) 的样本。
其核心公式如下:
Ex∼p(x)[f(x)] = Ex∼q(x) [ (p(x) / q(x)) * f(x) ]
这个等式是精确成立的,意味着重要性采样估计是无偏的。当然,估计量的方差可能会发生变化,但其期望值保持不变。
现在,我们将这个技巧应用到强化学习的目标函数上。在这里:
p(x)对应我们希望评估的新策略pθ‘(τ)下的轨迹分布。q(x)对应我们拥有样本的旧策略(或行为策略)的分布p_bar(τ)。f(x)对应轨迹的回报R(τ)。
因此,使用重要性采样后的RL目标函数变为:
J(θ‘) = Eτ∼p_bar(τ) [ (pθ‘(τ) / p_bar(τ)) * R(τ) ]
计算重要性权重 🔢


为了计算重要性权重 pθ‘(τ) / p_bar(τ),我们需要展开轨迹的概率。一个轨迹的概率可以分解为初始状态分布、策略动作概率和环境转移概率的乘积。
由于新旧策略在相同的马尔可夫决策过程(MDP) 中运行,它们共享相同的初始状态分布 p(s1) 和状态转移概率 p(st+1 | st, at)。因此,当我们计算两个轨迹分布的比值时,这些项会相互抵消。
最终,重要性权重简化为策略概率的比值:
pθ‘(τ) / p_bar(τ) = ∏_{t=1}^{T} [ πθ‘(at | st) / π_bar(at | st) ]
这非常方便,因为我们通常不知道环境模型(状态转移概率),但我们总是知道策略本身给出的动作概率。
推导离线策略策略梯度 🧮
现在,我们正式推导离线策略的策略梯度。假设我们有一批从旧策略 πθ 中采样的轨迹,我们想估计新策略参数 θ‘ 的梯度。

我们的目标是:
∇θ‘ J(θ‘) = Eτ∼pθ(τ) [ (pθ‘(τ) / pθ(τ)) * R(τ) ]
应用之前提到的对数导数技巧 ∇p = p * ∇ log p,并对依赖于 θ‘ 的项求导,我们可以得到离线策略策略梯度的表达式。经过推导和简化(忽略一些中间步骤),其估计形式通常表示为对样本和时间的求和:
以下是离线策略策略梯度的核心估计公式:
∇θ‘ J(θ‘) ≈ (1/N) Σ_i Σ_t [ (∏_{t‘=1}^{t} πθ‘(a_t^i | s_t^i) / πθ(a_t^i | s_t^i) ) * ∇θ‘ log πθ‘(a_t^i | s_t^i) * ( Σ_{t‘=t}^{T} γ^{t‘-t} r_{t‘}^i ) ]
这个公式包含三个关键部分的乘积:
- 重要性权重乘积:从第一步到当前步
t,新旧策略概率的比值连乘。 - 策略得分:当前策略在当前状态动作对下的对数概率梯度
∇ log πθ‘。 - 未来回报:从当前步
t到轨迹结束的累计奖励(或优势函数估计)。
重要性权重的问题与解决方案 ⚠️
然而,上述公式中的重要性权重乘积项 ∏_{t‘=1}^{t} (πθ‘/πθ) 带来了一个严重问题:方差爆炸。
如果新旧策略差异较大,每个时间步的重要性权重可能远小于1。将许多小于1的数连乘,会导致这个乘积以指数速度趋*于零。这使得梯度估计的方差变得极高,甚至趋于无穷大,导致训练极其不稳定。
为了解决这个问题,一个常见的实践是进行*似。我们注意到,完整的离线策略梯度可以理解为在状态-动作对的边际分布上进行重要性采样。这个边际分布可以分解为状态分布和策略条件动作分布的乘积。
如果我们忽略状态分布比值的部分,只保留动作概率的比值,那么重要性权重就简化为仅包含当前时间步的项:
πθ‘(a_t | s_t) / πθ(a_t | s_t)
这样,重要性权重不再连乘,方差爆炸的问题就得到了缓解。虽然这引入了一定的偏差,但理论证明,当新旧策略 θ‘ 和 θ 足够接*时,这个偏差是可控的。这个见解是许多实用、高效的离线策略策略梯度算法(如PPO、TRPO)的基础。
总结 🎯
本节课中,我们一起学习了如何将策略梯度扩展到离线策略设置:
- 我们首先明确了标准策略梯度是在线策略算法,因其严重依赖当前策略的新鲜样本。
- 为了重用数据、提高样本效率,我们引入了重要性采样技术,它允许我们利用旧策略或其他策略的样本来估计新策略的梯度。
- 我们推导了离线策略策略梯度的理论形式,并指出了其中重要性权重连乘导致的高方差问题。
- 最后,我们探讨了通过忽略状态分布比值、仅使用单步重要性权重来*似梯度的方法,这为开发稳定、实用的高级策略梯度算法奠定了基础。


理解从在线到离线的这一扩展,是掌握更高效、更强大深度强化学习算法的重要一步。
🧠 课程 P19:CS 285 第5讲第5部分 - 策略梯度实现教程

在本节课中,我们将学习如何在深度强化学习算法中实际实现策略梯度。我们将重点讨论如何利用自动微分工具(如 TensorFlow 或 PyTorch)高效地计算策略梯度,并介绍实现过程中的关键技巧和注意事项。
🎯 策略梯度实现的核心挑战
上一节我们介绍了策略梯度的基本概念。本节中我们来看看其实现面临的主要挑战。
实施策略梯度面临的主要挑战之一是我们希望以自动微分工具(如 TensorFlow 或 PyTorch)能够为我们计算梯度的方式来实现,同时满足合理的计算和内存需求。
如果我们想要朴素地实施策略梯度,我们只需要为每一个采样到的状态-动作元组计算对数概率的梯度。然而,这种方法通常非常低效。
因为神经网络的参数量可能非常庞大。实际上,参数数量通常远大于我们采集的样本数量。假设我们有 N 个参数(N 可能在百万级别),我们采集了一百条轨迹,每条轨迹有一百个时间步。
那么我们总共有十万个状态-动作对。这意味着我们需要计算十万个长度为一百万的梯度向量。这在内存存储上非常昂贵。在计算上,当我们希望高效计算神经网络导数时,我们希望利用反向传播算法。

我们不是计算神经网络输出对其输入的导数,然后乘以损失的导数。我们做相反的事情:首先计算损失的导数,然后使用反向传播算法通过神经网络反向传播。这就是自动微分工具为我们所做的。为了实现这一点,我们需要构建一个计算图,使得该图的导数能给出策略梯度。
🔧 如何用自动微分计算策略梯度
那么,我们如何使用自动微分来计算策略梯度呢?我们需要一个计算图,其梯度就是策略梯度。我们的方法是从梯度公式本身出发。
我们已经知道如何计算最大似然梯度。如果我们想计算最大似然梯度,我们会使用像交叉熵损失这样的东西来实现最大似然目标。
# 最大似然梯度计算示例(概念性)
logits = policy_network(states)
loss = cross_entropy_loss(logits, actions)
gradients = compute_gradients(loss) # 自动微分

然后,根据你的自动微分包,你会调用 .backward() 或 .gradients() 来获取梯度。因此,我们计划通过实现一种“伪损失”作为加权最大似然,来让自动微分包高效地计算策略梯度。
我们不是实现最大似然目标 J,而是实现下面这个被称为 J_tilde 的量:
公式:J_tilde = Σ [ log π_θ(a_t | s_t) * Q_hat(s_t, a_t) ]
这个方程本身不是强化学习的目标。实际上,这个数学表达式本身没有直观意义。它只是一个被精心选择的量,其导数恰好等于策略梯度。关键的一点是,我们的自动微分包并不知道那些 Q 值本身也受到我们策略的影响。它只是处理我们提供的计算图。
在某种意义上,我们是在“欺骗”我们的自动微分包,让它给出我们想要的梯度。这里的 log π_θ 可以是,例如,对于离散动作是交叉熵损失,对于连续动作(如正态分布)是*方误差。

💻 实现策略梯度的伪代码
以下是实现策略梯度的伪代码。这段伪代码基于 TensorFlow,但核心思想在 PyTorch 中同样适用。
# 监督学习(最大似然)的伪代码
# 假设 `actions` 是形状为 [N*T, action_dim] 的张量
# 假设 `states` 是形状为 [N*T, state_dim] 的张量

logits = policy_network(states) # 策略网络对状态进行预测
neg_log_likelihood = cross_entropy_loss(logits, actions) # 计算负对数似然(损失)
loss = tf.reduce_mean(neg_log_likelihood) # 对所有样本的损失求*均
gradients = tf.gradients(loss, policy_network.trainable_variables) # 计算梯度
为了实现策略梯度,你只需要在计算损失时加入权重,这些权重对应于优势函数或 Q 值估计。

# 策略梯度实现的伪代码
# 假设 `q_values` 是形状为 [N*T, 1] 的张量,包含 Q_hat 估计值

logits = policy_network(states)
neg_log_likelihood = cross_entropy_loss(logits, actions)
weighted_neg_log_likelihood = neg_log_likelihood * q_values # 关键步骤:用 Q 值加权
loss = tf.reduce_mean(weighted_neg_log_likelihood) # 对加权损失求*均
gradients = tf.gradients(loss, policy_network.trainable_variables) # 计算策略梯度
在数学上,我们实现的是将最大似然损失转化为修改后的伪损失 J_tilde。我们将似然损失用 Q_hat 值进行加权。当然,实际实现中,你需要额外的代码来计算这些 q_values。你可以在 NumPy 中计算它们,不一定需要使用自动微分工具来计算 Q 值本身。
📝 策略梯度实战技巧与总结

以下是关于在实践中使用策略梯度的一些重要提示。

首先,请记住策略梯度的方差很高。尽管实现看起来像监督学习,但其行为与监督学习大不相同。策略梯度的高方差会使一些事情变得相当困难。

这意味着你的梯度将非常嘈杂。因此,你可能需要使用比监督学习大得多的批量大小。批量大小在数千或数十万是非常典型的。调整学习率也将更加困难。
使用像 Adam 这样的自适应优化器可能是一个好的起点。使用常规 SGD 加动量可能会非常困难。我们将在后续课程中学习针对策略梯度的特定学习率调整方法(如自然梯度)。总的来说,相比监督学习,你需要进行更多的超参数调整。


本节课总结

在本节课中,我们一起学习了:
- 策略梯度实现的核心挑战在于高效利用自动微分。
- 通过构造一个特殊的伪损失函数 J_tilde,我们可以“欺骗”自动微分工具计算出正确的策略梯度,其公式为 J_tilde = Σ log π_θ(a|s) * Q_hat(s,a)。
- 实现的关键步骤是将监督学习的损失(如交叉熵)与估计的 Q 值或优势函数进行逐点相乘作为权重。
- 在实践中,策略梯度方差高,需要更大的批量大小,并谨慎调整学习率,使用 Adam 优化器是一个良好的起点。
🧠 CS 285 课程介绍 P2:什么是强化学习?
在本节课中,我们将要学习强化学习的基本概念、它与监督学习的区别,以及它在现实世界中的广泛应用。我们将从定义开始,逐步深入到强化学习问题的核心挑战和魅力所在。
📚 课程内容概览
这门课程将广泛介绍各种深度强化学习方法。我们将从基础开始,讨论如何从监督学习过渡到决策方法,并提供一些定义,以帮助大家理解强化学习问题。
接下来,我们将进入关于无模型强化学习算法的单元,覆盖Q学习、策略梯度和演员-批评者方法。你们将有一些作业需要实现这些算法。
然后,我们将有一个关于基于模型算法的单元,讨论最优控制规划、序列模型以及图像处理等相关内容。
之后,我们将探讨一系列更先进的主题,包括探索算法、离线强化学习算法、逆强化学习,以及强化学习方法与概率推断之间的关系。
最后,我们将涉及一些高级主题,如元学习、迁移学习,可能还包括层次强化学习,并安排一系列的研究演讲和邀请讲座。
📝 课程作业与项目
你们将有五个作业,内容涵盖模仿学习、策略梯度、Q学习、演员-批评者算法、基于模型的强化学习以及离线强化学习。最后一个作业将是关于离线强化学习的。
此外,课程将包含一个最终项目。这是一个研究级别的项目,你们可以组成一个由2到3名学生的小组。我们非常鼓励大家提前开始思考项目。
每年,学生都会询问我们对项目范围的期望。大致来说,项目的水*应相当于一篇可能提交到研讨会的论文。如果你们对项目范围不确定,请务必在办公时间与我或助教们讨论。
我们将为你们的项目提供多轮反馈。因此,我们设定了项目提案截止日期和项目里程碑报告。这些环节主要是为你们设计的,旨在鼓励你们制定计划、描述潜在关注点。提案和里程碑的评分并不严格,它们更多的是为了让你们获取关于项目计划的反馈。
在学期末,最终报告的评分将占课程总成绩的50%,项目占40%,测验占10%。
⏰ 课程政策与测验
你们有五个作业的“迟到日”。只要总共不超过这五个迟到日,作业就不会被扣分。如果超过了,我们将无法为你们的作业给予学分。
请确保你们已经注册了edX*台上的UC Berkeley CS 285课程。所有正式注册了本课程的同学,无论是否收到了邀请,我们都强烈建议你们开始组建项目小组(除非你们打算单独工作),并参加第一节课的测验。
第一节课的测验已经发布在Gradescope上。这是一个练习测验,主要目的是让大家熟悉Gradescope的界面,其中并没有真正的测验内容。
🤔 为什么学习强化学习?
今天讨论的主要焦点是:我们为什么应该学习强化学习?它是什么?以及我个人为什么喜欢教这门课的一些背景。
让我们从一些基础开始。
什么是强化学习?
强化学习实际上是两件事的结合:
- 它是基于决策学习的数学公式。
- 它也是一种通过实验学习决策和控制的方法。
重要的是要记住,这两者在一定程度上是分离的。因为我们可以先应用形式化的数学框架,然后再对其应用各种各样的解决方法。因此,不要将强化学习问题本身与解决它的具体方法混淆,这一点很重要。
🔄 强化学习 vs. 监督学习
你们可能最熟悉的机器学习类型是监督学习。监督学习的定义相当直接:你有一个包含输入x和输出y的数据集D。你想要学习一个函数f,它接受x并预测出接*数据集中y标签的值。
例如,f可能由一个深度神经网络表示,你将通过分类或回归来训练它,以匹配标签y。
监督学习公式:
D = {(x_i, y_i)},目标是学习 f_θ(x) ≈ y。
虽然监督机器学习的基本公式非常直接,但它做出了一系列假设。这些假设对我们来说往往如此自然,以至于我们甚至没有明确想过它们。但是,如果我们要讨论这与强化学习的不同之处,这些假设就值得提及。
监督学习通常假设数据是独立同分布的。在某种程度上,这种假设显而易见,尤其是对于学习机器学习的人来说,我们往往没有明确表达出来。它的意思是:
- 独立:数据集中的所有
(x, y)对是相互独立的。一个x的标签不会影响另一个x的标签。 - 同分布:产生
y标签的真实函数对于所有样本都是相同的。
监督学习还假设我们的数据集是已标记的。从意义上说,我们在D中看到的每个x都有一个伴随的y,并且y是x的真实标签。如果你在做像图像分类这样的任务,标签来自人类,那么这是非常自然的。
但是,请回想我们在抓握例子中讨论的:如果你想让机器人学习如何抓握物体,假设你被给予一组带有最佳抓握位置“地面真实”标签的图像,这可能实际上是一个非常强的、不自然的假设。
🎯 强化学习的核心挑战
强化学习不假设数据是独立同分布的。从意义上说,之前的输出会影响未来的输入,事物被安排在时间序列中,过去影响未来。
通常,真实答案并不清楚,我们只知道一个特定结果的好坏——它是否成功或失败,或者更一般地说,它的奖励价值是多少。
在强化学习中,你可能收集数据,但你不能简单地复制那些实际上不导致成功的数据。数据可能告诉你哪些事情成功了,哪些事情失败了。然而,即使这些标签也很难正确解释,因为如果你有一个导致失败的事件序列,你不知道是序列中的哪个特定选择导致了失败。
这与人类决策类似。也许你在课程的末尾得到了一个糟糕的成绩。不是你在查看成绩这个动作导致了不及格,而是你在课堂上早期的某个行为(比如考试表现不好)导致的,但你可能没有意识到这会导致你课程失败。
这就是强化学习中面临的信用分配问题:导致好结果或坏结果的决策,其本身可能不会被立即标记为高奖励或低奖励。奖励可能只会在很久之后才发生。

因此,我们需要处理的数据可能没有标记为“最佳输出”,并且可能涉及这些延迟的奖励。我们的目标是在数据上运行强化学习算法,并希望得到比之前看到的行为更好的行为。这确实是强化学习中的一个核心挑战。

📊 强化学习问题形式化

让我们尝试使这个更精确一些。
在监督学习中,你有一个输入x和一个输出y。你的数据集由(x, y)对组成。目标是学习一个带有参数θ的函数f_θ,它接受x并*似y。
监督学习流程:
数据D -> 学习函数 f_θ(x) -> 预测 y

在强化学习中,我们有一种循环的在线学习过程:
- 代理在时间
t处于状态s_t(类似于输入x)。 - 代理选择一个动作
a_t(类似于输出y,但是由代理自己决定)。 - 世界以新的状态
s_{t+1}和一个标量奖励信号r_t作为响应。

这里的奖励信号r_t仅指示新状态s_{t+1}的好坏,但它并不总是告诉你刚刚采取的动作a_t是好是坏。也许你运气好,落在了一个好状态;或者你可能很早就做了一些很好的事情,导致你现在进入了一个好状态。
代理自身收集的数据经典上包括状态、动作和奖励的序列:(s_t, a_t, r_t, s_{t+1}, ...)。
而在监督学习中,数据(x, y)是被提供给你的。在强化学习中,你必须选择自己的行动并收集自己的数据。因此,你不仅要担心数据集中的行动可能不是最优的,还需要实际决定如何收集数据。

强化学习流程:
状态s_t -> 策略 π_θ(s_t) -> 动作 a_t -> 环境 -> 新状态 s_{t+1} 和奖励 r_t
你的目标是学习一个策略π_θ,它将状态映射到动作a。参数θ可能再次是神经网络的权重。
一个好的策略是使累积总奖励最大化的,而不仅仅是即时奖励。这涉及到战略推理:你可能现在会做一些看似无奖励的事情,为了在将来获得更高的奖励。

目标:最大化累积奖励 R = Σ r_t。


🌍 强化学习问题实例
让我们谈谈一些问题如何被纳入强化学习框架的例子。
训练一只狗:
- 动作:狗肌肉的收缩。
- 观察:狗通过视觉和嗅觉感知的事物。
- 奖励:它得到的食物。
- 目标:狗学习做任何事情(比如执行技巧),以最大化那个奖励。
机器人移动:
- 动作:发送给电机的电流或扭矩命令。
- 观察:来自传感器(如相机)的读数。
- 奖励:任务成功的度量(如运行速度,或到达目的地时+1,否则-1)。
- 目标:机器人学习控制策略以最快到达目的地。
库存管理:
- 动作:购买哪些库存。
- 观察:当前库存水*。
- 奖励:赚取的利润(长期存储会降低利润)。
- 目标:学习采购策略以最大化长期利润。
你可以看到,这种表述非常一般,许多不同的问题都可以被归类为强化学习的框架。当然,稍后我们会使所有这些都更加精确。这是一次非常高级别的介绍,如果特定的细节不是很清楚,请不要担心。
✨ 强化学习的应用与能力

强化学习在处理物理复杂任务方面非常擅长。这些任务可能很难让人精确描述应该怎么做,但定义奖励却更容易。
例如,让机器人手使用锤子敲钉子。定义“钉子被敲入”的奖励相对容易,而强化学习算法会自己找出如何控制机器人手的复杂动作序列来完成这个任务。
另一个例子是四足机器人学习跳跃并越过不同障碍。手动编写这样的跳跃技能代码非常困难,但强化学习可以学习出允许机器人在不同位置、以不同距离跳跃的动作策略。它甚至可以学习更复杂的技能,比如用后腿站立保持*衡。
强化学习另一个擅长的地方是产生意想不到的、超越人类的解决方案。以AlphaGo的著名“神之一手”为例。在打砖块游戏中,一个经典的强化学习解决方案是,智能体发现如果将球弹到砖块墙后面,球就会在顶部弹来弹去并获得大量分数,这是一种人类玩家不太会首先尝试的策略。
强化学习也可以在现实世界中大规模应用。例如,有项目训练机器人学习如何分类垃圾(区分可回收物、堆肥等)。机器人先在受控的教室环境中练习,然后部署到真实的办公大楼中执行任务。
强化学习也被广泛应用于语言模型。像ChatGPT这样的系统使用来自人类反馈的强化学习来训练模型,使其回应查询的方式更符合人类的偏好,而不仅仅是生成互联网上最可能出现的文本。
在图像生成领域,强化学习可以用于优化模型。例如,给定一个提示“海豚骑自行车”,初始生成的图像可能不准确。通过使用一个标题模型(如LAION)评估生成图像与提示的相似度作为奖励,并用RL优化图像生成模型,可以逐步使生成的图像越来越符合提示。
强化学习还可以应用于芯片设计。动作对应于芯片部件在布局中的放置,奖励与芯片的成本、拥堵、延迟等设计参数有关。强化学习可以自动优化这些布局。
🎓 本节课总结
在本节课中,我们一起学习了强化学习的基本轮廓:
- 强化学习是学习决策的数学框架和通过交互学习的方法。
- 它与监督学习的关键区别在于:处理序列决策、面临信用分配挑战,并且需要自主收集数据。
- 强化学习问题形式化为:智能体根据状态选择动作,环境返回新状态和奖励,目标是学习一个最大化累积奖励的策略。
- 强化学习在机器人控制、游戏、交通管理、大语言模型对齐、图像生成和芯片设计等广泛领域展现出强大能力。

通过这门课程,你们将逐步深入这些概念,并亲手实现各种强化学习算法。下一节课,我们将开始更具体地探讨强化学习的数学基础。
课程 P20:高级策略梯度 🚀
在本节课中,我们将学习策略梯度方法中一个重要的高级主题:自然策略梯度。我们将探讨标准策略梯度在数值优化上可能遇到的困难,并介绍一种通过重新参数化来更高效、更稳定地更新策略参数的方法。
问题引入:策略梯度的数值挑战
上一节我们介绍了策略梯度的基本原理。本节中,我们来看看它在实际优化中可能遇到的一个具体问题。
假设我们有一个简单的一维状态和动作空间问题。目标是到达状态 s = 0。奖励函数为 r = -s² - a²,策略是一个高斯分布,其均值与状态成正比,标准差为 σ。策略参数 θ 包含比例系数 k 和标准差 σ。
策略公式:
π(a|s) = N(a | k·s, σ²)
在参数空间 (k, σ) 中可视化梯度场时,可以发现一个现象:当标准差 σ 变小时,关于 σ 的梯度值会变得异常巨大,而关于 k 的梯度则相对*缓。这导致归一化后的梯度方向几乎完全由 σ 分量主导,使得优化过程在减小 σ 上花费大量时间,而难以有效地同时优化 k,从而收敛到最优参数 (k=-1, σ=0) 的速度非常慢。
核心问题:不同的策略参数对概率分布 π(a|s) 的影响程度差异巨大。改变某些参数会极大地改变分布,而改变另一些参数则影响甚微。在标准的梯度上升中,我们为所有参数使用相同的学习率,这在参数空间中是“不公*”的,会导致优化效率低下和步长选择困难。
解决方案思路:在策略空间中衡量变化
如果我们希望所有参数都能有效地更新,直觉上,我们需要一种与参数化方式无关的方法来衡量策略本身的变化。我们希望在策略分布空间中迈出大小相似的步伐,而不是在原始的参数空间中。
这引导我们从约束优化的角度重新审视梯度上升。标准的梯度上升可以看作是在参数空间的一个小邻域内,最大化目标函数的一阶*似。其约束是参数变化的欧几里得范数很小。
约束优化视角:
θ' = argmax [ J(θ) + ∇J(θ)·(θ' - θ) ]
约束条件:||θ' - θ||² ≤ ε
然而,这个约束是在参数空间定义的。我们更希望约束是在策略分布空间定义的。一个自然的选择是使用两个分布之间的KL散度 D_KL(π_θ‘ || π_θ) 作为距离度量,并要求这个散度小于某个值 ε。
改进的约束优化问题:
θ' = argmax [ J(θ) + ∇J(θ)·(θ' - θ) ]
约束条件:D_KL(π_θ‘ || π_θ) ≤ ε
自然策略梯度与费舍尔信息矩阵
KL散度在 θ‘ = θ 处进行二阶泰勒展开,其主导项是一个二次型:
D_KL(π_θ‘ || π_θ) ≈ 1/2 * (θ' - θ)^T * F(θ) * (θ' - θ)
其中,矩阵 F(θ) 被称为费舍尔信息矩阵。它的定义为:
F(θ) = E_{a∼π_θ(·|s)} [ ∇ log π_θ(a|s) · (∇ log π_θ(a|s))^T ]
费舍尔信息矩阵是梯度向量与其自身外积的期望值。重要的是,它只依赖于策略分布 π_θ,而不依赖于具体的参数化方式,这符合我们的目标。
现在,我们的约束优化问题*似为:
约束条件:1/2 * (θ' - θ)^T * F(θ) * (θ' - θ) ≤ ε
求解这个带约束的优化问题,可以得到参数更新公式:
θ_{new} = θ + α * F(θ)^{-1} * ∇J(θ)
其中 α 是与 ε 相关的步长系数。这个更新公式与标准梯度上升 θ + α * ∇J(θ) 的关键区别在于,梯度向量 ∇J(θ) 被左乘了费舍尔信息矩阵的逆 F(θ)^{-1}。
这个新的更新方向 F(θ)^{-1} * ∇J(θ) 被称为自然梯度。它相当于对原始梯度进行了重新缩放,使得在策略分布空间中,每个方向的更新步长是“均匀”的。
效果与实现
使用自然梯度后,优化过程发生了显著变化。在之前的问题中,更新方向会准确地指向最优参数,收敛速度更快,并且对步长的选择不再那么敏感。
以下是实现自然策略梯度时需要注意的几点:
- 估计费舍尔信息矩阵:矩阵
F(θ)是一个期望,可以通过从当前策略π_θ中采样动作来*似计算。 - 计算自然梯度:直接计算并求逆
F(θ)矩阵在参数维度高时计算代价很大。通常使用共轭梯度法来高效地求解方程F(θ) · x = ∇J(θ),从而得到自然梯度方向x。 - 现代算法:许多现代强化学习算法都基于这一思想。
- 自然策略梯度:直接使用上述更新公式。
- 信赖域策略优化:通过求解带KL散度约束的优化问题来自动确定步长
α。 - *端策略优化:是TRPO的一个更高效的*似版本。
总结与延伸阅读
本节课中,我们一起学习了自然策略梯度。我们了解到标准策略梯度因参数对分布影响不均而存在数值优化困难。通过引入KL散度约束和费舍尔信息矩阵,我们可以将更新方向转换到策略分布空间,得到更稳定、更高效的自然梯度更新方法。
如果你想深入了解策略梯度及其高级变种,可以参考以下论文:

- Williams (1992): 提出了强化学习的经典策略梯度方法(REINFORCE算法)。
- Peters & Schaal (2008): 详细阐述了自然梯度方法,并提供了直观的图解。
- Schulman et al. (2015): 信赖域策略优化,使用自然梯度并自动调整步长。
- Schulman et al. (2017): *端策略优化,一个更简单高效的实践算法。
- Levine et al. (2013): 引导策略搜索,将策略梯度与样本复用结合。
- Barto, Sutton & Anderson (1983) / Sutton (1984): 早期在Actor-Critic框架中引入了类似因果性技巧的思想。

这些工作构成了现代基于策略的深度强化学习算法的重要基础。在接下来的课程中,我们将介绍Actor-Critic算法,它通过引入价值函数来进一步降低策略梯度的方差。

🎓 课程 P21:演员-批评者算法基础(第1部分)

在本节课中,我们将学习演员-批评者算法。这种算法建立在上一节课讨论的策略梯度框架之上,并通过学习价值函数和Q函数来增强它,旨在降低策略梯度估计的方差。

🔄 策略梯度回顾
上一节我们介绍了强化学习算法的基本流程。现在,让我们回顾一下策略梯度方法。
策略梯度算法交替执行三个步骤:
- 通过在环境中运行当前策略来采样一批轨迹。
- 使用这些轨迹计算策略梯度的估计值。
- 将*似策略梯度乘以学习率,更新当前参数向量,这相当于执行梯度上升优化。
以下是策略梯度估计的计算公式:
[
\nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_{i,t} | s_{i,t}) \hat{Q}{i,t}
]
其中,(\hat{Q}) 是从时间步 (t) 到轨迹结束所获得的奖励总和(即“回报”)。

这个算法遵循强化学习的基本结构:采样(橙色框)、计算回报(绿色框)和应用梯度更新(蓝色框)。
🎯 从回报到Q函数与基线

上一节我们介绍了策略梯度的基本形式,本节中我们来看看如何通过引入更精确的估计来改进它。
在基本策略梯度中,我们使用单一样本轨迹的实际回报来估计 (Q) 值。然而,由于策略和环境的随机性,这个单样本估计的方差可能很高。如果我们能获得真实的期望回报 (Q^\pi(s,a)),即从状态 (s) 执行动作 (a) 后遵循策略 (\pi) 所能获得的期望总奖励,那么策略梯度的方差将大大降低。
此外,我们还可以引入一个基线 (b) 来进一步降低方差。基线不能依赖于当前动作以避免引入偏差,但可以依赖于状态。一个极佳的选择是状态价值函数 (V^\pi(s)),它表示从状态 (s) 开始遵循策略 (\pi) 的期望总奖励。
于是,策略梯度可以改进为:
[
\nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_{i,t} | s_{i,t}) A^\pi(s_{i,t}, a_{i,t})
]
其中,(A^\pi(s, a) = Q^\pi(s, a) - V^\pi(s)) 被称为优势函数。它衡量了在状态 (s) 下采取动作 (a) 相对于策略*均表现的优势。


🤔 拟合哪个函数?Q, V 还是 A?
既然优势函数如此有用,我们自然会问:应该直接拟合Q函数、价值函数还是优势函数?
- Q函数 (Q^\pi(s, a)):依赖于状态和动作,维度较高,学习起来可能需要更多样本。
- 价值函数 (V^\pi(s)):仅依赖于状态,学习起来相对容易。
- 优势函数 (A^\pi(s, a)):也依赖于状态和动作。
我们可以利用它们之间的关系来简化问题。根据定义:
[
Q^\pi(s_t, a_t) = r(s_t, a_t) + \mathbb{E}{s \sim p(\cdot|s_t,a_t)} [V^\pi(s_{t+1})]
]
如果我们用单一样本 (s_{t+1}) 来*似这个期望,就可以得到:
[
Q^\pi(s_t, a_t) \approx r_t + V^\pi(s_{t+1})
]
这是一个*似,但方差较低。将其代入优势函数公式:
[
A^\pi(s_t, a_t) \approx r_t + V^\pi(s_{t+1}) - V^\pi(s_t)
]
这个表达式的吸引力在于,它完全依赖于价值函数 (V^\pi)。因此,一种常见且有效的演员-批评者算法是:只拟合价值函数 (V^\pi(s)),然后用上述公式来*似计算优势函数。

📊 如何进行策略评估(拟合V函数)
现在我们知道要拟合价值函数 (V^\pi(s)),那么具体该如何做呢?这个过程称为策略评估。
我们用一个参数为 (\phi) 的函数(如神经网络)(V_{\phi}(s)) 来*似 (V^\pi(s))。目标是让 (V_{\phi}(s)) 的预测尽可能接*真实的价值。我们需要为这个监督学习问题创建训练数据和目标。

以下是两种主要方法:
1. 蒙特卡洛(MC)估计
- 思路:使用从某个状态开始到轨迹结束所获得的实际总奖励作为该状态价值的无偏估计。
- 目标值:(y_t = \sum_{t‘=t}^{T} r_{t’})
- 优点:无偏。
- 缺点:方差高,因为它是单一样本估计。
2. 时序差分(TD)或引导(Bootstrap)估计
- 思路:利用贝尔曼方程,用当前奖励加上下一状态的估计价值来作为当前状态的价值估计。
- 目标值:(y_t = r_t + V_{\phi}(s_{t+1}))
- 优点:方差低,因为使用了估计器 (V_{\phi}) 来*滑未来奖励。
- 缺点:有偏,因为 (V_{\phi}) 本身可能不准确。
在实际的演员-批评者算法中,我们通常使用引导估计。训练过程就是最小化预测值与目标值之间的均方误差:
[
\mathcal{L}(\phi) = \frac{1}{N} \sum_{i} (V_{\phi}(s_i) - y_i)^2
]
通过迭代地收集数据、拟合 (V_{\phi}),并更新策略,价值函数的估计会越来越准,优势函数的估计方差也会越来越低。

🎮 策略评估的直观例子
为了帮助理解策略评估的实际意义,让我们看两个直观的例子:
1. 棋类游戏(如西洋双陆棋、围棋)
- 奖励:游戏结果(赢为+1,输为0)。
- 价值函数 (V^\pi(s)):在给定当前棋盘状态 (s) 下,智能体最终赢得游戏的预期概率。
- 直观理解:价值函数直接回答了“从这个局面开始,我有多大胜算?”这个问题。


2. 用于决策
- 在围棋中,你可以模拟走一步棋后的局面 (s‘),然后用价值函数 (V^\pi(s’)) 快速评估这个新局面的好坏,从而选择能最大化胜率的那一步。这比展开完整的游戏搜索树要高效得多。



📝 本节总结



在本节课中,我们一起学习了演员-批评者算法第一部分的核心理念:
- 核心动机:通过拟合价值函数来估计优势函数,以替代策略梯度中高方差的无模型回报估计,从而显著降低方差。
- 关键函数:我们引入了状态价值函数 (V^\pi(s)) 和优势函数 (A^\pi(s, a))。优势函数是Q函数与价值函数之差,能更准确地衡量动作的相对好坏。
- 实用方法:我们推导出*似公式 (A^\pi(s_t, a_t) \approx r_t + V^\pi(s_{t+1}) - V^\pi(s_t)),这使得我们可以通过仅拟合一个价值函数网络来估计优势。
- 策略评估:介绍了拟合价值函数的两种方法——蒙特卡洛估计(无偏高方差)和时序差分引导估计(有偏低方差),后者是演员-批评者算法中的常用选择。
- 直观理解:策略评估在许多任务(如棋类游戏)中有着非常直观的解释,即预测当前状态的长期期望收益或胜率。

在下一部分,我们将具体讲解如何将策略评估(批评者)与策略更新(演员)结合,形成一个完整的演员-批评者算法。

🎓 课程 P22:演员-批评家算法与折扣因子
在本节课中,我们将学习如何将价值函数(批评家)整合到策略梯度(演员)中,从而构建一个更高效的演员-批评家强化学习算法。我们还将探讨如何处理无限期任务,并引入折扣因子的概念。
🔄 从策略评估到演员-批评家算法

上一节我们介绍了策略评估以及如何将价值函数融入策略梯度。本节中,我们来看看如何将这些部分结合起来,构建一个完整的演员-批评家强化学习算法。

一个基本的批处理演员-批评家算法步骤如下:


以下是算法的五个核心步骤:
- 生成样本:通过在当前策略下运行模拟(或与环境交互)来收集样本轨迹。
- 拟合价值函数:使用收集到的数据,训练一个神经网络来*似状态或状态-动作对的价值函数。这一步取代了之前直接累加奖励的方法。
- 计算优势估计:对于每个采样到的状态-动作元组
(s_t, a_t),计算*似优势Â_t。公式为:
Â_t = r_t + γ * V_φ(s_{t+1}) - V_φ(s_t)
其中γ是折扣因子,V_φ是拟合的价值函数。 - 构建策略梯度估计:使用计算出的优势值来估计策略梯度。在每个时间步
t,梯度贡献为∇_θ log π_θ(a_t|s_t) * Â_t。 - 执行梯度下降:利用第4步构建的梯度估计,对策略参数
θ执行梯度下降更新,以优化策略。
在讨论策略评估的部分,我们重点介绍了步骤二——如何拟合价值函数。我们有两种主要选择:
以下是拟合批评家(价值函数)的两种主要方法:
- 蒙特卡洛估计:将价值函数拟合到从轨迹开始累积到结束的实际回报
G_t上。目标值是V_φ(s_t) ≈ G_t。 - 自举估计:使用单步时间差分目标,即
r_t + V_φ(s_{t+1})。这利用了当前的函数估计来更新,是演员-批评家算法的核心。
⏳ 无限期任务与折扣因子
当我们使用上述自举规则在无限期任务中拟合价值函数时,可能会遇到问题:如果奖励总是正的,价值函数的估计可能会在迭代中不断增长,最终趋向无穷大。

对于在固定时间结束的分幕式任务,这不是大问题。但对于连续任务(如让机器人持续奔跑),我们需要一种机制来保证价值有限。
解决方案是引入折扣因子 γ。其核心思想是:智能体更偏好即时奖励,而非延迟奖励。从数学上,我们将未来奖励乘以 γ(0 < γ < 1),使得无限序列的奖励总和收敛。
折扣因子 γ 可以解释为对原始MDP的修改:
以下是折扣因子的概率解释:
- 我们引入一个额外的“死亡”或“终止”状态。
- 在每个时间步,智能体以
1 - γ的概率进入该终止状态,并以γ的概率继续在原始MDP中转移。 - 一旦进入终止状态,将永远停留并获得零奖励。
- 因此,下一个时间步的期望价值变为
γ * E[V(s_{t+1})]。
从计算角度看,引入折扣因子后,优势估计公式变为:
Â_t = r_t + γ * V_φ(s_{t+1}) - V_φ(s_t)
🤔 折扣因子的不同使用方式
将折扣引入策略梯度时,有两种看似相似但本质不同的方式。考虑从时间步 t 开始的未来奖励总和。
以下是两种引入折扣的策略梯度形式:
- 选项一(更常用):未来奖励按
γ^{t’ - t}折扣。策略梯度估计为:
∇_θ J(θ) ≈ E [ Σ_{t=0}^{T-1} ∇_θ log π_θ(a_t|s_t) * ( Σ_{t’=t}^{T-1} γ^{t’ - t} r_{t’} ) ]
这仅折扣未来奖励,而不折扣梯度本身。 - 选项二:未来奖励按
γ^{t’}折扣。策略梯度估计为:
∇_θ J(θ) ≈ E [ Σ_{t=0}^{T-1} γ^{t} ∇_θ log π_θ(a_t|s_t) * ( Σ_{t’=t}^{T-1} γ^{t’ - t} r_{t’} ) ]
这同时折扣了未来奖励和未来决策的重要性(通过γ^t乘在梯度前)。

选项二在数学上对应于解决一个真正的“带有死亡概率”的折扣MDP,它认为早期的决策比晚期的决策更重要。然而,在实践中,我们通常使用选项一。原因在于,我们引入折扣主要是为了算法上的便利(确保价值有限、降低方差),而非真正认为后期决策不重要。我们通常希望学到的策略在每个时间步都能做出好的决策。


🚀 在线演员-批评家算法
批处理模式需要收集完整轨迹再更新。而利用演员-批评家结构,我们可以实现在线更新,即每执行一步就立即更新策略和价值函数。

以下是在线演员-批评家算法的步骤:
- 执行动作:根据当前策略
π_θ(a|s)采样动作a_t,与环境交互,得到转移(s_t, a_t, r_t, s_{t+1})。 - 更新价值函数:使用时间差分目标更新批评家。例如,采用均方误差损失:
L(φ) = [ r_t + γ * V_φ(s_{t+1}) - V_φ(s_t) ]^2
然后对φ执行梯度下降。 - 计算优势:
Â_t = r_t + γ * V_φ(s_{t+1}) - V_φ(s_t) - 更新策略:计算策略梯度
∇_θ J(θ) ≈ ∇_θ log π_θ(a_t|s_t) * Â_t,并对演员参数θ执行梯度上升。 - 重复:将状态更新为
s_{t+1},回到步骤1,持续在线学习。
然而,这种朴素的在线算法在深度强化学习中直接应用可能会不稳定,因为连续样本之间存在强相关性,且网络参数在持续变化。后续课程将讨论如何改进(例如使用经验回放、目标网络等)。
📚 本节课总结
本节课中我们一起学习了:
- 如何将策略评估(批评家)与策略梯度(演员)结合,构建出演员-批评家算法的基本框架。
- 为了处理无限期任务,引入了折扣因子 γ 的概念,它确保了价值函数的有限性,并可以解释为对未来奖励的偏好或进入“终止状态”的概率。
- 分析了在策略梯度中引入折扣的两种不同形式,并理解了实践中常用仅折扣奖励而非梯度的形式。
- 探讨了演员-批评家框架如何支持在线学习,即每一步都进行更新,并指出了其在实际深度RL应用中可能面临的挑战。

通过引入批评家,我们获得了比单纯蒙特卡洛策略梯度更低方差的梯度估计,这是向更高效、更稳定强化学习算法迈进的关键一步。


🎓 课程 P23:演员-评论家算法的实现与离策略扩展



在本节课中,我们将学习如何将演员-评论家算法实现为深度强化学习算法,并探讨其离策略扩展。我们将讨论神经网络架构的设计选择、并行化以提高样本效率,以及如何修改算法以利用历史经验数据(回放缓冲区)。







🏗️ 神经网络架构设计

在上一节中,我们讨论了策略梯度。本节中,我们将看看如何表示价值函数和策略。

为了将算法实例化为深度强化学习算法,我们必须决定如何表示价值函数和策略。我们有几个选择。



以下是两种主要的网络设计选择:


- 完全分离的网络
- 一个网络将状态映射到价值。
- 另一个完全独立的网络将同一个状态映射到动作的分布。
- 这两个网络不共享任何参数。
- 优点:实现相对简单,训练通常更稳定。
- 缺点:演员和评论家之间没有特征共享,可能效率较低,尤其是在从图像等原始输入学习时。

- 共享网络设计
- 一个共享的“主干”网络(例如卷积层)处理输入状态,提取特征。
- 然后,有两个独立的“头”网络:
- 一个用于输出价值。
- 一个用于输出策略的动作分布。
- 优点:允许特征共享,可能更高效。
- 缺点:训练更具挑战性,可能不稳定,因为共享层同时被价值回归和策略梯度这两个不同分量更新,可能需要更多的超参数调整。





🔄 并行化与批次处理


上一节我们介绍了网络架构,本节中我们来看看如何提高数据效率。基本的演员-评论家算法是在线的,一次只用一个样本更新,这会导致高方差的更新。



从深度学习原理可知,使用随机梯度下降更新深度神经网络时,仅使用一个样本效果不佳。因此,最好使用一个批次的样本进行更新。


获取批次的一种方式是通过使用并行工作者。以下是两种并行化方法:


- 同步并行演员-评论家
- 运行多个模拟器(工作者线程),每个使用不同的随机种子。
- 每个线程执行一步,收集一个转移样本。
- 然后,同步地收集所有线程的数据,形成一个批次,用于统一更新价值函数和策略。
- 批次大小等于工作者线程的数量。




- 异步并行演员-评论家
- 移除同步点,各个线程以自己的速度独立运行。
- 每个线程在更新时,会拉取最新的网络参数,使用自己收集的转移样本进行更新。
- 更新时可能使用一个由多个线程收集的、固定大小的转移池(例如32个转移)。
- 潜在问题:转移样本可能由略微过时的策略生成,因为线程进度不同。但只要延迟不大,在实践中,异步带来的速度提升通常能抵消由此产生的微小偏差。







📦 离策略演员-评论家与回放缓冲区




异步方法让我们思考:如果能使用由旧策略生成的转移,或许我们甚至不需要多个线程,可以直接复用历史数据。


这就是离策略演员-评论家的核心思想。我们引入一个回放缓冲区(通常实现为先进先出的环形缓冲区),用于存储历史转移经验。




以下是离策略算法的基本流程:



- 使用当前策略与环境交互,收集转移
(s, a, r, s')。 - 将该转移存入回放缓冲区。
- 从回放缓冲区中随机采样一个批次的转移(例如32个)。
- 使用这个批次来更新评论家(价值函数)和演员(策略)。


然而,直接应用之前的算法会出问题,因为缓冲区中的动作 a 是由旧策略 π_old 生成的,而不是当前策略 π_θ。这导致两个主要问题:
- 计算价值目标时,使用的不是当前策略下的预期回报。
- 计算策略梯度时,采样的动作并非来自当前策略,破坏了策略梯度定理的前提。






🛠️ 离策略修正:从 V 到 Q



为了解决上述问题,我们需要修改算法。



首先,我们不再学习状态价值函数 V(s),而是学习状态-动作价值函数 Q(s, a)。Q 函数评估在状态 s 下执行任意动作 a,然后遵循策略 π 所能获得的预期回报。这样,即使动作 a 来自旧策略,我们也能有效地训练 Q 函数。


Q 函数的更新目标变为:
y_i = r_i + γ * Q_φ(s‘_i, a‘_i)
其中 a‘_i 是当前策略 π_θ 在状态 s‘_i 下会采取的动作。我们可以通过查询当前策略网络来获得这个动作,而无需与环境交互。






🎯 离策略策略梯度


接下来,我们修正策略梯度。对于缓冲区中的每个状态 s_i,我们询问当前策略会采取什么动作,记作 a_i^π。



然后,我们使用 Q 值来构建策略梯度估计。在实践中,为了简便,我们常直接使用 Q 值而非优势函数:
∇_θ J(θ) ≈ (1/N) * Σ_i [ ∇_θ log π_θ(a_i^π | s_i) * Q_φ(s_i, a_i^π) ]
这样做方差较高(因为没有基线),但由于我们可以低成本地从策略中采样多个 a_i^π 来*均(只需运行网络,无需模拟),因此可以接受。






⚠️ 注意事项与总结


本节课中,我们一起学习了演员-评论家算法的深度实现与离策略扩展。




- 架构选择:分离网络简单稳定,共享网络可能更高效但难调。
- 并行化:同步和异步并行可以提高数据利用率和学习速度。
- 离策略学习:通过引入回放缓冲区和学习 Q 函数,我们可以复用历史数据,但需要仔细修正价值目标和策略梯度计算。
- 剩余偏差:即使进行了上述修正,状态
s本身的分布仍然来自旧策略,这引入了偏差。但直觉上,回放缓冲区包含了更广泛的状态分布,这通常有助于学习,且不会错过当前策略访问的重要状态。




一个基于这些思想的著名实用算法是软演员-评论家。在后续关于 Q 学习的课程中,我们将深入探讨更复杂的离策略方法。


🎓 课程 P24:CS 285 第6讲 第4部分 - 策略梯度中的方差缩减技术



在本节课中,我们将学习如何利用评论家(Critic)来改进策略梯度方法,特别是通过引入状态依赖基线、控制变量以及资格迹(Eligibility Traces)等技术来有效权衡偏差与方差,从而获得更稳定、更高效的学习过程。







📊 策略梯度与演员-评论家方法回顾



上一节我们介绍了策略梯度的基本形式。本节中,我们来看看如何将评论家集成到策略梯度中。



演员-评论家方法的策略梯度公式如下:




公式:演员-评论家策略梯度
∇θ J(θ) ≈ E[∇θ log πθ(a|s) * Â(s, a)]
其中优势函数估计 Â(s, a) 通常为:
Â(s, a) = r + γ * V(s') - V(s)


而原始策略梯度的公式为:



公式:原始策略梯度
∇θ J(θ) ≈ E[∇θ log πθ(a|s) * (Σ γ^t r_t - b)]
其中 Σ γ^t r_t 是未来奖励的折扣和,b 是一个基线(Baseline)。



演员-评论家方法使用价值函数 V(s) 来估计优势,这大大降低了方差,因为它整合了所有可能发生的情况,而非依赖单个样本。然而,这也引入了偏差,因为价值函数 V(s) 的*似可能不准确。



原始策略梯度虽然是无偏的,但因其依赖单个样本估计未来奖励,方差通常很高。






🎯 使用状态依赖基线实现无偏方差缩减


一个关键问题是:我们能否得到一个既无偏又能利用评论家降低方差的策略梯度估计器?



答案是肯定的,我们可以通过使用状态依赖基线来实现。



我们可以证明,策略梯度在减去一个仅依赖于状态(而不依赖于动作)的函数后,仍然保持无偏。一个极佳的选择是使用价值函数 V(s) 作为基线。



公式:使用状态依赖基线的策略梯度
∇θ J(θ) ≈ E[∇θ log πθ(a|s) * (Σ γ^t r_t - V(s))]



使用 V(s) 作为基线是合理的,因为单样本估计器 Σ γ^t r_t 的期望值就是 V(s)。因此,相减后的项 (Σ γ^t r_t - V(s)) 在期望上更小,从而降低了整体策略梯度的方差。这种方法保持了无偏性,同时方差低于使用常数基线的方法。





🔄 进阶:控制变量与动作依赖基线



如果我们想让基线也依赖于动作,以进一步降低方差,会发生什么?




使用动作依赖基线(例如直接使用Q值)确实可以进一步降低方差,但会引入偏差。这是因为依赖于动作的基线在期望中不再为零。



公式:使用控制变量的策略梯度
∇θ J(θ) ≈ E[∇θ log πθ(a|s) * (Q̂(s, a) - b(s, a))] + ∇θ E[b(s, a)]
其中 b(s, a) 是动作依赖基线(如Q函数估计 Q̂(s, a))。



这个公式包含两部分:
- 第一项是策略评分与基线的差。
- 第二项是基线函数本身期望值的梯度,用于补偿偏差。



在某些情况下(例如离散动作空间或特定连续分布),第二项可以精确计算(方差为零),而第一项由于 (Q̂ - Qπ) 很小而方差较低。这种“控制变量”技巧能提供极低方差的策略梯度估计。







📈 权衡偏差与方差:N步回报与资格迹




接下来,我们探讨如何在演员-评论家框架中,通过调整展望范围来权衡偏差与方差。



演员-评论家使用的单步优势估计器 Â = r + γV(s‘) - V(s) 方差低,但存在偏差。
蒙特卡洛优势估计器 Â = Σ γ^t r_t - V(s) 无偏,但方差高。



一个折中的方法是使用 N步回报估计器:




公式:N步回报优势估计
Â_t^(n) = (Σ_{i=0}^{n-1} γ^i r_{t+i}) + γ^n V(s_{t+n}) - V(s_t)



其中:
n=1时,即为演员-评论家的单步估计器(偏差较高,方差最低)。n=∞时,即为蒙特卡洛估计器(无偏,方差最高)。- 通过选择中间的
n值,可以在偏差和方差之间取得*衡。



为了更灵活地融合不同步长的信息,我们可以使用 广义优势估计(GAE)。GAE是所有N步估计器的指数加权*均:



公式:广义优势估计(GAE)
Â_t^{GAE(γ, λ)} = Σ_{l=0}^{∞} (γλ)^l δ_{t+l}
其中 δ_t = r_t + γV(s_{t+1}) - V(s_t) 是时序差分误差。


参数 λ ∈ [0, 1] 控制了偏差-方差的权衡:
λ = 0:退化为单步演员-评论家(高偏差,低方差)。λ = 1:退化为蒙特卡洛估计(无偏,高方差)。- 选择合适的
λ能在中间取得最佳效果。




折扣因子 γ 本身也具有类似的权衡作用:较小的 γ 降低了远期高方差奖励的权重,从而减少了方差,但同时也引入了偏差。





🏁 总结




本节课中我们一起学习了多种利用评论家来改进策略梯度的关键技术:



- 状态依赖基线:使用价值函数
V(s)作为基线,可以在保持梯度估计无偏的同时,有效降低方差。 - 控制变量:通过引入动作依赖基线并补偿其偏差,可以进一步降低方差,尤其在能精确计算补偿项时效果显著。
- N步回报与GAE:通过混合不同步长的回报估计,我们可以在偏差和方差之间进行*滑、可控的权衡。广义优势估计(GAE)提供了一种优雅且高效的计算框架来实现这一点。




这些技术是构建高效、稳定强化学习算法的核心工具,使我们能够更好地利用价值函数*似器的信息,加速策略优化过程。
课程 P25:CS 285 第6讲第5部分 - 演员-批评者算法总结与文献概览 🎬
在本节课中,我们将总结演员-批评者算法的核心组成部分,并概览文献中一些重要的算法实例。我们将回顾已学内容,并了解这些理论是如何在实际研究论文中应用的。
算法核心回顾 🔄
上一节我们详细探讨了演员-批评者算法的内部机制。本节中,我们来简要回顾其核心构成。
演员-批评者算法由几个部分组成:
- 演员:即策略
π(a|s)。 - 批评者:即价值函数
V(s)或Q(s, a)。
该算法可被视为策略梯度的一种变体,其主要优势在于能显著降低方差。与其他强化学习算法类似,其流程包含三个部分:
- 样本生成:在橙色框部分,我们通过与环境交互来生成轨迹样本。
- 回报估计:在绿色框部分,我们拟合价值函数来估计回报。
- 策略更新:在蓝色框部分,我们像标准策略梯度一样,使用梯度下降来更新策略参数。
策略评估指的是拟合价值函数的过程。其中,折扣因子 γ 是一个关键概念,它使得在无限时间范围内进行策略评估成为可能。折扣因子有两种主要解释:
- 可以解释为“对死亡的恐惧”,即智能体希望尽快获得奖励。
- 也可以纯粹视为一种减少方差的技术技巧。

算法设计要点 ⚙️

在讨论了基本框架后,我们来看看算法设计中的几个关键选择。
以下是算法设计时需要考虑的几个方面:
- 网络架构:可以使用一个网络配备两个输出头(分别对应演员和批评者),也可以使用两个独立的网络。
- 更新模式:可以采用批处理模式,也可以采用在线更新模式。
- 并行化:可以利用并行性来获得大于1的批处理大小,从而提升效率。
- 基线改进:我们讨论了状态依赖基线,以及更进一步的动作依赖控制变量方法。这些是另一种利用批评者信息的方式,同时能保持梯度估计的无偏性。
- 回报估计:我们还探讨了如何将上述方法与 n步回报 以及 广义优势估计(GAE) 结合。GAE通过对不同n值的n步回报估计器进行指数加权*均,提供了一个在偏差和方差之间取得更好*衡的估计。


文献中的算法实例 📚

理论需要与实践结合。现在,我们来看看研究论文中提出的几个著名演员-批评者算法实例。
以下是两篇重要论文及其贡献:

1. 《高维连续控制与广义优势估计》
- 这篇论文引入了广义优势估计器(GAE)。其核心公式是对不同n步回报估计器进行加权求和,*衡偏差与方差。
- 该算法采用批处理模式的演员-批评者架构。
- 它通过GAE技巧,巧妙地将蒙特卡洛估计器(高方差、无偏)与函数逼*估计器(低方差、有偏)结合起来。
- 论文中的实验主要聚焦于连续控制任务,例如让人形机器人学习行走。

2. 《深度强化学习的异步方法》
- 这篇论文专注于在线演员-批评者算法,并利用了并行异步的架构。
- 文中展示了一个基于图像的演员-批评者算法,它使用卷积神经网络处理视觉输入,并结合循环神经网络来导航迷宫。
- 该算法使用了 n步回报,其中n设置为4。
- 在网络设计上,它采用单一网络,但具有分别输出策略和价值函数的多个头。

延伸阅读推荐 📖

如果你想更深入地了解演员-批评者算法,以下是一些经典的论文推荐:
理论基础论文:
- 《基于函数逼*的强化学习策略梯度方法》:这是一篇非常重要的论文,奠定了策略梯度的理论基础。它详细描述了我之前提到的“因果关系”技巧(即当前时间步的策略更新不应受过去奖励影响),并系统阐述了如何将这些理论转化为演员-批评者算法。本节课的许多内容都基于这篇论文的思想。
现代深度强化学习论文:
- 《深度强化学习的异步方法》:即上文详细介绍的在线异步算法论文。
- 《高维连续控制与广义优势估计》:即上文详细介绍的GAE论文。
总结 🎯

本节课中,我们一起学习了演员-批评者算法的总结与文献概览。我们回顾了算法的三大核心组件(演员、批评者、更新流程),探讨了折扣因子γ的多重含义与算法设计的关键选择(如网络架构、基线、GAE)。最后,我们通过两篇标志性论文,看到了这些理论如何被应用于解决复杂的连续控制问题和基于图像的决策任务,并提供了延伸阅读的路径以助你进一步探索。

课程 P26:价值函数方法 🧠
在本节课中,我们将学习强化学习中的价值函数方法。我们将从回顾演员-评论家算法开始,探讨如何仅使用价值函数来决定行动,从而引出策略迭代和价值迭代等核心算法。课程内容将涵盖这些方法的基本原理、算法步骤及其在表格型马尔可夫决策过程中的应用。
回顾演员-评论家算法 🔄

在上一节中,我们介绍了演员-评论家算法。该算法将策略评估扩展到引入价值函数。其基本流程如下:
- 运行当前策略以生成样本
(s_t, a_t, r_t, s_{t+1})。 - 使用这些样本拟合一个价值函数
V_φ(s),这是一个将状态映射到标量值的神经网络。 - 利用价值函数估计每个状态-动作对
(s_t, a_t)的优势A_t:A_t = r_t + γ * V_φ(s_{t+1}) - V_φ(s_t) - 使用这些估计的优势值,通过策略梯度公式更新策略参数
θ。
这个流程遵循强化学习的通用范式:生成样本(橙色框)、拟合价值函数(绿色框)、更新策略(蓝色框)。
从价值函数到行动决策 🎯

上一节我们介绍了如何用价值函数辅助策略更新。本节中我们来看看,能否完全省略显式的策略网络,仅凭价值函数来决定如何行动。
直觉上,价值函数 V(s) 告诉我们哪些状态更好。如果我们能选择那些能导向高价值状态的行动,或许就不再需要一个独立的策略网络。

更形式化地,我们可以使用优势函数 A^π(s, a),它衡量在策略 π 下,动作 a 相对于*均动作的好坏程度:
A^π(s, a) = Q^π(s, a) - V^π(s)
对于任意策略 π,选择优势最大的动作 argmax_a A^π(s, a),得到的新策略 π' 至少不会比 π 差。这意味着,即使初始策略很差,我们也能通过这种方式进行改进。
因此,价值函数方法的核心思想是:隐式地构建策略。我们不需要一个额外的神经网络来表示策略,策略被隐式地定义为对优势函数(或Q函数)取 argmax 的操作。

策略迭代算法 🔁
基于上述思想,我们可以得到一个名为策略迭代的算法。它包含两个交替进行的步骤:
步骤一:策略评估
评估当前策略 π 的价值函数 V^π(s)。
步骤二:策略改进
根据评估出的价值函数,构建新的、改进的策略 π':
π'(a|s) = 1, 如果 a = argmax_a A^π(s, a)
新策略 π' 是确定性的,它总是选择当前估计下优势最大的动作。
然后,我们用 π' 替换 π,重复上述过程。每次迭代,策略都会得到改进(或保持不变)。
在表格型MDP中进行策略评估 📊
上一节我们介绍了策略迭代的框架。本节中我们来看看如何具体执行第一步——策略评估。我们暂时假设一个理想化的设置:状态 S 和动作 A 都是小而离散的,并且我们已知转移概率 P(s'|s, a)。这种设置被称为表格型马尔可夫决策过程。

例如,在一个4x4的网格世界中,有16个状态和4个动作(上、下、左、右)。我们可以用一个包含16个数字的表格来表示价值函数 V(s),用一个16x16x4的张量来表示转移概率。
在这种设置下,策略评估可以通过动态规划精确计算。价值函数满足贝尔曼方程:
V^π(s) = E_{a∼π(·|s)} [ R(s, a) + γ * E_{s'∼P(·|s,a)} [ V^π(s') ] ]
由于策略 π' 是确定性的(π'(a|s)=1 对于某个特定的 a),方程可以简化为:
V^{π'}(s) = R(s, π'(s)) + γ * E_{s'∼P(·|s, π'(s))} [ V^{π'}(s') ]
我们可以通过反复迭代这个方程(即用等号右边的值更新左边的 V(s))来求解 V^{π'},这个过程最终会收敛到真实的价值函数。
简化策略迭代:价值迭代 ⚡
策略迭代需要反复进行完整的策略评估。我们可以通过一个称为价值迭代的算法来简化这个过程。
首先注意到,在策略改进步骤中,由于 argmax 操作不受与动作 a 无关的项影响,因此:
argmax_a A^π(s, a) = argmax_a Q^π(s, a)
我们可以直接使用Q函数。

价值迭代的核心洞察是,我们可以“短路”策略的显式表示。算法步骤如下:
- Q值更新:对于每个状态
s和动作a,计算:Q(s, a) ← R(s, a) + γ * E_{s'∼P(·|s,a)}[ V(s') ] - 价值更新:对于每个状态
s,更新价值函数为:V(s) ← max_a Q(s, a)

实际上,我们可以将这两个步骤合并,直接得到价值迭代的核心更新规则:
V(s) ← max_a [ R(s, a) + γ * E_{s'∼P(·|s,a)}[ V(s') ] ]
这个规则被反复应用于所有状态,直到价值函数收敛。收敛后,最优策略可以通过对每个状态 s 选择 argmax_a [ R(s, a) + γ * E_{s'∼P(·|s,a)}[ V(s') ] ] 来获得。
价值迭代本质上是在交替执行一步策略评估和一步策略改进,它比完整的策略迭代更高效。
总结 📝

本节课中我们一起学习了强化学习中的价值函数方法。
- 我们从演员-评论家算法出发,理解了价值函数在评估策略中的作用。
- 我们探讨了仅使用价值函数决定行动的可能性,通过选择优势最大的动作来隐式定义策略,从而引出了策略迭代算法。
- 在表格型、模型已知的理想设定下,我们详细讲解了如何使用动态规划进行精确的策略评估。
- 最后,我们介绍了更高效的价值迭代算法,它通过合并步骤,直接迭代更新价值函数来逼*最优策略。


这些基于价值函数的动态规划算法为理解更复杂的、无模型的强化学习方法奠定了重要基础。在接下来的课程中,我们将探讨如何将这些思想扩展到连续状态空间和未知模型的环境中。

课程 P27:基于价值的强化学习方法 🧠

在本节课中,我们将学习如何将函数逼*(特别是神经网络)引入到强化学习中,以解决表格法无法处理大规模或连续状态空间的问题。我们将重点介绍拟合Q迭代算法,这是一种无需知道环境转移动态就能学习Q函数的方法。
从表格到函数逼* 📈
上一节我们讨论了如何学习用表格表示的价值函数。这种方法适用于小的离散状态空间,因为我们可以枚举所有可能状态的价值。
为什么表格法不够好?假设你正在玩一个基于图像输入的视频游戏。一个200x200像素的图像,每个像素有3个颜色通道,可能的状态数量是 255^(200*200*3)。这个数字超过了宇宙中的原子数量,因此存储这样的表格是不可能的。对于连续状态空间,状态数量实际上是无限的。这个问题常被称为“维度诅咒”。
因此,我们需要使用函数逼*器。就像在之前的课程中一样,我们将使用一个神经网络价值函数,它将状态映射到一个标量值。这个神经网络具有参数 φ。

我们可以通过最小二乘回归,将神经网络价值函数拟合到目标值上。如果我们使用价值迭代,目标值就是 max_a Q_π(s, a)。
以下是拟合价值迭代算法的两个步骤:
- 计算目标值
y_i,对于每个采样状态s_i,评估所有可能动作的Q值并取最大值:y_i = max_a [ R(s_i, a) + γ * E[V(s')] ]。 - 通过回归,调整参数
φ,使V_φ(s_i)接*目标值y_i。
这个算法是合理的,但它仍然需要知道环境的转移动态,以便计算期望值 E[V(s')] 并从同一状态尝试多个不同动作。在大多数实际环境中,我们无法做到这一点。
引入Q函数与策略迭代 🔄

如果我们不知道转移动态,通常无法执行上述算法。让我们回到策略迭代。策略迭代交替进行两步:策略评估(计算 Q_π)和策略改进(将策略设置为关于 Q_π 的贪婪策略)。
策略评估涉及反复应用价值函数递归。我们可以为Q函数构造一个类似的递归:
Q_π(s, a) = R(s, a) + γ * E_{s'~P(s'|s,a)} [ Q_π(s', π(s')) ]
这个递归式有一个关键的不同:它只需要 (s, a, s') 形式的样本,而不需要知道完整的转移概率 P(s'|s,a)。这意味着,只要我们有一些通过运行某个策略收集到的 (s, a, r, s') 样本,我们就可以用来拟合Q函数,而无论当前策略是什么。这为无模型强化学习奠定了基础。
拟合Q迭代算法 ⚙️
我们能否像简化价值迭代一样,对Q函数也使用“取最大值”的技巧,同时保留无需知道转移动态的好处?答案是肯定的,这就是拟合Q迭代算法。
与拟合价值迭代类似,我们构建目标值,但关键区别在于我们使用样本而不是期望,并且用Q函数本身的最大值来估计下一个状态的价值。

以下是拟合Q迭代算法的完整步骤,你需要选择一些自由参数(如收集数据量、内循环迭代次数k等):
第一步:收集数据集
使用某个策略(可以是任何策略,常见选择是使用最新策略)收集包含元组 (s_i, a_i, s_i', r_i) 的数据集。
第二步:计算目标值
对于数据集中的每个转移样本,计算目标值 y_i:
y_i = r_i + γ * max_{a'} Q_φ(s_i', a')
这里,Q_φ 是你当前对Q函数的估计(一个神经网络)。
第三步:拟合新的Q函数
通过最小化损失函数(如均方误差)来更新Q函数的参数 φ:
L(φ) = Σ_i ( Q_φ(s_i, a_i) - y_i )^2
你需要决定执行此优化步骤的梯度更新次数。
内循环与探索
通常,我们会在收集一批新数据之前,多次(比如k次)交替执行第二步和第三步(即使用同一批数据反复改进Q函数)。完成k次内循环迭代后,你可以使用更新后的Q函数来定义一个策略(例如,ε-贪婪策略),并用它来收集更多数据,然后重复整个过程。
关于神经网络架构的一个注记:对于离散动作空间,一种常见设计是让神经网络输入状态 s,并输出所有可能动作 a 对应的Q值向量,而不是将 s 和 a 同时作为输入。
总结 📝

本节课中,我们一起学习了基于价值的强化学习方法的核心思路:
- 基于价值的方法不显式学习策略,而是学习价值函数(V函数)或动作价值函数(Q函数)。
- 当状态空间很大或连续时,必须使用函数逼*(如神经网络)来表示价值函数。
- 拟合Q迭代算法允许我们在不知道环境模型(转移动态)的情况下,直接通过样本
(s, a, r, s')来学习Q函数。 - 该算法循环执行三个步骤:收集数据、计算目标值、拟合Q函数。它是一个离线、异策略算法,可以使用历史数据。
- 需要注意的是,当使用非线性函数逼*器(如神经网络)时,该算法的收敛性没有理论保证,但在实践中往往非常有效。许多经典算法(如Q学习)都可以视为拟合Q迭代的变体。

通过本节课,你已经掌握了将强化学习扩展到复杂、高维状态空间的关键工具——基于函数逼*的价值函数学习。
课程 P28:CS 285 第七讲第三部分 - 拟合Q迭代与Q学习 🧠

在本节课中,我们将学习如何将之前介绍的通用“拟合Q迭代”框架,具体化为不同类型的深度强化学习算法。我们将重点理解其作为离线策略算法的特性,并探讨几种流行的具体实现,如在线Q学习。
概述:拟合Q迭代作为离线策略算法
上一节我们介绍了拟合Q迭代的通用形式。本节中我们来看看它如何成为一个离线策略算法。
离线策略算法意味着,你不需要根据最新策略来采集样本数据。通常,你可以在同一批样本上执行多次梯度更新,或者重用之前迭代的样本,而不必丢弃旧数据。这在实践中提供了更多数据用于训练。
拟合Q迭代之所以能使用离线策略数据,是因为策略本身仅通过Q函数来体现,而非通过模拟器交互。当策略改变时,真正变化的是求取最大值的操作。策略 π 由 argmax 操作定义:π(s) = argmax_a Q_φ(s, a)。策略仅出现在这个 argmax 中,并且它是以Q函数的参数形式出现的。
这意味着,随着策略改变(即 a_i' 改变),我们无需生成新的轨迹(rollouts)。你可以将Q函数视为一个模型,它允许你模拟采取不同动作会获得何种价值。为了改进行为,你自然会选择价值最高的动作。因此,这个最大值操作*似了在状态 s_i' 下,贪婪策略 π 的价值。这就是我们不需要新样本的原因:我们使用Q函数来模拟新动作的价值。
给定一个状态 s_i 和动作 a_i,转移至 s_i' 的过程实际上与策略 π 无关,因为 π 只影响动作 a_i,而这里的 a_i 是固定的。
因此,从结构上看,拟合Q迭代可以这样理解:你有一个包含各种状态转移的大数据集,你在每个状态转移上进行价值备份(backup),每次备份都会改进你的Q值。你并不特别关心这些转移具体来自哪个策略,只要它们大致覆盖了所有可能的状态转移空间即可。
你可以想象拥有一个状态转移数据集,然后在这个数据集上反复运行拟合Q迭代。每循环一次,你的Q函数都会得到改进。

拟合Q迭代的优化与误差

那么,拟合Q迭代中优化良好的步骤是什么?在取最大值这一步,它可以改进你的策略。在表格型(tabular)情况下,这实际上就是策略改进。而第三步(最小化拟合误差)则是优化步骤。
如果你使用表格更新,你会直接将目标值 y 写入表格。但由于我们使用神经网络,你需要通过优化来最小化与这些目标值 y 之间的误差,并且可能无法将误差完全降至零。
因此,可以将拟合Q迭代视为优化一个误差,即贝尔曼误差(Bellman error),它是 Q_φ(s, a) 与目标值 y 之间的差异。这是最接*实际优化目标的误差。当然,这个误差本身并不完全反映策略的好坏,它只是衡量你复制目标值的准确度。
如果误差为零,那么 Q_φ(s, a) = r(s, a) + γ * max_a' Q_φ(s', a')。这正是最优策略 π* 对应的最优Q函数 Q*。当策略通过 argmax 规则恢复时,这就是你能展示的最大化奖励。
但如果误差不为零,那么关于策略性能的很多理论保证就会失效。我们知道在表格情况下,误差可以为零,从而恢复 Q*。然而,一旦离开表格情况(例如使用函数*似器),大多数保证就会丢失。

具体算法实例:在线Q学习
现在,让我们讨论拟合Q迭代的一些具体实例,它们对应着文献中非常流行的算法。
到目前为止,我们讨论的拟合Q学习通用形式包含三步:
- 收集数据集。
- 评估目标值。
- 训练神经网络参数以拟合这些目标值。
然后交替执行第2和第3步 K 次,之后再次出去收集更多数据。
通过特定的超参数选择,可以将这个通用算法实例化为在线算法。
以下是具体步骤:
在在线算法的第一步中,你执行一个具体的动作 a_i,并观察一个转移 (s_i, a_i, s_i', r_i)。
在第二步中,为你刚刚经历的转移计算一个目标值 y_i。这类似于在线演员-评论家(Actor-Critic)算法中为你刚进行的一次转移计算优势值的方式。

在第三步中,你在Q值与刚计算的目标值之间的误差上执行一次梯度下降。这里的方程看起来有点复杂,但我基本上只是对第三步中的最小化目标函数应用了概率链式法则。
应用链式法则,你得到梯度更新公式:
φ ← φ - α * dQ_φ/dφ * (Q_φ(s_i, a_i) - y_i)
其中,括号内的误差 (Q_φ(s_i, a_i) - y_i) 有时被称为时序差分误差(Temporal Difference error)。
这就是基本的在线Q学习算法,有时也称为 Watkins Q-learning。这是教科书中的经典Q学习算法,并且它是一种离线策略算法。因此,你不需要根据最新的贪婪策略来执行动作 a_i。
探索策略:如何选择动作
那么,在第一步中应该使用哪种策略来选取动作 a_i 呢?最终策略将是贪婪策略。如果Q学习收敛且误差为零,那么我们知道贪婪策略是最优策略。
但在学习过程中,使用纯粹的贪婪策略可能不是好主意。思考一下:我们为什么不想在运行在线Q学习时,第一步就使用 argmax 策略(即贪婪策略)?
部分原因在于,argmax 策略是确定性的。如果我们的初始Q函数非常差(尽管不是随机的,但是任意的),那么 argmax 策略将导致每次进入特定状态时都采取相同的动作。如果那个动作不好,我们可能会被困住,永远采取那个坏动作,可能永远无法发现更好的动作存在。
因此,在实践中,当我们运行拟合Q迭代或Q学习算法时,强烈建议修改第一步中使用的策略,不仅仅是 argmax 策略,而是要注入一些额外的随机性以促进更好的探索。
以下是几种常见的选择:
1. ε-贪婪策略 (ε-greedy)
这是与离散动作一起使用的最简单的探索规则之一,也是作业中将要实现的。
- 以
1 - ε的概率,采取贪婪动作(即argmax_a Q(s, a))。 - 以
ε的概率,随机均匀选择其他动作。
因此,每个动作的概率为:贪婪动作是1 - ε + ε/(|A|-1),其他每个动作是ε/(|A|-1)。
为什么这可能是个好主意?如果我们选择 ε 为一个小数,这意味着大多数时候我们采取我们认为最好的动作。如果我们判断正确,这将引导我们进入好的区域并收集好的数据。但我们总是有一个小而非零的概率尝试其他动作,这将确保如果我们的Q函数不好,最终我们会随机做出更好的事情。这是一个非常简单的探索规则,在实践中被广泛使用。
一个非常常见的实际选择是在整个训练过程中动态调整 ε 的值。这很有道理,因为你预期Q函数在开始时很差,那时你可能想要使用较大的 ε。随着学习的进行,Q函数变得更好,你可以减小 ε。
2. 玻尔兹曼探索 / Softmax 探索
另一种探索规则是根据Q值的某个正变换(特别是指数变换)按比例选择动作。如果你按照 exp(Q(s, a)) 的比例采取动作,那么最好的动作将被最频繁地执行,几乎同样好的动作也会被频繁执行,因为它们有相似的概率。但如果某个动作的Q值非常低,那么它几乎永远不会被采取。
在某些情况下,这种探索规则可能优于ε-贪婪策略:
- 与ε-贪婪相比,恰好是最大值的动作发生的概率更高。如果存在两个大致相同的动作,次优动作在ε-贪婪下概率要低得多,而使用这种指数规则,如果两个动作同样好,你执行它们的次数大致相同。
- 如果你已经学到某个动作真的很差,你可能不想浪费时间探索它,而ε-贪婪策略不会利用这一点。
这也被称为玻尔兹曼探索规则。我们将在后续课程中详细讨论更复杂的探索方式,但这些简单的规则足以实现基本的Q迭代和Q学习算法。

总结
本节课中我们一起学习了基于价值的方法。这些方法不显式学习策略,而是学习价值函数或Q函数。我们讨论了在拥有价值函数后,如何通过 argmax 操作来恢复策略。

我们深入探讨了如何设计拟合Q迭代方法,该方法不需要知道转移动态,因此是真正的免模型方法。我们可以通过不同的超参数选择(如收集数据的步数、梯度更新的次数),以多种方式实例化它:作为批处理的离线策略方法,或作为在线的Q学习方法。
课程 P29:基于价值方法的收敛性理论 🧠
在本节课中,我们将学习基于价值方法的收敛性理论。我们将从表格型价值迭代的收敛性开始分析,然后探讨当引入函数逼*(如神经网络)时,算法为何可能不再收敛。理解这些理论背景,有助于我们认识不同强化学习算法的局限与潜力。
价值迭代与贝尔曼算子 🔄
上一节我们介绍了基于价值方法的基本思想。本节中,我们来看看其核心算法——价值迭代,并引入一个重要的数学工具:贝尔曼算子。
价值迭代算法可以看作包含两个步骤:
- 构建Q值表:
Q(s, a) = R(s, a) + γ * E[V(s')] - 更新价值函数:
V(s) = max_a Q(s, a)
我们可以定义一个贝尔曼算子 B,它将一个价值函数向量 V 映射为另一个向量 B V。其数学定义为:
B V = max_a [ R_a + γ * T_a * V ]
其中,R_a 是执行动作a的奖励向量,T_a 是动作a对应的状态转移概率矩阵。

最优价值函数 V* 是贝尔曼算子的一个不动点,即满足 V = B V**。这意味着,如果我们能找到这个不动点,就能从中恢复出最优策略。
表格型价值迭代的收敛性 ✅
我们已经知道最优价值函数是贝尔曼算子的不动点。接下来的问题是,反复应用算子 B 能否找到这个不动点?答案是肯定的,因为贝尔曼算子 B 在无穷范数(L∞ norm)下是一个收缩映射。
收缩映射意味着,对于任意两个价值函数向量 V 和 V‘,应用算子后它们的距离会缩小:
||B V - B V‘||_∞ ≤ γ * ||V - V‘||_∞
其中 γ 是折扣因子(0 ≤ γ < 1)。

由于 V* 是不动点(即 B V = V),将 V‘ 替换为 V 可得:
**||B V - V||_∞ ≤ γ * ||V - V*||_∞**
这表明,每进行一次价值迭代更新,我们的价值函数估计都会以系数 γ 的比例更接*最优价值函数。因此,表格型价值迭代算法保证收敛到最优解。
拟合价值迭代与投影算子 📉
上一节我们介绍了表格型算法的理想收敛性。本节中我们来看看当使用函数逼*(如神经网络)来参数化价值函数时,情况会发生什么变化。这对应着拟合价值迭代算法。
拟合价值迭代也可分为两步:
- 生成目标值:
y = B V(贝尔曼备份) - 监督学习:
V‘ = argmin_φ Σ ||V_φ(s) - y||²(投影到假设空间)
第二步可以看作一个投影算子 Π,它在L2范数下将向量投影到由神经网络参数所定义的函数集合 Ω 上。投影算子 Π 在L2范数下也是一个收缩映射。

因此,完整的拟合价值迭代算法可以简洁地写为:V ← Π B V。
即先进行贝尔曼备份,再将结果投影回假设空间。
为何拟合价值迭代可能不收敛 ❌
我们知道了 B 在L∞范数下收缩,Π 在L2范数下收缩。一个自然的想法是,它们的组合 Π B 也应该收缩。但遗憾的是,Π B 在任何范数下都不一定是收缩算子。
这是因为两个算子收缩所依据的范数不同。以下是一个直观解释:
- 从当前价值函数 V 开始。
- B V 会在L∞范数意义下使其更接*最优值 V*。
- 但 Π (B V) 将其投影回假设空间 Ω 时,依据的是L2范数。
- 这次投影可能导致投影后的点 V‘ 反而比原来的 V 离 V* 更远。

这种现象并非理论上的特例,在实践中也可能发生。因此,拟合价值迭代(以及使用神经网络的Q学习)不能保证收敛到最优解,甚至不能保证收敛。
对Q学习与演员-评论家算法的影响 ⚠️

上述结论具有广泛的含义。它不仅适用于拟合价值迭代,也适用于我们之前讨论的其他算法。
以下是核心要点:
- 拟合Q迭代:其算法形式为 Q ← Π B Q,与拟合价值迭代面临相同的理论问题,即 Π B 不收缩,因此不保证收敛。
- Q学习不是梯度下降:虽然Q学习的更新看起来像是在做回归(最小化当前Q值与目标Q值的误差),但目标值本身依赖于当前的Q值。算法并没有计算目标值对Q参数的梯度,因此它并非在优化一个定义良好的全局目标函数。这是它可能不收敛的根本原因。
- 演员-评论家算法:在策略评估(评论家更新)步骤中,同样涉及贝尔曼备份和函数逼*投影的组合。因此,基于价值函数*似的演员-评论家算法同样缺乏收敛性保证。
术语回顾与总结 📚

在本节课中,我们一起学习了基于价值方法的收敛性理论。让我们回顾一下关键点:

重要术语:
- V^π:策略 π 的价值函数(评论家评估的对象)。
- V:最优策略 π 的价值函数(价值迭代寻找的目标)。

核心结论:
- 表格型价值迭代中,贝尔曼算子 B 是收缩的,算法保证收敛到最优解。
- 当使用函数逼*(如神经网络)时,我们引入了投影算子 Π。
- 虽然 B 和 Π 各自是收缩的(但在不同范数下),它们的组合 Π B 却可能不是收缩的。
- 因此,拟合价值迭代、拟合Q学习、以及使用神经网络*似的演员-评论家算法,在理论上都不保证收敛。

尽管这些理论结论看起来有些令人沮丧,但它们帮助我们深刻理解了算法行为的边界。在实践中,通过精心设计网络架构、采用目标网络、经验回放等技术,可以极大地改善这些算法的稳定性和性能。在接下来的课程中,我们将探索如何让这些算法在实际应用中良好工作。
课程 P3:深度强化学习导论(第三部分)🚀
在本节课中,我们将探讨为何要学习深度强化学习。我们将分析数据驱动AI的局限性,理解强化学习在优化决策中的核心作用,并展望深度强化学习在构建通用智能系统方面的潜力。

为什么需要深度强化学习?🤔
上一节我们介绍了强化学习的基本概念。本节中,我们来看看为何需要将深度学习与强化学习结合。

大数据驱动的大型人工智能系统取得了令人瞩目的成果。然而,这些主要基于复制人类数据的方法,其成果之所以令人印象深刻,是因为它们能产生类似人类的结果。但在许多情况下,我们需要的算法性能应超越人类数据本身。
人类数据可能不理想、难以获取,或者我们追求的是最高性能(例如AlphaGo)。我们希望算法能自主发现更好的解决方案,或在没有人类提供训练数据的情况下找到解决方案。
许多成功的基于数据的方法依赖于密度估计。这意味着它们倾向于生成人类可能产生的数据类型,但这也限制了它们超越人类行为的能力。它们可能在索引人类数据方面表现出色(如大语言模型),但不一定擅长利用这些知识解决具体问题。
例如,让一个大语言模型说服某人去看医生,它可能无法比人类更有效地完成,尽管它拥有庞大的互联网知识库。
数据驱动AI与强化学习的结合 🔗
那么,我们面临什么情况?一方面,我们有数据驱动的AI系统,它们从海量数据中学习世界知识,但并未真正尝试在本质上超越数据。另一方面,我们有强化学习系统,它们可以优化目标以产生行为。
这似乎能解决数据驱动AI方法的主要缺点。但我们需要找出如何大规模应用这些强化学习方法,并将其与大规模模型和数据集结合。这正是深度学习在深度强化学习中发挥作用的地方。

- 数据驱动AI:关于使用数据。
- 强化学习:关于优化。
- 深度强化学习:关于大规模优化。
没有优化的数据,我们无法以新的方式解决新问题。它可能让我们擅长在大数据集中索引并找出类似人类的解决方案,但不一定是超越人类的解决方案。
“苦涩的教训”与学习-搜索范式 📚
在这个讨论背景下,强化学习先驱理查德·萨顿在2019年发表的论文《苦涩的教训》极具启发性。他提出,在构建强大学习机器的漫长道路上,我们必须吸取的教训是:我们自认为的思考方式并不重要,因为从长远看它行不通。

真正能够无限扩展的两种方法是学习和搜索。他的核心论点是,如果我们想要强大的学习机器,就应该构建擅长利用数据且可大规模扩展的系统,而不是过度设计使其模仿人类解决问题的方式。

例如,早期的计算机视觉系统可能被编程为检测“四个轮子和前后车灯”来识别汽车。而现在,我们更倾向于提供大量带标签的汽车图片,让计算机自己学习。

需要注意的是,萨顿强调的是“学习与搜索”,而非“学习与GPU”或“学习与大数据集”。这里有重要原因:
- 学习:关于从数据中提取模式。
- 搜索:在强化学习的语境中,指利用计算进行推断和优化,本质上是使用迭代计算做出理性决策的过程。
两者缺一不可。学习让你理解世界,搜索让你利用这种理解产生有趣的涌现行为。要想在现实世界中做出灵活、理性、最优的决策,你需要理解世界如何运作,并利用这种理解找到比已有方案更好的解决方案。这就是深度强化学习的目标。

- 没有优化的数据,无法以新方式解决新问题。
- 没有数据或经验的优化,在现实世界(而非可编写运动方程的模拟器)中难以应用。
- 结合两者,才能开始更有效地解决现实世界问题。
机器学习即决策:一个更广阔的视角 🧠
这种观点不仅适用于机器人控制或玩视频游戏。我们可以从一个更根本的问题切入:为什么需要机器学习?甚至,为什么需要大脑?
神经科学家丹尼尔·沃尔珀认为,我们拥有大脑的唯一原因,是为了产生适应性强且复杂的运动,因为运动是我们影响周围世界的唯一方式。我们可以将这种直觉应用于机器学习,形成一个假设:我们可能只需要机器学习来做一件事,那就是产生适应性强且复杂的决策。

从这个角度看,所有机器学习问题都可以视为决策问题,而不仅仅是预测问题。
- 控制机器人:决定如何移动关节。
- 驾驶汽车:决定如何操控。
- 计算机视觉系统:决定图像标签,而这个标签的下游应用(如交通路由、安全警报)会产生实际影响。
如果将机器学习的所有结果都视为决策,那么所有机器学习问题实际上都是伪装下的强化学习问题,只是我们有时有幸能使用监督标签数据来辅助解决。这个视角虽然有些简化,但它提醒我们,学习和搜索不仅仅是用于机器人或游戏的专用工具,它们是构建人工智能系统的通用基础模块。

这引向了一些宏大问题,例如如何构建通用的智能机器。深度强化学习是迈向这个方向的重要组成部分。




深度强化学习的现状与潜力 ⚡
我们为何现在要研究深度强化学习?
- 大规模端到端训练模型(使用Transformer等大型模型和数据集)已能解决许多令人印象深刻的问题。
- 我们已经掌握了许多可与深度神经网络结合的强化学习算法,并能用它们训练大型模型。

然而,在基于学习的控制和真正的开放世界设置中,这仍然是一个主要的开放挑战。虽然已有初步成果(包括机器人领域),但许多潜力尚未实现。现在是一个令人兴奋的研究时刻,许多拼图正在拼接,但主要问题依然存在,这可能是未来工作的方向。

超越奖励最大化:序列决策中的其他问题 🎯

在深入之前,我们需要了解,现实世界的序列决策不仅涉及奖励最大化。本课程也将涵盖决策制定中出现的其他问题。

一个核心问题是:奖励从何而来?
- 在视频游戏中,奖励(分数)很明确。
- 但在现实任务中(如让机器人倒水),定义奖励函数本身可能就是一个复杂的感知问题。
人类的许多行为并非通过稀疏的终极奖励(如获得博士学位后的成就感)试错学来的。生物(如猎豹)也并非只从最终捕获猎物的奖励中学习。它们可能通过观察、模仿、从其他信号中学习。
因此,我们可以利用其他形式的监督信息:

以下是几种重要的学习范式:
- 模仿学习:直接从观察到的行为中学习。
- 逆强化学习:从观察到的行为中推断出背后的奖励函数。
- 预测模型学习:学习预测世界接下来会发生什么,即使不确定该做什么,之后可利用此知识。
- 无监督学习/特征提取。
- 迁移学习/元学习:从其他任务中转移知识,或学习如何更快地适应新任务。
本课程将涵盖这些主题。
实例展示
模仿学习示例:约八年前,NVIDIA展示了完全基于模仿的自动驾驶方法,试图直接复制人类驾驶员的动作。但人类模仿的往往是更深层的意图,而非具体动作。心理学实验表明,孩子会推断实验者的意图,并采取不同的、更有效的行动来实现该意图。
逆强化学习示例:机器人通过观察人类的倒水演示,推断出意图是“将橙色杯中的水倒入黄色杯”,从而能在不同设置下执行该任务。
预测模型示例:机器人通过与物体互动收集数据,学习预测其动作对未来感官输入(如图像)的影响。这种模型可用于控制,例如命令机器人将红色物体移到绿色位置,它会先“想象”运动过程,再执行。预测模型还能促进行为涌现,如发现使用工具来完成移动物体的任务。*年来,随着生成模型(如扩散模型)的进步,视频预测质量大幅提升。
利用预训练模型:现代方法常利用在互联网数据上预训练的大型模型(如视觉-语言模型),然后对其进行微调以输出机器人动作。例如,RT-2模型能将互联网上学到的知识(如识别物体、理解“不同”、“正确”等概念)用于执行具体的机器人指令。

总结与宏大展望 🌌
让我们以更宏大的视角结束:如何构建智能机器?深度强化学习的基本构建块可能是解答这个问题的优秀候选。
传统思路可能是理解大脑的各个部分并编程模拟,但这极其复杂。如果学习是智能的基础,并且存在一种通用的学习程序,能 underlie 所有智能行为,那么问题可能变得更易处理。有间接证据支持这种可能性,例如大脑皮层表现出可塑性,能够适应不同的感官输入。
如果存在这样一个通用算法,它需要能够:
- 解释丰富的感官输入。
- 选择复杂的动作。
- 同时完成这两件事。
深度学习为我们提供了从大型复杂数据集中进行可扩展学习的能力(处理丰富输入)。强化学习为我们提供了优化和采取行动的数学框架(进行搜索)。两者的结合——深度强化学习——恰好对应了“学习与搜索”的范式。
神经科学中也有一些证据支持这两方面与大脑功能的联系。当然,问题远未解决:
- 如何将深度学习的强大数据利用能力与强化学习的优化能力更无缝地结合?
- 人类学习速度快、能复用知识,而深度强化学习通常需要大量数据,迁移学习仍是挑战。
- 奖励函数设计、预测模型的作用、与无模型方法的融合等问题依然开放。
这些疑问为该领域的进一步研究留下了充足空间。最终,我们或许可以不再将智能系统视为一堆模块的集合,而是看作一个由通用学习算法驱动的、优雅简单的框架。正如艾伦·图灵曾暗示过的思想:与其模拟成人思维,不如模拟儿童的心智,再对其施以适当的教育。

本节课中,我们一起学习了深度强化学习的动机、其核心的“学习-搜索”范式、从决策视角理解机器学习的广阔图景,以及当前面临的挑战和未来潜力。深度强化学习不仅是解决特定任务的工具,更是探索通用人工智能的一条重要路径。
课程 P30:CS 285 第8讲 第1部分 - 深度Q学习算法 🧠

在本节课中,我们将继续探讨价值驱动方法,并学习如何利用Q函数构建实用的深度强化学习算法。尽管基于价值的方法在理论上不一定保证收敛,但我们可以从中提取出强大且实用的算法。本节课将重点介绍拟合Q迭代算法、在线Q学习及其面临的挑战,并引入回放缓冲区这一关键技术来解决样本相关性问题。
回顾:拟合Q迭代算法 🔄
上一节我们介绍了价值驱动方法的基本框架。本节中,我们来看看一个具体的离线算法——拟合Q迭代算法。该算法无需知道状态转移概率,也无需显式表示策略。
以下是拟合Q迭代算法的三个基本步骤:
- 数据收集:使用某种策略(可以是不同策略的混合,或包含探索机制如ε-贪婪、玻尔兹曼探索)收集一个包含状态转移的数据集。这是一个离线算法,可以聚合来自先前迭代的数据。
- 目标值计算:对于数据集中的每一个转移元组
(s_i, a_i, s_i‘, r_i),计算目标值y_i。其公式为:
y_i = r_i + γ * max_{a‘} Q_φ(s_i‘, a‘)
这里的最大值操作隐式地计算了一个贪婪策略,并使用当前的Q函数Q_φ来评估其价值,这使得算法能够进行离策略学习。 - 函数拟合:更新由参数
φ参数化的Q函数*似器。通过最小化Q_φ(s_i, a_i)与目标值y_i之间的差异来优化参数φ。公式表示为:
φ ← argmin_φ Σ_i (Q_φ(s_i, a_i) - y_i)^2
步骤2和步骤3通常会在收集更多新数据之前重复多次。这个通用框架允许我们做出多种选择,例如每次收集多少数据、进行多少梯度步以及如何交替进行数据收集和参数更新。

在线Q学习:一个特例 ⚡
如果我们对拟合Q迭代算法进行特定设置——每次只收集一个转移样本、只进行一次梯度更新,并且在收集新数据前只执行一轮步骤2和3——我们就得到了在线Q学习算法(通常简称为Q学习)。
其步骤如下:

- 执行一个动作
a_i,观察产生的转移(s_i, a_i, s_i‘, r_i)。 - 计算该转移的目标值
y_i。 - 在Q函数输出与目标值
y_i的差异上执行一次梯度下降步。
这个算法符合强化学习的通用模式:与环境交互(橙色部分)、价值函数拟合(绿色部分),而策略改进(蓝色部分)则退化为简单地选择使Q值最大的动作。
Q学习面临的问题与挑战 ⚠️
然而,上述通用流程存在一些问题。
首先,步骤3中的更新看似是梯度下降,但实际上Q学习并不是真正的梯度下降。因为目标值 y_i 的公式中,Q_φ 出现在两个地方,但在第二项(max Q_φ)中并没有被求梯度。如果我们正确地应用链式法则,会得到一类名为“残差梯度”的算法,但这些算法在实践中往往因严重的数值条件问题而效果不佳。
其次,序列样本高度相关。在线Q学习一次处理一个转移,导致在时间步 t 和 t+1 看到的状态非常相似。对这种高度相关的样本序列进行梯度更新,违反了随机梯度方法通常要求的独立同分布假设,可能导致训练不稳定和效率低下。直观上,这会导致模型在局部“过拟合”最*看到的一小段轨迹,而无法学到全局准确的Q函数。

解决方案:并行化与回放缓冲区 🛠️
我们可以借鉴之前演员-评论员算法中的思想来解决样本相关性问题。
一种方案是并行化:使用多个工作者并行收集不同轨迹上的转移样本,然后汇总成批进行更新。这可以缓解相关性,因为批内的样本来自不同的轨迹。甚至可以异步进行,工作者无需严格同步。

然而,更常用且简单有效的方法是使用回放缓冲区。这个想法在90年代就被引入强化学习。
回放缓冲区是一个存储历史转移 (s, a, s‘, r) 的数据集。在训练时,我们不再直接使用最新收集的连续样本,而是从缓冲区中均匀随机采样一个批量的转移数据。这样做有两个关键好处:
- 打破了连续样本之间的相关性,满足了随机梯度下降的假设。
- 通过批量计算,降低了梯度估计的方差。

那么数据从何而来呢?我们需要定期用最新的策略(例如,带有ε-贪婪探索的贪婪策略)与环境交互,并将收集到的新转移数据加入到回放缓冲区中。这样可以不断用更有趣、覆盖更广的数据来刷新缓冲区。
完整的深度Q学习算法流程 🧩
将以上所有部分结合起来,我们可以得到结合了回放缓冲区的完整Q学习算法流程:

- 数据收集与填充缓冲区:使用某种策略(初始可为随机策略,后续可采用ε-贪婪策略)收集转移数据,并将其添加到回放缓冲区
B中。 - 从缓冲区采样:从缓冲区
B中随机采样一个小批量的转移数据。 - 计算目标与更新:
- 对批量中的每个样本计算目标值:
y_i = r_i + γ * max_{a‘} Q_φ(s_i‘, a‘) - 执行一次梯度下降步,最小化损失:
L(φ) = Σ_{i∈batch} (Q_φ(s_i, a_i) - y_i)^2
- 对批量中的每个样本计算目标值:
- 重复:重复步骤2和步骤3多次(例如K次),然后再回到步骤1收集更多新数据。
通过从大型缓冲区中随机采样,我们获得了不相关、低方差的样本。通过定期用新策略收集数据,我们确保了缓冲区能覆盖状态-动作空间中有意义的区域。

总结 📚
本节课中,我们一起学习了:
- 回顾了拟合Q迭代算法的离线学习框架。
- 了解了在线Q学习是其一个特例,并认识到它面临非梯度更新和样本相关性两大问题。
- 引入了回放缓冲区这一关键技术,通过存储历史经验并随机采样,有效解决了样本相关性问题,使得深度Q学习训练更加稳定和高效。
- 最终整合出使用回放缓冲区的完整深度Q学习算法流程,为实际应用奠定了坚实基础。


下一节,我们将继续探讨深度Q学习算法在实际中遇到的其他挑战及其改进方案。

课程 P31:深度强化学习中的目标网络 🎯
在本节课中,我们将学习如何通过引入目标网络来解决深度Q学习中的“移动目标”问题,从而构建一个稳定可靠的深度Q学习算法。我们将从回顾现有问题开始,逐步推导出经典的DQN算法,并探讨目标网络的不同更新策略。



概述:从问题到解决方案
上一节我们介绍了使用经验回放缓冲器来解决样本相关性问题。本节中,我们来看看另一个关键挑战:Q学习的目标值会随着Q函数自身的更新而不断变化,这就像试图击中一个移动的靶子,使得学习过程难以收敛。我们将通过引入一个独立的目标网络来稳定训练目标。

移动目标问题与监督回归
Q学习本质上可以看作是一个回归问题,其目标是使Q函数的预测值逼*一个目标值 y_i。在拟合Q迭代算法中,步骤三执行的就是这种监督学习式的回归。然而,问题在于这个回归目标 y_i 本身依赖于我们正在更新的Q函数参数,因此目标会“移动”。
如果我们在一个错误的目标上训练到收敛,结果并不会好。因此,在实践中,我们通常只对每个目标执行少量(甚至一步)梯度更新,但这依然无法完全解决目标移动带来的不稳定性。
解决方案:经验回放与目标网络

为了在“全拟合Q迭代”的稳定性和“在线Q学习”的效率之间取得*衡,我们结合使用经验回放缓冲器和目标网络。

以下是结合了这两种技术的通用算法框架:
- 初始化:随机初始化当前Q网络参数
φ和目标Q网络参数φ'。 - 数据收集:使用某种策略(如ε-greedy策略)与环境交互,将收集到的转移样本
(s, a, s', r)存入回放缓冲器D。 - 内部更新循环(重复k次):
- 从缓冲器
D中采样一个小批量的转移样本。 - 使用目标网络
Q_{φ'}计算目标值:y = r + γ * max_{a'} Q_{φ'}(s', a')。 - 通过最小化当前网络
Q_φ的预测值与目标值y之间的均方误差,来更新参数φ。
- 从缓冲器
- 外部更新循环:每收集N步新数据后,更新目标网络参数
φ',通常将其设置为当前网络参数φ(即φ' ← φ)。

核心思想:在内部循环的k次更新中,目标网络 φ' 保持不变。这意味着我们是在对一个固定的目标进行监督回归,从而大大提高了学习的稳定性。参数 k 通常较小(1-4),而 N 较大(约10000),以确保目标不会变化得太频繁。

经典深度Q网络算法
基于上述通用框架,并设置 k = 1,我们可以得到经典的深度Q网络算法:

以下是DQN算法的具体步骤:
- 执行动作:根据当前策略(如基于
Q_φ的ε-greedy策略)选择动作a_t,执行并观察到转移(s_t, a_t, s_{t+1}, r_t),将其存入回放缓冲器D。 - 采样批次:从
D中均匀随机采样一个小批量的转移样本。 - 计算目标:对批次中的每个样本,使用目标网络计算目标值:
y_j = r_j + γ * max_{a'} Q_{φ'}(s'_j, a')。 - 梯度更新:通过梯度下降最小化损失函数
L(φ) = Σ_j (Q_φ(s_j, a_j) - y_j)^2,更新当前网络参数φ。 - 软更新目标网络(每隔C步):更新目标网络参数,
φ' ← τφ + (1-τ)φ'。其中τ是一个很小的值(如0.001)。

请注意,步骤5采用了软更新方式,这是对原始算法(硬更新 φ' ← φ)的一种改进,它让目标网络参数缓慢跟踪当前网络,进一步*滑了目标值的变化。

目标网络的更新策略

原始算法中周期性的硬更新(φ' ← φ)会导致目标网络的信息在不同时间点滞后程度不同,可能在某些时刻目标移动过快。

一种更*滑、更常用的方法是软更新,其公式为:
φ' ← τ * φ + (1 - τ) * φ'
其中 τ 是一个接*0的很小的数(例如0.001)。

直观理解:每一步,目标网络的参数 φ' 都会向当前网络参数 φ 靠*一小步(τ 部分),同时保留其大部分旧值(1-τ 部分)。这相当于对网络参数进行指数移动*均,能产生更稳定、变化更缓慢的目标值。


尽管对非线性神经网络的参数进行线性插值在理论上可能显得奇怪,但由于 φ' 始终与 φ 保持相似,且更新幅度极小,这种方法在实践中被证明非常有效且稳定。



总结


本节课中我们一起学习了构建稳定深度Q学习算法的关键组件——目标网络。

- 我们首先明确了移动目标问题是导致Q学习不稳定的核心原因。
- 接着,我们提出了结合经验回放和目标网络的通用框架,通过在内部循环中使用固定的目标网络进行监督式回归,来稳定训练过程。
- 然后,我们推导出了经典的DQN算法,它是该框架在
k=1时的特例。 - 最后,我们比较了目标网络的硬更新与软更新策略,并解释了软更新(指数移动*均)如何能提供更*滑、更稳定的学习目标。


通过引入目标网络,我们有效地“冻结”了短时间内的学习目标,使深度Q学习算法具备了在实际复杂环境中稳定收敛的能力。
课程 P32:Q学习算法的统一视角 🧠
在本节课中,我们将学习如何将之前讨论过的多种Q学习算法(如在线Q学习、深度Q网络DQN和拟合Q迭代)统一到一个通用的概念框架中。这个视角有助于我们理解这些看似不同的算法如何共享相同的核心结构,只是在不同“过程”的运行速度上做出了不同的选择。
概述:从不同算法到统一框架
上一节我们介绍了多种Q学习算法的具体实现。本节中我们来看看如何将这些算法统一到一个更一般的并行框架中。这个框架将数据收集、参数更新和目标网络更新视为三个可以不同速率运行的独立过程。
统一框架的核心:三个并行过程

以下是理解统一Q学习框架的核心。我们可以将整个算法分解为三个主要过程和一个共享的数据结构。
- 回放缓冲区:这是一个存储环境转换
(s, a, r, s')的数据结构。它通常是固定大小的,当满时,最旧的转换会被新的替换(环形缓冲区)。 - 过程一:数据收集
- 此过程负责与环境交互。
- 它使用最新的Q网络参数
φ来构建策略(例如ε-贪婪策略)。 - 它将收集到的每一步转换发送到回放缓冲区。
- 过程二:目标参数更新
- 此过程负责更新用于计算目标Q值的网络参数
φ'。 - 它通常运行得非常缓慢,例如定期将
φ复制到φ',或使用滑动*均:φ' ← τ φ' + (1-τ) φ。
- 此过程负责更新用于计算目标Q值的网络参数
- 过程三:主学习过程
- 此过程是算法的核心学习引擎。
- 它从回放缓冲区采样一个批次的转换。
- 它使用目标网络参数
φ'计算每个转换的目标值y = r + γ * max_a‘ Q_φ‘(s‘, a‘)。 - 它执行梯度下降步骤,更新当前网络参数
φ,以最小化(Q_φ(s, a) - y)^2。
这个框架的图形化表示如下,它涵盖了之前讨论的所有算法变体:

具体算法作为框架的特例
现在,让我们看看之前学过的具体算法如何成为这个通用框架的特例。关键在于三个过程(数据收集、目标更新、主学习)以何种速率运行。
在线Q学习(Watkins‘ Q-learning)
在线Q学习是这个框架的一个极端特例。
- 回放缓冲区大小:1(即每次收集新数据后立即覆盖旧数据)。
- 过程运行速率:过程一、过程二和过程三以完全相同的速率依次运行。
- 过程一收集一个转换
(s, a, r, s‘)。 - 过程二立即将
φ复制到φ‘(即目标值使用最新参数计算)。 - 过程三立即使用这个单一转换执行一次梯度更新。
- 过程一收集一个转换
深度Q网络(DQN)
DQN是更接*通用框架的典型实例。
- 回放缓冲区大小:很大(例如一百万次转换)。
- 过程运行速率:
- 过程一(数据收集)和过程三(主学习)通常以相*的速率交替运行(例如,收集一步数据,执行一次梯度更新)。
- 过程二(目标更新)运行得非常缓慢(例如,每10000次主学习更新才更新一次目标网络)。
- 由于缓冲区很大,过程一和过程三在很大程度上是解耦的,因为从缓冲区中采样到刚收集的数据的概率很低。

拟合Q迭代(Fitted Q-Iteration)
拟合Q迭代可以看作是强调“批量学习”的特例。
- 过程运行速率:
- 过程一首先运行一段时间,收集一个完整的数据集并存入缓冲区。
- 然后过程三运行很多次(甚至直到收敛),使用缓冲区中的所有(或大部分)数据反复更新
φ。 - 最后,过程二运行一次,将更新后的
φ复制到φ‘。 - 这个过程(收集数据 -> 内部循环更新 -> 更新目标)可能会重复多次。
为何采用不同速率:缓解非*稳性
这种将算法分解为不同速率过程的设计,核心目的是缓解非*稳性问题。
在强化学习中,我们试图学习的目标(最优Q值)本身依赖于我们正在学习的策略,这造成了非*稳性。在这个框架中:
- 如果过程二(目标更新)运行得比过程三(主学习)慢得多,那么对于过程三而言,目标网络
φ‘几乎是静止的,这将其面临的问题转化为一个更稳定的监督回归问题。 - 同样,大的回放缓冲区混合了不同策略下收集的数据,减少了过程三所看到数据分布的剧烈变化。
通过调整这些过程的运行速率,我们可以在探索(收集新数据)、利用(改进当前策略)和稳定性(保持目标固定)之间进行权衡。下图展示了这三个过程如何相互作用:

总结与回顾

本节课中我们一起学习了如何用统一的并行过程视角来理解多种Q学习算法。我们了解到,无论是简单的在线Q学习、实用的DQN,还是批处理的拟合Q迭代,都可以被视为同一个通用框架的特例。这个框架的核心是三个以不同速率运行的独立过程:数据收集、目标参数更新和主学习更新,它们共同围绕一个回放缓冲区工作。不同的算法本质上是对这三个过程的运行频率和缓冲区大小做出了不同的设计选择。理解这个统一视角有助于我们更深刻地把握Q学习家族算法的内在联系,并为设计和调整自己的强化学习算法提供了清晰的思路。
课程 P33:Q学习算法实践与改进 🚀
在本节课中,我们将探讨在实现Q学习算法时需要考虑的实际因素,以及一些能够提升算法性能的改进方法。我们将从评估Q值的准确性开始,分析常见问题,并学习如何通过双Q学习和多步回报等技术来解决这些问题。
Q值的准确性评估 🔍
上一节我们介绍了Q学习的基本概念。本节中,我们来看看如何评估Q值的准确性。
Q函数是对未来总奖励的预测。它预测从特定状态采取某个动作,并遵循策略后所能获得的总奖励。因此,评估这些预测是否准确、是否与实际运行策略时得到的结果相符,具有重要意义。
观察基本的学习曲线可以发现,随着训练迭代次数增加,每回合的*均奖励通常呈上升趋势。同时,Q函数预测的*均Q值也在增加。这符合直觉:策略变得更好,获得更高奖励,Q函数也应预测更高的Q值。
价值函数的直观理解
以下是价值函数在具体游戏中的表现示例,有助于我们理解其预测的合理性。
- 打砖块游戏:目标是使用底部的橙色拍子击打球,使其反弹并击碎上方的彩色砖块。击碎每个砖块得一分。
- 一个高级策略是让球从一侧反弹到顶部天花板,从而连续击碎大量砖块获得高分。
- 下图展示了在游戏不同时刻,最佳动作对应的Q值(即状态价值函数值)。
- 点1:即将击碎一个砖块,此时价值最高。
- 点2:击碎砖块后球弹回,价值下降,因为短期内不会得分。
- 点3:球即将反弹至顶部天花板,价值变得相当高。
- 点4:球刚从拍子弹起,尚未击碎任何砖块,但即将反弹至天花板获得大量分数,因此此时价值函数值达到最大。


动作Q值的相对比较
我们还可以比较同一状态下不同动作的Q值,以理解模型的决策依据。
- 乒乓球游戏:玩家控制右侧的绿色拍子击球,目标是使对手(橙色拍子)无法回球。
- 帧1:球距离较远时,向上、向下、静止三个动作的Q值大致相同。这是因为Q函数理解,即使此时不移动拍子,在后续时间步仍有充足机会调整位置接球。
- 帧2:球已非常接*,需要立即回击。此时“向上”动作的Q值变得非常大,而“向下”和“静止”的Q值则非常低(负值)。Q函数理解必须立即行动。
- 帧3:成功回球后,不同动作的Q值差异再次变小,因为当前时刻的具体动作对后续影响不大。


Q值过度估计问题 ⚠️
虽然相对Q值看起来合理,但在实践中,Q值的绝对值预测往往不准确,存在系统性过度估计问题。
问题现象
如果我们将Q函数预测的折扣奖励总和与实际运行策略获得的折扣奖励总和进行比较,会发现Q函数的预测值系统性偏高。
公式:折扣奖励总和 = r_t + γ * r_{t+1} + γ^2 * r_{t+2} + ...
比较对象:在状态 s_t 下,Q函数值 Q(s_t, a_t) 应*似等于从该状态动作开始的实际折扣奖励总和。
下图显示,Q函数估计值(红色实线)持续高于实际获得的折扣奖励总和(红色点线)。


问题根源:最大化操作
过度估计的根源在于Q学习目标值计算中的 max 操作。
标准Q学习目标公式:
y = r + γ * max_{a'} Q_{φ'}(s', a')
问题分析:
- 假设真实的Q函数为
Q*,我们学习的Q函数Q_φ是带有噪声的估计:Q_φ ≈ Q* + ε,其中噪声ε均值为零。 - 在计算目标值时,我们对所有动作取
max Q_φ(s', a')。这个最大化操作会系统性选择正向噪声。- 直观理解:假设两个动作的真实Q值相同,但估计各有正负噪声。只要有一个估计的噪声为正,
max就会选中它,导致目标值被高估。 - 数学上,随机变量最大值
E[max(X1, X2)]的期望值通常大于等于其期望值的最大值max(E[X1], E[X2])。
- 直观理解:假设两个动作的真实Q值相同,但估计各有正负噪声。只要有一个估计的噪声为正,
因此,即使Q函数的噪声是无偏的(均值为零),通过 max 操作构造的目标值也会产生正向偏差,导致Q值更新时被持续高估。
解决方案:双Q学习 🛡️
上一节我们分析了过度估计的根源。本节中,我们来看看如何通过双Q学习来缓解这个问题。
核心思想:解耦动作选择与价值评估
过度估计的关键在于,选择动作的函数和评估该动作价值的函数是同一个(有噪声的)Q网络 Q_{φ'}。这导致噪声被重复利用并放大。
双Q学习通过使用两个网络来解耦这两个过程:
- 策略网络 (φ_A):用于选择动作,即
a* = argmax_{a'} Q_{φ_A}(s', a')。 - 目标网络 (φ_B):用于评估上一步所选动作的价值,即
Q_{φ_B}(s', a*)。
双Q学习目标公式:
y = r + γ * Q_{φ_B}(s', argmax_{a'} Q_{φ_A}(s', a'))
如果两个网络的噪声是独立的,那么即使 φ_A 因正向噪声错误地选择了某个动作,φ_B 评估该动作时也不太可能给出同样高的正向噪声估值,从而系统能够自我纠正。
实际实现
在实践中,我们通常不维护两个完全独立的网络,而是利用Q学习中已有的当前网络 (φ) 和目标网络 (φ') 来实现双Q学习。
实现方式:
使用当前网络 φ 来选择动作,但使用目标网络 φ' 来评估该动作的价值。
代码描述(目标值计算):
# 标准Q学习
target = r + γ * max_{a'} Q_target(s', a') # 用目标网络选择并评估
# 双Q学习
best_action = argmax_{a'} Q_current(s', a') # 用当前网络选择动作
target = r + γ * Q_target(s', best_action) # 用目标网络评估该动作
虽然目标网络 φ' 会定期从当前网络 φ 更新,并非完全独立,但在实践中,这种方法能有效减轻大部分过度估计问题。
改进技巧:多步回报 ⏱️
除了双Q学习,我们还可以借鉴演员-评论员方法中的思路,使用多步回报来改进Q学习。
一步回报的局限性
标准Q学习使用一步回报:
y = r_t + γ * max_{a'} Q(s_{t+1}, a')
- 训练初期:Q函数很差,目标值中的
max Q项几乎只是噪声,学习信号主要来自即时奖励r_t,学习缓慢。 - 训练后期:Q函数较好,目标值由
max Q主导,学习效率高。
这与演员-评论员方法中“高偏差、低方差”的估计器类似。
引入N步回报
N步回报通过融合接下来N步的即时奖励和N步后的状态价值,来构造目标值。
N步回报目标公式:
y_t = Σ_{i=0}^{n-1} (γ^i * r_{t+i}) + γ^n * max_{a'} Q(s_{t+n}, a')
当 n=1 时,即为标准的一步Q学习。

优势:
- 更低偏差:即使Q函数初期不准确,由于
γ^n项衰减,其影响变小。学习信号更多来自真实奖励r的求和。 - 更快初期学习:奖励提供了更直接、更丰富的学习信号。
- 更高方差:奖励求和是基于单个样本的估计,方差比使用价值函数估计要高。
离策略挑战与应对
N步回报的一个主要挑战是它本质上是在策略的。它假设从 t 到 t+n-1 步的动作都是由当前要评估的策略生成的。然而,Q学习通常使用回放缓冲区中的旧数据(离策略数据),这会导致估计偏差。
应对方法:
- 动态截断:检查样本轨迹中的动作,找到最大的
n,使得这n步内的动作都与当前贪婪策略要执行的动作一致,然后使用这个n来计算N步回报。 - 重要性采样:为轨迹中的动作计算重要性权重,以校正不同策略间的差异。这种方法更复杂,但能处理更一般的离策略情况。
- 思考题:如何设计一个完全离策略的N步Q学习算法?这可能需要学习一个不仅依赖于状态和动作,还依赖于其他信息(如未来动作序列)的模型。
下图对比了一步回报与多步回报的差异。

总结 📝
本节课我们一起学习了Q学习算法在实际应用中的关键考量与改进技术。
- 评估Q值:我们首先认识到,虽然Q值的相对大小能合理反映策略优劣,但其绝对值存在系统性的过度估计问题。
- 诊断问题:过度估计的根源在于目标值计算中的
max操作,它会系统性选择Q函数估计中的正向噪声。 - 双Q学习:为了缓解过度估计,我们引入了双Q学习。其核心思想是解耦动作选择和价值评估两个步骤,通常使用当前网络选动作,目标网络估价值,从而打破噪声的关联性。
- 多步回报:为了加速初期学习并降低偏差,我们引入了N步回报。它通过结合多个即时奖励来构建目标值,但需要注意其在离策略数据上面临的挑战,并可以采用动态截断等方法来应对。


通过结合这些技术,我们可以构建出更稳定、更高效的深度Q学习智能体。
课程 P34:连续动作空间下的 Q 学习 🎯
在本节课中,我们将要学习如何将 Q 学习算法从离散动作空间扩展到连续动作空间。我们将探讨在连续动作空间中执行 argmax 操作所面临的挑战,并介绍几种解决此问题的有效方法。


连续动作空间的问题所在 🤔

上一节我们介绍了离散动作空间下的 Q 学习。本节中我们来看看当动作空间是连续时,算法会遇到什么核心问题。

问题在于选择动作时需要执行 argmax 操作。对于离散动作,这很直接:只需评估每个可能动作的 Q 值并选择最佳的一个。

# 离散动作的 argmax
best_action = argmax_a Q(s, a) for a in discrete_action_set

但当动作是连续的时,这个操作就变得困难得多。这主要出现在两个地方:
- 在评估
argmax策略时。 - 在计算目标值时,这需要
max操作(或在双 Q 学习中是另一个argmax)。


其中,目标值的 max 操作尤其成问题,因为它发生在训练的内部循环中,因此我们希望它非常快速和高效。

解决方案一:使用优化程序 🔍
既然连续动作的 argmax 本质上是一个优化问题,我们可以使用优化程序来解决。以下是几种可行的选择。

1. 梯度下降法
一种选择是使用梯度下降等连续优化程序。但这可能很慢,因为它需要多步计算,而这是在外部学习循环的内部发生的。

2. 随机优化法
我们的动作空间通常是低维的,这使问题变得相对简单。因此,一个非常好的选择是使用无导数的随机优化程序。


让我们具体讨论一下这个问题。

一个非常简单的解决方案是,将连续动作集上的最大值*似为在随机采样动作集上的离散最大值。

以下是具体步骤:
- 从有效的动作集中均匀随机采样 N 个动作。
- 计算这些动作的 Q 值。
- 取其中 Q 值最大的动作作为*似最优动作。

这种方法不会给出精确的最大值,但如果动作空间维度较低且采样足够多,*似效果可能相当好。它的优势在于非常简单和高效,因为可以像处理小批量数据一样同时评估所有采样动作。

然而,它的缺点是不准确,尤其是在动作空间维度增加时,随机采样无法给出非常准确的最大值。但如果过度估计是我们的主要问题,一个不那么精确的最大值或许是可以接受的。

3. 交叉熵方法 (CEM)
如果想要更精确的解决方案,可以使用基于相同原理但更好的算法,例如交叉熵方法。


交叉熵方法是一种简单的迭代随机优化方案。其直觉是:
- 首先像简单方案一样采样一组动作。
- 然后,不是简单地取最好的一个,而是根据表现好的动作来 refine(精炼)采样分布。
- 从 refined 后的分布(即更好的区域)采样更多样本。
- 重复此过程。

这也可以是一个非常快速的算法,特别是在可以并行化且动作空间维度较低的情况下。对于大约 40 维的动作空间,这些方法效果良好。

核心思想:在使用这些解决方案时,只需将 argmax 操作替换为这种优化过程来找到最佳动作,Q 学习过程的其余部分基本保持不变。


解决方案二:使用易于优化的函数类 📐

上一节我们介绍了通过优化程序求解 argmax。本节我们来看看另一种思路:设计本身易于执行 argmax 的 Q 函数。

我们可以使用一类具有闭式极值解的函数。任意神经网络相对于其输入并不容易优化,但其他函数类有闭式解。

这种函数类的一个例子是二次函数。例如,可以将 Q 函数表示为关于动作的二次函数:

Q(s, a) = -1/2 * (a - μ(s))^T P(s) (a - μ(s)) + V(s)
其中,μ(s) 是向量,P(s) 是正定矩阵,V(s) 是标量。


二次函数的最优解有闭式解。因此,可以构建一个输出三个量的神经网络:
- 一个标量
V_φ(s)。 - 一个向量
μ_φ(s)。 - 一个矩阵
P_φ(s)。

向量和矩阵共同定义了关于动作的二次函数。这样,Q 函数在状态上是完全非线性的,可以表示状态的任何函数,但对于给定状态,关于动作的 Q 值形状总是二次的。

当总是二次时,你总是可以找到最大值。在这种情况下,最大值就是 μ_φ(s)(只要 P_φ(s) 是正定矩阵)。这被称为 归一化优势函数 (Normalized Advantage Function, NAF)。

被称为“归一化”的原因是,如果你对它取指数,会得到一个归一化的概率分布。因此,argmax_a Q_φ(s, a) = μ_φ(s),而 max_a Q_φ(s, a) = V_φ(s)。
优势与代价:现在,我们使最大化操作变得非常容易,但代价是牺牲了 Q 函数的表示能力。如果真实的 Q 函数不是关于动作二次的,那么我们就无法精确表示它。


算法本身没有改变,它像 Q 学习一样高效,但失去了一些表示能力。
解决方案三:学习一个*似最大化器 🧠

本节我们将介绍最后一种方法:通过训练一个单独的神经网络来*似执行最大化操作,这与深度确定性策略梯度算法密切相关。

其核心思想是:既然 max_a Q_φ(s, a) 就是在 argmax 处评估的 Q_φ,那么我们可以训练另一个网络 μ_θ(s),使得 μ_θ(s) *似等于 argmax_a Q_φ(s, a)。

你也可以将 μ_θ(s) 视为一种策略,因为它观察状态并输出动作(特别是*似最优动作)。我们如何训练它?只需要求解 θ 以最大化 Q_φ(s, μ_θ(s))。

这可以通过梯度上升实现。梯度可以通过链式法则计算:
dQ_φ / dθ = (da / dθ) * (dQ_φ / da)
其中 a = μ_θ(s)。我们可以通过 Q 函数反向传播得到 dQ_φ / da,再通过 μ 网络反向传播得到 da / dθ。

现在,我们的目标值 y 将变为:
y = r_j + γ * Q_φ‘(s’_j, μ_θ‘(s’_j))
这里使用目标网络 Q_φ‘ 和 μ_θ‘ 来稳定训练。只要 μ_θ 是对 argmax 的良好估计,这就是一个有效的*似。

以下是该算法的基本步骤:

- 收集数据:执行动作
a_i,观察转移(s_i, a_i, s’_i, r_i)并存入经验回放缓冲区。 - 采样批次:从缓冲区中均匀随机采样一个小批量的转移
(s_j, a_j, s’_j, r_j)。 - 计算目标:使用目标网络计算目标值
y_j = r_j + γ * Q_φ‘(s’_j, μ_θ‘(s’_j))。 - 更新 Q 网络:通过最小化
Q_φ(s_j, a_j)与y_j之间的误差来更新φ。 - 更新策略网络:通过最大化
Q_φ(s_j, μ_θ(s_j))来更新θ(即沿Q值梯度上升)。 - 更新目标网络:使用软更新(如 Polyak *均)缓慢更新目标网络参数
φ‘和θ‘。 - 重复:重复步骤 1-6。

这就是一个适用于连续动作的 Q 学习算法的基本伪代码。这个特定算法通常被称为 深度确定性策略梯度。它还有许多更早(如 NFQ-CA)和更*的变体。


总结 📝

本节课中我们一起学习了如何将 Q 学习应用于连续动作空间。我们分析了核心挑战在于高效计算 argmax 操作,并介绍了三种主要解决方案:
- 使用优化程序:如随机采样或交叉熵方法,在运行时进行优化。
- 使用易于优化的函数类:如归一化优势函数,通过限制 Q 函数形式使
argmax有闭式解。 - 学习一个*似最大化器:如 DDPG 算法,训练一个独立的策略网络来*似最优动作。

每种方法都在计算效率、实现复杂度和表示能力之间有不同的权衡,可以根据具体问题选择合适的方法。
课程 P35:Q学习算法实践指南 🎯
在本节课中,我们将学习Q学习算法在实际应用中的关键技巧和注意事项,并通过一些经典论文案例来加深理解。Q学习是一种强大的强化学习方法,但其实现和调优比策略梯度方法更为精细,需要更多的细心和调试。
实用提示与调试策略 🛠️
上一节我们介绍了Q学习的基本概念,本节中我们来看看如何在实际中稳定地应用它。Q学习方法通常比策略梯度方法更精细,因此需要更多的小心谨慎来确保正确使用。
以下是确保算法稳定运行的关键步骤:
- 在简单问题上测试:首先在已知算法应该有效、简单可靠的问题上测试你的实现。这是为了确保实现本身没有错误。
- 分阶段调试:调试过程应分阶段进行。首先确保代码没有错误,然后再进行超参数调优,最后才在目标问题上运行。
- 注意性能差异:Q学习在不同问题上的表现差异极大。例如,在Atari游戏中,某些游戏(如Pong)奖励稳步上升,而另一些(如Breakout)则可能先上升后剧烈波动,还有一些(如Montezuma‘s Revenge)则非常不稳定。
- 使用大型回放缓冲区:较大的回放缓冲区(例如容量约一百万)可以显著提高算法的稳定性。当缓冲区足够大时,算法更接*于拟合Q迭代(Fitted Q-Iteration),这可能是稳定性改善的原因之一。
- 保持耐心:Q学习通常需要很长时间才能收敛。在很长一段时间内,其性能可能并不比随机策略好。一旦通过随机探索找到了好的状态转移,性能才可能快速提升。
- 安排探索率:在训练初期,Q函数质量很差,大部分工作依赖于随机探索。因此,可以从一个较大的探索率(epsilon)开始,并随着Q函数的改善而逐渐降低。将探索率按计划衰减通常很有帮助。
高级技巧:处理贝尔曼误差 📈
上一节我们讨论了基础的调试策略,本节中我们来看看如何处理训练中可能出现的数值问题,特别是与贝尔曼误差相关的问题。
贝尔曼误差的梯度可能非常大,这类似于最小二乘回归中的*方误差项。一个棘手的问题是,如果某个动作的价值非常差(例如-1,000,000),即使你并不关心这个动作的确切价值(只要知道它很差即可),*方误差目标也会产生巨大的梯度。
以下是处理此问题的两种方法:
- 梯度裁剪:直接限制梯度的大小,防止其过大。
- 使用Huber损失:Huber损失是*方损失和绝对值损失的一种插值。在远离最小值时,它像绝对值损失;在接*最小值时,它用二次函数*滑,以避免不可导的尖峰。其效果与梯度裁剪类似,但可能更容易实现。
Huber损失公式(*似):Lδ(a) = { 0.5*a² for |a|≤δ, δ*(|a|-0.5*δ) otherwise },其中 a 是误差。
其他改进策略与注意事项 ✅

除了处理梯度,还有一些其他策略可以显著提升Q学习的性能。
以下是实践中被证明有效的几种策略:

- 使用双Q学习:双Q学习在实践中帮助很大,实现简单且几乎没有缺点。它通过解耦动作选择和价值评估来减少过高估计偏差,在训练早期尤其有益。
- 谨慎使用N步回报:N步回报可以加速早期训练,但对于较大的N,它会系统性地偏差你的目标价值估计。
- 使用自适应优化器:像RMSProp这样的早期自适应优化规则有帮助,但不如最新的优化器(如Adam)有效。使用Adam通常是个好主意。
- 运行多个随机种子:由于随机种子可能导致结果有很大差异(有时很好,有时很糟),在调试和评估算法时,应运行多个不同的随机种子,以确保性能的稳定性和可复现性。


相关论文案例 📚
上一节我们介绍了一些改进技巧,本节中我们通过几篇经典论文来看看这些方法是如何被应用的。
以下是几篇在Q学习发展过程中具有代表性的论文:

- 《Learning from Real-World Images with Autoencoders and Fitted Q-Iteration》:这篇2012年的论文是早期将深度学习与值迭代方法结合的成果。它使用自编码器从原始图像中学习潜在空间表示,然后在该特征空间上使用Fitted Q-Iteration(使用Extra Trees作为函数逼*器)进行Q学习,成功控制了一辆微型卡丁车。
- 《Human-level control through deep reinforcement learning》:即著名的DQN论文。它使用卷积神经网络、经验回放缓冲区和目标网络,通过一步备份和梯度下降来玩Atari游戏。后续的改进(如双Q学习、Dueling Network)可以大幅提升其性能。
- 《Continuous control with deep reinforcement learning》:这篇论文将深度Q学习应用于连续动作空间。它使用了最大化网络(或NAF网络结构)来简化连续动作的最大化操作,并采用了经验回放和目标网络。
- 《Robotic Manipulation with Deep Reinforcement Learning》:这篇论文将深度Q学习用于真实世界的机器人控制(如开门)。它利用了并行学习的思想,使用多个机器人同时收集数据,并采用NAF表示法、经验回放和目标网络来提高数据效率。
如果你想深入了解Q学习,可以查阅以下经典文献:Watkins (1989) 的Q学习奠基论文、Neural Fitted Q-Iteration (NFQ) 论文、DQN论文、双Q学习论文、NAF论文以及Dueling Network架构论文。
总结 🎓

本节课中我们一起学习了Q学习算法的实践要点。我们讨论了如何使用经验回放缓冲区和目标网络来稳定Q学习训练,从三个并行过程(数据收集、目标计算、网络回归)的角度理解了拟合Q迭代的通用框架。我们还介绍了双Q学习、多步Q学习等改进技巧,以及处理连续动作空间的几种方法(随机采样、解析优化、使用第二个“演员”网络)。掌握这些技巧对于成功实现和应用Q学习算法至关重要。
课程 P36:高级策略梯度算法 🧠

在本节课中,我们将学习高级策略梯度算法。我们将把之前讨论的策略评分思想与*期学到的策略迭代概念相结合,从而为策略梯度方法提供一个新视角,并分析其有效的原因。本节课内容较为深入,如果遇到困难,请耐心阅读。
回顾:策略梯度基础

上一节我们介绍了强化学习的基本算法。本节中,我们先简要回顾策略梯度的核心思想。

策略梯度的基本流程如下:
- 从当前的策略(记为 π)中采样若干条轨迹。
- 对于每条轨迹中的每个时间步,计算从该时刻起未来累积奖励的估计值(即“优势”或“奖励到去”)。
- 计算策略梯度:
梯度 ≈ (∇ log π(a|s)) * (优势估计值)。 - 沿梯度方向更新策略参数,以最大化期望回报。
在演员-评论家算法中,优势估计值可以通过蒙特卡洛方法直接计算,也可以通过学习的价值函数来更精确地估计。
策略梯度算法遵循一个通用模式:采样(橙色框)、拟合优势估计(绿色框)、执行梯度上升更新策略(蓝色框)。其中,优势估计值 q_hat 的计算方式有多种选择。
策略梯度为何有效?🤔
上一节我们回顾了策略梯度的操作步骤。本节中我们来看看其背后的原理:为什么策略梯度算法能有效改进策略?
一个直观的回答是:因为我们在计算梯度并执行梯度下降(或上升)。然而,通过更深入的分析,我们可以将策略梯度视为一种“软化”的策略迭代。

我们可以从概念上将策略梯度视为两个步骤的循环:
- 估计当前策略 π 下各状态-动作对的*似优势
A_hat。 - 利用这个优势估计
A_hat来改进策略,得到新策略 π‘。
这种视角与上周学习的策略迭代算法非常相似。策略迭代也交替进行两步:评估当前策略的价值(或优势),然后基于此改进策略(例如,采用贪心策略选择最优动作)。
两者的关键区别在于策略改进的方式:
- 策略迭代:采用“硬”更新,直接为估计优势最大的动作分配概率1(
argmax操作)。 - 策略梯度:采用“软”更新,通过梯度调整策略参数,使高优势动作的概率增加,低优势动作的概率减小,但不会立刻跳变到0或1。
当优势估计不完美时,这种温和的更新方式可能更理想:它允许我们沿估计的优势方向小幅调整策略,收集更多数据后,再改进优势估计器本身。
策略梯度作为策略迭代的数学表述 📐
上一节我们建立了策略梯度与策略迭代的直观联系。本节中,我们将通过数学推导来形式化这一观点。
我们想要证明一个核心观点:通过最大化旧策略 πθ 在新策略 πθ‘ 下的期望优势,我们实际上是在优化新策略的强化学习目标 J(θ‘)。
具体而言,我们希望证明以下等式成立:
J(θ‘) - J(θ) = E_τ~πθ‘ [ Σ γ^t * A_πθ(s_t, a_t) ]
其中:
J(θ)表示策略参数为 θ 时的期望折扣总回报。A_πθ(s, a)是旧策略 πθ 下的优势函数。- 右边的期望是在新策略 πθ‘ 产生的轨迹分布下计算的。
这个等式的重要性在于:它表明,如果我们能找到一个新策略 πθ‘,使其在自身产生的状态分布下,旧策略的优势期望最大,那么这个新策略就能带来最大的性能提升 J(θ‘) - J(θ)。这正是策略迭代的思想精髓。
以下是证明思路的概述:
- 从
J(θ‘)的定义出发,将其表示为初始状态价值函数的期望。 - 巧妙地将初始状态价值
V(s0)重写为两个无穷级数之差,从而引入时间步概念。 - 通过代数重组,将表达式转化为关于时间步 t 的求和,其内部项逐渐呈现出
γ^t * [r_t + γV(s_{t+1}) - V(s_t)]的形式。 - 识别出括号内的项正是优势函数
A_πθ(s_t, a_t)的定义。 - 最终得到期望形式的表达式,完成证明。
此证明确立了策略迭代的理论正确性:通过基于旧策略的优势评估来改进策略,是优化长期回报的有效途径。
从策略迭代到策略梯度 🔄
上一节我们证明了策略迭代的理论基础。本节中,我们来看如何将其与策略梯度联系起来。
我们已经得到目标:
最大化 E_(s~πθ‘, a~πθ‘) [ A_πθ(s, a) ] 等价于 最大化 J(θ‘)。
为了将其转化为可优化的目标,我们需要处理期望中的状态分布 s ~ πθ‘。因为我们尚未确定 θ‘,无法直接从 πθ‘ 中采样状态。

一个自然的想法是使用重要性采样,将动作的分布从 πθ‘ 转换回我们已知的 πθ:
E_(s~πθ‘, a~πθ‘)[...] = E_(s~πθ‘)[ E_(a~πθ‘)[...] ] = E_(s~πθ‘)[ E_(a~πθ)[ (πθ‘(a|s)/πθ(a|s)) * A_πθ(s, a) ] ]

现在,动作期望可以基于旧策略 πθ 计算了,但状态期望 s ~ πθ‘ 仍然依赖于未知的新策略。
如果我们能*似地认为,当策略变化不大时,新旧策略产生的状态分布也相似,即 p_θ‘(s) ≈ p_θ(s),那么我们就可以用旧策略的状态分布 s ~ πθ 来替代。此时,我们的优化目标变为:
最大化 E_(s~πθ, a~πθ)[ (πθ‘(a|s)/πθ(a|s)) * A_πθ(s, a) ]
对这个目标关于 θ‘ 求梯度(然后在 θ‘ = θ 处取值),就能恢复出经典的策略梯度更新公式。这表明,在策略变化不大的假设下,策略梯度可以看作是实现策略迭代目标的一种*似且实用的方法。

总结
本节课中我们一起学习了高级策略梯度算法的原理。
- 我们首先回顾了策略梯度的基本流程。
- 然后我们探讨了策略梯度有效的深层原因,并将其与策略迭代算法进行类比,指出策略梯度是一种“软化”的策略迭代。
- 通过数学推导,我们证明了策略迭代的核心原理:最大化旧策略在新策略下的期望优势,能直接优化整体性能目标。
- 最后,我们展示了在“策略变化不大”的假设下,如何从策略迭代的目标推导出策略梯度的形式,从而在理论上将两者统一起来。

这种分析方法不仅加深了我们对策略梯度的理解,也为设计更稳定、更高效的强化学习算法(如*端策略优化PPO)提供了理论基础。




课程 P37:CS 285 第九讲,第二部分 - 策略改进的*似边界 🔬





在本节课中,我们将学习如何通过数学推导,证明在特定条件下,一个易于处理的目标函数可以很好地*似真实的强化学习目标。核心在于理解当新旧策略足够接*时,我们可以忽略状态分布的变化,从而得到一个有理论保证的策略改进方法。










上一节我们讨论了策略梯度方法的基础。本节中,我们来看看如何为策略改进建立一个可靠的*似边界。



我们探讨在何种情况下,可以使用策略 \(\pi_{\theta}\) 下的状态分布 \(p_{\theta}(s_t)\) 来*似新策略 \(\pi_{\theta‘}\) 下的分布 \(p_{\theta’}(s_t)\),并仍然得到一个能准确*似新策略回报的合理目标。





具体做法是忽略分布不匹配的问题。我们使用 \(p_{\theta}(s_t)\) 而非 \(p_{\theta‘}(s_t)\),使得在整个方程中,\(\theta’\) 的唯一依赖只出现在重要性权重上。



从之前的策略梯度讲座中我们知道,如果对等式右侧的表达式求导,我们恰好能得到策略梯度。我们希望这个性质成立,以便 \(J(\theta‘) - J(\theta)\) 能被一个带横杠的*似量 \(\bar{J}\) 很好地*似。这样,我们只需最大化 \(\bar{J}\) 就能得到更好的新策略。






我们试图证明的是:当 \(\pi_{\theta}\) 接* \(\pi_{\theta‘}\) 时,\(p_{\theta}(s_t)\) 接* \(p_{\theta’}(s_t)\)。当这种情况发生时,右侧*似左侧,意味着它们之间的差异可以被一个量所限制。这个量在 \(\pi_{\theta}\) 和 \(\pi_{\theta‘}\) 差异很小时也很小。











确定性策略的情况 🎯





首先,我们从简单情况开始分析,假设 \(\pi_{\theta}\) 是一个确定性策略。这意味着我们可以将其表示为 \(a_t = \pi_{\theta}(s_t)\)。我们稍后会将其推广到随机策略。确定性策略的推导提供了一些直觉,使得随机情况更容易理解。





在这种情况下,我们试图证明:如果 \(\pi_{\theta‘}\) 接* \(\pi_{\theta}\),那么 \(\theta’\) 和 \(\theta\) 的状态边缘分布也将接*。现在 \(\pi_{\theta‘}\) 不一定是确定性的。我们定义“接*”的方式是:\(\pi_{\theta’}\) 分配给任何不是 \(\pi_{\theta}\) 所分配的动作的概率小于或等于 \(\epsilon\)。本质上,\(\pi_{\theta‘}\) 做出不同决策的概率是有限的。





以下是基于此假设的推导步骤:
- 时间步 \(t\) 处 \(\theta‘\) 的边缘状态分布可以写为两项之和。
- 第一项描述了从初始时间步开始,新策略 \(\pi_{\theta’}\) 在所有步骤中都与 \(\pi_{\theta}\) 做相同事情的情况。
- 由于每一步都做相同事情的概率是 \((1-\epsilon)\),这个项前面有一个乘数 \((1-\epsilon)^t\),并且其状态分布等于 \(p_{\theta}(s_t)\)。
- 第二项包含了所有其他情况(即至少犯了一次错误),其概率为 \(1 - (1-\epsilon)^t\),对应某个我们一无所知的其他状态分布 \(p_{\text{error}}\)。





这个方程与我们之前在分析行为克隆时遇到的方程完全相同。它暗示了 \(p_{\theta‘}(s_t)\) 与 \(p_{\theta}(s_t)\) 之间的总变分距离(Total Variation Distance)主要由第二部分贡献。





因此,状态边缘分布的总变分距离满足以下不等式:
利用不等式 \((1-\epsilon)^t \geq 1 - \epsilon t\)(对于 \(\epsilon \in [0,1]\)),我们可以得到一个更简洁的界限:
这个界限表明,随着 \(\epsilon\) 减小(即策略越接*),状态分布也越相似。










上一节我们分析了确定性策略的情况。本节中,我们将其推广到更一般的随机策略。





随机策略的一般情况 🎲





这个证明遵循信任区域策略优化(Trust Region Policy Optimization, TRPO)论文中的方法。这里,我们说 \(\pi_{\theta‘}\) 接* \(\pi_{\theta}\),如果对于所有状态 \(s\),它们的总变分距离被 \(\epsilon\) 所限制。实际上,我们甚至可以使用一个期望上的界限,但逐点的界限更容易解释。





分析中需要使用一个有用的引理(来自TRPO论文):
如果两个分布 \(p(x)\) 和 \(q(x)\) 的总变分距离 \(TV(p, q) = \epsilon\),那么存在一个联合分布 \(p(x, y)\),其边缘分布 \(p(x)\) 和 \(p(y)\) 就是原始的 \(p\) 和 \(q\),并且满足 \(P(x = y) = 1 - \epsilon\)。





这个引理的直观理解是:如果两个分布的总变分距离是 \(\epsilon\),那么它们“不一致”的概率最多就是 \(\epsilon\)。这允许我们将确定性策略情况下的结果推广到随机策略。





因此,即使 \(\pi_{\theta}\) 是随机的,只要 \(\pi_{\theta‘}\) 和 \(\pi_{\theta}\) 的总变分距离被 \(\epsilon\) 限制,我们同样可以写出状态分布的界限:









目标函数期望值的界限 📊





我们最终关心的是目标函数本身。我们想要将用优势函数表达的两个目标联系起来。为此,我们推导一个关于在两个不同分布下函数期望值的界限。





设 \(f(s_t)\) 是一个关于状态的函数(在我们的案例中,它是一个涉及优势函数和重要性权重的复杂表达式)。我们可以将其在两个分布下的期望值联系起来。




以下是推导的核心不等式:
这个不等式的推导方法是:将 \(p_{\theta‘}\) 写成 \(p_{\theta} + (p_{\theta’} - p_{\theta})\),然后利用总变分距离的定义进行放缩。理解这个推导对掌握后续内容很重要。





将我们对总变分距离的界限 \(TV(p_{\theta‘}, p_{\theta}) \leq 2 \epsilon t\) 代入,我们得到:
其中 \(C = \max_{s_t} |f(s_t)|\) 是一个常数。





在我们的具体问题中,\(f(s_t)\) 是重要性采样估计器对优势函数的期望。优势函数 \(A^{\pi}(s_t, a_t)\) 是未来累积奖励的期望,其最大值与时间步长 \(T\)(或折扣因子下的有效步长 \(1/(1-\gamma)\))乘以最大单步奖励 \(R_{\text{max}}\) 同阶。因此,常数 \(C\) 的量级是 \(O(T \cdot R_{\text{max}})\) 或 \(O(R_{\text{max}}/(1-\gamma))\)。









结论与算法启示 💡





综上所述,我们证明了以下结论:
最大化这个可处理的目标函数 \(\bar{J}(\theta‘)\):
是最大化真实强化学习目标 \(J(\theta‘)\) 的一个好方法,前提是新策略 \(\pi_{\theta’}\) 在总变分距离上足够接*旧策略 \(\pi_{\theta}\)。






这个推导直接启示了我们应该使用哪种强化学习算法:在每一步更新中,我们必须约束新策略不要偏离旧策略太远。这样,通过梯度上升最大化 \(\bar{J}(\theta‘)\)(其梯度恰好是策略梯度),我们就能保证真实目标 \(J(\theta’)\) 得到改进。





这为诸如信任区域策略优化(TRPO)和*端策略优化(PPO)等算法提供了核心的理论基础。这些算法通过不同的方式(如KL散度约束或裁剪目标函数)来实施“策略不要变化太大”这一约束,从而实现稳定、单调的策略改进。








本节课中我们一起学习了如何为策略改进建立*似的理论边界。我们首先在确定性策略的设定下进行了推导,然后利用一个关键的联合分布引理将其推广到一般的随机策略。最后,我们得到了一个关键的不等式,表明只要新旧策略足够接*,一个易于优化的替代目标就能保证提升真实的策略性能。这为现代策略梯度算法中的核心约束提供了坚实的数学依据。

CS 285 课程笔记:第9讲,第3部分 - 带约束的策略梯度实现 🚀
在本节课中,我们将学习如何实际实现一个带有约束的策略梯度算法。我们将从理论推导转向具体实践,探讨如何将策略更新的约束条件(特别是KL散度)整合到优化过程中,从而构建出稳定且高效的强化学习算法。



从理论到实践:约束的实例化

上一节我们介绍了策略性能改进的理论保证,其核心在于约束新旧策略的分布差异。为了实例化该算法,我们有一个关键前提:当策略 π_θ 接* π_θ' 时,状态分布 p_θ(s_t) 也接* p_θ'(s_t)。


这里的“接*”最初被定义为总变分距离。然而,对于许多策略类别,直接强制总变分距离约束在实践中相当困难。

因此,我们需要一个更便于处理的边界。



引入KL散度作为约束 🔗

我们可以推导出一个更便捷的边界。利用总变分距离与KL散度相关的不等式,我们可以用KL散度来约束总变分距离。


这意味着,如果我们能限制策略 π_θ' 和 π_θ 之间的KL散度,那么根据该不等式,我们也就限制了状态边缘分布的差异。


对于不熟悉KL散度的同学,它是衡量两个概率分布差异最广泛使用的度量之一。它非常方便,因为其表达式通常可以表示为对数概率的期望值。

KL散度的公式如下:
KL(π_θ' || π_θ) = E_{a~π_θ'} [ log π_θ'(a|s) - log π_θ(a|s) ]
许多连续值分布的KL散度甚至有封闭形式的解,这使得它在实际应用中非常方便。


一种理解为何KL散度比总变分距离更易管理的方法是:总变分距离涉及绝对值,通常不可微;而只要两个分布的支持集相同,KL散度就是可微的。KL散度具备的这些优良性质,使其在实际强化学习算法中更容易*似和使用。

因此,在实际构建带约束的策略梯度方法时,我们将约束表达为KL散度,而非总变分距离。由于KL散度能限制总变分距离,这样做是合理的,并且保留了理论保证。



构建优化问题 🎯

于是,我们要优化的目标函数是通常的重要性采样目标,同时附加一个约束:π_θ' 和 π_θ 之间的KL散度不超过一个阈值 ε。


优化目标可以形式化为:
最大化:J(θ') = E [ (π_θ'(a|s) / π_θ(a|s)) * A^π_θ(s, a) ]
约束条件:KL(π_θ' || π_θ) ≤ ε
如果 ε 足够小,这将确保 J(θ') - J(θ) 得到改进,因为误差项被限制住了。

那么,我们如何强制执行这个约束呢?



实施约束:拉格朗日对偶法 ⚙️

有多种方法可以实施这个约束。一个非常直接的方法是写出这个约束优化问题的拉格朗日函数。


对于那些不熟悉拉格朗日乘子法的同学,其基本思想是:对于一个约束优化问题,我们可以将约束(左边减去右边)乘以一个拉格朗日乘数(这里称为 λ),并将其加入原始目标函数,从而形成一个无约束的拉格朗日函数。

拉格朗日函数 L 可以写为:
L(θ', λ) = J(θ') - λ * ( KL(π_θ' || π_θ) - ε )


解决此类约束优化问题的一种方法是对偶梯度下降。其步骤如下:

以下是具体步骤:
- 固定 λ,优化 θ':以策略参数
θ'为变量,最大化拉格朗日函数L。 - 固定 θ',更新 λ:对偶变量
λ执行梯度下降(或上升)步。直觉是,如果KL散度约束被违反(即KL > ε),则增大λ以加强惩罚;如果约束满足得很好(即KL < ε),则减小λ。


这个过程会交替进行,渐进地找到正确的拉格朗日乘数 λ,从而解决约束优化问题。我们将在后续课程中更详细地讨论对偶梯度下降。

这是一种理论上有原则的解决方案。你也可以想象一种更直观的解决方案:手动选择一个 λ 值,将KL散度项视为一种正则化。这在直觉上也很有道理,你基本上是在惩罚新策略偏离旧策略太多。

在实际操作中,我们可能不会完全执行最大化过程直到收敛,因为这可能非常耗时或不切实际。通常只进行几个梯度步。



算法概览与总结 📝


综上所述,这是一个完成策略优化并施加约束的算法框架:


以下是算法核心步骤:
- 计算目标函数
J(θ')的梯度,其形式与重要性采样策略梯度相似。 - 计算新旧策略之间的KL散度及其梯度。
- 利用上述梯度和拉格朗日乘数
λ,更新策略参数θ'。 - 根据KL散度约束的满足情况,更新对偶变量
λ。

这会得到一个真正执行约束的强化学习算法。实际上,许多现代算法都使用了这个想法的变体,包括原始引导策略搜索方法和*端策略优化。



本节课中,我们一起学习了如何将带约束的策略改进理论转化为可实现的算法。关键步骤包括:用更易处理的KL散度替代总变分距离作为约束,并通过拉格朗日对偶法将约束优化问题转化为可交替优化的无约束问题。这为构建稳定、高效的高级策略梯度算法(如PPO)奠定了坚实的基础。

课程 P39:CS 285 第九讲,第四部分 - 自然梯度与约束优化 🧠
在本节课中,我们将学习另一种施加策略约束的方法。这种方法虽然是一种*似,但它引出了一个非常简洁的算法框架——自然梯度。我们将从回顾约束优化问题开始,逐步推导出自然梯度的形式,并解释它为何比常规策略梯度更稳定。
概述:从约束优化到*似解法
在上一节中,我们讨论了如何通过约束新旧策略之间的KL散度来保证策略性能的单调改进,并使用了拉格朗日乘子法等优化技巧。本节我们将探讨一种更*似的方法,它通过一系列*似步骤,最终得到一个极其简单的算法,其核心步骤与标准策略梯度非常相似。
线性*似与信任区域
首先,我们回顾优化问题的核心思想。当我们计算某个目标函数的梯度并进行梯度上升时,这可以理解为在优化该目标函数的一阶泰勒展开。对于一个复杂的非线性函数(如图中的蓝色曲线),我们可以用一个简单的线性函数(绿色直线)来*似它。

然而,如果不施加任何约束,这个线性*似会延伸到正负无穷,优化它将没有意义。因此,我们必须定义一个“信任区域”(如图中的红色方框),在这个区域内,我们相信线性*似能够较好地代表原函数。我们的优化就限制在这个信任区域内进行。

对于我们的策略优化问题,我们可以将目标函数替换为其在旧策略参数 θ 处的一阶泰勒展开:
目标 ≈ ∇θ J(θ)ᵀ (θ' - θ)
同时,我们保留KL散度约束。这使得目标函数在优化变量 θ‘ 上是线性的,但约束仍然复杂。
常规梯度下降的局限性

接下来,我们看看如果直接使用梯度下降法优化这个线性目标会怎样。梯度下降的更新规则是:
θ' = θ + α ∇θ J(θ)
这实际上是在解决另一个约束优化问题:最大化线性目标,但约束是参数空间中的欧几里得距离 ||θ' - θ||² ≤ ε。
问题在于:参数空间中的微小变化,对策略分布的影响可能天差地别。某些参数(如高斯策略中的方差σ)的微小变动会导致概率分布的剧烈变化。因此,在参数空间中施加“球形”约束(欧几里得距离),并不能保证在分布空间中满足我们想要的“接*”约束(KL散度小)。从几何上看,我们需要的信任区域在参数空间应该是一个“椭圆”,在敏感方向(导致分布变化大的方向)约束更紧,在不敏感方向约束更松。
引入自然梯度
为了得到正确的椭圆形状信任区域,我们需要对KL散度约束本身进行*似。由于KL散度在 θ‘ = θ 处的一阶导数为零,我们使用其二阶泰勒展开。这个二阶展开是一个二次型:
KL(πθ‘ || πθ) ≈ 1/2 (θ‘ - θ)ᵀ F (θ‘ - θ)
其中矩阵 F 是费舍尔信息矩阵(Fisher Information Matrix),其定义为:
F = 𝔼_{s∼πθ, a∼πθ} [∇ log πθ(a|s) ∇ log πθ(a|s)ᵀ]
费舍尔信息矩阵的一个优点是,它可以通过从当前策略 πθ 中采样的样本来估计。

现在,我们的优化问题变为:
最大化:∇θ J(θ)ᵀ (θ‘ - θ)
约束:1/2 (θ‘ - θ)ᵀ F (θ‘ - θ) ≤ ε
通过构造拉格朗日函数并求解,我们可以得到这个问题的闭式解:
θ‘ = θ + α F⁻¹ ∇θ J(θ)
其中步长 α 可以根据 ε 计算得出,以确保严格满足约束。这个更新方向 F⁻¹ ∇θ J(θ) 就被称为自然梯度。

为何自然梯度更优:一个直观例子
考虑一个简单的一维状态和动作问题,策略是高斯分布:a ∼ N(k·s, σ²),参数是 θ = [k, σ]。回报函数是 R = -s² - a²。
在这个问题中,常规策略梯度极不稳定。当方差 σ 很小时,关于 σ 的梯度分量会变得异常巨大,导致优化过程主要忙于调整 σ,而难以找到最优的均值参数 k = -1。这是因为参数空间中的欧几里得距离没有考虑不同参数对分布影响的差异。



自然梯度通过乘以费舍尔信息矩阵的逆 F⁻¹ 来纠正这一点。F⁻¹ 的作用相当于对梯度进行重新缩放,在敏感方向(如 σ)上减小步长,在不敏感方向(如 k)上增大步长,从而引导优化朝着正确的方向稳定前进。
实践注意事项与算法

以下是自然策略梯度在实际应用中的关键点:

- 经典自然梯度算法:首先使用样本估计费舍尔信息矩阵 F,然后计算自然梯度方向
F⁻¹ ∇θ J(θ),并手动选择一个步长 α。 - 高效计算:直接计算和求逆 F 矩阵(参数多时维度很高)计算量很大。一个高效的技巧是使用共轭梯度法来求解线性方程组
F x = ∇θ J(θ),从而得到x = F⁻¹ ∇θ J(θ),同时还能自动确定满足特定 ε 的步长 α。这在TRPO(Trust Region Policy Optimization)论文中有详细描述。 - 替代方案:也可以不显式计算自然梯度,而是直接优化带有KL散度惩罚项的重要性采样目标,并通过启发式方法调整惩罚系数。这种方法更简单,即PPO(Proximal Policy Optimization)系列算法的思想。

总结
本节课我们一起学习了策略优化中约束方法的另一种视角。我们了解到:

- 常规策略梯度可以看作是在参数空间施加欧几里得距离约束的优化过程。
- 这种约束不能保证策略分布在概率空间中的接*度,可能导致训练不稳定。
- 自然梯度方法通过使用费舍尔信息矩阵对KL散度约束进行二阶*似,将信任区域修正为参数空间中的椭圆形状。
- 自然梯度的更新方向为
θ‘ = θ + α F⁻¹ ∇θ J(θ),它更合理地考虑了参数变化对策略分布的影响,从而提供了更稳定、更有效的优化方向。 - 在实践中,可以通过共轭梯度法等技巧高效实现自然梯度更新,也可以采用更简单的带惩罚项的优化目标作为*似。

通过本节的学习,我们掌握了从约束优化理论推导出实用算法(自然梯度)的完整思路,这是理解现代深度强化学习算法(如TRPO)的重要基础。
课程 P4:模仿学习(第一部分)📚
在本节课中,我们将学习模仿学习的基础知识。模仿学习是一种通过观察专家(例如人类)的行为来训练智能体(Agent)执行任务的方法。我们将从定义核心概念和术语开始,然后探讨一种最简单的方法——行为克隆,并分析其优缺点。
术语与符号 📝
上一节我们介绍了课程的主题,本节中我们来看看模仿学习中使用的基本术语和符号。
我们使用 策略(Policy) 来表示智能体的行为。策略是一个从观察(Observation) 到动作(Action) 的映射。这与监督学习中的分类器类似:分类器从输入 x 映射到输出标签 y,而策略从观察 o 映射到动作 a。
我们用字母 π 表示策略,用下标 θ 表示其参数(例如神经网络的权重),记作 π_θ。
在序列决策问题中,时间是一个重要因素。我们用下标 t 表示时间步。因此,在时间 t 的观察记作 o_t,动作记作 a_t。
策略的输出通常是一个分布。这意味着对于给定的观察,策略为所有可能的动作分配一个概率。一个确定性策略是随机策略的一个特例,它为某个动作分配概率1,为其他动作分配概率0。将策略表示为分布通常更方便训练。
我们还需要区分状态(State) 和观察(Observation)。
- 状态 s_t:是对世界完整、简洁的描述,包含了预测未来所需的所有信息。
- 观察 o_t:是智能体实际感知到的信息(例如相机像素),可能只是状态的一部分。
状态满足马尔可夫性质(Markov Property):给定当前状态 s_t,未来状态 s_{t+1} 与过去状态 s_{t-1} 条件独立。这意味着当前状态已包含预测未来的全部必要信息。
状态转移由动态模型(Dynamics) 或转移概率描述,公式为:
P(s_{t+1} | s_t, a_t)
它表示在状态 s_t 下采取动作 a_t 后,转移到状态 s_{t+1} 的概率。
行为克隆:基础方法 🚗
在理解了基本概念后,我们来看一种最直接的模仿学习方法——行为克隆。
行为克隆的核心思想是使用监督学习来克隆专家的行为。我们收集专家在任务中产生的观察-动作对 (o_t, a_t) 数据,然后像训练分类器或回归模型一样,训练一个策略网络来拟合这些数据。
以下是行为克隆的基本步骤:
- 数据收集:记录专家(如人类驾驶员)执行任务时的观察(如相机图像)和对应的动作(如方向盘角度)。
- 构建数据集:将每个时间步的
(o_t, a_t)视为一个独立的训练样本。 - 监督学习:训练一个模型(如神经网络)
π_θ,其目标是给定输入o_t时,输出与专家动作a_t尽可能接*的动作。
一个著名的早期例子是1989年的ALVINN系统,它使用神经网络和人类驾驶数据来实现车道跟随。
行为克隆的问题与挑战 ⚠️
上一节我们介绍了行为克隆如何工作,本节中我们来看看这种方法存在的主要问题。
从理论上讲,行为克隆并不保证能学到一个鲁棒的策略。核心问题在于它违反了监督学习的一个基本假设:独立同分布(i.i.d) 假设。
在标准监督学习中,每个数据点是独立的,模型的预测错误不会影响下一个输入。但在序列决策中,策略在时间 t 犯的一个小错误,会导致智能体在时间 t+1 进入一个未曾见过的新状态。在这个陌生状态下,策略更容易犯更大的错误,从而陷入错误不断累积、状态越来越偏离专家轨迹的恶性循环。这种现象被称为分布漂移(Distributional Shift) 或协变量漂移(Covariate Shift)。
实践中的改进与解决方案 🛠️
尽管存在理论缺陷,但通过一些技巧,行为克隆在实践中可以表现得相当好。例如,NVIDIA的一项自动驾驶研究表明,使用海量数据(3万英里驾驶记录)和精心设计的数据增强方法,可以训练出有效的策略。
以下是几种改进行为克隆或解决其问题的方法:

1. 精心设计的数据收集与增强
通过增加训练数据的多样性和覆盖范围,可以让策略在面对陌生状态时更有鲁棒性。例如,NVIDIA的工作不仅使用前向摄像头图像,还使用了左、右摄像头的图像,并人为地为其生成“纠正性”的动作标签(如左摄像头图像对应向右转的动作),这相当于合成了错误恢复的样本。

2. 使用更强大的模型
减少策略的初始错误率是缓解错误累积的关键。使用容量更大、表达能力更强的模型(如更深的神经网络)可以帮助减少在已知状态下的错误。

3. 算法改进:DAgger
一种更根本的解决方案是改变学习过程本身。DAgger(Dataset Aggregation) 算法通过迭代地运行当前策略,请专家对策略访问到的状态进行标注,并将新数据加入训练集,从而让策略直接学习在自身分布下的正确行为。这能有效解决分布漂移问题。
4. 多任务学习
有时,让策略同时学习多个相关任务,可以提高其泛化能力和鲁棒性,从而间接改善模仿学习的效果。
总结 📖
本节课中我们一起学习了模仿学习的第一部分内容。
我们首先定义了策略、观察、动作、状态等核心概念,并理解了状态与观察的区别以及马尔可夫性质。接着,我们介绍了最基础的模仿学习方法——行为克隆,它本质上是一种将序列决策问题转化为监督学习的技术。然而,由于违反了i.i.d假设,行为克隆会面临错误累积和分布漂移的挑战。最后,我们探讨了在实践中使行为克隆更有效的一些技巧,例如数据增强,并提到了更高级的算法如DAgger作为更原则性的解决方案。

在接下来的课程中,我们将深入探讨DAgger等更先进的模仿学习算法。
📘 课程10:基于模型的强化学习与最优控制(第一部分)

在本节课中,我们将学习当系统模型(即状态转移动态)已知时,如何利用它来做出最优决策。我们将探讨规划、最优控制和轨迹优化的基本概念与算法,为后续学习如何结合学习到的模型打下基础。

🔍 回顾:无模型强化学习
在前面的课程中,我们学习了优化强化学习目标的算法。强化学习的目标是最大化由策略 π_θ 诱导出的轨迹分布 p_θ(τ) 下的期望总奖励:

目标:max_θ E_{τ∼p_θ(τ)}[Σ_t r(s_t, a_t)]
我们讨论的算法(如策略梯度、Q学习)都采用了无模型形式。这意味着我们假设不知道状态转移概率 p(s_{t+1} | s_t, a_t),甚至不尝试去学习它。这些算法仅通过从环境中采样来估计期望,而不预测在相同状态下采取不同行动会导致什么结果。
🤔 为什么需要考虑模型?
在许多实际问题中,我们实际上知道或可以学习系统的动态模型。例如:
- 在棋类游戏或雅达利游戏中,规则是明确已知的。
- 许多物理系统(如道路上的汽车)的动力学可以用方程较好地描述。
- 在机器人学中,“系统识别”领域专门研究如何将观测数据与已知模型结构进行匹配,以估计未知参数。
如果知道动态模型,我们就拥有一套在无模型设置中无法使用的强大算法工具箱,这通常能使问题解决得更高效、更优。

🎯 基于模型的强化学习概述
基于模型的强化学习通常分为两步:
- 学习模型:从数据中学习状态转移动态 p(s_{t+1} | s_t, a_t)。
- 利用模型进行规划:使用学习到的(或已知的)模型来决定如何选择动作。

本节课我们专注于第二步:在完全已知模型的假设下,如何进行规划与决策。这属于最优控制、轨迹优化和规划算法的领域。这些术语虽有重叠,但通常:
- 轨迹优化:指在连续空间中优化一系列状态和动作的问题。
- 规划:通常指在离散空间中考虑多种可能性的问题。
- 最优控制:指选择控制输入以优化某个目标(如最小化成本)的通用问题。
下周我们将讨论当模型未知时,如何结合学习与规划。

⚙️ 规划问题的形式化
开环规划 vs. 闭环规划
在规划时,一个关键区别是开环与闭环。
-
开环规划:代理在初始状态 s_1 被揭示后,承诺并执行一整个动作序列 [a_1, ..., a_T],期间不再观察后续状态。
- 确定性情况:若动态是确定性的(s_{t+1} = f(s_t, a_t)),开环规划是直接且最优的。问题可表述为带约束的优化:
max_{a_1,...,a_T} Σ_t r(s_t, a_t)
约束条件:s_{t+1} = f(s_t, a_t) - 随机情况:若动态是随机的,开环规划可能非常次优。因为它无法根据执行过程中揭示的新信息(新状态)调整计划。例如,在不知道考试题目的情况下,提前决定所有答案序列很可能导致糟糕的结果。
- 确定性情况:若动态是确定性的(s_{t+1} = f(s_t, a_t)),开环规划是直接且最优的。问题可表述为带约束的优化:
-
闭环规划:代理在每个时间步 t 都观察当前状态 s_t,然后根据某个策略 π 选择动作 a_t。这形成了“感知-行动”的闭环。
- 强化学习通常解决闭环问题。目标与之前相同,但我们现在可以选择不同复杂度的策略类:
- 全局策略:如神经网络,能处理广阔状态空间。
- 局部策略:如在轨迹附*使用的线性反馈控制器,在最优控制中更常见。
- 强化学习通常解决闭环问题。目标与之前相同,但我们现在可以选择不同复杂度的策略类:
核心洞见:在随机环境中,由于未来信息有价值,闭环规划通常优于开环规划。


📋 本节课内容预告

上一节我们介绍了基于模型规划的基本概念和开环/闭环的区别。本节中,我们来看看本讲后续将涵盖的具体算法类别:

以下是本节课剩余部分将要讨论的核心算法:
- 随机黑箱优化方法:因其简单性而被广泛使用。
- 蒙特卡洛树搜索:一种强大的离散空间规划算法。
- 轨迹优化:特别是线性二次调节器及其非线性扩展。
🎓 总结
在本节课中,我们一起学习了:
- 从无模型强化学习转向基于模型方法的动机。
- 在模型已知的假设下,规划问题的形式化定义。
- 开环规划与闭环规划的根本区别及其适用场景。
- 理解了在随机环境中,由于未来信息的重要性,闭环规划通常更为可取。

接下来的部分,我们将深入探讨具体的规划算法,从简单的随机优化开始,逐步深入到更结构化的轨迹优化方法。
课程 P41:开环规划与蒙特卡洛树搜索 🧠

在本节课中,我们将学习两种重要的规划算法:开环规划中的随机优化方法(如交叉熵方法)和适用于闭环规划的蒙特卡洛树搜索。这些方法对动力学模型的假设非常有限,仅需知道模型,而不要求其连续、可微或确定。
开环规划与随机优化方法 🎯
上一部分我们讨论了基于模型的强化学习基础。本节中,我们来看看一类对模型假设极少的开环规划算法。在开环规划问题中,给定一个初始状态,目标是生成一系列能最大化累积回报的动作序列。这个想法对于数学考试可能不理想,但对许多实际应用问题可能很有效。
我们将从一类可广泛视为随机优化(或黑箱优化)的方法开始。这些方法将问题抽象为一个黑箱,不关心时间结构或最优控制器,只关心解决一个最大化或最小化问题。
我们将整个动作序列 A 表示为从 a1 到 aT 的拼接,从而将其转化为一个在变量 A 上、目标函数为 J(衡量期望奖励)的无约束优化问题。
随机射击方法
解决此问题的一个非常简单(起初可能显得愚蠢)的方法是“猜和检查”,即随机采样。
以下是其基本步骤:
- 从某个分布(如均匀分布)中随机选择
N个动作序列A_i。 - 评估每个动作序列的回报
J(A_i)。 - 选择回报最高的动作序列
A* = argmax_i J(A_i)。
这种方法有时被称为“随机射击方法”。你可以将选择动作序列的过程想象为向环境随机“射击”,以观察结果。
对于低维系统和短时域问题,这种方法在实践中可以工作得非常好。它的一个主要优势是实现极其简单,编写代码只需几分钟。在现代硬件上,它通常也非常高效,因为可以并行评估多个动作序列的回报(例如,将 N 个序列作为一个小批量通过神经网络模型),然后进行归约求最大值。
这种方法的缺点是依赖运气,随机样本中可能不包含好的动作序列。
交叉熵方法 (CEM)

交叉熵方法可以显著改进随机射击方法,同时保留其许多优势。它适用于低到中等维度和时域的控制问题。
其核心思想是:更智能地选择采样分布,使其专注于可能包含优质动作序列的区域。这是一个迭代过程。
直观上,如果我们生成一批样本,我们会根据其中表现较好的样本(“精英样本”)来重新拟合一个新的采样分布,然后从新分布中再次采样,如此反复,从而逐渐逼*更优解。

以下是交叉熵方法的算法步骤:
- 初始化:设定一个初始分布
P(A)(例如均匀分布或高斯分布)。 - 迭代:重复以下步骤直到收敛:
- 采样:从当前分布
P(A)中采样N个动作序列。 - 评估:计算每个序列的回报
J(A_i)。 - 选择精英:选出回报最高的前
M个样本(例如前10%),称为“精英集”。 - 重新拟合:用这
M个精英样本重新拟合(如计算最大似然估计)出一个新的分布P(A)。
- 采样:从当前分布
交叉熵方法有许多吸引人的保证。如果初始分布足够宽且采样足够多,它通常能找到全局最优解。在实践中,它对现代深度学习框架友好,支持并行计算,且不要求模型对动作可微。该方法可以扩展到离散动作(使用其他分布族),通常对连续动作使用高斯分布。
一个更复杂的变体是 CMA-ES(协方差矩阵自适应进化策略),它引入了动量风格的更新,在迭代次数较多时,能用更小的种群规模产生更好的解。
随机优化方法的优缺点总结
优点:
- 速度快:易于并行化,计算高效。
- 易实现:算法逻辑简单。
- 限制少:不要求模型连续、可微或确定。
缺点:
- 维度限制:严重依赖随机采样来覆盖动作空间。当维度较高时(经验法则:通常超过30-60维),性能会下降。对于时间序列问题,虽然连续时间步动作相关,但总维度(动作维度×时间步数)过高仍会带来挑战。
- 仅限开环:只能进行开环规划,不涉及闭环反馈。
蒙特卡洛树搜索 (MCTS) 🌳
接下来我们将讨论另一种规划方法——蒙特卡洛树搜索,它能够考虑闭环反馈。MCTS 能处理离散和连续状态(更常用于离散),在棋类游戏(如 AlphaGo)和机会型游戏(如扑克)中非常受欢迎。
让我们思考如何用 MCTS 玩一个简单的游戏。从初始状态开始,你可以尝试每个可能的动作,看看会导致什么状态,然后再从新状态尝试每个动作,如此反复构建一棵树。穷举搜索这棵树是指数级昂贵的。
MCTS 的核心思想是:通过智能地选择树中哪些部分进行扩展和评估,来*似状态的价值,而非扩展整棵树。具体做法是,当搜索到一定深度后,不再继续展开,而是用一个简单的“默认策略”(例如随机策略)从该状态模拟到回合结束,用得到的模拟回报来估计该状态的价值。虽然这不精确,但如果进行足够多次模拟,并能智能地探索有潜力的分支,效果会很好。

MCTS 算法概述
MCTS 是一个迭代过程,每次迭代包含四个步骤:
- 选择:从根节点(当前状态)开始,使用树策略递归地选择子节点,直到到达一个未被完全扩展的叶节点(即该节点还有未尝试过的动作)。
- 扩展:为上一步选中的叶节点,选择一个未执行过的动作,从而创建一个或多个新的子节点。
- 模拟:从新扩展的节点(或上一步的叶节点)开始,使用默认策略(如随机策略)进行模拟,直到回合结束,得到一个模拟回报值。
- 回溯:将模拟得到的回报值,沿着从新节点到根节点的路径反向传播,更新路径上所有节点的统计信息(如总回报、访问次数)。
在计算预算用尽后,根据根节点下各子节点的*均回报(总回报/访问次数),选择最优的动作执行。
树策略:UCT 算法
树策略的关键在于*衡利用(选择当前估计价值高的节点)和探索(尝试访问次数少的节点)。最常用的树策略是 UCT(上限置信区间树) 公式。
对于一个节点 s,其每个子节点 a 的得分计算公式为:
Score(s, a) = Q(s, a) / N(s, a) + c * sqrt( ln(N(s)) / N(s, a) )
其中:
Q(s, a):在节点s采取动作a获得的总回报。N(s, a):在节点s采取动作a的次数。N(s):节点s的总访问次数。c:探索常数,控制探索与利用的权衡。
公式解读:
- 第一项
Q/N是*均回报,代表利用——选择历史表现好的动作。 - 第二项是探索奖励。子节点访问次数
N(s, a)越少,分母越小,该项值越大,鼓励探索。分子ln(N(s))使得随着父节点总访问次数增加,探索奖励缓慢增加。
树策略会选择得分最高的子节点进行深入。
MCTS 的特点与扩展
MCTS 在实践中效果非常好,尤其适合存在随机性的场景。虽然其理论保证较少,但已成为许多复杂游戏的标准算法。
可以通过多种方式增强 MCTS:
- 学习默认策略:使用学到的策略而非随机策略进行模拟。
- 使用价值函数:在模拟未结束时,用价值函数估计状态价值,而非模拟到底。
- 与强化学习结合:例如 AlphaGo 就将 MCTS 与深度强化学习相结合。
如果想深入了解,推荐阅读综述论文《A Survey of Monte Carlo Tree Search Methods》。
总结 📝
本节课我们一起学习了两种重要的规划算法:
- 开环随机优化方法:包括基础的随机射击和更高效的交叉熵方法。它们实现简单、并行高效,对模型假设少,但受限于维度且只能进行开环规划。
- 蒙特卡洛树搜索:一种用于闭环规划的迭代算法,通过选择、扩展、模拟、回溯四个步骤,智能地探索决策树。其核心 UCT 树策略能有效*衡利用与探索,在实践中,尤其在随机性环境中,表现非常强大。

这些方法为我们在模型已知但性质不限的情况下进行规划提供了强大而实用的工具。




课程 P42:CS 285 第10讲,第3部分 - 轨迹优化与线性二次调节器 (LQR) 🚀



在本节课中,我们将要学习如何利用动力学的导数进行轨迹优化。我们将从基本的优化问题出发,介绍两种主要方法:射击法和共轭点法,并重点深入讲解一种经典且高效的二阶方法——线性二次调节器 (LQR)。





概述




到目前为止,我们已经讨论了规划中的黑箱优化方法和蒙特卡洛树搜索。这些方法主要适用于离散动作和随机环境。接下来,我们将讨论带有导数的轨迹优化方法,这在许多已知动力学导数的连续环境中非常有用。



在强化学习和动态规划中,我们通常使用 s_t 和 a_t 表示状态和动作,用 r 表示奖励。而在最优控制领域,更常见的做法是使用 x_t 和 u_t 表示状态和动作,并使用成本(Cost)代替奖励(Reward)。本部分将讨论轨迹优化和最优控制方法,这些是最优控制社区最常研究的方法。




为了与教科书符号保持一致,我们将使用 x 表示状态,u 表示动作。请记住,这仅仅是符号上的差异,基本原理完全相同。你可以尝试在心理上将 s 替换为 x,将 a 替换为 u,并思考这些方法在最大化奖励(而非最小化成本)时的样子。








利用导数进行规划



现在,让我们思考如何利用导数进行规划。首先,回到最初的约束优化问题。





当我们定义基于模型的规划问题时,我们希望最小化总成本(或最大化总回报),但必须将系统动力学作为约束条件考虑进去。



优化问题公式:
最小化总成本,同时满足动力学约束 x_t = f(x_{t-1}, u_{t-1})。


带有等式约束的优化问题,总是可以通过将约束代入变量,转化为无约束优化问题。因此,上述约束优化问题等价于一个复杂的、但无约束的优化问题。



如果我们想使用导数来优化这个无约束问题,一个直接的想法是计算梯度并通过反向传播进行优化。具体来说,我们需要计算动力学 f 和成本函数 c 相对于其输入 x_t 和 u_t 的导数,即 df/dx_t, df/du_t, dc/dx_t, dc/du_t。


然而,在实践中,对于这种目标函数,仅使用一阶梯度下降法通常效果很差。因此,使用二阶方法(如牛顿法)来解决这种优化问题非常有帮助。幸运的是,这个问题具有特殊的结构,可以导出一个非常高效的算法,而无需计算庞大的海森矩阵。







射击法 vs. 共轭点法



在深入描述二阶方法之前,需要先了解轨迹优化中两个核心概念的差异:射击法 (Shooting Methods) 和 共轭点法 (Collocation Methods)。



射击法 是一种直接优化动作序列 {u_1, ..., u_T} 的方法。之所以称为“射击法”,是因为你可以想象初始动作的选择就像在状态空间中“射击”,其影响会贯穿整个轨迹,对最终结果产生重大影响。这也解释了为什么射击法在数值上可能不稳定:早期动作对目标的敏感性极高,导致优化问题的条件数很差,一阶梯度方法难以处理。



共轭点法 则同时优化状态序列 {x_1, ..., x_T} 和动作序列 {u_1, ..., u_T},并附加动力学等式约束。在这种方法中,优化变量是轨迹上的所有点,只要满足约束即可移动。通常,共轭点法的数值条件更好,对一阶方法更友好,但实现起来通常更复杂。




本节课我们将重点讨论一种经典的、基于射击法的二阶方法。








线性二次调节器 (LQR)





我们将要讨论的经典射击法是 线性二次调节器。首先,我们从线性控制问题的特例开始,然后再扩展到非线性情况。



问题设定


我们的优化问题是最小化总成本,这对应于最初的约束优化问题,但通过代入约束,我们将其视为关于动作序列的无约束优化问题。




线性情况 指的是动力学 f(x_t, u_t) 是线性的,即可以表示为:
f(x_t, u_t) = F_t * [x_t; u_t] + f_t
其中 F_t 是矩阵,f_t 是常数向量。注意,我们目前讨论的是确定性动力学,稍后会扩展到随机情况。



我们假设成本函数是二次的。如果成本是线性的,无约束最小化的解可能在无穷远处,这没有意义。因此,成本至少是二次的,可以写成:
c(x_t, u_t) = 1/2 * [x_t; u_t]^T C_t [x_t; u_t] + [c_{x,t}; c_{u,t}]^T [x_t; u_t]



线性动力学 + 二次成本 = 线性二次调节器 (LQR)。我们允许每个时间步的矩阵 C_t, c_t, F_t, f_t 都不同,这在扩展到非线性情况时会很重要。




LQR 推导




我们通过动态规划的思想来求解 LQR 问题,即从最后一个时间步开始,反向推导到第一个时间步。




第一步:求解最后一步 (t=T)
在最后一步,我们只关心最小化当前成本 c(x_T, u_T)。这是一个关于 u_T 的二次函数。
- 将成本矩阵
C_T按状态和动作分块:C_T = [[C_{xx,T}, C_{xu,T}], [C_{ux,T}, C_{uu,T}]],其中C_{ux,T} = C_{xu,T}^T。 - 对
u_T求导并令导数为零,可以得到最优动作u_T关于状态x_T的表达式:
u_T = K_T * x_T + k_T
其中,
K_T = -C_{uu,T}^{-1} * C_{ux,T}
k_T = -C_{uu,T}^{-1} * c_{u,T} - 将最优
u_T代回成本函数,可以得到最后一步的价值函数V(x_T),它表示从状态x_T开始执行最优动作后的总成本。可以证明,V(x_T)仍然是x_T的二次函数:
V(x_T) = 1/2 * x_T^T * V_T * x_T + x_T^T * v_T + 常数



第二步:反向递归 (t=T-1, ..., 1)
现在考虑前一个时间步 t。此时的选择 u_t 不仅影响当前成本 c(x_t, u_t),还会通过动力学影响下一个状态 x_{t+1},从而影响未来的最优成本 V(x_{t+1})。
- 定义 Q-函数:
Q(x_t, u_t) = c(x_t, u_t) + V(f(x_t, u_t))。这表示在状态x_t执行动作u_t,之后遵循最优策略的总成本。 - 将线性动力学
x_{t+1} = F_t * [x_t; u_t] + f_t和二次价值函数V(x_{t+1})代入Q(x_t, u_t)。经过代数运算(主要是展开和合并同类项),可以发现Q(x_t, u_t)仍然是关于[x_t; u_t]的二次函数。 - 再次对
u_t求导并令导数为零,可以解出最优动作:
u_t = K_t * x_t + k_t
其中,K_t和k_t的表达式与最后一步形式相同,但其中的矩阵Q_{uu,t},Q_{ux,t}和向量q_{u,t}是由当前成本c_t、动力学F_t, f_t以及下一步的价值函数参数V_{t+1}, v_{t+1}共同计算得出的。 - 同样,将最优
u_t代入Q(x_t, u_t),可以得到当前步的价值函数V(x_t),它仍然是x_t的二次函数,并可以更新参数V_t,v_t。



算法流程:
- 反向过程:从
t=T到t=1,递归地计算每个时间步的增益矩阵K_t、偏移向量k_t以及价值函数参数V_t,v_t。 - 正向过程:从给定的初始状态
x_1开始,对于t=1到T:- 计算动作:
u_t = K_t * x_t + k_t - 通过动力学计算下一个状态:
x_{t+1} = f(x_t, u_t)
这样就得到了最优的状态轨迹{x_1, ..., x_T}和动作轨迹{u_1, ..., u_T}。
- 计算动作:









总结




本节课中,我们一起学习了如何利用导数进行轨迹优化。
- 我们首先比较了射击法和共轭点法这两种不同的优化思路。
- 然后,我们重点深入推导了线性二次调节器 (LQR) 这一经典算法。LQR 针对线性动力学和二次成本这一特殊问题,通过动态规划的思想,高效地计算出最优策略——该策略表现为一个随时间变化的线性反馈控制器
u_t = K_t * x_t + k_t。 - LQR 的核心在于其反向递归计算增益矩阵
K_t和偏移量k_t,再通过正向模拟得到最优轨迹。虽然推导过程中的线性代数运算写起来繁琐,但每一步在数学上都是直接了当的。




理解 LQR 是学习更高级轨迹优化方法(如迭代 LQR、微分动态规划 DDP)的重要基础。对于非线性系统,我们通常在其局部线性化/二次*似后应用 LQR,并通过迭代来改进轨迹。

课程 P43:从 LQR 到非线性系统控制 🚀
在本节课中,我们将扩展之前讨论的线性二次型调节器(LQR),将其应用于随机动力学系统和非线性系统。我们将学习如何通过局部线性化和迭代优化来处理更复杂的控制问题。
1. 扩展到随机动力学 🔀
上一节我们介绍了确定性线性系统下的 LQR。本节中,我们来看看当系统动力学引入随机性时会发生什么。
在随机动力学的特殊情况下,如果动力学是正态的,即给定状态 x_t 和动作 u_t,下一状态的条件概率分布 p(x_{t+1} | x_t, u_t) 是一个多元正态分布。其均值由线性动力学给出,协方差为常数。

核心公式:
p(x_{t+1} | x_t, u_t) = N( A_t x_t + B_t u_t, Σ_t )

在这种情况下,我们发现之前推导出的确定性 LQR 控制律仍然是最优的。直觉上,这是因为高斯分布是对称的。在二次成本函数下,均值左右的偏差会相互抵消,因此添加高斯噪声不会改变最优动作 u_t 的解。
然而,一个重要区别是:由于引入了噪声,系统访问的状态序列变得随机。这意味着我们无法再生成单一的开环动作序列。相反,我们将控制律 u_t = K_t x_t + k_t 作为一个闭环策略来使用。在线性二次高斯(LQG)问题中,这个策略被证明是最优的闭环策略。
算法总结:算法本身无需改变。由于高斯噪声的对称性,我们可以忽略协方差矩阵 Σ_t。LQR 向后递归计算出的增益矩阵 K_t 和偏移量 k_t 直接构成了最优的线性反馈控制器。
状态分布:此时,状态 x_t 是从某个分布中采样得到的,而不再是确定性的。有趣的是,在 LQG 设定下,x_t 的分布仍然是正态的。

2. 扩展到非线性系统:迭代 LQR (iLQR) 🔄
处理了随机线性系统后,我们现在面临更大的挑战:非线性系统。本节我们将学习如何通过局部*似,将 LQR 的思想扩展到非线性领域。

LQR 基于两个关键假设:
- 动力学
f(x_t, u_t)是x_t和u_t的线性函数。 - 成本函数
c(x_t, u_t)是x_t和u_t的二次函数。
对于非线性系统,我们可以利用一个强大的数学工具:泰勒展开。如果我们有一条当前估计的最优轨迹(记为 \hat{x}_t, \hat{u}_t),我们可以在该轨迹的邻域内,对动力学和成本函数进行一阶和二阶*似。
核心*似公式:
对于动力学 f 和成本 c,在点 (\hat{x}_t, \hat{u}_t) 附*有:
δx = x - \hat{x}_t
δu = u - \hat{u}_t
f(x, u) ≈ f(\hat{x}_t, \hat{u}_t) + ∇_x f · δx + ∇_u f · δu (一阶*似)
c(x, u) ≈ c(\hat{x}_t, \hat{u}_t) + ∇ c · [δx; δu] + 1/2 [δx; δu]^T H [δx; δu] (二阶*似)
其中 ∇ 代表梯度,H 代表海森矩阵。

通过这种*似,我们得到了一个关于偏差 δx 和 δu 的局部线性二次型问题。这正是标准 LQR 可以解决的问题。
基于这个想法,以下是迭代 LQR (iLQR) 算法:

以下是 iLQR 算法的核心步骤:
- 线性化:在当前轨迹
\hat{x}_t, \hat{u}_t附*,计算动力学和成本函数的泰勒展开(一阶动力学,二阶成本)。 - 向后传递:对得到的局部 LQR 问题(以
δx,δu为变量)运行标准 LQR 的向后递归,计算出最优的反馈增益K_t和前馈项k_t。 - 带线搜索的前向传递:从初始状态开始,使用原始的非线性动力学和上一步计算出的控制律进行前向模拟:
其中u_t = \hat{u}_t + K_t (x_t - \hat{x}_t) + α * k_t x_{t+1} = f(x_t, u_t)α是一个介于 0 和 1 之间的步长参数,用于线搜索以确保成本下降。 - 更新轨迹:将新模拟得到的状态和动作序列
{x_t, u_t}设置为新的参考轨迹{\hat{x}_t, \hat{u}_t}。 - 迭代:重复步骤 1-4,直到轨迹收敛(成本变化很小)。


与牛顿法的联系:iLQR 本质上是一种牛顿法,用于求解原始的最优控制问题。向后传递计算了“牛顿步”,而前向传递中的线搜索确保了稳定性。如果想使用完整的二阶信息(即也对动力学进行二阶*似),对应的算法称为差分动态规划。

3. 线搜索的重要性 📉
上一节我们介绍了 iLQR 的基本流程,本节我们重点讨论其中保证算法鲁棒性的关键技巧:线搜索。
在牛顿法中,如果二次*似在远离当前点的区域不准确,直接跳到该二次模型的最优点可能导致性能反而变差(成本上升)。我们需要一种机制来“信任”这个*似模型只在当前点附*有效,即信赖域思想。
在 iLQR 中,线搜索通过调节前馈项 k_t 的步长 α 来实现这一点:
- 当
α = 0时,控制动作u_t = \hat{u}_t + K_t (x_t - \hat{x}_t),即只使用反馈部分,不执行牛顿步。这会使新轨迹非常接*旧轨迹。 - 当
α = 1时,执行完整的牛顿步。 - 我们可以从
α=1开始尝试,如果新轨迹的成本没有降低,则按比例减小α(例如减半),重新进行前向模拟,直到找到一个能降低成本的α值。
这种简单的回溯线搜索能极大提高 iLQR 的收敛鲁棒性,使其能够处理高度非线性的问题。
总结 📚
本节课中我们一起学习了如何将 LQR 框架进行扩展:
- 随机线性系统 (LQG):在高斯噪声下,最优控制律形式不变,但需理解为闭环反馈策略。状态分布保持高斯特性。
- 非线性系统 (iLQR):通过在当前轨迹点进行泰勒展开,将非线性问题局部*似为 LQR 问题。通过迭代地进行线性化、求解 LQR、执行带线搜索的前向模拟和更新轨迹,最终收敛到一个局部最优解。
- 关键改进:引入线搜索机制是保证 iLQR 算法实际性能稳定的关键,它通过调节步长来确保每次迭代的成本单调下降,体现了信赖域的思想。

通过掌握 iLQR,我们获得了一个强大的工具,可以将高效的 LQR 计算应用于更广泛的非线性最优控制问题中。
🎯 课程 P44:基于模型的最优控制案例研究
在本节课中,我们将通过一个具体的案例研究,探讨最优控制算法在已知真实动态下的强大能力。这个研究不仅展示了基于模型的强化学习的潜力,也说明了这些方法能够实现比最佳无模型方法更令人印象深刻的行为。
📚 概述:模型预测控制与迭代LQR
上一节我们介绍了最优控制的基本概念。本节中,我们来看看一个结合了模型预测控制和迭代LQR的经典算法应用。
模型预测控制是一种在状态可能不可预测的环境中,使用基于模型的规划器的方法。其核心思想非常简单:

- 在每个时间步
t,观察当前状态x_t。 - 使用规划方法,为未来
T步确定一个动作序列{u_t, u_{t+1}, ..., u_{t+T}}。 - 只执行该计划中的第一个动作
u_t。 - 丢弃剩余动作,观察新状态
x_{t+1},然后回到步骤1,重新规划。


本质上,模型预测控制就是在每个时间步都重新进行规划。

我们将要讨论的论文《在线轨迹优化中复杂行为的合成与稳定》正是采用了这种方法。该论文的主要贡献在于迭代LQR的高效实现细节。接下来,我们将通过该论文中的视频结果,直观感受算法的效果。

🤸♂️ 案例研究演示与分析
以下是论文中展示的几个机器人控制实验,它们都使用了基于迭代LQR的模型预测控制器。


杂技演员系统
这是一个简单的两自由度系统,只有一个控制维度。首先,系统在无控制状态下被动运行。随后,控制器被激活。令人印象深刻的是,控制器在实时中自动发现了如何摆动杂技演员以保持*衡,无需任何预先学习(除了已知的系统动力学)。当系统受到外力扰动时,控制器也能成功恢复*衡。



游泳蛇机器人
这个机器人的目标是移动到绿色目标点,同时避开红色障碍物。有趣的是,蛇形游动的步态完全是由控制器通过优化自动发现的,无需任何预先编程或学习。



单足跳跃机器人
实验首先展示了物理引擎中的力扰动。随后,当要求机器人站立时,控制器规划出了跳跃并站立的动作。在面对持续扰动时,机器人能够成功保持直立状态,即使是非常极端的干扰也能应对。



实验还测试了模型不匹配的情况:当控制器的动力学模型(认为的机器人质量)与实际机器人质量相差一倍时(一半或两倍),控制器仍然能产生看似合理的行为,展现了其一定的鲁棒性。



三维人形机器人
在这个更复杂的系统中,成本函数需要设计得相对精细。由于控制器规划的时间范围较短,成本函数必须提供足够的细节引导。控制器成功让人形机器人实现了站立、基本行走和保持*衡,并能对相当极端的干扰做出反应。




🔗 延伸阅读与下节预告


如果你对这些主题感兴趣,可以参考以下资料:
- 差分动态规划:这是迭代LQR等算法的基础框架。
- 概率性表述:有论文提供了LQR的随机版本及置信域融合方法,可供深入研究。

本节课中我们一起学习了在已知动力学模型的前提下,如何利用模型预测控制和迭代LQR实现复杂、鲁棒的实时控制行为。
然而,已知动态的假设有其局限性。对于像控制汽车这类易于建模的系统,这很有效。但对于让机器人折叠毛巾或在工厂分拣物体等任务,精确建模动力学可能非常困难甚至不可能。
因此,在下周的讲座中,我们将把这个框架扩展到动力学模型未知的情况,探讨如何通过学习模型来应用这些强大的最优控制方法。


📘 课程 P45:基于模型的强化学习算法(第一部分)
在本节课中,我们将学习基于模型的强化学习的基本概念。我们将探讨如何从数据中学习一个动态模型,并利用这个模型来规划行动。课程将涵盖从最基础的方法到更高级的、能处理模型误差的技术,并讨论其中的核心挑战与权衡。

🧠 基于模型的强化学习基本概念
上一节我们介绍了课程目标,本节中我们来看看基于模型的强化学习的基本框架。
其核心思想是:首先从智能体与环境的交互数据中学习一个动态模型,然后利用这个学到的模型(而非真实环境)来进行规划和控制。这个模型可以预测在给定状态和动作下,下一个状态会是什么。
我们可以学习一个确定性模型,其形式为:
s_{t+1} = f(s_t, a_t)
也可以学习一个随机(概率)模型,其形式为:
s_{t+1} ~ p(s_{t+1} | s_t, a_t)
在今天的讲座中,我们将主要以确定性模型为例进行讲解,但大多数思想同样适用于概率模型。
⚠️ 一个朴素的方法及其问题

一个最直观的基于模型的强化学习算法可以称为“版本0.5”。以下是其步骤:
- 运行基础探索策略:例如一个完全随机的策略,收集状态、动作、下一状态组成的转移数据
(s, a, s')。 - 训练动态模型:使用监督学习(如最小化均方误差)在收集的数据集上训练模型
f(s, a)。 - 利用模型规划:使用上周学到的任何规划算法(如随机采样、轨迹优化等),在学到的模型
f中选择能获得高回报的动作。
这个方法在某些情况下(如经典机器人中的系统识别)可以工作得很好,尤其是当模型形式已知、仅需拟合少量参数时。然而,当使用高容量模型(如深度神经网络)时,它会遇到一个严重问题:分布漂移。
为什么分布漂移是个问题?
- 模型
f是在基础策略π_0产生的状态分布p_{π_0}(s_t)下训练的。 - 当我们基于模型
f规划时,我们执行的是由模型诱导的新策略π_f。 π_f会访问一些在p_{π_0}(s_t)下概率很低甚至从未见过的状态。- 在这些“陌生”区域,模型
f的预测可能非常不准确。 - 基于这些错误预测做出的“最优”决策,会将智能体导向更陌生、模型预测更不准的区域,形成恶性循环,导致性能崩溃。
这类似于我们在模仿学习中讨论过的分布不匹配问题。
🔄 改进方案:迭代数据收集
为了解决分布漂移问题,我们可以借鉴DAgger算法的思想:持续收集新策略下的数据,并重新训练模型。这引出了“版本1.0”算法:

以下是“版本1.0”算法的步骤:
- 运行基础策略收集初始数据。
- 使用所有现有数据训练动态模型
f。 - 基于当前模型
f规划并执行动作,收集新的转移数据。 - 将新数据加入数据集。
- 返回第2步,重复此循环。
这个迭代过程让模型能够不断在它即将访问的状态分布上进行训练,从而从原则上缓解分布漂移问题。
🎯 进一步优化:模型预测控制

“版本1.0”虽然有效,但学习可能较慢。如果模型在一步预测上犯了一个小错误,这个错误会在整个开环计划中累积,导致糟糕的结果,而智能体要等到整个回合结束、数据被加入训练集后,才能修正这个错误。
我们可以做得更好,通过在每个时间步都重新规划来立即纠正错误。这种方法称为模型预测控制,我们称之为“版本1.5”。
以下是“版本1.5”(MPC)算法的步骤:

- 运行基础策略收集初始数据。
- 使用所有数据训练动态模型
f。 - 在每一个时间步
t:
a. 基于当前状态s_t和模型f,规划一个短序列的动作(例如,使用随机采样方法)。
b. 只执行规划出的第一个动作a_t。
c. 观察到真实的下一个状态s_{t+1},并将转移(s_t, a_t, s_{t+1})加入数据集。
d. 状态更新为s_{t+1},立即重新规划。 - 每隔一定的时间步(例如每完成一个轨迹),用累积的新数据重新训练模型
f,然后回到第3步。
MPC的核心优势在于其鲁棒性:即使模型不完美,频繁的重新规划也能利用模型在当前“已到达”状态下的局部信息,及时纠正偏差,防止错误累积。当然,代价是计算成本更高。

📝 总结
本节课我们一起学习了基于模型的强化学习算法的第一部分。

- 我们首先介绍了基本概念,即先学习环境动态模型,再基于模型进行规划。
- 然后我们分析了一个朴素方法(版本0.5),并指出了其核心问题:分布漂移,即训练模型与使用模型时的状态分布不匹配。
- 接着,我们提出了迭代数据收集(版本1.0) 的解决方案,通过不断用新策略的数据训练模型来对齐分布。
- 最后,我们介绍了更高级的模型预测控制(版本1.5),它通过每一步都重新规划来即时纠正模型误差,从而提高了算法的鲁棒性和学习效率。



理解这些基础算法和它们面临的问题是设计有效基于模型强化学习系统的关键。在下节课中,我们将探讨如何利用学到的模型来直接学习策略。
课程 P46:不确定性在基于模型的强化学习中的角色 🧠
在本节课中,我们将要学习不确定性在基于模型的强化学习中的核心作用。我们将探讨为什么简单的基于模型方法在实践中会遇到困难,以及如何通过适当的不确定性估计来解决这些问题,从而构建更稳健、性能更好的智能体。

上一节我们介绍了基于模型的强化学习的基本框架。本节中我们来看看它在实践中面临的一个关键挑战。
在基于模型的强化学习版本1.0或1.5中,算法理论上可以解决问题,但在实践中,它面临着一些相当严重的问题。
下图展示了一个在伯克利进行的实验,该实验在半人马座模拟任务上比较了基于模型的方法和无模型方法。


橙色曲线显示了从零开始运行的基本基于模型强化学习算法的结果。红色曲线显示了使用相同数据启动并运行更久的无模型学习者的结果。

从结果中可以观察到两点:
- 无模型学习者最终获得了更好的性能。
- 基于模型的学习者虽然能较快地达到比零稍好的性能,但其最终性能远低于无模型方法。

这里的x轴是对数尺度。基于模型的学习者奖励约为500,而无模型学习者的奖励约为5000。
500奖励对应的行为如下,它并非完全失败,但进展缓慢。


5000奖励对应的行为则如下,表现优异。


那么,这里发生了什么?为什么基于模型的学习者比无模型学习者差这么多?

与常规监督学习问题不同,在基于模型的强化学习这种迭代式数据收集问题中,神经网络训练算法面临一种独特的挑战。

问题的核心在于:
- 我们需要避免过拟合,尤其是在初期数据量很少的时候。
- 但同时,模型又需要有足够的容量来处理后期的大量数据。
- 像神经网络这样的高容量模型在大数据集上表现良好,但在小数据集上容易表现不佳。
- 如果模型在早期表现不佳,它就无法产生有效的探索行为,从而导致智能体陷入困境。

那么,性能差距的主要原因是什么?这个问题主要归结于类似过拟合的问题,并且被数据分布的变化进一步加剧。
以下是经典过拟合的示意图:我们有一组由直线加噪声构成的数据点,如果使用一个非常强大的函数逼*器(如复杂神经网络)去拟合,可能会得到图中蓝色的复杂曲线,它“记住”了噪声而非真实规律。


在基于模型的强化学习中,情况更为棘手:
- 我们通过模型进行规划。如果模型对某些轨迹的奖励预测产生了稍微偏向乐观的错误(即预测奖励高于实际),那么对规划器而言,选择这些轨迹将极具诱惑力。
- 这导致了误差在乐观方向被最大化利用。规划器会倾向于利用模型中的所有误差。
- 如果模型过拟合,它会产生许多微小的、不真实的“伪峰值”(预测奖励虚高),这为规划器提供了丰富的利用空间。
- 因此,这比常规的过拟合问题更严重,因为规划器会主动寻找并利用模型中的所有漏洞。
好的,那么在这个讲座的部分,我要讨论的是,如何通过适当的不确定性估计来帮助我们解决这个问题。
不确定性估计如何帮助我们做得更好?其核心思想是:对于每个状态-动作对,我们不仅仅预测一个单一的下一个状态 s',而是预测一个可能的下一个状态的分布,这个分布反映了在模型不确定性下可能达到的状态。

这之所以是个好主意,可以通过一个比喻来理解:假设你的目标是走到悬崖边欣赏美景(高奖励)。
- 如果你的模型非常自信(不确定性低),你可能会计划直接走到悬崖边,并预期获得高奖励。
- 但如果你意识到模型极度不确定悬崖的精确位置,当你计算在不确定模型下的预期奖励时,你会发现:直接走向悬崖边有很高的概率会失足跌落(导致巨大负奖励)。
- 因此,你会自动选择停留在离悬崖更远的安全地带,因为越靠*悬崖,由于模型不确定性,意外跌落的风险(预期负奖励)就越高。
关键在于,即使我们没有刻意制定一个悲观或规避风险的策略,仅仅是在不确定模型下计算预期奖励,就会自然产生避免高不确定性区域的行为,前提是该区域可能带来负面后果。
公式表示:
在确定模型下,我们选择最大化 Q(s, a) 的动作。
在不确定模型下,我们选择最大化 期望奖励 E_{p(model)}[Q(s, a)] 的动作,其中期望是在所有与当前数据一致的可能模型 p(model) 下计算的。

这样做迫使规划者进行“对冲”,选择那些在所有可能未来中都“相当不错”的行动序列。这种不确定性不是关于动态本身有噪声,而是关于我们不知道真实动态是什么。存在许多与现有数据一致的可能世界,我们希望采取的行动在这些可能世界的分布下预期良好。

因此,在算法第三步中,唯一的变化是:我们只采取那些在特定(不确定)动态模型下预期能获得高奖励的行动。这将避免模型误差被利用的问题,使算法在训练早期(模型不确定性高时)做出更明智的决策。随着模型收集更多数据并变得更精确,它会在高奖励区域逐渐变得自信,最终智能体也能安全地接*目标。
直觉上可以这样想:因为不知道悬崖在哪,你先走到一个相对安全的距离,收集数据, refine 你的模型;下次你就可以基于更精确的模型走得更*。





然而,这里有几个非常重要的注意事项。这是一种非常特殊的不确定性处理方式。

以下是关键注意事项:
- 需要*衡探索:如果你过于谨慎,不确定性区间划得太大,并且奖励结构设计不佳,你可能永远无法接*高奖励区域,从而阻碍探索。必须确保不确定性感知不会过度损害探索能力(我们将在后续课程深入探讨探索)。
- 预期值 vs. 悲观值:我们讨论的是计算期望值,而不是悲观值或最坏情况值。这不是一个试图最大化最坏情况回报或追求绝对稳健的算法。虽然使用置信区间下限是合理的(特别是在关心安全时),但这里我们聚焦于期望值。
- 预期值 vs. 乐观值:同样,它也不是乐观值。你可以对不确定性持乐观态度,从而鼓励更多的“利用”和探索,但这将是不同的算法(如乐观探索)。计算期望值是一个良好且直观的起点。


本节课中我们一起学习了不确定性在基于模型的强化学习中的关键作用。我们了解到,简单的最大似然模型容易因过拟合和规划器利用误差而导致性能不佳。通过引入并利用模型的不确定性估计,在可能模型的分布下计算预期奖励,可以自然地促使智能体采取更稳健、对冲风险的行为,从而在训练早期做出更好决策,并逐步 refine 模型以达成最终目标。同时,我们也指出了这种方法需要注意*衡探索与利用,并明确了期望值与悲观/乐观策略的区别。

课程 P47:基于模型的强化学习中的不确定性感知模型 🧠

在本节课中,我们将学习如何训练不确定性感知的神经网络模型,以作为基于模型的强化学习(Model-Based RL)中的动态模型。我们将探讨为什么简单的输出分布熵方法无效,并介绍两种更有效的方法:贝叶斯神经网络和自助法集成模型。


为什么简单的输出分布熵方法无效?❌


上一节我们介绍了基于模型的强化学习的基本概念。本节中,我们来看看一个看似简单但实际无效的不确定性建模方法:直接使用神经网络输出分布的熵。


假设我们有一个神经网络动态模型,它输入当前状态 s_t 和动作 a_t,输出下一个状态 s_{t+1} 的条件概率分布 P(s_{t+1} | s_t, a_t)。在连续状态空间中,这个分布通常用多元高斯分布表示,模型输出均值 μ 和方差 σ^2。
公式表示:
P(s_{t+1} | s_t, a_t; θ) = N(μ_θ(s_t, a_t), Σ_θ(s_t, a_t))

这种方法的问题是,它预测的是一种“偶然不确定性”(Aleatoric Uncertainty),即世界本身固有的随机性。然而,在基于模型的强化学习中,我们更关心的是“认知不确定性”(Epistemic Uncertainty),即由于数据有限,我们对模型本身的不确定。

当模型在有限数据上过拟合时,它会在训练数据上做出非常自信(低方差)且准确的预测,但对于分布外的状态和动作,它同样会做出自信但完全错误的预测。这种错误的自信会被强化学习优化器利用,导致策略在模型想象的、不现实的“好结果”上过度优化,从而在实际中失败。



核心问题在于: 最大似然训练的目标是拟合数据中的噪声,而不是表达我们对模型参数的不确定性。



我们需要什么样的不确定性?🎯


上一节我们指出了问题所在,本节我们来明确需要建模的不确定性类型。


在机器学习中,不确定性主要分为两类:
- 偶然不确定性(Aleatoric/Statistical Uncertainty):源于系统本身的随机性。例如,掷骰子的结果。即使拥有无限数据,这种不确定性也不会减少。
- 认知不确定性(Epistemic/Model Uncertainty):源于我们对正确模型知识的缺乏。例如,在悬崖边,由于没有数据,我们不知道前方是路还是深渊。这种不确定性会随着收集更多数据而减少。


在基于模型的强化学习中,导致灾难性外推错误的正是认知不确定性。我们希望模型能表达:“对于这个没见过的输入,我不确定正确的输出是什么。”


因此,我们需要建模模型参数 θ 的后验分布 P(θ | D),而不仅仅是找到一个最可能的 θ。这样,在预测时,我们可以通过对参数积分来得到下一个状态的预测分布:


公式表示:
P(s_{t+1} | s_t, a_t, D) = ∫ P(s_{t+1} | s_t, a_t, θ) P(θ | D) dθ

这个积分得到的分布,其分散程度就反映了我们所需的认知不确定性。然而,对于高维的神经网络参数空间,精确计算这个积分是难以处理的。接下来,我们将介绍两种实用的*似方法。

方法一:贝叶斯神经网络 🤖


一种理论上优雅的方法是使用贝叶斯神经网络(Bayesian Neural Network, BNN)。
在标准神经网络中,每个权重 w 是一个确定的标量值。而在贝叶斯神经网络中,每个权重都是一个概率分布(通常假设为高斯分布)。因此,整个网络表示了一个参数 θ 上的联合概率分布。
代码概念表示:
# 标准神经网络层 (简化表示)
weight = tf.Variable(initial_value) # 单个值
output = tf.matmul(input, weight)
# 贝叶斯神经网络层 (概念表示)
weight_mean = tf.Variable(initial_mean) # 权重的均值
weight_std = tf.Variable(initial_std) # 权重的标准差
# 每次前向传播采样一个权重实例
sampled_weight = weight_mean + tf.random.normal(shape) * weight_std
output = tf.matmul(input, sampled_weight)
进行预测时,我们从 P(θ | D) 中多次采样不同的神经网络参数集,得到多个预测结果。这些预测结果的分布就反映了模型的不确定性。
由于对所有权重进行完整的联合分布建模非常困难,实践中常使用*均场(Mean-Field) 等变分*似方法,即假设所有权重之间相互独立。虽然这是一个较强的假设,但它使得计算变得可行。
以下是关于贝叶斯神经网络的经典参考文献:
- Weight Uncertainty in Neural Networks (Blundell et al.)
- Concrete Dropout (Gal et al.)


贝叶斯神经网络是获取不确定性感知模型的一种合理选择。不过,在基于模型的强化学习实践中,下面这种方法通常更简单、有效。



方法二:自助法集成模型 🎲

本节我们将重点介绍一种在实践中非常有效且更易于实现的方法:自助法集成模型(Bootstrap Ensemble)。
其核心思想非常直观:与其训练一个神经网络,不如训练多个(例如5-10个)神经网络,并让它们在某些方面有所差异。理想情况下,这些模型在训练数据上表现相似且准确,但在训练数据之外的区域会犯不同的错误。这样,模型集合对某个输入的预测的离散程度,就可以作为不确定性的估计。
从数学上看,这相当于用一组狄拉克δ函数(Dirac Delta)的混合来*似参数后验分布 P(θ | D):

公式表示:
P(θ | D) ≈ (1/K) * Σ_{k=1}^{K} δ(θ - θ_k)
其中,θ_k 是第 k 个集成成员的参数,K 是集成模型的数量。

进行预测时,我们只需对每个模型的输出概率进行*均:
P(s_{t+1} | s_t, a_t, D) ≈ (1/K) * Σ_{k=1}^{K} P(s_{t+1} | s_t, a_t; θ_k)
重要提示: 在连续状态空间中,这是对概率分布的*均,而不是对预测的状态值的*均。如果每个模型输出一个高斯分布,那么集成模型的输出是一个高斯混合模型(GMM),而不是一个具有*均均值和方差的高斯分布。


那么,如何训练这个集成模型,使其成员具有多样性呢?经典统计学工具是自助法(Bootstrap)。


以下是使用自助法训练集成模型的步骤:


- 假设我们有一个包含
N个样本的原始数据集D。 - 对于集成中的每一个模型
k,我们通过有放回地随机采样N次,从D中生成一个新的数据集D_k。这意味着D_k中有些样本可能出现多次,有些可能一次也不出现。 - 用数据集
D_k独立地训练第k个模型。

理论上,这种方法为每个模型提供了略有不同但同分布的数据集,从而诱导出参数的多样性。


然而,在深度学习的实践中,有一个更简单的发现: 由于随机权重初始化和随机梯度下降(SGD)的随机性,即使所有模型都在完全相同的数据集 D 上训练,只要它们的初始化不同,最终也会收敛到不同的局部最优解,从而产生足够的多样性。因此,在实践中,我们通常可以省略“有放回采样”这一步,直接使用相同的数据集训练多个独立初始化的模型,这大大简化了实现。


实现自助法集成模型的关键步骤:
- 随机初始化
K个相同的神经网络模型。 - 使用相同的数据集,分别独立训练这
K个模型。 - 预测时,收集所有
K个模型的输出,其预测分布的方差或离散度即为不确定性的度量。



总结 📚

本节课我们一起学习了如何为基于模型的强化学习构建不确定性感知的动态模型。



- 我们首先分析了为什么简单地使用神经网络输出分布的熵或方差是无效的,因为它捕捉的是偶然不确定性,而非我们需要的认知不确定性。
- 我们明确了目标是建模模型参数的后验分布
P(θ | D),通过对参数积分来得到稳健的预测。 - 我们介绍了两种*似方法:
- 贝叶斯神经网络:将网络权重变为分布,直接建模参数的不确定性,理论完备但实现复杂。
- 自助法集成模型:训练多个模型,用其预测的离散度来估计不确定性。这种方法简单、高效,且在实践中最常使用。我们详细讨论了其原理和简化后的实现方式。


掌握这些不确定性量化方法,是构建能够安全、高效进行规划的基于模型强化学习算法的关键一步。
课程 P48:CS 285 第11讲,第4部分 - 考虑不确定性的模型预测控制 🧠
在本节课中,我们将学习如何在基于模型的强化学习(Model-Based RL)中,利用考虑不确定性的模型进行决策规划。我们将介绍一个具体的评估流程,并通过实际研究案例来展示其重要性。
上一节我们介绍了如何训练考虑不确定性的模型。本节中,我们来看看如何利用这些模型进行控制决策。
假设我们已经通过Bootstrap集成等方法,训练好了考虑不确定性的模型。现在,我们希望在基于模型的强化学习(例如MBRL 1.5算法)中使用它来做出决策。
在规划时,我们优化的目标是最大化从时间 t=1 到规划时域 H 的累积奖励之和。状态转移由模型 f 决定。现在,我们拥有 N 个可能的模型。
我们想要做的事情是:选择一系列从 1 到 H 的动作 a_{1:H},使其在所有可能模型上*均的累积奖励最大化。
因此,我们的目标函数变为对所有模型 i 求*均,再对时间步 t 求和,计算每个模型预测出的状态所对应的奖励。
如果我们学习到的是确定性模型的分布(例如Bootstrap集成),情况就是如此。如果你有随机模型,那么对于每个模型,你还需要对其内部的随机性取期望。
以下是评估一个候选动作序列 a_{1:H} 期望奖励的一般流程:
- 采样模型:从模型参数的后验分布
p(θ | D)中采样一个模型参数θ^i。对于Bootstrap集成,这意味着从N个模型中随机均匀选择一个。 - 采样状态轨迹:对于每个时间步
t,根据当前状态s_t、动作a_t以及上一步采样的模型参数θ^i,从模型预测的分布p(s_{t+1} | s_t, a_t, θ^i)中采样下一个状态s_{t+1}。 - 计算轨迹奖励:对这条采样的状态轨迹,计算从
t=1到H的奖励总和R^i = Σ_{t=1}^{H} r(s_t, a_t)。 - 重复与*均:重复步骤1到3多次,将所有采样得到的奖励
R^i取*均,作为该动作序列的期望奖励估计。
这个流程适用于任何能表示后验分布 p(θ | D) 的模型。如果你只有少数几个模型(如小型集成),也可以直接对所有模型求和而非采样,这样更简单。对于贝叶斯神经网络等其他方法,你可以采样不同的参数向量来估计奖励。
当然,这不是唯一的选择。这是一种通过采样来评估奖励的程序。你也可以设想其他方法,例如在每个时间步评估每个模型可能的下一个状态,然后进行矩匹配(如估计均值和方差)来*似真实的状态分布 p(s_{t+1})。但上述采样方法是一个简单直接的起点。
在能够评估每个候选动作序列的期望奖励之后,你就可以使用随机采样射击(Random Shooting)或交叉熵方法(CEM)等优化方法来寻找最优动作序列。也可以将LQR等连续优化方法适配到这个设置中,这时“重参数化技巧”(Reparameterization Trick)会非常有用,我们将在后续课程中讨论。
请花点时间理解这个流程,如果你想实现考虑不确定性的基于模型强化学习,这是一张非常重要的幻灯片。
这个基本方案有效吗?让我们看一些研究实例。
下图来自论文《Deep Reinforcement Learning in a Handful of Trials》。在半猎豹(HalfCheetah)任务中,标准的MBRL 1.5算法能将奖励从零提升到约500。

而当我们使用Bootstrap集成来实施认知不确定性(Epistemic Uncertainty)估计后,基于模型的强化学习能在相*的时间内获得超过6000的奖励。这表明,尤其是在数据稀缺的情况下,认知不确定性估计对性能有巨大影响。

另一个更*期的例子是使用模型集成(Ensemble)的基于模型强化学习方法,并且是在真实机器人上进行的实验。


在这个实验中,机械手学习在掌心操控物体。它使用了MBRL 1.5算法、一个复杂的模型以及用于不确定性估计的模型集成。通过大约三小时的直接交互学习,机械手可以完成物体在掌心的180度旋转;四小时后,操作已相当可靠。这再次证明不确定性估计是有效的,并且对这些基于模型的方法至关重要。
因此,如果你想实现基于模型的强化学习,强烈建议考虑认知不确定性估计。


如果你想了解更多关于认知不确定性与基于模型强化学习的内容,可以参考以下论文:
- PILCO:这篇较早的论文(约2011年)使用高斯过程而非神经网络学习模型。它是奠定认知不确定性估计在基于模型强化学习中重要性基础的工作,并很好地讨论了其原理。
- MBRL with Ensembles:这篇论文引入了模型集成,成功地在HalfCheetah等任务上取得了与无模型强化学习相媲美的结果。如果你对结合模型与不确定性的前沿工作感兴趣,这篇论文值得一读。

本节课总结

本节课我们一起学习了如何将考虑不确定性的模型用于控制规划。核心是通过采样模型和状态轨迹来估计候选动作序列的期望奖励,其流程可概括为:采样模型 → 采样轨迹 → 计算奖励 → 重复*均。我们通过研究案例看到,引入认知不确定性估计能显著提升基于模型强化学习在数据效率与最终性能上的表现,尤其是在复杂或数据稀缺的任务中。这是实现高效、鲁棒基于模型强化学习的关键技术之一。
课程 P49:基于图像的模型强化学习 🖼️🤖
在本节课中,我们将学习如何将强化学习应用于图像观察。我们将探讨处理高维、部分可观察的图像数据所面临的挑战,并介绍两种核心方法:学习潜在状态空间模型和直接在图像空间学习动态模型。
概述
基于图像的强化学习面临几个核心挑战。图像的维度非常高,这使预测变得困难。图像包含大量冗余信息。此外,基于图像的任务通常是部分可观察的,即仅凭单帧图像可能无法获知完整状态信息。因此,我们通常需要在部分可观察马尔可夫决策过程的框架下处理问题。
部分可观察马尔可夫决策过程
上一节我们概述了挑战,本节中我们来看看部分可观察马尔可夫决策过程的模型。其图形模型包含以下部分:给定前一状态和动作的下一状态分布 p(s_{t+1} | s_t, a_t),以及给定状态的观察分布 p(o_t | s_t)。在基于图像的强化学习中,我们已知观察 o_t 和动作 a_t,但不知道真实状态 s_t。
我们的目标是学习状态空间中的转移动态 p(s_{t+1} | s_t, a_t)。然而,由于状态 s 未知,我们或许可以分别学习观察模型 p(o_t | s_t) 和动态模型 p(s_{t+1} | s_t, a_t)。这种分离有其优势:观察模型处理高维图像,而动态模型则专注于状态间的时序关系。
潜在状态空间模型
上一节我们介绍了POMDP框架,本节中我们来看看如何构建潜在状态空间模型。这类模型有时也被称为潜在空间模型。
以下是模型需要学习的核心组件:
- 观察模型:
p(o_t | s_t),描述潜在状态如何生成图像观察。 - 动态模型:
p(s_{t+1} | s_t, a_t),描述潜在状态在动作影响下的转移。 - 奖励模型:
p(r_t | s_t, a_t),由于奖励通常依赖于状态,而状态未知,因此也需要学习奖励模型。
训练目标与挑战
在标准的完全可观察模型中,我们通过最大化对数似然 log p(s_{t+1} | s_t, a_t) 来训练。对于潜在状态空间模型,我们需要同时最大化 log p(o_t | s_t) 和 log p(s_{t+1} | s_t, a_t) 的期望。
核心问题在于我们不知道真实状态 s。因此,我们必须使用期望对数似然作为目标,期望是在给定所有观察和动作的条件下,对未知状态的后验分布 p(s_t, s_{t+1} | o_{1:t}, a_{1:t}) 上取得的。
*似后验分布
为了估计这个期望,我们需要一个能计算状态后验分布的算法。我们通过学习一个参数化的*似后验分布 q_ψ(s_t | ...) 来实现,这个网络通常被称为编码器。
以下是几种不同的后验分布选择:
- 全*滑后验:
q_ψ(s_t | o_{1:T}, a_{1:T})。这是最准确但也最难学习的后验,它利用了整个轨迹的信息。 - 一步编码器:
q_ψ(s_t | o_t)。这是最简单的后验,仅根据当前观察猜测状态,但准确性最低。 - 滤波后验:
q_ψ(s_t | o_{1:t}, a_{1:t})。这是一个折中的选择,利用到当前时刻为止的历史信息。
选择哪种后验取决于问题的部分可观察性程度。如果问题接*完全可观察,一步编码器是简单有效的选择。如果部分可观察性严重,则需要更接*全*滑的后验。
确定性编码器的简化情况
为了阐述的简单性,我们聚焦于一步编码器的一个特例:确定性编码器。如果我们相信问题几乎完全可观察,可以假设状态是观察的确定性函数:s_t = g_ψ(o_t)。
使用确定性编码器后,期望运算消失,训练目标简化为同时最大化以下两项:
- 动态一致性:
log p_φ( g_ψ(o_{t+1}) | g_ψ(o_t), a_t )。这强制编码后的状态遵守学习到的动态。 - 自编码重建:
log p_φ( o_t | g_ψ(o_t) )。这确保编码后的状态能够重建原始观察。
目标函数 J(φ, ψ) 可以写为对所有轨迹和时间的求和:
J(φ, ψ) = Σ_i Σ_t [ log p_φ( g_ψ(o_{t+1}) | g_ψ(o_t), a_t ) + log p_φ( o_t | g_ψ(o_t) ) ]
我们可以通过反向传播同时优化模型参数 φ 和编码器参数 ψ。如果动态是随机的,则需要使用重参数化技巧,这将在后续课程中讨论。

算法整合与应用


上一节我们构建了潜在状态空间模型,本节中我们来看看如何将其整合到基于模型的强化学习算法中,并查看实际应用。

整合过程相当直接。我们可以将其插入之前讨论的基于模型的RL算法(如算法1.5)中:
- 运行基线策略
π_0收集包含(o_t, a_t, o_{t+1})元组的数据集D。 - 训练动态模型、奖励模型、观察模型和编码器。
- 通过模型进行规划(例如反向传播),选择能最大化预期奖励的动作。
- 执行第一个规划动作,观察结果
o‘,并将该转移添加到D。 - 重复步骤3-4进行内部规划循环。
- 每隔N步,收集更多数据,重新训练所有模型,进行外部数据收集循环。



实际应用示例

文献中有许多成功应用潜在状态空间模型的例子:
- “Embed to Control”论文:在2D导航和倒立摆任务中,学习到的状态空间呈现出与任务物理结构对应的低维嵌入。
- 局部线性正则化模型:将状态空间模型正则化为局部线性,使其非常适合迭代LQR等规划器。该方法已成功应用于机器人叠乐高块、推杯子等需要图像输入的任务。经过约20分钟的训练,机器人就能学会执行这些任务,显示出比无模型方法更高的样本效率。
直接在图像空间学习模型

到目前为止,我们讨论了学习潜在状态空间模型的方法。但如果我们放弃学习显式的潜在状态,直接回到原始的基于模型的强化学习配方,直接在观察(图像)空间学习动态模型,结果会怎样?

我们可以直接学习 p(o_{t+1} | o_t, a_t)。如果存在部分可观察性,我们可能需要使用循环模型,使预测也依赖于历史观察 o_{t+1} = f(o_{1:t}, a_{1:t})。
研究表明,直接在图像空间中建模动态可以取得相当好的效果。例如,在一项机器人操控任务中,模型能够准确预测机械臂动作对场景中多个物体产生的复杂影响,并成功完成如抓取订书机等任务。对于包含数十个物体的复杂场景,学习一个紧凑的潜在空间可能非常困难,而直接进行图像预测反而更可行。

总结
在本节课中,我们一起学习了基于图像的模型强化学习。我们首先分析了处理图像数据时面临的高维度和部分可观察性挑战。接着,我们深入探讨了潜在状态空间模型,它通过学习一个编码器将图像映射到低维潜在状态,并分别训练观察模型和动态模型。我们讨论了使用确定性编码器的简化训练过程。然后,我们看到了如何将这种模型整合到标准的基于模型的RL算法中,以及它在机器人任务中的成功应用。最后,我们了解到,另一种可行的方案是直接在图像空间学习动态模型,这种方法在处理复杂场景时可能更具优势。两种方法各有千秋,选择取决于具体任务的特性和需求。

P5:p5 CS 285 课程第二讲:模仿学习(第二部分)🤖
在本节课中,我们将深入探讨行为克隆(Imitation Learning)效果不佳的正式数学解释。我们将通过分析“分布漂移”问题,理解为什么即使策略在训练数据上表现良好,在实际应用中也可能累积错误。最后,我们将简要介绍解决此问题的一种思路。
行为克隆的挑战:分布漂移 📉
上一节我们介绍了行为克隆的基本概念。本节中,我们来看看为什么行为克隆在实践中常常效果不佳。核心问题在于“分布漂移”。

我们有一个策略 π_θ(a_t | o_t),它使用人类演示数据(分布 p_data(o_t))进行训练。然而,当策略实际运行时,它观察到的状态分布是 p_π_θ(o_t)。由于策略的行为与人类不完全相同,这两个分布并不相等,即 p_data(o_t) ≠ p_π_θ(o_t)。
在监督学习中,我们训练策略以最大化在 p_data(o_t) 分布下人类行动的对数概率。但策略的真实性能,取决于它在自身运行时的分布 p_π_θ(o_t) 下的表现。这种训练分布与测试分布之间的不匹配,就是分布漂移。正是策略自身犯下的错误,导致了这种偏移。
定义策略的“好坏” 🎯
为了分析行为克隆,我们需要一个更合适的度量标准来衡量策略的好坏,而不仅仅是训练数据的似然度。
我们可以定义一个成本函数 c(s, a):
- 如果行动 a 与专家(人类)策略 π*(s) 的行动一致,则成本为 0。
- 否则,成本为 1。

这样,总成本就*似等于策略犯错的次数。我们的目标是最小化策略在自身产生的状态分布 p_π_θ(s_t) 下的期望成本,而不是在专家数据分布 p_data(s_t) 下的成本。这是分析中的关键区别。
一个反例:走钢丝的人 🧗
为了直观理解问题有多严重,我们构造一个简单的反例。
假设一个“走钢丝”问题:在每个状态,只有一个正确的动作(保持在钢丝上)。如果犯任何错误,就会“掉下钢丝”,进入一个专家演示中从未出现过的状态。因此,一旦犯错,后续所有步骤都可能继续犯错,因为策略不知道在新状态下该怎么做。
我们假设策略在训练见过的状态上,犯错的概率 ≤ ε(ε 是一个很小的数)。
以下是分析错误累积的过程:
- 第一步:犯错概率为 ε。如果犯错,则剩余 T-1 步都会犯错。
- 第二步:以 1-ε 的概率第一步未犯错。此时第二步犯错概率为 ε,如果犯错,则剩余 T-2 步都会犯错。
- 以此类推...
将所有这些可能情况下的期望错误数相加,我们会得到总期望错误数约为 O(ε T²)。这意味着错误数量随轨迹长度 T 呈二次方增长,这是非常糟糕的。我们期望的是一个线性增长 O(ε T),这样策略才能长期运行。
这个例子表明,在最坏情况下,行为克隆的错误累积是灾难性的。

一般性分析:推导错误上界 📈
接下来,我们进行更一般化的分析,证明 O(ε T²) 不仅是特例,而且是一个上界。
我们假设:对于从训练分布 p_train(s) 中采样的任何状态,策略犯错的期望成本 ≤ ε。
我们关心在时间步 t,策略自身分布 p_π_θ(s_t) 与训练分布 p_train(s_t) 的差异。我们可以将 p_π_θ(s_t) 分解为两部分:
- 一部分是策略在前 t 步都未犯错的概率 (1-ε)^t,此时状态仍服从 p_train(s_t)。
- 另一部分是犯过错的概率 1 - (1-ε)^t,此时状态服从某个复杂分布 p_mistake(s_t)。
利用分布之间的总变分距离(Total Variation Distance)作为差异度量,经过推导(详细步骤见课程),我们可以得到不等式:
|p_π_θ(s_t) - p_train(s_t)| ≤ 2εt
这个不等式表明,随着时间步 t 增加,策略看到的状态分布会越来越偏离训练数据分布。
基于此,我们可以推导总期望成本的上界。总成本是每个时间步成本期望值的总和。通过将每个时间步的分布差异(≤ 2εt)和训练分布下的期望成本(≤ ε)代入,并对所有时间步求和,我们得到:
总期望成本 ≤ εT + Σ(2εt) = O(ε T²)
这正式证明了:在最坏情况下,行为克隆的累计错误数量将以 时间步长 T 的二次方 增长。
实践的启示与解决方案思路 💡
上述分析虽然悲观,但解释了行为克隆的固有缺陷。它也为我们指明了改进的方向。
关键在于,走钢丝的例子是“病态”的:一个小错误就导致无法恢复。在实际问题中(如驾驶),策略通常有机会从错误中恢复。
那么,如何让行为克隆更好地工作呢?核心思路是:让训练数据覆盖策略可能犯错误并恢复的情况,从而减小分布漂移。
例如,之前提到的“左右摄像头”技巧之所以有效,可能就是因为它隐式地教会了策略如何纠正偏离车道的错误(即如何从错误中恢复)。

一个更系统化的方法是 DAgger(Dataset Aggregation)算法:
- 使用初始专家数据训练一个策略。
- 运行这个策略,收集它产生的(可能包含错误的)轨迹。
- 请专家为这些新状态提供正确的行动标签。
- 将新标注的数据加入训练集,重新训练策略。
- 重复步骤2-4。
DAgger 的核心思想是主动让训练分布 p_train 逼*策略分布 p_π_θ。当 p_train ≈ p_π_θ 时,我们之前分析中的分布差异项将大大减小,总期望成本可以降至 O(ε T),即线性增长。

总结 🎓

本节课我们一起学习了行为克隆的局限性及其数学根源。
- 核心问题:分布漂移。策略在自身运行时的状态分布,会偏离其训练时的专家数据分布。
- 数学后果:在最坏情况下,累计错误数以轨迹长度 T 的二次方 O(ε T²) 增长,这通过“走钢丝”反例和一般性上界推导得到了证明。
- 关键洞察:纯粹依赖完美专家数据的“行为克隆”是脆弱的。要提高模仿学习的鲁棒性,需要让策略学习如何从错误中恢复。
- 解决方向:通过像 DAgger 这样的算法,主动收集策略在运行中遇到的状态并重新标注,可以迫使训练分布覆盖策略的实际分布,从而将错误增长控制在线性范围 O(ε T),显著提升性能。


理解这一分析框架,不仅有助于我们认识模仿学习的挑战,也为后续学习更高级的强化学习算法奠定了基础。

📚 课程 P50:基于模型的强化学习策略篇
在本节课中,我们将学习如何利用学习到的环境模型来训练一个全局策略(例如神经网络),从而实现完整的基于模型的强化学习。我们将探讨直接通过模型反向传播优化策略所面临的挑战,并介绍当前更有效的解决方案。

🧠 回顾:基于模型的强化学习 1.5 版
上一节我们介绍了结合模型预测控制的基于模型强化学习方法,我们将其称为版本 1.5。
它的工作流程如下:
- 使用初始策略(如随机策略)收集数据。
- 训练一个动力学模型
f(s_t, a_t)。 - 使用该模型,通过某种规划方法(如随机打靶法)选择动作序列。
- 执行计划中的第一个动作,观察新状态,并将该状态转移
(s_t, a_t, s_{t+1})存入数据缓冲区。 - 在每个时间步都基于最新模型重新规划,以补偿模型误差。
- 每隔几个时间步或几条轨迹后,使用新收集的数据重新训练模型。
这种方法的优点是能够利用最优控制领域的规划程序。然而,它有一个主要缺点:大部分规划方法(尤其是随机打靶法)是开环的。这意味着它们优化的是给定动作序列的期望奖励,而不是一个根据状态做出反应的策略。
🔄 从开环控制到闭环策略
为了克服开环控制的局限性,我们需要转向闭环控制。在闭环情况下,智能体不是承诺一系列动作,而是承诺一个策略 π(a|s)。这个策略会在任何状态下选择动作,其目标与原始强化学习问题完全一致。
如果我们能开发有效的闭环控制算法,它就能解决开环方法无法处理的问题。例如,在一个两阶段的数学测试问题中,开环规划者因为无法提前看到题目而选择放弃考试;而闭环策略可以在观察到题目后给出正确答案,因此会选择参加考试。

这里的一个关键选择是策略 π 的形式。在无模型强化学习中,π 通常由表达能力强的函数逼*器(如神经网络)表示,这能提供全局有效的策略。而上周讨论的最优控制方法(如迭代LQR)虽然能产生线性反馈控制器,但只在局部邻域内有效。

因此,本节课的核心是:探讨如何利用学习到的模型来训练一个全局有效的策略(如神经网络)。
🤖 基于模型的强化学习 2.0 版:一个简单的设想
如果我们对强化学习一无所知,只想运用熟悉的深度学习工具(反向传播和梯度优化)来最大化总奖励 ∑ r(s_t, a_t),我们可能会构建如下计算图:
- 策略函数:
a_t = π_θ(s_t) - 动力学模型:
s_{t+1} = f_φ(s_t, a_t) - 奖励函数:
r_t = r(s_t, a_t)
我们可以将总奖励作为损失函数(取负号),通过反向传播计算梯度,并优化策略参数 θ。对于确定性系统或某些随机系统(如使用重参数化技巧的高斯模型),这完全可以实现。

基于此,我们可以构想一个“版本 2.0”的算法:
- 运行基础策略收集初始数据集
D。 - 在
D上训练动力学模型f_φ。 - 构建上述计算图,通过反向传播优化策略参数
θ以最大化奖励。 - 运行更新后的策略
π_θ,将新数据加入D。 - 重复步骤 2-4。
⚠️ 为什么直接优化常常失败?


这个看似合理的方法存在一个根本性问题:梯度传播的数值不稳定性。


在长序列中,早期时间步的动作通过动力学模型 f_φ 的多次复合,对最终奖励产生巨大影响。这导致:
- 梯度爆炸或消失:从最终奖励反向传播到早期策略参数的梯度,涉及许多雅可比矩阵
∂f/∂s和∂f/∂a的连乘。除非这些矩阵的特征值都接* 1,否则梯度会指数级地增大(爆炸)或减小(消失)。 - 病态优化问题:不同时间步的参数接收到量级差异巨大的梯度,使得优化问题的条件数很差,难以用一阶梯度方法有效求解。
这与训练普通循环神经网络(RNN)时遇到的“梯度消失/爆炸”问题本质相同。然而,在基于模型的 RL 中,我们无法像设计 LSTM 那样去设计动力学模型 f_φ 的结构以稳定梯度,因为 f_φ 必须尽可能拟合真实环境动态,而真实动态可能本身就具有高曲率。
虽然理论上可以使用二阶优化方法改善,但对于大型神经网络而言,它们通常难以实施且不稳定。
💡 当前有效的解决方案:将模型用作模拟器
既然通过长时程模型链直接优化策略参数非常困难,那么当前的解决方案可能令人惊讶:不直接使用模型的梯度,而是将学习到的模型当作一个“模拟器”来生成合成数据。
具体而言,我们可以:
- 用学习到的模型
f_φ来“想象”或“滚动出”许多额外的轨迹。 - 将这些模型生成的轨迹与实际交互数据一起,用于训练无模型强化学习算法(如策略梯度、演员-评论家、Q-learning 等)。
这本质上是一种“基于模型的、加速无模型强化学习”的范式。 模型的作用是提供更多、更廉价的数据,从而帮助无模型算法更快、更高效地学习策略。

🎯 本节总结
本节课我们一起学习了:
- 回顾了基于模型 RL 1.5 版(开环规划)的优缺点,并指出了转向闭环策略的必要性。
- 探讨了直接通过模型反向传播来优化策略参数(版本 2.0 设想)的直观想法。
- 分析了该方法失败的核心原因:通过长序列模型链反向传播会导致梯度不稳定和病态优化问题,且难以像 RNN 那样通过结构设计来解决。
- 引出了当前更可行的路径:将学习到的模型作为数据模拟器,用于加速无模型强化学习算法。

在接下来的部分,我们将深入探讨如何具体实现这种“模型作为模拟器”的算法。

课程 P51:基于模型的强化学习(含策略)🚀
在本节课中,我们将学习如何将无模型强化学习方法与学习到的环境模型结合使用,即基于模型的强化学习。我们将探讨两种主要的梯度估计方法,分析其优缺点,并最终介绍一种在实践中更稳定、更高效的算法框架。
概述 📖
基于模型的强化学习核心思想是:先利用数据学习一个环境动态模型,然后基于这个模型来优化策略,从而减少与真实环境交互的高昂成本。本节将重点讨论如何将无模型RL中的策略梯度方法应用于学习到的模型上,并分析由此带来的挑战与解决方案。
策略梯度与路径导数梯度 🔄
上一节我们介绍了基于模型RL的基本概念。本节中,我们来看看两种计算策略参数梯度的核心方法:策略梯度(无模型)和路径导数梯度(基于模型)。
策略梯度(似然比估计器)
策略梯度是一种无模型强化学习算法,它也可以被视为一个通用的梯度估计器。其公式不显式包含环境转移概率,这是其关键优势。
策略梯度公式:
∇θ J(θ) ≈ (1/N) Σ Σ ∇θ log πθ(at|st) * Q(st, at)
这个估计器通过采样来工作,样本可以来自真实环境,也可以来自学习到的模型。它不需要知道环境动态的导数。


路径导数梯度(反向传播梯度)
另一种方法是沿着采样轨迹进行反向传播,计算梯度。这被称为路径导数梯度,它直接应用链式法则。

路径导数梯度公式(简化概念):
∇θ J(θ) 涉及 Σ [∂a/∂θ * (∂s'/∂a * (∂R/∂s' + ...))]

这个表达式包含了状态对动作的导数(∂s‘/∂a)和状态对前一个状态的导数(∂s’/∂s)等雅可比矩阵的连乘。

核心问题:
当这些雅可比矩阵的特征值大于1时,连乘会导致梯度爆炸;特征值小于1时,则会导致梯度消失。这使得路径导数梯度在长周期问题上难以处理。
两者对比:
- 策略梯度:避免了雅可比矩阵的连乘,但需要大量采样来获得低方差估计。
- 路径导数梯度:理论上更精确,但存在数值不稳定的风险。
在基于模型的RL中,由于从模型中采样成本较低,我们可以承受生成大量样本,这使得策略梯度方法相比路径导数梯度可能更具吸引力。



基于模型的RL算法 v2.5 🧪
基于以上分析,我们可以设计一个结合了学习模型和策略梯度的算法。以下是该算法的步骤:
- 运行策略收集数据:在真实环境中执行当前策略,收集状态-动作-奖励数据。
- 学习动态模型:利用收集到的数据,训练一个环境动态模型
fφ(s, a)。 - 模型内策略优化:
- 使用学习到的模型
fφ和当前策略πθ采样生成大量模拟轨迹。 - 利用这些模拟轨迹,通过策略梯度(或演员-评论家方法)更新策略参数
θ。 - 此步骤可重复多次,无需与真实环境交互。
- 使用学习到的模型
- 重复:当模型内策略优化到一定程度后,返回步骤1,用更新后的策略在真实环境中收集新数据,并重新训练模型。
这个版本解决了路径导数梯度中的数值不稳定问题,但它仍然面临一个根本性挑战。
分布偏移与误差累积 ⚠️
上一节我们介绍了算法v2.5,但它存在一个关键问题:分布偏移。

当我们在学习模型 fφ 中执行策略 πθ 时,模型微小的预测误差会导致下一个状态与真实情况略有偏差。策略在这个略有偏差的状态下会做出决策,进而导致更大的误差。这种误差会随着模拟步数(滚动范围)的增加而累积增长。
研究表明,在最坏情况下,误差随滚动步数 t 按 O(εt²) 的速度累积。这意味着:
- 长滚动范围:虽然能评估长期回报,但累积误差大,模拟结果不可信。
- 短滚动范围:累积误差小,但无法评估需要长周期才能完成的子任务。

这形成了一个两难困境。

基于模型的RL算法 v3.0 🏆

为了解决分布偏移和误差累积问题,现代基于模型的RL算法采用了一个核心技巧:从真实数据中采样起始状态,然后进行短滚动模拟。
以下是该算法的核心步骤:
- 收集真实数据:在真实环境中运行策略,收集完整轨迹数据集
D。 - 训练动态模型:使用数据集
D训练模型fφ。 - 生成模拟数据:
- 从真实数据集
D中均匀采样一批状态s。 - 从每个采样状态
s开始,使用当前策略πθ和学习模型fφ进行短滚动模拟(例如,1-10步)。 - 将模拟得到的数据(状态、动作、奖励)存入模拟数据集
Dmodel。
- 从真实数据集
- 策略优化:混合使用真实数据
D和模拟数据Dmodel,通过离线强化学习方法(如Q-learning、演员-评论家)来优化策略和价值函数。模拟数据量通常远大于真实数据量。 - 重复:用优化后的策略回到步骤1,收集新的真实数据。
这种设计的优势:
- 控制误差:极短的滚动范围将模型误差累积控制在很低水*。
- 覆盖长期视野:由于起始状态是从整个真实轨迹中均匀采样的,因此模拟数据也能反映任务中、后期的状态分布。
- 高效利用数据:在数据收集周期之间,可以利用模型生成大量数据,大幅提升策略优化效率。

需要注意:在步骤4中,由于优化策略与收集真实数据的策略可能不同,会引入策略分布偏移。因此,通常需要配合使用能够处理分布偏移的离线RL算法。

总结 🎯

本节课我们一起学习了基于模型的强化学习中策略优化的核心思路:

- 我们比较了策略梯度和路径导数梯度,指出在基于模型的设定下,通过大量采样来避免雅可比连乘的策略梯度方法可能更稳定。
- 我们发现了直接使用学习模型进行长周期规划会导致分布偏移和误差累积的关键问题。
- 最终,我们介绍了现代高效的基于模型的RL算法v3.0,其核心是从真实数据中采样状态进行短滚动模拟,并结合离线强化学习方法进行策略优化,从而在控制误差的同时实现了数据的高效利用。

在接下来的课程中,我们将深入探讨这些算法的具体实现细节和系统架构。
课程 P52:基于模型的策略强化学习 🧠
在本节课中,我们将学习如何构建基于模型的强化学习算法。我们将从一个经典算法 Dyna 开始,探讨其核心思想,并了解其现代变种如何通过结合模型生成的合成数据来提升样本效率。课程将涵盖算法的设计决策、工作流程以及潜在的优缺点。
1. 核心设计理念与算法概述
上一节我们介绍了基于模型强化学习的基本框架。本节中我们来看看如何将其转化为具体的算法。
我们有许多设计决策需要作出才能将这种方法转化为现实。对于这个讲座的部分讨论,我们将在第四个步骤中使用基于Q学习的特定离线策略。我想强调的是,我所要讨论的一切都可以用Q函数演员批评方法实现,并且它基本上以相同的方式工作。
我们可以通过回忆在讨论Q学习时,我们谈论了如何训练演员作为学习最大化者,这基本上看起来与Q学习相似。这就是我们在这里要遵循的逻辑。
经典的算法,据我所知,首先提出这个基本概念的方法是被称为 Dyna 的东西,由理查德·苏顿在九十年代描述的。Dyna 是这个种类食谱的特定版本,为在线Q学习实例化的,使用了非常短的基于模型的回滚。它使用了基于模型的回滚,长度正好是一步。即使这样,如果你能学习到一个好模型,这也将提供显著的好处。
所以本质上,Dyna 是在线Q学习,它通过模型进行无模型强化学习。
2. Dyna 算法详解
以下是 Dyna 算法的工作方式,它将非常遵循在线Q学习,但是稍作修改。
- 第一步:使用探索策略选择动作
a。这与在线Q学习完全相同。 - 第二步:观察导致下一个状态
s'和奖励r的过渡元组(s, a, s', r)。 - 第三步:使用此过渡元组更新你的模型和奖励函数。在经典的 Dyna 中,模型和奖励函数都将以一步更新。如果是表格模型,你可能会删除表格中的旧值,以学习率的一些倍数更新为新值。
- 第四步:执行经典的 Q 学习更新。这是对你刚刚观察到的过渡的 Q 学习更新。
- 第五步:重复以下基于模型的程序
k次(k是超参数):- 从缓冲区中采样一些旧的状态动作
(s, a)。 - 使用学习到的模型模拟下一个状态
s'和奖励r。 - 使用模拟出的
(s, a, s', r)元组再次执行 Q 学习更新。
- 从缓冲区中采样一些旧的状态动作
这里的表达式与以前更新的 Q 函数完全相同,除了 s' 和 r 现在来自学习模型 P_hat 和 r_hat。
3. 设计决策与 Dyna 的泛化
Dyna 过程经典地做出了一些设计选择,那些选择不一定要固定不变。
- Dyna 使用缓冲区中的状态和动作。一个非常合理的替代方案是按照最新的策略(例如,那个 Q 函数的
argmax策略)选择动作。 - Dyna 只在模型上做一步。你现在可以做多步。
- Dyna 在设计上稍微优化了高度随机的系统。对于确定性的系统,如果你将相同的状态和动作通过模型运行,你应该得到之前看到的
s'。但对于随机系统,这实际上会产生影响。
所以 Dyna 做出了一些可能稍微奇怪的决定,也许不能从模型的最大性能中挤出所有。这些决定对于预期模型对分布变化非常敏感的情况是好的,因为它实际上避免了所有分布变化问题。在某种统计意义上,这实际上是一个非常安全的算法。

但我们可以推导出 Dyna 的一般化版本,这更接*人们实际使用的。我们可以称它为 Dyna 风格 的方法,因为它遵循类似的哲学。
以下是其一般化的形式:
- 收集包含过渡的数据。这可能只是一个步骤,或者你可能正在滚动许多轨迹。
- 学习你的模型。可选择性地学习你的奖励模型。有时奖励模型是已知的,但是有时你需要学习它。
- 进行大量的基于模型的学习。基于模型的学习的每一步都涉及:
- 从缓冲区中采样一些你见过的状态。
- 在这些状态下选择一些动作(你可以选择是否从那个缓冲区中选择这个动作,还是从你最新的策略中,甚至使用一些探索策略,甚至完全随机)。
- 从你的模型中模拟下一个状态。如果你不知道奖励,然后模拟来自你奖励模型的奖励。并且有可能为多个步骤立即这样做。
- 使用此模拟数据来训练你的无模型 RL 算法(例如,使用模拟数据训练你的 Q 学习算法)。
这是对 Dyna 程序的一种一般化。之前它只需要从模型中获取短滚动,也许只需要一步。因为它仍然访问各种类型的状态,因为你直接从缓冲区中采样那些滚动的起始状态。
存在一类基于现代模型的强化学习算法,所有这些算法本质上都是这种基本食谱的变种。
4. 系统架构与工作流程
当我以这种文本形式的方式描述这种食谱时,可能会很难理解所有成分都在做什么。所以我想展示这种方法的更直观的视图。
让我们回到深度 Q 学习的图表,作为一个并行过程的集合。我们有一个过程从环境中收集数据,并将数据推入缓冲区。有一个过程会从缓冲区中删除旧的数据。有一个过程会更新目标网络的参数。有一个过程通过从回放缓冲区加载批次数据来执行 Q 函数回归,并更新当前参数。
现在,我们可以将这个流程图和基于模型的加速添加到这个中。这就是前一张幻灯片上的基本过程,只是图形化它:
- 模型训练过程:从真实过渡的缓冲区中加载过渡,使用真实过渡来训练你的模型。
- 模型数据收集过程:从你的缓冲区中采样一个状态,使用你的训练模型,并运行一个基于模型的短期滚动。最常见的选择是使用你最新的策略(例如,执行
argmax)。然后,将从这些模型收集的过渡推入一个 基于模型的转换缓冲区。 - Q 函数训练过程:当你在做你的 Q 函数回归时,你将从基于模型的缓冲区中采样一些数据,从真实缓冲区中采样一些数据。通常你将使用更多的合成数据,因为合成数据更加丰富。

我们添加的这个基于模型的额外过程,仅仅是一种方式,用来填充我们将要使用的额外缓冲区,以便为我们的 Q 学习过程加载批处理。
5. 现代算法变种与权衡
现在,已经在文献中提出了各种算法,这些算法利用这一思想。它们在一些设计决策上略有不同,尤其是在关于用于 Q 学习过程的数据实际上如何使用的问题上。
- 我描述的程序,可能最接* 基于模型的策略优化 (MBPO)。
- 你也可以想象使用基于模型的采样来获得更好的目标值估计,但不要用它们来训练 Q 函数本身。这就是例如 基于模型的价值扩展 (MVE) 所做的。
从高层次来看,它们全都有这个基本配方:采取一些行动并观察转变,将其添加到你的缓冲样本中;从缓冲中提取一个小批量,使用它来更新你的模型;从缓冲中的一些状态,执行基于模型的回滚,行动来自你的策略;然后使用部署中的所有过渡来更新你的 Q 函数,也许结合一些真实的世界过渡。
为什么这是个好主意?
这些方法的一般好处是它们确实更样本效率。模型被用来构建比你在真实 MDP 中收集的数据更多的数据。这些额外数据被包括在 Q 学习过程中。如果模型好,那么 Q 学习将会更好。
为什么这可能是一个坏主意?
这种方法有许多额外的偏差来源。最明显的一个是你的模型可能不正确。如果你的模型不正确,那么当你执行那些基于模型的滚动时,你的策略会优化错误的东西。
我们可以通过使用一些关于模型的想法来缓解这些问题。例如,如果你使用模型的集成,额外的随机性可以帮助*均线性误差并减少剥削。
还有一个原因:当我们从缓冲状态开始这些短滚动时,那个状态分布可能非常奇怪。它既不是收集数据的策略状态分布,也不是你当前使用的最新政策状态,它是一种两者的混合。从原则上来说,它可以给你一个非常奇怪的状态分布,而且非常远离你在实践中想要的。那通常意味着你不能太久不收集更多的数据。
我们通常在与这种基于模型的方法中获得的权衡是:它们通常能够显著更快地学习,因为它们使用了基于模型的加速;但它们有时会停滞在一个较低的性能水*,因为额外的模型偏差基本上设定了一个上限。尽管在部署周期较短和精心的设计决策下,这个差距已经到很大程度上。
总结

本节课中我们一起学习了基于模型的策略强化学习。我们从经典的 Dyna 算法入手,理解了其通过结合真实经验与模型模拟来加速 Q 学习的基本思想。随后,我们探讨了如何将 Dyna 泛化为更现代的 Dyna 风格算法,并了解了其在系统层面的工作流程,包括模型训练、合成数据生成和策略更新等并行过程。最后,我们讨论了这类方法的优势(更高的样本效率)与潜在挑战(模型偏差和状态分布偏移),并简要提及了如 MBPO 和 MVE 等现代变种。掌握这些核心概念,是理解和应用高效模型强化学习算法的关键。
课程 P53:基于策略的模型强化学习 🧠
在本节课中,我们将探讨一种不同于传统模型的强化学习方法。我们将学习如何通过预测未来状态的分布来评估策略,而不是直接预测下一个状态。这种方法被称为“继任表示”或“继任特征”,它提供了一种介于价值函数和模型之间的视角,有助于更高效地评估和改进策略。

1. 从传统模型到策略评估模型 🔄
上一节我们介绍了经典的基于模型的强化学习,其核心是学习一个预测下一个状态 s_{t+1} 的模型。然而,从更宏观的算法框架来看,模型的核心作用是评估策略的好坏。只要能评估策略,我们就能改进它。
强化学习算法通常包含三个部分:
- 生成样本(橙色部分)。
- 拟合模型(绿色部分)。
- 改进策略(蓝色部分)。
模型(绿色部分)的作用是让我们能够模拟策略的执行,从而估计策略的期望回报。只要我们能计算出策略的价值函数,改进策略就有了依据。
对于一个只依赖于状态的奖励函数 r(s)(为简化讨论),策略 π 在状态 s_t 下的价值函数 V^π(s_t) 可以表示为:

V^π(s_t) = E[ Σ_{t'=t}^{∞} γ^{t'-t} r(s_{t'}) | s_t, π ]
其中,γ 是折扣因子。这个公式表明,价值是未来所有可能状态下所获奖励的折扣总和。
2. 引入“未来状态分布” 🎯
为了更清晰地理解价值函数,我们可以对上述公式进行代数变换。最终,V^π(s_t) 可以重写为:
V^π(s_t) = (1 / (1-γ)) * Σ_s [ p^π(s_future = s | s_t) * r(s) ]

这里,我们定义了一个新的分布 p^π(s_future | s_t)。它表示:从状态 s_t 开始,遵循策略 π,在未来某个(由参数为 γ 的几何分布随机确定的)时间步,最终落在状态 s 的概率(或概率密度)。

核心概念:
- 继任表示
μ^π(s_t):这是一个向量,其第i个分量μ_i^π(s_t)就等于p^π(s_future = i | s_t)。它预测了在折扣未来的状态下,你将落在每个状态的可能性。 - 价值函数计算:如果我们将所有状态的奖励也写成一个向量
R,那么价值函数就是μ^π(s_t)与R的点积(再乘以常数1/(1-γ)):V^π(s_t) = (1 / (1-γ)) * μ^π(s_t)^T · R
μ^π 是一种特殊的模型:它像模型一样预测未来状态,但又像价值函数一样进行了折扣*均。更重要的是,它依赖于策略 π,但独立于奖励函数 R。
3. 继任特征的贝尔曼方程与扩展 🧩

继任表示 μ^π 本身也服从一个贝尔曼方程,这使得我们可以用类似价值迭代的方法来学习它。其备份方程如下:
μ_i^π(s_t) = (1-γ) * 1_{s_t = i} + γ * E_{a_t∼π, s_{t+1}∼p}[ μ_i^π(s_{t+1}) ]
其中 1_{s_t = i} 是指示函数(当 s_t 等于状态 i 时为1,否则为0)。这可以看作是在一个“伪奖励”为 (1-γ)*1_{s_t = i} 的环境中进行向量化的值迭代。
然而,直接学习 μ^π 有两个挑战:
- 在高维或连续状态空间中,为每个状态维护一个分量是不现实的。
- 它可能并不比直接运行无模型RL更简单。
为了解决第一个问题,我们引入继任特征。
4. 降维:从继任表示到继任特征 📉

假设我们有一组手工设计或学习得到的特征函数 φ(s) = [φ_1(s), φ_2(s), ..., φ_n(s)]^T,其中 n 远小于状态总数。

我们定义策略 π 的继任特征 ψ^π(s_t) 为:
ψ^π(s_t) = E[ Σ_{t'=t}^{∞} γ^{t'-t} φ(s_{t'}) | s_t, π ]
换句话说,ψ^π(s_t) 是未来特征值的折扣期望向量。它可以通过特征基 φ 将继任表示 μ^π 投影到低维空间得到。
关键性质:如果奖励函数 r(s) 可以表示为这组特征的线性组合,即存在权重向量 w,使得 r(s) = φ(s)^T · w,那么策略的价值函数可以非常简单地恢复:
V^π(s_t) = ψ^π(s_t)^T · w
以下是使用继任特征进行策略评估和改进的步骤:
- 学习继任特征:使用数据(通过运行策略或离线获得)和贝尔曼备份方程来训练
ψ^π。 - 拟合奖励权重:对于给定的奖励函数,通过线性回归(最小二乘法)求解权重
w,使得φ(s)^T · w ≈ r(s)。 - 恢复价值函数:计算
Q^π(s, a) ≈ ψ^π(s, a)^T · w(对于动作依赖的版本)。 - 改进策略:根据*似的
Q^π函数,选择argmax_a Q^π(s, a)来更新策略。注意,这相当于策略迭代的一步,生成的新策略π'会优于π,但不一定是最优的。

这种方法的优雅之处在于,一旦学好了 ψ^π,对于任何能由特征 φ 线性表示的奖励函数,我们都可以通过快速计算点积来评估策略,无需重新学习模型。

5. 处理连续状态空间:基于分类器的方法 🎲
在连续状态空间中,“落在某个确切状态的概率为零”,因此我们需要处理概率密度。一个巧妙的方法是训练一个二元分类器 C(s, s_t, a_t)。
分类器任务:判断一个状态 s 是否是来自“以 (s_t, a_t) 为起点的未来状态分布”(正例),还是来自整个状态空间的均匀分布(负例)。

理论洞察:这个贝叶斯最优分类器的输出概率与我们需要的关键量——未来状态密度 p^π(s_future = s | s_t, a_t)——密切相关。具体来说,它们之间只相差一个与 s_t, a_t 无关的常数因子。在比较不同动作的价值以做出决策时,这个常数因子会被抵消。
训练方法:
- 正例:从
(s_t, a_t)开始运行策略,从几何分布中采样一个未来时间步,取该时刻的状态。 - 负例:从策略访问过的所有状态中随机采样一个状态。
- 训练:使用标准交叉熵损失训练分类器区分这两类样本。
通过这种方式,我们可以间接地估计出连续空间中的继任密度,进而用于策略评估。
总结 📚

本节课我们一起学习了一种基于策略的模型强化学习前沿思路:
- 核心转变:将模型的目标从预测“下一个状态”重新定义为预测“折扣未来状态分布”,即继任表示
μ^π。 - 核心公式:价值函数可表示为
V^π(s_t) ∝ μ^π(s_t)^T · R。这揭示了模型评估策略的本质。 - 降维实践:通过引入特征基
φ,我们将高维的μ^π投影为低维的继任特征ψ^π。当奖励函数位于同一特征空间时,可快速计算价值:V^π(s_t) = ψ^π(s_t)^T · w。 - 连续空间扩展:利用训练二元分类器来间接估计连续状态下的继任密度,解决了概率为零的难题。
- 应用与局限:该方法能高效复用模型来评估不同奖励函数下的策略,但其产生的是策略
π下的价值函数,用于策略改进时通常只能得到局部更优策略。一种改进方法是学习多个策略的继任特征,并在每个状态下选择价值最高的策略组合。

这种方法提供了模型学习的新视角,在迁移学习、快速任务适应等方面具有潜力,是当前强化学习研究中的一个活跃领域。
课程 P54:探索问题基础 🧭
在本节课中,我们将学习强化学习中的核心挑战之一:探索问题。我们将了解为什么在某些任务中,智能体难以学习到好的策略,并正式定义探索与利用的权衡。课程将从最简单的模型——多臂老丨虎丨机问题开始,逐步建立起对探索问题的理解。
概述:什么是探索问题?
上一节我们介绍了探索问题的背景,本节中我们来看看其正式定义。
探索问题与以下情况有关:任务的奖励信号稀疏或延迟,智能体必须通过尝试新行为来发现能带来高回报的动作序列。这与“利用”已知的高回报行为形成对比。
以下是探索问题的两个关键定义:
- 智能体如何发现高奖励策略。
- 智能体如何决定是尝试新行为(探索)以发现可能带来更高奖励的序列,还是继续执行已知的最佳行为(利用)。
它们本质上是同一个问题:为了发现能带来延迟高奖励的复杂行为序列,智能体必须决定何时进行探索。


探索为何困难?🤔

上一节我们定义了探索问题,本节中我们来看看它为何具有挑战性。

探索非常困难,无论是从实践上还是理论上。理论上,这是一个难以解决的问题。为了设计探索算法,我们首先需要理解“最优”探索的含义。
我们可以通过衡量策略的“遗憾”来定义探索策略的优劣。遗憾是指智能体的累积奖励与一个理论上知道环境模型的最优贝叶斯智能体所能获得的累积奖励之间的差距。
我们可以将问题设置置于一个谱系上,从理论上可解到理论上不可解:
- 多臂老丨虎丨机问题:理论上最可解。这是一步、无状态的强化学习问题。
- 上下文老丨虎丨机问题:像多臂老丨虎丨机,但包含一个状态(上下文)。
- 小型有限MDPs:可以被精确解决(如通过价值迭代),但理论可追溯性远不如老丨虎丨机问题。
- 大型/无限MDPs:深度RL真正关心的问题(如图像输入、连续状态空间)。对此,我们通常没有坚实的理论保证,但可以从简单问题的原则性方法中汲取灵感。
多臂老丨虎丨机:探索的“果蝇”模型 🎰
上一节我们了解了探索问题的难度谱系,本节中我们深入探讨其中最简单且理论最完备的模型:多臂老丨虎丨机。
多臂老丨虎丨机是探索问题的“果蝇”模型,是一种简单的模型生物。它源自赌场中的老丨虎丨机(单臂强盗)。在多臂老丨虎丨机中,你有N台老丨虎丨机(臂),每台机器在拉动时都会根据一个未知的概率分布给出随机奖励。
以下是其形式化定义:
- 每个动作(臂)
a_i的奖励服从一个由参数向量θ_i参数化的概率分布p(r | θ_i)。 - 例如,在二元奖励情况下,
θ_i可能表示获得奖励1的概率:p(r=1 | θ_i) = θ_i。 - 我们对参数
θ有一个先验信念p(θ)。
智能体的目标是通过一系列尝试,最大化其累积奖励。这可以被视为一个部分可观察的马尔可夫决策过程(POMDP),其隐藏状态是真实的 θ 向量,而智能体维护的是对 θ 的信念分布 p̂(θ)。
如何评估探索策略?——遗憾 📉
上一节我们形式化了多臂老丨虎丨机问题,本节中我们来看看如何量化评估一个探索策略的好坏。
我们使用遗憾 作为核心评估指标。遗憾衡量了你的策略与“已知环境模型的最优策略”之间的性能差距。
遗憾 R(T) 的定义公式如下:
R(T) = T * E[r | a*] - Σ_{t=1}^{T} E[r | a_t]
其中:
T是总时间步数。a*是真正具有最高期望奖励的最优动作。a_t是你的策略在第t步选择的动作。E[r | a]表示选择动作a时的期望奖励。
遗憾的第一项 T * E[r | a*]:表示一个“先知”最优策略在 T 步内能获得的期望总奖励(每次都选择最好的臂)。
遗憾的第二项 Σ E[r | a_t]:表示你的策略实际获得的期望总奖励。
因此,遗憾 R(T) 表示因未始终选择最优动作而损失的累积奖励。一个优秀的探索算法应能最小化遗憾的增长速度。
总结
本节课中,我们一起学习了强化学习中探索问题的基础。
- 我们理解了探索问题的本质:在奖励稀疏或延迟的环境中,智能体需要在利用已知知识和探索未知可能之间做出权衡。
- 我们认识到探索问题的理论难度,并引入了从多臂老丨虎丨机(最简单)到大型MDP(最复杂)的难度谱系。
- 我们深入研究了多臂老丨虎丨机这一基础模型,将其形式化为一个具有未知参数的学习问题。
- 我们引入了遗憾 作为评估探索策略的核心理论指标,它量化了智能体策略与理论最优性能之间的差距。

在接下来的课程中,我们将基于对遗憾的理解,开始介绍具体的最小化遗憾的探索算法。



CS 285 课程笔记 P55:探索算法基础 🧭



在本节课中,我们将学习多臂老丨虎丨机问题中的几种核心探索算法。这些算法虽然简单,但提供了探索问题的理论原则,并能启发我们设计更复杂的强化学习探索策略。




概述


我们将介绍三种主要的探索策略:乐观探索、后验采样(汤普森采样) 和 基于信息增益的探索。这些策略旨在解决如何在未知环境中*衡“利用已知最优动作”与“探索未知动作以获取更多信息”的经典难题。






乐观探索(上置信界算法)🚀



上一节我们介绍了多臂老丨虎丨机的基本框架,本节中我们来看看如何通过“乐观”的视角来引导探索。



在纯粹的利用模式下,最佳策略是持续选择当前*均奖励最高的动作。然而,这可能导致错过潜在更优的未知动作。乐观探索的核心思想是:为每个动作的奖励估计值添加一个“奖励”,这个奖励与对该动作的不确定性成正比。

具体而言,我们构建一个乐观估计值:
Q_optimistic(a) = Q_mean(a) + c * σ(a)
其中,Q_mean(a) 是动作 a 的*均奖励估计,σ(a) 是其不确定性的度量(例如标准差),c 是一个常数。



这个公式鼓励算法选择两类动作:一是*均奖励确实很高的动作,二是虽然*均奖励不高但不确定性很大的动作(即我们了解甚少的动作)。直觉是,对于任何尚未充分尝试的动作,我们都乐观地假设它可能是好的。




一种非常简单且有效的实现方式是使用上置信界奖励:
bonus(a) = sqrt(2 * ln(t) / n(a))
其中,t 是总时间步数,n(a) 是动作 a 被选择的次数。



这个奖励会随着尝试次数的增加而减少,但对于尝试次数少的动作,奖励会很大。随着时间推移,探索会逐渐减少。理论证明,这种简单的策略可以达到*似最优的 O(log t) 后悔度。





后验采样 / 汤普森采样 🎲

乐观探索是一种与模型无关的方法。另一种更接*对模型进行显式推理的方法是后验采样,也称为汤普森采样。



这种方法需要维护一个对老丨虎丨机模型参数 θ 的信念分布 p(θ)。策略步骤如下:



- 从当前的信念分布
p(θ)中采样一组模型参数θ_sample。 - 假设
θ_sample是真实的模型,并在此模型下选择最优动作。 - 执行该动作,观察得到的奖励。
- 根据观察到的结果,使用贝叶斯规则更新信念分布
p(θ)。



其原理是:如果你采样了一个认为动作A很好的模型,并执行了动作A,结果却很差,那么这个模型为真的概率就会在你的信念中大幅降低。虽然这种方法没有显式地考虑未来信息(有点“贪婪”),但在实践中效果非常好,并且构成了深度强化学习中一大类探索方法的基础。






基于信息增益的探索 📈




第三种方法更加显式地基于模型,其思想来源于贝叶斯实验设计。目标是:我们应该采取哪些行动,以最大化我们对某个感兴趣的关键变量 Z(例如最优动作的价值)的了解。




我们使用熵 H(p(Z)) 来衡量当前对 Z 的不确定性。在采取某个动作 a 并观察到结果 y(例如奖励)后,不确定性变为 H(p(Z | y, a))。信息增益 就定义为不确定性减少的期望值:



IG(a, Z) = E_{y~p(y|a)} [ H(p(Z)) - H(p(Z | y, a)) ]




我们希望选择能带来高信息增益的动作,但同时也希望避免选择已知很差的动作。因此,一个有效的决策规则是权衡信息增益和预期次优性。



一篇相关论文提出了一种决策规则:对于每个动作 a,计算其预期次优性 Δ(a) 和信息增益 g(a),然后选择使 Δ(a)^2 / g(a) 最小的动作。这个公式鼓励选择信息增益大或次优性小的动作。





总结与核心要点 ✅



本节课我们一起学习了多臂老丨虎丨机中的三种核心探索策略:



- 乐观探索:为动作价值估计添加一个与不确定性成正比的奖励,鼓励尝试了解不足的动作。核心公式为
Q(a) = mean(a) + bonus(n(a))。 - 汤普森采样:维护模型参数的信念分布,从中采样并依此行动,然后更新信念。这是一种基于概率匹配的探索。
- 信息增益探索:显式地量化不同动作所能带来的信息量,并以此指导探索,旨在高效地减少对关键变量的不确定性。



这些策略的共同点是都需要某种形式的不确定性估计。即使在简单的UCB中,不确定性也通过尝试次数 n(a) 来粗略估计。在更复杂的场景中,我们需要假设“获取新信息是有价值的”,才能引导有效的探索。




虽然这些理论保证是在简单的老丨虎丨机问题中证明的,但它们为我们在更复杂的马尔可夫决策过程(MDP)中设计实用探索算法提供了重要的直觉和基础。







扩展阅读(可选)🔍



- 上下文老丨虎丨机:将状态引入老丨虎丨机问题。
- 小规模MDP中的优化探索理论:有深入的理论研究。
- 基于贝叶斯模型的强化学习:这是信息增益探索的自然延伸,更接*完全贝叶斯决策。
- 基于赌博机理论的探索:提供具有吸引理论保证的方法。
课程 P56:深度强化学习中的探索算法 🧭
在本节课中,我们将学习深度强化学习中几种实用的探索算法。我们将从多臂老丨虎丨机中的经典方法出发,探讨如何将其思想扩展到更复杂的马尔可夫决策过程(MDP)中,并解决在高维或连续状态空间中“计数”的难题。
探索算法类别概述
上一节我们介绍了探索的基本概念。本节中,我们来看看探索算法的几个主要类别。
- 乐观探索:其核心思想是,访问新的状态是有益的。这通常需要估计某个状态的访问频率或新颖性,并通过探索奖励来实现。
- 基于汤普森采样的算法:这类算法对模型、Q函数或策略的参数维持一个分布,然后根据从这个分布中采样的样本采取行动。
- 信息增益风格算法:这类算法考虑从访问新状态中获得的信息量,并选择能带来高信息增益的状态转移。
接下来,我们将从乐观探索的方法开始深入探讨。
从多臂老丨虎丨机到MDP的乐观探索
在多臂老丨虎丨机问题中,我们学习过一种*衡探索与利用的规则:上置信界算法。其选择动作的公式为:
动作 = argmax [ 估计的*均奖励 + sqrt(2 * log(t) / N(a)) ]

其中,N(a)是拉动臂a的次数。公式中的第二项就是一种探索奖励,它随着N(a)的增加而减少。
在强化学习中,我们可以将这个思想扩展到MDP设置,创建基于计数的探索。我们不再计数动作,而是计数访问某个状态-动作对(s, a)或某个状态s的次数,记为N(s),并据此添加探索奖励。
以下是具体做法:
我们定义一个新的奖励函数 R+(s):
R+(s) = R(s) + f( N(s) )
其中R(s)是原始奖励,f是一个随N(s)增加而减少的函数,例如 1 / sqrt(N(s))。

然后,我们可以简单地使用R+作为新的奖励函数,并应用于任何强化学习算法。这种方法模块化程度高,但需要注意两个问题:一是需要调整探索奖励的权重,二是需要解决“如何计数”的问题。
复杂环境中的计数挑战
在简单的离散MDP中,直接计数是可行的。但在像《蒙特祖马的复仇》这样的复杂游戏或连续状态空间中,直接计数会失效。
问题在于:
- 在复杂环境中,由于许多因素(如物体位置)不断变化,几乎不可能再次访问完全相同的状态。
- 在连续状态空间中,任何两个状态在理论上都是不同的,使得
N(s)几乎总是为1或0。
因此,我们需要一种能衡量状态相似性,而不仅仅是完全一致性的方法。核心思想是:即使从未见过完全相同的状态,但某些状态可能与其他状态非常相似。我们可以利用这一点,使用生成模型或密度估计器来获得一个“伪计数”。
伪计数与密度模型
我们不再直接计数状态s出现的次数,而是拟合一个密度模型 p_θ(s) 来估计看到状态s的“概率”或“似然”。一个训练良好的密度模型会对与常见状态相似的状态给出高概率,对新颖或异常的状态给出低概率。
我们可以利用密度模型输出的变化来推导一个伪计数 N̂(s)。思路如下:
在直接计数中,观察到状态s后,其概率更新为:p_new(s) = (N(s) + 1) / (总访问次数 + 1)。
我们希望伪计数 N̂(s) 和模型概率 p_θ(s) 之间也遵守类似的关系。
假设我们有一个旧模型 p_θ(s),在观察到新状态 s_i 后,我们更新参数得到新模型 p_θ‘(s)。我们有以下两个方程(其中 n̂ 是总访问次数的估计):
p_θ(s) = N̂(s) / n̂p_θ‘(s) = (N̂(s) + 1) / (n̂ + 1)
我们已知 p_θ(s) 和 p_θ‘(s),未知数是 N̂(s) 和 n̂。解这个方程组,可以得到伪计数的表达式:
N̂(s) = n̂ * p_θ(s)
n̂ = (1 - p_θ‘(s)) / (p_θ‘(s) - p_θ(s))
这样,每次遇到新状态,我们都可以通过计算两个密度模型的输出,来估算该状态的伪计数 N̂(s)。

奖励函数与模型选择
得到伪计数后,我们需要将其转化为探索奖励。以下是几种常见的选择(其中 β 是一个可调节的权重系数):

- 经典UCB风格:
奖励加成 = β * sqrt( log(n̂) / N̂(s) ) - 更简单的形式:
奖励加成 = β / sqrt( N̂(s) ) - 直接倒数形式:
奖励加成 = β / N̂(s)
在伪计数的原始论文中,使用了第二种形式 β / sqrt( N̂(s) ),并取得了良好效果。
关于密度模型 p_θ(s) 的选择,需要注意的是,我们只需要它输出一个能反映状态常见程度的分数,而不需要它能生成高质量的样本,甚至不需要分数是严格归一化的概率。因此,一些在生成任务中表现不佳的模型可能在这里很有效。
原始论文使用了一个非常简单的条件概率模型,它仅根据每个像素上方和左侧的像素来预测当前像素的值。其他研究也使用了随机神经网络、基于压缩的模型等方法。只要模型能对相似状态给出相似的高分,对新颖状态给出低分,就可以使用。

算法效果与总结
本节课中,我们一起学习了如何将乐观探索的思想从多臂老丨虎丨机推广到深度强化学习。
我们首先介绍了基于计数的探索,通过给访问次数少的状态添加奖励来鼓励探索。接着,我们指出了在复杂环境中直接计数不可行,进而引入了伪计数的概念。通过拟合一个密度模型并观察其更新前后的输出变化,我们可以估算出一个状态的伪计数,从而在高维连续空间中实现有效的探索。
这种方法(如伪计数方法)在《蒙特祖马的复仇》等难以探索的游戏中显示了显著效果,能帮助智能体访问更多不同的游戏区域,从而找到通往奖励的路径。


总结来说,伪计数方法的核心是:
- 用密度模型
p_θ(s)衡量状态新颖性。 - 通过模型更新前后的概率差计算伪计数
N̂(s)。 - 根据
N̂(s)构造探索奖励,添加到原始奖励中。
这是一种强大且模块化的探索策略,可以灵活地与其他强化学习算法结合使用。
课程 P57:CS 285 第13讲,第4部分 - 探索方法进阶 🧭
在本节课中,我们将学习几种基于“乐观主义”概念的创新探索方法。这些方法旨在通过不同的技术手段来估计状态的新颖性,从而鼓励智能体探索未知区域。我们将介绍基于哈希的计数、利用分类器估计密度以及使用预测误差作为新颖性度量等方法。
基于哈希的计数方法 🔢
上一节我们讨论了伪计数等探索方法。本节中,我们来看看一种基于哈希的计数方法,它使用更复杂的密度模型来改进探索。
这种方法的核心思想是:对状态进行哈希编码,然后在编码空间而非原始状态空间中进行计数。具体步骤如下:

以下是该方法的实现步骤:
- 状态压缩:通过一个编码器 φ,将状态
s压缩为一个k位的二进制代码。代码长度k应足够小,使得可能的状态总数远大于2^k,这必然会导致不同的状态被映射到相同的哈希值(哈希碰撞)。 - 学习相似性驱动的哈希:为了获得有意义的碰撞,不使用标准哈希函数,而是训练一个自编码器来重构状态。自编码器的瓶颈层(编码器输出)被用作哈希函数。这样,重构误差小的相似状态更可能被映射到相同的哈希码。
- 在哈希空间计数:算法不再统计原始状态
s出现的次数,而是统计其哈希码φ(s)出现的次数N(φ(s))。 - 计算内在奖励:新颖性奖励可以基于哈希码的计数来计算,例如使用公式
r^i(s) = 1 / sqrt(N(φ(s)))。
这种方法通过哈希碰撞将相似状态归为一类,提供了一种更灵活、更高效的计数方式。
利用分类器估计密度 🧠
如果你不想处理伪计数或密度模型,另一种思路是完全避免显式的密度建模,转而利用分类器来估计状态的“密度分数”。
其直觉是:如果一个状态很容易被分类器与过去见过的所有状态区分开,那么它就很新颖,应具有低“密度”;如果很难区分,则说明它与过去状态相似,应具有高“密度”。
以下是该方法的数学推导与步骤:

- 为每个状态训练分类器:对于每个新观察到的状态
s,训练一个二元分类器D_s。该分类器的任务是区分当前状态s(正样本)和缓冲区中所有过去的状态(负样本)。 - 从分类器概率推导密度:理论上,最优分类器
D_s(s)给出状态s是“新”(正样本)的概率。状态s的密度p_θ(s)可以通过以下公式与之关联:
p_θ(s) = (1 - D_s(s)) / D_s(s)
这个公式可以通过写下贝叶斯最优分类器的表达式并重新排列项推导出来。 - 处理过拟合与摊销模型:为每个状态训练独立分类器开销巨大。更实用的方法是训练一个摊销模型:一个单一的分类器网络
D(x*, x),它以参考状态x*和待分类状态x作为输入。每次看到新状态时,都用它来更新这个共享的网络。 - 正则化:为了防止分类器对单个状态过拟合(总是输出概率1),需要引入正则化技术,如权重衰减。
这种方法提供了一个新视角:用于探索的密度模型不一定需要能生成样本,甚至不一定需要是严格的概率密度,只要能给出一个反映新颖性的分数即可。
使用预测误差作为启发式新颖性度量 ⚙️

我们还可以使用一些启发式方法来估计新颖性,它们并非真正的计数,但在实践中能起到类似的作用,且通常效果很好。

其核心思想是:我们只需要一个能预测状态是否新颖的分数。我们可以通过测量某个目标函数的预测误差来得到这个分数。
以下是该方法的实现思路:
- 选择目标函数:定义一个标量值函数
f*(s, a)。它可以是任何函数,常见选择有:- 动态模型:
f*(s, a) = s',即下一个状态。预测误差反映了对环境动态模型的不确定性,与信息增益有关。 - 随机网络:
f*(s, a)是一个参数 φ 随机初始化且固定不变的神经网络。它提供了一个复杂、难以拟合的预测目标。
- 动态模型:
- 训练预测模型:使用已收集的数据
(s, a, f*(s,a))来训练一个模型f_θ(s, a),使其尽量拟合f*。 - 用误差作为奖励:在陌生(新颖)的状态-动作对
(s, a)上,预测模型f_θ的误差会很大。因此,我们可以将预测误差作为内在奖励:
r^i(s, a) = || f_θ(s, a) - f*(s, a) ||²
误差高表示新颖性高,应鼓励探索。
这种方法非常灵活,甚至使用随机网络作为 f* 也能取得良好效果,因为它创造了一个非*凡且难以完美记忆的预测任务。

总结 📝
本节课我们一起学习了三种进阶的探索方法:
- 基于哈希的计数:通过自编码器学习状态的低维哈希表示,在哈希空间进行计数,高效且能捕捉状态相似性。
- 分类器密度估计:通过训练分类器区分当前状态与历史状态,巧妙地将分类器概率转化为密度估计,避免了显式密度建模。
- 预测误差启发式:通过测量对某个目标函数(如动态模型或随机网络)的预测误差,来直接衡量状态-动作对的新颖性,方法简单且有效。

这些方法都共享“乐观主义”的核心思想,即对不确定性或预测误差高的区域给予额外奖励,驱动智能体进行探索。它们为解决稀疏奖励环境下的探索问题提供了多样化的工具。

课程 P58:深度强化学习中的探索算法 🧠
在本节课中,我们将学习深度强化学习中的一种重要探索方法——基于后验采样(或称汤普森采样)的算法。我们将了解其核心思想、如何将其从多臂老丨虎丨机问题适配到马尔可夫决策过程,并探讨一种实用的实现技巧。
从老丨虎丨机到MDP的适配 🔄
上一节我们介绍了多臂老丨虎丨机中的后验采样思想。本节中我们来看看如何将其应用到更复杂的深度强化学习环境中。

在多臂老丨虎丨机中,后验采样指的是我们维护一个对奖励分布参数 θ 的信念。在每一步探索中,我们从该信念中采样一个 θ,然后选择该采样模型下能获得最大奖励的动作。

在深度强化学习(MDP)设置中,情况更为复杂。我们不再只是最大化即时奖励,而是最大化Q函数,它代表了长期累积奖励。因此,适配后的思路是:我们从Q函数的分布中采样一个Q函数,然后根据这个采样的Q函数执行一整幕(episode)的动作,之后更新Q函数的分布,并重复此过程。

由于Q学习是离策略的,我们并不关心是哪一版Q函数收集了数据。整个Q函数分布都可以在同一个数据集上进行训练。
如何表示Q函数的分布? 🎯


一个关键问题是如何表示Q函数的概率分布。我们可以借鉴基于模型的强化学习中使用的Bootstrap集成方法。


给定一个数据集 D,我们进行有放回的重采样 N 次,得到 N 个子数据集 D1 到 Dn。然后,我们在每个子数据集上训练一个独立的Q函数模型。当需要从“后验”中采样时,我们只需从这 N 个训练好的模型中随机选择一个使用。


以下是该过程的简化表示:
# 伪代码:Bootstrap集成表示Q函数分布
datasets = bootstrap_resample(original_dataset, n_ensembles)
q_models = [train_q_function(d) for d in datasets]
sampled_q_model = random.choice(q_models)


实践中的简化技巧 ⚙️



然而,训练多个大型神经网络成本高昂。我们可以使用一个简化技巧来避免完全独立地训练多个网络。

我们可以训练一个具有多个输出头的单一网络。这意味着网络的大部分层是共享的,只在最后一层复制出多个不同的“头”。虽然这些头的输出可能相关,但在实践中,它们通常能提供足够的行为差异性以促进探索。



为何优于随机探索? 🆚


这种方法相比 ε-greedy 等随机探索策略的优势在于其策略的一致性。

随机探索(如 ε-greedy)可能导致智能体行为摇摆不定,难以执行需要连贯多步才能完成的复杂策略。例如,在一个名为“海底冒险”的游戏中,潜艇需要先下潜完成任务,然后在氧气耗尽前上浮。随机探索时,一旦下潜到底部,连续随机按“上浮”键的概率极低,智能体几乎无法学会上浮。



而基于随机Q函数的探索,智能体在每一幕中都会遵循一个内部一致的采样策略。集成中不同的Q函数可能学到不同的偏好(例如一个偏好下潜,一个偏好上浮)。当采样到“偏好上浮”的Q函数时,智能体会在整幕中持续执行上浮动作,从而有机会探索到“上浮换气”这个关键行为。


方法总结与评价 📊


基于后验采样的探索方法主要有以下特点:


优势:
- 无需修改原始奖励函数。
- 算法收敛时,集成中的所有Q函数预期都会表现良好。
- 无需手动调整探索与利用的权衡超参数。
- 实现简单,对原有算法框架侵入性小。


局限性:
- 在实际应用中,对于非常困难的探索问题,其效果通常不如基于计数或伪计数的方法。
- 因此,它并非当前最主流的探索方法,但当问题本身奖励设置合理时,它能稳定工作。



本节课中我们一起学习了如何将后验采样思想应用于深度强化学习的探索。我们了解了其核心是通过维护并采样Q函数的分布来引导探索,并掌握了使用Bootstrap集成或多头网络来实现它的实用技巧。虽然这不是最强的探索方法,但它提供了一种简单且无需调整额外超参数的替代方案。

课程 P59:深度强化学习探索方法(六)—— 基于信息增益的方法 🧠

在本节课中,我们将学习深度强化学习中探索方法的最后一类:基于信息增益的方法。我们将了解如何通过选择能带来最多信息的行动来引导智能体探索未知环境,并讨论其背后的数学原理与实现挑战。




概述


基于信息增益的探索方法,其核心思想是选择那些预期能带来最多“信息”的行动。这里的“信息”指的是关于环境模型中某些关键变量(如状态、动态或奖励函数)的不确定性的减少。本节课我们将深入探讨这一概念,并学习如何在实际算法中*似计算信息增益。




信息增益的核心概念


当我们思考信息增益时,目标是选择一个行动,该行动将导致一个观察结果,这个观察结果在预期中能为我们感兴趣的变量 z 提供最多的信息。

用公式表示,信息增益 IG 可以定义为后验分布与先验分布之间的KL散度:
IG(z; y) = KL( P(z|y) || P(z) )
其中,z 是我们感兴趣的变量(如动态模型参数),y 是观察到的转移(状态-动作-下一状态)。


如果 P(z|y) 与 P(z) 非常相似,意味着观察 y 没有带来太多关于 z 的新信息;反之,如果两者差异很大,则说明 y 提供了丰富的信息。




信息增益的对象选择


上一节我们介绍了信息增益的数学定义,本节中我们来看看在实际应用中,我们应对什么变量计算信息增益。

以下是几个可能的选择:



- 关于奖励函数的信息增益:这通常不是很有用,因为在困难的探索问题中,奖励可能在几乎所有地方都是零,无法提供有效的探索信号。


- 关于状态密度 P(s) 的信息增益:这听起来有些奇怪,但实际上有其道理。关于状态密度的信息增益意味着你想做那些会改变你对状态分布认知的事情,这通常对应于执行新颖的、不常见的行动。这实际上与我们之前讨论的基于计数的方法有相似之处。


- 关于动态 P(s‘|s, a) 的信息增益:这是一种非常合理的选择。关于动态的信息增益表明你正在学习关于马尔可夫决策过程(MDP)本身的知识。如果你假设MDP的奖励是稀疏的(大部分地方为零),那么学习动态就成为探索的主要目标,因为动态是MDP中变化最频繁且能提供有用信号的部分。




信息增益的*似方法


通常,在大的状态或动作空间中,我们无法精确计算信息增益。因此,我们必须采用某种形式的*似。许多这类方法的技术复杂性正在于如何设计有效的*似。

以下是两种主要的*似策略:


1. 预测增益

预测增益是信息增益的一种粗糙*似。它比较的是在观察到新数据前后,某个状态的对数概率的变化。


设 θ 为密度模型的参数,θ‘ 为观察到新状态 s 后更新得到的参数。预测增益 PG 定义为:
PG(s) = log p_θ‘(s) - log p_θ(s)
直觉是:如果密度模型因为一个新状态而发生很大变化(即预测增益很大),那么这个状态就非常新颖。这种方法类似于伪计数方法,但无需显式估计计数。


2. 变分推断


另一种更强大的方法是使用变分推断来*似参数的后验分布。我们感兴趣的量 z 是动态模型的参数向量 θ。


我们维护一个变分后验分布 q(θ; φ),其中 φ 是变分参数(例如,高斯分布的均值和方差)。这个分布被训练来*似真实的后验 p(θ|h),其中 h 是历史数据。

当我们获得一个新的转移 (s, a, s‘) 后,我们更新变分参数得到 φ‘。此时,信息增益可以*似为更新前后两个变分分布之间的KL散度:
IG ≈ KL( q(θ; φ‘) || q(θ; φ) )
对于独立的高斯分布,这个KL散度有闭式解,计算起来相对高效。直观上,它衡量了模型参数均值的变化量。




基于变分信息增益的算法流程



基于上述变分推断的*似,我们可以构建一个完整的探索算法:


- 初始化:使用一个贝叶斯神经网络(BNN)作为动态模型
P_θ(s‘|s, a),其参数 θ 服从变分分布q(θ; φ)。 - 收集经验:智能体与环境交互,收集转移数据
(s, a, s‘)并存入回放缓冲区h。 - 训练动态模型:定期使用历史数据
h训练变分后验q(θ; φ),以最小化变分下界(ELBO)。 - 计算探索奖励:对于每个新观察到的转移,计算其导致的信息增益*似值:
其中r_explore = KL( q(θ; φ‘) || q(θ; φ) )φ‘是将该新转移加入训练后更新得到的变分参数。 - 组合奖励:将内在探索奖励与外部环境奖励结合,形成总奖励:
其中r_total = r_environment + β * r_exploreβ是一个调节探索强度的超参数。 - 策略优化:使用任何强化学习算法(如DQN、PPO)来优化策略,以最大化这个包含信息增益的总奖励。


这种方法(如论文《VIME》中所述)已被证明能在多种任务上显著提升探索性能。




与其他方法的联系

如果我们忽略分布,只测量参数向量本身的变化(例如,参数 φ 到 φ‘ 的欧氏距离),我们实际上就恢复到了之前讨论过的基于预测误差的方法。

例如,我们可以训练一个自编码器来编码观察结果,并在潜在空间上构建一个动态预测模型。然后,使用该模型的预测误差作为探索奖励。许多工作(如Schmidhuber等人的研究)都探索了使用模型误差或模型梯度作为探索信号的方法。



因此,利用模型的不确定性或错误作为探索奖励是一个被深入研究的通用思路,它有时与信息增益有理论联系,有时则是一种直观有效的启发式方法。




总结


在本节课中,我们一起学习了深度强化学习中基于信息增益的探索方法。我们了解到:


- 核心思想:选择能最大化减少环境模型(特别是动态模型)不确定性的行动。
- 关键挑战:精确计算信息增益通常不可行,需要*似方法。
- 主要*似:
- 预测增益:通过比较模型更新前后对状态的概率估计来*似新颖性。
- 变分信息增益:使用变分推断维护参数的后验分布,并通过计算分布更新前后的KL散度来*似信息增益。
- 算法实现:将计算出的信息增益作为内在奖励,与外部奖励结合,引导策略进行更有信息的探索。
- 方法联系:这类方法与基于计数、基于预测误差的方法存在内在联系,共同构成了解决探索问题的工具箱。




延伸阅读


如果你想了解更多关于探索的材料,可以参考以下论文:


- Schmidhuber, J. (1991). A possibility for implementing curiosity and boredom in model-building neural controllers. 这篇早期论文提出了基于模型误差的探索思想。
- Pathak, D., et al. (2017). Curiosity-driven Exploration by Self-supervised Prediction. 这篇论文利用深度预测模型的误差来驱动探索。
- Osband, I., et al. (2016). Deep Exploration via Bootstrapped DQN. 这篇论文介绍了基于Bootstrap的后验采样方法进行深度探索。
- Bellemare, M., et al. (2016). Unifying Count-Based Exploration and Intrinsic Motivation. 这篇是关于基于伪计数探索的经典论文。
- Tang, H., et al. (2017). #Exploration: A Study of Count-Based Exploration for Deep Reinforcement Learning. 这篇论文研究了基于哈希的计数方法。
课程 P6:模仿学习(第三部分) 🧠
在本节课中,我们将学习如何通过一系列实用技巧来改进行为克隆,使其在实际应用中更有效。我们将探讨如何通过巧妙的数据收集、使用强大的模型以及改变算法本身来应对模仿学习中的挑战。


使行为克隆更有效的方法
上一节我们讨论了行为克隆的理论局限,本节中我们来看看如何通过一些实用方法来解决这些问题。

数据收集与增强
行为克隆的困难在于累积错误。如果数据集中只包含完美的专家轨迹,一旦策略犯了一个小错,就会进入一个未见过的状态,导致性能下降。然而,如果数据集中本身就包含了一些错误以及专家对这些错误的纠正,那么策略就能学会如何从错误中恢复。
以下是利用这一洞察的几种方法:
- 故意引入错误:在数据收集过程中,可以有意地让专家犯一些错误,并记录下他们如何纠正。这样,策略就能学习到在多种状态下(包括非理想状态)应采取的正确行动。
- 数据增强:利用领域知识创建额外的“假”数据。例如,在自动驾驶中,可以使用多个摄像头(如前、左、右)的视角,并将侧方摄像头的画面标记为转向动作,从而模拟车辆处于不同位置时的状态。
这两种技巧的目标是一致的:为策略提供更多样化的状态示例,特别是那些专家可能不会主动访问、但策略在执行时可能误入的状态。
案例研究:森林无人机导航
在一篇关于森林无人机导航的论文中,研究人员没有直接驾驶无人机,而是让人戴着装有三个摄像头的帽子在徒步路线上行走。他们将前方摄像头的画面标记为“直行”,左方摄像头的画面标记为“右转”,右方摄像头的画面标记为“左转”。这种简单的数据增强方法显著提升了模仿学习的性能。
案例研究:机器人操作
另一篇关于机器人操作的论文使用了一个廉价且不精确的机械臂。在演示过程中,人类操作者不可避免地会犯错误。然而,正是这些错误和随后的纠正数据,使得训练出的策略能够很好地从干扰和错误中恢复。
技术解决方案:提升模型表达能力
除了改进数据,我们还可以通过使用更强大的模型来直接降低拟合误差(ε),从而减少累积错误的影响。策略无法完美拟合专家行为的原因主要有两个:非马尔可夫行为和多模态行为。
处理非马尔可夫行为
人类的行为往往依赖于整个历史观察,而不仅仅是当前状态(即非马尔可夫)。例如,司机在注意到盲区有车后,即使回头看向前方,其后续驾驶行为也会受到影响。
解决方案:使用能够处理历史观察序列的策略表示。我们可以使用序列模型,如LSTM或Transformer。
# 伪代码示例:使用LSTM处理观察历史
observation_history = [frame_t-2, frame_t-1, frame_t]
encoded_history = [encoder(frame) for frame in observation_history]
lstm_output = lstm(encoded_history)
action = policy_head(lstm_output)
注意:使用历史观察有时可能加剧数据中的虚假相关性(例如,将“刹车灯亮”与“需要刹车”错误关联,而忽略了“前方有行人”这一真实原因)。这被称为因果混淆问题。
处理多模态行为
在某些状态下,可能存在多个合理的行动(例如,在树前可以选择向左或向右绕行)。如果策略使用简单的单峰分布(如高斯分布)来输出连续动作,它会将“向左”和“向右”的样本*均,得到一个“直行”的错误动作。
以下是几种处理多模态行为的方法:
- 高斯混合模型 (GMM):让神经网络输出多个高斯分布的均值、协方差和混合权重。这允许策略表示多个模式。
- 公式:策略输出参数
{ (μ_i, Σ_i, w_i) },其中i=1...K,动作分布为π(a|s) = Σ_i w_i * N(a | μ_i, Σ_i)。
- 公式:策略输出参数
- 潜变量模型 (如条件变分自编码器, CVAE):为策略网络引入一个额外的随机输入
z(潜变量)。网络学习根据不同的z输出不同的行动模式。训练时需要特殊技巧(如CVAE)使z与模式相关联。 - 扩散模型:借鉴图像生成领域。训练时,向真实动作添加噪声,并训练网络去噪。测试时,从纯噪声开始,通过多步迭代去噪生成动作。这种方法能生成非常复杂的分布。
- 自回归离散化:将高维连续动作的每个维度离散化成多个“桶”。然后使用序列模型(如Transformer)自回归地预测每个维度的离散值。这类似于语言模型预测下一个词。
- 过程:
P(a|s) = P(a_0|s) * P(a_1|s, a_0) * P(a_2|s, a_0, a_1) ...
- 过程:
案例研究
- 扩散模型:在机器人操作任务中,使用扩散模型作为策略,可以从图像输入去噪生成动作轨迹,成功完成抓取、涂抹等复杂任务。
- 潜变量模型:结合Transformer,使用一个“风格”潜变量来解释人类演示中的变化,提高了策略的灵活性和表达能力。
- 自回归离散化 (RT-1):谷歌的RT-1模型将机器人的每个动作维度离散化,使用一个以图像和语言指令为条件的Transformer模型,自回归地预测动作序列,从而能够执行多种语言指令下的任务。
总结

本节课我们一起学习了如何改进模仿学习中的行为克隆方法。我们首先探讨了通过精心设计数据收集(引入错误与纠正)和数据增强来提供更鲁棒的训练数据。接着,我们分析了策略拟合不佳的两个核心原因:非马尔可夫行为和多模态行为。针对前者,我们可以使用序列模型来处理历史信息;针对后者,我们可以采用高斯混合模型、潜变量模型、扩散模型或自回归离散化等更强大的模型来表示复杂的动作分布。这些技术使得模仿学习能够处理更现实、更复杂的任务。
课程 P60:无监督探索与技能获取 🧠
在本节课中,我们将学习一种关于强化学习中“探索”问题的不同视角。与通常关注如何寻找奖励的探索不同,我们将探讨在完全没有外部奖励信号的情况下,如何通过自主探索来获取多样化的技能,并为未来的任务做准备。


上一节我们介绍了探索问题的传统视角,本节中我们来看看一种不同的思考方式。如果我们不仅仅考虑延迟或稀疏的奖励,而是考虑一个完全没有外部奖励信号的设置,会怎样?我们能否恢复出多样化的行为?


你可以从更宏观的人工智能或科学角度来想象。例如,人类儿童会花费大量时间在环境中玩耍。他们的行为并非完全随机,显然从这种无定向的探索中获得了某些东西。这背后可能涉及目标设定、目标完成的概念,以及通过这种活动从大脑中提取出的、非常有用的知识体系。


那么,为什么我们可能想要在没有奖励函数的情况下学习呢?原因可能包括:
- 我们可以在没有明确监督的情况下获得各种技能,创建技能目录,以便在未来被赋予新目标时快速调用。
- 我们可以探索行为空间,构建大型数据集(经验缓冲区),这些数据随后可用于学习其他任务。

这是一种完全不同的思考探索的方式。传统上,探索被视为寻找有奖励状态的问题。而我们正在考虑的,是将其视为一种可以后续被重新利用的技能获取问题。
举一个更实际的例子:想象你家中有一个机器人。你把它放在厨房里并启动它,它的任务就是在这个环境中找出它能做的所有事情。这样,当你晚上回家并命令它“洗碗”时,由于在无监督阶段已经进行了广泛的实践,它就能非常高效地学会如何清洁盘子。

所以,如果你能为一个未知的未来目标做好准备,那么当这个目标被赋予时,你就可以相当快地完成它。

好的,在今天的讲座中,我们将涵盖一些有助于我们开始思考这个问题的概念。这是一个广阔且开放的研究领域,没有固定且完美的解决方案。但我将讨论的一些概念,可能会帮助你思考如何将形式化的数学工具和强化学习算法应用到这类问题上。
首先,我们将讨论一些来自信息论的定义和概念。许多人可能已经熟悉,但复习这些概念对每个人都很重要,以便在我们讨论更复杂的算法时,大家能在同一层面上理解。
以下是一些有用的定义和恒等式:
- 分布:我们用
p(x)表示一个分布。 - 熵:
H[p(x)]表示熵,定义为-E_{x~p(x)}[log p(x)]。直观上,熵度量了分布的“宽度”或不确定性。均匀分布具有最大熵,而集中在单一值的分布具有最小熵。 - 互信息:
x和y之间的互信息写作I(x; y)。它被定义为联合分布p(x, y)与边缘分布乘积p(x)p(y)之间的 KL 散度:I(x; y) = D_KL( p(x, y) || p(x)p(y) )。- 直观理解:互信息衡量了
x和y之间的依赖程度。如果它们独立,互信息为 0;依赖越强,互信息越大。 - 另一种形式:互信息也可以写成
I(x; y) = H(y) - H(y|x)。这可以解释为:观察x能为y带来多少信息增益(即减少了多少不确定性)。
- 直观理解:互信息衡量了
现在,让我们将这些概念融入强化学习中。在今天的讨论中,以下信息论量将非常有用:
- 状态边缘分布:我们用
π(s)表示策略π下的状态边缘分布(有时也写作p_θ(s))。 - 状态边缘熵:
H(π(s))指的是策略π的状态边缘熵。它量化了我们策略的覆盖范围。一个访问所有可能状态的随机策略,其H(π(s))会很大。
互信息在强化学习中一个经典的应用是定义 “赋权”。这个概念主要来自 Daniel Polani 等人的工作。赋权的一个简单版本被定义为下一个状态 s_{t+1} 与当前动作 a_t 之间的互信息:
I(s_{t+1}; a_t) = H(s_{t+1}) - H(s_{t+1} | a_t)
我们可以这样理解这个公式:你希望下一个状态的熵 H(s_{t+1}) 很大,这意味着有许多可能的下一个状态(选项多)。同时,你希望给定当前动作后的下一个状态的条件熵 H(s_{t+1} | a_t) 很小,这意味着如果你知道采取了什么动作,就能很容易预测会到达哪个状态(控制力强)。同时满足这两点,意味着智能体处于一个拥有许多可选动作、且每个动作都能可靠地导向不同未来状态的位置,这正体现了“赋权”或“掌控力”的概念。
在介绍了信息论的基础后,接下来我们将探讨如何在没有奖励函数的情况下进行学习。核心思路是设计一个算法,能够自己提出目标、尝试达成目标,并在此过程中加深对世界的理解。
然后,我们将讨论状态分布匹配的强化学习形式。在这种形式下,我们可以尝试让智能体探索到的状态分布去匹配某个期望的状态分布,从而实现一种无监督的探索。
我们还将探讨有效状态覆盖的问题:仅仅追求访问新奇状态(基于计数的探索)本身是否是一个良好的探索目标?以及为什么可能是或不是。
最后,我们将讨论如何超越仅仅覆盖状态空间,进而覆盖技能空间。这两者之间有什么区别?覆盖技能空间可能是一种更强大、更高效的探索方式。
本节课中,我们一起学习了:
- 一种不同于传统“探索-利用”权衡的探索视角:无监督的技能获取。
- 支撑这一视角的信息论基础概念,包括熵、互信息及其在RL中的体现(如状态熵、赋权)。
- 后续讲座将深入探讨的几个核心方向:无目标学习、状态分布匹配、以及覆盖技能空间与状态空间的区别。

这种将探索视为“为未知未来任务做准备”的范式,为构建更通用、更自主的智能体提供了新的思路。
课程 P61:无监督探索与目标提议算法 🧠
在本节课中,我们将学习一种前沿的无监督探索方法。该方法使智能体(如机器人)能够在没有人类指定任务或奖励函数的情况下,通过自我提议目标并尝试达成来学习技能。我们将重点理解其核心思想、算法框架以及背后的数学原理。
概述:问题设定与核心思想
上一节我们介绍了无监督探索的基本概念。本节中,我们来看看一个具体的算法框架,它旨在解决“如何在没有奖励函数的情况下,通过自我提议和达成目标来学习”这一问题。
我们面临的典型场景是:将一个机器人置于新环境(如厨房)中,它需要花时间自主练习各种技能。之后,当人类下达具体任务指令(如做家务)时,它能利用之前积累的经验高效地完成任务。
首先,我们需要解决一个基本问题:如何向智能体传达任务目标?一个现实的方法是向智能体展示我们希望它达成的状态(或观察结果)。在强化学习术语中,这相当于提供一个构成任务目标的状态(例如一张期望结果图像)。因此,无监督学习阶段的目标是训练出一个目标条件策略,使其在后续能达成人类指定的任何目标状态。
技术细节:状态表示与生成模型
由于状态(如图像)可能非常复杂且高维,我们需要一种机制来比较不同状态的相似性。一个常见的解决方案是使用生成模型来学习状态的潜在表示。
我们将以变分自编码器 为例。该模型将高维状态 s(或图像 x)编码为一个低维的潜在向量 z。其核心思想是:功能相似的状态在潜在空间 z 中的位置也相*。
公式描述:
- 生成过程:
p_θ(x | z),表示给定潜在变量z生成状态x的概率分布。 - 推断过程:
q_φ(z | x),表示给定状态x推断其潜在变量z的概率分布(编码器)。 - 潜在先验:
p(z),通常是标准正态分布。
算法框架:自我提议目标的循环
直觉上,智能体应利用潜在空间来提议可能的目标,尝试达成它们,并在此过程中改进策略。以下是该算法的基本循环:
- 提议目标:从潜在先验
p(z)中采样一个潜在目标z_g,然后通过生成模型p_θ(x | z_g)解码,得到一个“想象”的目标状态x_g。 - 执行策略:使用目标条件策略
π(a | x, x_g)尝试从当前状态x达到目标x_g。 - 收集结果:策略执行后,智能体到达某个实际状态
x̄(可能与x_g不同)。 - 更新策略:利用收集到的数据
(x, a, x̄, x_g),通过诸如 Q-learning 等算法来更新策略π,使其能更好地达成目标。 - 更新生成模型:将新遇到的状态
x̄加入数据集,用于更新生成模型p_θ。
然而,这个基础流程存在一个问题:生成模型 p_θ 是在已见数据上训练的,因此它倾向于生成与已见数据相似的目标。这可能导致智能体反复探索已掌握的技能,而忽略了新区域。
关键改进:基于密度的目标多样化
为了解决上述问题,我们需要在更新生成模型时,鼓励其关注那些“罕见”或未被充分探索的状态。这借鉴了我们在探索讲座中讨论的“新奇性”思想。
具体做法是修改第5步(更新生成模型)。我们不使用标准的最大似然估计,而是采用加权最大似然估计。
公式描述:
原始最大似然目标:max_θ E[log p_θ(x̄)]
加权最大似然目标:max_θ E[w(x̄) * log p_θ(x̄)]
其中,权重函数 w(x) 被设计为当前生成模型对该状态概率密度的负幂次方:
w(x) = p_θ(x)^(-α),其中 α > 0。
核心解释:p_θ(x) 低的状态是当前模型认为“新奇”或“罕见”的状态。赋予其更高的权重 w(x),意味着在下次训练生成模型时,模型会尝试给这些罕见状态分配更高的概率。从而,当从更新后的模型中采样新目标时,这些罕见区域被选中的几率就会增加,实现了探索的多样化。
可以证明,这种加权方式能使得目标分布 p_θ(x) 的熵不断增加,最终促使智能体覆盖所有可能的有效状态。
统一视角:最大化互信息
我们可以为整个算法流程建立一个更优雅的数学目标。算法实际上是在优化两个分布:
- 目标分布
p(g):我们希望其熵H(g)大,以覆盖多样化的目标。 - 状态给定目标的分布
p(s|g):对于策略达成目标后的最终状态s,我们希望给定s能轻易推断出目标g,即条件熵H(g|s)小。
这两者的结合,等价于最大化状态 s 与目标 g 之间的互信息 I(s; g)。
公式描述:
I(s; g) = H(g) - H(g | s)
最大化互信息 I(s; g) 完美地诠释了无监督探索的目标:既鼓励提出多样化的目标(H(g) 大),又要求策略能有效地达成这些目标(H(g|s) 小)。
实例演示:机器人开门
让我们通过一个真实的研究案例来直观理解该算法的效果。在一个实验中,机器人被放置在门前,但并未被告知“开门”这个任务。
以下是算法运行不同时间后的表现:
- 0小时:机器人行为随机,只是在门前晃动。
- 10小时:机器人开始触摸门把手,偶尔能打开门。
- 25小时:机器人能可靠地操纵门,并将其打开到不同角度。
- 完全训练后:我们可以给机器人一张门开至特定角度的图像作为新目标,它能利用之前无监督探索获得的技能,成功达成这个它从未被明确训练过的新目标。

总结

本节课中,我们一起学习了一种基于自我提议目标的无监督探索算法框架。其核心步骤包括:利用生成模型在潜在空间中提议目标、使用目标条件策略尝试达成、并通过加权更新生成模型(权重与状态概率密度的负幂次方相关)来鼓励探索新奇区域。我们从数学上揭示了该算法的本质是最大化状态与目标之间的互信息 I(s; g)。这种方法使智能体能够在没有外部奖励的情况下,自主地学习广泛的基础技能,为后续快速适应特定任务打下坚实基础。
课程 P62:CS 285 第14讲 第3部分 - 状态覆盖与边缘匹配 🎯
在本节课中,我们将深入探讨状态覆盖的概念,并学习如何通过最大化状态熵或匹配目标分布来引导策略进行探索。我们将看到这与之前讨论的探索概念之间的联系,并介绍一种通过内在动机实现无监督探索的方法。
无监督探索与内在动机 🧭
上一节我们介绍了探索的基本概念。本节中,我们来看看如何在没有外部奖励的情况下,仅通过内在动机引导智能体进行探索。
内在动机是用于指代“寻求新颖性”的另一个术语,例如我们之前见过的伪计数等方法。常见的探索方法是激励策略 π 去访问那些先前很少被访问的新状态 s。这甚至在奖励完全缺失的环境中也有效。
以下是实现内在动机的一种简单奖励形式:
r(s) = -log p(s)
其中 p(s) 是状态 s 的当前估计概率密度。如果某个状态被频繁访问,其概率 p(s) 会很高,那么奖励 r(s) 就会很低,从而鼓励策略去探索概率更低(即更新颖)的状态。
这个过程可以概括为以下步骤:
- 更新策略 π,以最大化包含此内在奖励的总奖励。
- 根据新策略产生的状态,更新状态密度估计器 p(s)。
- 重复上述过程。

然而,这种方法存在一个问题:策略会不断追逐当前密度估计较低的区域,而密度估计器则会不断拟合策略的最新行为。最终,虽然密度估计器 p(s) 能覆盖广泛的状态(即对所有状态都赋予相对较高的概率),但策略本身的行为是随机的、不稳定的,并不会均匀地访问所有状态。
状态边缘匹配问题 🎯
如果我们不仅希望密度估计器有好的覆盖率,更希望策略本身能稳定地访问多样化的状态,该怎么办呢?这就引出了状态边缘匹配问题。
该问题的目标是学习一个策略 π(a|s),使其产生的状态分布 p_π(s) 尽可能接*一个期望的目标分布 p*(s)。我们可以用 KL 散度来衡量两者的差异:
目标:最小化 KL( p_π(s) || p*(s) )
如果目标分布 p*(s) 是均匀分布,那么这个目标就等价于最大化策略的状态熵 H(p_π(s))。

我们可以利用内在动机的思想来构造奖励函数,以匹配目标分布:
r̃(s) = log p*(s) - log p_π(s)
有趣的是,策略 π 在此奖励下的期望回报,恰好等于 p_π(s) 和 p*(s) 之间的 KL 散度。这意味着强化学习的目标函数本身就是在优化状态边缘匹配。

但是,标准的强化学习算法并不知道奖励 r̃(s) 中的 -log p_π(s) 部分依赖于策略 π 本身。这会导致之前提到的“尾追”问题:策略和密度估计器相互追逐,无法稳定收敛到最优解。
解决方案:自我对弈与策略混合 🤝
为了解决上述问题,我们需要对算法进行两处关键修改。以下是修正后的算法框架:
我们用 k 来索引迭代轮次。
在每一轮迭代 k 中:
- 学习一个策略 π_k,以最大化在 π_k 下预期的奖励 r̃^k 的回报。这里的奖励使用基于当前(第 k 轮)状态密度估计器 p^k(s) 计算得出的 -log p^k(s)。
- 更新状态密度估计器 p^{k+1}(s),使其拟合迄今为止所有迭代中策略所访问过的所有状态(例如,使用一个经验回放缓冲区),而不仅仅是当前策略 π_k 访问的状态。
- 最终,我们返回的策略 π* 不是最后一轮的策略,而是所有历史策略 {π_1, π_2, ..., π_K} 的混合模型。在实际执行时,随机选择一个迭代轮次 k,然后使用对应的策略 π_k 来行动。
为什么这样做有效?状态边缘匹配问题可以形式化为一个两人博弈:玩家一是策略 π,玩家二是密度估计器 p(s)。该博弈的纳什均衡点正是 p_π(s) = p*(s) 的状态。
简单地让双方每轮都采取针对对手的最优响应(即算法的基础版本),通常无法收敛到纳什均衡。而通过计算历史策略的*均(即混合策略),正是博弈论中“自我对弈”求取纳什均衡的经典方法。因此,最终得到的混合策略 π* 能有效地最小化 p_π(s) 和 p*(s) 之间的 KL 散度。
关于此证明的更多细节,可参考关于“状态边缘匹配”和“最大熵探索”的相关论文。

实验验证与高层启示 🧪

实验表明,这种方法比标准的强化学习探索方法更有效。例如,在一个多分支的迷宫环境中,标准算法可能只探索部分区域,而状态边缘匹配算法则能更均匀地覆盖所有分支。

从这些结果中,我们可以得出高层启示:
- 仅使用内在动机进行单轮迭代,无法获得良好的状态覆盖,也无法匹配目标分布。
- 通过混合历史策略并利用自我对弈理论,可以引导策略收敛到能匹配目标状态分布的纳什均衡点。


为何追求均匀覆盖? 🤔
最后,我们简要讨论一下:为什么追求均匀的状态覆盖(即最大化状态熵)是一个好主意?
考虑这样一个场景:在测试时,一个“对手”(或环境)可能会给你分配最难的任务,以挑战你的智能体。如果你在训练时不知道测试任务的具体内容,并假设最坏情况(即对手选择对你最不利的任务),那么最优的训练策略就是在训练时均匀地覆盖所有可能的状态或目标。
这源于经典的“最大熵”建模思想:在缺乏先验信息的情况下,最稳健的选择是假设所有可能性是等概率的,并据此进行准备。因此,最大化状态熵或目标熵,是在面对对抗性测试环境时一种理论上合理且稳健的策略。
这一观点在“无监督元学习”的相关工作中有所阐述。
总结 📚

本节课中,我们一起学习了:
- 无监督探索:如何通过内在动机(如
-log p(s))在无外部奖励的环境中进行探索。 - 状态边缘匹配问题:将探索目标形式化为使策略的状态分布 p_π(s) 匹配一个目标分布 p*(s),通常使用 KL 散度进行度量。
- 算法与挑战:直接应用强化学习优化内在奖励会导致策略与密度估计器相互追逐的不稳定问题。
- 解决方案:通过维护所有历史状态的经验缓冲区来更新密度估计器,并最终返回历史策略的混合模型,可以借助自我对弈理论收敛到纳什均衡,有效解决状态边缘匹配问题。
- 理论依据:在对抗性测试环境的最坏情况假设下,追求均匀的状态覆盖(最大化熵)是一种理论上稳健的探索策略。
课程 P63:CS 285 第14讲 第4部分 - 超越状态覆盖:学习多样化技能 🎯
在本节课中,我们将要学习如何超越简单的状态覆盖,去学习多种多样、彼此不同的技能。我们将探讨如何通过设计奖励函数来鼓励策略学习多样化的行为,并理解其背后的数学原理。
概述:从单一技能到多样化技能
上一节我们介绍了如何通过覆盖状态分布来进行探索。本节中我们来看看如何学习多种不同的技能,而不仅仅是达到不同的状态。
假设我们有一个策略 π(a|s, z),其中 z 是一个任务索引。z 可以是一个类别变量,取 N 个不同的值。这代表我们拥有 N 种不同的技能。例如,在一个二维导航场景中,技能0可能代表向上移动,技能1代表向右移动。
为何需要多样化技能?
达到多样化的目标并不等同于执行多样化的任务。并非所有行为都能被“达到某个目标状态”这一概念所捕获。
例如,考虑一个任务:智能体需要到达绿色圆圈,同时避开红色圆圈。一个仅以目标状态为条件的策略可以去绿色圆圈,但无法同时被“告知”要避开红色圆圈。因此,所有可能技能的空间,要大于“达到目标”的技能空间。
直觉是,不同的技能应该访问状态空间中不同的区域,而不仅仅是访问不同的单个状态。
如何学习多样化技能:基于判别器的奖励
我们可以设计一种能促进多样性的奖励函数。在强化学习中,我们通常将策略定义为某个奖励函数的最大化。我们打算做的是:奖励那些在给定技能 z 下很可能出现,但在其他技能下不太可能出现的状态。
换句话说,如果你正在运行技能 z=0 的策略,你应该访问那些对于 z=1, 2, 3... 等技能概率较低的状态。这确保了每个 z 都做一些独特的事情。
另一种表述是:观察策略访问的状态,你应该能够猜出它正在执行哪个技能 z。
以下是实现这一想法的一种方法:
- 使用一个分类器(判别器)
D(z|s),它根据状态s预测技能z的概率。 - 将奖励设置为该分类器预测的对数概率:
r(s, z) = log D(z|s)。
因此,我们想要最大化 log p(z|s),使得从状态 s 猜测技能 z 变得容易。策略因此会倾向于访问能清晰标识其技能的状态。
算法流程与可视化
我们如何具体实现这个算法?可以将其视为一个交替优化的过程:

- 策略与环境交互:策略
π(a|s, z)在环境中运行,技能z在每轮开始时被指定。 - 训练判别器:收集状态数据,更新判别器
D(z|s),使其能更准确地从状态s预测出技能z。 - 更新策略:使用当前判别器输出的
log D(z|s)作为奖励,通过强化学习算法更新策略,使其能最大化这个奖励。

我们可以通过一个只有两个技能(绿色和蓝色)的简单例子来可视化这个过程:

- 初始:策略是随机的,两个技能的行为相似,访问的状态分布略有重叠。
- 训练判别器:判别器会在状态空间中画出一条决策边界,将状态分为“更可能属于蓝色技能”和“更可能属于绿色技能”两类。
- 更新策略:策略为了获得更高奖励(即让判别器更容易猜对),会使蓝色技能更多地访问边界一侧的状态,绿色技能访问另一侧。
- 循环迭代:随着判别器和策略的交替更新,两个技能访问的状态区域会逐渐分离,行为差异变得明显。

在实际应用中,我们可能使用数十甚至数百个技能,从而实现对状态空间的良好、多样化覆盖。

实际效果展示

在标准基准环境(如作业一中出现的“小猎豹”任务)中运行此算法,会产生非常有趣的行为:

- 一些技能涉及向前奔跑。
- 一些技能涉及向后奔跑。
- 还有一些技能会做出酷炫的后空翻。


当你观察这些技能产生的状态序列时,直觉上它们都是有意义的,并且彼此明显不同。例如,仅看一张静态图片,你可能就能猜出智能体正在执行的是后空翻(技能2)、向前跑(技能1)还是向后跑(技能3)。在“蚂蚁”、“山地车”等其他环境中,该方法也能产生多样化的技能,其中一些技能甚至直接解决了任务。
这似乎是一种获取多样化技能的有效方法。


理论依据:最大化互信息
我们可能会问,这个方法到底在优化什么?它是否有一个明确的理论目标?

实际上,这种方法与互信息有着密切的联系。具体来说,它最大化了技能 z 和状态 s 之间的互信息 I(z; s)。
互信息可以分解为:
I(z; s) = H(z) - H(z|s)
- 最大化
H(z):我们通过均匀地随机选择技能z(即让每个技能有相等的概率被触发)来最大化技能本身的熵H(z)。 - 最小化
H(z|s):条件熵H(z|s)表示在已知状态s的情况下,技能z的不确定性。我们通过最大化log p(z|s)(即让判别器准确预测)来最小化它。
因此,整个算法(均匀选择 z 并最大化 log D(z|s))实际上是在最大化技能 z 与状态 s 之间的互信息 I(z; s)。
总结与主题回顾
本节课中我们一起学习了如何通过基于判别器的奖励函数来学习多样化技能。
让我总结一下本讲第3、4部分出现的共同主题。我介绍了三种不同的方法(基于目标的后验、最大熵探索、多样化技能学习),它们都非常相关。
所有这些方法基本上都以某种形式,最终归结为最大化结果(可能是最终状态或任何状态)与任务/目标(可能是目标状态或技能 z)之间的互信息。
我们看到,最大化结果与任务之间的互信息,是无监督强化学习中一种进行有效探索和学习的方式。此外,从最坏情况分析的角度看,如果你在测试时不知道自己会被分配什么任务,那么假设对手会给你分配最难的任务时,最大化互信息实际上是最优的策略。
我希望这次讨论能为你提供一种关于探索的不同视角,即如何在无监督的通用设置中思考探索,并开始应用一些能提供明确优化目标的强大数学工具。

相关阅读:
- Diversity is All You Need
- Variational Intrinsic Control
课程 P64:离线强化学习基础 📚
在本节课中,我们将要学习离线强化学习。我们将从动机出发,探讨其核心概念、面临的挑战,并分析为何直接应用传统的在线强化学习方法会失败。


概述与动机 🎯
上一节我们介绍了课程主题,本节中我们来看看为何需要离线强化学习。
当前强化学习方法在特定领域表现出色,但其应用场景与监督学习方法大相径庭。强化学习本质上是一个主动、在线的过程,无论是同策略还是异策略算法,都需要与环境持续交互、收集数据、改进策略。然而,监督学习方法(如图像识别)的成功依赖于从海量、多样的数据中学习并实现泛化。

若想使强化学习方法获得类似的泛化能力,就需要同样规模的海量数据。但在经典的在线或异策略框架下,这意味着每次迭代或每次训练都需要收集一个“ImageNet规模”的数据集,这在实际中非常困难且不切实际。
离线强化学习的基本原理是开发能够重用先前收集的数据集的强化学习方法,从而创建一个数据驱动的强化学习框架。这类似于监督学习:给定一个数据集,训练出最佳模型,然后部署使用,期间没有主动探索或在线交互阶段。
核心概念与问题定义 🔍
上一节我们讨论了离线RL的动机,本节中我们来明确其正式定义和核心概念。

我们有一个数据集 D,它由转移元组 (s, a, s', r) 构成,通常按轨迹组织。这些数据由某个未知的行为策略 π_β 收集。我们的目标是利用数据集 D,学习出在数据支持下可能的最佳策略,而不是整个MDP中的全局最优策略(因为数据可能未覆盖所有状态)。
以下是离线RL相关的两类主要问题:
- 离策略评估:给定数据集 D,评估某个(非行为)策略 π 的预期回报 J(π)。
- 离线强化学习:给定数据集 D,学习最佳策略 π*。离策略评估常作为其内部子步骤。


一个关键直觉是,离线RL不仅能找出数据集中最好的行为,还能通过泛化和组合创造出比数据集中任何单一轨迹都更好的行为。例如,通过“缝合”从A到B和从B到C的轨迹,可以学会从A到C,即使从未见过完整的A到C轨迹。



为何离线RL具有挑战性?⚠️
上一节我们看到了离线RL的潜力,本节中我们来看看实践中直接应用已有方法会遇到什么问题。
如果我们尝试简单地运行一个标准的异策略Q学习或演员-评论家算法,但停止收集新数据(即完全离线),性能往往会急剧下降。实验表明,即使使用质量不错的离线数据,完全离线训练的策略性能也显著低于进行少量在线微调后的策略。
其根本问题在于分布偏移和反事实查询。在训练Q函数时,我们最小化的是在行为策略 π_β 分布下的误差。然而,当我们改进策略(例如取argmax或训练演员网络)时,我们是在新策略 π_new 的分布下查询并最大化Q值。π_new 会主动寻找能使Q值最大的动作,这类似于为神经网络制造对抗样本。如果某个动作在数据集中从未出现或很少出现(即分布外动作),Q函数对其价值的估计可能极不准确,但策略却可能选择它,导致严重的价值高估和策略性能崩溃。
简而言之,离线RL需要在利用泛化改进策略和避免对分布外动作的盲目乐观之间取得微妙的*衡。在线RL可以通过试错来纠正错误估计,而离线RL则没有这个机会。
总结 📝
本节课中我们一起学习了离线强化学习的基础。我们了解了其核心动机:通过重用大型静态数据集来提高数据效率、安全性并迈向更好的泛化。我们明确了离线RL的目标是学习数据支持下的最佳策略,并能通过组合与泛化超越数据集中现有的最佳行为。同时,我们也认识到直接应用在线RL算法会因分布偏移和分布外动作的价值高估问题而失败。在接下来的课程中,我们将探讨解决这些挑战的具体方法。
# 示例:离线RL与在线RL的数据流对比(概念性代码)
# 在线RL (如DQN)
def online_rl_training():
while not converged:
# 必须持续与环境交互
new_data = env.interact(current_policy)
replay_buffer.add(new_data)
# 从缓冲区采样(包含新旧数据)进行训练
batch = replay_buffer.sample()
update_policy(batch)

# 离线RL
def offline_rl_training(static_dataset_D):
# 仅使用预先收集的静态数据集,无环境交互
for batch in static_dataset_D:
update_policy(batch)
# 训练完成后直接部署策略
deployed_policy = current_policy
课程 P65:离线强化学习(第二部分)——经典方法 🧠
在本节课中,我们将学习离线强化学习的经典方法,特别是基于重要性采样的技术。这些方法是该领域早期发展的基石,虽然现代方法已有改进,但理解它们有助于我们把握离线强化学习思想的演变脉络。

概述 📋
我们将首先回顾重要性采样的基本概念,并指出其在离线强化学习中直接应用时面临的核心挑战——方差爆炸问题。接着,我们将探讨一些旨在缓解该问题的技术,包括双重稳健估计器和边际重要性采样。这些方法主要用于离线策略评估,但其中的思想也为后续的策略学习算法提供了启发。

重要性采样与离线强化学习 🔄
上一节我们介绍了离线强化学习的基本设定。本节中,我们来看看如何将我们熟悉的重要性采样技术应用于此场景。
我们从强化学习的目标和策略梯度开始。策略梯度的基本形式为:
∇θ J(θ) = Eτ∼πθ [∇θ log πθ(τ) * Q(τ)]
估计此梯度需要从目标策略 πθ 中采样轨迹。然而,在离线强化学习中,我们只有从行为策略 πβ 收集的数据集。解决方案是使用重要性权重进行重新加权:
∇θ J(θ) ≈ Eτ∼πβ [ (πθ(τ) / πβ(τ)) * ∇θ log πθ(τ) * Q(τ) ]
当我们展开轨迹概率时,与策略无关的初始状态分布和状态转移概率会相互抵消,最终只剩下每个时间步动作概率的比值:

πθ(τ) / πβ(τ) = ∏_{t=0}^{T} (πθ(at|st) / πβ(at|st))
虽然这个估计量是无偏的,但它存在一个严重问题:重要性权重是 T 个比值的连乘。当轨迹长度 T 较大时,权重的方差会呈指数级增长。这意味着少数样本的权重会极大,而大多数样本的权重*乎为零,导致估计极不稳定,需要海量数据才能获得准确估计。

改进思路:分解与*似 🛠️

面对指数级方差,我们能否进行改进呢?一个关键的思路是将重要性权重进行分解。
我们可以将权重分为两部分:到达当前状态 st 之前的动作概率乘积,以及之后动作概率的乘积。前一部分反映了两种策略访问状态 st 的概率差异,后一部分则反映了在状态 st 之后,基于 πβ 采样的奖励与基于 πθ 的期望奖励之间的差异。
在诸如PPO之类的现代策略梯度方法中,通常会忽略前一部分权重。这种*似在行为策略 πβ 与目标策略 πθ 足够接*时是合理的,正如我们在高级策略梯度课程中讨论的那样。然而,在离线强化学习中,我们的目标恰恰是学习一个优于行为策略的新策略,因此这个假设通常不成立,我们不能简单地忽略这部分权重。
另一种思路是针对每个时间步的奖励进行更精细的重要性加权。对于 t 时刻的奖励 rt,理论上只需乘以从当前时刻到获得该奖励时刻之间的动作概率比值,而不是乘到轨迹结束。这略微降低了方差,但问题在根本上仍未解决——只要涉及多个时间步的连乘,方差就难以控制。
核心结论是:若不引入价值函数估计,则无法完全避免重要性权重带来的指数级方差问题。

双重稳健估计器 🛡️
为了更有效地降低方差,我们可以借鉴上下文赌博机中的双重稳健估计器思想。
以下是双重稳健估计器的构建思路:
- 基本设定:假设我们有一个对动作价值函数
Q^πθ(s, a)的估计q_hat(s, a),以及由此推导出的状态价值函数估计v_hat(s) = E_{a∼πθ(·|s)}[q_hat(s, a)]。 - 估计器形式:对于单步(赌博机)情况,双重稳健估计器为:
V_DR = ρ * (r - q_hat(s, a)) + v_hat(s)
其中ρ = πθ(a|s) / πβ(a|s)是重要性权重。 - 性质:只要
v_hat(s)是q_hat(s, a)在策略πθ下的正确期望(即v_hat(s) = E_{a∼πθ}[q_hat(s, a)]),该估计器对V^πθ(s)就是无偏的。同时,如果q_hat接*真实的Q函数,那么高方差的ρ * (r - q_hat)项会趋*于零,从而显著降低整体方差。

我们可以将这一思想递归地扩展到多步强化学习问题中。定义 V_bar_DR^{T-t} 为从时刻 t 开始的双重稳健价值估计,其递归形式为:

V_bar_DR^{T-t} = ρ_t * ( r_t + γ * V_bar_DR^{T-(t+1)} - q_hat(s_t, a_t) ) + v_hat(s_t)
通过从最后一步反向递归计算,我们可以得到初始状态的双重稳健价值估计 V_bar_DR^T(s0)。这种方法将重要性权重的连乘限制在单步内,并结合了函数逼*器的稳定性,从而实现了比朴素重要性采样更优的方差控制。

边际重要性采样 📊
最后,我们简要介绍另一种经典方法——边际重要性采样。其核心思想与之前有根本不同。
之前的方法计算的是轨迹或动作的重要性权重。而边际重要性采样试图直接估计状态分布或状态-动作分布的重要性权重:
w(s) = d^{πθ}(s) / d^{πβ}(s) 或 w(s, a) = d^{πθ}(s, a) / d^{πβ}(s, a)
其中 d^{π}(s) 表示策略 π 下的状态访问分布。
一旦估计出权重 w(s, a),离线策略评估就变得非常简单:
V^{πθ} ≈ (1/N) * Σ_{i=1}^{N} w(s_i, a_i) * r_i
主要的挑战在于如何估计 w(s, a)。由于我们不知道真实的分布 d^{πβ} 或 d^{πθ},通常的做法是为 w 建立一个类似于贝尔曼方程的一致性条件。例如,一个常见的条件是:
d^{πβ}(s‘, a’) * w(s‘, a’) = (1-γ) d0(s’) πθ(a‘|s’) + γ * Σ_{s,a} d^{πβ}(s, a) * w(s, a) * p(s‘|s, a) * πθ(a‘|s’)
这个方程表明,加权后的行为策略分布应等于目标策略的分布。在实践中,我们将该等式转化为一个损失函数(如最小化左右两边的均方误差),并利用数据集中的样本来*似关于 d^{πβ} 的期望,从而训练一个神经网络来拟合 w(s, a),而无需显式建模状态分布本身。
总结 🎯
本节课我们一起学习了离线强化学习的经典方法,重点聚焦于基于重要性采样的技术。

- 我们首先分析了将重要性采样直接用于离线策略梯度时面临的指数级方差挑战。
- 接着,我们探讨了双重稳健估计器,它通过引入价值函数估计并利用递归形式,在保持无偏性的同时显著降低了方差。
- 最后,我们简介了边际重要性采样,它通过直接估计状态分布的重要性权重来进行离线评估。

这些经典方法虽然在样本效率上可能不如现代基于动态规划的离线RL算法,但它们奠定了重要的理论基础,并且其中的思想(如双重稳健性)仍在持续影响新的研究。对于希望深入理解离线评估或处理小规模问题的研究者来说,这些技术仍然具有重要的参考价值。
📚 课程 P66:离线强化学习 - 线性拟合价值函数方法
在本节课中,我们将学习离线强化学习中一类经典的方法:使用线性拟合价值函数的方法。虽然现代方法通常使用深度神经网络,但理解线性方法的工作原理依然很有价值。它们不仅能提供分析工具,其闭式解也能为未来开发更有效的深度强化学习方法提供启示。
上一节我们介绍了离线强化学习的背景与核心挑战,本节中我们来看看基于线性函数*似的经典方法。
🔍 经典方法与现代视角
人们过去如何思考离线价值估计?经典思路是将现有的*似动态规划和Q学习思想扩展到离线设置,并使用线性函数*似器等简单*似器来推导可处理的解决方案。
人们现在如何思考?当前的研究主要致力于使用神经网络等高表达能力函数*似器来推导*似解,而主要的挑战变成了分布偏移问题。


这里存在一个脱节:更经典的工作并未真正处理分布偏移。原因在于它们假设函数*似器非常简单。因此,在给定一组良好特征的情况下,分布偏移的负面影响不会太严重。而对于深度网络,由于其强大的表达能力,分布偏移的负面影响会非常大。所以,让这些方法表现更好的因素,也加剧了分布偏移的挑战。
这意味着接下来讨论的技术不会以任何有意义的方式解决分布偏移问题。它们只是直接解决如何从批量数据中估计价值函数的问题。因此,如果将这些技术与深度网络一起使用,由于本讲座第一部分提到的原因,它们将无法正常工作。
接下来,为了内容的完整性,我将讨论这些较旧的方法。然后在第16讲中,我们将讨论现代技术。
📊 热身:线性模型与特征矩阵
让我们先做个热身,谈谈线性模型。这看似有点跑题,但我很快会将其与基于价值的方法联系起来。
假设你有一个特征矩阵。这个特征矩阵的维度是 S x K,其中 S 是状态的数量(我们讨论的是离散状态MDP),K 是特征的数量。你可以将其视为一个向量值函数 Φ(s),对于每个状态 s 给出一个 K 维特征向量。你也可以将其视为一个有 K 列的矩阵,每列对应一个特征在所有状态上的取值。
我们能在特征空间中做离线基于模型的强化学习吗?做基于模型的强化学习需要什么?我们需要根据特征来估计奖励和转移,然后恢复价值函数,再用其改进策略。
我们将使用线性函数*似来完成所有事情。这意味着我们假设奖励可以合理地表示为特征的线性函数:存在某个权重向量 w_r,使得 Φ * w_r *似于真实奖励 R。Φ 是一个行数等于状态数的矩阵。R 是长度等于状态数的向量。w_r 是长度等于特征数 K 的权重向量。
以下是 w_r 的最小二乘解。这只是基础统计学中的正规方程:
w_r = (Φ^T Φ)^{-1} Φ^T R
我们还需要一个转移模型。转移模型描述了当前的特征如何变成下一时刻的特征。就像我们可以通过乘以权重 w_r 将 Φ 变为 R 一样,我们可以通过乘以某个转移概率矩阵 P_Φ 将 Φ 变为未来的 Φ。

我们试图*似的是真实转移矩阵 P^π 对 Φ 的影响。真实状态转移矩阵 P^π 是 S x S 的,它描述了状态之间的转移。P^π 依赖于策略 π。我们希望找到一个特征空间转移矩阵 P_Φ(大小为 K x K),使得 Φ * P_Φ 尽可能接* P^π * Φ。P^π * Φ 给出了在策略 π 下,下一时刻状态的期望特征。
求解 P_Φ 的方法与之前相同,也是最小二乘,只是目标值现在是 P^π * Φ 而非 R。
🧮 从模型到价值函数估计
现在,我们有了奖励模型和转移模型,接下来尝试估计价值函数。
假设我们的价值函数也是 Φ 的线性函数。这意味着价值函数 V^π 可以写成 Φ * w_v,其中 w_v 是某个权重向量。
这里有一个有用的公式。我们可以将贝尔曼方程写成向量形式:V^π = R + γ P^π V^π。这是一个线性方程组。通过移项,我们可以得到:
V^π = (I - γ P^π)^{-1} R
其中 I 是单位矩阵。可以证明 (I - γ P^π) 总是可逆的,因此解存在且唯一。
我们可以将同样的思想应用到特征空间。在特征空间中,我们可以写出特征空间的贝尔曼方程,并通过相同的逻辑得到:
w_v = (I - γ P_Φ)^{-1} w_r
我们用 w_r 替换了 R,用 P_Φ 替换了 P^π。
现在,让我们把之前推导出的 w_r 和 P_Φ 的方程代入到这个 w_v 的方程中。经过一些代数简化(此处不展开),我们得到了一个著名的公式,称为最小二乘时序差分:
w_v = (Φ^T (Φ - γ Φ'))^{-1} Φ^T R
其中 Φ' 对应下一时刻的特征。LSTD公式将特定策略 π 的转移、奖励向量 R 以及特征矩阵 Φ 与策略 π 的价值函数权重联系起来。

🎯 基于样本的估计与LSPI算法
上述方法需要知道 P^π 和 R。接下来,我们将用样本来替换这一切,从而得到一种完全免模型的方法来求解 w_v。

我们的样本由一组转移 (s, a, r, s') 构成,即离线数据集。我们要做的是用样本集替换状态集。以前矩阵 Φ 的每一行对应一个状态,现在每一行对应一个样本。我们用下一时刻状态 s' 的特征 φ(s')(记作 Φ')来替换 P^π Φ。同样,我们用样本奖励向量替换奖励向量 R。


这样,一切仍然以完全相同的方式工作,只是现在我们会引入一些采样误差。我们可以使用这个方法来获得基于样本的估计,方程形式完全相同。
现在,让我们将其转化为一个完整的算法。之前我们说估计奖励、估计转移、恢复价值函数然后改进策略。但现在,我们将直接用这个LSTD方程来完成前三步。
但这里有个问题:LSTD估计的是收集数据所用策略 π 的价值函数。而我们想评估的是我们正在学习的另一个策略。为了解决这个问题,我们转向估计Q函数,而不是价值函数。


这就引出了最小二乘策略迭代(LSPI),这是一种我们可以仅使用先前收集的数据进行的实际离线强化学习方法。主要思想是将LSTD扩展到Q函数,称为LSTD-Q。
现在,我们拥有的是状态-动作特征,而不是状态特征。特征矩阵 Φ 的行数变为 S x A。我们可以为每个可能的动作设置不同的特征副本。其他所有步骤都完全保持不变。
以下是LSPI算法的步骤:
- 对于当前策略
π_k,使用LSTD-Q公式计算其Q函数的权重w_q。 - 计算一个新策略
π_{k+1},它是相对于w_q所代表的Q函数的贪婪策略。 - 将
Φ'更新为使用新策略π_{k+1}在下一状态s'所采取动作的特征。 - 重复步骤1-3。
⚠️ 线性方法的局限与总结
那么,这一切在实践中有什么问题呢?问题在于我们之前讨论过的分布偏移问题。这种线性方法(当然可以将其重新推导用于非线性系统并进行某种迭代)并没有解决分布偏移问题。

因为它本质上只是在训练集上进行经验风险最小化(最小二乘)。这意味着我们之前谈到的所有问题,例如通过最大化策略来发现对抗样本,仍然会影响你。具体影响在算法的第二步(取argmax)中体现。


总的来说,所有*似动态规划方法(拟合价值迭代、Q迭代等)都会受到这种动作分布偏移的影响,我们必须修复它。



理解这些线性方法是有益的,因为它们为分析提供了有用的工具,并为我们如何发展到今天的技术提供了良好的视角。但它们本身并没有为我们提供在实际深度强化学习设置中进行离线强化学习的强大工具。如何正确地做到这一点,将是下一讲的内容。

本节课总结:我们一起学习了离线强化学习中经典的线性拟合价值函数方法,包括从特征空间模型推导到LSTD和LSPI算法。我们看到了如何用样本实现免模型估计,也明确了这些经典方法因未处理分布偏移问题而在深度网络应用中受限。这为后续学习现代离线强化学习技术奠定了基础。

课程 P67:离线强化学习 2 🧠
在本节课中,我们将继续探讨离线强化学习,并重点介绍一系列基于价值函数估计的现代离线强化学习算法。这些算法的核心在于,它们明确地采取了措施来缓解“分布漂移”这一核心挑战。

回顾:离线强化学习与分布漂移
上一节我们介绍了离线强化学习的基本概念。本节中,我们先简要回顾一下。
基于策略的强化学习算法通常需要与环境交互来收集数据,并用这些数据更新模型。离线强化学习则摒弃了主动数据收集,完全依赖于一个预先给定的离线数据集 D。这个数据集由某个未知的“行为策略” π_β 收集。

我们的目标依然是最大化期望奖励。然而,在使用基于价值的方法(如Q学习)时,我们会面临分布漂移问题。Q函数根据数据集 D(即 π_β 下的分布)来拟合其目标值。当我们用这个Q函数来评估或优化新策略 π_θ 时,由于 π_θ 与 π_β 的分布不同,Q函数在 π_θ 下的估计值会变得非常不准确。更糟糕的是,策略 π_θ 本身被训练为最大化Q值,这激励它去寻找那些Q函数可能错误地给出极高估计值的“对抗性”动作,导致实际性能很差但估计值虚高。
因此,要开发实用的深度离线强化学习算法,我们必须设法解决分布漂移问题。
策略约束方法:思路与局限
一种被广泛研究的方法是策略约束方法。这类方法通常在演员-评论家框架中,修改策略更新步骤,使其在最大化Q值的同时,还受到与行为策略 π_β 差异的约束。一个常见的约束是KL散度:

D_KL(π_θ(·|s) || π_β(·|s)) ≤ ε
从原理上讲,如果约束 ε 足够小,新策略 π_θ 就不会偏离 π_β 太远,从而减轻分布漂移。
然而,这种方法存在几个问题:
- 行为策略未知:我们通常不知道
π_β的具体形式,需要额外拟合模型来估计它,这增加了复杂性。 - 约束可能过于悲观或不足:KL散度等约束可能无法精确反映我们真正关心的“支持范围”。我们理想的新策略应该只给数据集中出现过的、且Q值高的动作分配高概率。但KL散度约束可能会迫使策略给一些Q值低但
π_β概率高的动作也分配一定概率,限制了性能提升。反之,简单的约束也可能无法有效阻止策略在数据支持范围外进行不可靠的探索。
因此,尽管策略约束方法提供了有用的分析工具,但若不加以精心设计和优化,其实际效果往往有限。
实现策略约束:显式方法
以下是几种显式执行策略约束的高层次方法概述。需要注意的是,这些方法通常不是当前最有效的。

1. 修改演员目标
将KL散度约束通过拉格朗日乘子法融入演员的优化目标。演员的损失函数变为:
L_actor = E_(s~D)[E_(a~π_θ(·|s))[-Q(s, a) + λ * (log π_θ(a|s) - log π_β(a|s))]]
其中 λ 是拉格朗日乘子。这需要我们知道 log π_β(a|s),通常需要通过行为克隆来估计 π_β。
2. 修改奖励函数
在奖励函数中直接添加一个基于策略差异的惩罚项,例如 r'(s, a) = r(s, a) - α * D(π_θ(·|s), π_β(·|s))。这种方法会让策略不仅考虑即时差异,还考虑未来可能产生的差异,具有不同的理论性质。
然而,现代高效的离线强化学习方法通常不采用上述显式约束的方式。
隐式策略约束与优势加权回归


一种更优雅的方法是隐式策略约束。我们再次考虑带KL散度约束的策略优化问题。通过拉格朗日对偶性,可以推导出该问题的最优解具有如下形式:
π*(a|s) ∝ π_β(a|s) * exp(Q(s, a) / λ)
这个公式非常直观:最优策略正比于行为策略 π_β 乘以一个以优势函数(或Q函数)为指数的权重。λ 控制着权重分布的“温度”。虽然这个公式仍然包含 π_β,但关键点在于,我们可以通过加权最大似然估计(即加权行为克隆)来*似这个最优策略,而无需知道 π_β 的显式形式。
具体做法是:
- 从数据集
D(即π_β)中采样状态-动作对(s, a)。 - 使用当前评论家(Q函数)计算该动作的权重
w(s, a) = exp(Q(s, a) / λ)。 - 通过最大化加权对数似然来更新策略
π_θ:
L_actor = E_((s,a)~D)[ -w(s, a) * log π_θ(a|s) ]
这被称为优势加权回归(Advantage-Weighted Regression, AWR) 或类似变体。算法本质上是模仿数据集中的动作,但更侧重于模仿那些Q值高的好动作。它隐式地实现了策略约束,只需要来自 π_β 的样本,而不需要其概率密度。

隐式Q学习:避免分布外查询



尽管优势加权回归很巧妙,但在训练过程中,为了估计优势函数,我们仍然需要查询策略 π_θ 下的动作,这可能会涉及分布外查询并引入误差。

那么,能否设计一种方法,完全避免在训练过程中查询任何分布外动作呢?隐式Q学习(Implicit Q-Learning, IQL) 正是基于这一思想。

IQL的核心洞察是:我们可以通过修改价值函数 V(s) 的损失函数,使其回归到数据支持范围内动作的Q值上界,而不是Q值的期望。具体来说,它使用一种称为期望分位数回归(Expectile Regression) 的损失函数来代替均方误差损失。
对于分位数参数 τ ∈ (0, 1),期望分位数损失定义为:
L^τ(x, y) = |τ - 1_{y < x}| * (y - x)^2
其中 x 是预测值,y 是目标值。当 τ 较大(如0.9)时,该损失函数对预测值低于目标值(负误差)的惩罚远大于对预测值高于目标值(正误差)的惩罚。因此,最小化这个损失会使预测值趋向于目标值分布的上分位数。
在IQL中,我们进行如下交替更新:
- 更新Q函数:使用标准的贝尔曼备份和均方误差损失,以当前价值函数
V为目标。
L_Q = E_((s,a,r,s‘)~D)[ (Q(s, a) - (r + γ V(s‘)) )^2 ] - 更新价值函数V:使用期望分位数回归损失,让
V(s)回归到数据集动作的Q值上。
L_V = E_((s,a)~D)[ L^τ( Q(s, a), V(s) ) ]
通过选择较大的 τ,V(s) 将*似等于 max_(a ∈ support(π_β(·|s))) Q(s, a),即数据支持范围内动作的最大Q值。整个训练过程只使用数据集 D 中的状态-动作对,完全避免了分布外查询。
训练完成后,我们需要从学到的Q函数和V函数中提取策略。这可以通过一步额外的优势加权回归来实现,即使用IQL训练好的Q函数来计算权重,然后进行加权行为克隆。
总结

本节课我们一起学习了应对离线强化学习中分布漂移问题的几种高级方法。
- 我们首先分析了策略约束方法的直观思路及其在实践中的局限性。
- 接着,我们介绍了隐式策略约束的方法,特别是优势加权回归(AWR),它通过加权行为克隆来隐式地逼*带约束的最优策略,无需知道行为策略的具体形式。
- 最后,我们探讨了隐式Q学习(IQL) 这一前沿方法。IQL通过期望分位数回归,使价值函数学习数据支持范围内动作的Q值上界,从而在训练过程中彻底避免分布外查询,最终通过一步策略提取获得高性能策略。


这些方法代表了当前离线强化学习领域为克服分布漂移、实现可靠离线训练的重要进展方向。
课程 P68:离线强化学习 2 - 处理分布外动作 🧠


在本节课中,我们将学习一种解决离线强化学习中“分布外动作”问题的新方法。与之前试图约束策略(Actor)的方法不同,本节介绍的方法直接修正Q函数中的过高估计问题。

问题回顾:Q函数过高估计


上一节我们介绍了离线强化学习中的核心挑战。本节中我们来看看另一种思路。


正如之前讨论的,问题的根源在于贝尔曼备份(Bellman backup)过程中,我们选择了价值最大的动作。如果这些动作不在数据分布内,那么被选中的往往是那些被错误地、正向高估的动作。


为了直观理解,假设绿色曲线代表真实的Q函数,蓝色曲线是我们的拟合函数。尽管蓝色曲线在大部分区域拟合良好,但如果我们选择蓝色曲线最大化的点,它很可能是在正方向上误差最大的那个点。


解决方案:修正Q函数的目标

因此,一个想法是:修改训练Q函数的目标函数。新的目标函数包含两部分。


以下是目标函数的核心组成部分:


- 标准贝尔曼误差项:
L_贝尔曼 = E_{(s,a)~D} [ (Q(s,a) - (r + γ * max_{a'} Q(s', a')) )^2 ]
这部分与传统的Q学习相同,旨在最小化时序差分误差。

- 惩罚高估项:
L_惩罚 = α * E_{s~D} [ max_{μ(a|s)} E_{a~μ} [Q(s,a)] ]
这部分引入了一个新的分布μ。我们选择μ,使其在给定状态下期望的Q值尽可能大。然后,我们训练Q函数来最小化这些被μ选中的高Q值。直觉上,这个程序会找到那些错误的“峰值”并将它们向下推。
实际上,如果惩罚系数α选择得当,最终学到的Q函数将是真实Q函数的一个下界。然而,这个目标可能过于悲观,因为它会压低所有的Q值,导致无论有多少数据,恢复出的Q函数都永远不会是正确的。


改进方案:*衡的Q函数学习


为了解决过度悲观的问题,我们可以在目标函数中增加第三个项。

以下是完整的目标函数:


- 标准贝尔曼误差项:
L_贝尔曼(同上)。 - 惩罚高估项:
L_惩罚(同上)。 - 数据内奖励项:
L_数据 = - E_{(s,a)~D} [ Q(s,a) ]
这项旨在最大化数据集中(即分布内)动作的Q值。



这个组合最初看起来可能很奇怪,因为我们本意是防止高估。但让我们想象一下这个程序的实际效果:
- 如果所有高Q值对应的动作都在数据集中,那么惩罚项(推低μ选中的动作)和奖励项(推高数据集中的动作)会大致*衡,净效果很小。
- 如果高Q值对应的是与数据集差异很大的动作(分布外动作),惩罚项会将其Q值推低,而奖励项则会推高数据集内动作的Q值。这意味着下一次μ选择动作时,会更倾向于接*数据集的动作。
从某种意义上说,这是一个反馈过程:Q值越偏离数据分布,这两项合力就越会将其“推回”分布。一旦它们被完全推回,两项的作用又会相互抵消。


这个更精细的目标函数不再保证学到的Q函数是所有状态-动作对真值的下界,但可以证明,在策略的期望值上,它仍然能得到保证,而这正是我们最终关心的。

算法实现:SQL框架


接下来我将讨论如何实际实现这个想法。


使用这一概念的算法(例如SQL - Soft Q-Learning)的一般结构如下:


以下是算法的主要步骤:


- 更新评论家(Critic - Q函数):
- 使用包含上述三项(贝尔曼误差、惩罚项、数据奖励项)的目标函数来更新*似的Q函数。
- 唯一改变的是评论家的损失函数。
- 更新演员(Actor - 策略):
- 按照常规的演员-评论家方法更新策略π_θ,以最大化Q值的期望。
- 对于离散动作,策略就是简单的
argmax_a Q(s,a),这与Q学习完全相同。 - 对于连续动作,则需要一个显式的演员网络,并通过梯度上升来更新。

实践技巧:处理分布μ


在实践中,我们需要为分布μ选择一个正则化项R(μ)。一个非常常见且方便的选择是使用熵正则化,即我们希望μ的熵较高。这本质上是一种最大熵正则化。


结果证明,如果这样做,最优的μ与Q值的指数成正比:μ(a|s) ∝ exp(Q(s,a))。


此外,在μ下Q函数的期望值,等于Q值的“对数-指数和”(Log-Sum-Exp):E_{a~μ}[Q(s,a)] = log( Σ_a exp(Q(s,a)) )。

这个性质非常方便:
- 对于离散动作:你甚至不需要显式构造μ,可以直接在损失函数中计算每个状态下的
log( Σ_a exp(Q(s,a)) )项。 - 对于连续动作:你可以使用重要性采样来估计这个期望。例如,从当前策略或均匀分布中采样一批动作,然后利用
μ(a|s) ∝ exp(Q(s,a))的事实,用指数Q值对它们进行重新加权。虽然这是重要性采样,但由于只涉及单步(而非多步累积),它通常效果很好且方差可控。


总结


本节课中我们一起学习了处理离线RL中分布外动作的另一种核心方法。我们了解到,可以通过修改Q函数的学习目标,直接惩罚可能导致高估的Q值峰值,同时奖励数据分布内的动作。这种方法在SQL等算法中得以实现,并通过熵正则化等技巧变得易于计算。对于离散和连续动作空间,我们分别讨论了高效的计算策略。
课程 P69:离线强化学习 2 🧠

在本节课中,我们将学习基于模型的离线强化学习方法。我们将探讨如何利用离线数据集训练动态模型,并解决因模型在分布外状态和动作上产生错误而导致的策略利用问题。

概述 📋
到目前为止,我们讨论的所有离线强化学习方法都是无模型的。然而,基于模型的方法非常适合离线强化学习,因为我们可以收集所有数据,在其上训练一个模型,然后使用该模型来获取良好策略,甚至直接进行规划。
基于模型的强化学习工作原理是:使用数据训练模型,然后利用该模型来获取策略或进行规划。通常,我们会收集更多数据,但在离线设置中,我们不再收集新数据,这就带来了问题。
离线设置中的问题 ⚠️

与Q函数类似,模型本质上是在尝试回答:“如果我们在数据集中的某个状态下采取不同的行动,将会进入什么样的状态?” 在讨论基于模型的强化学习时,我们曾介绍过Dyna风格的方法,即使用真实世界中收集的状态和动作作为短模型滚动的起点。


我们将要讨论的前两种基于模型的离线强化学习方法,本质上是将Dyna风格的方法适配到离线设置。在离线设置中,会出现什么问题呢?
当我们不再收集更多数据时,与Q函数类似,策略可能会学习采取一些“欺骗”模型的行动,这些行动会导致模型进入奖励虚高的状态,因为这些状态是分布外的。因此,我们不仅存在分布外动作的问题,还存在模型分布外状态的问题。策略可以采取一些疯狂的行动,欺骗模型进入分布外状态,并从那里进入更疯狂的状态,从而学习利用这一点。
解决方案思路 💡

直觉上,为了修复这个问题,我们需要修改这些基于模型的方法,使得如果策略开始欺骗模型进入疯狂的状态,它会受到某种惩罚。这样,模型和策略就有动力改变其行为,回到更接*数据分布的区域。

接下来,我们将讨论通过修改奖励函数来施加惩罚的方法。

方法一:基于不确定性的惩罚 🧪

我将介绍一种名为MOPO(Model-Based Offline Policy Optimization)的特定方法。存在两种非常相似的方法:MOPO和MOReL。我将讨论MOPO版本,但它们概念上相当接*。基本思想是通过某种方式惩罚利用模型的策略。
我们惩罚策略的方式,是通过改变奖励函数或一般性地修改MDP模型。一种方法是让奖励函数为进入模型可能出错的状态分配一个小的惩罚。我们用字母 u 来表示这种不确定性惩罚。

我们将添加这种不确定性惩罚,然后使用任何现有的基于模型的强化学习算法。在第二部分,我会解释我们可以使用的特定不确定性惩罚选择。
不确定性惩罚的直觉

这种想法背后的直觉是:如果你的策略最终选择了一些欺骗模型进入具有更高奖励状态(但状态转移是错误的)的行动,那么在那些情况下,我们要求不确定性惩罚 u 要大。因此,不确定性惩罚本质上必须量化模型出错的概率。
如果模型进入了一个错误但看起来很好的状态,那么模型一定做错了什么。如果我们有一个好的不确定性惩罚,它应该能够捕捉到这一点。本质上,不确定性惩罚应该足够严厉地惩罚策略,使得利用模型变得不值得。这就是为什么我们必须精心选择乘数 λ。
如果我们精心选择它,使得惩罚总是比策略通过欺骗获得的收益成本更高,那么策略将改变其行为,避免那些疯狂的分布外状态。
技术实现
从技术上讲,我们需要满足的条件是:惩罚 u 应该至少等于根据某种散度度量(如总变分散度)的模型误差大小。但这并不是一个容易度量的量,因为你通常不知道模型的实际误差有多大。
在实际操作中,我们将使用在基于模型的强化学习讲座中讨论的模型不确定性技术之一,例如集成模型。一种常见的方法是训练一个集成模型,并测量不同模型之间的分歧程度,作为模型误差度量的代理。
然而,一般来说,获得一个好的误差度量,即获得一个至少等于或等于真实模型误差的估计,是一个开放性问题。没有保证每次都有效的方法,但集成分歧是一个常见的选择。
理论背景

假设我们可以找到一个方法,它实际上能提供一个始终至少等于模型真实误差的误差度量。这里有一个有趣的结果可以证明。
我们有两个假设:
- 价值函数足够具有表达性,我们可以准确地表示价值(使用大型神经网络时,可以假设为真)。
- 关于惩罚 u 的假设:这是一个非常强的假设,它说模型误差(真实模型的误差)由 u 上界,意味着 u 至少等于模型的真实误差(按照某种散度度量)。


在上述假设下,可以证明:如果我们使用我们的模型来训练策略 π̂,那么该策略的真实回报将至少等于我们能找到的最佳策略(在修改后的奖励函数 r - λu 下)减去其预期误差。

这个定理有几个有趣的启示:
- 如果我们将行为策略 π_β 代入,我们预期在行为策略访问的状态下,模型的误差将非常低(接*零)。如果 u 对于那个策略非常低,那么这个定理基本上保证我们学习的策略至少与行为策略一样好,这意味着我们很可能改进行为策略,或者至少不会偏离太多。
- 如果我们插入最优策略 π,那么我们学习的策略至少与 π 一样好,减去模型在 π* 访问的状态上的错误惩罚。如果模型对于最优策略访问的状态和动作非常准确,这将保证我们将恢复接*最优的策略。

这些结果表明,这种方法可以改进行为策略,并且如果模型对最优策略访问的状态和动作准确,则可以接*最优策略。其准确性取决于你的数据。
方法二:COMBO 算法 🔄

这是上述想法的一个更进化的版本,我们实际上可以应用类似SQL(Soft Q-Learning)的原则来建模基于离线强化学习的策略。这就是一种名为COMBO的新算法。

COMBO的基本思想是:就像SQL最小化策略下动作的Q值一样,我们可以最小化模型下状态-动作元组的Q值。
我们将有一个评论家损失函数,它看起来与之前的SQL损失非常相似,我们在最小化贝尔曼误差。但现在,我们将使用模型生成的数据来做到这一点。这是一种Dyna式方法:我们将在数据集中最大化Q值,然后,我们将“推低”模型生成的状态和动作的Q值。我们试图使模型下的Q值变得更差,而数据集中的Q值变得更好。
这里的直觉是:如果模型产生的状态和动作明显不同于真实数据,Q函数很容易使其看起来不好。但如果模型产生的状态和动作与数据集中的那些无法区分,那么这两个项应该真正达到*衡。这在某种意义上是一种GAN(生成对抗网络)的想法。
这种方法很好,因为我们实际上没有改变奖励函数,我们只是在对Q函数施加一个额外的正则化,即Q函数尝试使模型生成的状态和动作看起来更差。如果你不能使它们看起来比数据差,这意味着它们与数据无法区分,这意味着模型实际上是正确的。这种方法实际上比MOPO和MOReL工作得稍微好一点。
方法三:轨迹变换器(非Dyna式)🤖
我之前描述的所有算法都是Dyna式算法。我们实际上可以以非Dyna式方式进行离线强化学习,即不学习任何显式策略,而只是尝试在模型下进行规划。但我们仍然需要一些机制来补偿分布外动作。
我想介绍的一篇最*发表的论文叫做轨迹变换器。基本思想是训练一个联合状态-动作模型。我们不仅训练一个模型来基于当前状态和动作预测未来状态,我们将训练一个模型来预测整个轨迹的概率。这个模型通过在数据集中的轨迹上进行密度估计来提供状态-动作序列的概率。
直觉上,我们将使用这个分布来优化一个计划:我们会倾向于选择在这个分布下概率较高的动作序列。这意味着我们将避免在数据中非常不可能的动作,从而避免分布外动作。
此外,在进行离线模型强化学习时,我们可以使用一个非常大且表达能力强的模型,例如Transformer。因为不需要进行主动的数据收集,也不需要在试验之间更新模型,所以模型可以非常大且计算昂贵。Transformer是目前非常强大的序列密度估计模型。

在实际操作中,轨迹变换器对每个时间步的状态和动作的每个维度进行离散化,并将其建模为一个自回归序列模型(例如使用带有因果掩码的Transformer)。然后,可以使用此模型进行规划。

规划与束搜索

你可以使用许多相同的技术进行规划,就像我们在基于模型控制的讲座中讨论的那样。但重要的是要考虑动作的概率,因为你不想计划产生在数据下概率低的动作。
一种处理这个问题的方法是使用束搜索。但不同于使用束搜索来最大化序列概率,我们使用束搜索来最大化累积奖励。


基本的高层思想是:
- 给定当前解码出的子序列(前缀),从模型预测的下一个标记的概率分布中采样多个(例如k个)候选标记。
- 对于每个候选标记,将其附加到前缀后,通过模型计算(或估计)完整序列的累积奖励。
- 保留累积奖励最高的前k个序列作为新的前缀集。
- 重复此过程,一步步生成完整的轨迹。

束搜索方法考虑了概率,因为它从 p_β(数据分布)中采样那些k个标记。它从数据集中概率高的标记中采样,然后从中选出能带来最高奖励的一个。

为何有效?

- 生成高概率轨迹:避免分布外状态和动作,因为你实际上在使用
p_β的分布来选择状态和动作。 - 使用大型模型:在离线强化学习中效果很好,因为你可以使用大量的计算资源,并捕获复杂的行为策略和动态。
- 准确的长时程预测:如果你限制自己只选择与数据集中动作相似的动作,那么模型可以对未来很长一段时间做出非常准确的预测。



总结 🎯

在本节课中,我们一起学习了基于模型的离线强化学习方法。我们首先了解了在离线设置中,基于模型的方法面临分布外状态和动作导致模型被欺骗的核心问题。


接着,我们探讨了三种主要的解决方案:
- MOPO方法:通过在奖励函数中引入基于模型不确定性的惩罚 u,来抑制策略访问模型可能出错的区域,从而保证策略性能的下界。
- COMBO算法:将类似SQL的正则化思想应用于模型生成的数据,通过让Q函数“贬低”模型生成的状态-动作对,间接促使模型生成更接*真实数据分布的轨迹。
- 轨迹变换器:这是一种非Dyna式的规划方法。它通过训练一个强大的序列模型(如Transformer)来对整个轨迹进行密度估计,并利用束搜索等规划技术在保持高概率(接*数据分布)的同时最大化累积奖励。


这些方法各有特点,但共同的核心思想都是通过某种形式的约束或正则化,将学习过程或规划过程限制在离线数据集支持的分布内,从而避免因模型在分布外区域的错误而导致的性能下降。基于模型的离线强化学习因其能利用强大模型进行长程规划,并在离线阶段投入大量计算,已成为一个非常活跃且有前景的研究方向。
课程 P7:CS 285 第2讲 模仿学习 第4部分 🧠

在本节课中,我们将要学习几种算法方法,这些方法可以提升行为克隆的性能。我们将首先探讨多任务学习如何使模仿学习变得更有效。
多任务学习与目标条件行为克隆 🎯
上一节我们讨论了行为克隆面临的复合误差问题。本节中我们来看看一种改进方法:多任务学习。这初看可能有些矛盾,但事实证明,同时学习多个任务有时能让模仿学习变得更容易。
假设你想训练一个代理,例如让车辆驶向特定地点 p1。你可能拥有许多驶向地点 p1 的演示数据,并训练一个给定状态 s 的策略 π(a|s)。这是一件相当直接的事情。但我们之前讨论过,如果你希望训练出的策略足够鲁棒,以减少复合误差的影响,你可能需要专家数据中包含一些错误及从错误中恢复的状态。
如果你没有这种“不完美”的专家数据,但拥有专家尝试驾驶到许多不同地点的数据,你可以这样做:训练一个策略,该策略接收期望目标位置作为额外输入。获取这个目标位置的方法是,查看人类专家在轨迹中最后实际到达的状态。然后,你将训练一个策略以达到任何目标位置 p。
这种方法的有趣之处在于:如果专家尝试去许多不同的位置,他们将访问许多不同的状态。通过将策略条件化于目标位置,你仍然能得到针对目标 p1 的策略,但你会获得更多的训练数据。更重要的是,你能从许多不同的状态获取数据,这些状态可能是专家如果只追求最优到达 p1 时不会访问到的。
在训练时,你可以进行目标条件行为克隆。你可能收到一系列轨迹,甚至没有明确说明专家意图。它们只是一系列状态和动作。你假设专家所做的任何事情,都是达到其最终实际状态的好例子。因此,你将每个轨迹的最后一个状态作为策略的额外输入,并训练策略去采取专家在轨迹中采取的动作。
这将为你提供覆盖更广的训练状态,并有望提供许多可供学习纠正的实例。在这种情况下,尽管你仍然会遭受分布偏移(即可能进入不熟悉的状态),但对于你指定的特定目标,该状态可能对其他目标而言是熟悉的。另一个好处是,你可以利用那些并非最优的数据(例如专家未能到达位置 p1,但在其他位置成功了),并从中学习。
以下是目标条件行为克隆的核心步骤:
- 对于每个演示轨迹,获取其最终状态作为目标
g。 - 对于轨迹中的每个时间步
t,将状态s_t和目标g一同作为策略的输入。 - 最大化演示中动作
a_t的对数概率,给定状态s_t和目标g。
其目标函数可以表示为:
max_θ Σ_t log π_θ(a_t | s_t, g)
其中 g 是轨迹的最终状态。

这里需要注意一点:尽管在实践中这通常效果更好,但在理论上,这种方法实际上存在两个分布偏移问题。除了之前讨论的策略状态分布 p_π(s) 与数据分布 p_data(s) 之间的偏移外,还存在第二个偏移源。这部分留作思考题,我们可以在课堂上进一步讨论。


实践案例:从玩耍中学习 🕹️
现在,让我们看看一些已经应用了目标条件行为克隆的研究工作。这个方法可以说由《通过隐式规划网络学习玩耍》和《无监督视觉运动控制中的隐式规划》这两篇论文广泛推广。

我将先谈谈《从玩耍中学习隐式规划》。其核心概念是收集数据:让人类在环境中随意玩耍,而不是执行特定任务。在这个数据集中,人们使用VR控制器控制模拟机器人,执行各种随机但有意愿的行为。这当然覆盖了许多不同的状态。

在这种数据上训练策略,将很难遇到分布外的状态,因为几乎所有合理状态都在数据中出现过,或至少非常相似。但当然,每个轨迹在执行什么任务并不明确。通过处理这些数据并执行目标重标记——将每个轨迹标记为“达到其最终实际达到的状态”——然后使用能够表达多模态的隐变量策略进行训练,这项工作的作者能够获得可达到广泛目标的有效策略。

你可以得到一个策略,当你给它一个目标(例如门关闭的状态或抽屉打开的状态),机械臂会自动执行相应操作。因此,你可以看到它在单一策略中执行了相当多的行为。

在线自我改进与大规模应用 🚀
与这些目标条件行为克隆方法相关的一件有趣的事情是,你可以用它们作为在线自我改进的方法,这与强化学习的精神非常相似。想法是:你可以从一个随机策略开始,将这些随机策略产生的数据视为“达到实际所达状态”的演示,对这些随机轨迹达到的状态进行重标记,然后用它来改进策略,接着再次运行改进后的策略。

其思想是:最初策略主要执行随机动作,然后它学习到导致实际达到某些状态的行为,在下一次迭代中它可以变得更有目的性。这个方法仅迭代应用“目标重标记的模仿学习 -> 数据收集 -> 更多重标记 -> 更多模仿”的循环,这实际上可以成为一种相当不错且简单的方法来改进策略。
这些目标条件行为克隆方法的另一个优点是可扩展性强,因此可以在大规模上应用。
下一个案例研究来自论文《One Policy to Control Them All》。这项工作开发了一种用于驾驶地面机器人的策略(还不是自动驾驶汽车,但是小规模地面机器人),并且可以泛化到许多不同类型的机器人。它是一种目标条件模仿学习方法,输入当前观察、目标图像以及历史观测(以处理部分可观测性问题),然后输出动作。

它在大规模的机器人数据上训练,这些数据来自许多不同类型的机器人,从小型遥控车到全尺寸自动驾驶车辆。这个策略的酷之处在于,它可以泛化到从未训练过的新类型机器人上,例如视频中的无人机。通过从大量不同车辆上训练,它可以在没有任何针对无人机训练的情况下控制无人机。它使用了我们讨论过的一些想法:目标重标记技巧,以及通过拼接帧或序列模型(如Transformer)来处理历史信息。
最后想提及的一篇论文是《Hindsight Experience Replay》(后视经验回放),它引入了一个非常相似的原则。我们稍后会更详细地讨论离策略强化学习,这里只想提到这篇论文,因为它在这个研究背景下经常出现。它并非在做目标条件行为克隆,而是将这种“后视”重标记方法应用于离策略RL和演员-评论员方法中。这也是一个被广泛使用的想法。
总结 📝


本节课中我们一起学习了如何通过算法改进行为克隆。我们重点探讨了多任务学习和目标条件行为克隆,通过将策略条件化于目标状态,利用更丰富的数据来提升策略的鲁棒性和泛化能力。我们还通过《从玩耍中学习》和《One Policy to Control Them All》等案例,看到了这些方法在实践中的应用,包括从非结构化数据中学习以及实现跨机器人的策略泛化。最后,我们了解到这种目标重标记的思想甚至可以用于策略的在线自我改进,并与强化学习中的后视经验回放概念相联系。
课程 P70:离线强化学习应用与总结 🧠
在本节课中,我们将总结离线强化学习的关键内容,并探讨其实际应用场景与面临的开放性问题。我们将了解如何根据具体需求选择合适的算法,并理解离线强化学习在现实世界部署中的工作流程与优势。
算法选择指南 📋
上一节我们介绍了多种离线强化学习算法,本节中我们来看看如何根据具体场景选择合适的算法。以下是一个决策树式的选择指南,请注意,这是一个基于当前(约2021年)研究现状的大致准则,未来可能会有变化。
-
仅进行离线训练(不进行在线微调):
- 保守Q学习(Conservative Q-Learning, CQL) 是一个不错的选择。它只有一个超参数,被广泛理解和测试,并且在许多论文中被验证在纯离线模式下工作良好。
- 隐式Q学习(Implicit Q-Learning, IQL) 也是一个好选择。它同样适用于纯离线模式,并且更灵活(也支持在线模式),但拥有更多的超参数。
-
先离线训练,后进行在线微调:
- 优势加权演员-评论家(Advantage-Weighted Actor-Critic, AWAC) 是一个好选择。它在该领域被广泛使用并经过良好测试。
- 保守Q学习(CQL) 在离线模式下表现出色,但因其倾向于过于保守,在线微调效果不佳。
- 隐式Q学习(IQL) 是离线训练后在线微调的好选择。实验表明其性能似乎优于AWAC,尽管它出现时间不长,验证范围不如前者广泛。
-
基于模型的离线强化学习方法:
- 如果你有信心在特定领域训练出高质量的动态模型,COMBO 是一个不错的选择。它可以看作是结合了模型的SQL,是当前性能最佳的基于模型的离线强化学习方法之一。
- 如果训练高质量模型很困难,轨迹变换器(Trajectory Transformer) 可能是一个选择。它使用强大有效的模型,但缺点是训练和评估计算量极大,且因不直接学习策略,在长时程任务上可能存在限制。
离线强化学习的应用优势 🚀

了解了算法选择后,我们来看看离线强化学习为何能成为现实世界应用的强大框架。通常,在线强化学习严重依赖模拟器。如果没有模拟器,直接在现实世界中部署在线强化学习流程繁琐且迭代缓慢。
相比之下,离线强化学习的工作流程更具实用性:

- 收集原始数据集:数据可来自人类演示、脚本控制器、已有策略或其组合。
- 设计奖励函数:可以手动标注数据集的奖励,无需完全自动化的奖励函数。
- 使用离线RL训练策略:在数据集上训练策略。
- 轻量级迭代与评估:修改算法后,无需重新收集数据,只需重用或扩增现有数据集。虽然仍需在线运行策略以评估性能,但这比完整的在线训练轻量得多。
- 数据集复用:未来在类似领域的新项目可以直接复用已有的数据集。

这种流程使得在现实世界(如机器人、医疗、金融等领域)中快速测试新算法思想成为可能,而无需承担在线探索的风险和高昂成本。




研究实例与未来方向 🔬
接下来,我们通过一些研究实例来具体感受离线强化学习的应用,并探讨其未来的发展方向。


实例一:机器人多任务学习
一项大规模现实世界机器人项目收集了涵盖12项任务、涉及数千物体、耗时数月的数据。研究者提出假设:能否在不使用真实奖励函数的情况下,仅通过目标条件强化学习(即给定目标图像,自动计算奖励)来学习这些任务?他们直接复用已有的庞大离线数据集训练策略,成功验证了这一假设,使机器人能够完成抓取和重新排列等任务。这展示了离线RL如何允许研究者在不收集新数据的情况下,快速验证新算法思想。


实例二:机器人导航
另一个研究利用约40小时的机器人驾驶离线数据集,训练了一个目标条件导航系统,可以实现送信、送披萨等功能。研究者无需为这个新系统收集任何额外数据,直接通过离线强化学习在原有数据集上训练出新策略,再次体现了其高效复用数据、快速测试新想法的优势。

开放性问题与未来方向
尽管前景广阔,离线强化学习仍面临诸多挑战:
- 工作流程与评估:在监督学习中,我们有清晰的训练-验证-测试分割来评估模型。在离线RL中,等效的、无需在线部署的可靠评估工作流程仍不成熟。这是一个重要的开放问题。
- 统计保证:虽然存在一些关于分布漂移的理论界限和结果,但它们通常较为宽松且不完整,需要更坚实的理论保障。
- 大规模应用的可扩展性:从原理上讲,离线RL可应用于众多领域,但在实践中尚未广泛普及。需要更深入地理解其在真实世界应用中的具体限制和约束,以推动其发展。
总结 📝

本节课我们一起学习了离线强化学习的算法选择指南,理解了其相较于在线强化学习在现实世界应用中的流程优势,并通过研究实例看到了其实际应用潜力。最后,我们探讨了该领域在评估流程、理论保证和可扩展性方面面临的开放性问题。离线强化学习为实现安全、高效的现实世界智能系统提供了一条充满希望的道路。
课程 P71:强化学习理论入门 🧠
在本节课中,我们将简要探讨强化学习理论。这是本课程中唯一的理论讲座,因此不会深入细节。我们的主要目标是让你了解在强化学习算法中可以进行的理论分析类型,以及从这类分析中可能得出的结论。
理论分析的核心问题 ❓
上一节我们介绍了课程目标,本节中我们来看看理论分析通常会问哪些问题。当我们进行强化学习理论分析时,会提出多种问题,以下是几个常见的例子:
- 样本复杂性与性能:给定一个算法,在提供 N 个样本并经过 K 次迭代后,其性能如何?“好”意味着什么?例如,在 Q 学习中,我们可能问:经过 K 次迭代后,学习到的 Q 函数
q_hat_k与真实最优 Q 函数q_star的差距有多大?我们能否证明,在某种范数下,q_hat_k与q_star的差距不超过 ε? - 策略性能与遗憾:在迭代 K 时,由 Q 函数诱导出的策略
π_k表现如何?具体来说,策略π_k的真实 Q 值q_π_k与最优 Q 值q_star的差距是多少?这实际上衡量了策略π_k的预期奖励与最佳可能奖励之间的差距,是一种“遗憾”的度量。 - 探索算法的遗憾:如果使用特定的探索算法,其“遗憾”(即累积的性能损失)会有多高?例如,某些探索方法可能保证遗憾的增长与时间 T 的对数成正比。
我们将主要关注样本复杂性这类问题。

理论分析的假设与目的 🎯

在深入分析之前,我们需要理解理论分析通常建立在较强的假设之上,并且有其特定目的。
常见的理论假设
在最一般的设置下分析完整的深度强化学习方法通常非常困难。因此,理论分析需要做出一些简化但能引出有趣结论的假设。

- 分离探索与学习:探索的难度通常会主导样本复杂性的分析。为了单独研究学习的样本复杂性,我们有时会抽象掉探索问题。
- 生成模型假设:一种常见的简化是假设存在一个“生成模型”或“神谕”,允许我们根据需要从马尔可夫决策过程(MDP)的任意状态-动作对中采样任意数量的转移样本。这当然不现实,但它允许我们专注于研究“学习”本身有多难,而不被“探索”的复杂性所困扰。
理论分析的目的
理论分析的目的并非证明某个算法在实际中每次都完美工作(这对于深度强化学习方法目前是不可能的),而是:
- 理解错误如何受问题参数影响:例如,更大的折扣因子 γ 会让问题更容易还是更难解决?状态空间变大时,需要多少样本?如果我们想将误差减半,需要将样本数量增加两倍还是四倍?
- 提供定性指导:理论分析为我们提供了关于各种因素如何影响算法性能的定性结论。这些结论可以指导我们选择参数和进行算法设计。例如,理论可以告诉我们错误如何随“有效地*线”
1/(1-γ)增长。
重要的是要明白,理论结果基于简化的假设,它们为算法在理想化情况下的潜力和局限提供指导,而非实际性能的保证。
基础分析工具:集中不等式 📉
为了将监督学习中的误差分析工具引入强化学习,我们首先需要回顾一些基础数学工具。
当我们研究样本数量 N 如何影响对某个量的估计误差时,需要使用集中不等式。它们量化了随机变量的估计值以多快的速度集中在真实值(期望值)附*。
以下是两个核心的不等式:
- 霍夫丁不等式:适用于估计有界实值随机变量的均值。假设我们有 N 个独立同分布的样本
X1, X2, ..., XN,其均值 μ 未知,且每个样本的取值范围在[b-, b+]之间。样本均值X_bar_N与真实均值 μ 的绝对差超过 ε 的概率有一个上界:P(|X_bar_N - μ| ≥ ε) ≤ 2 * exp(-2Nε² / (b+ - b-)²)。由此可以推导出,要达到误差 ε 和置信度 1-δ,所需样本数 N 大致按1/ε² * log(1/δ)缩放。 - 类别分布估计的集中不等式:适用于估计离散(类别)随机变量的概率分布。假设一个随机变量 Z 有 D 个可能取值,其真实分布为向量 q。我们用 N 个样本得到的经验分布为
q_hat。那么,经验分布与真实分布之间的 1-范数误差(即总变分距离)超过√(D/N) + ε的概率有一个上界:P(||q_hat - q||₁ ≥ √(D/N) + ε) ≤ exp(-Nε²)。同样,我们可以推导出样本复杂度与D/ε² * log(1/δ)相关。
在强化学习中,当我们用计数法估计状态转移概率 P(s'|s,a) 时,D 就是状态空间的大小 |S|。因此,对于每个状态-动作对 (s,a),使用 N 个样本估计的转移模型 P_hat 与真实模型 P 的总变分距离,将以高概率被 O(√(|S|/N)) 所界定。
从模型误差到值函数误差 🔗


现在,我们进入强化学习理论的核心部分:理解模型 P_hat 的估计误差如何影响 Q 函数 Q_hat^π 的误差。
我们考虑一个简化的场景:在神谕探索假设下,我们拥有一个固定的策略 π。我们通过采样估计出模型 P_hat,然后精确地求解在模型 P_hat 下策略 π 的 Q 函数 Q_hat^π(例如,通过解析求解或迭代法)。我们的目标是分析 Q_hat^π 与真实 MDP 中策略 π 的 Q 函数 Q^π 之间的差距。
首先,我们利用贝尔曼方程建立 Q 函数与模型 P 的关系。对于固定策略 π,其 Q 函数满足:
Q^π = R + γ * P * V^π,其中 V^π = Π * Q^π(Π 是策略矩阵)。
整理后可得:Q^π = (I - γ P Π)^{-1} R。
同理,对于学习到的模型,有:Q_hat^π = (I - γ P_hat Π)^{-1} R。
接下来,我们使用一个关键引理——模拟引理,来连接模型误差与 Q 函数误差。
模拟引理:
Q^π - Q_hat^π = γ * (I - γ P_hat Π)^{-1} * (P - P_hat) * V^π
这个引理通过代数推导证明,它表明 Q 函数的误差可以表示为模型误差 (P - P_hat) 经过一个“评估算子” γ(I - γ P_hat Π)^{-1} 变换后的结果。
为了从模拟引理得到误差上界,我们需要另一个引理来界定这个“评估算子”对向量的放大效应。
评估算子范数引理:
对于任何向量 v,有 || (I - γ P_hat Π)^{-1} v ||_∞ ≤ ||v||_∞ / (1 - γ)。
直观理解:这个算子对应于在折扣因子 γ 下计算无限累积奖励,其最大放大倍数就是有效地*线 1/(1-γ)。
将模拟引理与评估算子范数引理结合,我们可以得到:
||Q^π - Q_hat^π||_∞ ≤ (γ / (1-γ)) * || (P - P_hat) V^π ||_∞
进一步,假设奖励值在 [0, R_max] 之间(为简化常设 R_max=1),则 ||V^π||_∞ ≤ R_max/(1-γ)。同时,|| (P - P_hat) V^π ||_∞ 可以被 ||P - P_hat||_1 * ||V^π||_∞ 所界定(这里 ||·||_1 是矩阵的行和范数,对应最坏情况的总变分距离)。
最终,我们得到核心结论:
||Q^π - Q_hat^π||_∞ ≤ (γ / (1-γ)²) * max_{s,a} ||P(·|s,a) - P_hat(·|s,a)||₁
这个不等式非常重要,它告诉我们:
- Q 函数误差与模型误差成正比。
- 误差被有效地*线
1/(1-γ)的*方所放大。这意味着在长视界问题中(γ 接* 1),模型的不准确性会对值函数估计产生更严重的影响。
结合之前集中不等式给出的模型误差界 max_{s,a} ||P - P_hat||₁ ≤ O(√(|S|/N)),我们可以定量地写出,为了达到 Q 函数的 ε-精度,每个状态-动作对所需的样本数 N 大致需要满足 N ≥ O( |S| / (ε² (1-γ)⁴) )。这展示了样本复杂度与状态空间大小、精度要求以及折扣因子的定性关系。
从策略评估到最优策略性能 🏆
上一节我们分析了固定策略下的评估误差,本节中我们来看看如何将这些结论推广到最优策略的学习上。
我们关心三个相关问题:
- 学习模型下的最优 Q 函数
Q_hat_star与真实最优 Q 函数Q_star的差距。 - 由
Q_hat_star导出的策略π_hat_star(即argmax策略)在真实 MDP 中的性能Q^{π_hat_star}与最优性能Q_star的差距。
利用我们已有的工具,可以相对简洁地回答这些问题。
问题 1:最优 Q 函数的误差
由于 Q_star = max_π Q^π,Q_hat_star = max_π Q_hat^π,并且对于所有策略 π,都有 ||Q^π - Q_hat^π||_∞ ≤ ε。那么,两个最大值的差的无穷范数,不会超过它们差的无穷范数的最大值:
||Q_star - Q_hat_star||_∞ = || max_π Q^π - max_π Q_hat^π ||_∞ ≤ max_π ||Q^π - Q_hat^π||_∞ ≤ ε
因此,最优 Q 函数的误差也被同样的 ε 所界定。
问题 2:学习策略的性能遗憾
我们想知道策略 π_hat_star 的真实性能 Q^{π_hat_star} 离最优性能 Q_star 有多远。我们可以将其误差分解:
Q_star - Q^{π_hat_star} = (Q_star - Q_hat_star) + (Q_hat_star - Q^{π_hat_star})
其中,Q_hat_star 是在学习模型下 π_hat_star 的 Q 值。根据三角不等式:
||Q_star - Q^{π_hat_star}||_∞ ≤ ||Q_star - Q_hat_star||_∞ + ||Q_hat_star - Q^{π_hat_star}||_∞
- 第一项
||Q_star - Q_hat_star||_∞由问题 1 可知 ≤ ε。 - 第二项
||Q_hat_star - Q^{π_hat_star}||_∞是相同策略π_hat_star在两个不同模型(真实模型和学习模型)下的 Q 值差异。这正是我们最初分析的策略评估误差,因此也 ≤ ε。
所以,最终策略的性能遗憾被 2ε 所界定:||Q_star - Q^{π_hat_star}||_∞ ≤ 2ε。这意味着,如果我们能准确评估策略(误差 ε),那么通过在该评估下选择最优动作得到的策略,其在真实世界中的性能,至多比最优策略差 2ε。
总结 📝
本节课中,我们一起学习了强化学习理论分析的基本思路和工具。
- 我们首先明确了理论分析的目的:不是提供实际算法的绝对保证,而是理解问题参数(如状态空间大小 |S|、折扣因子 γ、样本数 N)如何定性影响算法的样本复杂性和性能界限。
- 我们介绍了常见的理论假设,如生成模型假设,它允许我们将探索的困难分离出去,专注于分析学习本身的样本复杂性。
- 我们回顾了关键的分析工具——集中不等式,如霍夫丁不等式,它用于量化从有限样本中估计量的误差。
- 我们深入探讨了强化学习特有的分析:如何将模型
P的估计误差传递到值函数Q^π的误差。通过贝尔曼方程、模拟引理和评估算子范数引理,我们推导出核心关系:||Q^π - Q_hat^π||_∞ ≤ O( (1/(1-γ)²) * ||P - P_hat|| )。这表明误差随有效地*线1/(1-γ)*方增长。 - 最后,我们将策略评估的结论推广到最优策略的学习,证明了学习到的策略的性能遗憾最多是最优策略评估误差的两倍。

这些分析为我们提供了宝贵的直觉:在强化学习中,长视界会显著放大模型误差,而准确的策略评估是获得高性能策略的基础。尽管这些结论建立在简化假设之上,但它们为算法设计和参数选择提供了重要的定性指导方向。


课程 P72:无模型强化学习算法理论分析 🧠

在本节课中,我们将对一种理想化的无模型强化学习算法——拟合Q迭代(Fitted Q-Iteration)进行理论分析。我们将探讨算法中误差的来源,并量化这些误差如何影响最终学到的Q函数与最优Q函数之间的差距。



理想化模型与误差来源


上一节我们介绍了强化学习的基本框架。本节中,我们来看看一个具体的算法模型。为了便于理论分析,我们使用一个比实际算法(如神经拟合Q迭代)稍作简化的理想化模型。



这个模型的核心是精确Q迭代。在精确Q迭代中,我们反复应用贝尔曼最优算子 T 来更新Q函数:
Q_{k+1} = T Q_k
其中,贝尔曼最优算子 T 的定义为:
(T Q)(s, a) = R(s, a) + γ * E_{s'~P(·|s,a)}[ max_{a'} Q(s', a') ]

然而,在实际的拟合Q迭代中,我们无法进行精确更新。我们的*似算法 \hat{Q}_{k+1} 试图最小化其与某个目标值之间的差异,但会引入两种误差:
- 抽样误差:我们使用经验估计的奖励
\hat{R}和转移概率\hat{P}来构建*似的贝尔曼算子\hat{T},而非真实的R和P。 - *似误差:在每一步,我们无法完美地拟合目标值,即
\hat{Q}_{k+1} ≠ \hat{T} \hat{Q}_k。



我们的目标是分析,当迭代次数 k 趋*于无穷时,学到的 \hat{Q}_k 与最优Q函数 Q* 之间的渐*差距。





分析抽样误差



首先,我们单独分析由有限样本导致的抽样误差,即 \hat{T} 与 T 之间的差异。这与之前基于模型的分析思路相似。



我们关心对于任意Q函数 Q,\hat{T}Q 与 TQ 的差异有多大。通过代入定义并利用三角不等式,我们可以将其误差分解并界定:


|| \hat{T}Q - TQ ||_∞ ≤ || \hat{R} - R ||_∞ + γ * || E_{\hat{P}}[max Q] - E_{P}[max Q] ||_∞


以下是两个误差项的来源和界限:



- 奖励估计误差 (
|| \hat{R} - R ||_∞):这本质上是估计一个随机变量(奖励)均值的问题。根据霍夫丁不等式(Hoeffding‘s Inequality),这个误差以高概率按O(1/√n)的速率收敛,其中n是样本数量。 - 动态模型估计误差 (
|| E_{\hat{P}}[max Q] - E_{P}[max Q] ||_∞):这涉及到估计状态转移分布P的误差。我们可以利用分类分布估计的集中不等式(如用总变分距离界定),证明此项误差也按O(1/√n)缩放,并乘以Q函数的最大值||Q||_∞。



综合来看,抽样误差的无穷范数以高概率被一个形式为 (常数 / √n) 的量所界定,其中常数依赖于奖励范围、状态/动作空间维度以及 ||Q||_∞。







分析*似误差




接下来,我们分析由函数拟合不完美导致的*似误差。为了简化分析,我们做一个较强的假设:在每次迭代 k,我们拟合的误差在无穷范数下是有界的。即:
|| \hat{Q}_{k+1} - T \hat{Q}_k ||_∞ ≤ ε_k



这意味着,对于最坏的状态-动作对,我们的拟合误差不超过 ε_k。虽然在实际监督学习中更难保证无穷范数误差,但这个假设使理论推导变得方便。

我们想要分析 || \hat{Q}_k - Q* ||_∞。通过巧妙地减去并添加中间项 T \hat{Q}_{k-1},并利用贝尔曼算子 T 是一个收缩映射的关键性质(即 || T Q_1 - T Q_2 ||_∞ ≤ γ || Q_1 - Q_2 ||_∞),我们可以得到一个递归关系:


|| \hat{Q}_k - Q* ||_∞ ≤ ε_{k-1} + γ || \hat{Q}_{k-1} - Q* ||_∞




将这个递归关系不断展开,我们可以得到:


|| \hat{Q}_k - Q* ||_∞ ≤ Σ_{i=0}^{k-1} γ^{i} ε_{k-1-i} + γ^{k} || \hat{Q}_0 - Q* ||_∞



这个结果非常直观:
- 初始化误差的影响会衰减:随着迭代次数
k增大,γ^k项会趋*于零,初始Q函数\hat{Q}_0的选择对最终结果的影响越来越小。 - 拟合误差会累积:所有历史迭代中的*似误差
ε_i都会以折扣因子γ的幂次形式累积到最终误差中。



当 k → ∞ 时,假设所有 ε_i 均小于某个最大值 ε,则渐*误差被界定为:
lim_{k→∞} || \hat{Q}_k - Q* ||_∞ ≤ (ε) / (1 - γ)



这表明,*似误差会被放大 1/(1-γ) 倍,而 1/(1-γ) 大致对应于有效规划视界(horizon)。直觉是,每一次贝尔曼备份都会引入一点误差,而我们需要进行视界长度次数的备份,因此误差会线性累积。







综合误差分析


现在,我们将抽样误差和*似误差结合起来,分析完整拟合Q迭代的误差。



在真实算法中,我们每一步是用 \hat{T} 而非 T 来生成目标值,并且拟合也不完美。因此,每一步的总误差 δ_k = || \hat{Q}_{k+1} - T \hat{Q}_k ||_∞ 实际上包含了两种误差。我们可以将其分解:

δ_k ≤ (*似误差: || \hat{Q}_{k+1} - \hat{T} \hat{Q}_k ||_∞) + (抽样误差: || \hat{T} \hat{Q}_k - T \hat{Q}_k ||_∞)




将之前对这两部分的分析代入,并再次利用收缩性质和递归展开,最终可以得到当迭代次数趋于无穷时,学到的Q函数与最优Q函数之间差距的总体误差上界。



这个最终界限的形式大致为:
lim_{k→∞} || \hat{Q}_k - Q* ||_∞ = O( 1/(1-γ)^2 * (1/√n + ε) )
其中:
1/(1-γ)来自贝尔曼备份的迭代累积效应(*似误差分析)。- 另一个
1/(1-γ)隐含在||Q||_∞的规模中,因为最优Q值本身的大小也是O(1/(1-γ))(奖励最大值乘以视界)。 1/√n项代表抽样误差。ε项代表每一步的拟合误差。







总结与讨论


本节课中,我们一起学习了如何对理想化的拟合Q迭代算法进行理论分析。



我们首先识别了算法的两个核心误差来源:抽样误差(源于有限数据)和*似误差(源于函数拟合不完美)。通过分别分析,我们发现:
- 抽样误差按
O(1/√n)缩放。 - *似误差在迭代过程中会被放大
1/(1-γ)倍。




当结合两者时,最终性能差距的上界与 1/(1-γ)^2 成正比,这揭示了长视界(γ接*1)问题会显著加大学习难度。



需要指出的是,我们的分析基于无穷范数误差的强假设,这在实际算法中可能难以满足。更先进的理论可以在加权p范数(如期望下的L2范数,即贝尔曼误差)下进行分析,能得到更符合实际但形式更复杂的结果。本次分析为我们理解无模型RL算法的误差性质和缩放规律提供了重要的理论基础。
课程 P73:CS 285 第十八讲 - 变分推断(第一部分) 🧠
在本节课中,我们将学习概率潜在变量模型的基本概念,以及如何使用变分推断来训练这些模型。我们将从概率模型的定义开始,逐步深入到变分推断的核心思想及其在深度学习中的应用。
概述 📋
概率模型是描述概率分布的模型。它可以是对随机变量 x 的分布 p(x) 进行建模,也可以是对条件分布 p(y|x) 进行建模。在本课程中,我们已经遇到过条件概率模型的例子,例如策略(policy),它给出了给定状态 s 时动作 a 的条件分布。
潜在变量模型 🔍
潜在变量模型是一种特殊的概率模型,其中除了作为证据或查询的变量外,还存在一些其他变量(潜在变量)。这些变量在评估所需概率时需要被积分或求和掉。

一个经典的潜在变量模型例子是混合模型。例如,数据点可能形成三个清晰的簇,但我们事先并不知道这些簇的身份。我们可以用一个由三个多元正态分布组成的混合模型来表示数据的分布。这里的潜在变量 z 是一个离散变量,可以取三个值,对应于簇的身份。
潜在变量模型可以表示为:
[
p(x) = \sum_z p(x|z) p(z)
]
对于条件模型,可以表示为:
[
p(y|x) = \sum_z p(y|x, z) p(z|x)
]

潜在变量模型允许我们将复杂的分布表示为简单分布的乘积。例如,p(z) 可能是一个简单的分布(如高斯分布),p(x|z) 也可能是一个简单的分布(如高斯分布),但其参数可能由复杂的函数(如神经网络)给出。当我们将 z 积分掉时,得到的 p(x) 可能是一个非常复杂的分布。
潜在变量模型的应用 🛠️

潜在变量模型和生成模型在强化学习中经常出现。例如:
- 基于模型的强化学习:我们可能观察图像
o,并希望学习依赖于动作u的潜在状态x。这涉及到观察分布p(o|x)和先验p(x)。 - 逆强化学习:我们可以使用潜在变量模型来推断人类行为的目标函数或思考过程。
- 探索:生成模型和密度模型可以用于计算信息增益或分配伪计数奖励。


尽管生成模型不一定是潜在变量模型,但将复杂的生成模型表示为潜在变量模型通常更为方便。

训练潜在变量模型的挑战 ⚙️

假设我们有模型 p_θ(x) 和数据点 x_1, x_2, ..., x_n。我们通常希望通过最大似然估计来拟合模型:
[
\max_\theta \sum_{i=1}^n \log p_\theta(x_i)
]
其中 p_\theta(x_i) 通过对潜在变量 z 的积分得到:
[
p_\theta(x_i) = \int p_\theta(x_i|z) p_\theta(z) dz
]
直接计算这个积分和对数似然的梯度通常非常困难,尤其是当 z 是连续变量时。
期望对数似然作为替代目标 🎯
一种替代方法是使用期望对数似然作为目标函数:
[
\sum_{i=1}^n \mathbb{E}{z \sim p\theta(z|x_i)} [\log p_\theta(x_i, z)]
]
直觉上,这相当于对每个数据点 x_i,猜测其对应的潜在变量 z 的分布,然后在这个分布下计算 x_i 和 z 的联合对数概率的期望。
这个目标函数更容易处理,因为期望可以通过采样来估计。例如,我们可以从后验分布 p_\theta(z|x_i) 中采样 z,然后计算样本的对数概率的*均值。
然而,关键挑战在于如何计算后验分布 p_\theta(z|x_i)。如果我们能计算这个分布,就可以以可处理的方式估计期望对数似然及其梯度。
总结 📝

本节课我们介绍了概率潜在变量模型的基本概念及其在强化学习中的应用。我们讨论了训练这些模型时面临的挑战,并引入了期望对数似然作为更易处理的目标函数。在接下来的部分中,我们将深入探讨如何计算后验分布 p_\theta(z|x_i),以及如何使用变分推断来*似这个分布,从而训练复杂的潜在变量模型。

课程 P74:变分推断(第二部分)🔍


在本节课中,我们将学习变分推断的核心技术框架。我们将探讨如何通过一个易于处理的分布来*似复杂的后验分布,并推导出用于优化模型的对数似然下界——证据下界。我们将理解熵和KL散度在此过程中的作用,并最终介绍一种实用的、可扩展的学习算法。

变分推断框架
上一节我们介绍了变分推断的基本问题。本节中我们来看看其核心的技术框架。

该框架主要关注如何计算给定观测数据 x_i 时,隐变量 z 的后验概率 p(z | x_i)。在这个过程中,我们会发现最大化期望对数似然是一个合理的目标。


由于 p(z | x_i) 通常是一个非常复杂的分布,我们考虑做一个简化的*似。我们使用一个参数化且易于处理的分布族 q_i(z) 来*似这个后验分布。通常,q_i(z) 会选择高斯分布。

公式:q_i(z) ≈ p(z | x_i)


我们试图在这个简单的分布族中找到与真实后验最匹配的*似。尽管这个*似可能并不完美,但我们可以通过优化使其尽可能接*。


推导证据下界

一个强大的想法是,使用任何分布 q_i(z) 来*似 p(z | x_i),都可以为数据点 x_i 的对数概率 log p(x_i) 构建一个下界。最大化这个下界可以推动 log p(x_i) 增大。


我们可以从 x_i 的对数概率开始推导:

公式:log p(x_i) = log ∫ p(x_i | z) p(z) dz


接下来,我们引入*似分布 q_i(z)。一个常用的技巧是乘以 q_i(z) / q_i(z)(等于1):


公式:log p(x_i) = log ∫ [p(x_i | z) p(z) / q_i(z)] * q_i(z) dz


现在,积分内部可以看作是在分布 q_i(z) 下的期望值:



公式:log p(x_i) = log E_{z∼q_i(z)} [ p(x_i | z) p(z) / q_i(z) ]


到目前为止,我们没有做任何*似,这只是代数变换。


应用詹森不等式


接下来,我们应用詹森不等式。对于凹函数(如对数函数),詹森不等式表明:函数期望值的对数,大于等于函数对数的期望值。


公式:对于凹函数 f,有 log E[f] ≥ E[log f]

将詹森不等式应用到我们的等式中,将期望移出对数外,并将等式变为不等式:

公式:log p(x_i) ≥ E_{z∼q_i(z)} [ log ( p(x_i | z) p(z) / q_i(z) ) ]


利用对数性质,将乘积的对数展开为对数的和:


公式:log p(x_i) ≥ E_{z∼q_i(z)} [ log p(x_i | z) + log p(z) - log q_i(z) ]

我们可以进一步整理这个下界:



公式:L_i = E_{z∼q_i(z)} [ log p(x_i | z) ] + E_{z∼q_i(z)} [ log p(z) ] - E_{z∼q_i(z)} [ log q_i(z) ]


这个下界 L_i 被称为证据下界 或变分下界。对于任意选择的 q_i(z),这个不等式都成立。第二项 -E[log q_i(z)] 实际上是分布 q_i(z) 的熵 H(q_i)。


核心概念回顾:熵与KL散度


在深入优化之前,让我们回顾两个重要的信息论概念:熵和KL散度。



熵 衡量一个分布的“随机性”或“不确定性”。其定义为:


公式:H(q) = -E_{z∼q(z)} [ log q(z) ]
对于一个伯努利分布,当概率为0.5时熵最大,事件最不可预测;当概率为0或1时熵为0,事件是确定的。高熵意味着分布广泛且*坦;低熵意味着分布集中且尖锐。


KL散度 衡量两个分布 q 和 p 之间的差异。其定义为:


公式:KL( q || p ) = E_{z∼q(z)} [ log q(z) - log p(z) ] = -H(q) - E_{z∼q(z)} [ log p(z) ]

当 q 和 p 完全相同时,KL散度为0。KL散度越小,两个分布越接*。它由负熵和 q 下 log p(z) 的期望组成。

变分下界的另一种视角


我们可以将 q_i(z) 与真实后验 p(z | x_i) 之间的KL散度写出来:


公式:KL( q_i(z) || p(z | x_i) ) = E_{z∼q_i(z)} [ log q_i(z) - log p(z | x_i) ]


利用贝叶斯定理 p(z | x_i) = p(x_i, z) / p(x_i),我们可以展开:



公式:KL( q_i(z) || p(z | x_i) ) = E_{z∼q_i(z)} [ log q_i(z) - log p(x_i, z) + log p(x_i) ]


整理后得到:

公式:log p(x_i) = L_i + KL( q_i(z) || p(z | x_i) )


这是一个精确的等式,而不仅仅是下界。由于KL散度总是非负的,这再次证明了 L_i 是 log p(x_i) 的下界。更重要的是,这个等式表明:



- 当
KL( q_i(z) || p(z | x_i) ) = 0时,下界L_i恰好等于log p(x_i)。 - 因此,最小化
q_i(z)与真实后验之间的KL散度,等价于最大化证据下界L_i,并且能使下界变得更紧。


实用学习算法

上述推导立即引出一个实用的学习算法。我们的目标是最大化所有数据点的对数似然 ∑ log p(x_i),但直接优化很困难。因此,我们转而最大化证据下界 ∑ L_i。


算法涉及两个优化步骤:


- E步(推断):固定生成模型参数
θ,优化每个q_i(z)以最大化L_i,从而使下界更紧,更好地*似后验。 - M步(学习):固定所有
q_i(z),优化生成模型参数θ以最大化L_i,从而提高数据的对数似然。



我们可以使用随机梯度下降进行优化。以下是单数据点 x_i 的更新步骤:


- 关于模型参数
θ的梯度:从当前*似后验q_i(z)中采样一个隐变量z。假设先验p(z)不依赖于θ,则梯度*似为:
公式:∇_θ L_i ≈ ∇_θ log p_θ(x_i | z)
然后沿此梯度方向更新θ。 - 关于变分参数
φ_i的梯度:如果q_i(z)是高斯分布,参数为均值μ_i和方差σ_i^2,我们可以计算L_i对这些参数的梯度,并进行梯度上升更新。

摊销推断


上述方法存在一个实际问题:对于数据集中的每一个数据点 x_i,我们都需要维护一组独立的变分参数(如 μ_i, σ_i)。当数据点数量 N 很大时,参数总量会变得非常庞大(N * dim(z)),难以处理。

我们的直觉是,q_i(z) 的目标是*似 p(z | x_i)。与其为每个数据点学习独立的参数,不如训练一个神经网络来学习这个映射关系。这个神经网络以 x_i 为输入,输出*似后验分布的参数(如均值和方差)。


公式:q_φ(z | x_i),其中 φ 是神经网络参数。

这就是摊销推断 的思想。我们不再有 N 个独立的分布 q_i,而是有一个共享参数 φ 的推断网络。在生成模型中,我们同时拥有:
- 一个解码器网络:将
z映射到x(生成模型p_θ(x|z))。 - 一个编码器网络:将
x映射到z的分布(推断模型q_φ(z|x))。


这种结构就是变分自编码器 的核心。



总结

本节课中我们一起学习了变分推断第二部分的核心内容。


我们首先介绍了变分推断的框架,即用简单的参数化分布 q(z) 来*似复杂的后验分布 p(z|x)。通过巧妙的代数变换和应用詹森不等式,我们推导出了证据下界 ELBO,它是对数似然 log p(x) 的一个下界。


我们回顾了熵和KL散度的概念,并从KL散度的角度重新解读了ELBO,发现最大化ELBO等价于最小化*似后验与真实后验之间的KL散度,这使下界更紧。



基于此,我们推导出一个实用的、基于随机梯度下降的变分推断算法,该算法交替优化推断网络参数(使*似更准)和生成模型参数(提高似然)。最后,我们指出了为每个数据点维护独立变分参数的问题,并引入了摊销推断的思想,即使用一个共享的神经网络(编码器)来预测所有数据点的后验分布参数,这大大提高了算法的可扩展性,并直接引出了变分自编码器的架构。


课程 P75:CS 285 第18讲,变分推断(第三部分)🚀


在本节课中,我们将要学习摊销变分推断的核心思想及其实现方法。我们将看到如何利用神经网络来“摊销”或分摊推断成本,从而高效地处理大规模数据集。课程将重点介绍两种计算变分下界梯度的方法:策略梯度法和重参数化技巧,并比较它们的优劣。



概述:摊销变分推断的基本思想



上一节我们介绍了为每个数据点单独优化变分后验分布 q_i(z) 的方法。本节中我们来看看如何通过摊销变分推断来改进这一过程。


摊销变分推断的核心思想是,不再为数据集中的每一个数据点 x_i 单独维护一个后验分布 q_i(z) 的参数(如均值和方差)。取而代之的是,我们训练一个单一的神经网络模型,它能够接受任意数据点 x 作为输入,并直接输出该数据点对应的后验分布 q_φ(z|x) 的参数。



这意味着,我们使用一个推断网络(或编码器)q_φ(z|x) 来“摊销”所有数据点的推断成本。这个网络的参数 φ 在所有数据点上共享。

训练流程回顾与更新


首先,让我们回顾一下之前讨论的、在训练模型参数 θ 时的变分推断流程。



对于数据集中的每个数据点 x_i(或每个小批量),我们根据变分下界 L_i 来估计 θ。具体方法是:
- 从*似后验分布
q_i(z)中采样一个z。 - 使用这个单一样本估计梯度:
∇_θ log p_θ(x_i | z)。 - 使用这个估计的梯度
∇_θ L_i来执行梯度上升步,更新生成模型参数θ。 - 接着,我们更新
q_i以最大化边界L_i,从而使其更紧致。



之前的问题是,如果我们为每个 x_i 设置独立的高斯分布 q_i(z),那么参数总数会随着数据量 n 线性增长,这在大规模数据集中是不可行的。

引入摊销推断网络



在摊销变分推断中,我们使用一个共享的推断网络 q_φ(z|x) 来为所有数据点生成后验分布。因此,变分下界 L 现在是关于两个分布参数 θ 和 φ 的函数:


L(θ, φ; x_i) = E_{z∼q_φ(z|x_i)}[log p_θ(x_i | z)] - D_{KL}(q_φ(z|x_i) || p(z))



我们的训练流程修改如下:
- 更新生成模型参数
θ:计算变分下界L对θ的梯度。这与之前类似:从q_φ(z|x_i)中采样z,然后计算∇_θ log p_θ(x_i | z),并对θ执行梯度上升步。 - 更新推断网络参数
φ:计算变分下界L对φ的梯度,并对φ执行梯度上升步。



现在,关键问题变成了:我们如何计算 L 关于 φ 的梯度?




计算对 φ 的梯度:面临的挑战



观察 L 的表达式,φ 出现在两个地方:
- 在期望项
E_{z∼q_φ(z|x_i)}[log p_θ(x_i | z)]中,φ定义了采样的分布。 - 在 KL 散度项(包含熵)中。



对于第二个项,如果 q_φ(z|x) 是高斯分布,其熵有一个关于均值 μ_φ(x) 和方差 σ_φ(x) 的解析形式,因此可以直接求导。



困难在于第一个期望项的梯度计算。我们可以将这个项形式化地写为:
J(φ) = E_{z∼q_φ(z|x_i)}[r(x_i, z)],其中 r(x_i, z) = log p_θ(x_i | z) 与 φ 无关。


方法一:使用策略梯度


我们面临的问题与强化学习中的策略梯度问题形式相同。因此,我们可以直接应用策略梯度定理来估计 φ 的梯度:


∇_φ J(φ) ≈ (1/m) Σ_{j=1}^m [∇_φ log q_φ(z_j | x_i) * r(x_i, z_j)]


其中 z_j 是从 q_φ(z|x_i) 中采样的。


以下是使用策略梯度法的特点:
- 优点:适用于连续和离散的潜在变量
z。q_φ可以是任何具有良好定义对数概率的分布。 - 缺点:梯度估计器方差较高,通常需要为每个数据点采集多个样本 (
m较大) 并使用较小的学习率,这可能导致训练不稳定或较慢。


方法二:重参数化技巧


幸运的是,在摊销变分推断的设定下,我们通常可以使用一种更好的方法:重参数化技巧。这利用了 q_φ(z|x) 本身是一个我们定义的、可微的模型这一事实。
其核心思想是将随机变量 z 重写为一个确定性函数。具体来说,如果 q_φ(z|x) 是高斯分布 N(μ_φ(x), σ_φ(x)),那么采样 z ∼ q_φ(z|x) 可以等价地通过以下方式完成:
- 从一个与
φ无关的简单分布(如标准正态分布)中采样一个随机噪声:ε ∼ N(0, 1)。 - 通过一个确定性变换得到
z:z = μ_φ(x) + ε ⊙ σ_φ(x),其中⊙表示逐元素相乘。



通过这种重参数化,原来的期望可以改写为:
J(φ) = E_{ε∼N(0,1)}[r(x_i, μ_φ(x_i) + ε ⊙ σ_φ(x_i))]



现在,φ 仅出现在确定性函数内部,不再定义采样分布。因此,我们可以使用蒙特卡洛估计,并利用链式法则直接计算梯度:

∇_φ J(φ) ≈ (1/m) Σ_{j=1}^m [∇_z r(x_i, z_j) * ∇_φ (μ_φ(x_i) + ε_j ⊙ σ_φ(x_i))]
其中 z_j = μ_φ(x_i) + ε_j ⊙ σ_φ(x_i),ε_j ∼ N(0,1)。

在现代自动微分框架(如 TensorFlow 或 PyTorch)中,我们只需实现上述计算图,然后调用反向传播即可。框架会自动计算所有需要的导数。


以下是重参数化技巧的特点:
- 优点:梯度估计器的方差显著更低,通常每个数据点只需一个样本 (
m=1) 就能很好地工作,实现简单高效。 - 缺点:主要适用于连续的潜在变量
z,因为需要计算r(x, z)对z的梯度。对于离散变量,此梯度没有良好定义。


完整的训练算法与计算图


结合重参数化技巧和 KL 散度的解析解,我们可以得到摊销变分推断(如变分自编码器,VAE)的完整训练步骤:



对于每个数据点 x_i(在小批量中):
- 推断网络(编码器)接收
x_i,输出后验参数μ_φ(x_i)和σ_φ(x_i)。 - 从标准正态分布采样噪声:
ε ∼ N(0, 1)。 - 计算潜在变量:
z = μ_φ(x_i) + ε ⊙ σ_φ(x_i)。 - 生成网络(解码器)接收
z,输出重构数据或分布p_θ(x|z)。 - 计算损失函数(负的变分下界):
- 重构项:
-log p_θ(x_i | z)(通过单样本蒙特卡洛估计) - KL 散度项:
-D_{KL}(q_φ(z|x_i) || p(z))(使用高斯分布的解析公式计算)
- 重构项:
- 通过自动微分,同时计算损失对
θ和φ的梯度,并更新这两个网络的参数。


总结




本节课中我们一起学习了摊销变分推断的核心内容。



- 我们首先了解了摊销推断如何通过一个共享的神经网络
q_φ(z|x)来高效处理大规模数据。 - 接着,我们分析了计算变分下界对推断网络参数
φ的梯度时所面临的挑战。 - 我们介绍了两种主要的梯度估计方法:策略梯度法和重参数化技巧。
- 我们比较了两者的优劣:策略梯度法通用但方差高;重参数化技巧方差低、效率高,但仅适用于连续潜在变量。
- 最后,我们勾勒出结合重参数化技巧的完整训练流程,这构成了像变分自编码器(VAE)这类现代生成模型的基础。



理解这些梯度估计技术,对于实现和优化基于变分推断的深度学习模型至关重要。
课程 P76:变分推断在深度学习中的应用 🧠
在本节课中,我们将学习如何将变分推断的原则实例化为实用的深度学习模型,并探讨这些模型在深度强化学习中的应用。我们将从基础的变分自编码器开始,逐步深入到条件模型和序列模型,了解它们如何用于表示学习和处理复杂数据。
变分自编码器 🖼️
上一节我们介绍了变分推断的核心思想,本节中我们来看看其最基础的应用实例——变分自编码器。
在变分自编码器中,我们建模某种输入 x(通常是图像),并使用潜在变量 z 来表示它。模型包含一个编码器和一个解码器。
编码器是一个深度神经网络,它接受输入 x,并输出定义 z 的高斯分布的参数(均值 μ 和方差 σ)。这定义了给定 x 时 z 的*似后验分布 q(z|x)。

解码器是另一个神经网络,它接受潜在变量 z,并输出定义观测变量 x 的分布参数。如果我们想生成样本,就从先验分布 p(z)(通常为标准正态分布)中采样一个 z,然后通过解码器 p(x|z) 生成 x。
以下是变分自编码器的训练过程:
- 编码器网络输出 μ_φ 和 σ_φ。
- 从标准正态分布采样噪声 ε,通过重参数化技巧得到 z = μ_φ + ε * σ_φ。
- z 被送入解码器网络,生成图像。
- 整个模型通过最大化证据下界来训练,目标函数为:
ELBO = E_{q(z|x)}[log p(x|z)] - KL(q(z|x) || p(z))
其中,KL散度项可以解析计算。
变分自编码器允许我们训练一个潜在变量模型来表示图像等复杂输入。通过训练,编码器被激励产生接*先验分布 p(z) 的 z,同时解码器能有效地将 z 映射回有意义的 x。这使得模型既能编码图像得到其潜在表示,也能从先验中采样并解码出合理的图像。
在深度强化学习中的应用 🤖
上一节我们介绍了变分自编码器,本节中我们来看看它如何应用于深度强化学习中的表示学习。

这里,我们并非处理部分可观测性问题,而是假设状态被完全观测,但观测本身(如Atari游戏中的图像)非常复杂。变分自编码器可以用来学习这些状态的更好表示。
其核心思想是:变分自编码器学习到的潜在表示 z 的各个维度趋向于独立(得益于先验),这有助于解耦数据中的变化因素。例如,在游戏图像中,玩家角色的位置、速度等因素是相互关联的变化源,而VAE试图将这些因素解耦到 z 的不同维度中,形成一个比原始像素更简洁、更有用的状态表示。
在实践中,可以按以下流程进行:
- 在经验回放缓冲区中的所有状态上训练一个VAE。
- 运行强化学习算法时,使用编码器产生的潜在表示 z 作为状态输入,而非原始图像。
- 使用这个更好的表示来更新Q函数或策略。
这个过程也可以利用先验数据(例如通用的游戏图像)来预训练VAE,从而为RL提供一个良好的初始表示。

条件变分自编码器 🔀


之前我们讨论了建模观测本身的分布,本节中我们转向条件分布建模,即条件变分自编码器。


条件变分自编码器的目标是建模给定条件信息 x 时,目标变量 y 的复杂条件分布 p(y|x)。y 的分布可能是多模态的。模型的变化在于,编码器和解码器网络都额外接受条件信息 x 作为输入。

架构如下:
- 编码器 q_φ(z|x, y) 接受 x 和 y,输出 z 的分布参数。
- 解码器 p_θ(y|x, z) 接受 x 和 z,输出 y 的分布。
- 先验 p(z) 通常仍为标准正态分布,也可以选择依赖于 x。
训练目标仍然是证据下界,与标准VAE类似。在测试时,可以从先验中采样 z,然后通过解码器 p_θ(y|x, z) 生成 y。
在深度强化学习中,条件变分自编码器最常用于表示多模态策略,特别是在模仿学习中。当人类行为具有多模态特性(例如,绕过障碍物时可以选择左或右)时,我们希望策略能捕捉这种分布,而不是取*均(走向障碍物)。条件VAE能够表示比简单高斯分布更复杂的策略分布。
序列变分自编码器与部分可观测性 ⏳
最后,我们将讨论用于处理部分可观测性问题的序列变分自编码器。
在部分可观测设置中,我们有一系列观测 o 而非完整状态 s。目标是学习一个基于潜在状态 z 的序列模型。此时,潜在变量本身是一个序列 z1, z2, ..., zT,观测 x 是整个观测序列 o1:T。


模型变得更为复杂:
- 先验 p(z):由于存在动态性,先验是结构化的。例如,p(z) = p(z1) * ∏ p(z_{t+1} | z_t, a_t),其中包含了状态转移动态。
- 解码器 p(o|z):通常假设给定每个时间步的 z_t 后,观测 o_t 是独立的,即 p(o|z) = ∏ p(o_t | z_t)。这意味着 z_t 应包含该时刻的所有必要信息,构成一个马尔可夫状态空间。
- 编码器 q(z|o):这是最复杂的部分。在部分可观测环境下,单个时刻的观测 o_t 不足以推断状态 z_t。因此,编码器需要给出 z_t 基于所有历史观测(可能还包括历史动作)的分布。编码器可以用RNN、LSTM或Transformer等序列模型来实现。

训练依然通过最大化序列证据下界进行。这类序列VAE在深度RL中的应用主要包括:
- 学习潜在状态空间模型并规划:在潜在空间学习动态模型,然后在该空间中进行规划(如使用LQR或轨迹优化)。
- 为RL算法提供状态表示:使用序列VAE从图像观测中提取潜在状态表示,然后在该表示上运行标准的演员-评论家等RL算法。



总结 📚


本节课中我们一起学习了变分推断在深度学习中的几种具体应用模型。
- 我们从变分自编码器开始,了解了它如何作为基础生成模型进行训练和应用。
- 接着,探讨了VAE在深度强化学习中用于学习状态表示的价值。
- 然后,介绍了条件变分自编码器,它能够建模复杂的条件分布,常用于表示多模态策略。
- 最后,我们讨论了序列变分自编码器,它通过结构化先验和序列编码器来处理部分可观测性问题,并可用于在潜在空间进行规划或强化学习。

这些模型展示了如何将变分推断的灵活框架与深度神经网络相结合,以解决表示学习、生成建模和序列决策等复杂任务。

课程 P77:控制即推断(第一部分) 🧠
在本节课中,我们将学习如何将强化学习与控制问题重新定义为概率推断问题。我们将看到,通过构建一个特定的概率图模型,最优行为可以被视为在该模型中进行推断的最可能结果。这种方法不仅能更好地解释人类和动物的“接*最优”行为,还能为我们推导出新的算法提供框架。



人类行为建模与最优控制 🤔
上一节我们介绍了课程的主题。本节中,我们来看看如何将最优控制作为人类行为的模型。
强化学习和最优控制提供了一个思考目标导向行为的强大框架。一个诱人的想法是:如果我们假设人或动物以最优方式行动,那么我们就可以用一个紧凑的奖励函数来解释其行为。这有助于预测他们在新情况下的行动。
然而,观察表明,人类和动物的行为并非完全确定性的最优。例如,一只猴子在完成屏幕上的任务时,虽然总能到达目标,但路径却多种多样,并非总是直线。这种行为暗示了某种“随机性”和“容错性”:对于不影响最终奖励的方面(如具体路径),行为可以更随意;而对于关键方面(如是否到达目标),行为则必须可靠。

我们已有的确定性或随机性最优控制框架无法自然地解释这种“接*最优”的随机行为。因此,我们需要一个不同的、基于概率的“理性”概念。
构建决策的概率图模型 📊
上一节我们讨论了现有模型的局限。本节中,我们将构建一个新的概率模型来形式化“接*最优”行为。

为了对包含随机性的决策过程建模,我们使用概率图模型。模型需要包含标准马尔可夫决策过程中的变量:状态 s 和动作 a。此外,我们引入一组新的二元随机变量 O_t,称为“最优性变量”。O_t = 1 表示在时间步 t,智能体“意图是最优的”。
我们做出一个关键建模选择:定义 O_t 为真的概率是当前状态-动作对奖励的指数函数:
P(O_t = 1 | s_t, a_t) = exp(r(s_t, a_t))
注意:为确保概率值 ≤ 1,我们需要奖励
r(s, a)总是非正的。这可以通过减去一个足够大的常数(如最大可能奖励)来实现,且不改变最优策略。
在这个模型中,轨迹 τ = (s_1, a_1, ..., s_T, a_T) 的联合概率分布为:
p(τ) ∝ [p(s_1) ∏_{t=1}^{T} p(s_{t+1}|s_t, a_t)] * exp(∑_{t=1}^{T} r(s_t, a_t))
这个公式非常直观:轨迹的概率正比于其累积奖励的指数。奖励越高的轨迹,其概率越大。但奖励较低的轨迹也有非零概率,只是其概率随奖励减少而指数级下降。这正好模拟了“接*最优”的行为:智能体最可能选择最优路径,但也可能以较低概率选择次优路径。
控制即推断框架的意义 ✨
上一节我们建立了核心的概率模型。本节中,我们来探讨这个框架带来的好处。
将控制问题重新定义为推断问题,具有以下几个重要意义:
- 建模接*最优行为:为理解人类、动物或不完美智能体的行为提供了更合理的概率模型。
- 启发性算法设计:由于推断对应于求解控制问题,我们可以将各种概率推断算法(如消息传递、变分推断)应用于控制和规划。
- 解释随机策略的合理性:即使存在确定性最优解,该框架也自然地偏好具有一定随机性的策略,这对探索和技能迁移非常有用。
- 逆强化学习的基础:要从不完美的专家示范中推断奖励函数,必须考虑示范者是“接*最优”而非“完全最优”的。本框架是逆强化学习的核心。
模型中的推断操作 🔍
上一节我们了解了框架的宏观意义。本节中,我们具体看看在这个概率图模型中需要进行哪些推断计算。
该模型是一个链式动态贝叶斯网络,可以通过消息传递算法进行高效推断。我们需要计算三种关键信息:
以下是三种核心的推断操作:
- 后向消息 (Backward Messages)
β_t(s_t, a_t):表示从当前时间步t到任务结束T,整个轨迹都是最优的概率,给定当前状态和动作。计算后向消息是恢复最优策略的关键。 - 最优随机策略
π(a_t | s_t):在给定所有最优性变量O_{1:T}=1的证据下,当前状态s_t下选择动作a_t的概率。可以通过归一化的后向消息来计算:π(a_t | s_t) ∝ β_t(s_t, a_t) - 前向消息 (Forward Messages)
α_t(s_t):表示在截止到时间t-1轨迹都是最优的条件下,在时间t处于状态s_t的概率。前向消息对于计算状态占用分布至关重要,而状态占用分布是逆强化学习的核心。

结合前向和后向消息,我们可以计算出在最优性证据下,访问每个状态的概率(状态占用率),这对于理解和分析策略行为非常重要。

总结 📝
本节课中,我们一起学习了“控制即推断”的核心思想。
我们首先探讨了用传统最优控制解释人类行为的不足,即无法解释“接*最优”的随机行为。接着,我们构建了一个新的概率图模型,通过引入“最优性变量”并将奖励函数与条件概率关联,将最优轨迹定义为该模型中概率最高的轨迹。这个框架自然地赋予了高奖励轨迹高概率,低奖励轨迹低概率,从而优雅地建模了接*最优行为。最后,我们介绍了在该模型中进行推断所需的三种核心操作:计算后向消息以得到策略、计算前向消息以得到状态占用率。

在下一讲中,我们将看到如何利用这个框架推导出具体的强化学习算法,并深入探讨它如何成为逆强化学习的基石。

🧠 课程 P78:控制即推理(第二部分)

在本节课中,我们将学习如何将最优控制问题形式化为一个概率图模型中的推理问题。我们将推导出计算后向消息、策略和前向消息的具体算法,并理解它们与经典强化学习概念(如价值函数和Q函数)之间的联系。
🔙 计算后向消息
上一节我们介绍了将控制问题建模为推理问题的框架。本节中,我们来看看如何实际计算后向消息。
后向消息定义为:在给定当前状态 s_t 和动作 a_t 的条件下,从当前时刻 t 到最终时刻 T 的轨迹是最优轨迹的概率。其数学表达式为:
β_t(s_t, a_t) = p(o_{t:T} | s_t, a_t)
以下是计算后向消息的递归步骤:
- 递归基础:在最终时刻
T,后向消息就是最终奖励的概率:β_T(s_T, a_T) = p(o_T | s_T, a_T)。 - 递归步骤:对于更早的时刻
t,我们可以通过积分掉下一个状态s_{t+1}来递归计算:
β_t(s_t, a_t) = ∫ p(o_t | s_t, a_t) * p(s_{t+1} | s_t, a_t) * β_{t+1}(s_{t+1}) ds_{t+1}
其中,β_{t+1}(s_{t+1}) 是状态后向消息,定义为在给定状态s_{t+1}下,未来轨迹最优的概率。 - 状态后向消息:状态后向消息可以通过对动作的期望得到。我们通常假设动作先验
p(a_t | s_t)是均匀分布(即所有动作等可能),因此:
β_t(s_t) = ∫ p(a_t | s_t) * β_t(s_t, a_t) da_t ∝ ∫ β_t(s_t, a_t) da_t

通过从最终时刻 T 开始,逐步向后迭代计算,我们可以得到所有时刻的后向消息。
🔄 后向传播与价值函数
现在,我们通过取对数将后向消息与更熟悉的价值函数联系起来。
定义:
- V_t(s_t) = log β_t(s_t) (软价值函数)
- Q_t(s_t, a_t) = log β_t(s_t, a_t) (软Q函数)
将之前的递归方程转换到对数空间,我们得到:
- 软贝尔曼方程(对于Q函数):
Q_t(s_t, a_t) = r(s_t, a_t) + log E_{s_{t+1}~p(·|s_t,a_t)}[exp(V_{t+1}(s_{t+1}))]
这个方程与标准贝尔曼方程类似,但期望外多了一个log和exp操作。

- 软价值函数更新:
V_t(s_t) = log ∫ exp(Q_t(s_t, a_t)) da_t
这个操作被称为 Log-Sum-Exp,它是 max 操作的一个*滑(软)版本。当Q_t的值差异很大时,V_t会接*Q_t的最大值。

关键洞察:在确定性环境中(即下一个状态是当前状态和动作的确定函数),log 和 exp 会相互抵消,上述软贝尔曼方程会退化为标准的贝尔曼最优方程。因此,这个推理框架是经典动态规划的一种泛化。
🎯 从后向消息恢复策略

计算出后向消息后,我们如何得到我们最终想要的策略——即在给定当前状态且整个轨迹最优的条件下,选择某个动作的概率?
策略定义为:π(a_t | s_t) = p(a_t | s_t, o_{1:T})。
通过应用贝叶斯规则和一些条件独立性推导,我们可以得到一个简洁的表达式:
π(a_t | s_t) ∝ β_t(s_t, a_t) / β_t(s_t)

将对数形式的定义代入,我们得到:
π(a_t | s_t) ∝ exp(Q_t(s_t, a_t) - V_t(s_t)) = exp(A_t(s_t, a_t))

其中,A_t(s_t, a_t) = Q_t(s_t, a_t) - V_t(s_t) 可以被视为一种 软优势函数。


策略的直观解释:最优策略是一个玻尔兹曼分布(或Softmax分布),其能量函数是优势函数。优势越高的动作被选中的概率越大。这提供了一种在探索(尝试次优动作)和利用(选择最优动作)之间自然权衡的随机策略。

我们可以引入一个温度参数 α 来控制策略的随机性:π(a_t | s_t) ∝ exp(A_t(s_t, a_t) / α)。当 α → 0 时,策略趋*于确定性最优策略;当 α = 1 时,就是我们上面推导出的标准形式。
📈 计算前向消息与状态边缘分布
最后,我们讨论前向消息,它表示在已知过去轨迹最优的条件下,当前状态的概率。
前向消息定义为:α_t(s_t) = p(s_t | o_{1:t-1})。
计算前向消息也需要一个递归过程,类似于后向传播,但是从前向后进行。其递归公式涉及转移概率、动作先验和奖励(最优性)概率。推导过程同样使用了贝叶斯规则和条件独立性。
前向消息的一个重要应用是计算 状态边缘分布,即在已知整个轨迹最优的条件下,每个时刻状态的概率分布:
p(s_t | o_{1:T}) ∝ α_t(s_t) * β_t(s_t)

直观理解:你可以将 α_t(s_t) 想象成一个从初始状态向前传播的“锥体”,代表从起点出发能以高奖励到达的状态。将 β_t(s_t) 想象成一个从目标状态向后传播的“锥体”,代表能够到达目标的状态。最优轨迹的状态分布就大致位于这两个锥体的交集区域。这与人类在完成目标导向任务(如伸手触摸)时观察到的运动轨迹不确定性分布是吻合的。



📝 总结

本节课中我们一起学习了控制即推理框架的核心计算部分:

- 后向消息:通过递归计算,得到未来最优的概率,其对数形式对应软Q函数和软价值函数。
- 策略恢复:最优策略表现为基于(软)优势函数的玻尔兹曼分布,连接了推理与随机策略优化。
- 前向消息与状态边缘:通过前向递归计算,并结合后向消息,可以得到在最优性条件下状态的概率分布。


这个框架优雅地将最优控制问题转化为概率图模型中的推理问题,并揭示了经典强化学习算法(如价值迭代)是该框架在特定假设下的特例。在接下来的部分,我们将探讨如何利用变分推断来改进这个框架,并处理更复杂的随机环境。
课程 P79:控制即推断(第三部分)🎯

在本节课中,我们将学习如何将控制问题视为概率推断问题,并利用变分推断工具来解决精确推断在复杂场景中不可行的问题。我们将重点探讨如何通过变分推断来修正之前提到的“乐观偏差”问题,并推导出与强化学习目标相似的算法。
概述



在前面的课程中,我们看到了如何将控制框架视为特定图形模型中的推断。我们讨论了如何在该图形模型中进行精确推断,并理解了三种可能的推断问题:计算反向消息、计算策略以及计算向前消息。这些推断程序都是精确的。



然而,在状态空间复杂、高维、连续或动态未知(只能通过模拟采样)的设置中,我们需要进行*似推断。本节将使用变分推断工具来展示如何*似模型,并在此过程中解决“乐观偏差”问题。





精确推断的局限性与乐观偏差



上一节我们介绍了精确推断方法。本节中,我们来看看精确推断方法存在的一个核心问题:乐观偏差。



在精确推断中,状态向后消息和状态-动作向后消息的对数,可以被解释为类似于价值函数和Q函数。在对数空间下,我们得到了一个与价值迭代非常相似的算法,但其中动作的最大值被替换为软最大值,并且贝尔曼备份方程中有一个“期望值的指数对数”项。



这个备份方式的问题在于:“期望值的指数对数”项会导致值函数被最幸运(即回报极高但概率极低)的状态所主导。


公式示例:
考虑一个购买彩票的行动:有千分之一的机会获得巨额回报,其余机会回报为零。其期望值不高,但“期望值的指数对数”值会很高,因为计算过程会放大那个极低概率的积极结果的影响。这导致算法变得“乐观”,倾向于选择这种高风险、低期望值的行动。



这种现象发生的原因是,我们正在解决的推断问题是:“在已知获得了高奖励(即轨迹最优)的条件下,最可能的轨迹是什么?”。这相当于问:“假设你已经很成功(例如中了一百万),那么你更可能采取了什么行动?”。但这并不等同于“为了达到成功,最优的行动是什么?”。推断过程实际上会改变我们对动态(状态转移)的信念以符合“已获得高奖励”的证据,而在现实中,动态(环境规则)是不应改变的。






使用变分推断修正乐观偏差
为了解决乐观偏差问题,我们希望找到一个*似分布,它接*后验分布,但保持原始的状态转移动态不变,只改变行动概率。这正是变分推断可以解决的问题。

我们将定义一个特殊的变分分布族 q:
- 它保持与原始问题相同的初始状态分布
p(s1)和状态转移概率p(s_{t+1} | s_t, a_t)。 - 它只学习一个新的部分:给定状态下的行动分布
q(a_t | s_t)。


公式定义:
q(τ) = q(s1, a1, ..., sT, aT) = p(s1) ∏_{t=1}^{T} p(s_{t+1} | s_t, a_t) q(a_t | s_t)
其中 τ 表示轨迹 (s1, a1, ..., sT, aT)。
我们的目标是让这个分布 q(τ) 去*似真实的后验分布 p(τ | o_{1:T}=1),即已知整个轨迹最优的条件分布。


推导变分下界与强化学习目标


根据变分推断原理,我们优化变分下界(ELBO)。将我们的定义代入ELBO公式后,一个关键的好处是:由于 q 中定义的初始状态和转移概率与真实模型 p 相同,它们在ELBO中相互抵消。



最终,我们得到的变分下界简化如下:


公式:
log p(o_{1:T}=1) ≥ E_{(s_{1:T}, a_{1:T}) ~ q} [ ∑_{t=1}^{T} r(s_t, a_t) ] + ∑_{t=1}^{T} H(q(· | s_t))
其中 H 表示熵。




这个表达式具有清晰的物理意义:它等于在策略 q 下的期望总奖励,加上策略在每个状态下的熵。这正是最大熵强化学习的目标函数:既最大化累积奖励,又鼓励策略具有一定的随机性(探索性)。


通过变分推断,我们自然地推导出了这个目标,它修正了乐观偏差,因为变分分布 q 固定了真实的环境动态。



优化方法:软价值迭代


现在,我们有了一个需要最大化的目标(变分下界)。如何优化它呢?我们可以采用动态规划的思想,从最后一个时间步开始递归求解。



以下是求解过程的核心步骤:

- 最后一个时间步(t=T):
- 目标是在状态
s_T下选择行动a_T,最大化r(s_T, a_T) - log q(a_T | s_T)。 - 可以证明,该优化问题的最优解具有指数形式:
q*(a_T | s_T) ∝ exp(r(s_T, a_T)) - 此时,最优值函数为
V_T(s_T) = log ∫ exp(r(s_T, a_T)) da_T。
- 目标是在状态



- 递归步骤(t < T):
- 在时间步
t,我们需要考虑当前奖励和未来价值。 - 定义软Q函数:
Q_t(s_t, a_t) = r(s_t, a_t) + E_{s_{t+1} ~ p} [V_{t+1}(s_{t+1})]。这是一个常规的贝尔曼备份,没有乐观偏差。 - 同样地,优化
Q_t(s_t, a_t) - log q(a_t | s_t)得到最优策略:q*(a_t | s_t) ∝ exp(Q_t(s_t, a_t)) - 对应的软价值函数为:
V_t(s_t) = log ∫ exp(Q_t(s_t, a_t)) da_t。
- 在时间步



这个过程可以总结为一个算法:软价值迭代。


算法描述(软价值迭代):
初始化 V_{T+1}(s) = 0
for t = T to 1:
# 贝尔曼备份(计算软Q值)
Q_t(s, a) = r(s, a) + E_{s' ~ p(·|s,a)}[V_{t+1}(s')]
# 软最大值(计算软V值)
V_t(s) = log ∫_a exp(Q_t(s, a)) da
# 提取最优策略
π_t*(a | s) = exp(Q_t(s, a) - V_t(s))


这个算法与经典的价值迭代非常相似,主要区别在于将“取最大值”操作替换为了“log-sum-exp”(即软最大值)操作。





扩展与总结


本节课中,我们一起学习了如何利用变分推断框架来解决控制即推断中的乐观偏差问题。


- 核心思想:通过定义一个保持环境动态不变的变分分布,我们将控制问题转化为一个最大化变分下界的优化问题。
- 关键结果:该下界恰好对应于最大熵强化学习目标:期望奖励加上策略熵。
- 推导的算法:通过动态规划优化该目标,我们得到了软价值迭代算法,它提供了计算最优软策略的方法。



此外,这个框架可以灵活扩展:
- 可以引入折扣因子
γ。 - 可以添加温度参数
α来控制策略的随机性程度(α → 0时接*确定性策略)。 - 可以推广到无限时域问题。



在下一部分,我们将讨论如何在实际中实例化这些想法,并介绍基于此框架的具体算法设计。
课程 P8:模仿学习(第五部分)🔧

在本节课中,我们将要学习一种名为“DAgger”的算法。该算法旨在为模仿学习中的分布偏移问题提供一个更原则性的解决方案。我们将详细探讨其工作原理、实施步骤以及其优缺点。
分布偏移问题回顾 📊
上一节我们介绍了模仿学习中因策略犯错而导致的分布偏移问题。本节中我们来看看如何通过改变数据收集策略来解决这个问题。
分布偏移问题的核心在于:策略在训练时遇到的状态分布 P_data 与策略在测试时遇到的状态分布 P_pi_theta 存在系统性差异。之前讨论的方法主要集中于改进策略,使其减少错误,从而让 P_pi_theta 更接* P_data。
但我们可以反过来思考:能否改变 P_data,使其更好地覆盖策略实际访问的状态?换句话说,我们能否让 P_data 等于 P_pi_theta?
为了实现这一点,我们需要收集比初始演示更多的数据。关键问题在于:应该收集哪些数据?这就是DAgger算法试图回答的问题。
DAgger算法详解 🎯
DAgger算法的核心思想是:与其在策略优化上做文章,不如在数据收集策略上变得更聪明。其目标是收集数据,使得训练数据来自策略实际运行时遇到的状态分布 P_pi_theta,而非初始的 P_data。
以下是DAgger算法的具体步骤:
- 初始训练:仅使用初始的人类演示数据训练策略。
- 运行策略:在现实世界中运行当前策略,并记录策略所观察到的所有状态。
- 人工标注:请求人类专家检查这些记录的状态,并为每个状态标注出正确的动作。
- 数据聚合:将新标注的数据集与原始数据集合并。
- 重新训练:使用聚合后的新数据集重新训练策略。
- 重复循环:重复步骤2至5。

通过这个循环,每次迭代都会运行策略,收集其观察到的状态,并由人类标注。可以证明,最终数据集中状态的分布将收敛到策略运行时实际观察到的分布 P_pi_theta。
直觉上,每次迭代收集的数据分布都比上一次更接*策略的真实分布。只要每一步都能更接*,最终就会达到一个策略能够有效学习的稳定分布。随着收集的数据越来越多,数据集最终将由来自正确分布 P_pi_theta 的样本主导。
如果能够获得人工标注,这个算法的实施就非常简单。
DAgger的应用实例与挑战 🚁

在原始的DAgger论文中,研究者使用该算法控制无人机穿越森林。他们通过DAgger迭代收集数据,并让人工离线查看图像,通过鼠标界面指定应采取的动作。经过几次迭代,无人机能够相当可靠地飞行并避开树木。
然而,DAgger方法也存在挑战,主要集中在第三步——人工标注。有时,让人工在事后检查图像并输出正确动作并不自然。在实际操作中(如驾驶汽车),人类的决策是一个包含反应时间的连续过程。因此,离线获取的人工标签可能不如人类实时操作时自然。DAgger的许多改进版本都试图缓解这一挑战。

尽管如此,DAgger的基本版本确实缓解了分布偏移问题。理论上,它可以推导出线性于时间步长 T 的误差界限,而不是行为克隆中的二次界限。但这以引入“能够收集额外数据”这一强假设为代价。

模仿学习解决方案总结 📝

至此,我们已经介绍了一系列解决行为克隆挑战的方法:

- 我们可以通过更智能的数据收集和增强来改进。
- 我们可以使用更强大的模型来减少错误。
- 我们可以利用多任务学习。
- 我们可以改变数据收集过程,使用DAgger算法。
模仿学习的局限性与强化学习的引入 🚀

最后,我们简要探讨为什么模仿学习本身可能不够,以及为什么需要本课程后续的强化学习内容。
首先,模仿学习需要人类提供数据。虽然深度学习在数据丰富的环境下表现最佳,但要求人类提供大量数据可能是一个重大限制。如果算法能够自主收集数据,我们就能进入一个数据极其丰富且无需过多人类努力的领域,这正是深度学习真正繁荣的地方。
其次,人类并不擅长提供某些类型的动作。例如,人类可能擅长指定在步道上向左还是右转,或者通过遥控器控制四旋翼无人机。但对于控制直升机旋翼的低级指令以完成复杂特技,或者控制人形机器人的所有关节,对人类来说就困难得多。对于更特殊的机器人(如大型机器蜘蛛),找到能熟练操作的人类几乎不可能。
我们开发基于学习的控制方法,最令人兴奋的潜力之一是实现涌现行为——即机器表现出超越人类设计或示范能力的行为。在这种情况下,自主学习变得非常理想。从原则上讲,机器可以从自身经验中获取无限数据,并持续自我改进,理论上能够超越人类的性能。
为了开始思考这个问题,我们需要引入新的术语和符号,并准确定义我们的目标。如果目标不再是单纯的模仿,而是做好其他事情,我们追求的是什么?

我们可能不想仅仅匹配专家数据集中的动作,而是希望实现某种期望的结果。例如,在“老虎”问题中,我们希望最小化被老虎吃掉的概率。我们可以用数学来表达这个目标:最小化落入“被老虎吃掉”状态 s‘ 的概率。

更一般地,我们可以将其表述为最小化某个成本函数 C(s, a) 的期望值。成本函数定义了任意的控制任务,例如避免危险或到达目的地。有时我们也使用奖励函数 R(s, a),它本质上是成本函数的相反数(C = -R)。这两种表述是等价的,只是文化或领域习惯不同。
值得注意的是,我们之前讨论的模仿学习也可以精确地用这个框架来描述。用于模仿的“奖励”可以是对数概率,其对应的“成本”就是负对数概率。但成本函数框架更具表达性,它可以定义我们真正关心的目标(如到达目的地、避免事故),并使用这些目标来训练智能体。


本节课总结 ✨

本节课我们一起学习了DAgger算法,它是一种通过智能地收集人工标注数据来解决模仿学习中分布偏移问题的方法。我们回顾了分布偏移问题,详细讲解了DAgger的步骤,并讨论了其应用与挑战。最后,我们总结了解决行为克隆问题的多种思路,并指出了模仿学习的局限性,为引入以成本/奖励函数为核心的强化学习框架做好了铺垫。
课程 P80:强化学习中的推断与控制(第四部分) 🧠
在本节课中,我们将学习如何将之前讨论的“控制即推断”思想转化为具体的强化学习算法。我们将重点介绍软Q学习和熵正则化策略梯度这两种方法,并探讨它们之间的联系与优势。
软Q学习算法 🤖
上一节我们介绍了软最优性标准。本节中,我们来看看如何基于此标准实现Q学习。
标准的Q学习使用以下更新公式:
Q(s, a) ← Q(s, a) + α * (r + γ * max_{a'} Q(s', a') - Q(s, a))
在软Q学习中,更新公式的结构是相同的。唯一的区别在于计算目标值时,我们不再对下一个状态的动作值取“硬最大值”(max),而是取“软最大值”(softmax)。对于离散动作,软最大值是对指数化Q值的对数求和(Log-Sum-Exp)。

因此,软Q学习的目标值计算为:
目标值 = r + γ * log(∑_{a'} exp(Q(s', a')))
从软Q学习中恢复的策略不是贪婪策略,而是与指数化的优势函数成正比。可以证明,该策略是相应变分推断问题的解。
以下是软Q学习算法的步骤:
- 采取动作并观察:执行动作
a_i,从环境中获得新状态s'_i和奖励r_i,并将样本(s_i, a_i, s'_i, r_i)存入经验回放缓冲区。 - 从缓冲区中采样一个小批量的数据。
- 计算目标值:使用目标网络计算
r + γ * softmax_{a'} Q_{target}(s', a')。 - 更新Q函数:通过回归步骤,最小化当前Q网络输出与目标值之间的误差,来更新Q网络的参数。
- 延迟更新目标网络:定期或缓慢地将在线Q网络的参数同步到目标网络。
整个流程与传统的深度Q网络(DQN)非常相似,核心区别仅在于将 max 操作替换为 softmax 操作。

熵正则化策略梯度 📈
我们也可以不依赖动态规划,而是直接优化从变分推断中得到的原始目标函数,即期望奖励之和加上策略的熵。
这个目标函数可以写为:
J(θ) = E_{τ∼π_θ}[∑_{t} r(s_t, a_t) + α * H(π_θ(·|s_t))]
其中 H(π) = -E_{a∼π}[log π(a|s)] 是策略的熵,α 是温度参数。
推导一个策略梯度算法来优化此目标非常直接。目标函数中的期望奖励部分,其梯度就是标准的策略梯度。新增的部分是熵的梯度。
直觉上,最优策略 π* 应与指数化的优势函数成正比。最小化策略 π 与这个最优分布之间的KL散度,等价于最大化在策略 π 下的期望Q值加上策略的熵。因此,这种方法常被称为熵正则化的策略梯度。
在策略梯度算法中引入熵正则化非常有益,因为它可以防止策略过早地收敛到一个确定性策略(即熵坍缩),从而鼓励更好的探索。
策略梯度与软Q学习的联系 🔗
现在,让我们看看在这个推断框架下,策略梯度与Q学习是如何联系起来的。
如果我们写出熵正则化策略梯度的目标函数并计算其梯度,经过推导(利用策略梯度的基线性质),我们可以得到梯度表达式的一个形式。
有趣的是,这个表达式与软Q学习中的目标函数非常相似。主要区别在于:
- 策略梯度包含一个
-∇V(值函数梯度)项。 - 软Q学习的目标函数则包含一个
softmax项。

如果我们在一个同策略(on-policy)的Q学习方法中,可以省略某些修正项,那么两者会显得更为接*。这揭示了在软最优性框架下,基于值的Q学习和基于策略的策略梯度方法之间深刻的理论联系。
软最优性框架的优势 ✨
那么,采用这种变分推断和软最优性的框架,在实际中有什么好处呢?
以下是该方法的一些主要优势:
- 改进探索:通过熵正则化,防止策略过早确定化,从而在策略梯度算法中实现更有效的探索。
- 易于微调:学得的策略通常更具随机性,当任务需求发生细微变化时,这种策略更容易进行专业化调整或微调。
- 打破*局的原则性方法:当多个动作具有完全相同的优势时,软最优策略会给它们分配相同的概率,而不是需要人为处理
max操作的不确定性。 - 增强鲁棒性:策略学会了以多种方式完成任务,对环境变化有更好的覆盖。如果某种方式因环境变动而失效,其他方式仍可能成功。
- 包含硬最优性:通过调整温度参数,可以控制熵的重要性。当温度趋*于零时,软最优性会恢复为传统的硬最优性。
- 更符合人类行为建模:人类行为并非完全确定,也会以一定概率“犯错”,且犯错的可能性随预期收益的降低呈指数衰减。软最优性模型能很好地刻画这一点。

总结 🎯

本节课中,我们一起学习了如何将“控制即推断”的框架实例化为具体的算法。
- 我们介绍了软Q学习,它通过将
max操作替换为softmax操作,在Q学习中实现了软最优性。 - 我们探讨了熵正则化策略梯度,它通过在目标函数中直接增加熵项来鼓励探索并防止过早收敛。
- 我们分析了两者在软最优性框架下的内在联系,揭示了值函数方法与策略函数方法之间的统一视角。
- 最后,我们总结了采用软最优性框架的多种实践优势,包括更好的探索性、鲁棒性以及对人类行为的拟合能力。

总而言之,将强化学习视为一个概率推断问题,为我们设计更鲁棒、更高效且更符合直觉的学习算法提供了强大的理论基础和实用工具。
课程 P81:控制即推断(第五部分)🚀
在本节课中,我们将学习如何将变分推断或软最优性框架应用于实际算法,以实现微调、探索和鲁棒性等有趣特性。我们将通过分析相关研究论文来理解这些概念。
上一节我们介绍了软最优性的理论基础,本节中我们来看看如何将其应用于实际算法,以解决强化学习中的探索与微调问题。

在强化学习中,例如训练人形机器人行走时,运行同一算法两次可能得到截然不同的策略。这类似于一个更复杂的局部最优问题。
以下是一个简单的例子来说明这个问题:
假设有一个环境,小机器人需要走到蓝色目标位置。它可以选择探索上部或下部通道,两者都能到达目标。传统强化学习算法可能会过早地“承诺”于其中一个通道。如果选择了错误的通道,就可能无法达到最优解。要解决此问题,代理需要同时跟踪两种假设,探索两个通道,直到明确哪个更优。

软Q学习在此类问题上非常有效。该方法基于Q函数,它将状态和动作映射到连续值。在训练初期,代理对于上下通道的Q值都会增加。在初始状态,Q函数可能有两个峰值,分别对应两个通道。哪个峰值更高具有一定随机性。
如果我们根据变分推断框架制定策略,使其与指数Q值成比例,我们就会将概率质量分配给两个峰值,从而同时探索两个通道。这个归一化值就是价值函数,可以解释为优势的指数,这直接引出了软Q学习算法。该方法具有探索多种假设直到找到最优解的吸引人特性。
这种方法对于预训练非常有用。在任务未明确指定的情况下进行预训练,可以学习以多种方式解决任务。当环境变化需要专精时,只需剔除错误方法,而无需重新学习。
举例说明,在一个奖励向任意方向快速移动的任务中:
- 标准DDPG算法会学习朝一个(可能是错误的)特定方向移动。
- 软Q学习方法则会尽可能多地尝试不同方向,以增加熵,产生多样化的行为。


这种“乱跑”的行为之所以有用,是因为以此预训练的策略在后续微调时(例如需要在特定走廊方向移动)能更快适应。原始的DDPG策略需要先“忘记”错误方向,再学习正确方向;而软Q学习策略只需专注于保留正确方向,因此微调效率更高。


实验结果表明,蓝色曲线(软Q学习微调)的性能提升速度远快于绿色曲线(DDPG微调)。


除了改善微调,软最优性框架还能直接催生更高效、性能更强的强化学习算法。目前最广泛使用的离线连续控制算法之一——软演员-评论家(SAC)——便基于此原则。
软演员-评论家是软Q学习的演员-评论家版本。其更新规则如下:
- Q函数更新:学习给定策略下的Q函数,可视为在变分族内进行消息传递。
- 公式与常规演员-评论家相似,但增加了熵项
-log π。 - 代码/公式描述:
Q更新目标 = 奖励 + γ * (下一状态Q值 - α * log π(下一动作|下一状态)),其中α是温度参数。
- 公式与常规演员-评论家相似,但增加了熵项
- 策略更新:使用更新后的Q函数,通过最大化期望回报与熵的和来更新策略。
- 代码/公式描述:
策略更新目标 = E[ Q(s,a) - α * log π(a|s) ]
- 代码/公式描述:

该算法可以离线学习,并与环境交互收集新数据。在变分推断视角下,Q函数更新对应于在图形模型中进行推断(消息传递),而策略更新则是调整变分分布以更好地*似后验。

SAC算法被证明非常有效。例如,它能让机器人学习堆叠乐高积木。有趣的是,由于熵项鼓励了行为多样性,学习后的策略对干扰非常鲁棒。即使被人为干扰,机器人也能调整并恢复任务。



另一个实验是让米诺陶洛斯机器人使用SAC在真实世界中学习行走。经过训练,它能发展出可靠的步态,并且对未训练过的地形(如斜坡、楼梯)展现出一定的适应能力。

本节课中我们一起学习了如何将控制即推断的框架应用于实际算法。我们看到了软Q学习如何通过维持多模态策略来促进探索和改善微调。接着,我们介绍了基于相同原理的软演员-评论家算法,它通过显式地最大化熵来学习鲁棒且高效的控制策略,并在真实机器人任务中取得了成功。

延伸阅读与参考文献:
- 本讲内容与“线性可解马尔可夫决策过程”工作密切相关。
- Emmanuel Todorov 在软最优性和解释人类运动控制方面做了开创性工作。
- Bert Kappen 在该领域做了大量基础研究。
- Brian Ziebart 是将此原理应用于逆强化学习的先驱。
- “Reinforcement Learning with Deep Energy-Based Policies” 是软Q学习的相关论文。
- “Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor” 描述了目前广泛使用的SAC算法。

CS 285 课程笔记 P82:逆强化学习(第一部分) 🧠
在本节课中,我们将要学习逆强化学习。我们将了解其问题定义,探讨如何利用行为概率模型来推导逆强化学习算法,并认识几种可用于高维问题的实用方法。
概述
到目前为止,我们处理强化学习问题时,总是假设奖励函数是已知的。通常,你需要手动设计这个奖励函数。然而,如果任务本身难以手动指定奖励函数,但你拥有专家成功完成任务的行为数据,情况会如何?你能否从观察到的行为中推断出奖励函数,然后利用强化学习算法重新优化它?这就是逆强化学习要解决的问题。
上一讲我们介绍了将最优性*似建模为推断问题的方法。今天,我们将学习如何应用这个模型来学习奖励函数,而不是直接从已知奖励中学习策略。
为何需要学习奖励函数?🤔
从模仿学习的视角看


标准的模仿学习方法,如课程初期讨论的行为克隆,是让智能体直接模仿专家的动作。然而,人类在模仿时并非如此。我们不会让别人操控我们的身体去精确复现动作。相反,我们会观察他人,理解他们的意图,然后尝试去实现这个意图,而非机械地复制动作。这可能导致我们采取与专家完全不同的动作,但最终达成相同的结果。
因此,我们希望强化学习智能体也能做到这一点:理解专家的意图,而不仅仅是模仿动作。
从强化学习的视角看
在许多强化学习任务中,目标函数是显而易见的。例如,在游戏中,得分自然就是奖励函数。但在许多其他场景中,奖励函数远没有那么明确。

以自动驾驶汽车为例,它需要*衡多种相互竞争的因素:到达目的地、保持特定速度、遵守交通法规、不干扰其他车辆、保证乘客舒适等。编写一个单一的方程来描述所有这些因素非常困难,但请专业驾驶员演示则相对容易得多。因此,在这些场景中,学习奖励函数极具吸引力。


逆强化学习问题定义 📝
逆强化学习指的是从演示中推断奖励函数的问题。例如,在驾驶场景中,你拥有专业驾驶员演示的良好策略,你希望从中提取出一个好的奖励函数,供你的强化学习智能体使用。
然而,逆强化学习本身是一个定义不明确的问题。原因在于,对于任何给定的行为模式,实际上存在无限多个不同的奖励函数可以解释该行为。

考虑一个简单的16状态网格世界示例。如果给你一条演示轨迹,并问你执行该演示的智能体的奖励函数是什么,答案可能有很多种。例如:
- 奖励函数可能是在某个特定方格获得高奖励。
- 也可能是在下半部分区域获得高奖励,同时穿过某些方格会受到惩罚。
- 甚至可以是,除了演示中采取的动作外,执行任何其他动作的奖励都是负无穷。
所有这些奖励函数都能使观察到的行为在传统意义上达到最优。因此,我们需要方法来消除这种歧义。
形式化定义
为了更正式地定义逆强化学习,我们可以将其与正向强化学习进行对比:
| 要素 | 正向强化学习 | 逆强化学习 |
|---|---|---|
| 给定条件 | 状态空间 S,动作空间 A,奖励函数 R |
状态空间 S,动作空间 A,来自最优策略 π* 的轨迹样本 τ |
| 目标 | 学习最优策略 π* |
学习奖励函数 R_ψ(参数为 ψ),使得 π* 为优化该奖励函数的最优策略 |
| 后续步骤 | - | 使用学到的 R_ψ,通过强化学习算法学习对应的最优策略 |


对于奖励函数的参数化,经典逆强化学习文献中常用的是线性奖励函数:R(s, a) = ψ^T * f(s, a),其中 f 是特征向量。而在深度强化学习中,我们可能希望使用神经网络来表示非线性奖励函数。

经典方法:特征匹配
在讨论基于概率模型的现代方法之前,我们先了解一些经典的逆强化学习思路,它们主要围绕特征匹配展开。
其核心思想是:假设我们有一些特征 f(s, a),并学习这些特征上的线性奖励函数。为了消除歧义,我们可以要求学到的奖励函数所对应的最优策略,其特征期望值与专家策略的特征期望值相匹配。
公式:选择参数 ψ,使得 E_{π_R_ψ}[f] ≈ E_{π*}[f]
其中,右侧可以通过对演示轨迹中的特征向量取*均来*似。
然而,这仍然存在歧义,因为多个不同的 ψ 仍可能导致相同的特征期望。
最大间隔原则
为了进一步消除歧义,人们引入了最大间隔原则(类似于支持向量机)。该原则要求选择 ψ,以最大化专家策略 π* 与所有其他策略 π 之间的“间隔”。
公式:E_{π*}[ψ^T f] ≥ E_{π}[ψ^T f] + margin(π*, π)
其启发式思想是:在众多能解释专家行为的奖励函数中,选择那个让专家策略明显优于所有其他策略的奖励函数。
为了处理策略空间巨大且连续的问题,并考虑策略间的相似性,可以对间隔进行加权,例如使用特征期望的差异或策略间的KL散度作为权重。
尽管这种方法可以推导出一些实用的算法,但它存在几个缺点:
- 最大化间隔具有一定随意性,并未明确基于对专家行为的假设。
- 难以清晰地对专家的次优性进行建模。
- 最终会形成一个复杂的约束优化问题,这对于使用神经网络表示奖励函数的深度学习场景来说尤其棘手。
基于概率模型的方法 🎲
本节课讨论的重点将建立在专家行为的概率模型之上。上一讲我们介绍了一个图模型,它将次优行为建模为包含状态、动作和最优性变量的推断问题。
在该模型中,我们定义了:
- 初始状态分布
p(s1) - 状态转移概率
p(s_{t+1} | s_t, a_t) - 最优性概率:
p(O_t=1 | s_t, a_t) = exp(r(s_t, a_t))
上一讲我们关心的问题是:在给定奖励函数 R 的条件下,专家行为最优时,轨迹的概率是多少? 这是一个推断问题。
公式:p(τ | O_{1:T}) ∝ p(τ) * exp(∑_{t=1}^{T} r(s_t, a_t))
这个模型有一个很好的性质:最优的轨迹具有最高的概率,次优轨迹的概率呈指数级下降,这可以很好地模拟专家或动物的次优行为。
逆强化学习作为模型学习
现在,我们将利用这个模型来学习奖励函数。我们将问题转变为:给定观察到的专家轨迹,我们能否学习奖励函数 R 的参数 ψ,以最大化这些轨迹在该图模型下的似然?
公式:max_ψ log p(τ | O_{1:T}, ψ)
这不再是一个推断问题,而是一个模型参数学习问题。通过最大化专家轨迹的似然,我们可以推断出最可能产生这些行为的奖励函数。
这种方法自然地提供了对专家次优性的概率解释,并且其优化目标(最大似然)比最大间隔原则更为直接。在下一部分中,我们将深入探讨基于此原理的具体算法。

总结

本节课我们一起学习了逆强化学习的基础知识。我们首先探讨了为何需要从演示中学习奖励函数,无论是为了进行更接*人类理解的模仿学习,还是为了解决复杂场景中奖励函数难以手动设计的问题。
我们明确了逆强化学习的问题定义及其固有的歧义性。接着,我们回顾了基于特征匹配和最大间隔原则的经典方法,并指出了它们的局限性。

最后,我们引入了基于概率模型的现代方法框架。通过将最优行为建模为图模型中的推断问题,我们可以将逆强化学习转化为一个最大似然估计问题,从而为学习奖励函数提供了一个更坚实、更灵活的基础。在接下来的课程中,我们将基于此框架推导具体的算法。
课程 P83:逆向强化学习(第二部分)🚀

在本节课中,我们将学习如何通过最大似然方法,从专家演示中学习奖励函数。我们将深入探讨最大熵逆向强化学习算法的原理与实现,并理解其如何解决奖励函数的不确定性问题。
学习奖励函数等同于学习最优性变量 🔍

在图形模型中,学习奖励函数等价于学习最优性变量。给定状态和动作,最优性变量的概率由参数化的奖励函数决定。
公式:p(o_t | s_t, a_t, ψ) ∝ exp(r_ψ(s_t, a_t))
我们的目标是找到参数 ψ,使得观察到的轨迹概率最大化。在逆向强化学习设置中,我们从未知的最优策略中获取样本,并通过最大似然估计来学习奖励函数。

最大似然优化与挑战 ⚙️
最大似然优化与其他机器学习设置类似。轨迹的对数概率表达式直观地表明,我们希望最大化专家轨迹的*均奖励,同时减去一个对数归一化项。
公式:log p(τ | o_{1:T}, ψ) = Σ_t r_ψ(s_t, a_t) - log Z
如果忽略对数归一化项,优化将变得简单但错误,因为它可能为所有轨迹分配高奖励。对数归一化项确保学习到的奖励函数使专家轨迹比其他未观察到的轨迹更可能。
处理对数归一化项(配分函数)📊
对数归一化项 Z(也称为配分函数)涉及对所有可能轨迹的积分,这通常是不可解的。然而,我们可以通过计算其梯度来优化。
公式:∇_ψ log Z = E_{p(τ | o_{1:T}, ψ)}[∇_ψ Σ_t r_ψ(s_t, a_t)]

梯度的计算可以分解为两个期望的差值:在专家策略下的期望与在当前奖励函数下的期望。这启发了一种对比性算法:增加专家轨迹的奖励,减少从当前奖励函数中采样轨迹的奖励。
估计期望与状态动作边缘 🧮
为了估计第二个期望项,我们可以利用状态动作边缘分布。通过计算前向和后向消息,我们可以得到状态动作边缘分布 μ_t(s_t, a_t)。
公式:μ_t(s_t, a_t) ∝ α_t(s_t) * β_t(s_t, a_t)
其中,α_t(s_t) 是前向消息,β_t(s_t, a_t) 是后向消息。然后,期望可以表示为 μ 与奖励函数梯度的内积。

代码:
# 计算状态动作边缘分布 μ
mu = normalize(alpha * beta)
# 计算期望
expectation = np.sum(mu * grad_r)
这种方法适用于小且离散的状态空间,但需要已知的状态转移概率。

最大熵逆向强化学习算法 🧠
最大熵逆向强化学习算法由 Brian Ziebart 在 2008 年提出。该算法通过迭代以下步骤来优化奖励参数 ψ:
- 计算当前奖励函数下的后向消息 β 和前向消息 α。
- 计算状态动作边缘分布 μ。
- 评估轨迹似然度的梯度:专家轨迹*均奖励梯度与 μ 和奖励梯度内积的差值。
- 沿梯度方向更新参数 ψ。
- 重复直到收敛。
该算法最大化专家轨迹的似然度,同时通过最大熵原则避免对专家行为做出不必要的假设,从而有效消除奖励函数的不确定性。

最大熵原则与特征匹配 🔗

当奖励函数是参数的线性函数时,该算法等价于解决一个约束优化问题:在匹配专家期望特征的前提下,最大化学习策略的熵。

公式:max_π H(π) s.t. E_π[φ(s,a)] = E_{π_E}[φ(s,a)]
这体现了最大熵原则——一种统计上的奥卡姆剃刀,即只做数据支持的推断。这使得算法在解释专家可能非最优的行为时更加鲁棒。

应用与局限 🗺️


最大熵逆向强化学习已在许多小规模离散问题中成功应用,例如从出租车司机的轨迹数据中推断其路线偏好(如选择城市道路还是高速公路)。

然而,该方法的主要局限在于需要相对较小且离散的状态空间,并且需要已知的状态转移动力学模型。

总结 📝


本节课我们一起学习了最大熵逆向强化学习。我们从最大似然估计出发,探讨了如何通过处理配分函数来优化奖励参数。我们详细介绍了通过前向后向消息计算状态动作边缘分布的方法,并最终阐述了最大熵逆向强化学习算法的步骤及其背后的最大熵原理。该算法通过匹配专家特征并最大化策略熵,有效地从演示中推断出奖励函数,尽管其应用受限于对已知动力学和小状态空间的假设。
课程 P84:CS 285 第20讲 逆强化学习(第三部分) 🧠
在本节课中,我们将要学习如何将最大熵逆强化学习(MaxEnt IRL)扩展到具有高维或连续状态/动作空间的实际问题中。我们将探讨传统方法面临的挑战,并介绍一种名为“引导成本学习”的实用*似算法。
上一节我们介绍了最大熵逆强化学习的基本原理。本节中我们来看看如何将其应用于更实际、更复杂的场景。
实际应用中的挑战 🚧
到目前为止,我们讨论的最大熵逆强化学习方法需要一些在大规模数据中难以获得的东西。实际的问题设置带来了以下主要挑战:
- 需要在内部循环中求解软最优策略:为了计算前向和后向消息,算法需要枚举所有可能的状态-动作对,这在连续或高维空间中是不可能的。
- 难以处理的状态和动作空间:实际场景中,状态和动作空间可能非常大且连续,状态可能仅通过采样获得,这使得枚举所有可能的状态-动作对变得不可能。
- 未知的动态模型:我们可能不知道环境的动态模型,这使得计算前向和后向消息的简单方法变得无效。

因此,之前讨论的算法并非完全适用于实际场景。我们需要想出可操作的*似值,以处理在深度强化学习中经常遇到的高维度和连续性问题。
可操作的*似方法:引导成本学习 💡
为了实现逆强化学习,我们可以做些什么呢?特别是在具有不确定的动力学和大的状态或动作空间的情况下。
首先,我们将假设我们不知道动态模型,但我们能够像标准模型无关的强化学习那样进行采样。
记住,最大熵IRL中似然函数的梯度是两个期望值的差:
∇L(θ) = E_τ~p_expert[∇r_θ(τ)] - E_τ~p_π(θ)[∇r_θ(τ)]
- 第一项:专家轨迹样本的奖励梯度期望值。
- 第二项:来自当前奖励函数下最优策略的轨迹奖励梯度期望值。
你可以很容易地使用专家的轨迹样本来估计第一项。所以,最大的挑战实际上是第二项,它需要当前奖励下的软最优策略。
以下是我们可以探索的一个想法:

- 学习*似策略:尝试学习给定状态
s和时间t的软最优策略π(a|s),使用任何最大熵强化学习算法(如软Q学习或熵正则化策略梯度)。 - 采样与估计:运行该策略来采样轨迹
τ_j。然后,我们将从专家那里获取轨迹τ_i来估计第一个期望值,并从当前策略π中获取轨迹τ_j来估计第二个期望值。
然而,这需要为奖励函数的每个梯度步都运行最大熵RL直到收敛,这在实际中非常困难。
重要性采样校正 🔄
为了解决策略未完全优化的问题,我们可以采用一个更实用的方法:不要求策略在每次梯度更新时都完全收敛,而是只对其进行少量改进。
但这样做会导致我们的估计器有偏差,因为我们从次优策略中采样,而非最优策略。解决方案是使用重要性采样进行校正。
我们可以引入重要性权重 w_j 来校正第二个期望项的偏差:
E_τ~p_π(θ)[∇r_θ(τ)] ≈ (Σ_j w_j * ∇r_θ(τ_j)) / (Σ_j w_j)
其中,重要性权重 w_j 有一个非常吸引人的形式。我们知道,最优策略的轨迹概率与奖励的指数成正比:
p_π*(τ) ∝ p(τ) * exp(r_θ(τ))
因此,重要性权重可以计算为:
w_j = exp(r_θ(τ_j)) / Π_t π(a_t|s_t)
所有未知的动态模型项 p(s_{t+1}|s_t, a_t) 和初始状态分布 p(s_1) 都会在比值中抵消。我们只需要知道当前奖励 r_θ 和当前策略 π 的动作概率(例如,在连续空间中可能是高斯概率)。

关键在于,与我们的参数 θ 相关的每次策略更新都使我们越来越接*目标分布。我们预期优化策略越充分,这些重要性权重就越接*1。因此,我们可以在 θ 上取梯度步,即使策略没有完全优化,但优化得越充分,我们的重要性权重估计就越好。
引导成本学习算法 🚀
这个想法构成了引导成本学习算法的基础。该算法由 Finn 等人提出,是第一种能够扩展到高维状态和动作空间的深度逆强化学习算法。
以下是该算法的设计流程:
- 初始化:有一个对策略
π的初始猜测(可能是随机策略)和一些人类演示数据。 - 采样:从当前策略
π中采样,生成策略样本轨迹。 - 更新奖励函数:使用人类演示样本和加权的策略样本(通过重要性采样),根据梯度公式更新奖励函数参数
θ。 - 更新策略:使用更新后的奖励函数,在最大熵学习框架下更新策略
π(例如,使用策略梯度加上熵正则项)。 - 循环:重复步骤2-4。

最终,这将产生一个奖励函数和一个实际有效的策略。如果策略被优化到收敛,它将是该奖励函数下的最优策略;而奖励函数则有望是对专家行为的良好解释。
实际应用示例 🤖
在原始论文中,Chelsea Finn 等人用真实机器人进行了实验。他们收集了演示数据,展示如何将水倒入杯中。

然后,学习到的策略必须仅使用视觉找到杯子。


并将水倒入那个杯中,无论它位于何处。这意味着算法必须推断出任务的真实意图。






总结 📝

本节课中我们一起学习了如何将最大熵逆强化学习应用于实际的高维连续控制问题。我们认识到直接应用原算法的困难在于需要精确计算策略和枚举状态。为此,我们引入了引导成本学习算法,它通过重要性采样来校正从未完全收敛的策略中采样的偏差,从而允许奖励函数和策略交替进行*似优化。这种方法使得逆强化学习能够处理复杂的真实世界任务,例如从视觉输入中学习机器人操作技能。
课程 P85:CS 285 第20讲 逆向强化学习 第四部分 🧠🤖
在本节课中,我们将学习逆向强化学习(IRL)与生成对抗网络(GAN)之间的深刻联系。我们将看到,这种联系不仅能帮助我们更清晰地理解算法,还能启发我们设计新的模仿学习算法。
概述
在讲座的最后一部分,我们将讨论逆向强化学习方法与另一类学习数据分布的算法——生成对抗网络(GAN)之间的深层关系。探索这种联系能带来很多启发,并帮助我们设计新的虚拟现实和模仿算法。
逆向强化学习与对抗游戏 🎮
上一节我们介绍了逆向强化学习的基本框架。本节中,我们来看看它如何可以被视为一种对抗游戏。
可能有人已经注意到,之前描述的算法结构看起来像一个游戏。我们有一个初始策略,从该策略生成样本,同时拥有人类演示样本。我们将这些样本结合起来,训练一个奖励函数,使其给人类演示高分,给策略样本低分。然后,我们更新策略去优化这个奖励函数,使其样本更难与演示区分。
你可以这样理解:奖励函数试图根据当前奖励,将策略样本的奖励压得很低,将人类演示的奖励提得很高。而策略则试图做相反的事情,它希望自己的样本根据奖励函数看起来和人类样本一样好。这几乎可以看作策略与奖励函数之间的一场游戏:策略试图欺骗奖励函数,让其认为自己与人类一样好;而奖励函数则试图找到一个能区分人类和策略的奖励。

与生成对抗网络(GAN)的正式联系 🔗
这种联系不仅仅是表面的。逆向强化学习与游戏的关联可以正式建立,并且与被称为生成对抗网络(GAN)的算法密切相关。
生成对抗网络是一种生成模型的方法,用于学习一个能捕获特定给定数据分布(如真实人脸、猫或斑马图像)的神经网络。它由两个网络组成:
- 生成器网络:接收随机噪声
z,并将其转换为样本x。理想情况下,这些样本应看起来像来自真实数据分布。 - 判别器网络:一个二分类器,试图将所有来自真实分布
p*的样本标记为“真”,将所有来自生成器分布p_θ的样本标记为“假”。
判别器 D_ψ(x) 的输出代表样本 x 是真实样本的概率。其目标是最大化真实样本的 log D_ψ(x),并最小化生成样本的 log(1 - D_ψ(x))。生成器则被训练来“欺骗”判别器,使其生成的样本被判别器判定为真实样本的概率更高。
将逆向强化学习视为一种GAN 🧩
现在,这与我之前概述的逆向强化学习程序非常相似。实际上,你可以将逆向强化学习视为生成对抗网络的一种特殊形式。
以下是需要做出的关键选择:应该使用哪种判别器?在GAN中,可以证明最优判别器在收敛时,代表了真实分布 p* 与生成器分布 p_θ 之间的密度比。
对于逆向强化学习,最优策略分布 p_θ(τ) 正比于轨迹概率 p(τ) 乘以指数化的奖励 exp(R(τ))。我们可以利用最优判别器的公式,将真实分布 p* 替换为 p(τ) exp(R(τ)),从而定义一个特殊的判别器:
D(τ) = p(τ) exp(R(τ)) / (p(τ) exp(R(τ)) + p_θ(τ))
当我们展开 p_θ(τ) 和 p(τ) 的公式时,与初始状态和动态相关的轨迹概率项会相互抵消,最终判别器简化为一个只依赖于奖励函数和策略概率的形式。值得注意的是,只有当策略概率分布与指数化奖励分布相匹配时,这个判别器才会输出0.5,这意味着策略已经收敛。
接下来,我们优化这个判别器(即优化奖励函数参数 ψ),使得该比值对于人类演示样本最大,对于策略样本最小。训练判别器的目标与标准GAN完全相同:最大化在人类数据分布下 log D_ψ(τ) 的期望,并最大化在当前策略样本下 log(1 - D_ψ(τ)) 的期望。有趣的是,我们不需要显式计算配分函数 Z,可以将其作为优化 R_ψ 的一部分同时优化。
这种推导的一个好处是,我们不再需要重要性采样权重,它们被自然地纳入到配分函数 Z 的优化中。然后,策略(扮演生成器的角色)被优化以最大化预期奖励(和熵),使其样本更难以与演示区分。

实践优势与泛化能力 🚀

如果我们在实践中实现这种基于GAN的逆向强化学习思想(相关论文链接在文末),可以研究恢复的奖励函数是否能以有意义的方式泛化。


例如,假设我们有某个四足机器人的演示,并从中恢复了一个奖励函数。当我们将这个奖励函数应用到一个被修改(例如禁用两条腿)的机器人时,机器人仍然可以最大化该奖励函数,但会采用与专家演示完全不同的步态。这正是逆向强化学习的优点:如果你恢复了专家的奖励函数,你可以在新的条件下重新优化这个奖励函数,从而得到有意义的行为。而在某些情况下,仅仅复制专家的动作可能无法产生有意义的行为。

为了获得更好的迁移能力,我们需要将目标(奖励函数)与动力学分离开来,而这正是逆向强化学习所做的。



从逆向强化学习到对抗模仿学习 🤖


此时,我们可以提出一个问题:为了连接GAN和逆向强化学习,我们使用了那种特殊的判别器。这有利于我们恢复可泛化的奖励函数。但如果我们不需要奖励函数,只想复制专家的策略呢?我们能否只使用一个普通的判别器?

答案是肯定的。我们可以让判别器 D 只是一个普通的二分类神经网络(就像常规GAN一样),然后让策略最大化 log D(τ) 的期望,使其样本更难与演示区分。这个想法在一篇名为《对抗模仿学习》的论文中被提出。这个算法不再是一个逆向强化学习算法,因为它不恢复奖励函数,但它确实能恢复专家的策略,因此它是一种明确的模仿学习方法。
这种方法存在许多权衡:
- 优点:优化设置通常更简单,因为移除了复杂的部分。
- 缺点:收敛时的判别器本身不包含奖励信息,因此你无法在新的设置中重新优化奖励,但可以保证(如果一切正常)恢复专家的策略。
总结 📝
本节课我们一起学习了逆向强化学习与生成对抗网络之间的深刻联系。
我们可以将经典的逆向强化学习方法(如最大熵逆向强化学习)视为一种对抗性框架:策略试图最大化其样本的奖励,而奖励函数则试图最小化策略样本的奖励并最大化人类演示的奖励,同时学习一个使演示具有最大似然的轨迹分布 p(τ)。
生成对抗性模仿学习方法则使用一个分类器作为判别器,它试图给所有策略样本打上“假”的标签,给所有人类演示打上“真”的标签。然后策略使用 log D(τ) 作为其奖励进行优化。这两种方法本质相似,关键区别在于:
- 逆向强化学习 使用特殊形式的判别器,可以恢复一个可泛化的奖励函数。
- 对抗模仿学习 使用标准二分类器作为判别器,只能恢复策略,不能恢复奖励函数。

这些方法已被应用于多种环境,例如与聚类方法结合从异构演示中恢复多种行为模式,甚至从图像中进行模仿学习。


延伸阅读 📚
以下是一些关于逆向强化学习的重要论文:

- 经典论文:奠定了逆向强化学习的基础。
- 引导成本学习:提出了将最大熵逆向强化学习扩展到高维深度学习设置的方法。
- 深度最大熵逆向强化学习:在小型表格领域使用深度网络执行逆向强化学习。
- 生成对抗式模仿学习:不执行逆向强化学习,但能恢复策略。
- 使用对抗式逆向强化学习学习稳健的奖励:专注于学习能够泛化的稳健奖励函数。
课程 P86:从人类反馈中强化学习 (RLHF) 与直接偏好优化 (DPO) 🧠🤖

在本节课中,我们将学习如何利用人类反馈来训练更强大、更符合人类价值观的语言模型。我们将从经典的“从人类反馈中强化学习”方法开始,然后深入探讨一种更简单、更高效的替代方案——“直接偏好优化”。

概述
大型语言模型,如GPT-3,通过海量文本的无监督预训练获得了强大的生成能力。然而,如何让它们生成更安全、更有帮助、更符合人类偏好的内容,是一个关键挑战。本节课将介绍两种核心方法:基于人类反馈的强化学习和直接偏好优化,它们构成了像ChatGPT这类模型训练流程的核心部分。

第一部分:从人类反馈中强化学习 (RLHF) 🛠️
上一节我们概述了课程目标,本节中我们来看看如何通过强化学习框架来利用人类反馈。
语言模型作为策略
对于我们的目的,可以将语言模型视为一个自回归模型,它根据已有的标记序列(状态)来预测下一个标记(动作)的概率分布。在RLHF的许多工作中,通常采用一种“上下文赌博机”的设定:给定一个提示(上下文),模型生成一个完整的回应序列(动作)。
RLHF 标准流程
以下是实现RLHF的四个主要步骤:
- 无监督预训练:在互联网级别的海量文本数据上训练一个基础语言模型(如GPT-3),目标是最简单的下一个词预测。这赋予了模型关于世界的知识。
- 有监督微调:收集人类针对特定任务(如问答、对话)编写的优质回应示例,并用这些数据对预训练模型进行微调。这教会了模型“如何回应”的格式和行为。
- 奖励模型训练:这是RLHF的核心。我们不再直接让人工编写完美答案,而是让人工进行更简单的偏好判断。
- 从SFT模型生成的大量回应中,为每个提示采样两个回应。
- 展示给人类标注者,让他们选择哪个回应“更好”。
- 使用这些偏好数据训练一个奖励模型。该模型学习预测人类会偏好哪个回应。
- 强化学习微调:使用上一步训练好的奖励模型作为优化目标,对SFT模型进行强化学习微调(通常使用PPO算法)。同时,需要添加一个约束,防止新策略偏离SFT模型太远,以避免过度优化到奖励模型不可靠的区域。
为什么需要RLHF?
你可能会问,既然有监督微调已经有效,为什么还需要复杂的RLHF?主要有两个原因:
- 可扩展性:让人工编写高质量的示例回应非常耗时。而让人工进行“A/B比较”则快速、简单得多,更容易扩大数据规模。
- 超越人类:如果目标是让模型在某些任务上超越人类水*,仅仅模仿人类行为(有监督学习)可能不够。通过偏好学习和强化学习,模型有可能探索并发现比人类演示更好的策略。
奖励模型与偏好建模
我们如何从简单的“偏好选择”中学习到一个连续的奖励函数呢?这里使用了经济学中的布拉德利-特里模型。该模型假设存在一个潜在的得分函数 s,人类选择回应 y_w 而非 y_l 的概率与两者得分之差相关:
P(y_w > y_l) = σ(s(y_w) - s(y_l))
其中 σ 是sigmoid函数。我们将得分函数 s 替换为带参数的奖励模型 r_φ,然后通过最大化人类偏好数据的似然来训练它。

RLHF的挑战
直接优化学习到的奖励模型可能会出现问题,主要是分布偏移:奖励模型只在SFT模型产生的数据分布附*是准确的。如果策略优化得太远,进入奖励模型未曾见过或训练不佳的区域,奖励信号可能失效,导致模型生成无意义但奖励虚高的内容。因此,在RL优化中必须加入KL散度约束,以保持新策略与SFT模型的接*。

第二部分:直接偏好优化 (DPO) 🎯
上一节我们介绍了RLHF的完整流程,它虽然强大但非常复杂。本节中我们来看看一种能极大简化此流程的方法——直接偏好优化。
DPO的核心思想是:如果我们以一种特定的方式将奖励函数参数化,就可以绕过显式训练奖励模型和运行强化学习循环的步骤,直接从偏好数据中优化策略。
从RLHF目标出发
RLHF的优化目标可以表述为:
max_π E_{x~D, y~π(·|x)} [r_φ(y|x)] - β * KL(π(·|x) || π_ref(·|x))
即在最大化奖励的同时,最小化新策略 π 与参考策略 π_ref(通常是SFT模型)之间的KL散度。
关键洞见:奖励与策略的对应关系
对于上述约束优化问题,其最优解 π* 具有一个封闭形式:
π*(y|x) = (1/Z(x)) * π_ref(y|x) * exp( (1/β) * r(x, y) )
其中 Z(x) 是归一化常数。这个公式直观地告诉我们,最优策略会在参考策略概率高且奖励也高的回应上分配更高的概率。
我们可以对这个等式进行变换,将奖励函数 r(x, y) 用最优策略 π* 和参考策略 π_ref 表示出来:
r(x, y) = β * log( π*(y|x) / π_ref(y|x) ) + β * log Z(x)
构建DPO损失函数
现在,我们不再将奖励模型 r_φ 视为一个独立的神经网络,而是将其参数化为策略 π_θ 和参考策略 π_ref 的对数概率比:
r_φ(x, y) = β * log( π_θ(y|x) / π_ref(y|x) )
将这个参数化形式代入之前用于训练奖励模型的布拉德利-特里损失函数中,神奇的事情发生了:难以处理的归一化常数 Z(x) 被消去。我们得到了一个可以直接在策略参数 θ 上优化的损失函数——DPO损失:
L_DPO(π_θ; π_ref) = -E_{(x, y_w, y_l)~D} [ log σ( β * log( π_θ(y_w|x) / π_ref(y_w|x) ) - β * log( π_θ(y_l|x) / π_ref(y_l|x) ) ) ]
DPO的优势
- 简单性:只需一个损失函数,一次前向/反向传播,无需复杂的RL训练循环(如PPO中的价值函数、多轮采样等)。
- 稳定性:训练过程更稳定,超参数(如
β)与最终策略的KL散度有更可预测的关系。 - 高效性:计算成本显著低于RLHF。
- 理论保证:在给定的偏好数据下,DPO优化得到的最优策略与通过奖励模型进行RL优化得到的最优策略是完全一致的。
DPO的梯度解读
DPO损失的梯度揭示了其工作原理:
∇_θ L_DPO = -β * E_{(x, y_w, y_l)~D} [ σ( r_φ(x, y_l) - r_φ(x, y_w) ) * ( ∇_θ log π_θ(y_w|x) - ∇_θ log π_θ(y_l|x) ) ]
这可以理解为:
- 增加偏好回应的概率:梯度会推动策略增加人类偏好的回应
y_w的概率。 - 降低非偏好回应的概率:梯度会推动策略降低人类不偏好的回应
y_l的概率。 - 自适应加权:权重项
σ( r_φ(x, y_l) - r_φ(x, y_w) )是模型当前对偏好判断的“不确定度”。当奖励模型已经能很好地区分好坏回应时(即r_φ(x, y_w) >> r_φ(x, y_l)),该权重趋*于0,训练会自动减弱对该样本的关注,防止过拟合。
第三部分:应用实例——提升模型事实性 📈
上一节我们学习了DPO这一强大工具,本节中我们来看看它的一个实际应用:改善语言模型的事实准确性(减少幻觉)。
问题:模型的事实性缺陷
现有的语言模型,即使经过RLHF训练,也经常会产生与已知事实不符的“幻觉”内容。这是因为:
- 预训练数据混杂:模型从互联网上学到的知识本身包含大量不准确或矛盾的信息。
- 人类反馈的局限:在RLHF中,人类标注者更擅长判断回应的“有用性”、“无害性”,但很难快速、准确地判断复杂陈述的“事实性”。人们更倾向于偏好与自己观点相符或听起来令人信服的回应。
解决方案:基于AI反馈的DPO

既然人类不擅长提供事实性偏好,我们可以利用AI本身来生成这些偏好数据:
- 对于一个提示,让模型生成多个候选回应。
- 使用一个事实性核查工具(例如,基于检索的验证器,检查回应中的陈述是否与维基百科等可靠来源一致)为每个回应打分。
- 根据分数高低,构建“更事实” vs “更不事实”的回应对,形成一个自动生成的偏好数据集。
- 使用这个数据集和DPO方法,对模型进行微调,优化其事实性。


实验表明,这种方法能有效减少模型回应的错误事实数量,同时增加正确事实的数量。而标准的RLHF流程在此任务上提升并不明显,因为它依赖的人类偏好并未强烈指向事实性。
总结 🎓
本节课中我们一起学习了如何利用人类(或AI)偏好来对齐和提升大型语言模型:
- RLHF 提供了一个强大的框架,通过人类偏好比较来学习奖励模型,进而用强化学习优化策略。它使模型行为更符合人类价值观,但流程复杂。
- DPO 是对RLHF的优雅简化。它通过奖励与策略的数学对应关系,绕过了显式的奖励模型训练和RL循环,能直接从偏好数据中优化策略,更简单、稳定、高效。
- 应用:我们可以将DPO与自动生成的偏好数据(如基于事实核查的偏好)结合,针对性地改进模型的特定能力,例如提升其生成内容的事实准确性。



核心的启示是:偏好比较是一种强大且可扩展的监督信号。无论是来自人类还是AI,它都为我们训练更安全、更可靠、更强大的AI系统提供了关键路径。DPO等新方法正在让这一过程变得更加易于实施和迭代。
强化学习理论基础 📚 CS 285 课程笔记 P87


在本节课中,我们将跟随 Andrea Zanette 的讲解,探讨强化学习的理论基础。我们将了解为何需要理论支撑,分析强化学习问题的固有难度,并审视函数逼*与离线强化学习中的核心挑战。


概述:为何需要强化学习理论?🤔

强化学习算法(如价值迭代、策略梯度)通常由理论启发,并伴随一定的性能保证。理论不仅能指导算法设计,还能揭示算法的基本限制,帮助我们理解收敛性、超参数选择、数据需求以及计算复杂度。然而,对于许多深度强化学习算法,甚至证明其收敛性都极具挑战。本次课程旨在弥合实际算法与理论理解之间的差距。


第一部分:问题的难易程度——表格型强化学习 📊
上一节我们概述了理论的重要性,本节中我们来看看如何衡量和区分强化学习问题的难易程度。
我们考虑标准的探索性设置:智能体从零开始与环境交互,目标是学习一个策略以最大化累积奖励。衡量算法性能的常用指标是后悔值,即智能体执行策略的累积次优性差距。
公式:后悔值 ( R(T) = \sum_{t=1}^{T} [V^* - V^{\pi_t}] ),其中 ( V^* ) 是最优价值,( V^{\pi_t} ) 是时间步 ( t ) 的策略价值。

对于具有小规模状态和动作空间的表格型问题,已有算法(如UCB启发的方法)可以达到最小化后悔值的理论边界。这些边界是状态和动作空间大小的函数。
然而,算法的实际性能因问题结构不同而差异巨大。因此,我们引入一种问题依赖的复杂性度量,它由系统动态和最优价值函数共同决定。对于某些特定类型的问题(如上下文赌博机、确定性动态或局部可恢复的问题),这种复杂性度量值较小,意味着问题更容易解决。


以下是几种“容易”问题的类型:
- 弱记忆问题:如推荐系统,当前错误不影响长远未来。
- 确定性环境:本质上是搜索问题。
- 局部可恢复问题:错误可以很快被修正。

关键点在于,我们可以设计一种自适应算法,使其在各类问题上的性能与此复杂性度量成正比,从而在容易问题上自动获得更好的性能保证,同时在最坏情况下仍保持最优。


第二部分:函数逼*带来的挑战 🧠

上一节我们讨论了表格型问题的复杂性,本节中我们来看看当引入函数逼*(这是处理大规模或连续状态空间的必要手段)时,情况会发生何种变化。


在监督学习中,如果目标函数是线性的,线性回归可以高效学习。然而在强化学习中,即使我们保证最优动作价值函数是线性的,学习过程也可能变得极其困难。

考虑离线强化学习设置:我们有一个静态数据集,目标是评估或寻找一个优于数据收集策略的新策略。研究发现,即使动作价值函数是线性的,任何算法在最坏情况下也可能需要样本数量随特征维度指数级增长才能做出准确预测。
核心结论:这与监督学习形成了鲜明对比。在强化学习中,由于涉及多步序列决策和贝尔曼算子的迭代,问题的统计难度会急剧增加。这意味着,对于许多看似简单的线性可实现的强化学习问题,我们无法设计出具有多项式样本复杂度保证的通用算法。


这并非否定所有可能性,而是指出要保证高效学习,问题必须具备额外的特殊结构(例如,价值函数类与贝尔曼算子之间的良性交互)。目前的理论研究正致力于识别这些能使学习变得可行的条件。




第三部分:离线强化学习的理论保证 📉

上一节我们看到了函数逼*的固有难度,本节我们聚焦于离线强化学习,探讨在已有固定数据集的情况下,我们能获得怎样的理论保证。
在离线强化学习中,我们无法与环境交互,只能利用历史数据集。核心挑战是分布偏移:数据集通常由某个行为策略生成,覆盖范围有限,而我们想评估或找到的策略可能访问完全不同的状态-动作区域。
解决思路是在策略的价值估计中引入不确定性度量或悲观主义。一个理想的离线算法会在策略的估计价值与其不确定性之间进行权衡,最终选择具有最高置信下界的策略。

公式:算法保证常具有形式 ( V(\hat{\pi}) \geq \max_{\pi} [V(\pi) - C(\pi) / \sqrt{n}] ),其中 ( C(\pi) ) 是覆盖系数,衡量数据集对策略 ( \pi ) 的支持程度。


对于线性函数逼*等特定设置,我们可以给出精确的保证。覆盖系数 ( C(\pi) ) 具体化为目标策略与行为策略的特征分布在特征空间中的某种度量(如特征协方差矩阵的相互作用)。这从理论上解释了为何单纯模仿行为策略(行为克隆)可能是次优的,而通过合理惩罚不确定性,我们有望做得更好。

然而,对于使用深度神经网络等复杂函数逼*器的实用算法,目前还难以提供坚实的理论保证,这仍然是该领域一个重要的开放问题。
总结与展望 🎯
本节课中我们一起学习了强化学习理论的三个核心方面:



- 问题复杂性:在表格型设置中,我们可以根据问题结构(如弱记忆、确定性)区分难易,并设计自适应的最优算法。
- 函数逼*的难度:强化学习在引入函数逼*后,其统计难度可能远超监督学习,即使在线性可实现的简单情况下,也可能需要指数级样本,这凸显了问题结构的重要性。
- 离线学习的保证:对于离线强化学习,理论保证通常表现为在策略价值与不确定性之间的权衡,其中覆盖系数是关键。

总而言之,理论与实践之间仍存在巨大差距。尽管为深度强化学习算法提供通用保证非常困难,但在受限设置中建立稳定性与性能的理论基础,对于安全、可靠地将强化学习应用于现实世界至关重要。理论虽不能提供具体的调参指南,但能提供适用于广泛问题的根本性见解,并帮助我们理解算法的基本极限。
课程 P88:序列模型与语言模型在强化学习中的应用 🧠
在本节课中,我们将要学习如何处理部分可观察的强化学习问题。我们将探讨当环境状态无法被完全观测时,传统的强化学习方法会遇到哪些挑战,并介绍如何使用序列模型(如RNN、LSTM、Transformer)来构建能够处理观察历史的智能体策略。
部分可观察性:从MDP到POMDP
上一节我们介绍了标准的马尔可夫决策过程。本节中我们来看看当环境无法被完全观测时会发生什么。
在课程开始时我们看到,除了完全可观察的MDPs,我们还可以考虑部分可观察的MDPs。在环境中我们只能获取有限的观察数据。这就是我们开始思考序列模型在强化学习中应用的起点。

观察的问题在于,与我们一直使用的马尔可夫状态不同,观察值不遵守马尔可夫性质。这意味着仅从当前观察,你不一定拥有足够的信息来推断环境的完整状态。这意味着过去的观察实际上可以为你提供更多信息。这与马尔可夫状态的情况相反,在马尔可夫状态中,如果你观察当前状态,那么过去的状态无法为你提供更多信息来预测未来,因为当前状态将未来与过去分离。
当你处理部分观察时,状态是未知的。在大多数情况下,你甚至没有状态的表示。所以你不知道当前的状态是什么,你甚至不知道状态的数据类型是什么。
总结一下我们在课程开始时讨论的关于部分可观察性的内容:假设环境是猎豹追逐羚羊,但你的观察是场景的图像。那个观察基于某种真实的状态,例如动物的位置、动量和身体配置。那个状态完全描述了系统的配置。如果你知道当前状态,它就告诉你一切,这意味着你可以预测未来。这不意味着未来是确定的,它可能仍然是随机的。它只意味着过去的状态不能有助于你预测那个未来,如果你已经有一个当前状态。
但如果你只有观察,那么观察可能不全面。也许有一辆车在猎豹前面行驶,所以你看不到它。状态实际上并没有改变,但现在的观察并不包含足够的信息来推断当前状态。如果你看之前的观察,你现在可能会获得更多的信息。

问题是大多数现实世界问题都像这样。很多我们讨论的算法都假设你有一个完整的状态。并不是所有的算法都这样,我们会在下一秒讨论这个问题。但是,大多数现实世界的问题实际上并没有给你一个完整的状态。在现实世界中,实际上存在一种程度的部分可观察性。所有问题都是部分可观察的。你永远不会真正得到系统完整的配置。
但是,有时部分可观察性是如此之小,以至于实际上你可以假装观察是一个状态,一切都会顺利进行。例如,雅达利游戏就是这样的。在许多雅达利游戏中,即使它们从技术上是被部分观察的,因为系统的状态就像雅达利模拟器的RAM,实际上,图像几乎包含了所有必要的信息。但在某些情况下,它们被观察得非常部分。

例如,如果你正在驾驶汽车,你可能在你的盲点中有另一辆车辆。对于这辆红色汽车,你可能看不到蓝色汽车或卡车,但它们对它的未来状态非常相关。所以这些是真正意义上的部分可观察性情况。
如果你正在玩一款以第一人称视角的视频游戏,游戏中可能会有很多与你过去所见的事物密切相关的事情。为了有效地玩这个游戏,你需要记住的事情非常重要,但在当前的观察中你不能看到。
另一个部分可观察性极其重要的设置例子,是与其他代理互动。如果你有一个应该与人类互动的机器人,人类的心理状态实际上是状态的未观察部分。所以你可能会观察到他们说或做什么,但你不一定能观察到他们在心中想的是什么,他们的欲望是什么,他们的偏好是什么,他们从交互中想要得到什么。这是一个非常复杂的部分可观察性实例。
部分可观察性的另一个例子是对话。如果你的观察是文本字符串,这可能是用于人类交互的。它也可能是你在与一个基于文本的游戏或类似的东西交互,或者是甚至像Linux日志这样的工具。在这种情况下,交互的历史真的很重要,而且只是当前的短语,像你最后看到的词,它本身并不能传达出所有的信息。所以现在这些都是部分观察的设置示例。


POMDP的独特挑战
上一节我们了解了什么是部分可观察性。本节中我们来看看部分可观察的MDPs会带来哪些独特的挑战。
部分观察的MDPs可以真的很奇怪。我们可以通过简化使它们不那么奇怪,但如果我们简单地对待它们,在部分观察的MDPs中,有很多事情发生,在完全观察的MDPs中这些事情根本不能发生。
以下是部分可观察MDP中可能出现的两种独特现象:
- 信息收集动作:在部分可观察性下,可能最优的是做一些本身不会导致更高奖励的事情,但会给你更多的信息关于奖励可能所在的地方。例如,如果你正在穿越迷宫,如果你只是把它当作一个完全可观察的任务,也许你的状态是迷宫中的位置,然后你只需要在这个迷宫上运行RL,直到你解决这个迷宫。最优的行动总是朝着出口移动。但如果你想解决一个迷宫的分布,所以你在试图得到一个可以解决任何迷宫的策略,现在是一个部分可观察的问题。如果你看不到整个迷宫从开始,如果你只是得到一个第一人称视图,因为现在未观察到的状态是你所在的迷宫配置。在这种情况下,实际上,可能最优的是像窥视迷宫的顶部一样,并尝试观察所有的交叉点,尽管这个信息收集行动本身并没有使你更接*出口。所以,信息收集行动是在有效策略中涌现出来的,而在完全观察到的MDP中,永远不会涌现出来。
- 随机最优策略:部分观察到的MDP可能会导致随机的、最优的策略,而在完全观察到的MDP中,总是存在一个确定的策略是最优的。这不意味着所有有效的策略都是确定的,可能会有一个同样好的策略是随机的。但在完全观察到的MDP中,你永远不会陷入只有随机策略最优的情况。而在部分观察的MDP中,这实际上是可能的。
这里是一个非常简单的例子:假设你有一个三状态MDP,你可以处于状态A,B或C。奖励只在状态B为+1。你在每个状态开始的概率是0.5在状态A,和在状态C。所以你有50%的可能性从左边开始,从右边开始。让我们假设你现在进行了部分观察,你观察中不含有任何信息。所以基本上在这种部分可观察的MDP中,因为你没有任何观察,你基本上只能承诺采取行动,要么是左边,要么是右边。
一个确定性的策略必须选择,要么是现在总是去左边,要么是总是去右边。如果它选择总是去左边,然后,如果它从状态C开始,它最终会到达好状态B;如果它从状态A开始,它永远不会到达状态B。如果它承诺总是向右走,然后,如果它从状态A开始,它会得到奖励,但如果它从状态C开始,它不会。由于这里的确定性策略必须依赖于观察,而且观察没有任何信息,唯一确定政策的选择是始终向左走,或者始终向右走。但如果你有一种左转或右转概率为五十五十的政策,那么无论它从A还是C开始,它最终都会到达B。所以这是一个例子,在这种情况下,随机政策实际上比任何确定政策都要好。

传统RL方法在POMDP中的表现
上一节我们看到了POMDP的独特之处。本节中我们来看看之前学到的RL算法中,哪些实际上能够正确处理部分可观察性。
现在我们必须对“正确处理”这个问题非常小心,因为它的含义是什么?我们会在一会儿讨论这个问题。但现在首先让我们回顾不同的方法。我会讨论三种方法,三种类方法:
- 策略梯度方法:我们讨论的第一个方法,它构建了策略梯度的估计器,使用某种优势估计,使用我们之前见过的熟悉公式
∇ log π。 - 基于价值的方法:例如Q学习。
- 基于模型的RL方法:例如训练一个模型来预测下一个状态,给定当前状态和动作,然后通过该模型规划。
对于每种方法,一个天真的想法是:我们能否简单地取状态s,并将其替换为观察o?这是一个有效的事情可以做吗?
在我们开始回答这个问题之前,对于每种方法,我们都必须理解“处理部分可观察性”意味着什么,正确地处理意味着什么。花一点时间来思考这个问题:对于这种方法,你想要什么?假设它确实可以简单地替换状态为观察,你希望从这种工作正确的方法中得到什么?
在所有这些情况下,我们将试图获得一个政策,该政策考虑观察,而不是状态,并产生一个动作。如果我们的方法正在正确工作,我们期望得到的是可能的最佳政策,考虑到我们只能看到现在的观察。例如,在三个状态的例子中,最佳政策应该是左转或右转,概率各一半。这是现在最佳的无记忆反应性政策。当然,如果你得到一个有记忆的政策,你可以做得更好。但是现在我们只是提出问题:我们能在不改变策略类别(即限制策略只能查看当前观察)的约束下,得到最佳政策吗?所以“处理”意味着在无记忆政策类中找到最佳政策。

好的,所以对于这个“处理”概念,花一点时间思考我们是否能在无记忆政策类中得到最佳政策,使用观察替换状态来计算策略梯度时,是否正确?基于价值的方法和基于模型的强化学习呢?
让我们从讨论策略梯度开始。所以非常诱人地说,如果我们想要一个接受观察并输出行动的政策,让我们使用相同的 ∇ log π 方程,并只是简单地替换 s 为 o,是否正确?
有趣的是,我们从课程开始对政策梯度的推导,从未实际上假设马尔科夫性质。它假设分布因子化,这意味着概率链规则的应用是可能的,但这总是真的。实际上并没有假设即将传递给政策的状态,分离过去和未来。所以使用 ∇ log π 方程是完全可以的。
然而,优势估计器需要一些小心。因为有多种方式可以估计政策梯度的优势,其中一些可能会让我们陷入麻烦,而其他的一些是完全可以使用的。所以关键点是:优势是一个状态 s_t 的函数。优势并不一定是观察 o_t 的函数。优势不依赖于 s_{t-1},但如果你没有状态,你可能会遇到麻烦。
- 使用
r_t + V(s_{t+1}) - V(s_t)作为你的优势估计器,使用V的函数逼*器,是完全可以的,因为当你训练V作为状态的函数逼*器时,你基本上是利用每个看到状态s时,我们预期会得到相同值的属性,无论你是如何到达状态s的。所以V只需要是当前状态的函数。它不需要考虑过去的状态,因为马尔科夫性质告诉我们,值只取决于当前状态。 - 当然,这对观察来说并不成立。所以你不能简单地替换
V的参数并替换s_t为o_t。因此,训练o_t的V是不被允许的,因为值可能取决于过去的观察。因为当前的状态可能取决于过去的观察。这意味着,如果你打算使用政策梯度,如果你使用常规蒙特卡罗估计(如果你只是简单地插入奖励的总和),这是可以的,因为那个推导实际上没有使用马尔科夫性质。但如果你试图插入一个值函数估计器,这不再被允许,因为那个值函数估计器对于优势函数的值函数,是一个状态和状态的函数,状态依赖于过去的观察,因此这种估计器是不被允许的。
现在,作为一个小测验:在我们开始谈论值函数估计器和基线之前,我们学习了什么?我们所学到的所有东西,我们都可以简单地取那些乘以 ∇ log π 的奖励,并使用因果关系技巧来乘以 ∇ log π,与从 t 到结束的总奖励相乘,而不是从 1 到结束。所以,当你有部分可观察性时,使用因果关系技巧是否被允许?
答案是这实际上是完全可以的,因为因果关系技巧也没有使用马尔科夫性质。它只是使用了未来不会影响过去的属性。未来不会影响过去,即使你在部分可观察性下行动。所以这实际上是可以做的。而且,实际上,它可以通过证明 ∇ log π 的预期值,乘以过去的时间步奖励实际上*均为零,就像它对待状态一样。

不能做的是使用 V̂ 作为优势估计器。你可能也会考虑是否允许使用 V̂ 作为观察值的函数,作为基线。结果发现,这也实际上是可以的,出于简单的原因:我们可以使用任何我们想要作为基线,并且估计器仍然是无偏的。这可能是因为使用只依赖于观察作为基线的价值函数,可能不会减少我们想要的方差,但它总是无偏的,仅仅因为所有基线都是无偏的,无论它们是什么。
所以策略梯度的简短版本是:它们可以使用,但你必须小心那个优势估计。
关于基于价值的方法:我们可以简单地取,例如,Q学习更新规则,天真地替换状态为观察,那样实际上会给你最佳的无记忆策略吗?
这里的答案遵循与前一张幻灯片相同的逻辑,因为同样的原因,它不能被接受。使价值函数仅依赖于观察,同样的事情使得使 Q 函数仅依赖于观察不被接受。基本上,Q学习依赖于假设:每次你访问状态 s,无论你怎么到达那里,你的价值对于所有不同的行动都是一样的。这在你有马尔科夫状态时绝对是真的,但这对于观察并不成立。因为如果你观察到一个给定的观察值 o,你为不同行动的价值可能会依赖于之前的观察值。所以它可能会依赖于你怎么到达那里,而且实际上这使得Q学习规则无效。所以基于价值的方法在没有马尔科夫属性的情况下不工作。你根本不能天真地用观察替换状态。
当然,如果观察本质上是一个马尔科夫状态,就像大多数雅达利游戏一样,这可以足够接*,结果可能会很好。但在一般情况下,你有越多的部分可观察性,这最多会工作得越差。一个非常明显的方式来看这一点是,要注意从 Q 函数中提取策略的方式是取行动,与总是确定的策略值最大的行动。但我们之前看到,POMDPs有时可以有随机最优策略。因为Q学习从未产生随机策略,存在一个没有任何可能它产生最优策略的情况。例如,在那个包含三个状态的MDP中,随机策略更优。
关于基于模型的强化学习方法:我们能否简单地将 o 替换为 s 在我们的预测模型中,然后得到正确的答案?结果是非常否定的。


这就是为什么这个想法如此糟糕的一个例子:

假设我们有以下环境:我们有两扇门。我们开始在一个我们将要接*这两扇门的状态中。我们将尝试那扇门。如果它是锁的,我们应该尝试另一道门。哪扇门是锁的还是开的,将是随机的。所以状态的一部分是哪扇门是锁的还是开的。你不能观察那个状态,你只看到你站在左边的门前,站在右边的门前。所以它是一个部分观察的问题。你不知道你现在尝试它时才能观察哪扇门是锁的还是开的。
这里有一个最佳策略,甚至是一个无记忆的策略。如果你站在门前,你应该首先尝试它,然后继续下一个。或者如果你必须无记忆,并且你不允许记住,如果你尝试了门,随机决定是否切换到不同的门,或尝试块。就像在三个状态示例中一样。
所以有实际解决这个问题的方法,即使你不能记住你以前做了什么,也不能观察门是否锁住。假设你有在左边门的观察,从在右边门的观察,当你通过门的观察。然后你想要训练模型。所以模型将预测:你到达过去观察的概率是多少?你通过门的观察,给定你当前的观察是左边门,你的行动是打开。

假设在每个episode中每扇门有50%的机会解锁。所以百分之五十的机会左边是解锁的,百分之五十的机会右边是解锁的。它们是互斥的,所以你总是翻一个硬币并解锁左边或右边的门。所以有一半的episode你将通过。如果你没有通过半数的集数,这就意味着如果你试图实际估计这些概率,如果你试图训练模型,你会得到一个概率为0.5。
但是,什么是,什么是一个好的策略?如果开门的概率是0.5,如果你每次尝试都有50%的概率打开门,这就是这个模型实际上试图要代表的。那么你只需要反复尝试就能通过门。如果每次独立尝试的成功率都是50%,如果你只是继续尝试门,最终你会通过它。

但是,当然这不是世界工作的方式。如果你尝试了左边的门但它没有解锁,这是因为门被锁了。无论你尝试多少次,它都会保持锁定。但是,这个马尔科夫模型仅仅无法代表这一点。它无法代表如果你之前尝试过门,那么它就不会解锁,如果你再次尝试,因为它的概率只与当前观察有关。而且你当前正在采取的行动并不依赖于这个模型中之前的行动。所以,这个马尔科夫模型根本不能直接用于非马尔科夫观察,因为它会导致这些荒谬的结论:如果你一直试图锁门,最终它会解锁。

问题是模型的结构,仅仅不匹配环境的结构。在现实中,如果你在门打开之前没有尝试过,那么通过的概率实际上是零。但是,你不能用这个模型来表示它,因为模型不输入过去的观察和行动。

超越无记忆策略:使用序列模型

上一节我们看到,天真地将观察替换状态在很多方法中行不通。本节中我们来看看如何通过使用记忆来构建更好的策略。
到现在为止,我们谈论了无记忆策略。但是,当然,这是一个相当人为的限制,尤其是门例子,希望在现实中展示了这一点。如果你尝试门,你会记得你以前尝试过它,而且它没有锁定。所以你知道在未来要做些不同的事情。所以,当然,在实际应用中,如果我们想要解决部分可观察的马尔科夫决策过程,我们确实应该采用非马尔科夫策略,这些策略以观察历史作为输入。
我们可能有几种方法来处理这个问题。处理这个问题的一种简单方法是使用被称为状态空间模型的方法。所以,使用状态空间模型,我们实际上在做的是学习一个马尔科夫状态空间,仅给定观察。我们之前在讨论变分推断时看到过这种情况。

所以如果我们训练一个序列VAE,其中可观察的序列是观察序列的序列,并且隐藏状态是潜在状态的序列。其中我们可能有潜在空间的动态,初始状态的均值方差先验,并且有一些学习到的马尔可夫转移概率,以及一个观察概率,它模型观察分布的分布,给定当前隐藏状态。然后有一个编码器,将观察历史的序列编码为当前隐藏状态。这些实际上代表环境的马尔可夫状态。这可以实际上工作得很好。
所以如果你可以学习序列模型,就像我们在变分推断讲座中讨论的那样,如果你能学习这个,然后你可以实际上直接将潜在变量 z 替换为状态 s。所以你不能做 s 的事情因为你没有状态,你不能做观察的事情因为这是错误的,但你可以做它以 z 作为 Q 函数的状态输入。这实际上是有效的,因为我们训练模型以遵守马尔可夫性质,因为它们有马尔可夫动态。

现在,为什么这可能本身不是一个解决所有问题的好方法?这是正确的,它是有效的,但是为什么可能不够好?原因在于在某些情况下,实际上训练这个预测模型是非常困难的。而且,在许多情况下,它并不必要能够完全预测所有有关观察才能使用RL。如果你能预测所有有关观察,例如,生成
课程 P89:使用序列模型与语言模型的强化学习 🧠
在本节课中,我们将学习如何将强化学习(RL)应用于语言模型。我们将从理解语言模型的基础开始,探讨如何将其形式化为一个RL问题,并介绍使用策略梯度训练语言模型的核心方法。课程将涵盖从人类偏好中学习奖励函数的技术,并讨论实际应用中的关键挑战与解决方案。
什么是语言模型?🤔
上一节我们讨论了如何使用序列模型处理部分可观察的RL问题。本节中,我们将转向另一个方向:探讨RL如何帮助我们更好地训练序列模型,特别是语言模型。
基础的语言模型是一种预测下一个标记(token)的模型。你可以大致将标记视为单词,尽管实际上它们更像是字符的组合。标记是自然语言的一种细粒度表示。
我们通常使用变换器(Transformer)来构建语言模型。其工作方式如下:
我们有一个标记序列 S = [x0, x1, x2, x3, ...]。在每个位置,我们有一个小型编码器将离散标记编码到连续空间,并加上位置编码(即标记在序列中的整数位置,如0, 1, 2, 3...)。这些表示被传递给掩码自注意力层(masked self-attention layer),这是一个可以基于之前时间步的表示来生成每个位置表示的变换器模块。然后,这些表示会经过一些位置上的非线性变换。这个自注意力块会被重复多次。最后,在每个位置,我们读取一个关于下一个标记的预测分布(通常是一个softmax输出)。
在第一步,我们输入 x0 并预测 p(x1)。如果我们正在进行解码生成,例如,我们从标记“我”开始,模型可能会预测下一个词“喜欢”,依此类推,最终生成一个完整的句子,如“我喜欢用MDP解决策略问题”。模型会输出一个特殊的序列结束标记来指示生成完成。
所以,这基本上就是一个Transformer语言模型。为了本课程的目的,你可以将Transformer简化为一个“黑盒”:它顺序读取标记,并预测下一个标记。在每一步 t,它都在建模给定之前所有标记 x1 到 x(t-1) 的条件下,x_t 的分布 p。通过从这个分布中重复采样,你最终会得到一个句子。
注意:这个模型不是马尔科夫的,每个标记都依赖于所有之前的标记。像GPT、Bard、Claude等众所周知的系统都是语言模型的例子。它们本质上都是在生成语言标记:你提供提示(prompt)标记,它生成响应标记。

为什么用RL训练语言模型?🎯
我们可以使用RL进行训练,如果我们想要的不仅仅是匹配训练数据的分布。也就是说,我们不仅希望模型输出在训练数据中看到的同类文本,还希望它能最大化某个奖励函数。这在许多场景中都是非常理想的。
例如:
- 你可以使用RL让语言模型满足人类偏好,生成人们喜欢的文本类型。
- 你可以使用RL让语言模型学习如何使用工具,例如调用数据库或计算器。
- 你可以使用它来训练能够更好地与人类对话并实现对话目标的模型。
这些目标都超越了单纯的监督学习,需要RL的介入。

将RL应用于语言模型:核心问题 ❓
要将RL应用于语言模型,我们需要回答几个问题:与语言生成任务对应的MDP(或POMDP)是什么?MDP由状态、动作、奖励和转移概率定义,我们需要为语言生成任务选择这些元素。
有一些直观的对应关系:生成语言标记可能对应“动作”;最大化用户偏好可能对应“奖励”。但具体实现需要一些有趣的设计决策。我们需要决定奖励是什么,以及应该使用哪些算法。我们在之前的课程中学习过一些可以处理部分可观察性的算法,有些适用于离线策略,有些适用于在线策略,我们必须做出选择。
单步(Bandit)RL问题 🎲
让我们从RL训练语言模型中最常见的应用开始,有时被称为“单步问题”。例如,ChatGPT的早期训练就采用了这种方法。下一节我们再讨论多步问题。
基本形式如下:我们有一个提示(prompt),例如“法国的首都是什么?”。Transformer模型会预测一个“完成”(completion)。它不预测提示本身的标记,而是预测其后的内容。例如,它可能预测“巴黎”,然后在下一个时间步预测序列结束标记。在大多数应用中,语言模型是完成句子,而不是从头生成。
因此,我们可以说:
- 动作
a:由完成部分的标记序列表示(例如,“巴黎”和“序列结束标记”)。通常,这可能是可变数量的标记。 - 状态
s:由提示或上下文表示。 - 策略
π_θ:我们的语言模型,它表示给定状态s下动作a的概率p(a|s)。由于动作包含多个标记,这个概率是各个标记生成概率的乘积。
这里有一个需要注意的关键点:现在存在两种“时间步”概念,这可能会造成混淆。
- 语言生成时间步:标记
x1, x2, x3...的生成顺序。 - RL时间步:对于RL算法而言,这实际上是一个单步(one-step)或老丨虎丨机(bandit)问题:智能体观察一个状态(提示),然后产生一个动作(完整的回答)。
对于RL目的,这里实际上只有一个时间步。我们定义了状态、动作和策略,现在可以定义目标:最大化策略的期望奖励,就像在常规RL中一样。这就构成了一个基本的单步RL问题。

使用策略梯度训练 🚀
让我们从最简单的RL算法——策略梯度开始。
我们的目标是最大化期望奖励 J(θ) = E_(a∼π_θ(·|s)) [R(s, a)]。
我们知道其梯度公式为(来自策略梯度课程):
∇_θ J(θ) = E_(a∼π_θ) [∇_θ log π_θ(a|s) * R(s, a)]
由于 π_θ(a|s) 是各个完成标记概率的乘积,log π_θ(a|s) 的梯度就是各个标记对数概率梯度之和。这与使用交叉熵损失进行反向传播时计算的梯度类型完全相同。
我们可以用样本来估计这个梯度:
- 标准强化学习估计器:从当前策略
π_θ中采样一个完成a,评估其奖励R(s, a),然后使用评分函数估计器。 - 重要性采样估计器:从另一个策略
π_bar(例如,旧的策略或监督训练得到的策略)中采样完成,然后使用重要性权重来为当前策略π_θ计算梯度估计。
以下是两种估计器的对比:
- 第一种是强化学习风格的估计器。
- 第二种是重要性加权估计器。
对于语言模型,重要性加权估计器要流行得多。你可以思考一下原因。
重要性加权估计器在语言模型中更受欢迎的原因是:从语言模型中采样需要相当长的时间,并且评估这些样本的奖励可能非常昂贵(例如需要人类反馈)。因此,我们非常不希望每次执行梯度更新时都生成新样本。
所以实际上,更常见的做法是:从语言模型中生成一批样本,评估这些样本的奖励,然后使用重要性采样估计器进行多次梯度更新,然后重复这个过程。
具体算法与循环 🔄
让我们具体化这个重要性采样估计。我们将其简写为 grad_hat。注意,它是关于参数 θ、旧策略 π_bar 和一组样本的函数。
一种可行的做法是:
- 为特定状态
s(实际上你会对许多状态进行此操作)采样一批完成(例如1000个)。 - 评估每个完成的奖励。
- 将
π_bar设置为生成这些样本的策略(即旧策略)。 - 进行一个内部循环(例如K次):
- 从这批样本中采样一个迷你批次(例如64个)。
- 在该迷你批次上,使用
grad_hat计算梯度并更新参数θ。
- 每隔一段时间,跳出内部循环,从更新后的模型
π_θ中生成新的样本,用新策略更新π_bar,然后重复整个过程。
这非常类似于经典的重要性采样策略梯度或PPO(*端策略优化)风格的循环。这是使用RL训练语言模型的一种非常流行的方法。

奖励从何而来?🏆
但这个循环中有一个大问题:奖励 R(s, a) 从哪里来?
例如,如果我们训练模型回答“法国的首都是什么?”这类问题,我们可能有一个包含标准答案的数据集。但我们的策略可能会生成不在数据集中的答案。我们需要一个奖励函数,能够评估任何可能答案的质量。
我们不仅需要知道“巴黎”是正确的(奖励+1),还需要能够评估“这是一个叫巴黎的城市”(基本正确但冗余,奖励+0.9)、“我不知道”(未提供信息,奖励-0.1)、“伦敦”(错误,奖励-1)甚至“你为什么问这么蠢的问题”(有害,奖励-10)。这是一个开放词汇的问题,因此我们需要一个非常强大的奖励模型。

我们通常将奖励模型 R_ψ 表示为一个神经网络(参数为 ψ)。

从人类偏好学习奖励函数 👥

我们如何训练这个奖励模型 R_ψ?
- 直接标注数值:收集可能的答案,让人类为每个答案分配一个数值分数,然后通过监督学习训练
R_ψ来预测这个分数。但为高度主观的答案分配精确数值对人类来说可能很困难。 - 学习人类偏好:对人类来说,比较两个答案通常更容易。例如,给定问题“法国的首都是什么?”,答案A是“巴黎”,答案B是“你为什么问这么蠢的问题”,人类可以轻松地说出更偏好A。
因此,我们可以利用这种偏好比较来训练奖励函数。我们不是训练网络直接预测数值,而是建模人类偏好一个答案胜过另一个的概率。
一个非常流行的选择是使用 Bradley-Terry 模型:
P(a1 ≻ a2 | s) = exp(R_ψ(s, a1)) / [exp(R_ψ(s, a1)) + exp(R_ψ(s, a2))]
其中,P(a1 ≻ a2 | s) 表示在状态 s 下,人类偏好答案 a1 胜过 a2 的概率。这个公式的直觉是:一个答案的奖励越高,它被偏好的概率就越大(按指数比例)。
现在,我们可以通过最大化人类表达偏好的对数似然来训练 R_ψ。这是一个明确的监督学习问题。这种方法可以扩展到两项以上的比较。
整体训练流程 📈
结合以上所有内容,一个完整的、从人类反馈中进行强化学习(RLHF)的流程如下:
- 监督微调:在高质量指令-回答对数据集上对预训练的语言模型进行监督微调,得到初始策略
π_θ。 - 收集偏好数据:对于数据集中的每个提示
s,从当前策略π_θ中采样K个可能的答案。让人类标注者对这些答案进行两两比较,指出他们更偏好哪一个。构建一个偏好数据集D。 - 训练奖励模型:使用偏好数据集
D和 Bradley-Terry 模型训练奖励模型R_ψ。 - RL策略优化:将奖励模型
R_ψ作为固定奖励函数,使用前面提到的重要性采样策略梯度方法(如PPO)来优化语言模型策略π_θ,以最大化期望奖励。这一步会进行多次梯度更新。 - 迭代:可选地,回到第2步,使用优化后的策略生成新的答案,收集更多人类偏好数据,并重复整个过程。
在实际中,由于人类标注成本高昂,第2步(收集偏好数据)通常只进行一次或少数几次。大部分RL优化(第4步)都基于最初收集的偏好数据训练得到的奖励模型。

关键挑战与解决方案 🛡️

这种流程面临几个主要挑战:

-
分布偏移与过度优化:当我们基于一个固定的奖励模型
R_ψ进行大量RL优化时,策略π_θ可能会逐渐偏离生成奖励模型训练时所看到的数据分布。这可能导致策略“利用”奖励模型的弱点,生成一些在R_ψ看来得分很高、但人类实际不喜欢的怪异答案。这种现象被称为过度优化。解决方案:在奖励函数中添加一个KL散度惩罚项,鼓励当前策略
π_θ不要过度偏离初始的监督微调模型π_ref。修改后的奖励变为:
R'(s, a) = R_ψ(s, a) - β * log(π_θ(a|s) / π_ref(a|s))
其中β是一个系数。这等价于在原始奖励上增加了β * KL(π_θ || π_ref)的惩罚。这能有效防止策略变得太“奇怪”。 -
奖励模型的能力:奖励模型
R_ψ本身需要非常强大和鲁棒,才能承受住RL策略的探索和优化压力。通常,奖励模型本身也是一个大型的、经过预训练的语言模型,并在顶部添加一个标量输出头进行微调。
总结 📚

本节课中,我们一起学习了如何将强化学习应用于语言模型:
- 我们将语言生成任务形式化为一个单步RL(Bandit)问题,其中状态是提示,动作是生成的文本完成。
- 我们可以使用策略梯度方法进行训练,并通常采用重要性采样估计器以提高样本效率。
- 奖励函数可以通过一个奖励模型
R_ψ来提供,该模型通常从人类偏好数据中学习得到,使用如 Bradley-Terry 模型来将偏好转化为数值奖励。 - 整个训练流程(RLHF)结合了监督微调、奖励模型训练和RL策略优化。
- 我们讨论了关键挑战:过度优化和奖励模型能力。通过在奖励中添加KL散度惩罚和使用强大、预训练的模型作为奖励模型基础,可以有效应对这些挑战。

这种方法构成了当今许多先进对话AI系统(如InstructGPT、ChatGPT)的核心训练范式。下一节,我们将探讨如何将这个问题扩展到多步决策场景。


强化学习基础教程 P9:马尔科夫决策过程与目标 🎯
在本节课中,我们将学习强化学习的核心数学框架——马尔科夫决策过程,并明确强化学习的目标。我们将从基本定义开始,逐步构建出完整的强化学习问题形式化描述。
定义与基本概念 📖

上一节我们介绍了模仿学习,本节中我们来看看强化学习的正式定义。让我们从一些核心术语开始。


首先,我们回顾一下策略的表示。策略表示为给定观测(或状态)下动作的分布,记作 π_θ(a_t | o_t) 或 π_θ(a_t | s_t)。其中,θ 代表策略的参数,在深度强化学习中通常是一个神经网络的参数。


需要理解的重要定义是状态 s_t、观测 o_t 和动作 a_t。观测和状态通过一个图形模型关联:观测是状态的随机函数,策略连接观测和动作,转移概率(动态)连接当前状态、动作与未来状态。
状态满足马尔科夫性质:未来状态 s_{t+1} 在给定当前状态 s_t 的条件下,与过去状态 s_{t-1} 独立。这是状态与观测的主要区别:状态必须满足马尔科夫性质,而观测可能不满足。


我们将讨论完全可观测(可访问状态)和部分可观测(仅可访问观测)两种情况。在部分可观测情况下,策略基于观测做出决策。
从模仿学习到强化学习 🔄
在模仿学习中,我们收集专家数据(观测-动作对),然后使用监督学习训练策略。本节中,我们将介绍强化学习的正式形式,它允许我们在没有专家数据的情况下训练策略。
为了实现这一点,我们需要定义策略的目标,这是通过奖励函数完成的。奖励函数 r(s_t, a_t) 是一个标量函数,它告诉我们哪些状态和动作组合更好。例如,在驾驶任务中,汽车在道路上快速行驶可能获得高奖励,而撞车则获得低奖励。

强化学习的目标不仅仅是立即获得高奖励,而是要选择能导致未来更高累积奖励的动作。这就是决策制定和强化学习的核心。

马尔科夫决策过程 🧩
状态、动作、奖励和转移概率共同定义了一个马尔科夫决策过程。让我们逐步构建其正式定义。
首先从马尔科夫链开始。马尔科夫链包含一个状态集合 S 和一个转移函数 T。转移函数 T 定义了从当前状态 s_t 转移到下一个状态 s_{t+1} 的条件概率:p(s_{t+1} | s_t)。在离散状态下,T 可以表示为一个矩阵。

马尔科夫链本身不包含决策。为了引入决策,我们将其扩展为马尔科夫决策过程。MDP 在马尔科夫链的基础上增加了:
- 动作空间 A:一个离散或连续的集合。
- 奖励函数 r:从状态和动作映射到实数的函数。

现在,转移概率依赖于当前状态和动作:p(s_{t+1} | s_t, a_t)。奖励函数定义了我们的目标。

为了处理部分可观测的情况,我们进一步定义部分可观测马尔科夫决策过程。POMDP 在 MDP 的基础上增加了:
- 观测空间 O
- 发射概率 e:p(o_t | s_t),描述给定状态下产生某个观测的概率。
在 POMDP 中,策略基于观测 o_t 做出决策,而无法直接访问真实状态 s_t。
强化学习的目标 🎯
现在我们已经定义了 MDP 和 POMDP,让我们为强化学习定义一个明确的目标。我们学习一个参数化的策略 π_θ(a_t | s_t)。
我们控制的过程如下:状态输入策略,策略输出动作,然后状态和动作输入转移概率(环境动态),产生下一个状态。
我们可以写出一个轨迹 τ = (s_1, a_1, s_2, a_2, ..., s_T) 的概率分布:
p_θ(τ) = p(s_1) ∏_{t=1}^{T} π_θ(a_t | s_t) p(s_{t+1} | s_t, a_t)
定义了轨迹分布后,强化学习的目标是找到策略参数 θ,以最大化轨迹上累积奖励的期望值:
J(θ) = E_{τ ∼ p_θ(τ)} [∑_{t=1}^{T} r(s_t, a_t)]

这个目标考虑了策略的随机性、环境动态以及初始状态分布。理解这个期望的含义至关重要:我们寻找的是能*均产生最高累积奖励的策略。
我们可以利用期望的线性性质,将目标重写为各时间步奖励期望的和:
J(θ) = ∑_{t=1}^{T} E_{(s_t, a_t) ∼ p_θ(s_t, a_t)} [r(s_t, a_t)]
这种形式在后续推导中非常有用。

无限时间范围与稳态分布 ♾️
上述目标假设了一个有限的时间范围 T。如何将其扩展到无限时间范围(T → ∞)?如果奖励总是正数,累积奖励之和可能会发散到无穷大。
一种处理方法是使用*均奖励公式:J(θ) = lim_{T→∞} (1/T) E_{τ} [∑_{t=1}^{T} r(s_t, a_t)]。
关键思路是考虑由状态和动作组成的增强马尔科夫链。在一定的遍历性和非周期性假设下,这个链的状态-动作边缘分布 p_θ(s_t, a_t) 会收敛到一个稳态分布 μ。稳态分布满足 μ = T * μ,其中 T 是增强链的转移算子。
当时间趋于无穷时,*均奖励目标将收敛于在稳态分布 μ 下的期望奖励:
J(θ) = E_{(s,a) ∼ μ} [r(s, a)]
这为无限时间范围的强化学习提供了一个定义良好的目标。
期望的*滑性:关键洞见 💡
理解强化学习算法的一个关键点是:强化学习是关于优化期望的。

即使原始的奖励函数 r(s, a) 本身是不连续、不可微甚至稀疏的(例如,赢棋得1分,输棋得0分),但当我们对参数化的概率分布 π_θ 取期望时,目标函数 J(θ) 在参数 θ 上可能是*滑且可微的。
考虑一个简单例子:动作是二元的(例如,“保持在路上”或“掉下路”),策略以概率 θ 选择“掉下路”。奖励是:掉下路得 -1,保持在路上得 +1。期望奖励为:
J(θ) = θ * (-1) + (1 - θ) * (+1) = 1 - 2θ
这个函数在 θ 上是完全光滑且可微的,尽管原始奖励函数是阶跃的。

这个性质至关重要,它解释了为什么我们可以使用基于梯度的优化方法(如梯度下降)来优化看似非光滑的强化学习目标。非光滑函数的期望,在光滑的概率分布下,其本身可以是光滑的。

本节课中我们一起学习了强化学习的数学基础。我们定义了马尔科夫决策过程及其部分可观测版本,明确了强化学习的目标是最大化累积奖励的期望。我们还探讨了如何将目标扩展到无限时间范围,并理解了优化期望值的关键*滑性原理,这为后续学习具体的强化学习算法奠定了坚实的基础。
课程 P90:CS 285 第21讲 - 序列模型与语言模型的强化学习 🧠🤖
在本节课中,我们将要学习如何将语言模型与多步强化学习相结合。我们将结合之前讨论过的部分可观察马尔可夫决策过程(POMDP)和语言模型的概念,探讨在多轮交互场景(如对话)中训练智能体的方法。
概述
我们将讨论一个被称为“视觉对话”的任务示例。这个任务涉及一个提问者(机器人)和一个回答者(环境的一部分)。回答者心中有一个特定的图像,提问者必须通过一系列问题来收集信息,最终猜出正确的图像。这是一个纯粹的语言任务,其多步骤性质使得它成为一个完整的强化学习问题。
多步交互与POMDP建模
上一节我们介绍了基于人类反馈的强化学习,但那通常只涉及单轮交互。在本节中,我们来看看多轮交互问题。
在这个视觉对话任务中:
- 动作是提问者选择的问题(即机器人说出的句子)。
- 观察是回答者给出的答案(即环境或模拟人类的回应)。
- 状态是过去所有观察和动作的历史序列。
- 奖励在对话结束时给出,取决于提问者是否猜对了答案。
这种设置回归到了完整的RL框架,因为智能体(提问者)需要策略性地提问以收集信息,而不是仅仅贪婪地寻求即时答案。这种多轮问题出现在许多场景中,例如对话系统、工具使用(如操作数据库或终端)以及文本冒险游戏。
训练方法的选择:策略梯度与基于价值的方法
我们如何训练策略来处理这种多步、部分可观察的问题呢?
策略梯度是训练多轮策略的有效方法,并且能够处理部分可观察性(通过将观察历史作为策略输入)。然而,一个主要挑战是:如果智能体需要与真人交互来收集样本,那么每次策略更新都需要进行新的对话,成本非常高昂。
基于价值的方法(如Q-learning)则提供了一个有吸引力的替代方案。它允许我们使用离线强化学习技术,利用现有的人类对话数据或过去的机器人部署数据进行训练,而无需持续与环境(人类)交互。因此,在本讲座的这部分,我们将重点讨论基于价值的方法。
关键设计选择:时间步的定义
对于基于价值的方法,一个关键的设计选择是如何定义时间步。这主要分为两种方向:
以下是两种主要的时间步定义方式及其特点:
-
语句级时间步
- 定义:将每一句完整的对话(一次发言)视为一个时间步。
- 动作空间:所有可能句子的集合,空间极大。
- 视界:相对较短(例如,10轮对话对应10个时间步)。
- 优点:最直观,类似于传统的RL环境设置。
- 挑战:动作空间巨大,难以直接进行最大化操作。
-
标记级时间步
- 定义:将生成或接收的每一个标记(token)视为一个时间步。
- 动作空间:词汇表中所有可能标记的集合,虽然大但是离散且可枚举。
- 视界:非常长(即使短对话也可能有数百或数千个标记)。
- 优点:动作空间简单,Q学习更新规则更接*监督式语言建模。
- 挑战:视界很长,需要处理更长的序列依赖。
文献中两种方法都有探索,目前没有单一的最佳标准。
基于价值的方法实现
语句级时间步的Q函数
假设我们处于对话的某个中间状态。我们需要为当前状态(即整个对话历史)和候选动作(即机器人可能说的下一句话)计算Q值。
一种常见的架构是:
- 使用一个序列模型(如预训练的语言模型)对状态历史
s_t进行编码,得到一个嵌入表示。 - 使用另一个(或同一个)序列模型对候选动作
a_t进行编码。 - 将这些嵌入输入一个学习到的函数,输出标量Q值。
这构成了评论家(Critic)。我们可以采用演员-评论家架构,训练一个单独的演员(Actor) 网络来最大化这个Q值。要找到最优动作,我们可以使用束搜索(Beam Search)或在监督训练的策略中采样,然后选择Q值最高的样本作为对 max 操作的*似。

标记级时间步的Q学习
在标记级设置中,过程更接*标准的语言模型。在每个时间步,模型为词汇表中的每个可能标记输出一个Q值,表示选择该标记作为下一个动作的长期价值。
训练时,对于数据集中出现的标记,其Q值目标可以通过贝尔曼方程计算:
Q_target = r + γ * max_{a'} Q(s', a')
其中,max 操作可以*似为对下一个时间步所有可能标记的Q值取最大值,或者使用数据集中实际出现的下一个标记的Q值。这本质上实现了标记级别的Q学习。


实践细节与算法示例
无论选择哪种时间步定义,标准的深度Q学习技巧都适用,例如使用目标网络、经验回放缓冲区和双Q学习。在离线RL设置中,还需要处理分布偏移问题,常用方法包括策略约束(在演员上使用KL散度惩罚)或对Q函数施加惩罚(如SQL或IQL风格)。
为了更具体地理解,以下是文献中的一些算法实例:
- 论文1:采用演员-评论家架构与策略约束(KL散度),使用情感分析作为奖励,时间步为语句级。
- 论文2:使用SQL风格的Q函数惩罚,通过从监督训练的语言模型中采样来*似
max操作,时间步为语句级。 - 论文3:结合IQL和CQL方法训练Q函数,通过采样并选取Q值最高的样本来决定动作,在视觉对话任务上评估,时间步为标记级。
这些论文展示了实现的具体选择,建议深入阅读以了解细节。

总结
本节课中,我们一起学习了如何将强化学习应用于多步语言交互任务(如对话)。
- 我们将此类任务建模为部分可观察马尔可夫决策过程(POMDP),使用对话历史作为状态表示。
- 关键设计选择在于定义时间步(语句级 vs. 标记级),两者各有优劣。
- 虽然任何RL方法原则上都适用,但基于价值的离线RL方法在实践中尤其具有吸引力,因为它能利用现有数据,减少与真实环境(如人类)的交互成本。
- 实现基于价值的方法时,需要构建以历史状态为输入的Q函数,并应用标准技巧(如目标网络)和离线正则化方法(如策略约束、SQL、IQL)。

目前,对于多步语言RL,尚未形成单一的最佳实践标准,这是一个活跃的研究领域。

课程 P91:迁移学习与元学习(第一部分)🚀

在本节课中,我们将要学习迁移学习和元学习的基本概念。我们将探讨如何利用从一个或多个源任务中获得的经验,来更高效地解决新的目标任务。这对于解决那些奖励信号稀疏或探索困难的任务(如《蒙特祖玛的复仇》)尤其重要。
动机:为什么需要迁移学习?🎮


上一节我们介绍了强化学习的基本框架,本节中我们来看看一个具体挑战:某些任务对人类来说很简单,但对算法却异常困难。
以《蒙特祖玛的复仇》游戏为例。对于人类玩家,我们凭借对世界的基本认知(如钥匙开门、骷髅危险)可以快速上手。然而,对于强化学习智能体,其奖励结构(捡钥匙、开门获得少量正奖励)并未提供明确的进步指导,导致学习效率极低。

迁移学习的目标,就是让智能体能够像人类一样,利用从其他任务(源域)中学到的“先验知识”,来加速在新任务(目标域)上的学习过程。

迁移学习基础定义 📚
在深入技术细节前,让我们先明确一些核心定义。

- 任务/马尔可夫决策过程:在强化学习语境下,一个任务通常指一个特定的MDP。
- 源域:用于获取初始经验、训练模型的MDP或MDP集合。
- 目标域:我们希望获得良好性能的新MDP。
- 迁移性能描述:
- 零样本迁移:在源域训练后,无需在目标域进行任何额外交互即可获得良好性能。
- 单样本/少样本迁移:在目标域进行极少次数的尝试(如一个回合)后获得良好性能。
- 多样本迁移:需要在目标域进行较多尝试。
迁移学习的核心目标是在目标域上获得高性能,无论其在源域上的表现如何。
迁移学习的主要框架 🧩

迁移学习问题没有单一的表述方式,它高度依赖于源域和目标域的特性。以下是几种常见的框架思路:
- 前向迁移:在源任务上训练策略或模型,然后直接应用于目标任务,或进行少量微调。这要求源域和目标域高度相似。
- 多任务迁移:在多个不同的源任务上同时训练,然后迁移到新的目标任务。由于目标域可能落在多个源域构成的“凸包”内,这种方法通常更鲁棒。
- 元学习:可以看作是迁移学习的逻辑延伸。其核心思想是“学会学习”,即在源域上以“能够快速适应新任务”为目标进行特殊训练,而不仅仅是追求在源任务上的最优性能。

本节课我们将主要探讨前向迁移和多任务迁移的基本思想,并将大部分时间留给更系统的元学习方法。
预训练与微调:挑战与技巧 🔧

在计算机视觉等领域,预训练-微调是标准流程。在RL中,我们也可以先在源域(如模拟器)预训练一个策略或价值函数,然后在目标域(如真实世界)微调。但这面临独特挑战:
- 领域漂移:源域和目标域的观测或动态不同。
- 探索不足:在源域训练出的确定性策略在目标域可能停止探索,导致微调缓慢。
应对领域漂移:不变性表示
一个常见假设是不变性假设:两个领域间的差异对于决策是无关的。例如,模拟驾驶和真实驾驶的图像风格不同,但道路结构、车辆位置等关键信息是相关的。
目标:找到一个特征表示 z = f(x),使得:
p(z)在源域和目标域中相同。- 给定
z预测动作或价值的分布p(y|z)与给定原始输入x的分布p(y|x)一致。
实现方法(领域对抗训练):
- 在神经网络中间层引入一个领域判别器
D_φ,试图区分特征z来自源域还是目标域。 - 同时训练特征提取器
f来“欺骗”判别器,使其无法区分,从而迫使z的分布变得域不变。 - 这通常通过梯度反转层来实现。


# 概念性代码:领域对抗损失
z = feature_extractor(x)
domain_pred = domain_classifier(z)
# 特征提取器的目标是最大化判别器的误差(即混淆域)
feature_loss = -log(domain_pred) # 假设标签为“目标域”
# 判别器的目标是正确分类域
classifier_loss = cross_entropy(domain_pred, true_domain_label)
注意:此方法需要一些目标域的样本(无需奖励或动作),且需警惕目标域数据质量(如坏数据)可能导致学到的表示忽略重要信息。


应对动态差异:行为不变性


当领域间的动态(物理规律)不同时,强行对齐表示可能不够。另一种思路是修改源域的奖励函数,惩罚那些在目标域中不可能发生的行为。

核心思想:在奖励函数中添加一项,鼓励智能体在源域中的行为看起来“像”在目标域中可能发生的行为。
实现方法:可以通过训练判别器来估计状态-动作对 (s, a) 或状态转移 (s, a, s‘) 在目标域中发生的概率,并将其与源域中的概率对比,差值作为额外的奖励信号。
促进有效微调:增加多样性

为避免预训练策略过于专一和缺乏探索性,可以在源域训练时采用鼓励多样性的技术:
- 无监督技能发现(如探索讲座中的方法):学习多样化的基本技能。
- 最大熵强化学习(如控制推断讲座中的方法):学习更随机、探索性更强的策略。

领域随机化:一种强大的前向迁移工具 🎲
如果可以对源域(如模拟器)进行控制,领域随机化是一种极其有效的前向迁移策略。
核心直觉:在训练期间,主动且大量地随机化源域的各种参数(如视觉纹理、物理属性、光照等)。这样训练出的策略会对这些变化变得鲁棒,从而更可能直接(零样本)迁移到未曾见过的真实目标域。

关键发现:
- 随机化通常不会显著牺牲在训练分布上的最优性能。
- 随机化一部分参数,常常能带来对未随机化参数的鲁棒性。这是因为不同物理效应之间存在耦合关系。


公式:在模拟器中,我们不是用一组固定参数 θ 训练,而是从一个分布 p(θ) 中采样参数进行训练。
for each episode:
env_params = sample_from_distribution(p(θ)) # 例如,随机质量、摩擦、纹理
agent.interact(env_with_params)
这种方法在机器人学中尤为盛行,用于将模拟中训练的策略迁移到真实硬件上。

多任务迁移学习 🤖
多任务迁移的基本思想直观而强大:通过同时学习多个相关任务,智能体可以学习到更通用、更可迁移的表示和技能。

实现方式:通常通过训练一个上下文策略 来实现。
- 策略形式:
π(a | s, ω),其中ω是任务上下文(如one-hot编码、目标状态、文本描述)。 - MDP框架:这等价于定义一个更大的MDP,其初始状态分布
p(s0, ω)会共同采样初始状态和任务标识ω,之后在该回合中ω保持不变。
一种特例:目标条件策略
- 上下文
ω是一个目标状态g。 - 奖励函数鼓励接*或达到
g。 - 优势:可以零样本迁移到新的目标状态。
- 挑战:训练稳定性和效率,且并非所有任务都适合用目标达成来定义。
总结与下节预告 📝

本节课我们一起学习了迁移学习与元学习的动机和基础框架。我们探讨了:
- 迁移学习的核心定义与分类(前向、多任务、元学习)。
- 预训练-微调范式中面临的挑战(领域漂移、探索不足)及应对技巧(领域对抗训练、奖励塑形)。
- 领域随机化作为一种强大的零样本迁移技术。
- 多任务学习及上下文策略(特别是目标条件策略)的基本思想。

这些方法为利用先验知识解决新任务提供了工具箱。然而,许多前向迁移方法依赖于源域和目标域的相似性。在下节课中,我们将深入探讨元学习,这是一种更系统、旨在“学会学习”的范式,它将适应新任务的过程本身作为优化目标,从而能够实现更快速、更高效的少样本迁移。敬请期待!
课程 P92:元学习基础 🧠
在本节课中,我们将学习元学习的基本概念。元学习是多任务学习的一种扩展,其核心目标是“学会如何学习”,即利用从多个任务中获取的经验,来加速学习新任务的过程。这对于样本效率较低的领域(如深度强化学习)尤为重要。
什么是元学习?🤔
上一节我们介绍了多任务学习,本节中我们来看看它的逻辑扩展——元学习。元学习不是简单地学习解决多个任务,而是旨在利用多个任务来学习一个更高效的学习过程本身。
核心思想:如果你已经学习过一百个任务,你是否能更有效地学习第一百零一个任务?元学习正是基于这个想法,它试图从多个任务中归纳出学习过程本身的规律,从而极大地加速对新任务的掌握。
在实际应用中,元学习与多任务学习关系密切,但形式多样。这些不同的形式化方法可以归纳在同一个框架下。
以下是元学习可能涉及的几种不同形式:
- 学习一个优化器。
- 在循环神经网络(RNN)中学习,使其能读取大量经验后解决新任务。
- 学习一种能快速适应新任务的表示或初始化方式。
尽管这些看起来是非常不同的事情,但它们实际上可以在同一个基本算法框架下实例化。许多不同的元学习技术,在深入细节后,会发现它们只是对相同基本框架的不同架构设计选择。


为什么需要元学习?🚀
深度强化学习,尤其是无模型方法,通常需要巨大的样本数量。因此,如果能学会一个更快的“强化学习者”,就能高效地学习新任务。

那么,一个元学习后的强化学习方法可能会有何不同呢?
以下是它可能具备的优势:
- 更智能的探索:解决先前任务的经验可以告诉它如何结构化其探索策略,以快速获取新任务。它可能会避免尝试那些它“知道”是无用的动作。
- 更快地获取所需特征:网络可以被训练成能够快速修改其特征表示,以适应新的任务。

监督学习中的元学习设置 📚
为了帮助理解,我们先从一个更简单的监督学习场景来描述元学习的基本“配方”。这个配方能解开很多关于元学习的疑问。
下图来自Ravi和Larochelle在2017年的论文,解释了元学习如何用于图像识别。虽然图像识别与强化学习不同,但我们将看到相似的原则在强化学习中同样适用。

在常规监督学习中,我们有一个训练集和一个测试集。在元学习中,我们有一个元训练集和一个元测试集。
- 元训练:用于元学习过程的数据集,相当于“源领域”。
- 元测试:当我们得到新任务时将看到的情况,相当于“目标领域”。
在元训练期间,每个任务(或称为一个“情节”)都包含自己的训练集和测试集。例如,在每个任务中,我们可能有五个类别,但这些类别在不同任务中代表不同事物。
任务1示例:
- 训练集:类别0(鸟)、类别1(蘑菇)、类别2(狗)、类别3(人)、类别4(钢琴)的图片。
- 测试集:包含狗和钢琴的图片。

任务2示例:
- 训练集:类别0(体操运动员)、类别1(风景)、类别2(坦克)、类别3(炮筒)等的图片。
- 测试集:包含对应类别的测试图片。
这些任务可以手动设计或随机生成。核心思想是:模型将查看许多这样的不同训练集,并利用其对应的测试集进行“元训练”。训练出的模型应该能够接收一个包含全新类别的训练集(在元测试时给出),并在其对应的测试集上表现良好。
形式化描述:从函数视角看 🔧
上一节我们看了具体设置,本节中我们从函数视角进行形式化描述。
常规监督学习可以看作一个函数 \(f\),它接受输入 \(x\)(如图片)并产生预测 \(y\)(如标签):
y = f(x)

监督式元学习则可以看作一个函数 \(F\),它接受整个训练集 \(D_{train}\) 和一个测试输入 \(x\),并预测该测试输入的标签 \(y\):
y = F(D_train, x)
两者区别并不大,只是元学习的函数需要具备“读取”整个训练集的能力。要实例化这个函数 \(F\),需要解决如何读取训练集的问题。像循环神经网络(RNN)或Transformer这样的架构在此问题上效果很好。
你可以想象一个RNN:
- 按顺序读取训练集中的样本对 \((x_1, y_1), (x_2, y_2), ..., (x_N, y_N)\)。
- 然后读取测试输入 \(x_{test}\)。
- 最后预测测试标签 \(y_{test}\)。
这就是所谓的“少样本”学习设置:模型基于一个小的训练集(N个样本),对一个测试输入做出预测。

元学习究竟在学什么?🎯
既然元学习是“学习如何学习”,那么它学习的对象到底是什么?学到的这个“东西”又如何在目标领域部署?
让我们尝试理解这个过程。想象一个通用的学习示意图:
-
通用学习:你有一些模型参数 \(\theta\)。你通过最小化训练集 \(D\) 上的损失函数 \(L\) 来找到最优参数 \(\phi\)。我们将这个过程称为学习算法 \(f_{learn}\):
φ = f_learn(D; θ)
这里,\(\theta\) 是学习算法本身的(可能固定的)参数或结构。 -
通用元学习:元学习的目标是找到一个更好的学习算法 \(f_{learn}\)。我们引入元参数 \(\Theta\) 来参数化这个学习算法,记作 \(f_\Theta\)。元学习的过程就是优化 \(\Theta\),使得由 \(f_\Theta\) 在训练集 \(D_{train}\) 上产生的参数 \(\phi\),在测试集 \(D_{test}\) 上表现良好(损失 \(L\) 最小):
Θ* = argmin_Θ L_test( φ ) where φ = f_Θ(D_train)
这是一种“二次”优化:我们训练 \(f_\Theta\)(元学习器),使得它的输出(学习到的任务参数 \(\phi\))在测试时效果好。此时,\(f_{\Theta^*}\) 就成了我们学到的、更优的学习过程。
以RNN元学习器为例:
- \(f_\Theta\) 是RNN中读取训练集的部分。元参数 \(\Theta\) 就是这个RNN的参数。
- 当RNN读取任务 \(i\) 的训练集时,会产生隐藏状态 \(h_i\)。
- 这个隐藏状态 \(h_i\) 被传递给一个小的分类器(有自己的参数 \(\theta_p\))。该分类器以 \(h_i\) 和测试图像 \(x\) 为输入,产生预测 \(y\)。
- 因此,对于这个任务,学到的任务特定参数 \(\phi_i\) 实际上是 隐藏状态 \(h_i\) 和分类器参数 \(\theta_p\) 的组合。
在这种设计下,学习新任务(在元测试时)的过程非常简单:只需将新任务的训练集输入训练好的RNN编码器,运行前向传播得到隐藏状态 \(h_{new}\),然后将其输入顶部分类器即可得到预测。分类器参数 \(\theta_p\) 在元训练后是固定的,不会针对新任务调整。

回顾RNN元学习器的工作流程:
- 元训练:训练RNN编码器和顶部分类器的所有参数。RNN学习如何从训练序列中编码有用信息到隐藏状态 \(h\)。
- 元测试(适应新任务):
- 获得新任务的训练集 \(D_{train}^{new}\)。
- 用训练好的RNN编码器处理 \(D_{train}^{new}\),得到新的隐藏状态 \(h_{new}\)。
- 将 \(h_{new}\) 与固定的顶部分类器参数结合。
- 对测试图像进行预测。
这实际上用一种复杂的方式解释了一个简单的操作:在实践中,你通常只需要对新的训练集和测试输入运行一次RNN前向传播,就能得到答案。
总结 📝
本节课中,我们一起学习了元学习的基础知识:
- 定义:元学习是“学会如何学习”,旨在利用多任务经验来加速新任务的学习。
- 动机:特别是在样本效率低的领域(如强化学习),元学习能实现更智能的探索和更快的特征适应。
- 设置:通过监督学习中的“少样本”分类任务,我们了解了元训练与元测试的区别,以及任务(情节)的构造方式。
- 形式化:元学习可以看作学习一个能读取整个训练集并做出预测的函数 \(F(D_{train}, x)\)。其核心是优化一个元学习器 \(f_\Theta\),使得它产生的任务参数 \(\phi\) 在测试集上表现优异。
- 实例:以RNN为基础的元学习器为例,我们剖析了元参数 \(\Theta\)、任务参数 \(\phi\) 的具体含义,以及元训练和元测试的全过程。

理解这个基础框架是后续探索更复杂的元学习算法(包括在强化学习中的应用)的关键。
课程 P93:元强化学习 🧠
在本节课中,我们将学习如何将元学习的核心思想应用到强化学习领域,即元强化学习。我们将从常规强化学习与元强化学习的对比开始,逐步理解其定义、实现方式以及如何通过循环神经网络等架构来实现它。
常规强化学习 vs. 元强化学习
上一节我们介绍了元学习的通用框架,本节中我们来看看如何将其迁移到强化学习中。
常规强化学习是在一个给定的马尔可夫决策过程(MDP)上,通过优化策略参数 πθ 来最大化期望奖励。这可以看作是一个学习函数,它作用于 MDP。
元强化学习则可以被视为最大化策略的期望奖励,但策略的参数 φi 是由一个更高级别的学习函数 Fθ 生成的。这个函数 Fθ 会读取一个 MDP(或在该 MDP 上收集的经验),并输出适用于该 MDP 的策略参数。
公式化表示:
- 常规强化学习:
max E[R | πθ, MDP] - 元强化学习:
max E[R | πφi, MDP_test],其中φi = Fθ(MDP_train_i)


为了使元学习有效,我们假设用于元训练的所有 MDPs 都来自同一个分布 p(M)。在测试时,我们会遇到一个来自同一分布的新 MDP(M_test),并将学习到的函数 Fθ 应用于它,以获得适应新任务的最优策略。
元强化学习与上下文策略的关系
元强化学习与上下文策略密切相关。理解这种关系是掌握元强化学习的关键。
元强化学习本质上是在训练一个策略,该策略的决策依赖于智能体在测试 MDP 中收集到的全部经验历史。函数 Fθ 所做的工作,就是读取这些经验,将其总结为一些统计量(即上下文 z 或 φi),然后用这些信息来决定策略的行为。
因此,一个依赖于整个经验历史的策略,就等同于一个元学习器。主要的区别在于,在元学习中,任务上下文不是直接给定的(例如“洗碗”或“擦桌子”),而是需要智能体通过与环境交互来自行推断的。

实现元强化学习:一个简单的架构

那么,如何具体实现函数 Fθ 呢?让我们来看一个最直观的方法。
实现 Fθ 的核心是构建一个编码器,它能读取在 MDP Mi 中的所有经验,并据此改进策略。一个最简单的版本是使用循环神经网络。
以下是该架构的工作流程:
- 经验编码:RNN 按顺序读取在 MDP 中收集到的所有转移数据
(s1, a1, r1, s2), (s2, a2, r2, s3), ...。这些数据可以跨越多个回合(episode)。 - 上下文生成:RNN 的隐藏状态
hi逐步累积,最终形成一个汇总了所有历史经验的上下文向量。 - 策略决策:这个隐藏状态
hi会和当前状态st一起,输入到一个策略网络(或称“策略头”)中,共同决定当前应采取的动作at。
代码概念描述:
# 伪代码示意
hidden_state = rnn_encoder.initial_state()
for (s, a, r, s_next) in experience_history:
hidden_state = rnn_encoder(hidden_state, (s, a, r, s_next))
context = hidden_state
action = policy_head(context, current_state)
在这里,需要训练的参数 θ 包括 RNN 编码器和策略头的所有权重。在元测试时,我们只需在新的 MDP 上运行这个已训练好的网络,它就会自动通过积累的经验来适应新任务。

探索是如何被学习的?
你可能会问,这种架构如何学会在新任务中有效地探索?关键在于我们将多个任务回合(episode)串联成了一个长的“元回合”(meta-episode)。
考虑一个老鼠找奶酪的例子:
- 在第一个回合中,老鼠向右走,没找到奶酪(奖励为0)。
- RNN 记住了这个结果。
- 在第二个回合开始时,RNN 的隐藏状态没有被重置,它仍然记得“向右走没有奖励”。
- 因此,在第二个回合中,策略可能会尝试不同的方向(例如向上或向左),从而学会了探索。
通过优化在整个元回合(包含多个子回合)上获得的总奖励,标准的强化学习算法(如策略梯度)会自动学会在早期回合中进行探索,以获取信息,从而在后续回合中获得更高奖励。探索问题被转化为了一个更高级别的序列决策问题。

架构变体与发展
基本的 RNN 架构通过拼接历史来工作,但研究者们已经提出了多种更强大的架构。
以下是几种主要的架构变体:

- 注意力机制与时间卷积:可以更灵活地权衡不同时间步经验的重要性。
- 并行编码器:同时处理多个回合的经验。
- Transformer:*年来,基于自注意力机制的 Transformer 模型因其强大的序列建模能力,已成为实现元强化学习编码器的前沿选择。

如果你想深入了解这些架构,可以查阅相关的研究论文。

总结

本节课中我们一起学习了元强化学习。我们从定义出发,理解了它是常规强化学习在“学习如何学习”层面上的扩展。我们探讨了其与上下文策略的等价关系,并介绍了一个通过循环神经网络实现的基础架构。这个架构能够通过读取完整的历史经验来自动适应新任务并学习探索策略。最后,我们简要了解了该领域更先进的架构变体。掌握元强化学习,为你设计能快速适应新环境的智能体提供了强大的工具。
课程 P94:CS 285 第 22 讲第 4 部分:迁移学习与元学习 🚀
在本节课中,我们将要学习基于梯度的元学习在强化学习中的应用。我们将探讨如何通过优化初始参数,使得模型能够通过少量梯度步骤快速适应新任务。

上一节我们介绍了元学习的基本框架。本节中,我们来看看如何将梯度下降过程本身融入到元学习的架构中。
基于梯度的元学习核心思想是:如果我们能学习到更好的特征或初始参数,那么在新任务上进行学习(微调)的速度就会更快。我们可以通过元训练来优化这些初始参数,使得后续的梯度更新能更有效地提升新任务的性能。
这可以形式化地表达为:我们寻找一组初始参数 θ,使得在每个新任务 i 上执行一次(或多次)梯度更新后,得到的参数 θ' 能在该任务上获得高奖励。对于单步梯度更新,其公式为:
θ' = θ + α * ∇_θ J_i(θ)
其中,J_i(θ) 是任务 i 的目标函数(如期望奖励),α 是学习率。
以下是模型无关元学习(Model-Agnostic Meta-Learning, MAML)的基本思路:
MAML 是一种元学习方法,其学习器 f_θ 的结构模仿了基础学习算法(如策略梯度)的更新过程。在监督学习中,这非常直接,可以视为一个包含内部梯度计算的计算图。在强化学习中,虽然计算涉及策略梯度的二阶导数,实现起来更复杂,但原理是相通的。
为了更直观地理解,我们可以通过一个参数空间的可视化来思考:
假设参数空间中存在每个任务的最优解 θ*_i。MAML 的目标是找到一个初始参数 θ,使得从这个点出发,朝任意任务 i 的最优方向仅需一个(或少数几个)梯度步就能到达其附*区域。这要求 θ 位于所有任务最优解分布的“中心”位置。
在实际应用中,MAML 展现出一个优势:在元测试阶段,你可以执行比元训练时更多的梯度步骤,模型依然能良好泛化。这是因为学习过程被编码在了梯度更新的架构中,而不像某些基于 RNN 的元学习器,其“学习”仅发生在单次前向传播中。
例如,在一个训练蚂蚁向不同方向奔跑的任务分布上,经过 MAML 元训练的策略,其初始参数可能使蚂蚁原地跑动。但当给予一个“向前跑”任务的梯度信号并更新一次后,策略就能让蚂蚁向前跑;同理,给予“向后跑”的梯度信号更新后,蚂蚁就能向后跑。


如果你想深入了解基于梯度的元学习,特别是其在策略梯度中的实现,可以参考以下方向的论文:
- 描述各种策略梯度二阶导数估计器的论文。
- 讨论如何利用 MAML 改进探索的论文。
- 描述混合优化算法(不一定完全基于梯度,但优化初始化参数的思想类似)的论文。


本节课中,我们一起学习了基于梯度的元学习,特别是模型无关元学习(MAML)的核心思想。其关键是将基础学习算法(如梯度下降)的更新步骤作为元学习器的一部分进行优化,从而获得能快速适应新任务的、泛化性良好的初始参数。
课程 P95:元强化学习与部分可观测马尔可夫决策过程 🔄
在本节课中,我们将探讨元强化学习(Meta-RL)与部分可观测马尔可夫决策过程(POMDP)之间的深刻联系。我们将看到,元强化学习问题可以被重新表述为一个特殊的POMDP,这为我们提供了一种统一不同元学习方法的视角,并引出了新的算法设计思路。
元强化学习作为POMDP 🧩
上一节我们讨论了元学习的基本概念。本节中我们来看看元强化学习如何被形式化为一个部分可观测的马尔可夫决策过程。
一个部分可观测的马尔可夫决策过程(POMDP)是一个具有观察空间和观察概率的MDP。除了状态和动作,它还有一个观察空间 O 和观察概率 P(o|s),即在给定状态下观察到特定观察的概率。
在POMDP中,策略必须基于观察来行动。这通常需要显式的状态估计(即一个函数来估计给定观察历史的 p(s_t)),或者需要一个具有记忆的策略。
任务推断与隐变量Z 🔍
在元强化学习的背景下,我们假设有一个策略 π_θ(a|s, z),其中 z 是一个代表策略解决当前任务所需信息的变量。学习任务就相当于推断出 z 是什么。
例如,在上下文策略中,z 可能代表“是时候洗衣服了”或“是时候洗碗了”。弄清楚该做什么就相当于推断出 z。在元学习中,你需要从“语境”(即在新MDP中积累的一系列经验转移)中推断出这个 z。
这实际上定义了一个特殊的POMDP。其中,z 是你不知道但需要从一系列观察中找出的隐变量。一旦你弄清楚了 z,你就可以在已知MDP状态的情况下完成任务。
我们可以定义一个修改后的POMDP M',其状态空间为 S' = (s, z),观察空间为 O' = s(通常奖励 r 也可以被拼接进观察中)。解决这个POMDP M' 就等价于进行元学习,因为如果你能在这个POMDP中获得高奖励(你观察状态 s,但任务 z 未知),那么你就能解决一个新任务。
解决POMDP的两种策略类别 ⚙️
解决任务未知的POMDP通常有两种方法:使用具有记忆的策略(如RNN元学习器)或进行显式的状态估计。接下来,我们将重点讨论后一种方法,它直接导致了一类具有有趣特性的元学习算法。

这类算法旨在直接估计给定状态、动作和奖励历史时,隐变量 z 的后验概率 p(z_t | history)。由于 z 是隐变量,我们将使用变分推断进行训练,以获得任务的学习表示。然后,我们可以通过后验采样(从后验信念中采样 z,并根据该 z 采取行动)来进行探索。
以下是该过程的基本步骤:
- 从基于历史的*似后验中采样 z。
- 根据策略 π_θ(a|s, z) 行动,仿佛 z 是正确的。
- 收集更多数据,并重复此过程。
元训练将包括训练策略 π_θ 和训练对 z 的变分*似估计器。虽然基于后验采样的探索在理论上和实践上都相当有效,但它并非最优策略。原因在于,它可能不会主动地、系统性地探索以快速缩小任务的不确定性。
实例:PEARL 算法示例 🧪
为了使讨论更具体,我们来看一个基于上述思想的算法实例:PEARL(Probabilistic Embeddings for Actor-Critic RL)。
PEARL 训练一个依赖于状态 s 和隐变量 z 的策略 π_θ(a|s, z)。同时,它训练一个推断网络(编码器)来基于状态、动作和奖励的历史预测 z 的后验分布。整个系统通过变分推断进行训练。

其目标是最大化在轨迹分布和编码器推断出的 z 分布下的期望奖励,同时最小化 z 的后验分布 q(z) 与一个简单先验分布(如标准正态分布)之间的KL散度。这鼓励 z 仅包含完成任务所需的最少信息。
概念上,这非常类似于基于RNN的元RL:读取历史,预测某种统计量(此处是随机变量 z),将该统计量传递给策略,并最大化策略的奖励。不同之处在于,编码器是随机的,并且推断的是隐变量 z,通过从编码器中采样可以实现探索。
一个简单的编码器设计是:将每个转移 (s, a, r, s') 通过一个神经网络映射为特征向量,然后对所有历史转移的特征向量取*均。这个*均后的特征向量再通过一个网络来输出后验分布 q(z) 的均值和方差。这种方法非常有效,因为对于许多任务,转换的顺序可能并不重要。


元训练可以使用离线策略的演员-评论家算法(如SAC)进行。唯一的区别是,每次更新时,还需要从经验回放缓冲区中加载一段历史数据来更新编码器。

三种视角的统一与比较 🤝

我们已经讨论了元强化学习的三种主要视角,它们都能很好地统一在同一个框架下。
在所有方法中,核心都是一个函数 f(θ),它接受一个MDP M_i(或其经验)作为输入,需要从这些经验中改进,并能够选择有效探索的行动。
以下是三种视角的比较:
-
黑箱模型视角(如RNN):
- 优点:概念简单,易于应用。
- 缺点:容易“元过拟合”,即训练后难以在测试任务上进一步改进;优化可能具有挑战性。
-
基于梯度的元学习视角:
- 优点:具有良好的外推性,只需在测试时运行更多梯度步骤即可持续改进;概念优雅。
- 缺点:实现可能复杂,需要大量元训练样本;将其扩展到时间差分学习类方法(如演员-评论家)较为困难。

- 推断视角(如PEARL):
- 优点:简单,提供了一种有效的后验采样探索方法,可优雅地归结为求解POMDP。
- 缺点:可能对元过拟合敏感;优化实践可能有一定挑战性。
实际上,这些视角是紧密相关的。推断过程类似于带有随机隐变量的RNN过程。基于梯度的方法也可以通过特定的架构选择(例如,在梯度中添加噪声)来实例化,使其开始类似于推断过程。

元学习引发的涌现现象 🌟
最后,一个有趣的观察是,元强化学习可以导致一些“涌现”的学习过程,这些过程与最初用于元学习的基础算法不同。这发生在强化学习与认知科学的交叉点。
研究表明,元学习可以引发出类似于“情景记忆”的学习(快速回忆过去成功的经验)、从模型无关学习中涌现出基于模型的行为,甚至是类似因果推理的能力。这表明,一个通用的“学习如何学习”的框架,可能会在内部衍生出多种多样的、适应特定情况的学习策略。

总结 📚

本节课我们一起学习了元强化学习与部分可观测马尔可夫决策过程之间的深刻联系。我们了解到,将元RL问题视为一个POMDP,其中隐变量 z 代表任务,为我们提供了一种强大的形式化方法。基于此,我们探讨了通过显式状态估计(变分推断)来解决此类POMDP的方法,并以PEARL算法为例进行了具体说明。最后,我们比较了元RL的三种主要视角(黑箱、梯度、推断),并看到了它们内在的统一性,以及元学习如何可能催生复杂的涌现学习行为。理解这些联系有助于我们更深入地把握元学习的本质,并设计出更强大的算法。
课程 P96:深度强化学习的挑战与开放问题 🧠
在本节课中,我们将回顾深度强化学习(RL)的核心方法,并深入探讨其面临的主要挑战与开放问题。我们将从算法稳定性、样本效率等核心挑战开始,进而讨论泛化能力、监督来源等实际应用中的假设问题。
课程内容回顾 📚
上一节我们简要回顾了课程中覆盖的材料。本节中,我们来看看这些方法如何相互关联,并绘制一张方法地图。
基于学习的控制是我们的核心目标,它主要包括两类方法:
- 模仿学习方法:从演示中学习。
- 强化学习方法:从奖励中学习。
强化学习方法内部又包含多个分支:
- 经典无模型RL算法:如策略梯度、基于价值的方法。
- 演员-评论家方法:结合了价值与策略梯度,例如深度Q学习(DQN)、SAC、TRPO、PPO。
- 基于模型的强化学习:将学习模型与规划或RL算法(如策略梯度)相结合。
此外,还有一些垂直贯穿不同RL方法的概念,例如探索策略、无监督RL目标(如技能发现),以及概率推断等有用工具。
核心算法挑战 ⚙️
在回顾了方法框架后,我们来看看深度RL面临的核心算法挑战。这些挑战源于RL需要在没有明确监督的情况下,通过自我收集的数据来发现最优行为。
以下是主要的算法挑战:
-
稳定性与超参数调整
- RL算法比监督学习对超参数(如探索率、学习率)更敏感,微小的变化可能导致性能大幅下降。
- 对于基于价值的方法(如Q学习),函数逼*缺乏理论上的收敛保证,需要依赖目标网络、经验回放等技巧来稳定训练。
- 一个开放问题是:使监督深度学习成功的“魔力”(如使用大型网络、随机梯度下降的正则化效果)是否同样适用于基于价值的RL方法。
-
高方差
- 对于策略梯度方法,其优势通常是无偏估计,但代价是高方差。这可能导致需要大量样本,并且在某些情况下方差会灾难性地增大。
- 实践中需要仔细调整批量大小、学习率,并设计有效的基线来降低方差。
-
模型利用与错误
- 对于基于模型的RL,模型学习本身是监督学习问题,但整体仍是迭代过程。
- 挑战在于:更准确的模型并不总是带来更好的策略。策略可能学会利用模型的弱点,在模型预测错误的地方做出看似有利的决策。
- 并非所有模型错误的影响都相同,这增加了问题的复杂性。
样本效率与泛化能力 📈
上一节我们讨论了算法的核心挑战,本节中我们来看看这些挑战如何影响算法的实际应用,特别是样本效率和泛化能力。

不同方法的样本效率大致可以按以下层次排序(从低到高):
- 无梯度方法(如进化策略):效率最低。
- 完全在线策略方法(如REINFORCE)。
- 批处理策略梯度方法(如TRPO、PPO)。
- 使用经验回放的离线策略方法(如DQN、SAC)。
- 基于模型的深度RL方法。
- 浅层基于模型的方法(如PILCO):通常最有效,但适用性可能受限。
效率的提升可能是数量级的。例如,一个简单的机器人跑步任务,使用离线策略方法可能只需几小时(真实时间),而基于模型的方法可能更快。
为什么样本效率重要?
- 它决定了训练所需的时间和计算资源。
- 低效的方法使得在真实世界或使用高保真但缓慢的模拟器中进行训练变得不切实际。




泛化与广度
- 当前深度RL评估常侧重于在特定环境下的优化性能,而非泛化能力。
- 现实应用需要策略能处理多样化的场景(不同地形、任务)。
- 简单地扩大模拟规模来覆盖所有情况面临巨大挑战,包括场景定义、数据收集和算法设计。
- 这引出了对更适合大规模机器学习工作流程的RL方法的需求,例如离线强化学习,它允许重复利用历史数据而不必总是重新交互。




现实世界的假设与监督来源 🌍


在讨论了算法本身的挑战后,我们转向将RL应用于现实世界时遇到的假设问题。RL的核心假设(如可访问的奖励函数、交互环境)在实践中可能难以满足。





监督从何而来?
RL的监督定义了“做什么”,其来源是一个关键问题:
- 奖励函数:直接指定目标,但为复杂任务设计合适的奖励函数非常困难(例如,“倒一杯水”)。
- 演示:通过逆向强化学习从专家行为中推断目标。
- 偏好比较:通过人类对行为结果的偏好来学习目标,这在训练语言模型对齐人类偏好时被广泛使用。
- 语言指令:利用自然语言描述任务。
- 自动技能发现:自动生成多样化的子任务,以帮助后续泛化。
监督的*衡
我们需要在监督的“程度”上找到*衡:
- “做什么” vs “如何做”:奖励函数原则上只指定目标,但良好设计的奖励也隐含了“如何做”的提示。
- 过于宽泛的监督(如“让公司赚钱”)可能使学习问题过于困难。
- 过于具体的监督(如严格模仿演示)可能扼杀智能体发现新颖、优化解决方案的能力。
因此,有时需要重新思考问题表述本身,甚至发明不严格遵循标准RL假设的新问题框架。这是一个活跃的开放研究领域。

总结与展望 🎯

本节课我们一起回顾了深度强化学习的知识体系,并深入探讨了其面临的多重挑战。

我们首先梳理了模仿学习、无模型RL和基于模型的RL等方法脉络。然后,我们分析了稳定性、高方差和模型利用等核心算法挑战。接着,我们讨论了样本效率的层次以及泛化能力对实际应用的重要性。最后,我们审视了RL在现实世界中的假设限制,探讨了奖励函数、演示、偏好等多种监督来源及其*衡。

深度强化学习是一个强大但复杂的工具。成功应用它不仅需要理解算法原理,更需要仔细考量所解决问题的具体特性,选择合适的算法框架,并创造性地处理数据、监督和泛化等实际问题。希望本课程为你继续探索这一领域奠定了坚实的基础。
课程 P97:深度强化学习的挑战与开放问题 🧠
在本节课中,我们将提升视角,探讨深度强化学习(RL)的本质及其不同的哲学观点。我们将讨论RL作为工程工具、作为现实世界学习模型以及作为最普遍学习框架的三种视角,并分析每种视角带来的挑战与机遇。课程最后,我们将思考如何将这些宏观视角应用于具体的研究和实践。
强化学习的三种哲学视角
在之前的课程中,我们隐含地探讨了强化学习的各种应用。现在,让我们明确指出,强化学习可以被视为几种非常不同的事物,具体取决于你的视角。以下我们将讨论三种主要视角,但请记住,可能还有更多。
视角一:强化学习作为工程工具 🔧
上一节我们介绍了强化学习的多种可能性,本节中我们来看看它最实际的应用之一:作为解决工程问题的工具。
在这个视角下,我们暂时搁置关于通用智能的崇高理想,将强化学习视为一个强大的优化引擎。传统上,解决如火箭轨迹优化等控制问题,需要写下复杂的物理方程并进行求解。强化学习提供了一种替代方法:我们实现描述系统的模拟器代码,然后使用RL来找出控制策略。
核心过程可以概括为:
- 用代码实现物理系统的模拟器。
- 在模拟器中运行强化学习算法。
- RL算法输出控制策略,取代了传统手动推导的过程。
从这个角度看,RL主要是一个将模拟器转化为控制法的“反馈引擎”。它的优势在于能处理非常复杂的系统,其弱点则是仍然需要有人精确地描述和模拟该系统。这甚至算不上严格意义上的“学习”,更像是一种强大的优化工具。
这种工具视角已催生了许多进展,例如让四足机器人在崎岖地形上高效行走。未来,RL很可能成为为我们能模拟的任何系统(飞机、车辆、机器人)构建控制器的标准工具。
视角二:强化学习作为现实世界学习模型 🌍
从工程工具视角转换过来,我们进入一个更贴*生物学习的视角:RL作为智能体在现实世界中通过试错发现行为的方式。
这个视角的核心挑战由“莫拉维克悖论”提出。该悖论指出:对人类而言困难的事情(如下象棋、抽象思考)对计算机来说可能相对容易;而人类觉得不费吹灰之力的事情(如移动身体、感知世界)对计算机来说却极其困难。这是因为进化压力迫使我们在感知和运动控制上变得极其出色。
这意味着什么?
现实世界之所以困难,在于其巨大的多样性和不可预测的意外情况。一个AI系统可能精通围棋,但若被置于荒岛,它无法像人类一样即兴利用资源求生。RL原则上可以解决这类问题,因为它是通过与环境交互、从反馈中学习并适应的框架。
然而,我们当前的RL研究很少涉及这类“困难宇宙”的挑战。在“困难宇宙”中,成功等同于生存,世界是开放和变化的,主要问题在于智能体能否泛化、适应和处理训练数据之外的情况。
以下是现实世界RL面临的一些具体挑战:
- 反馈稀疏且延迟:现实世界没有明确的得分,“生存与否”的反馈来得太晚,需要更直接的监督形式。
- 持续学习与非片段化:世界不会重置,智能体需要在环境持续变化中保持坚韧。
- 利用先验知识与经验:如何利用过去的经验来引导在新环境中的探索和学习。
为了解决这些挑战,研究者们正在探索各种方法,例如从人类偏好中学习、设计能自动重置的多任务学习系统,以及从先前经验中构建用于引导探索的行为先验。这些方法的核心在于,现实世界学习并非从零开始,而是需要利用适当类型的先验知识。
视角三:强化学习作为通用学习框架 🧩
最后,让我们探讨一个更宏大、也可能有些激进的视角:强化学习是最基础、最普遍的学习框架,能够包含其他所有学习范式。
为什么这么认为?我们可以从一个根本问题出发:我们为什么需要机器学习(或大脑)?一个有力的观点是:计算系统的价值由其输出决定,而最终输出就是决策和行动。无论是控制机器人、驾驶汽车,还是语言模型生成文本,本质上都是在做出一系列决策,这些决策会引发现实世界的后果。
如果机器学习的核心是做出好的决策,那么RL就提供了一个天然框架。与监督学习(模仿数据分布)或无监督学习(建模数据分布)不同,RL直接优化决策以实现目标。
由此,我们可以构想一个更强大的学习“配方”:
- 无监督RL预训练:利用大量、多样但质量较低的数据(如互联网文本、视频),训练系统掌握“如何实现各种可能的结果”(即掌握技能),而不指定具体任务。这类似于语言模型的预训练,但是为决策而定制的。
- 有监督微调:使用相对少量的高质量监督(如人类反馈、任务奖励),引导预训练系统专注于完成我们真正想要的任务。
这种视角认为,将RL作为核心框架,比单纯建模数据分布更能有效地利用海量数据来做出优质决策。一些实验已经展示了这种思路的潜力,例如在机器人上先进行无目标(目标条件化)的RL预训练,再快速微调以适应新任务;或者利用大型语言模型作为模拟器,再用RL优化出更高效的对话策略。
总结与展望 🚀
本节课我们一起探讨了深度强化学习的三种不同哲学视角:作为工程工具、作为现实世界学习模型以及作为通用学习框架。每种视角都揭示了RL的不同潜力和面临的独特挑战。
- 作为工程工具,RL是强大的优化器,能将模拟转化为控制。
- 作为现实世界学习模型,RL是应对莫拉维克悖论、处理开放世界泛化和适应的关键。
- 作为通用学习框架,RL为利用海量数据做出最优决策提供了统一范式。
这些宏观视角提醒我们,在选择研究或应用方向时,需要考虑一些重要原则:
- 关注上限高的问题:思考你的工作是否可能解决真正重要的问题。
- 保持战略乐观:在不确定性中,乐观是探索和研究的最佳策略之一。
- 勇于改变基准:经典RL的假设可能不足以解决新挑战,改进问题定义本身是必要的。
- 重视实际应用:将方法应用于真实、复杂的领域能揭示哪些问题真正关键。
- 胸怀大志,从小处着手:思考宏大图景,但从具体、可验证的假设开始实践。


最终,深度强化学习的未来很可能融合上述多种视角,结合模仿学习、模型预测等元素,朝着构建能做出复杂决策、适应真实世界的智能系统迈进。

课程 P98:离线强化学习与大型模型预训练 🧠
在本节课中,我们将学习如何将离线强化学习(Offline RL)与大型模型预训练范式相结合。我们将探讨如何利用海量数据(包括非结构化数据,如人类视频)来预训练模型,如何解决训练大型模型时的扩展性问题,以及如何有效地对预训练模型进行下游任务微调。
第一部分:扩展离线强化学习模型 📈
上一节我们介绍了离线强化学习的基本范式。本节中我们来看看,当我们试图使用更大的模型和更多的数据时,会遇到哪些挑战,以及如何解决。
离线强化学习的标准范式是利用已有的交互数据,学习一个能最大化奖励的策略。这类似于标准的机器学习流程:数据 -> 模型 -> 部署。
然而,当我们尝试使用更大的模型(例如更深的神经网络)来处理更复杂的问题(如同时玩多个Atari游戏)时,一个反直觉的现象出现了:某些离线RL算法的性能随着模型容量的增加而下降,而简单的模仿学习方法却能从中受益。
为了理解这一差异,我们需要引入“隐式正则化”的概念。在监督学习中,当使用随机梯度下降(SGD)等优化器训练一个参数极多的过参数化模型时,优化过程会隐式地倾向于找到“更简单”的解决方案(例如参数范数较小的解),这有助于模型泛化。其目标可以形式化地表示为找到参数θ,最小化以下损失:
L(θ) + λ * R(θ)
其中 R(θ) 就是隐式正则化项。
在离线Q学习中,由于目标值y依赖于正在训练的Q函数本身(y = r + γ * max_a‘ Q(s‘, a‘)),这形成了一个循环依赖。经过推导发现,其隐式正则化项与监督学习不同,它包含一个相互冲突的项:
R_RL(θ) ≈ ||φ_θ(s)||^2 - φ_θ(s) · φ_θ(s‘)
第一项惩罚特征向量的范数(是好的),第二项却鼓励增大连续状态特征向量的点积(可能导致不稳定)。
解决方案是显式地在离线RL算法的损失函数中添加一个正则化项,以抵消这个有害的第二项。例如,在训练Q函数时,添加一个损失项来最小化 φ_θ(s) · φ_θ(s‘)。实验表明,这样简单的修改就能使离线RL算法像监督学习一样,从模型容量的增加中稳定获益。
第二部分:利用任意数据源进行预训练 🎥
上一节我们讨论了如何让算法适应更大的模型。本节中我们来看看如何利用形式不匹配的任意数据(例如人类视频)进行预训练。
一个理想的预训练范式是:使用所有相关数据(不仅仅是当前任务的数据)训练一个通用模型,然后针对特定的下游任务进行微调。对于机器人控制,我们不仅可以使用机器人数据集,还可以利用海量的互联网人类视频数据。
挑战在于,人类视频数据不包含机器人的动作标签,且 embodiment(身体形态)完全不同。我们的解决方案是:不直接从视频学策略,而是学习有用的状态特征表示。
具体流程如下:
- 预训练价值函数:在人类视频数据上,训练一个目标条件化的价值函数
V(s, g)。这个函数评估从状态s到达目标状态g的难易程度。我们选择对“最优到达策略”建模,以*衡通用性和实用性。 - 提取视觉编码器:这个价值网络的编码器部分学会了提取与任务和动态相关的有用特征。
- 下游策略学习:将预训练好的编码器固定,作为机器人策略网络的视觉输入端。然后,在相对少量的机器人交互数据上,使用离线RL算法(如保守Q学习)来训练策略和Q函数。
为什么有效? 通过贝尔曼方程训练的价值函数,被迫理解视频中的状态转移动态和时序结构,这促使编码器学习到对于规划和控制至关重要的特征表示。
实验证明,通过这种方式预训练的特征,在机器人数据集上能产生更准确、更单调的价值估计,并且最终训练出的策略在抓取、操作等任务中表现更鲁棒、泛化能力更强。
以下是几种预训练方法的对比:
- 无视频预训练:仅使用机器人数据。
- 自监督学习(如掩码重建):在视频上学习通用视觉特征。
- 对比学习:在视频上学习区分不同帧。
- 我们的方法(价值函数预训练):在视频上学习与动态和目标相关的特征。
结果表明,我们的方法在最终任务成功率上显著优于其他对比方法。
第三部分:从预训练模型到高效微调 ⚙️
上一节我们学习了如何获得一个预训练好的模型初始化。本节中我们来看看如何在下游任务上,用有限的在线交互数据对这个初始化进行高效微调。
设定:我们已有一个通过海量离线数据预训练好的策略。现在,我们希望在一个新任务上,通过有限的在线试错来快速改进这个策略。
一个朴素的方法是直接继续运行离线RL算法(如保守Q学习 CQL),将新收集的在线数据不断加入回放缓冲区。但这通常会导致两个问题:
- 性能骤降:在微调初期,策略性能可能会突然大幅下降。
- 改进缓慢:即使恢复后,性能提升的速度也很慢。
通过分析发现,性能骤降与学习到的Q值剧烈膨胀高度相关。在CQL中,算法会悲观地压低数据分布外动作的Q值。当在线探索执行一个新动作并收到奖励时,这个动作的Q值会从被压低的水*急剧上升,形成一个“尖峰”。策略优化会立即利用这个尖峰,导致策略追逐这个可能并非真正最优的“幻觉”高值动作,从而造成性能崩溃。
解决方案:校准Q值尺度。我们修改算法,约束学习到的Q函数不能低于一个参考Q函数,例如数据集中行为策略的Q值(可以通过简单的蒙特卡洛回报来估计)。这个约束防止了Q值在预训练阶段被压得过低,从而避免了在线微调时因Q值剧烈膨胀而产生的“尖峰”。
采用这种“校准”后的算法进行微调,可以得到更稳定、更快速的性能提升曲线:它既没有初期的严重性能下降,其上升斜率也远高于朴素的在线微调方法。这使得我们能够以最小的“后悔”累积,高效地将一个通用的预训练策略适配到具体的下游任务。
总结 📝
本节课中我们一起学习了离线强化学习与大型模型预训练的前沿结合。
- 我们首先看到,通过分析并修正离线RL中的隐式正则化项,可以解决大模型训练不稳定的问题,使其能够有效扩展。
- 接着,我们探索了如何利用人类视频等任意数据源,通过预训练目标条件化价值函数来学习对下游控制任务有用的特征表示,从而突破机器人数据稀缺的瓶颈。
- 最后,我们探讨了如何通过校准Q值尺度的方法,实现从预训练模型到下游任务的高效、稳定微调,避免性能崩溃并加速在线学习。

这三个部分共同构成了一套完整的“预训练-微调”范式,为将大规模基础模型的思想应用于决策与控制领域提供了可行的技术路径。

课程 P99:交互式学习与大型模型在机器人学中的应用 🧠🤖

在本节课中,我们将学习交互式学习的概念,探讨如何从人类反馈中学习,并了解大型语言模型和视觉语言模型如何改变我们构建和训练机器人系统的方式。
概述:什么是交互式学习? 🤔
交互式学习是指从各种人类数据源中学习的想法。你可以学习一个机器人策略,可以学习一个奖励函数,也可以学习一种表示。核心思想是,有一个人类正在提供数据。你可以与那个人类交互,或者你可以从那个人类那里收集离线数据,然后尝试从中学习。

上一节我们介绍了交互式学习的基本概念,本节中我们来看看其具体应用和挑战。

从人类偏好中学习奖励函数 📊
当我们向人们提问时,例如展示两条不同的路径并询问他们更喜欢哪一条,我们可以尝试构建一个人的行为模型,或者找出人们希望机器人如何行动。奖励函数是一种可以从这些比较中学习的紧凑表示。
理论基础:线性奖励模型
假设奖励函数是一组非线性特征的线性组合。公式可以表示为:
R(τ) = w^T φ(τ)
其中 w 是权重向量,φ(τ) 是轨迹 τ 的特征向量。
每一个来自人类的偏好比较(例如,轨迹 A 优于轨迹 B)都对应于权重空间 w 中的一个分隔超*面。人类的回答(偏好 A 或偏好 B)告诉我们真实的 w 位于超*面的哪一侧。

主动学习与信息收集


以下是我们如何通过主动提问来高效学习奖励函数:
- 目标:找到一组信息丰富且多样化的问题(即轨迹对),以快速缩小对真实奖励函数
w的搜索范围。 - 方法:优化一个信息论度量,例如最大化从假设空间中移除的预期体积。我们寻找能最大程度减少假设空间不确定性的问题。
- 挑战:在机器人设置中,我们需要在连续空间中合成满足动力学约束的轨迹,而不仅仅是从一个有限的库中选择。
实际应用与价值
在简单的驾驶模拟器中,仅通过询问约70个二进制偏好问题,就能学习到避免碰撞和驾驶等复杂行为。这表明从偏好中学习可以是一种高效的数据获取方式。
在机器人学和人机交互领域,主动学习带来的样本效率提升(例如,半小时对比三小时)比在许多传统机器学习设置中更为重要。
超越人类:利用大型语言模型作为奖励源 💬
除了直接询问人类,我们还可以利用大型语言模型(LLMs)和视觉语言模型(VLMs)作为人类偏好的代理或奖励函数。
案例研究:谈判代理

在一个谈判游戏中,目标是训练一个AI代理(Alice)与人类(Bob)进行谈判。传统的强化学习代理可能过于激进,而纯粹的模仿学习代理可能过于顺从。
解决方案:使用LLM作为奖励信号的来源。
- 我们提示LLM评估Alice在谈判中的行为(例如,“这次谈判是否灵活?”)。
- 从LLM的输出(如“是/否”或对数概率)中获取信号。
- 将此信号用作奖励函数或正则化器,来训练强化学习代理。

结果发现,使用LLM作为代理奖励的谈判代理,其行为风格(如灵活性)与人类评估的真实奖励高度匹配,且优于基线方法。

在机器人学中的应用与挑战


LLMs和VLMs也可用于为机器人任务提供高级语义指导。例如,根据“面向日落”或“像狗一样坐下”等语言指令,让LLM输出奖励函数的权重,然后通过模型预测控制来优化行为。

主要挑战:
- 接地问题:LLMs/VLMs生成的知识如何与物理世界和具体的机器人状态估计可靠地关联。
- 结果可靠性:目前从这些模型中获取可靠、一致的奖励信号仍具挑战性,尽管它们在快速改进。
构建机器人基础模型:大规模预训练 🏗️
另一个宏伟的愿景是像训练LLM一样,利用海量离线数据为机器人训练一个“基础模型”。
关键问题:学习有用的视觉表示
我们希望学习的视觉表示既能捕捉语法(局部、空间细节,利于抓取),也能捕捉语义(高级概念,利于理解任务)。现有方法各有利弊:
- 掩码自编码:擅长重建像素细节(语法),但可能丢失高级语义。
- 对比学习(如CLIP):擅长对齐图像与文本语义,但破坏了局部空间特征。
Voltron模型:连接语法与语义
Voltron模型的核心思想是使用语言作为连接语法和语义的桥梁。
- 训练目标:结合基于语言的掩码图像重建和语言生成,同时以多帧为条件来捕捉动态信息。
- 优势:在人类视频上预训练的Voltron模型学到的表示,更能同时捕捉语义、语法和任务动态。在下游的机器人模仿学习任务中,仅用少量演示微调即可取得良好效果。
- 零样本能力:该模型甚至能在未见过的机器人视频上进行零样本的意图推断。

未来的方向:RT-X与大规模机器人数据
业界正在努力收集大规模、多样化的机器人交互数据集(如RT-X项目),旨在跨不同机器人*台和技能训练真正通用的机器人基础模型。这涉及到应该预训练何种表示(视觉、动作、或视觉-语言-动作)以及如何适应下游任务等重要问题。


创造性使用现有大模型:超越语义的模式机器 🧩

除了利用LLMs/VLMs的丰富语义知识,我们还发现它们可以作为强大的模式识别机器,即使输入是没有语义意义的抽象模式。



令人惊讶的能力
- 序列转换与延续:将图像或机器人末端执行器的轨迹离散化为数字序列输入LLM,它可以识别并延续这些空间或时间模式。
- 隐式优化:在上下文示例中提供(状态,奖励)对,LLM能够输出高奖励的轨迹,表现出类似基于奖励的优化能力。


启示
这表明LLMs的能力可能远超我们的预期。它们不仅是知识的容器,也是强大的模式提取和延续引擎。这为机器人学开辟了新的可能性,例如用于轨迹生成、数据增强或提供新颖的学习信号。

总结与展望 🎯
本节课中我们一起学习了交互式学习的核心思想及其演变:
- 从人类反馈中学习:我们可以通过主动询问偏好等高效方式,学习代表人类意图的奖励函数。
- 利用大型预训练模型:LLMs和VLMs可以作为人类偏好的强大代理(用于奖励设计、常识推理等),也可作为模式识别引擎。
- 构建机器人基础模型:通过精心设计的目标在大规模数据(人类视频或机器人数据)上预训练模型,是获得通用、可迁移机器人能力的重要途径。

当前,我们正处在一个激动人心的交叉点:如何最有效地结合人类反馈、大规模离线数据以及大模型的现有知识,来构建更智能、更适应、更符合人类价值的机器人系统,是未来研究的关键方向。


浙公网安备 33010602011771号