DeepMind-强化学习笔记-全-
DeepMind 强化学习笔记(全)
01:强化学习导论 🚀




在本节课中,我们将学习强化学习的基本概念、核心思想以及它与其他人工智能领域的联系。我们将从宏观视角理解什么是强化学习,并介绍其核心组成部分:智能体、环境、奖励和策略。
概述
强化学习是关于智能体如何通过与环境的交互来学习做出决策,以最大化累积奖励的科学和框架。它不同于其他类型的机器学习,因为它强调主动交互、顺序决策和长期目标。
什么是人工智能?
在深入强化学习之前,理解人工智能的背景是有益的。我们可以将技术发展分为几个阶段:
- 工业革命:自动化重复的体力劳动。
- 数字革命:自动化重复的脑力劳动(例如,计算器)。
- 人工智能革命:让机器自己寻找解决方案。
艾伦·图灵在1950年的论文《计算机器与智能》中提出了一个关键思想:与其尝试编写一个模拟成人思维的程序,不如尝试编写一个能像儿童一样学习的程序,然后通过“教育”使其成长为“成人”。这本质上就是学习的思想。
因此,我们可以将人工智能的一个目标定义为:学习做出决策以实现目标。学习、决策和目标这三个概念是核心。
什么是强化学习?
强化学习与图灵所说的“通过交互学习”密切相关。其特点包括:
- 主动而非被动:智能体的行为会影响它获得的数据和经验。
- 交互是顺序的:未来的交互可能依赖于之前的行动。
- 目标导向:行为带有目的性。
- 无需最优行为示例:智能体可以在没有被告知具体每一步该如何做的情况下学习技能。
一种思考方式是:强化学习是关于优化某个奖励信号。我们通过获得奖励(或避免惩罚)来感到满足,这驱动了我们的行为。
交互循环:核心框架
强化学习的核心是一个交互循环:




智能体 (Agent) <-> 环境 (Environment)





以下是该循环的运作方式:




- 智能体:做出决策的实体(如机器人、程序)。
- 环境:智能体所处的外部世界(如真实世界、游戏、互联网)。
- 行动 (A):智能体对环境施加的影响。
- 观察 (O) 和 奖励 (R):环境对智能体行动的反馈。观察是环境的状态信息,奖励是一个标量值,表示该步的好坏。

奖励假说指出:任何目标都可以被形式化为最大化累积奖励的结果。这为指定目标提供了一个灵活而强大的框架。
强化学习问题示例
以下是一些已成功应用强化学习的例子:
- 操控直升机飞行
- 管理投资组合
- 控制发电站
- 让机器人行走
- 玩视频游戏或棋盘游戏
在这些问题中,学习可能有两个不同的目的:
- 寻找解决方案:学习一个策略并部署它(例如,一个下棋程序)。
- 在线适应:系统能够持续学习以适应未预见的情况(例如,适应不同地形的机器人)。


形式化与核心概念
现在,让我们更正式地定义一些核心概念。在交互循环的每一步 t:
- 智能体收到观察
O_t和奖励R_t。 - 智能体执行行动
A_t。 - 环境转移到新状态,并在
t+1时刻产生新的观察和奖励。
奖励 (R_t) 是标量反馈信号,表示即时表现。
回报 (G_t) 是从时刻 t 开始的未来累积奖励之和:G_t = R_t + γR_{t+1} + γ^2R_{t+2} + ...
折扣因子 (γ) 介于0和1之间,决定了未来奖励的现值。γ=0表示只关心即时奖励;γ=1表示所有未来奖励同等重要。
价值函数 (V(s)) 是处于状态 s 后期望能获得的回报。它评估了状态(或状态-行动对)的“好坏”。
策略 (π) 是智能体的行为方式,是从状态到行动(或行动概率)的映射。
贝尔曼方程 以递归形式定义了价值函数,这是许多强化学习算法的基石。最优价值函数 V*(s) 满足:
V*(s) = max_a E[ R_{t+1} + γ V*(S_{t+1}) | S_t=s, A_t=a ]
智能体内部:状态、策略、价值与模型
智能体内部可能包含以下组件:
-
智能体状态 (S_t):智能体内部对当前情况的总结。它是历史的函数:
S_{t+1} = u(S_t, A_t, R_{t+1}, O_{t+1})。- 完全可观测性:观察
O_t等于环境状态。此时智能体状态可以直接用观察表示,且具有马尔可夫性(未来仅取决于当前状态,与历史无关)。 - 部分可观测性 (POMDP):更常见的情况。观察不足以完全确定环境状态。智能体需要构建一个足够丰富的内部状态(如使用历史缓冲区或循环网络)来做出良好决策。
- 完全可观测性:观察
-
策略 (π):定义智能体行为的函数。可以是确定性的
a = π(s),或随机性的π(a|s)。 -
价值函数 (V, Q):预测未来回报的期望。用于评估策略或状态-行动对的好坏。
-
模型(可选):智能体对环境动态的预测。包括状态转移模型
P(s‘|s,a)和奖励模型R(r|s,a)。拥有模型可以进行“规划”。


智能体分类
根据智能体内部包含的组件,可以将其分类:
- 基于价值的智能体:主要学习价值函数(如Q函数),策略隐含地由价值函数导出(例如,选择价值最高的行动)。
- 基于策略的智能体:直接学习并维护一个策略函数,可能没有明确的价值函数。
- 演员-评论家智能体:同时学习策略函数(演员)和价值函数(评论家)。评论家用于评估和指导演员的改进。
- 无模型 vs 基于模型:
- 无模型:不显式学习环境模型,直接从经验中学习价值或策略。
- 基于模型:学习(或已知)环境模型,并利用该模型进行规划以改进策略。
预测与控制


强化学习中的两个核心子问题:
- 预测:评估一个给定策略的未来表现(即学习该策略的价值函数)。
- 控制:寻找最优策略以最大化未来回报。


预测通常是控制的基础。如果能够完美预测每个策略的价值,就能通过比较找到最优策略。


学习与规划

- 学习:环境初始未知,智能体通过与其交互来改进其策略、价值或模型。
- 规划:当环境模型(可能是学得的)已知时,智能体通过内部计算(如模拟推演)来改进策略,而无需与真实环境进行新的交互。

现代强化学习系统通常将学习与规划相结合。

函数近似与深度学习
策略、价值函数、模型等都是某种形式的函数。我们可以使用函数近似方法(如线性函数、神经网络)来表示和学习这些函数。使用深度神经网络进行函数近似的强化学习被称为深度强化学习。
需要注意的是,强化学习的数据通常具有序列相关性且问题可能是非平稳的(因为策略在改变),这违反了传统监督学习的一些假设,因此需要专门的技术。

实例分析

雅达利游戏:智能体仅接收像素画面(观察)和游戏得分变化(奖励),输出为手柄控制(行动)。通过算法(如DQN)学习后,智能体可以掌握多种游戏,而无需任何关于游戏规则或控制对象的先验知识。
网格世界示例:一个简单的导航问题,展示了如何计算随机策略的价值函数以及最优策略和价值函数。它说明了即使在小问题上,最优行为也可能不直观,但算法可以找到。
人体运动控制:智能体控制一个多关节的身体,其目标奖励仅仅是“向右移动得越快越好”。通过强化学习,智能体自行学会了协调复杂肌肉运动以跑步、跳跃、攀爬,并适应不同的地形和身体形态。这凸显了强化学习的强大之处:我们只需指定目标,而非解决方案。
预告
在接下来的课程中,我们将深入探讨:
- 探索与利用(多臂赌博机问题)
- 马尔可夫决策过程的形式化定义
- 动态规划进行规划
- 无模型预测与控制算法(如蒙特卡洛法、时序差分学习、Q学习)
- 策略梯度方法与演员-评论家算法
- 深度强化学习的整合
- 学习与规划的结合


总结







本节课我们一起学习了强化学习的基础。我们了解到强化学习是智能体通过与环境交互来学习决策以最大化累积奖励的框架。我们介绍了核心概念:智能体、环境、行动、观察、奖励、回报、价值函数、策略和模型。我们还探讨了智能体的不同内部结构(基于价值、基于策略、演员-评论家)以及无模型与基于模型方法的区别。最后,我们通过雅达利游戏和人体运动控制等实例,看到了强化学习在解决复杂、序列决策问题上的巨大潜力。强化学习为实现通用人工智能提供了一个形式化且强大的途径。
02:探索与控制 🎯
在本节课中,我们将学习强化学习中的一个核心挑战:探索与利用的权衡。我们将聚焦于一个简化的环境——多臂老丨虎丨机问题,来深入理解这个概念。
概述



在上一讲中,我们介绍了强化学习的基本框架,即智能体与环境交互的循环。在本节中,我们将简化这个框架,假设环境只有一个状态。这使得我们可以专注于一个核心问题:智能体如何在尝试新事物(探索)以获得更多信息,与利用现有知识做出最佳决策(利用)之间做出权衡。


探索与利用的权衡 😊


任何主动收集数据的学习智能体都必须处理探索与利用之间的权衡。
- 利用 指的是基于当前知识最大化性能。例如,如果你尝试过两种电影推荐,其中一种的成功率更高,那么为了最大化下一次的成功率,选择成功率更高的电影是合理的。
- 探索 的主要目的是通过接触新信息来增加我们的知识。如果我们从不尝试新事物,就永远不会发现可能存在的巨大回报。
这是一个根本性的权衡。我们简化环境状态,正是为了能在这个基本层面上清晰地推理这个问题,并希望将学到的经验应用到更一般的情况中。
问题形式化:多臂老丨虎丨机


这个简化设置通常被称为多臂老丨虎丨机问题。
- 它包含一组动作(或“臂”),每个动作
a对应一个奖励分布R(a)。 - 在每个时间步,智能体选择一个动作
A_t,并观察一个来自该动作奖励分布的随机奖励R_t。 - 目标是随时间最大化累积奖励。




我们也可以从遗憾的角度来思考目标。动作 a 的瞬时遗憾是其最优期望奖励与自身期望奖励的差值:
regret(a) = max_{a'} Q(a') - Q(a)
总遗憾则是所有时间步上所选动作的瞬时遗憾之和。最小化总遗憾与最大化累积奖励是等价的。


动作价值估计

许多方法依赖于对动作价值 Q(a) 的估计。一个简单的方法是计算每个动作的平均奖励。


我们可以使用增量更新来跟踪这个平均值:
Q_{t+1}(A_t) = Q_t(A_t) + α * (R_t - Q_t(A_t))
其中步长参数 α 可以设置为 1 / N_t(A_t),N_t(A_t) 是动作 A_t 被选择的次数。
算法一:贪婪策略
最简单的策略是贪婪策略,即总是选择当前估计价值最高的动作。
π(a) = 1 if a = argmax_{a'} Q(a'), else 0
然而,贪婪策略可能陷入困境。如果某个次优动作在早期偶然获得了较高的估计值,贪婪策略可能会无限期地选择它,而不再探索可能更优的其他动作,导致遗憾线性增长。
算法二:ε-贪婪策略
一个流行的改进是 ε-贪婪策略。
- 以
1 - ε的概率选择贪婪动作。 - 以
ε的概率随机选择一个动作(包括贪婪动作)。
其策略可以形式化为:
π(a) = (1 - ε) + ε/|A| if a is greedy, else ε/|A|

ε-贪婪策略持续探索,但其探索概率 ε 是固定的。这意味着即使我们已经足够确定某些动作很差,它仍然会以固定概率选择它们,因此其期望遗憾仍然是线性的。

算法三:策略梯度方法


我们也可以不学习价值函数,而是直接学习策略参数。例如,使用Softmax策略,根据动作偏好 h(a) 来选择动作:
π(a) = exp(h(a)) / Σ_{a'} exp(h(a'))
目标是优化偏好参数 θ(这里 θ 可以就是 h 向量),以最大化期望奖励 J(θ) = E[R | π_θ]。我们可以使用梯度上升法。


通过一个称为 Reinforce Trick 或对数似然技巧的推导,我们可以得到梯度的采样形式:
∇J(θ) = E[ R * ∇ log π_θ(A) ]
这引出了一个随机梯度上升更新规则:
θ_{t+1} = θ_t + α * R_t * ∇ log π_θ(A_t)


对于Softmax策略,这个更新有直观的解释:获得正奖励的动作,其偏好会增加;获得负奖励的动作,其偏好会减少。其他动作的偏好则朝相反方向调整。探索源于策略本身的随机性。
我们还可以引入一个基线 b 来减少更新的方差,因为 ∇J(θ) = E[ (R - b) * ∇ log π_θ(A) ] 对于不依赖于动作的 b 是等价的。
理论界限与乐观原则
Lai & Robbins 定理指出,对于任何算法,总遗憾的增长速度至少是时间 T 的对数级别:
Total Regret ≥ Ω(log T)

我们的目标是找到能达到对数级遗憾上界的算法。这类算法通常遵循 “面对不确定性的乐观” 原则。

其思想是:当我们对一个动作的价值非常不确定时,我们乐观地认为它可能很好,因此更倾向于选择它。这鼓励了对不确定性高的动作进行探索。
算法四:上置信界算法
上置信界算法 是乐观原则的一个具体实现。
- 为每个动作的价值估计
Q(a)计算一个上置信界U(a)。 - 选择具有最高
Q(a) + U(a)的动作。
U(a) 的设计是关键。它应该随着动作被选择次数 N(a) 的增加而减小(不确定性降低),同时随着总时间 t 的增长而缓慢增加(保证持续探索)。使用霍夫丁不等式可以推导出一种形式:
U(a) = c * sqrt( log(t) / N(a) )
其中 c 是一个超参数。
UCB算法被证明能够实现对数级遗憾。



贝叶斯方法

在贝叶斯方法中,我们维护一个关于每个动作期望价值的信念分布 P(Q(a) | θ),而不仅仅是点估计。例如,对于伯努利奖励,可以使用Beta分布作为共轭先验。

- 先验:假设对
Q(a)一无所知,可以使用均匀分布(如Beta(1,1))。 - 后验更新:观察到奖励后,根据贝叶斯规则更新分布参数。





有了后验分布,我们可以通过多种方式实现乐观探索:
- 计算均值加若干倍标准差作为上界(类似贝叶斯版UCB)。
- 使用概率匹配:选择动作
a的概率等于我们相信a是最优动作的后验概率。





算法五:汤普森采样




汤普森采样 是概率匹配的一种高效实现方法。




- 从每个动作的后验信念分布中采样一个价值样本
Q̃(a) ~ P(Q(a) | Data)。 - 选择具有最高采样值
Q̃(a)的动作。
可以证明,汤普森采样的动作选择概率与概率匹配完全相同。对于伯努利老丨虎丨机等问题,它也能达到对数级遗憾,并且在实际中常常表现优异。
规划探索
我们还可以将老丨虎丨机问题视为一个关于信息状态的序列决策问题。智能体的内部状态(如记录每个动作奖励历史的计数)会随着每次动作和观察到的奖励而演变。


这形成了一个(可能是无限的)马尔可夫决策过程。如果我们学习了一个关于奖励分布的贝叶斯模型,就可以使用规划算法(如动态规划)来求解这个MDP,从而在考虑未来信息价值的基础上,最优地权衡探索与利用。这被称为贝叶斯自适应强化学习,虽然理论最优,但计算成本高昂,难以扩展到复杂问题。
示例回顾与比较


考虑一个简单的双臂老丨虎丨机例子:
- 动作A:尝试1次,奖励0。
- 动作B:尝试2次,奖励分别为1和0。


不同算法在下一步选择动作A的概率:
- 贪婪策略:0(永远选择B)。
- ε-贪婪策略:
ε / 2(以ε概率随机选择时,A被选中的概率)。 - UCB:0(因为两臂尝试次数相同,上界相同,仍选B)。
- 汤普森采样(均匀先验):约0.25(根据后验分布计算A更优的概率)。
这个例子展示了不同算法在具体决策上的差异,尽管它们的长期遗憾增长率可能相同。



总结
本节课中,我们一起学习了强化学习中探索与利用的核心挑战。我们通过多臂老丨虎丨机这个简化模型,深入探讨了多种策略:
- 贪婪策略 和 ε-贪婪策略 简单直观,但遗憾可能是线性的。
- 策略梯度方法 直接优化策略参数,易于扩展,但缺乏探索的理论保证。
- 上置信界算法 和 汤普森采样 遵循“面对不确定性的乐观”原则,被证明能达到对数级遗憾,是理论上高效的探索方法。
- 我们还简要介绍了贝叶斯方法和规划探索的思想。



在接下来的课程中,我们将回到具有多个状态的一般强化学习设置,并学习如何将这些探索原理与价值函数估计、规划和控制结合起来。
03:马尔可夫决策过程与动态规划 🎯
在本节课中,我们将学习如何用马尔可夫决策过程(MDP)来形式化强化学习中的智能体-环境交互循环,并介绍解决MDP问题的第一类方法——动态规划。我们将涵盖MDP的定义、目标函数、贝尔曼方程,以及用于策略评估和控制的动态规划算法。


概述:形式化RL交互
首先,我们来讨论智能体与环境交互的数学形式化,这被称为马尔可夫决策过程。这使我们能够更清晰地讨论RL智能体的目标以及如何实现它。

目前,我们假设环境是完全可观测的,即智能体当前的观察包含了所有与未来预测相关的信息。几乎所有RL问题都可以形式化为MDP,这是一个非常通用的范式。
马尔可夫决策过程(MDP)定义

MDP是一个五元组 (S, A, P, R, γ):
- S:所有状态的集合。
- A:所有动作的集合。
- P:状态转移概率核。给定当前状态
s和动作a,转移到下一个状态s'并获得奖励r的联合概率,即P(s', r | s, a)。 - R:奖励函数。有时也指期望奖励
R(s, a) = E[r | s, a]。 - γ:折扣因子,取值范围
[0, 1],用于权衡近期和远期奖励。

MDP中的“马尔可夫”属性是指:未来状态仅依赖于当前状态,与过去历史无关。也就是说,当前状态 s_t 是过去历史的充分统计量。
智能体的目标与回报
智能体在MDP中交互,每一步都会产生即时奖励。智能体的目标是找到一个行为策略,以最大化其获得的累积回报。

以下是几种常见的回报定义:
- 无折扣回报:
G_t = R_{t+1} + R_{t+2} + ... + R_T。通常用于有限步长的情景式任务。 - 折扣回报:
G_t = R_{t+1} + γ R_{t+2} + γ^2 R_{t+3} + ...。这是我们最常用的形式,适用于有限和无限步长任务。 - 平均回报:
G_t = lim_{T->∞} (1/T) Σ_{k=1}^{T} R_k。通常用于无限步长任务。
折扣因子 γ 的作用:
γ接近0:近视,只重视即时奖励。γ接近1:远视,平等对待未来奖励。- 引入折扣在数学上便于处理无限步长问题,避免回报无限大,同时也符合经济学和生物学中“即时奖励更有价值”的直觉。


智能体的目标是找到一个策略 π,以最大化期望折扣回报。策略 π 是一个从状态到动作概率分布的映射。
价值函数与最优性
为了衡量策略的好坏,我们引入价值函数:
- 状态价值函数
V^π(s):从状态s开始,遵循策略π所能获得的期望回报。
V^π(s) = E_π[G_t | S_t = s] - 动作价值函数
Q^π(s, a):从状态s开始,执行动作a,然后遵循策略π所能获得的期望回报。
Q^π(s, a) = E_π[G_t | S_t = s, A_t = a]

两者关系:V^π(s) = Σ_a π(a|s) Q^π(s, a)

最优价值函数定义了在MDP中可能达到的最佳性能:
- 最优状态价值函数
V^*(s):V^*(s) = max_π V^π(s) - 最优动作价值函数
Q^*(s, a):Q^*(s, a) = max_π Q^π(s, a)




定理:对于任何MDP,总存在一个最优确定性策略 π^*,它不劣于任何其他策略。所有最优策略都共享相同的最优价值函数 V^* 和 Q^*。

一旦我们知道了 Q^*,就可以通过贪心策略立即得到一个最优策略:
π^*(s) = argmax_a Q^*(s, a)

贝尔曼方程


价值函数具有递归结构,由贝尔曼方程描述。
贝尔曼期望方程(针对给定策略 π):
V^π(s) = Σ_a π(a|s) Σ_{s', r} P(s', r | s, a) [r + γ V^π(s')]
Q^π(s, a) = Σ_{s', r} P(s', r | s, a) [r + γ Σ_{a'} π(a'|s') Q^π(s', a')]

贝尔曼最优方程(针对最优价值函数):
V^*(s) = max_a Σ_{s', r} P(s', r | s, a) [r + γ V^*(s')]
Q^*(s, a) = Σ_{s', r} P(s', r | s, a) [r + γ max_{a'} Q^*(s', a')]




贝尔曼方程是强化学习中的核心概念,它将复杂的长期回报计算分解为即时奖励和下一个状态的价值的组合。

RL中的两类问题
在强化学习中,我们主要解决两类问题:
- 预测(策略评估):给定一个策略
π,估计其价值函数V^π或Q^π。即回答“这个策略有多好?”。 - 控制:寻找最优价值函数
V^*或Q^*,从而得到最优策略π^*。即回答“最好的行为是什么?”。
控制问题通常比预测问题更难。
对于小型MDP,策略评估可以通过求解贝尔曼期望方程的线性系统来完成(复杂度为 O(|S|^3))。但对于控制问题,贝尔曼最优方程是非线性的,无法直接线性求解。因此,我们需要迭代方法。


动态规划简介
动态规划是一类算法的总称,用于在已知环境完整模型(即MDP)的情况下,计算最优策略或最优价值函数。

所有动态规划方法都遵循一个通用模式:策略评估 和 策略改进 的交替进行。

策略评估:迭代策略评估



给定一个策略 π,我们希望计算 V^π。我们可以将贝尔曼期望方程转化为一个迭代更新规则:


初始化 V_0(s)(例如全0)。
对 k = 0, 1, 2, ... 重复:
V_{k+1}(s) = Σ_a π(a|s) Σ_{s', r} P(s', r | s, a) [r + γ V_k(s')],对所有 s ∈ S
当 V_{k+1} 与 V_k 足够接近时停止。在 γ < 1 或所有策略都能最终终止的条件下,该算法保证收敛到 V^π。
策略改进:贪心策略

假设我们已经评估了一个策略 π 并得到了其价值函数 V^π(或 Q^π)。我们可以通过贪心方式改进它,得到一个新策略 π':
π'(s) = argmax_a Q^π(s, a)


策略改进定理:由 π 产生的贪心策略 π' 满足 V^{π'}(s) ≥ V^π(s) 对所有状态 s 成立。即新策略不差于原策略。
这个定理的直觉是:新策略在每个状态都选择看起来最好的动作。即使它只在这个动作上偏离原策略一次,然后继续遵循旧策略,其回报也不会变差。多次这样的改进会带来累积的收益。
策略迭代算法
结合策略评估和策略改进,就得到了策略迭代算法:
- 初始化策略
π_0(例如随机策略)。 - 对
i = 0, 1, 2, ...重复:- 策略评估:计算当前策略
π_i的价值函数V^{π_i}(通过迭代策略评估直至收敛)。 - 策略改进:通过贪心方式更新策略:
π_{i+1}(s) = argmax_a Σ_{s', r} P(s', r | s, a) [r + γ V^{π_i}(s')]
- 策略评估:计算当前策略
- 当策略不再变化(
π_{i+1} = π_i)时停止。


策略迭代算法保证收敛到最优策略 π^* 和最优价值函数 V^*。

价值迭代算法
策略迭代需要在每次改进前将策略评估到收敛,这可能计算量较大。价值迭代是一种更简洁的方法,它直接将贝尔曼最优方程转化为更新规则,本质上相当于“只进行一次策略评估就进行策略改进”。
初始化 V_0(s)(例如全0)。
对 k = 0, 1, 2, ... 重复:
V_{k+1}(s) = max_a Σ_{s', r} P(s', r | s, a) [r + γ V_k(s')],对所有 s ∈ S
当 V_{k+1} 与 V_k 足够接近时停止。此时 V_k 近似满足贝尔曼最优方程,因此近似为 V^*。最优策略可以通过对 V_k 贪心得到。
价值迭代是动态规划中常用的控制算法。


动态规划的扩展



标准的动态规划算法(如同步价值迭代)需要遍历所有状态进行更新,计算复杂度为 O(|S|^2 |A|)(对于状态价值函数)或 O(|S| |A|^2)(对于动作价值函数)。对于大规模问题,这可能是不可行的。
以下是一些扩展方法:

- 异步动态规划:不按固定顺序更新所有状态,而是以任意顺序逐个或分批更新状态。只要每个状态都被持续访问,算法仍然保证收敛。这可以显著减少计算开销。
- 就地更新:只维护一个价值表,用新值立即覆盖旧值。
- 优先级扫描:根据贝尔曼误差的大小来确定状态更新的优先级,优先更新误差大的状态。
- 实时动态规划:只更新与智能体当前或近期可能访问的状态相关的部分价值函数。
- 采样备份:在更新状态价值时,不使用完整的模型动态(需要对所有可能的下一个状态和奖励求和),而是使用从模型中采样得到的一个或几个转移样本
(s, a, r, s')来进行更新。这打破了维数灾难,并且是后续无模型方法(如蒙特卡洛法和时序差分学习)的基础。
总结


本节课我们一起学习了强化学习的核心数学框架——马尔可夫决策过程,以及解决MDP问题的第一类方法——动态规划。
我们首先介绍了MDP如何形式化智能体与环境的序列决策交互,并定义了折扣回报作为智能体的优化目标。然后,我们引入了价值函数(V^π 和 Q^π)和最优价值函数(V^* 和 Q^*)来衡量和寻找最佳行为。
贝尔曼方程揭示了价值函数的内在递归结构,是连接预测和控制的桥梁。我们区分了RL中的预测(策略评估)和控制两类问题。
在动态规划部分,我们学习了:
- 迭代策略评估:通过迭代求解贝尔曼期望方程来评估给定策略的价值。
- 策略改进定理:基于价值函数进行贪心改进总能得到不劣于原策略的新策略。
- 策略迭代:交替进行策略评估(至收敛)和策略改进,直至找到最优策略。
- 价值迭代:直接迭代求解贝尔曼最优方程,是策略迭代的一种高效变体。


最后,我们简要讨论了异步动态规划和采样备份等扩展,以应对大规模问题。

动态规划假设我们拥有环境的完整模型(P 和 R)。在接下来的课程中,我们将放松这一假设,探索如何在仅通过与环境采样交互的情况下,仍然应用动态规划的思想,这就是无模型的强化学习方法,如蒙特卡洛法和时序差分学习。
04:动态规划算法的理论基础 🧮
在本节课中,我们将深入探讨动态规划的理论基础。我们将回顾贝尔曼方程,引入贝尔曼算子,并重新审视策略迭代、策略评估和价值迭代算法。我们将基于这些算子来证明这些算法的收敛性质。


数学预备知识 📐
在进入正题之前,我们先回顾一些必要的泛函分析基础概念,确保大家理解一致。
范数与向量空间
向量空间是大家熟悉的概念。范数是一个从向量空间映射到实数域的映射,它具有以下性质:
- 总是非负的。
- 满足齐次性。
- 满足三角不等式。
在本课程中,我们主要接触的向量空间是 R^d,常用的范数是无穷范数(L∞ 范数)和有时由分布加权的 L2 范数。
压缩映射
对于一个装备了范数的向量空间,一个从该空间到自身的映射 T 被称为 α-压缩映射(系数为 α),如果对于空间中的任意两点,应用该映射后,两点之间的距离至少缩小 α 倍。

其数学公式为:
||T(u) - T(v)|| ≤ α ||u - v||

如果 α 在 0 和 1 之间,我们称 T 是非扩张的;如果 α 严格小于 1,则是一个完全的压缩映射。
每个压缩映射都是利普希茨连续的,这意味着它将收敛序列映射为收敛序列。
不动点


向量空间中的一个点 x 被称为映射 T 的不动点,如果应用该算子后点保持不变,即 T(x) = x。
巴拿赫不动点定理
这是本节的核心定理。它指出:在一个完备的赋范向量空间(即任何柯西序列的极限仍在空间内)中,如果一个映射 T 是一个系数为 γ 的压缩映射,那么:
- T 存在唯一的不动点 x*。
- 由
x_{n+1} = T(x_n)定义的序列会以几何速率收敛到该不动点 x*。
收敛速率满足:
||x_n - x*|| ≤ γ^n ||x_0 - x*||
马尔可夫决策过程与值函数回顾 🔄

上一节我们介绍了马尔可夫决策过程和动态规划算法。现在,让我们快速回顾几个核心概念,为引入算子做准备。
马尔可夫决策过程定义
我们使用 MDP 的第二种定义,包含以下要素:
- S: 状态集合
- A: 动作集合
- P: 状态转移动态(
P(s' | s, a)) - R: 期望奖励函数(
R(s, a)) - γ: 折扣因子(
0 ≤ γ < 1)
值函数定义
- 状态值函数 V^π(s): 从状态 s 开始,遵循策略 π 所能获得的期望折扣回报。
- 动作值函数 Q^π(s, a): 从状态 s 采取动作 a 开始,然后遵循策略 π 所能获得的期望折扣回报。
- 最优值函数 V(s), Q(s, a): 对所有可能策略取最大值得到的最优值函数。
贝尔曼方程
对于任意策略 π,其值函数满足贝尔曼期望方程:
V^π(s) = Σ_a π(a|s) [ R(s, a) + γ Σ_{s'} P(s'|s, a) V^π(s') ]
最优值函数满足贝尔曼最优性方程:
V*(s) = max_a [ R(s, a) + γ Σ_{s'} P(s'|s, a) V*(s') ]
引入贝尔曼算子 🧠
现在,我们基于贝尔曼方程引入关键的数学工具——贝尔曼算子。
贝尔曼最优性算子 T*
我们定义在所有有界实值函数空间 V 上的贝尔曼最优性算子 T。对于任意函数 f ∈ V,算子 T 将其映射为另一个函数,该函数在状态 s 处的取值为:
(T* f)(s) = max_a [ R(s, a) + γ Σ_{s'} P(s'|s, a) f(s') ]

请注意,如果我们将 f 替换为最优值函数 V,那么根据贝尔曼最优性方程,右边就等于 **V(s)。这意味着 V 是算子 T 的一个不动点。
实际上,算子 T* 具有三个非常重要的性质:
- V* 是其唯一的不动点。
- T* 是关于无穷范数 ||·||_∞ 的 γ-压缩映射。
- T* 是单调的:如果对于所有状态 s 有
U(s) ≤ V(s),那么对于所有状态 s 也有(T* U)(s) ≤ (T* V)(s)。
性质1由定义直接得出。下面我们来证明性质2和3。
证明 T* 是压缩映射
我们需要证明:||T* V - T* U||_∞ ≤ γ ||V - U||_∞。
我们从定义出发,利用不等式 |max f - max g| ≤ max |f - g|,经过推导可得上述结论。这证实了 T* 确实是一个系数为 γ 的压缩映射。
证明 T* 是单调的
我们需要证明:如果对于所有 s 有 U(s) ≤ V(s),那么对于所有 s 也有 (T* U)(s) ≤ (T* V)(s)。
根据假设和算子的定义,我们可以直接比较 (T* V)(s) 和 (T* U)(s) 的表达式。利用 max f - max g ≤ max (f - g) 这个不等式,并结合 U(s) ≤ V(s) 的假设,可以证明结论成立。

价值迭代的收敛性证明 ✅
上一节我们介绍了价值迭代算法。现在,我们可以通过贝尔曼算子的视角重新审视它,并证明其收敛性。

价值迭代的更新规则是:
V_{k+1}(s) = max_a [ R(s, a) + γ Σ_{s'} P(s'|s, a) V_k(s') ]
这恰好就是应用一次贝尔曼最优性算子:V_{k+1} = T* V_k。
由于我们已经证明 T* 是一个压缩映射,并且 V* 是其唯一不动点,根据巴拿赫不动点定理,由 V_{k+1} = T* V_k 生成的序列 {V_k} 一定会以几何速率收敛到 V*。
具体来说,收敛速度满足:
||V_k - V*||_∞ ≤ γ^k ||V_0 - V*||_∞
当折扣因子 γ < 1 时,随着迭代次数 k 增加,上式右侧趋于 0,因此算法收敛。
策略评估与贝尔曼期望算子 📈
类似地,我们可以为策略评估问题定义贝尔曼期望算子 T^π。
对于给定的策略 π,算子 T^π 定义为:
(T^π f)(s) = Σ_a π(a|s) [ R(s, a) + γ Σ_{s'} P(s'|s, a) f(s') ]
这个算子同样具有优良的性质:
- 策略 π 对应的真实值函数 V^π 是其唯一不动点。
- T^π 也是关于无穷范数的 γ-压缩映射。
- T^π 也是单调的。
其证明思路与 T* 类似。
因此,迭代策略评估算法 V_{k+1} = T^π V_k 同样是一个压缩映射的重复应用。根据巴拿赫不动点定理,该序列必然收敛到不动点 V^π,从而证明了该算法的收敛性。

扩展到 Q 值函数 🔄
上述所有关于值函数 V 的讨论和算子定义,都可以平行地推广到动作值函数 Q 上。
我们可以在 Q 值函数空间上定义对应的贝尔曼最优性算子 T* 和贝尔曼期望算子 T^π。这些算子同样是 γ-压缩映射,并且具有单调性和唯一不动点(分别是 Q* 和 Q^π)。因此,基于 Q 值的各种动态规划算法也具有相同的收敛保证。
近似动态规划概述 🔮

到目前为止,我们都假设完全了解 MDP 模型(即知道精确的 P 和 R),并且能够精确表示值函数(例如用表格存储每个状态的值)。然而在实际中,这两个条件经常无法满足:
- 模型未知:我们不知道真实的环境动态和奖励。
- 函数近似:当状态或动作空间很大时,无法用表格精确存储值函数,需要使用参数化函数(如线性函数、神经网络)来近似。
当我们违反这些假设时,就会引入误差:
- 采样/估计误差:在模型未知时,我们只能通过采样来近似贝尔曼算子中的期望。
- 近似误差:使用的函数近似器可能无法精确表示真实的值函数。
我们的目标仍然是在这些近似条件下,找到一个最优或接近最优的策略。
近似价值迭代
在近似设定下,价值迭代的更新步骤 V_{k+1} = T* V_k 无法精确计算。我们只能得到一个近似值:
V_{k+1} ≈ T* V_k

这里的近似可能来自采样,也可能来自函数近似。
关键问题:在这种近似下,算法是否仍然收敛到最优值函数?
答案:一般来说,不一定。如果没有对近似性质的假设,序列可能不收敛,或者收敛到非最优的点。
即使我们假设模型已知,仅引入函数近似也可能导致发散。Baird 的反例表明,在一个简单的两状态 MDP 中使用线性函数近似进行近似价值迭代,会导致值函数估计发散。
近似策略迭代
在近似策略迭代中,主要误差来自策略评估步骤。我们无法精确计算出当前策略的值函数 V^π,只能得到一个近似值。
这导致两个问题:
- 值函数序列是否收敛到 Q*? 通常不能保证。
- 策略序列是否收敛到最优策略? 通常也不能保证。

更重要的是,在精确动态规划中,策略改进步骤(贪心策略)能保证策略性能提升。但在近似设定下,由于评估不准确,贪心操作不能保证一定得到比原策略更好的策略。
近似值函数的策略性能边界 🎯
尽管近似动态规划缺乏全局收敛保证,但我们仍然可以分析:从一个近似值函数导出的贪心策略,其性能到底如何?
定理:设 Q 是 Q* 的一个近似,π 是基于 Q 的贪心策略。那么,贪心策略 π 的性能满足以下边界:
||Q* - Q^π||_∞ ≤ (2γ / (1-γ)) ||Q* - Q||_∞
这个定理非常重要,它告诉我们:
- 性能边界与近似误差成正比:如果我们的近似值函数 Q 非常接近最优 Q*,那么由此产生的贪心策略 π 的性能也会接近最优。
- 折扣因子 γ 的影响巨大:
- 当 γ 较小(接近 0)时,边界系数
2γ/(1-γ)也很小。这意味着即使近似比较粗糙,得到的策略也可能很不错。问题相对简单。 - 当 γ 接近 1 时,边界系数会变得非常大。这意味着即使我们对 Q* 的近似很好,由此产生的贪心策略性能也可能远低于最优。问题更具挑战性。
- 当 γ 较小(接近 0)时,边界系数
这个定理为近似动态规划提供了一丝希望:我们不一定需要精确收敛到 V* 或 Q* 才能得到一个好策略。在迭代的中间阶段,我们可能已经获得了足够好的值函数近似,从而能导出一个优秀的策略。
总结 📝
本节课我们一起深入学习了动态规划算法的理论基础。
- 数学基础:我们回顾了压缩映射和巴拿赫不动点定理,这是证明算法收敛性的核心工具。
- 贝尔曼算子:我们引入了贝尔曼最优性算子 T* 和贝尔曼期望算子 T^π,并证明了它们都是压缩映射且具有单调性。
- 算法收敛性:利用算子的压缩性,我们严格证明了价值迭代和迭代策略评估算法能够收敛到各自的不动点(分别是 V* 和 V^π)。
- 近似动态规划:我们探讨了当模型未知或必须使用函数近似时,动态规划算法所面临的挑战。近似可能导致算法不收敛或策略性能无法保证提升。
- 性能边界:我们证明了一个关键定理,该定理量化了从近似值函数推导出的贪心策略与最优策略之间的性能差距,并揭示了折扣因子 γ 在此过程中的重要作用。

理解这些理论为我们后续学习更复杂的、基于采样的强化学习算法(如蒙特卡洛方法和时序差分学习)奠定了坚实的基础。在接下来的课程中,我们将看到如何在实际问题中应用这些动态规划原理的近似版本。
05:无模型预测 🎯


在本节课中,我们将学习无模型预测。我们将探讨如何在不了解环境内部模型(即马尔可夫决策过程)的情况下,仅通过与环境的交互来估计策略的价值函数。这是强化学习应用于现实世界问题的关键一步。


1. 引言与背景 📚


上一节我们介绍了基于动态编程的规划,它要求我们拥有环境的完整模型。本节中,我们将放松这个假设,转向无模型方法。
无模型预测的目标是:在无法直接访问环境动态模型,但可以通过交互获得经验样本的情况下,估计给定策略的价值函数。这是后续学习最优策略(即无模型控制)的基础。


2. 蒙特卡洛方法 🎲


蒙特卡洛方法的核心思想是:通过采样完整的交互轨迹(称为“幕”或“回合”),并使用这些轨迹的回报来估计价值函数。
2.1 从多臂老丨虎丨机到状态老丨虎丨机


首先,回顾一个简单例子:多臂老丨虎丨机。我们的目标是估计每个动作的价值 Q(a)。其真实值是给定动作后的期望奖励:
Q(a) = E[R | A = a]
我们可以通过采样奖励并计算平均值来估计它。增量更新公式为:
Q_{t+1}(A_t) = Q_t(A_t) + α * (R_t - Q_t(A_t))
其中 α 是步长参数。当 α = 1/N(A_t) 时,此更新等价于计算算术平均。
现在,我们将其扩展到状态老丨虎丨机。此时,状态会变化,但动作不影响状态转移(即没有长期后果)。目标是估计给定状态和动作下的期望奖励 Q(s, a)。
2.2 引入函数近似
到目前为止,我们主要使用查表法,即为每个状态(或状态-动作对)存储一个独立的值。然而,当状态空间巨大时,这不可行。


解决方案是使用函数近似。我们用一个参数化函数(如线性函数或神经网络)来表示价值函数,记为 V_w(s) 或 Q_w(s, a),其中 w 是参数向量。更新参数 w,而非更新表格中的单个条目。
对于线性函数近似,我们假设有一个固定的特征映射 x(s),将状态转换为特征向量。价值函数是参数与特征的內积:
V_w(s) = w^T * x(s) = Σ_i w_i * x_i(s)
我们的目标是最化预测值与真实价值之间的均方误差。使用随机梯度下降,参数更新规则为:
w_{t+1} = w_t + α * (V^π(s_t) - V_w(s_t)) * x(s_t)
当然,我们无法直接获得 V^π(s_t),后续会讨论如何用采样目标替代它。
查表法是函数近似的特例:特征向量是状态的独热编码。


3. 时序差分学习 ⚡
蒙特卡洛方法必须等待整幕结束才能获得回报进行更新,这在长序列中效率低下。时序差分学习 通过自举解决了这个问题。


3.1 TD(0) 算法
回顾贝尔曼方程:V^π(s) = E[R + γ * V^π(S') | S = s]。TD学习将方程右侧的期望值替换为单次采样,并用当前价值估计 V 来近似 V^π,然后朝着这个目标做部分更新。


对于表格型方法,TD(0)更新为:
V(S_t) ← V(S_t) + α * [R_{t+1} + γ * V(S_{t+1}) - V(S_t)]
其中,δ_t = R_{t+1} + γ * V(S_{t+1}) - V(S_t) 称为时序差分误差。
将其扩展到动作价值函数,就得到了 Sarsa 算法:
Q(S_t, A_t) ← Q(S_t, A_t) + α * [R_{t+1} + γ * Q(S_{t+1}, A_{t+1}) - Q(S_t, A_t)]
3.2 与MC和DP的对比
以下是三种方法的比较:
- 动态规划:需要模型,使用自举,考虑所有可能的转移(广度)。
- 蒙特卡洛:无模型,不使用自举,采样完整轨迹(深度)。
- 时序差分:无模型,使用自举,采样单步转移。


TD学习的优势在于:
- 无需等待幕结束,可以在线学习。
- 能处理非终止的持续环境。
- 通常比蒙特卡洛方法具有更低的方差。


然而,TD学习因为使用自举而引入了偏差,且价值估计不准确时,信息在时间上反向传播较慢。
4. TD(λ) 与资格迹 🧵


我们可以在一步TD(偏差大、方差小)和蒙特卡洛(偏差小、方差大)之间进行折中,这就是 n步TD 和 TD(λ) 方法。
4.1 n步回报


n步回报的定义如下:
G_t^{(n)} = R_{t+1} + γ R_{t+2} + ... + γ^{n-1} R_{t+n} + γ^n V(S_{t+n})
当 n=1 时,即为TD(0);当 n 足够大直至幕结束时,即为蒙特卡洛。
4.2 λ回报与资格迹
λ回报 G_t^λ 是所有n步回报的指数加权平均,权重为 (1-λ)λ^{n-1}。当 λ=0 时,等价于TD(0);当 λ=1 时,等价于蒙特卡洛。


直接计算λ回报仍需等待幕结束。资格迹 提供了一种高效在线实现TD(λ)的机制。对于线性函数近似,资格迹 e_t 是一个向量,其更新规则为:
e_t = γλ * e_{t-1} + x(S_t)
参数更新规则为:
w_{t+1} = w_t + α * δ_t * e_t
其中 δ_t 是TD误差。资格迹追踪了最近访问过的状态特征,并根据时间和距离进行衰减,使得TD误差可以高效地分配给之前的状态。

5. 不同方法的深入比较 ⚖️



5.1 批量更新下的差异
考虑一个有限经验批次。在这个设定下:
- 蒙特卡洛 收敛于对观测回报的最小均方误差解。
- 时序差分 收敛于由经验数据构建的最大似然马尔可夫模型的解。
这意味着,在完全可观测的马尔可夫环境中,TD方法通常更有效,因为它利用了马尔可夫性。而在部分可观测或非马尔可夫环境中,蒙特卡洛方法可能更鲁棒,因为它不对状态信号的充分性做假设。
5.2 偏差-方差权衡
蒙特卡洛的回报是真实价值函数的无偏估计,但方差可能很高。TD(0)的目标是有偏的(除非价值函数已收敛),但方差较低。n步TD和TD(λ)通过选择中间范围的n或λ,试图在偏差和方差之间取得更好的平衡。
总结 📝



本节课中我们一起学习了无模型预测的核心方法。
- 蒙特卡洛方法:通过采样完整幕的回报来估计价值,无偏但高方差,且学习速度慢。
- 时序差分学习:通过单步采样和自举进行更新,可以在线学习,方差较低但有偏差,且信用分配较慢。
- 多步TD与TD(λ):折中了MC和TD的特性,通过使用n步回报或λ回报来平衡偏差和方差。
- 资格迹:提供了高效在线实现TD(λ)的机制,能更快速地将时间上的误差信号分配回之前的状态。



理解这些预测方法是学习下一课——无模型控制(即如何优化策略)的重要基础。
06:无模型控制 🎮


在本节课中,我们将学习如何在不依赖环境模型的情况下,直接通过与环境交互来优化智能体的策略。我们将从策略迭代的模型化版本出发,逐步推导出无模型的蒙特卡洛控制和时序差分控制算法,并探讨离策略学习、Q学习及其变种。
概述 📋
上一节课我们介绍了无模型预测,即如何在不了解环境动态的情况下,估计给定策略的价值函数。本节课,我们将在此基础上更进一步,探讨无模型控制。核心目标是优化策略,而不仅仅是评估它。我们将学习如何通过采样经验,直接改进策略,最终找到最优策略。
1. 蒙特卡洛控制 🎲
上一节我们介绍了无模型预测,本节中我们来看看如何利用它进行控制。我们首先回顾动态规划中的策略迭代方法,并将其改造为无模型版本。
1.1 策略迭代回顾
策略迭代包含两个交替进行的步骤:
- 策略评估:计算当前策略
π的价值函数Vπ。 - 策略改进:根据价值函数,改进策略(例如,使其对
Vπ贪婪)。
在动态规划中,这两个步骤都依赖于已知的马尔可夫决策过程模型。为了做到无模型,我们需要用采样来近似这两个步骤。
1.2 从状态价值到动作价值
一个直接的挑战是:基于状态价值函数 V(s) 的贪婪策略改进需要模型,因为我们需要知道在状态 s 下采取每个动作 a 后的状态转移概率。
解决方案:转而估计动作价值函数 Q(s, a)。Q(s, a) 表示在状态 s 下采取动作 a,然后遵循策略 π 所能获得的期望回报。贪婪策略改进变得非常简单:在状态 s 下,只需选择 Q(s, a) 值最大的动作 a。


公式表示为:
π'(s) = argmax_a Q(s, a)
1.3 广义策略迭代与探索
如果我们简单地将蒙特卡洛预测用于策略评估,然后立即采用贪婪策略,会面临探索不足的问题:贪婪策略可能永远不会尝试某些状态-动作对,导致其 Q 值估计不准确,进而可能错误地排除最优动作。
解决方案:采用 ε-贪婪策略 进行策略改进。即以 1-ε 的概率选择贪婪动作,以 ε 的概率随机选择任意动作。这保证了持续的探索。
同时,我们也不再将策略评估进行到完全收敛,而是进行广义策略迭代:只对当前策略进行部分评估(例如,运行几个回合),然后立即进行部分改进(采用 ε-贪婪)。这种评估与改进的交错进行,在满足一定条件下仍能收敛到最优策略。
1.4 收敛条件:GLIE

为了保证蒙特卡洛控制算法收敛,行为策略需要满足 GLIE 条件:
- 无限探索:每个状态-动作对都被访问无限次。
- 贪心极限:策略最终会收敛到一个贪心策略(例如,让 ε 随时间衰减到 0)。

一个满足 GLIE 的策略示例是 ε-贪婪策略,其中 ε 按 ε_k = 1/k 衰减(k 是回合数)。
2. 时序差分控制 ⚡
上一节我们基于蒙特卡洛方法构建了控制算法,本节我们利用时序差分学习的优势来构建更高效的控制算法。
蒙特卡洛控制需要等到回合结束才能更新,而时序差分学习可以在每一步之后立即更新,学习更快,方差也更低。
2.1 SARSA 算法
SARSA 是一种同策略时序差分控制算法。其名称来源于更新所涉及的元素序列:(S_t, A_t, R_{t+1}, S_{t+1}, A_{t+1})。
其更新公式为:
Q(S_t, A_t) ← Q(S_t, A_t) + α [ R_{t+1} + γ * Q(S_{t+1}, A_{t+1}) - Q(S_t, A_t) ]
其中:
α是学习率。γ是折扣因子。A_{t+1}是根据当前策略(如 ε-贪婪)在状态S_{t+1}下选择的动作。
SARSA 的本质是:用当前策略在下一步实际会采取的动作的价值,来估计当前状态-动作对的价值,并以此进行更新。
以下是 SARSA 的表格版本算法伪代码:
初始化 Q(s, a),对所有 s ∈ S, a ∈ A
对每个回合:
初始化状态 S
根据 Q 派生的策略(如 ε-贪婪)选择动作 A
对回合中的每一步:
执行动作 A,观察奖励 R 和下一个状态 S'
根据 Q 派生的策略(如 ε-贪婪)选择动作 A'
Q(S, A) ← Q(S, A) + α [ R + γ * Q(S', A') - Q(S, A) ]
S ← S', A ← A'
直到 S 是终止状态


2.2 SARSA 的收敛性
与蒙特卡洛控制类似,要保证 SARSA 收敛到最优动作价值函数,行为策略也需要满足 GLIE 条件。


3. 离策略学习与 Q 学习 🧠
上一节介绍的 SARSA 是同策略算法,本节我们引入更强大的离策略学习概念,并重点学习著名的 Q-learning 算法。
3.1 同策略 vs. 离策略
- 同策略学习:评估和改进的策略与生成行为的策略是同一个。
- 离策略学习:评估和改进的策略(目标策略
π)与生成行为的策略(行为策略μ)不同。
离策略学习的优势:
- 可以从历史数据、专家演示或其他智能体的经验中学习。
- 可以同时学习多个策略的价值。
- 可以在遵循探索性行为策略(如随机策略)的同时,学习最优的贪婪策略。
3.2 Q-learning 算法

Q-learning 是一种离策略时序差分控制算法,也是最著名的强化学习算法之一。它的目标策略 π 是对当前 Q 值估计的贪婪策略,而行为策略 μ 可以是任何能充分探索的策略(如 ε-贪婪)。

其更新公式为:
Q(S_t, A_t) ← Q(S_t, A_t) + α [ R_{t+1} + γ * max_a Q(S_{t+1}, a) - Q(S_t, A_t) ]
关键区别在于更新目标:Q-learning 使用在下一状态 S_{t+1} 下所有可能动作中的最大 Q 值来构建目标,而不管行为策略实际会采取哪个动作。这相当于它假设在下一步会遵循贪婪的目标策略。
3.3 Q-learning vs. SARSA:悬崖行走示例
通过一个“悬崖行走”的网格世界示例,可以直观理解两者的区别:
- SARSA:由于是同策略,它会考虑到行为策略(ε-贪婪)偶尔会随机选择动作而掉下悬崖的风险。因此,它学到的策略会倾向于走一条离悬崖稍远的“安全”路径。
- Q-learning:作为离策略算法,它直接学习最优贪婪策略的价值。这个策略是贴着悬崖走的最短路径。但如果用 ε-贪婪策略执行,由于探索,偶尔会掉下悬崖,导致平均性能变差。
结论:SARSA 学到的策略更“稳健”,考虑了探索时的风险;而 Q-learning 学到的策略更“最优”,但执行时需要谨慎处理探索。
3.4 Q-learning 的收敛性
Q-learning 的收敛条件比 SARSA 更宽松:只需要行为策略 μ 能无限次访问所有状态-动作对,而不要求其最终变得贪婪。同时,学习率 α 需要满足 Robbins-Monro 条件(总和无穷,平方和有限)。
4. Q-learning 的改进:Double Q-Learning 🛡️
Q-learning 存在一个已知问题:它可能会过高估计动作价值。
4.1 过高估计的原因
Q-learning 的更新目标 max_a Q(S_{t+1}, a) 存在一个偏差:它使用相同的 Q 函数既选择最大值的动作,又评估该动作的价值。由于 Q 值估计存在随机误差(噪声),最大值操作更可能选中被正向高估的动作,然后用这个高估的值进行更新,导致偏差传播。

4.2 Double Q-Learning 解决方案



Double Q-Learning 通过维护两个独立的动作价值函数估计 Q1 和 Q2 来解决这个问题。更新时,随机选择一个函数(如 Q1)用于选择动作,用另一个函数(Q2)来评估该动作的价值。


更新 Q1 的公式示例:
A* = argmax_a Q1(S_{t+1}, a)
Q1(S_t, A_t) ← Q1(S_t, A_t) + α [ R_{t+1} + γ * Q2(S_{t+1}, A*) - Q1(S_t, A_t) ]
通过这种解耦,选择动作时的高估与评估动作时的误差不再相关,从而显著减少了过高估计的偏差。Double Q-Learning 在实践中(尤其是在深度 Q 网络中)能带来显著的性能提升。



5. 通用的离策略学习:重要性采样 ⚖️
前面的 Q-learning 是一种特殊的离策略学习(目标策略是贪婪策略)。本节我们介绍一种适用于任何目标策略的通用离策略学习方法——重要性采样。
5.1 重要性采样原理
重要性采样是一种在分布 P 下估计期望 E_{X~P}[f(X)] 的技术,但我们只有从另一个分布 Q 中采样的数据。其核心是对样本进行加权:
E_{X~P}[f(X)] = E_{X~Q} [ (P(X) / Q(X)) * f(X) ]
权重 P(X)/Q(X) 称为重要性采样比率。它放大了在目标分布 P 中更常见、但在行为分布 Q 中罕见的样本。
5.2 在强化学习中的应用
在离策略蒙特卡洛预测中,为了估计目标策略 π 的价值,我们使用行为策略 μ 生成的轨迹,并对整个轨迹的回报 G_t 进行加权。权重是该轨迹在 π 下出现的概率与在 μ 下出现的概率之比。由于动态环境模型相同,这个比率简化为轨迹中每个动作选择概率的比值之积。
ρ_t^T = Π_{k=t}^{T-1} (π(A_k|S_k) / μ(A_k|S_k))
V(S_t) ← V(S_t) + α [ ρ_t^T * G_t - V(S_t) ]
这种方法方差可能很高,尤其是轨迹很长时。
5.3 离策略时序差分学习
我们可以将重要性采样应用于单步 TD 更新,从而得到方差更低的离策略 TD 算法。对于状态价值函数,只需要对当步的 TD 误差乘以单步重要性采样比率:
ρ_t = π(A_t|S_t) / μ(A_t|S_t)
V(S_t) ← V(S_t) + α [ ρ_t * (R_{t+1} + γ * V(S_{t+1}) - V(S_t)) ]
对于动作价值函数,有一个更优雅的算法叫 Expected SARSA。它使用目标策略 π 下下一状态的期望价值,而不是样本动作价值:
Q(S_t, A_t) ← Q(S_t, A_t) + α [ R_{t+1} + γ * Σ_a π(a|S_{t+1}) * Q(S_{t+1}, a) - Q(S_t, A_t) ]


Expected SARSA 是更通用的算法:
- 当目标策略
π是贪婪策略时,它退化为 Q-learning。 - 当目标策略
π与行为策略μ相同,且使用单个样本来近似期望时,它退化为 SARSA。 - 它本身作为同策略算法时,比 SARSA 方差更低。
总结 🎯
本节课中我们一起学习了无模型控制的核心思想与方法:
- 核心框架:我们将动态规划中的策略迭代和价值迭代思想迁移到无模型设置中,通过采样进行近似。
- 关键算法:
- 蒙特卡洛控制:基于回合更新,需要 GLIE 探索策略保证收敛。
- SARSA:同策略 TD 控制算法,学习当前行为策略的价值并进行改进。
- Q-learning:离策略 TD 控制算法的代表,直接学习最优贪婪策略的价值,是深度强化学习的基础。
- 高级主题:
- Double Q-Learning:通过解耦动作的选择与评估,有效缓解 Q-learning 中的过高估计问题。
- 重要性采样:为评估任意目标策略提供了通用工具。
- Expected SARSA:一个统一且低方差的算法框架,将 SARSA 和 Q-learning 囊括为特例。

理解这些算法之间的联系与区别——特别是同策略与离策略、基于采样与基于期望的更新——是掌握无模型控制的关键。它们为后续处理大规模状态空间的函数近似方法奠定了坚实基础。
07:函数近似 🧠


概述
在本节课中,我们将学习强化学习中的函数近似。我们将探讨为什么需要函数近似,介绍几种不同的函数近似方法,并深入讲解基于梯度的算法、线性函数近似以及深度强化学习的基础。我们还将讨论这些算法的收敛性与发散性问题。


为什么需要函数近似? 🤔
上一节我们介绍了强化学习的基本框架。本节中,我们来看看为什么需要函数近似。


智能体内部的策略、价值函数和模型更新都可以被视为函数。例如,策略将智能体状态映射到动作,价值函数将状态映射到对未来累积奖励的估计值。我们希望从经验中学习这些函数。
使用函数近似有多个原因:
- 灵活性:通过经验学习规则比手动编码所有规则更灵活、更强大。
- 处理大规模状态空间:许多问题(如围棋、直升机控制)的状态空间是连续或极其庞大的,无法用查表法存储所有状态的价值。
- 部分可观测性:环境状态可能无法完全通过观测获得,我们需要对信息进行总结。
当使用神经网络来表示这些函数时,这个子领域通常被称为深度强化学习。
价值函数近似
到目前为止,我们主要考虑的是查表法。但在状态过多时,查表法存在内存不足、学习速度慢且无法利用状态间相似性(即泛化)的问题。


我们的解决方案是引入函数近似。在本讲座中,我们专注于价值预测。这意味着我们将引入一个参数向量 w,参数化价值函数:V(s) ≈ V(s; w)。然后,我们可以使用蒙特卡洛或时序差分等算法更新参数 w。如果函数类选择得当,我们将能够泛化到未见过的状态。
我们还需要简要提及智能体状态更新函数。在部分可观测环境中,观测可能不等于环境状态。因此,智能体需要维护一个内部状态,该状态更新函数 s' = u(s, a, o; ω) 也可以被参数化(参数为 ω),它可能包含记忆等功能。在后续的幻灯片中,提到的“状态”均指智能体状态。


函数类别
以下是几种不同的函数近似类别:
- 查表法:每个状态有独立的条目。
- 状态聚合:将多个状态分组到同一个分区,共享价值估计。这是泛化的一种简单形式。
- 线性函数近似:假设有一个固定的特征映射
x = φ(s),将状态映射到特征向量。价值函数是这些特征的线性组合:V(s; w) = w^T · x(s) = Σ_i w_i · x_i(s)。查表法和状态聚合都是线性近似的特例。 - 可微函数近似:价值函数是其参数 w 的可微(通常是非线性)函数,例如深度神经网络。这允许使用基于梯度的算法,并且非常灵活,减少了对手工设计特征的依赖。
强化学习的数据具有一些特定性质,可能会与函数类产生交互:
- 经验并非独立同分布。
- 智能体的策略会影响接收到的数据。
- 回归目标通常是非平稳的(由于策略变化或自举)。
- 环境本身可能非平稳或非常庞大。
选择哪种函数近似取决于目标:
- 查表法:理论完善,收敛稳定,但不泛化,无法扩展。
- 线性近似:理论较好,但依赖于手工设计的特征。
- 非线性近似(如神经网络):理论理解较少,但扩展性好,在实践中通常表现优异,且对特征工程的依赖更少。


基于梯度的算法 ⚙️
上一节我们介绍了不同的函数类别。本节中,我们来看看如何用梯度下降法来学习这些函数的参数。
我们首先简要回顾梯度下降和随机梯度下降。目标是最小化某个标量函数 J(w)。梯度下降的更新规则为:
w ← w - α · ∇_w J(w)
其中 α 是步长。


在价值函数近似中,我们可以定义目标函数为均方价值误差:
J(w) = E_π[(V^π(s) - V(s; w))^2]
其梯度为:
∇_w J(w) = -2 E_π[(V^π(s) - V(s; w)) · ∇_w V(s; w)]
使用随机梯度下降,我们采样状态 s,并用一个目标(如蒙特卡洛回报 G_t)代替真实价值 V^π(s),得到更新:
w ← w + α · (G_t - V(s_t; w)) · ∇_w V(s_t; w)
对于时序差分学习,我们用TD目标 r + γV(s'; w) 代替 G_t,得到类似的更新形式。
在表示上,∇_w V(s; w) 常简写为 ∇V(s),意指关于参数 w 在当前位置的梯度。
线性函数近似深入
线性函数近似将状态表示为固定特征向量 x(s)。价值估计为 V(s; w) = w^T · x(s)。
粗编码 是构建特征的一种方法。它在状态空间上定义多个重叠的“感受野”(如圆圈)。对于一个给定状态,落入其内的感受野对应的特征值为1,否则为0(或根据距离给出连续值)。这样,更新一个状态的价值会影响到共享特征的其他状态,实现了泛化。
粗编码的性质受感受野大小影响:
- 窄泛化:感受野小,价值函数分辨率高,但学习可能较慢。
- 宽泛化:感受野大,学习更快,但最终价值函数的精度可能受限。

需要注意的是,使用函数近似(包括线性近似)后,智能体观察到的特征表示可能是非马尔可夫的,因为细微的状态变化可能不会立即反映在特征中。

线性模型无关预测
对于线性近似,我们可以显式地写出基于蒙特卡洛和时序差分的学习规则。
蒙特卡洛线性策略评估:
w ← w + α · (G_t - w^T · x_t) · x_t
其中 x_t = x(s_t)。蒙特卡洛回报 G_t 是真实价值 V^π(s_t) 的无偏估计。在适当条件下,该算法能收敛到全局最优解。
时序差分线性策略评估:
w ← w + α · (r_t + γ w^T · x_{t+1} - w^T · x_t) · x_t
TD目标 r_t + γ V(s_{t+1}) 是有偏的。这引入了一个非平稳的回归问题,因为目标本身依赖于正在更新的参数 w。
基于价值函数近似的控制 🎮
控制算法可以自然地扩展到函数近似。我们进行某种形式的策略迭代,在策略评估步骤使用函数近似(如线性近似)来估计动作价值函数 Q(s, a; w)。
有两种常见方式用线性函数表示 Q 值:
- 动作输入:特征向量同时依赖于状态和动作
x(s, a),共享权重w:Q(s, a; w) = w^T · x(s, a)。 - 动作输出:特征向量仅依赖于状态
x(s),但为每个动作a设置独立的权重向量w_a,或者等价地使用一个权重矩阵 W:Q(s, a; W) = x(s)^T · W e_a,其中e_a是动作a的one-hot向量。
对于离散的小动作空间,动作输出法更常见(如DQN)。对于连续动作空间,动作输入法更可行。
我们可以将SARSA算法扩展到函数近似,使用线性SARSA学习 Q 值,然后进行 ε-greedy 策略改进。
收敛与发散 ⚖️
现在我们来讨论这些算法何时收敛,何时可能发散。
蒙特卡洛 与线性函数近似结合,在温和条件下能收敛到最小化价值误差的全局最优解。
时序差分 与线性函数近似结合,会收敛到一个不同的固定点,该点最小化的是投影贝尔曼误差。可以证明,TD解的渐近误差最多是蒙特卡洛最优误差的 1/(1-γ) 倍。
然而,当函数近似、自举和离策略学习三者结合时,TD学习可能发散。这被称为“致命三要素”。


一个简单的发散例子:两个状态,单特征线性近似,只在第一个状态进行离策略TD更新,在 γ > 0.5 时,权重会增长至无穷。
避免发散的方法:
- 在策略学习:线性TD在策略下通常收敛。
- 减少自举:使用多步回报(较大的
λ)可以促进收敛。 - 使用查表法:查表法下TD不会发散(但可能得到次优解)。
另一种思路是定义不同的目标函数,如最小化贝尔曼残差。但这会产生“双次采样”问题,且在实践中性能往往不如TD。
总结收敛性:
- 在策略:蒙特卡洛和TD(线性/非线性)通常表现良好。
- 离策略:蒙特卡洛(线性)仍可收敛,但TD(线性)可能发散。非线性情况下的理论更复杂。
对于控制算法,理论分析更加困难,因为策略在不断变化。即使算法不收敛,稳定的更新行为也很重要。
批处理方法 📦

之前我们讨论了在线学习。本节中,我们来看看如何使用收集到的批数据更高效地进行学习。


批处理试图从已有数据中提取更多信息,而不是每看到一个转移样本就进行一次增量更新后丢弃。
最小二乘时序差分学习:
对于线性近似,TD的固定点满足一个线性方程。LSTD直接基于已有数据求解这个方程:
w = A^{-1} b
其中 A = Σ_t x_t (x_t - γ x_{t+1})^T, b = Σ_t r_t x_t。
可以通过谢尔曼-莫里森公式在线更新 A^{-1},避免每次重新求逆,将计算复杂度从 O(n^3) 降至 O(n^2)。


LSTD在极限下与TD收敛到相同的固定点。它可以扩展到多步回报和动作价值,进而与策略改进结合形成最小二乘策略迭代。


另一种批处理方法是经验回放:将经验存储在缓冲区中,然后从中重复采样进行梯度更新。这允许重用旧数据,进行多次更新。




深度强化学习初探 🧠
最后,我们简要探讨深度强化学习,即将深度神经网络用作函数近似器。
神经网络由多层组成,每层包含线性变换和非线性激活函数(如ReLU)。通过自动微分,我们可以高效计算损失函数关于所有权重的梯度。


在强化学习中,我们可以用神经网络来表示价值函数 V(s; w) 或 Q(s, a; w)。更新时,只需将特征向量 x 替换为价值函数关于参数的梯度 ∇_w V(s; w),这个梯度可以通过反向传播自动计算。


对于图像输入,常使用卷积神经网络。CNN通过卷积核在空间上共享权重,能有效处理图像等网格状数据,并引入平移不变性。
深度Q网络(DQN) 是一个里程碑式的算法,它使用CNN处理Atari游戏像素,并包含几个关键技巧:
- 经验回放:存储并随机采样过去的转移,打破数据相关性,使学习更像监督学习。
- 目标网络:使用一个独立的网络(参数为
w^-)来生成TD目标,并定期从在线网络同步参数。这稳定了学习目标。 - 专用优化器:使用如RMSProp等优化器。
DQN的成功表明,通过精心设计(如经验回放和目标网络),可以使强化学习问题更接近深度网络擅长的监督学习设置。同时,也需要根据强化学习的特点调整网络架构和优化方法,这正是深度强化学习作为一个交叉领域的魅力所在。
总结
本节课中,我们一起学习了强化学习中的函数近似。
- 我们首先了解了在大规模或连续状态空间中,使用函数近似的必要性和优势。
- 接着,我们介绍了几种主要的函数近似方法,包括查表法、状态聚合、线性近似和可微非线性近似(如神经网络)。
- 我们深入探讨了基于梯度的学习算法,特别是线性函数近似下的蒙特卡洛和时序差分方法,并分析了其收敛性。
- 我们讨论了将函数近似应用于控制问题的方法。
- 我们重点分析了时序差分学习中可能出现的发散问题,即“致命三要素”(函数近似、自举、离策略),以及如何缓解。
- 我们介绍了批处理方法,如最小二乘时序差分学习和经验回放,以提高数据效率。
- 最后,我们初步了解了深度强化学习,特别是DQN算法如何利用神经网络、经验回放和目标网络等技巧来解决复杂的RL问题。


函数近似是使强化学习能够应用于现实世界大规模问题的关键。理解不同方法的特性、优势以及潜在的收敛问题,对于设计和应用有效的强化学习算法至关重要。
08:规划与模型 🧠


在本节课中,我们将要学习强化学习中的模型与规划。我们将探讨如何学习环境模型,以及如何利用这些模型进行规划,从而更高效地学习价值函数和策略。



在之前的几讲中,我们已经涵盖了大量内容。我们从多臂老丨虎丨机问题开始,这是一个简化的强化学习问题,允许我们暂时忽略决策的顺序性,专注于探索与利用的权衡。
接着,我们讨论了动态规划和免模型算法,这是解决预测和控制问题的两大家族方法,无论我们是否拥有环境的完整描述。

最后,我们介绍了函数逼近,这是将这些方法扩展到具有巨大甚至连续状态空间场景的主要途径。
回顾动态规划和免模型算法,我们可以大致勾勒出两者的基本原理和差异。在动态规划中,我们假设拥有对环境动态(包括状态转移和奖励动态)的完整、精确描述的“特权”访问权。我们只需要对这个完美模型进行求解,完全不需要与真实环境交互。
而在免模型算法中,我们不依赖任何给定的模型,而是直接从与环境的交互中学习价值和策略。


在这两个极端之间,存在第三种典型的算法家族,通常被称为基于模型的强化学习。

什么是模型?📊

在基于模型的强化学习中,我们没有被给予一个完美模型,但我们尝试在与环境交互的同时,至少学习一个近似模型。然后,我们使用这个学习到的模型来推导价值和策略。

一个免模型算法的可视化描述可以看作实现这样一个循环:我们根据当前的价值估计和策略采取行动以生成经验,然后我们使用这些经验直接更新我们的价值和策略。
相反,基于模型的算法会在这个循环中添加一个间接步骤:我们像免模型RL一样,根据当前的价值估计和策略行动,但我们使用由此产生的经验来学习状态转移和奖励动态的模型。然后,我们可以使用学习到的模型(而不是直接使用经验)来更新价值和策略,从而仍然完成闭环。

当然,这两类算法之间的界限并非绝对严格。我们可以完美地想象将两种思想结合起来,既使用经验更新价值,又学习模型,然后仍然可以使用模型执行额外的更新来优化我们的价值估计。今天我们将讨论这种思想的一个流行实例,即 Dyna 算法。

为何使用基于模型的方法?🤔
在深入新主题之前,停下来反思一下思想背后的动机总是好的。例如,这种攻击方式有明显的缺点。如果我们先学习一个模型,然后用它来规划价值函数,就会有两个误差来源:因为我们从数据中学到的任何模型都可能不完美,它会包含某些近似或误差,这些误差会与使用模型规划价值时产生的额外误差叠加。

相比之下,如果你考虑免模型算法,它们使用总是正确的真实数据来更新价值,因此只有一个近似来源,即价值估计过程本身。

尽管如此,仍有理由相信基于模型的强化学习可能非常有效。第一个原因是模型可以用监督学习方法学习,这些方法非常成熟、强大且有效。此外,显式表示模型可以让我们获得额外的能力,例如用它们来表示不确定性或驱动探索。最后但同样重要的是,在许多现实世界场景中,通过与环境交互生成数据要么成本高昂,要么速度缓慢,或者两者兼而有之。而计算成本正逐年降低,因此使用模型执行额外的更新可以让我们用计算来换取所需环境交互次数的减少,这将使我们的算法更具数据效率,从而扩展我们可以成功应用它们的问题范围。


学习模型 🏗️

现在,我们首先进行一些基础工作,讨论不同类型的学习模型以及如何训练它们,然后才会深入具体的规划算法。


如果我们打算学习一个模型并用它进行规划,首先要讨论的是模型本身由什么构成。
在本课程中,模型将是MDP的一个近似表示。目前,我们假设MDP的环境动态将由一个带有参数 θ 的参数化函数来近似。模型中的状态和动作与真实环境中的相同。此外,我们假设给定状态和动作,从模型中采样将估计我们在真实环境中执行相同动作时可能得到的即时后继状态和即时奖励。
需要认识到,这并不是对模型最一般的描述。我们可以考虑其他与此相关但不同的模型类型,我们将在后续讲座中讨论其中的一些,例如非参数模型(直接使用数据来采样环境转移)和反向模型(例如,建模一个“迷你宇宙”MDP的动态,而不是你直接感兴趣的MDP),以及跳跃模型(其中的动作不直接映射到MDP中的原始动作集)。我们稍后会讨论其中的一些,但现在让我们专注于最简单的扫描模型,因为这已经足以讨论相当广泛的思想并支持一系列规划算法。

有了这些前提,从经验中学习模型的问题基本上可以表述为一个监督学习问题,其中我们的数据集包含一组状态-动作对,这些对的标签是我们在那些状态下执行那些动作时将观察到的真实状态和奖励。然后,模型的参数必须像标准监督学习一样选择,以最小化这些数据上的某些预测误差。

定义学习模型的程序将归结为:为转移和奖励函数选择一个合适的参数化函数,选择一个合适的损失函数进行最小化,并选择一个优化参数的程序以最小化这个损失。
例如,我们可以选择使用从状态和动作的合适编码到奖励和某种后继状态编码的线性映射来参数化转移和奖励。然后,最小化参数可以通过使用最小二乘法来实现。这将给我们一个期望模型,具体来说是一个线性期望模型。

请注意,这不是我们可以考虑的唯一一种期望模型。例如,使用相同类型的损失(均方误差),我们可以用深度神经网络来参数化模型本身(包括奖励和转移),并可能使用梯度下降而不是最小二乘法来优化参数。


期望模型的优缺点 ⚖️
无论参数化的具体选择如何,理解期望模型的一般优缺点都是有益的。一些缺点相当明显。假设你有一个宏动作,随机将你置于某堵墙的左侧或右侧,那么一个期望模型可能会把你放在墙里面,这首先可能不是一个物理上有意义的预测。


然而有趣的是,其价值可能仍然是正确的。如果价值特别是状态的线性函数或其编码的线性函数,那么线性变换实际上可以与期望交换,因此,下一个状态的期望价值实际上与期望下一个状态的价值相同,即使期望状态可能有一些奇怪的特征,比如把你放在墙中间。这实际上与模型本身的参数化无关,它只要求价值是其状态表示的线性函数。

此外,如果价值和模型都是线性的,那么即使将模型向前展开多步,这个性质也成立,这是一个相当强大和有趣的性质。
我们可能仍然不愿意接受这种权衡,可能无法使价值或模型成为线性的。在这种情况下,期望状态可能不是正确的选择,因为我们从期望状态估计的价值可能没有正确的语义,我们可能无法从期望状态推导出期望价值。在这种情况下,我们可以考虑一种不同类型的模型,即所谓的随机生成模型。
生成模型与分布模型 🎲

生成模型生成的不是期望(像期望模型那样),而是样本。它以状态、动作和一个噪声变量作为输入,并返回一个可能的下一个状态和可能奖励的样本。如果我们能有效地训练一个生成模型,那么我们可以在想象中进行规划,例如,生成环境中假设转移的长序列,并比较它们以选择最佳行动方案。即使模型和价值都不是线性的,也可以做到这一点。当然,反面是生成模型通过采样过程增加了噪声。
还有第三种选择,即实际尝试对完整的转移动态进行建模,对完整的转移分布和奖励分布进行建模。如果我们能做到这一点,实际上期望模型、生成模型甚至价值本身都可以作为我们完整转移和奖励模型的副产品推导出来。问题在于,对完整分布进行建模可能很困难,或者由于分支因子,实际应用在计算上可能不可行。
例如,如果我们试图估计下一个状态的价值(一步前瞻),这仍然需要对所有动作求和,并且对于每个动作,对所有可能的后继状态求和。如果我们甚至想前瞻多步,情况会呈指数级恶化。因此,即使我们拥有这个完整的分布模型,对于大多数感兴趣的问题,可能仍然需要某种形式的采样。在这种情况下,与仅仅使用生成模型相比,完整分布的优势可能更小。

模型的参数化选择 🔧
除了我们可能想要训练的模型类型之外,还有第二个重要的维度,即我们如何参数化模型本身。一个非常常见的选择是首先将奖励和转移的动态分解为两个独立的参数化函数。然后,对于每一个,我们可以在许多不同的参数化中进行选择。在本课程中,我们将考虑查表模型、线性期望模型,最后还有深度神经网络模型。
在查表情况下,模型是MDP的显式表示。例如,我们可以根据过去经验的经验概率来估计给定状态-动作对观察到给定后继状态的概率。类似地,我们可以将奖励函数参数化为在给定状态下执行给定动作时实际观察到的奖励的经验均值。在这种情况下,我们实际上会得到一个混合模型,因为我们的查表模型会对转移动态使用完整分布,而对奖励使用期望模型。当然,也可以对奖励本身的完整分布进行建模。

使用模型进行规划 🗺️
我们现在准备深入本主题的核心,即如何实际使用模型进行规划,特别是本节中如何为了改进我们的价值函数估计和策略而进行规划。
规划和基于模型RL的核心价值主张,是通过消耗计算能力但不要求实际环境交互来改进价值估计和策略的能力。你可能记得,动态规划实际上是我们已经见过的允许我们做到这一点的过程的一个好例子。问题当然在于,在动态规划中,我们被赋予了访问环境完美描述的“特权”,但在一般的强化学习中,我们实际上感兴趣的是不做出这种假设的规划算法,例如使用学习到的模型(如我们在上一节讨论的任何一种)进行规划。
在这种情况下,绕过动态规划这一限制的最简单方法可能就是直接镜像动态规划算法,但插入一个学习到的模型来代替环境的特权描述。如果我们这样做,那么我们可以用你喜欢的任何动态规划算法(例如价值迭代或策略迭代)来求解这个近似的MDP。这样做,我们仍然需要与环境进行一些交互,因为我们仍然需要学习模型,但至少希望我们能大大减少对真实交互的依赖,从而提高数据效率。
这种方法实际上可以奏效,并且是值得考虑的一个合理选择,但它也不是唯一的选择。例如,我们可以走另一条路,将学习到的模型不是与动态规划结合,而是与我们在免模型智能体背景下讨论的思想和算法结合。这也被称为基于样本的规划。

基于样本的规划 📈
它非常简单,通过使用学习到的模型来采样想象的转移和轨迹,然后将你最喜欢的免模型算法应用于想象的数据,就像它是真实数据一样。例如,你可以应用蒙特卡洛控制、SARSA或Q学习,并对从你学习到的近似MDP中采样的想象数据应用相同的更新,就像它是从环境中采样的真实数据一样。

让我们考虑一个具体例子来澄清这一点。这是我们在上一节讨论的同一个例子。在左边,我们可以访问真实经验:八个回合,大多数从状态B开始,然后观察到0或1的奖励,实际上有一个从状态A开始,首先转移到B。中间是我们从这些数据中学到的查表模型:从A到B的转移概率为100%,在B终止的概率为100%,但有75%的概率获得奖励1,25%的概率获得奖励0。基于样本的规划将采用这个模型,然后从中采样轨迹(回合)。例如,这可能是我们在右边报告的数据:所有这些数据都是从我们学习到的模型中采样的。例如,我们现在有两个从A开始的回合,由于模型的强制,两者都转移到了B,然后在这种情况下,两个回合在B时都采样到了奖励1,加上一些从B开始并立即终止的回合,同样与模型一致。

如果我们对这份数据应用蒙特卡洛学习,我们会得到,例如,A的价值是1,因为在这两个回合中,当我们从A开始时,最终收集到了奖励1;B的价值等于0.75,因为我们从模型中采样的回合中,四分之三的时间我们在B观察到了奖励1。在这种情况下,这与从模型中学到的概率完全一致。


模型的局限性 🚧
这是一个很酷的想法,直接使用动态规划与学习模型也可能是一个非常有趣的方法,但这些想法有什么潜在的局限性呢?一如既往,最大的担忧是学习到的模型可能不完美。实际上,我们知道它通常会包含一些误差和近似,在这种情况下,规划过程可能会计算出一个对于近似MDP最优但对于真实环境次优的策略。

因此,如果不讨论如何处理这些局限性,我们的介绍就不完整。有很多方法可以解决这个问题。一种方法非常简单:每当模型不够好、不够可靠时,就直接使用免模型算法。
另一个想法是:让我们努力明确地推理我们对模型估计的不确定性,例如,这将引导我们更倾向于贝叶斯方法。最后,第三种方法,也是我们今天将深入探讨的,实际上是结合免模型和基于模型的方法,将学习和规划集成到单个算法中。

Dyna:集成学习与规划 🔄

我们如何做到这一点?在之前的讨论中,我们已经在某种程度上隐含地讨论了存在两个潜在的数据来源、两个潜在的经验来源:一个是真实经验,这是你通过实际与环境交互生成的数据、转移、轨迹。另一个来源是模拟经验,其中数据是从模型(例如学习模型)中采样的,因此是从某个近似MDP中采样的。
Dyna 这一集成学习与规划的强大方法背后的核心思想是:让我们将这两个经验来源视为同一事物。在免模型中,我们从真实经验中学习价值;在基于样本的规划中,我们从模拟经验中规划价值;而在Dyna中,让我们两者都做,让我们对价值和策略应用相同的更新,无论数据来自真实经验还是模拟经验。

这非常直接地实现了我在本章开头展示的图景:我们可以根据我们的价值估计或策略采取行动以生成经验,然后这些经验既可以用来直接更新价值和策略,也可以用来学习一个模型,然后该模型可以生成额外的模拟更新、模拟经验。

Dyna-Q 算法实例 🧩
现在让我们讨论Dyna的具体实例化,因为这个思想非常通用,但当然我们可以将许多不同的算法插入其中,并对模拟和真实经验应用非常不同的更新。

这在实践中意味着什么?Dyna的一个流行版本通常被称为 Dyna-Q,我们在真实和模拟经验上都使用Q学习。它的流程如下:首先,我们当然需要初始化价值函数(像在Q学习中一样),但也需要初始化一个模型,因为我们将同时训练它。然后在每一步,我们可以使用一个ε-贪心策略来选择动作,就像在标准Q学习中一样。

执行此动作后,我们当然会从环境中获得一个后继状态和一个奖励。利用这个真实转移,我们可以直接应用Q学习,例如,通过将当前的Q值更新到通常的目标(奖励加上下一步折扣后的最大Q值之和)。但我们也可以以监督学习的方式更新模型,例如,在表格化确定性环境中,这仅仅相当于存储下一个状态和奖励。
接下来是Dyna“秘制酱料”的关键所在。基本上,对于环境中的每个真实步骤,我们现在执行任意次规划更新:我们取一些在训练期间遇到过的过去状态-动作对,使用当前模型采样一个可能的下一个状态和一个可能的后续奖励,并使用这个想象的转移来执行一次额外的Q学习更新。当然,随着我们增加想象的步骤数量,我们基本上可以减少对真实转移的依赖,并如我们所希望的那样变得更具数据效率。


当然,有许多不同的方法来扩展或实现这个想法。例如,我们可以使用不同的免模型算法代替Q学习。此外,幻灯片上的算法是为表格化设置编写的,但我们当然可以使用线性函数或深度神经网络来表示价值或模型。或者,我们也可以随时间变化规划的量。非常直观地,模型通常会随着时间的推移而改进和更新,所以希望它会变得更好。因此,我们也许可以想象随着训练的进行和执行更多规划更新,我们对模型越来越有信心。理想情况下,我们甚至会有某种形式的不确定性估计,可以用来选择执行多少规划,根据学习模型的准确性来决定在多大程度上信任我们的规划更新。
但无论细节和潜在的增强如何,重要的是,即使是这个基本算法,在某些状态下也已经具备了我们所寻找的最基本属性:我们可以投入更多计算以更高效地学习。我想再次强调,如果数据收集缓慢、昂贵或不安全,这真的非常关键,而且我可以肯定地说,这在许多现实世界应用中确实经常是这种情况。
迷宫实验示例 🧪
让我们看看当我们在一个简单问题上实际运行这些算法时会发生什么,以便更深入地理解和直观感受规划对于信用分配的作用。为此,我们将考虑一个简单的迷宫,如本幻灯片右上角所示。在每个回合中,智能体从标记为S的单元格开始。从任何单元格,智能体可以采取四个动作之一,分别对应于向上、向下、向左和向右移动。深色单元格是墙壁,意味着如果我们试图移动到其中一个单元格,动作将无效(撞墙并停留在原地)。除了到达标记为G的目标单元格(右上角)时收集的单个正奖励外,其他地方的奖励均为零。

在这种设置下,对于任何折扣因子大于1的情况,最优策略显然是从S到G沿着最短路径引导你的策略,因为任何选择较长路径的动作都会导致最终奖励被更强烈地折扣。这意味着我们可以评估智能体学习到的策略的质量,例如,通过绘制智能体为达到目标所采取的步数作为其经历回合数的函数。这正是本幻灯片图表所示的内容。

该图表显示了上一张幻灯片中算法的三个实例化运行,它们使用了不同数量的规划步骤。具体来说,它运行了零步规划(算法仅退化为普通Q学习)、五步规划或五十步规划。从这张图中可以明显看出,普通Q学习需要数十个回合才能实际收敛到最优解。相反,仅仅添加一点点规划(例如,每个真实更新只做五个额外更新),智能体就能更快地收敛到最优解,不到10个回合。随着我们增加到50个规划步骤,智能体实际上只需几个回合就收敛到最优策略,这真的令人印象深刻。


规划步骤的影响 🔍

这甚至可能看起来好得令人难以置信,幕后到底发生了什么?在这张幻灯片中,我试图给你一个机会窥探幕后,看看当我们运行这个算法时,Q值估计发生了什么变化。



具体来说,让我们考虑在第一个回合的最后一步会发生什么,这基本上是智能体第一次观察到奖励。为简单起见,我们还将假设Q值初始化为零。在这种假设下,没有规划的第一个回合实际上相当无聊:在所有中间步骤,当智能体进入单元格时,价值都是0,并且实际上保持为0,因为TD误差始终为0(我们的估计是0,奖励是0,我们自举的最大Q值也是0),所以在整个第一个回合中没有进行任何更新。只有一个Q值在最后一个转移时被更新,这是对应于从紧邻目标下方单元格向上移动的Q值。当智能体执行第一个回合的这个最终转移时,该Q值被正确地更新为目标奖励。
这立即使得贪心策略在该单元格中是最优的,因为所有其他动作价值保持为零,但从目标正下方状态向上移动的动作价值变为非零。所有我们在第一个回合中看到过的其他状态都没有被更新,Q值都保持为零,行为保持随机(假设我们随机打破平局)。但最后那个状态(在左下角迷宫中显示的那个)被更新为正确的策略。

在右下角的迷宫中,我们展示了当我们运行具有50步规划的相同算法时,我们对Q值估计的状态。同样,我们在刚刚运行完一个回合后立即冻结算法。但突然之间,你可以看到Q值现在已经在整个迷宫中更新了。不仅仅是最终状态意识到最优动作是什么,实际上智能体在这个第一个回合中更新的Q值估计为许多其他不同的状态显示了一个有意义的方向,基本上关于如何从状态移动到目标的信息已经几乎传播到了起点。这相当令人印象深刻,原因是当你更新回合中的最后一个单元格时,你随后开始从模型中对想象转移进行50次额外更新,这意味着在这50个规划更新中的每一个上,我们都能够从新更新的Q值向后传播信息到状态空间
09:策略梯度与演员-评论员方法 🎯


在本节课中,我们将学习如何直接优化策略,而不是通过价值函数间接推导。我们将探讨策略梯度方法,以及结合了策略和价值函数的演员-评论员方法。
引言与动机 🧠
上一讲我们讨论了基于价值的强化学习。本节中,我们来看看直接学习策略的方法。
弗拉基米尔·瓦普尼克曾写道:“不应将解决一个更普遍的问题作为中间步骤。” 这意味着,如果你最终关心的是智能体的行为,那么直接学习策略可能比学习一个更通用的模型或价值函数更高效。因为学习更通用的东西通常更困难,可能会浪费数据和计算资源在无关的细节上。
为了更深入地理解这种高层次的观点,我们首先比较一下强化学习中的其他方法。
与其他AI方法的比较 ⚖️
我们之前讨论过基于模型的强化学习,它有如下优缺点:
优点:
- 学习模型是一个监督学习过程,机制相对成熟。
- 理论上可以从数据中提取所有信息,即使某些转移没有带来高额奖励,也能将信息整合到知识结构中。
缺点:
- 可能会在无关细节上消耗大量计算和模型容量。例如,在吃豆人游戏中,如果背景有无关视频,模型可能会花费大量精力去学习背景像素,而不是对游戏策略重要的部分。
- 即使有了完美模型,从中计算(规划)出策略也通常非常耗时。
我们也讨论了很多基于价值的强化学习,其优缺点如下:

优点:
- 从价值函数(特别是动作价值函数)生成策略相对容易(例如,选择贪婪动作)。
- 比学习模型更接近真正的优化目标(即获得高回报)。
- 研究深入,存在很多优秀算法。

缺点:
- 仍然不是真正的目标,可能仍会关注无关细节。例如,精确学习两个动作之间的价值差异可能对选择最优策略无关紧要。
- 由于函数逼近误差,小的价值误差有时会导致大的策略误差。
在本讲中,我们将讨论基于策略的强化学习,它直接优化策略,至少在目标上是正确的。我们将在后续幻灯片中讨论这种方法的更多属性和优缺点。


总的来说,需要记住,这些不同的方法以不同的方式泛化。有时学习模型更容易(例如,动态特别简单时),有时学习策略更容易(例如,真实世界难以建模,但最优策略可能很简单)。
策略参数化 📝
在之前的课程中,我们参数化地逼近价值函数:V^π 和 Q^π 表示策略 π 的真实价值,V_w 和 Q_w 表示其近似。
我们可以从中生成策略(例如贪婪策略)。但现在我们将做不同的事情:我们将使用另一组参数 θ 来直接参数化策略 π_θ。之前,策略是从价值函数推断出来的;现在,我们将直接有一个输出策略参数的函数(例如神经网络)。
我们将专注于无模型的强化学习。策略搜索当然也可以与模型结合,但本讲不涉及。


关于术语,需要注意以下几点:
- 基于价值的强化学习:使用价值函数,策略是隐式的。
- 基于策略的强化学习:直接学习策略。
- 演员-评论员方法:同时拥有策略(演员)和价值函数(评论员)。评论员用于评估和更新演员。
策略学习的优缺点 📊
以下是基于策略的强化学习的优缺点:
优点:
- 真正的目标:直接优化我们关心的策略。
- 易于扩展到高维或连续动作空间:例如,机器人控制输出的是连续值。
- 可以自然地参数化随机策略。
- 有时策略很简单,而价值和模型很复杂:这意味着学习策略可能更容易,也更容易用简单的函数类表示最优策略。
缺点:
- 可能陷入局部最优:基于梯度的搜索通常是局部的。
- 更新可能非常特定,泛化能力差:策略学习只提取优化行为所需的最窄信息(行为本身),如果环境变化,可能难以适应。它没有从数据中提取所有有用信息。


为何需要随机策略? 🎲
你可能会想起,在马尔可夫决策过程中,总是存在一个最优的确定性策略。但在大多数实际问题中,环境并非完全可观测(例如,机器人只能看到前方)。即使MDP本身是马尔可夫的,如果使用函数逼近,智能体可能仍无法区分状态,这相当于部分可观测设置。
在这种情况下,最优策略本身可能就是随机的。此外:
- 随机策略的搜索空间可能更平滑,便于使用梯度优化。
- 随机策略能自动提供一定程度的探索。
随机策略示例:别名网格世界 🗺️
考虑一个简单的网格世界,其中两个灰色状态看起来完全一样(别名状态)。顶部走廊可以左右移动,向下移动会进入终端状态(获得金币或死亡)。
如果使用确定性策略,由于两个灰色状态无法区分,策略必须相同。无论选择向左还是向右,都会在某些起始情况下导致智能体无限期卡住,平均回报很低。
如果使用随机策略(例如,在每个灰色状态以相等概率随机向左或向右),那么无论从哪个角落开始,智能体最终都能到达中间的金币,且永远不会进入坏状态或卡住。这个随机策略的平均回报远高于任何确定性策略。
这个例子表明,有时随机策略是有益的,甚至是最优的。重要的是,这种随机策略可以通过直接学习策略参数来获得,而不仅仅是学习价值函数后随机打破平局。
形式化策略学习目标 🎯
我们的目标是找到一个策略 π。如果用参数 θ 参数化策略,目标就是找到最优的 θ。
如何衡量策略的质量?
- 在分幕式环境中,可以使用每幕平均回报。
- 在持续式环境中,可以使用每步平均奖励。
首先形式化分幕式情况。我们引入函数 J_G(θ),其中 G 表示回报。目标是最大化期望回报:
J_G(θ) = E_{s_0 ~ d_0, a_t ~ π_θ(·|s_t), s_{t+1} ~ P(·|s_t, a_t)} [ Σ_{t=0}^{∞} γ^t r_t ]
其中期望基于起始状态分布 d_0、策略 π_θ 和MDP动态。

这可以重写为起始状态价值的期望:
J_G(θ) = E_{s_0 ~ d_0} [ v^{π_θ}(s_0) ]
如果起始状态是确定的,目标就是最大化起始状态的价值。

对于平均奖励目标(持续式),目标是最大化长期平均奖励:
J_R(θ) = lim_{T->∞} (1/T) E [ Σ_{t=1}^{T} r_t ]
在满足一定遍历性条件下,这可以写为在策略的稳态分布 d^{π_θ} 下的期望:
J_R(θ) = E_{s ~ d^{π_θ}, a ~ π_θ(·|s)} [ r(s, a) ]
= Σ_s d^{π_θ}(s) Σ_a π_θ(a|s) Σ_{r,s'} P(r, s'|s, a) * r
策略梯度 📈
基于策略的强化学习是一个优化问题:找到最大化 J(θ) 的 θ。我们将专注于随机梯度上升,因为它强大、高效,且易于与深度神经网络结合。
策略梯度定义为 J(θ) 关于参数 θ 的梯度。更新规则为:
Δθ = α * ∇_θ J(θ)
其中 α 是步长。随机策略有助于确保 J(θ) 是平滑的。
现在的问题是如何计算这个梯度。我们首先从更简单的上下文赌博机案例开始。
上下文赌博机案例 🎰
考虑一个单步“幕”,其中平均奖励是明确定义的,并且状态分布不依赖于策略(这是上下文赌博机的特点)。目标是最大化期望奖励:
∇_θ J(θ) = ∇_θ E_{s~d, a~π_θ(·|s)} [ r(s, a) ]
我们不能直接对奖励采样然后求梯度,因为奖励本身不依赖于 θ。我们需要使用得分函数技巧(或称对数似然技巧):
∇_θ J(θ) = E_{s~d, a~π_θ(·|s)} [ r(s, a) * ∇_θ log π_θ(a|s) ]
这个等式的关键在于,右边是一个期望,我们可以通过采样来获得梯度的无偏估计。Ron Williams 将基于此的算法称为 REINFORCE。
直觉:如果奖励 r 高,更新会使选择该动作的对数概率增加,从而增加选择该动作的概率。
基线:降低方差 🎯
我们可以引入一个基线 b(s)(可以是任何不依赖于动作 a 的函数),并保持梯度期望不变:
∇_θ J(θ) = E_{s~d, a~π_θ(·|s)} [ (r(s, a) - b(s)) * ∇_θ log π_θ(a|s) ]
因为可以证明 E [ b(s) * ∇_θ log π_θ(a|s) ] = 0。
选择合适的基线(例如状态价值函数 V(s))可以显著降低梯度估计的方差。
直觉:如果所有奖励都是正数,原始更新会使所有被选中的动作概率增加。通过减去基线(如平均奖励),更新可以同时从“好”和“坏”的结果中学习,使学习更稳定。
策略梯度定理 📖
现在我们将讨论扩展到完整的多步马尔可夫决策过程。这里的关键区别是,状态分布现在也依赖于策略。




对于分幕式情况,策略梯度定理表述如下。对于一个可微策略 π_θ,初始状态分布为 d_0,目标为 J_G(θ),其梯度为:
∇_θ J_G(θ) = E_{π_θ} [ Σ_{t=0}^{T} γ^t * Q^{π_θ}(s_t, a_t) * ∇_θ log π_θ(a_t|s_t) ]
其中期望基于从 d_0 开始并遵循 π_θ 的轨迹。Q^{π_θ}(s_t, a_t) 是从时间 t 开始的折扣回报的期望。
重要说明:
- 该梯度不依赖于MDP的动态(转移概率),它们在对轨迹概率求对数时被抵消了。
- 在实践中,人们通常忽略
γ^t项,并在线更新(每步更新而不是等到幕结束),这会引入偏差,但通常可行。 - 可以用采样的回报
G_t代替Q^{π_θ}(s_t, a_t),得到无偏但高方差的估计。
对于平均奖励情况,策略梯度定理有类似但略有不同的形式:
∇_θ J_R(θ) = E_{s~d^{π_θ}, a~π_θ(·|s)} [ A^{π_θ}(s, a) * ∇_θ log π_θ(a|s) ]
其中 A^{π_θ}(s, a) = Q^{π_θ}(s, a) - V^{π_θ}(s) 是优势函数,而 Q 和 V 是未折扣的,与平均奖励 ρ(π) 相关。
演员-评论员方法 🎭
演员-评论员方法结合了策略(演员)和价值函数(评论员)。评论员用于评估演员的动作,从而指导更新。
主要优势:
- 降低方差:使用价值函数作为基线
b(s) = V(s)。 - 允许自举:可以用TD误差
δ_t = r_{t+1} + γV(s_{t+1}) - V(s_t)来估计优势,进一步降低方差,但会引入一些偏差。
一个简单的一步演员-评论员算法步骤如下:
- 初始化策略参数
θ和价值函数参数w。 - 对每一步
t:- 根据当前策略
π_θ选择动作a_t。 - 执行动作,观察奖励
r_{t+1}和下一状态s_{t+1}。 - 计算TD误差:
δ_t = r_{t+1} + γV_w(s_{t+1}) - V_w(s_t)。 - 更新评论员:
w ← w + β * δ_t * ∇_w V_w(s_t)。 - 更新演员:
θ ← θ + α * δ_t * ∇_θ log π_θ(a_t|s_t)。
- 根据当前策略


许多现代深度强化学习算法都基于此框架进行扩展。
提高稳定性:正则化 🔒
在策略梯度中,糟糕的策略更新可能导致后续数据质量下降。为了提高稳定性,可以对连续策略更新之间的差异进行正则化。
一个流行的方法是使用KL散度来限制新旧策略之间的差异:
J(θ) = J_{original}(θ) - η * KL[ π_{θ_old} || π_θ ]
其中 η 是超参数。这可以防止策略更新过快。TRPO、PPO等现代算法都使用了这种思想。
连续动作空间 🤖
基于价值的RL扩展到连续动作空间可能比较棘手(如何最大化连续动作?)。而策略梯度方法天然适用于连续动作,只需改变策略的参数化方式。
示例:高斯策略
将策略参数化为高斯分布:π_θ(a|s) = N( μ_θ(s), σ^2 ),其中均值 μ_θ(s) 是参数 θ 的函数,方差 σ^2 可以固定或也作为参数。
其对数梯度为:
∇_θ log π_θ(a|s) = ( (a - μ_θ(s)) / σ^2 ) * ∇_θ μ_θ(s)
可以将其插入到REINFORCE或演员-评论员更新中。
确定性策略梯度
如果我们能准确估计动作价值函数 Q_w(s, a),对于确定性策略 a = μ_θ(s),可以直接对价值求梯度来改进策略:
∇_θ J(θ) ≈ E_{s~d} [ ∇_θ Q_w(s, μ_θ(s)) ]
= E_{s~d} [ ∇_a Q_w(s, a)|_{a=μ_θ(s)} * ∇_θ μ_θ(s) ]
这就是确定性策略梯度算法。它类似于策略迭代,但用梯度步骤代替了贪婪最大化。
总结 🏁


在本节课中,我们一起学习了:
- 直接策略优化的动机:有时比学习模型或价值函数更直接、更高效。
- 策略梯度方法:通过计算性能指标
J(θ)的梯度来优化策略参数。 - 策略梯度定理:为分幕式和平均奖励情况提供了计算梯度的理论公式。
- 演员-评论员方法:结合策略(演员)和价值函数(评论员),用评论员来降低策略梯度估计的方差并指导学习。
- 连续动作空间的扩展:通过高斯策略或确定性策略梯度,策略方法可以自然地处理连续动作。
- 提高稳定性的技术:如使用基线降低方差,以及用KL散度正则化来限制策略更新幅度。



策略梯度及其变体是许多现代深度强化学习算法的核心,能够解决从离散游戏到连续机器人控制等各种复杂问题。
10:近似动态编程 🧠
在本节课中,我们将深入探讨近似动态编程。我们将回顾之前讲座中提到的算法框架,特别是在无模型强化学习背景下,如何将动态编程的思想与函数近似相结合。我们将分析两种主要的近似方法:近似值迭代和近似策略迭代,并理解它们背后的理论保证与局限性。




背景回顾 🔄

上一讲我们介绍了马尔可夫决策过程、动态编程,并初步接触了近似动态编程,将其作为理解无模型预测与控制的一个框架。我们还回顾了贝尔曼方程及其对应的算子。今天,我们将重新利用这些概念,并结合函数近似来探讨强化学习。
本节课,我们将从两个误差来源重新审视近似动态编程:
- 估计误差:由于无法获得真实的环境模型,我们被迫通过经验采样来近似模型。
- 近似误差:我们不再处于表格化设置中,无法精确表示所有状态-动作的价值函数,而是使用一个函数近似器来完成。

在接下来的课程中,你将看到更多基于此范式的先进研究,特别是放弃对环境完美知识的假设,并转向更流行的函数近似方法——深度神经网络。


预备知识 📚
首先,我们回顾几个之前介绍过的核心概念。



贝尔曼最优算子
贝尔曼最优算子由贝尔曼最优方程推导而来,其定义如下:


公式 1:
[
(T^*Q)(s, a) = \mathbb{E}{s' \sim P(\cdot|s,a)} \left[ R(s, a) + \gamma \max Q(s', a') \right]
]
这个算子有一个唯一的不动点,即我们寻找的最优价值函数 (Q^*)。在完美模型知识且无近似的条件下,迭代应用此算子最终会收敛到最优价值函数。
贝尔曼期望算子
贝尔曼期望算子具有类似的性质,它是一个压缩映射,也有一个唯一的不动点。这个不动点就是给定策略 (\pi) 的价值函数 (Q^\pi)。
动态编程视角
从算子视角看,两个流行的动态编程算法是:
- 值迭代:多次应用贝尔曼最优算子 (T^*)。
- 策略迭代:交替进行策略评估(使用贝尔曼期望算子 (T^\pi))和策略改进(通常是贪心改进)。

近似动态编程介绍 🎯
近似动态编程移除了两个关键假设:
- 完全了解底层的 MDP。
- 能够精确表示价值函数(即离开表格化设置)。
因此,我们引入了两种误差:
- 采样/估计误差:当我们不知道底层 MDP 时,需要通过样本来估计期望值。
- 近似误差:由于我们选择的参数化函数类可能无法精确表示我们想要估计的价值函数(包括迭代过程中的中间价值函数)。
即使真实的最优解是可表示的,中间步骤的价值函数也可能无法被参数类表示,从而产生近似误差。强化学习的目标始终是找到一个接近最优行为的策略。



近似值迭代 🔄

精确值迭代回顾
精确值迭代通过贝尔曼最优算子的视角可以表示为:
在每次迭代 (k),我们更新价值函数:
[
Q_{k+1} = T^* Q_k
]
当 (k \to \infty) 时,序列 ({Q_k}) 在无穷范数下收敛到 (Q^*)。
近似值迭代算法
近似版本在每次迭代 (k) 中近似地执行这个更新步骤:
[
Q_{k+1} \approx A(T^* Q_k)
]
其中 (A) 代表近似操作,可能源于函数近似或采样估计。然后,我们基于这个近似值进行贪心策略改进。
通常在实践中,我们使用 Q 函数的近似值迭代,因为要推导贪心策略,我们需要动作价值函数。
性能保证定理
我们关心经过 (N) 步近似值迭代后,所得策略 (\pi_N) 的性能。以下定理(1996年的结果)给出了一个保证:
定理:
[
| Q^* - Q^{\pi_N} |\infty \leq \frac{2\gamma}{(1-\gamma)^2} \max | \epsilon_k |\infty + \frac{2\gamma^N}{1-\gamma} | Q^* - Q_0 |\infty
]
其中 (\epsilon_k = Q_{k+1} - T^* Q_k) 是在第 (k) 次迭代中引入的近似误差。
含义:
- 策略 (\pi_N) 的性能受两个因素限制:
- 整个迭代过程中遇到的最大近似误差(第一项)。
- 初始估计的误差,但该项会随着迭代次数 (N) 增加而以 (\gamma^N) 的速率衰减。
- 当 (N \to \infty) 时,第二项趋于零,性能界限不再依赖于初始点。
- 即使我们从最优解 (Q^*) 开始初始化,如果近似操作 (A) 引入了误差(例如,由于函数类限制或采样噪声),我们仍然可能偏离最优解。
收敛算法实例:投影法
如果我们选择一个假设函数空间 (\mathcal{F}),并将近似操作 (A) 定义为在 (\mathcal{F}) 上关于 (L_\infty) 范数的投影:
[
\Pi_{\mathcal{F}, \infty}(G) = \arg\min_{F \in \mathcal{F}} | F - G |\infty
]
那么近似值迭代算法变为:
[
Q = \Pi_{\mathcal{F}, \infty}(T^* Q_k)
]
这个组合算子 (( \Pi_{\mathcal{F}, \infty} \circ T^* )) 仍然是一个压缩映射(压缩系数为 (\gamma)),因此该算法保证收敛到一个唯一的不动点 (Q_{\infty})。
- 如果最优价值函数 (Q^* \in \mathcal{F}),那么 (Q_{\infty} = Q^*)。
- 如果 (Q^* \notin \mathcal{F}),算法仍然收敛,但可能收敛到一个次优解。




近似值迭代的实用算法 🛠️

然而,基于 (L_\infty) 范数的投影在实践中通常难以优化。因此,我们转向更实用的方法。


通用算法框架

一个更实用的通用框架包含三个可变的维度:
- 函数近似器:参数化函数类 (\mathcal{F})(如线性函数、神经网络)。
- 采样机制:如何生成样本以近似 (T^*)(如在线采样、经验回放、固定数据集)。
- 目标构造:如何构建用于回归的目标值(如单步Q学习目标、固定目标网络、多步回报)。
在这个框架下,每次迭代 (k+1),我们寻找参数 (w_{k+1}) 以最小化平方损失:
[
\min_{w} \sum_i \left( Q(s_i, a_i; w) - y_i \right)^2
]
其中目标 (y_i) 是对 ( (T^* Q_k)(s_i, a_i) ) 的近似(例如,(y_i = r_i + \gamma \max_{a'} Q(s'_i, a'; w_k)))。
具体算法实例

以下是此框架的一些著名实例:
- DQN (Deep Q-Network):
- 函数近似器:深度神经网络。
- 采样机制:从经验回放缓冲区采样。
- 目标构造:使用固定目标网络。

-
批量强化学习 (Batch RL):
- 函数近似器:根据数据集大小和问题特性选择(如线性模型)。
- 采样机制:使用固定的、预先收集的数据集。
- 目标构造:通常使用单步Q学习目标(因为是离策略数据)。
-
Dyna:
- 函数近似器:任意选择。
- 采样机制:结合在线交互和从学得的模型(回放)中采样。
- 目标构造:通常使用单步Q学习目标。
大多数现代的无模型控制算法都可以看作是这种“拟合值迭代”范式的变体。
近似策略迭代 🔄
现在,我们来看看近似动态编程的另一个主要范式:近似策略迭代。
精确策略迭代回顾
策略迭代是一个迭代过程:
- 策略评估:评估当前策略 (\pi_k) 的价值函数 (Q^{\pi_k})。
- 策略改进:基于 (Q^{\pi_k}) 进行贪心改进,得到新策略 (\pi_{k+1})。
在近似设置中,近似主要发生在策略评估步骤。我们获得当前策略的一个近似价值函数 (Q_k \approx Q^{\pi_k}),然后基于 (Q_k) 进行贪心改进得到 (\pi_{k+1})。
性能保证定理
我们关心经过 (I) 次迭代后,策略 (\pi_I) 的性能。以下定理给出了保证:
定理:
[
\limsup_{I \to \infty} | Q^* - Q^{\pi_I} |\infty \leq \frac{2\gamma}{(1-\gamma)^2} \limsup | \epsilon_I |_\infty
]
其中 (\epsilon_I = Q^{\pi_I} - Q_I) 是在第 (I) 次迭代的策略评估中产生的近似误差。
含义:
- 在极限情况下,所得策略与最优策略的差距,由策略评估误差的极限上界所控制。
- 如果我们能随着迭代进行,将评估误差 (| \epsilon_I |_\infty) 控制得越来越小,那么最终策略的性能就会越来越接近最优。
- 与近似值迭代不同,这个界限不依赖于初始误差,但强调了持续减小策略评估误差的重要性。


策略评估误差可能导致的退化
一个关键点是,在近似情况下,贪心改进步骤不一定能保证得到比前一个策略更好的策略。由于近似误差,新策略在某些状态上可能比旧策略更差。这解释了为什么近似策略迭代可能不收敛,或者会在一个策略附近振荡。
具体算法实例:线性近似的 TD(λ)
考虑在线性函数近似下使用 TD(λ) 进行策略评估。TD误差定义为:
[
\delta_t = r_t + \gamma Q(s_{t+1}, a_{t+1}; w) - Q(s_t, a_t; w)
]
参数更新为:
[
w \leftarrow w + \alpha \delta_t \phi(s_t, a_t)
]
在适当的步长条件下,该算法收敛到一个极限 (w^),对应的价值函数为 (Q_{w^})。
对于这个算法,有以下误差界限:
[
| Q^{\pi} - Q_{w^*} |\xi \leq \frac{1 - \gamma \lambda}{1 - \gamma} | Q^{\pi} - \Pi, \xi} Q^{\pi} |\xi
]
其中 (| \cdot |\xi) 是关于策略 (\pi) 的稳态分布 (\xi) 的加权范数,(\Pi_{\mathcal{F}, \xi}) 是在 (\mathcal{F}) 上关于该范数的最佳投影。
含义:
- 该界限表明,TD(λ) 的收敛点 (Q_{w^*}) 与真实价值函数 (Q^\pi) 的差距,受限于函数类 (\mathcal{F}) 所能达到的最佳近似误差。
- 当 (\lambda = 1)(蒙特卡洛)时,界限最紧。
- 如果 (Q^\pi \in \mathcal{F}),则最佳投影误差为零,从而 (Q_{w^*} = Q^\pi)。
- 如果 (Q^\pi \notin \mathcal{F}),则 (Q_{w^*}) 通常不是 (\mathcal{F}) 中对 (Q^\pi) 的最佳近似点。


总结 📝
本节课我们一起学习了近似动态编程的两种主要范式。
近似值迭代
- 核心思想:直接近似贝尔曼最优算子的迭代应用。
- 关键定理:策略性能受迭代中最大近似误差和衰减的初始误差限制。
- 实践:通常将难以处理的 (L_\infty) 投影替换为基于某个分布(如当前策略的稳态分布)的 (L_2) 回归,从而衍生出 DQN 等实用算法。
- 收敛性:即使最优解在函数类中,由于中间迭代的误差,收敛到最优解也不被保证,但算法通常表现良好。
近似策略迭代
- 核心思想:在策略迭代循环中,使用函数近似进行策略评估。
- 关键定理:极限策略的性能由策略评估误差的极限上界控制。
- 实践:策略评估本身就是一个迭代问题(如 TD(λ)),嵌套在策略迭代循环中,计算成本较高,因此不如值迭代流行。
- 收敛性:同样不保证收敛,可能围绕一个由评估误差决定的界限振荡。其收敛点可能不唯一,且不一定是函数类中对真实价值函数的最佳近似。

两种范式都涉及采样误差和函数近似误差。为了高效优化,我们通常使用 (L_2) 范数代替 (L_\infty) 范数。控制这些误差是获得高性能策略的关键。
11:离策略与多步学习 🎯


在本节课中,我们将学习离策略学习和多步更新的核心概念,探讨它们如何结合使用,以及在实际应用中可能遇到的问题和解决方案。


概述
强化学习的目标是让智能体通过与环境交互,学习如何采取行动以最大化累积奖励。智能体内部可能包含策略、价值函数或模型。决策不仅影响即时奖励,还可能产生长期后果。
在之前的课程中,我们讨论了模型无关的预测与控制、多步更新与资格迹、动态规划算子、函数近似、基于模型的算法以及策略梯度方法。本节课,我们将重点讨论离策略学习,特别是当它与多步更新和函数近似结合时,在模型无关预测、控制以及策略梯度设置中的重要性。
动机:为何需要离策略学习?🤔
离策略学习是指从与目标策略不同的行为策略生成的数据中进行学习。这相当于提出“如果...会怎样?”的反事实问题。
离策略学习有用的原因包括:
- 探索与利用的权衡:你可能想学习最优(贪婪)策略,但不想一直遵循它,因为这可能探索不足。Q学习就是一个典型的离策略算法。
- 学习多个策略:你可能关心多个策略,或者想广泛了解环境信息,以便后续复用。
- 利用观测数据:例如,从存储的日志或其他智能体收集的数据中学习。这包括从自己过去的策略中学习(经验回放),以提高数据效率。
- 策略梯度中的分布校正:在策略梯度方法中,校正数据分布的不匹配至关重要,否则梯度方向可能错误,导致策略性能下降。
离策略与多步更新的基础回顾
离策略的一步更新

对于一步更新,我们可以使用广义的期望SARSA更新(或Q学习)。其核心是自举:在状态 S_t 考虑采取动作 A_t,然后在下一个状态 S_{t+1} 考虑遵循目标策略 π(π 可以与行为策略 μ 不同)。更新目标为:
R_{t+1} + γ * Q(S_{t+1}, A_{t+1} ~ π)



多步更新与重要性采样
对于多步更新,我们不能仅靠一步自举。我们需要考虑更长轨迹的回报,并使用重要性采样进行校正。


假设有一条从时间 t 到 T 的轨迹 τ。在行为策略 μ 下观测到的原始回报为 G_t。为了使其成为目标策略 π 下回报的无偏估计,我们进行如下校正:
Ĝ_t = G_t * (Pr(τ|π) / Pr(τ|μ))
轨迹的概率比可以分解为每一步动作概率比的乘积:
Pr(τ|π) / Pr(τ|μ) = Π_{k=t}^{T-1} (π(A_k|S_k) / μ(A_k|S_k))
这样,校正后回报 Ĝ_t 在行为策略 μ 下的期望,就等于目标策略 π 下原始回报 G_t 的期望。
直观理解:如果某条轨迹在目标策略下很常见但在行为策略下罕见,重要性采样比会很大,从而上调该回报的权重;反之则会下调甚至归零权重。
策略梯度中的离策略学习

在策略梯度中,我们估计的梯度形式为:
∇J(θ) ≈ E_{s~d^π, a~π}[Q^π(s, a) * ∇ log π(a|s)]
在同策略下,我们可以用(多步)回报 G_t 来近似 Q^π(s, a)。但在离策略下,我们必须对 G_t 进行校正,否则梯度估计会有偏,可能导致策略性能不升反降。



离策略学习面临的问题 🚧
离策略学习主要面临两大类问题:


- 高方差:尤其是在使用多步更新和重要性采样校正时,方差可能急剧增加,甚至无穷大。
- 发散与低效学习:当结合自举、函数近似和离策略学习时,可能陷入“致命三要素”,导致学习过程发散。
接下来,我们将深入探讨方差问题及其缓解策略。
问题一:高方差及其缓解策略
方差增大的示例
考虑一个简单的单步奖励例子。有两个动作:右(奖励+10)和左(奖励+20)。目标策略 π 以0.9概率选右,0.1概率选左。
- 同策略情况(行为策略
μ = π):估计的方差较小。 - 离策略情况(行为策略
μ均匀选择,即各0.5概率):即使期望值不变(通过重要性采样校正后仍为11),估计的方差显著增加(标准差从3增加到7)。
根本原因:重要性采样比 π(a|s)/μ(a|s) 可能非常大(当目标策略概率高而行为策略概率低时)或非常小,这放大了回报的波动,导致方差增大。
缓解策略1:每决策重要性采样
核心思想:对于回报中某个时间点的奖励,未来动作的选择不会影响该奖励。因此,在计算该奖励的重要性权重时,只需乘到该奖励发生前为止的动作概率比,而无需乘以之后动作的概率比。


定义重要性采样比 ρ_t = π(A_t|S_t) / μ(A_t|S_t),以及 ρ_t^{t+n} = Π_{k=t}^{t+n} ρ_k。

对于蒙特卡洛回报 G_t = Σ_{k=0}^{T-t-1} γ^k R_{t+k+1},朴素的全轨迹校正为 Ĝ_t = ρ_t^{T-1} * G_t。
每决策重要性采样则将其改写为:
Ĝ_t^{PD} = Σ_{k=0}^{T-t-1} γ^k * ρ_t^{t+k} * R_{t+k+1}
这可以递归地定义为:
Ĝ_t^{PD} = ρ_t * (R_{t+1} + γ * Ĝ_{t+1}^{PD})
对于动作价值函数 Q(s, a) 的估计,由于第一个动作已给定(条件于 A_t = a),校正从下一步开始:
Ĝ_t^{PD-Q} = R_{t+1} + γ * ρ_{t+1} * Ĝ_{t+1}^{PD-Q}
每决策重要性采样减少了不必要的权重乘积,通常能有效降低方差。


缓解策略2:控制变量(误差加权)
核心思想:在TD更新中,对误差项进行重要性加权,而非直接对回报进行加权。这相当于在原始重要性采样估计上添加了一个期望为零的项(控制变量),从而在不改变期望的情况下降低方差。

考虑单步TD误差。朴素的重要性采样更新为:
ΔV(S_t) = α * [ρ_t * R_{t+1} - V(S_t)]
误差加权更新为:
ΔV(S_t) = α * ρ_t * [R_{t+1} + γ * V(S_{t+1}) - V(S_t)]

可以证明,后者等于前者加上一个期望为零的项 (1 - ρ_t) * V(S_t)。这个附加项与原始估计相关,能够抵消部分方差。在许多实际情况下,误差加权能带来更低的方差。
对于多步情况(λ-回报),我们可以定义离策略的λ-误差 δ_t^{ρλ},并递归地应用误差加权思想。


缓解策略3:自适应自举
核心思想:动态调整自举程度(λ参数),在重要性采样比很大(即严重偏离目标策略)时更多地自举(减小λ),以截断高方差的多步回报;在偏离不大时则使用更长的多步回报(增大λ)。
具体方法是定义时间相关的 λ_t,并令其满足:
λ_t * ρ_t ≤ 1
即:
λ_t = min(1, 1/ρ_t)
这意味着:
- 当
ρ_t ≤ 1(行为策略比目标策略更可能采取该动作),我们设λ_t = 1,继续使用后续回报。 - 当
ρ_t > 1(行为策略罕见但目标策略常见),我们设λ_t = 1/ρ_t < 1,增加自举,截断回报。
这种方法被称为V-trace或自适应λ TD,在深度强化学习(特别是策略梯度方法)中非常常用,能有效平衡偏差和方差。
另一种思路:树回溯算法
树回溯算法是另一种离策略多步学习方法。它不直接使用重要性采样比,而是基于贝尔曼方程,在更新时,对于实际采样的动作,使用采样到的回报;对于未采样的动作,则使用当前的价值估计值,并按目标策略的概率进行加权。
其递归更新目标为:
G_t^{TB} = R_{t+1} + γ * Σ_{a ≠ A_{t+1}} π(a|S_{t+1}) * Q(S_{t+1}, a) + γ * π(A_{t+1}|S_{t+1}) * G_{t+1}^{TB}
树回溯是无偏且低方差的(因为没有重要性采样比中的除法操作)。但当行为策略与目标策略差异很大时,它可能过早自举,同样需要警惕“致命三要素”问题。
问题二:致命三要素与发散
“致命三要素”指的是当自举、函数近似和离策略学习三者结合时,学习过程可能发散。
示例:一个两状态MDP,特征设计不当,使用线性函数近似的TD(0)进行离策略更新,会导致权重无限增长或衰减至无穷。
解决方案:
- 减少自举:使用更大的λ(更接近蒙特卡洛)可以缓解甚至避免发散。例如,在特定条件下,只要λ大于某个阈值,学习就是收敛的。
- 算法改进:诸如V-trace、树回溯、梯度TD等方法都在一定程度上试图解决此问题。如何最好地处理“致命三要素”仍是当前的研究前沿。
总结

本节课我们一起深入探讨了离策略学习和多步更新:
- 动机:离策略学习允许我们从非目标策略的数据中学习,对于探索、经验回放、策略梯度校正等都至关重要。
- 基础方法:使用重要性采样对多步回报进行校正,以得到目标策略下的无偏估计。
- 核心挑战——高方差:重要性采样会显著增加估计方差。我们介绍了三种主要缓解策略:
- 每决策重要性采样:只为必要的奖励施加重要性权重。
- 控制变量(误差加权):对TD误差进行加权,而非直接加权回报,以降低方差。
- 自适应自举:根据重要性采样比动态调整λ,在严重离策略时增加自举来截断高方差回报(如V-trace方法)。
- 核心挑战——致命三要素:自举、函数近似和离策略结合可能导致发散。可以通过减少自举程度或使用改进的算法来应对。

离策略多步学习是构建高效、稳定强化学习算法的关键,理解其原理和挑战有助于我们设计和选择更合适的算法。
12:深度强化学习 #1 🧠


在本节课中,我们将要学习深度强化学习的核心概念。深度强化学习是传统强化学习算法与深度神经网络作为函数近似器的结合。我们将探讨其动机、面临的挑战以及一些关键的解决方案。

概述:为何需要函数近似? 📈

上一节我们介绍了函数近似的动机。表格型强化学习无法扩展到某些大型复杂问题。原因在于,若想为每个状态单独估计其价值,其内存成本会随状态空间线性增长,这使其不切实际。即使内存无限,也存在一个根本问题:若需访问每个状态(甚至多次)才能对其价值做出合理估计,学习过程将极其缓慢。

解决方案是使用函数近似,这是我们泛化所学知识的关键工具。它能将从一个状态学到的知识,推广到所有根据合理定义“相近”的其他状态。
函数近似与深度神经网络 🧠

我们已经介绍了函数近似。本章的目的是专门讨论使用深度神经网络进行函数近似,这通常被称为深度强化学习。
在使用函数近似估计价值时,我们通常采用一个简单方案:一个固定的映射将任意状态转换为某种特征表示 φ,然后我们有一个线性参数化函数,将特征映射为价值。强化学习问题就变成了拟合这些参数 θ,使得价值函数 V_θ 的预测尽可能接近真实价值 V_π。
我们可以将其转化为具体算法。第一步是形式化最小化 V_θ 和 V_π 之间差异的目标,例如使用某种损失函数,如状态上的期望平方误差。这通常还会根据策略本身的访问分布进行加权,以合理分配容量。给定损失函数后,我们可以使用梯度下降来优化它。

这听起来简单,但细节决定成败。在强化学习中实施此过程会引入一些微妙的挑战。首先,计算所有状态的期望过于昂贵。但更深层的问题是,我们想要准确预测的目标 V_π 本身是未知的。

解决这两个问题的方法是:在每次梯度下降更新中,仅考虑一个或少数几个状态来采样梯度,然后使用 V 的样本估计作为目标。为此,我们可以重用所有在无模型算法中讨论过的思想。例如,我们可以通过使用幕回报作为梯度更新中的目标来进行蒙特卡洛深度预测,或者通过在我们自己的价值估计上自举来构建单步目标,从而实现深度时序差分预测算法,而自举本身也由我们希望更新的同一参数 θ 参数化。
为何选择神经网络? 🔍

原则上这都很好。但今天我们要考虑一个更复杂的场景:特征映射 φ 可能过于简单,如果在其上仅使用线性映射,其信息不足以支持合理的价值预测。在这种情况下,我们可能希望使用从状态到价值的更复杂的非线性变换,例如使用深度神经网络作为函数近似器。

你可能会问为何选择神经网络。这确实是个好问题。需要强调的是,神经网络绝非更复杂函数近似器的唯一可能选择,但它们确实有一些优势。首先,这类参数化函数广为人知,并且已知能够发现针对特定任务(在我们的案例中是强化学习)非常有效的特征表示。重要的是,神经网络学习的这种特征表示,是通过端到端的梯度过程优化的,而在线性函数近似中,梯度过程仅用于定义线性映射。因此,我们有一种统一的方式来训练整个参数化模型,以表达性强的方式表示状态,并从此表示中做出合理良好的价值预测。

其次,考虑到深度学习在机器学习中的广泛采用,使用神经网络允许我们直接利用大量优秀的研究成果。例如,监督学习中为网络架构或优化引入的所有思想,我们都可以在强化学习中使用神经网络进行函数近似时加以利用和受益。

自动微分与计算图 ⚙️
在实践中,用神经网络参数化价值函数是什么样子?在最简单的情况下,我们可以考虑所谓的多层感知机。MLP 将状态的基本编码(例如,机器人的原始传感器读数)作为输入,通过应用线性映射(W*s + b)后接非线性变换(如 ReLU)来计算隐藏表示,然后实际的价值估计将作为此嵌入的线性函数计算。重要的是,这个嵌入不是固定的,而是学习得到的。我们使用 DRL 训练的价值估计的参数 θ 不仅包括最终的线性映射,还包括隐藏表示的参数,整个系统是端到端训练的。

这听起来很有吸引力。但如果我们想计算关于 θ 的梯度,我们需要对 MLP 甚至更复杂的架构(如卷积网络)进行微分。事实证明,有一种方法可以以计算高效的方式为任何这些架构计算精确导数,使我们无需自行推导表达式就能获得所需的任何梯度。鉴于深度学习在现代机器学习中的流行,这些通常被称为自动微分的方法实际上在大多数科学计算包中都可用。
本章我们将主要关注结合 RL 和深度学习的概念性挑战,并假设我们拥有这类工具来支持我们通过任意神经网络架构获取梯度。但我想至少简要介绍一下这些工具的工作原理,因为它们对我们所做的一切和 DRL 实践都至关重要。

自动微分背后的第一个重要概念是计算图。这是任何计算(在我们的案例中是估计价值)的抽象表示,形式为有向无环图。计算图对我们有意义的原因是,如果我们知道如何计算计算图中单个节点的梯度,我们就可以通过仅运行一次计算图(从输入到输出),然后执行一次反向遍历,自动计算图中每个节点相对于任何其他节点的梯度,并在路径合并时沿路径累积和相乘梯度。


整个过程不仅计算高效(成本始终与正向传播同阶),而且精确。这不是像有限差分那样的数值近似,而是一种以完全自动的方式评估任意数值函数真实梯度的方法。

这在许多现代机器学习框架中都有原生实现,包括本课程作业选择的框架 JAX。在 JAX 中,自动微分基于追踪机制实现,并通过 jax.grad 程序转换暴露给用户。这是一个 JAX 实用程序,它接收一个你可以用标准格式编写的 Python 函数,然后返回另一个 Python 函数,但这个新函数计算的是原函数的梯度,并为任何给定输入评估该梯度,而不仅仅是计算正向传播。

实现一个简单的深度 Q 学习智能体 🤖
为了结束引言部分,我想展示一个使用 JAX 的自动微分工具实现基本 Q 学习智能体的简单示例,该智能体使用神经网络作为函数近似器。

这样的深度 Q 学习智能体是什么样子?首先,我们需要选择如何近似 Q 值。为此,我们将使用一个单一的神经网络,它以状态作为输入,并输出一个向量,每个元素对应一个可用动作。例如,这个网络可以是一个如前所述的 MLP。注意,我们在这里隐含地做了一个设计选择:网络接收单个状态并输出所有动作价值。这不是严格要求,我们也可以将状态和动作都作为输入传递给网络,然后网络只返回该动作的 Q 值。但通常,如果我们能在单次前向传播中计算所有 Q 值,计算效率会更高,因此这在实践中是相当常见的选择。
在 JAX 中,我们可以使用 Haiku 模块非常简单地定义这样的神经网络。定义好网络后,我们还需要定义网络参数的梯度更新。对于 Q 学习,这看起来很像开始时展示的 DT 更新,但我们将更新特定动作的价值 Q_θ(s_t, a_t),并使用奖励加上折扣后的最大 Q 值作为回报的样本估计目标。有趣的是,虽然你可以完全按照这种形式编写更新以匹配数学公式,但通常,如果你查看 DQN 智能体的实现,可能会看到它以略有不同的方式编写,更符合标准深度学习的习惯:定义一个伪损失函数,即本幻灯片上的第二个方程。这没问题,但要使此损失函数的梯度恢复正确的 Q 学习更新,有几个重要的注意事项。首先,在计算此损失的梯度时,我们需要忽略 max Q 对参数 θ 的依赖。其次,要意识到这不是一个真正的损失函数,它只是一个在取梯度时能返回正确更新的道具。

在代码中如何实现?这在 JAX 中又相当简单,因为我们可以只定义一个伪损失函数,它接收参数 θ 和转移样本(观察、动作、奖励、折扣和后续观察),然后计算在 s_t 和 s_{t+1} 处的 Q 值,通过将奖励与折扣后的最大 Q 值相加来组装目标,然后计算这两者的平方误差。关键是为了确保损失函数的梯度实现我们的 DQ 学习更新,我们必须在代码中添加 stop_gradient 项。stop_gradient 实现了这个思想:梯度计算将忽略目标 t-1 对参数 θ 的依赖。为了实际获得更新,我们需要实际计算梯度,然后通过随机梯度下降更新参数。
这当然是一个相当简单的智能体,但它实际上展示了定义深度强化学习智能体的完整流程:我们定义了网络和梯度更新,并应用了这些更新。它看起来如此简单明了的原因在于,我们利用了 JAX 强大的自动微分能力,它允许我们仅通过调用 jax.grad 相关数值函数,就能从损失函数(或本例中的伪损失函数)中获得更新。

深度强化学习的挑战与应对 🛡️

在下一节中,我们将深入探讨 DRL 的挑战,如何使强化学习部分意识到我们对函数近似的特定选择,反之亦然,如何通过理解使用强化学习目标更新参数的独特属性,使我们的深度网络更适合强化学习。

在本节中,我想让你深入了解当强化学习思想与深度学习结合时会发生什么,既包括使用深度学习进行函数近似时已知的 RL 问题如何表现,也包括我们如何通过牢记强化学习选择对函数近似的影响来控制这些问题。
让我们从上一节的简单在线 DQ 学习算法开始。这个算法有哪些潜在问题?首先,我们从深度学习文献中知道,随机梯度下降假设梯度是独立同分布采样的。如果我们使用在 MDP 连续转移上计算的梯度来更新参数,情况肯定不是这样,因为你在某一步观察到的东西与你上一步观察到的和做出的决策密切相关。另一方面,我们也知道,在深度学习中,通常使用小批量而不是单个样本,在寻找好的偏差-方差权衡方面通常更好。这似乎也不太适合上一节描述的在线深度 Q 学习算法,因为我们在每个新步骤都执行更新。

那么,我们如何使强化学习对深度学习更友好呢?回顾之前的讲座,很明显某些算法可能比其他算法更好地反映深度学习的假设。因此,在选择强化学习算法时,将深度学习放在心上是有好处的。例如,在规划讲座中,我们讨论了 Dyna-Q 和经验回放,我们混合了在线更新和从环境学习模型(Dyna-Q 情况下)或从过去经验缓冲区(经验回放情况下)采样的数据计算的更新。这两者实际上可能直接解决我们刚才在原始 DQ 学习智能体中强调的两个问题,因为通过从内存缓冲区采样状态-动作对或整个转移,我们有效地减少了连续参数更新之间的相关性,并且也免费获得了对小批量的支持。

类似地,如果我们知道我们正在使用深度学习进行函数近似,我们可以做很多事情来帮助学习稳定有效。例如,我们可以使用替代的在线 RL 算法,如资格迹,它自然地整合了来自多步和多次环境交互的参数 θ 信息,而无需像 Dyna-Q 或经验回放那样需要显式规划或回放。或者,我们也可以考虑深度学习文献中的某些优化器,它们可能通过以不同方式整合多个更新的信息(例如使用动量或 Adam 更新)来解决和缓解在线深度强化学习带来的问题。最后,在某些情况下,如果我们牢记深度学习的特性,我们甚至可能能够或愿意改变问题本身,使其更易于处理。例如,我们可以考虑拥有多个与并行环境交互的智能体副本,然后在每次参数更新中混合来自多个环境实例的多样化数据。

致命三元组与稳定性 ⚖️

让我们更深入地探讨。我们说过,如果使用 Dyna-Q 或经验回放,我们可以解决某些问题,并更好地适应深度学习的某些假设。同时,如果你考虑 Dyna-Q 和 Q 学习,以及当我们将这些算法与函数近似结合使用时会发生什么,那么我们实际上结合了函数近似、自举(因为我们使用 Q 学习作为无模型算法)和离策略学习(因为回放过去的数据,我们实际上混合了从过去策略混合中采样的数据,而不仅仅是最新策略)。你可能记得我们将这三者的组合称为致命三元组,这听起来不妙。原因是,我们从理论上知道,当你结合这三样东西时,存在发散的可能性。但同时,如果你阅读深度强化学习文献,你会发现许多成功的智能体确实结合了这三种成分。这里需要注意,致命三元组指出结合这些成分时发散是可能的,但并非必然,甚至不一定很可能。因此,如果我们理解并牢记支撑 RL 和深度学习算法的特性,我们实际上可以做很多事情来确保深度强化学习的稳定性和可靠性,即使它们结合了致命三元组的所有元素。
在接下来的内容中,我想帮助你发展和理解当结合强化学习与使用神经网络进行函数近似时,致命三元组如何以及何时显现。就像我们讨论过的批处理和相关性这两个初始问题一样,通过理解并牢记 RL 和深度学习的基本特性,这已经在设计相当鲁棒的强化学习算法方面大有帮助。

让我们从一项大规模的实证研究开始,我们观察了深度强化学习智能体在许多领域中,由于致命三元组而导致发散的出现。我们发现,经验上,无界发散实际上非常非常罕见,即使你结合了致命三元组的所有元素,参数也往往不会趋于无穷。更常见的是另一种我们称为软发散的现象。软发散是指价值估计最初爆炸性增长到超出合理预期的数量级,但随着时间的推移,这些估计实际上会恢复并回落到合理值。你可能会想,如果软发散在实践中大多会自行解决,它甚至值得关注吗?我们是否应该讨论如何最小化这种初始不稳定性?我认为答案是肯定的,因为即使它不会严重发散到无穷大,在价值 wildly 不正确的状态下进行数十万或数百万次环境交互,确实会影响智能体的行为和收敛到正确解的速度。

那么,让我们讨论一下我们能做些什么。不同的强化学习思想如何帮助我们确保在使用深度网络进行函数近似时,学习动态是稳定有效的?我想告诉你的第一种方法是由 DQN 算法引入的,称为目标网络。其思想是固定用于计算自举目标的参数(例如,在 Q 学习中,这是用于估计下一步最大 Q 值的参数),然后仅定期更新这些参数。这样做,我们干扰了致命三元组核心的反馈循环。致命三元组的核心问题是,当你更新一个状态时,你可能也不经意地更新了你将要自举的下一个状态,这可能会产生某些反馈循环。但如果用于自举的参数至少在一段时间内被冻结,那么这个反馈循环就被打破了。

另一种方法是,我们知道 Q 学习本身即使在表格设置中也有高估偏差,这可能导致至少在初始阶段出现不合理的高价值估计。因此,这可能与致命三元组相互作用,增加观察到价值估计爆炸的可能性。如果是这种情况,那么我们可以使用例如双 Q 学习来减少更新的高估,这也有助于使算法相对于致命三元组更加稳定。在双 Q 学习中,我们使用独立的网络来选择自举的动作和评估该动作。巧妙的是,这实际上与目标网络的思想结合得很好,因为我们可以使用冻结的参数(目标网络的参数)作为两个网络之一。实证表明,这两种思想都具有很强的稳定效果。
总的来说,我个人发现观察这些现象以及强化学习方面的不同选择如何与由自举、离策略和函数近似组合触发的致命三元组相互作用,是非常有启发性的。有趣的是,这不仅仅是关于目标网络或双 Q 学习。在我们强化学习智能体设计选择的整个过程中,每个设计选择都可能与函数近似和我们深度网络的学习动态相互作用。

网络架构与强化学习 🏗️
在本节中,我想采取与上一节截然不同的视角。与其关注在设计强化学习算法时意识到函数近似的选择,我想讨论深度学习方面:我们能否设计特别适合强化学习的神经网络架构?我们能否理解用通过自举构建的目标来优化神经网络意味着什么?例如,在强化学习问题中增加网络容量意味着什么?

这当然是一个巨大的研究领域,我无法在本讲座中涵盖所有思想,但希望能至少给你一些直觉和思路。

如果你思考深度学习近期的历史,其许多成功来自于能够在网络架构中编码某些归纳偏差,从而最好地支持在特定广泛类别问题中的学习,同时又不限制其仅通过端到端梯度下降为每个任务构建定制化表示的能力。例如,卷积网络的大部分能力来自于其学习平移不变特征的能力,这使得计算机视觉任务的学习变得容易得多。类似地,LSTM 通过特定架构支持长期记忆,允许梯度学习使用门控在长跨度上保留信息,这对自然语言处理的许多早期成功至关重要。

由于强化学习与视觉、自然语言处理以及深度学习最常应用的监督学习任务都相对不同,我认为如果仅仅复制为监督学习设计的网络架构就能给我们带来最优结果,那将是令人惊讶的。相反,我认为我们应该考虑什么是强化学习的正确架构,我们应该纳入哪些归纳偏差以使价值估计尽可能容易。这就是几年前引入的 Dueling Network 论文的动机,它引入了一种网络架构,可以显著提高深度 Q 学习智能体的性能,基本上是开箱即用,无需改变强化学习方面。
与卷积网络和 LSTM 一样,Dueling 架构实际上非常简单。通常,深度 Q 学习智能体使用本幻灯片顶部的网络架构。他们以观察作为输入(例如,如果智能体正在学习掌握视频游戏,则是屏幕像素),通过一些隐藏层(如果观察是视觉形式,通常是卷积层)处理此输入,然后应用一些全连接层以输出所有动作价值作为一个向量。然而,通常我们知道,我们可以将动作价值分解为状态价值估计(着眼于长期,与动作无关,仅取决于状态)加上一个即时优势项(也取决于我们即将采取的动作)的总和。这实际上暗示了一种不同的架构:像以前一样,我们以观察作为输入,如果是图像则通过一些卷积层处理,但随后网络通过求和一个标量和一个向量输出来生成 Q 值,它们有各自独立的处理流,从而强制网络将动作价值表示为动作相关项和动作无关项的总和。
如果你使用这样的架构,你可以使用标准的深度 Q 学习来训练得到的 Q 值,基本上不需要改变其他任何东西。但这有帮助吗?考虑一个具体问题,我们训练了这个 Dueling Q 网络来估计一个必须在高速公路上控制汽车的智能体的 Q 值。幻灯片中的图像显示了 Dueling 网络的标量和向量组件主要关注什么。左边的图显示了标量项主要关注什么,右边的图显示了向量(动作相关)项主要关注什么。你可以看到,左边的标量项学会主要关注道路前方远处的方向,因为这对当前状态的长期价值很重要。而右边的向量项学会主要关注汽车正前方的东西,因为这对估计每个动作的即时优势很重要。我认为这本身就很有趣,但也带来了相当显著的学习改进,智能体学习得更快、更稳定。
然而,在思考强化学习与深度学习时,网络的拓扑结构并不是唯一重要的因素。例如,在监督学习中,我们经常发现更多的数据加上更大的容量(不仅仅是更好的架构)等于更好的性能。但是,网络容量如何影响强化学习中的价值函数估计呢?根据我的经验,通常更大的网络在强化学习中也往往表现更好,但并非全是好处。
如果我们使用更大的网络,我们将更容易受到致命三元组的影响,尤其是在使用 Q 学习时。在我们之前讨论的大规模实证研究中,我们也考察了不同的网络容量。我们发现,随着我们使网络越来越大,至少最初价值可能增长到不合理估计的软发散可能性实际上增加了。这有很多原因,一个潜在的主要候选原因是更大的网络往往具有更平滑的景观,至少最初这可能意味着它可能更容易受到不适当泛
13:深度强化学习 #2 🧠
概述
在本节课中,我们将探讨深度强化学习中的核心挑战之一:表示学习。我们将学习如何通过构建更丰富的世界知识来改进智能体的表示,从而支持更好的泛化和更快的收敛。具体来说,我们将聚焦于两种主要思想:通用价值函数和分布式价值预测。


通用价值函数作为辅助任务
在上一节中,我们讨论了深度神经网络如何用于强化学习中的函数逼近,以及由此产生的问题,如“致命三角”和灾难性遗忘。这些问题本质上是不恰当泛化的问题。
本节中,我们来看看如何通过直接解决表示学习这一根本问题来应对这些挑战。核心观点是:目前我们的智能体仅为一个非常狭隘的目标(预测或最大化单一标量奖励)优化其表示。这种狭隘的目标可能导致智能体学习到过于具体、过拟合的状态表示,从而损害泛化能力。
一个自然的思路是让智能体学习关于世界的更丰富的知识,而不仅仅是单一任务奖励。我们可以从监督学习文献中汲取灵感。在众多可能的方法中,我们将重点关注两类在强化学习研究中备受关注的思想:通用价值函数 和 分布式价值预测。
什么是通用价值函数?

通用价值函数在形式上与标准价值函数非常相似,它预测在给定策略下,某个标量信号的期望累积折扣和。在GVF的术语中,我们选择预测的标量信号 ( C ) 被称为 累积量,关联的折扣因子 ( \gamma ) 定义了预测的视野,而目标策略 ( \pi ) 是计算期望时所依据的行为策略,它不一定是智能体当前执行的策略。

如果累积量是主任务奖励,并且在智能体策略和折扣因子下计算,那么GVF预测问题就简化为标准的策略评估。但我们可以定义许多不同的累积量、视野和假设行为来进行预测。
GVF框架的妙处在于,它允许我们用相同的机制(例如标准的TD算法)来学习所有这些丰富的预测知识。核心问题就变成了:如何利用这些预测来为智能体提供能够支持快速学习和有效泛化的良好表示?
使用GVF预测作为表示
一种简单直接的方法是直接将GVF预测用作表示,这被称为 预测状态表示。其论点是,对于一个足够大且多样化的GVF预测集合,它们将成为任何其他我们可能想做的预测(包括主任务奖励的价值预测)的充分统计量。因此,我们可以将这些GVF预测本身作为状态特征,然后将主任务的价值或策略学习为这些预测的线性函数。
使用GVF作为辅助任务
另一种使用GVF学习状态表示的方法是将其作为 辅助任务。这类似于监督学习中的自监督学习目标。这种方法特别适合深度强化学习智能体,因为神经网络的组合性质允许我们相对容易地将辅助预测与主任务预测结合起来。
具体做法是,在用于函数逼近的神经网络中,共享用于主任务预测(如策略或价值预测)和所有辅助GVF预测的底层部分。这样,主任务和辅助预测都成为单一共享隐藏表示的函数。然后,通过最小化与两类预测相关的联合损失来优化共享和非共享参数。结果是,共享的隐藏表示被迫变得更加鲁棒和通用,编码更多关于世界的信息。
以下是使用GVF作为辅助任务的具体例子:
- UNREAL智能体:除了标准的价值和策略预测头外,还连接了一个辅助头,用于预测400个不同累积量的GVF。这些累积量被构造为连续观察之间像素强度的平均变化(“像素控制”损失)。辅助损失与标准策略和价值损失相加后进行优化。
- 特征控制:当观察不是图像或太大时,可以构造基于网络内部激活值变化的累积量,并类似地学习其GVF。
即使这些辅助累积量看起来有些随意,并且其预测结果并未直接用于决策,但它们迫使表示编码许多关于环境的有用知识(例如,动作如何影响视野中物体的位置)。这在主任务奖励稀疏的情况下尤其有用,因为辅助任务可以提供密集的学习信号,帮助在智能体看到第一个奖励之前就引导表示学习。
为什么辅助任务有效?几何视角
为了理解为什么使用GVF作为辅助预测是有用的,我们可以从几何角度思考表示学习。
在深度强化学习中,当我们更新价值函数时,我们不仅改变最终的价值预测,也更新表示本身以更好地支持当前的价值目标。添加辅助GVF预测相当于对这个第二步(更新表示)进行了正则化,防止表示变得对当前价值预测过于特定。
这种正则化之所以有帮助,是因为在学习过程中,智能体需要近似许多不同的价值函数(随着策略改进,价值函数在变化)。我们希望一个表示不仅能支持当前的价值预测,还能支持从初始策略价值到最优策略价值这条路径上的所有价值函数。正则化通过防止对当前价值的过拟合,使表示更有可能对未来价值也有效。
那么,哪些GVF能提供最有效的正则化呢?这取决于累积量和目标策略的选择。
- 预测与主任务不同的累积量:这对应于学习主任务价值多面体之外的预测。虽然没有强理论保证这会特别有助于学习路径上的价值,但像“像素控制”这样的方法在实践中效果显著。
- 预测主任务奖励,但针对一组不同于当前策略的目标策略:这迫使表示支持价值多面体内的一系列价值。可以证明,对于一组合适的目标策略,新的表示将捕获价值多面体的主成分,从而为近似多面体内的价值(包括学习路径上的价值)提供良好支持。然而,构造这组“正确”的策略在计算上是不可行的。
- 预测主任务奖励,但针对过去经历过的策略:一个实际且有效的方法是,将智能体在训练过程中已经经历过的过去策略作为GVF的目标策略。这不能保证表示能最优地支持未来价值,但至少能很好地支持学习路径的一个子集上的价值,并且计算上是可行的。实证研究表明,这种选择在多种方案中表现最佳。
处理多任务学习中的挑战


将多个GVF作为辅助任务学习,本质上将智能体学习变成了一个多任务问题。我们同时为许多可以被视为不同任务的预测训练共享表示。
这带来了一个挑战:不同的任务会竞争有限的共享资源(内存、表示容量、计算等)。任何实际的系统都需要定义权衡这些竞争需求的方式。即使不做任何处理,系统也会做出某种权衡——例如,不同GVF预测产生的梯度大小会因其累积量的频率和大小而有很大差异,这导致不同预测对共享参数更新的贡献权重不同。
为了进行合理的权衡,我们希望不同任务产生的梯度具有可比的大小。然而,在强化学习中,由于数据分布和非平稳性,实现这一点比在监督学习中(可以通过对整个数据集进行归一化)要复杂得多。
Pop-Art算法 就是为了解决这个问题而设计的。它通过两个步骤工作:
- 自适应目标归一化:对于每个预测任务(如一个GVF),跟踪其目标值(如Q学习目标)的移动平均值(一阶矩 ( \mu ) )和二阶矩 ( \nu ) )。在每一步,使用归一化后的目标 ( (目标 - \mu) / \sigma ) (其中 ( \sigma = \sqrt{\nu - \mu^2} ) )来计算梯度更新。这使得梯度大小更可控。
- 补偿输出层:为了防止更新归一化统计量时影响所有其他状态的非归一化预测值,Pop-Art算法在每次更新 ( \mu ) 和 ( \sigma ) 后,对网络最后一层的权重 ( W ) 和偏置 ( b ) 进行反向调整。具体公式为:
- ( W' = W \cdot \frac{\sigma_{旧}}{\sigma_{新}} )
- ( b' = \frac{\sigma_{旧}}{\sigma_{新}} \cdot b + \mu_{旧} - \frac{\sigma_{旧}}{\sigma_{新}} \cdot \mu_{新} )
这样,既能在更新中使用归一化目标获得稳定的梯度,又能保持用于自举等操作的非归一化预测值不受归一化统计量变化的影响。
Pop-Art已被证明在多任务强化学习(如同时在57个Atari游戏上训练一个智能体)中非常成功,显著提升了性能。它同样适用于GVF辅助任务场景,帮助我们以合理的方式权衡不同预测任务对共享表示的贡献。
通用价值函数学习中的开放问题
本节将讨论GVF学习中几个尚未完全解决的前沿研究问题。
离策略学习
我们讨论的许多辅助GVF是从与主任务策略不同的行为策略生成的经验中学习的,这已经是离策略学习。当试图从单一经验流中学习大量多样化的预测时,面临的离策略程度可能非常极端。因此,我们需要对现有离策略方法进行根本性改进才能成功。
同时,离策略学习也是一个机会。预测许多不同策略下的价值,不仅可以作为辅助任务,还可以用来生成更多样化的经验,为主任务策略的学习提供一种优秀的探索形式。如何最好地做到这一点,仍然是一个开放问题。
泛化
目前,我们将GVF视为一组离散的预测,它们可能共享隐藏表示,但基本上是独立学习的。如何将其扩展到成千上万个预测?一种方法是构建 通用价值函数逼近器:将我们想要预测的累积量或折扣因子的表示也作为网络的额外输入。这样,网络可以同时泛化跨状态和跨目标/任务。这是一个非常活跃的研究领域。
发现

GVF从哪里来?我们如何选择学习哪些GVF?虽然我们讨论了一些构造累积量的方法(如基于像素、基于特征、基于过去策略),但如何选择学习内容的研究还远未成熟。一种近期的方法是使用 元学习(如元梯度)来参数化累积量和折扣因子,并在线地发现智能体应该问世界的“有用问题”。这种方法已在Atari等环境中显示出良好的性能提升。

分布式强化学习
我们今天讨论的最后一个主题是 分布式强化学习。
到目前为止,我们讨论的GVF仍然以期望值的形式表示预测知识。另一种提出的方法是转向学习 回报的完整分布,而不仅仅是期望值。这从另一个方向泛化了通常的预测问题。
与学习多个GVF类似,学习回报分布而不仅仅是期望值,可以提供更丰富的学习信号,从而可能带来更好、更鲁棒的学习效果。然而,这需要我们对时序差分算法进行有趣的扩展。
分类DQN
分类DQN 的目标是学习真实回报分布的分类近似。首先,需要定义一个固定的支撑集(例如,从-10到+10的一系列离散值)。然后,神经网络输出一个概率向量,表示回报取每个支撑点值的概率。期望值可以通过支撑点与概率向量的点积恢复。
学习时,我们采用分布形式的自举:取下一个状态 ( S_{t+1} ) 的预测分布,将其支撑点按折扣因子 ( \gamma ) 收缩并按奖励 ( R_{t+1} ) 平移,得到一个目标分布。然后,将这个目标分布投影回原始支撑集上,并最小化当前状态 ( S_t ) 的预测分布与这个投影后目标分布之间的KL散度来更新网络。

分位数回归DQN

为了超越分类近似中固定支撑集的限制,分位数回归DQN 被提出。它调整与一组固定概率(分位数)相关联的支撑点位置,而不是调整固定支撑点的概率。这更加灵活,因为支撑点可以移动以更好地近似分布,并且对初始支撑范围的选择不那么敏感。
当然,还有更多可能的扩展(例如同时调整概率和支撑点),这是一个非常令人兴奋和有趣的研究领域。
总结
本节课我们一起学习了深度强化学习中改进表示学习的两种核心方法。
首先,我们深入探讨了 通用价值函数,它通过让智能体预测关于世界各种不同标量信号的累积和,来构建更丰富的知识。我们学习了如何将GVF的预测直接用作状态表示,或者更常见地,将其作为 辅助任务 来正则化和丰富共享的隐藏表示。我们还讨论了在多任务学习环境中平衡不同预测任务的重要性,并介绍了 Pop-Art算法 来自适应地归一化目标值,以实现稳定的多任务学习。
其次,我们介绍了 分布式强化学习 的概念,即学习回报的完整分布而不仅仅是其期望值。我们了解了 分类DQN 和 分位数回归DQN 这两种将时序差分算法扩展到分布设置的方法,它们通过提供更丰富的学习信号来潜在地改善表示和学习效果。

最后,我们简要探讨了GVF学习中的一些开放问题,包括 离策略学习、跨预测的泛化 以及 GVF的自动发现。这些领域代表了深度强化学习当前的前沿研究方向。


浙公网安备 33010602011771号