#强化学习导论。
#大部分翻译,小部分自己的理解。
目录
1.1 状态与观测(States and Observations )
1.3.1 确定性策略(Deterministic Policies )
1.3.2 随机策略(Stochastic Policies )
1.3.2.1 类别策略(categorical policies)
1.3.2.2 对角高斯策略(diagonal Gaussian policies)
1.7.1 同策略值函数(On - Policy Value Function)
1.7.2 同策略动作值函数(On - Policy Action - Value Function)
1.7.3 最优值函数(Optimal Value Function)
1.7.4 最优动作值函数(Optimal Action - Value Function)
1.8最优 Q 函数和最优动作(The Optimal Q - Function and the Optimal Action )
1.10优势函数(Advantage Functions )
1.强化学习的关键概念
强化学习(RL)研究智能体(agent )如何通过试错进行学习,它将奖励或惩罚智能体的行为这一想法形式化,使其在未来更有可能重复或避免这种行为。
强化学习的主要角色是智能体和环境。环境是智能体生存并交互的世界。在每次交互时,智能体观察世界状态(可能是部分观察 ),然后决定采取的行动。当智能体对环境采取行动时,环境会发生变化,也可能自行变化。
智能体还会从环境中感知奖励(reward )信号,该信号以数值形式表明当前世界状态的优劣。智能体的目标是最大化其累积奖励,即回报(return )。强化学习方法是智能体学习行为以实现目标的途径。
1.1 状态与观测(States and Observations )
状态 s 是对世界状态的完整描述,不存在从该状态中隐藏的世界信息。观测 o 是对状态的部分描述,可能会省略一些信息。
在深度强化学习中,我们几乎总是用实值向量、矩阵或高阶张量来表示状态和观测。
当智能体能够观测到环境的完整状态时,我们称该环境是完全可观测的。当智能体只能看到部分观测时,我们称该环境是部分可观测的。(现代控制的可控可观矩阵)
(强化学习符号表示中,有时会在从技术角度更适合写观测符号 o 的地方,使用状态符号 s 。具体来说,在讨论智能体如何决定行动时会出现这种情况:我们在符号表示中常表明行动取决于状态,但实际上,由于智能体无法获取完整状态,行动是取决于观测的。)
1.2 动作空间(Action Spaces )
不同的环境允许不同类型的动作。给定环境中所有有效动作的集合通常称为动作空间(action space)。一些环境,如雅达利游戏和围棋,具有离散动作空间(discrete action space),智能体只能采取有限数量的行动。而在其他环境中,比如智能体在现实世界中控制机器人的情况,具有连续动作空间(continuous action space)。在连续空间中,动作是实值向量。
这种区分对深度强化学习方法有着颇为深刻的影响。一些算法族仅能直接应用于其中一种情况,若要用于另一种情况则需要大幅度调整。
1.3 策略(Policies )
策略(policy)是智能体用于决定采取何种行动的规则。它可以是确定性的,这种情况下通常用μ表示:
也可以是随机性的,这种情况下通常用π表示:
由于策略本质上是智能体的 “大脑”,用 “策略” 一词代替 “智能体” 并不少见,例如说 “策略试图最大化奖励” 。
在深度强化学习中,我们处理参数化策略(parameterized policies):其输出是可计算函数,这些函数依赖于一组参数(例如神经网络的权重和偏差 ),我们可以通过某些优化算法调整这些参数来改变行为。
我们通常用θ或ϕ表示此类策略的参数,然后将其作为下标写在策略符号上以突出这种联系:
1.3.1 确定性策略(Deterministic Policies )
示例:确定性策略。以下是一个使用 PyTorch 的torch.nn
包,为连续动作空间构建简单确定性策略的代码片段:
pi_net = nn.Sequential(
nn.Linear(obs_dim, 64),
nn.Tanh(),
nn.Linear(64, 64),
nn.Tanh(),
nn.Linear(64, act_dim)
)
这构建了一个具有两个大小为 64 的隐藏层且使用双曲正切(tanh)激活函数的多层感知机(MLP)网络。如果obs
是一个包含一批观测值的 NumPy 数组,可按如下方式使用pi_net
来获取一批动作:
obs_tensor = torch.as_tensor(obs, dtype=torch.float32)
actions = pi_net(obs_tensor)
1.3.2 随机策略(Stochastic Policies )
在深度强化学习中,两种最常见的随机策略是类别策略(categorical policies)和对角高斯策略(diagonal Gaussian policies) 。
类别策略用于离散动作空间,就像一个分类器。比如在玩石头剪刀布游戏(离散动作空间 )时,智能体通过类别策略决定出石头、剪刀还是布。神经网络先接收游戏相关观测(比如对手之前的出法等 ),经过一些层处理后,用 softmax 函数算出出每种手势的概率,然后据此采样决定动作 。对数似然计算就像是衡量做出某个动作决策的合理性程度,通过动作对应概率向量的索引来计算 。
对角高斯策略用于连续动作空间,比如机器人手臂移动(连续动作空间 )。用均值向量和协方差矩阵(对角高斯分布下可简化表示 )描述动作分布。有两种表示协方差矩阵方式,一种是用固定的对数标准差向量,另一种是用神经网络输出对数标准差 。采样时,结合平均动作、标准差和噪声向量生成动作样本 ,对数似然公式是衡量在给定状态下采取某个动作可能性的一种计算方式 。
对于使用和训练随机策略,有两个关键计算极为重要:
- 从策略中采样动作。采样动作即从策略给出的动作概率分布里选一个动作执行,就像在一堆写有不同动作的纸条里,按纸条被抽中的概率去抽一张,决定做什么动作 ;
- 计算特定动作的对数似然,
。计算似然对数用于评估在当前状态下采取某个动作的可能性大小,数值越大说明这个动作在当前状态下越有可能被合理采取 ,在训练策略时很重要,能帮助判断策略决策的好坏 。
接下来,我们将描述如何针对类别策略和对角高斯策略进行这些计算。
1.3.2.1 类别策略(categorical policies)
类别策略就像是对离散动作进行分类的分类器。你为类别策略构建神经网络的方式与构建分类器相同:输入是观测值,接着是若干层(可能是卷积层或全连接层,取决于输入类型 ),然后有一个最终的线性层,为每个动作输出对数几率(logits),再通过 softmax 函数将对数几率转换为概率。
采样:给定每个动作的概率,像 PyTorch 和 TensorFlow 这样的框架都有内置的采样工具。例如,可查看 PyTorch 中关于类别分布(Categorical distributions)的文档、torch.multinomial 、tf.distributions.Categorical 或tf.multinomial 。
对数似然:将最后一层的概率表示为。它是一个向量,其元素数量与动作数量相同,所以我们可以将动作视为该向量的索引。动作a 的对数似然可通过对向量进行索引得到:
1.3.2.2 对角高斯策略(diagonal Gaussian policies)
多元高斯分布(或者你更愿意称之为多元正态分布 )由均值向量和协方差矩阵
描述。对角高斯分布是一种特殊情况,其协方差矩阵只有对角线上有元素。因此,我们可以用一个向量来表示它。
对角高斯策略总是有一个神经网络,将观测值映射到平均动作。通常有两种不同方式来表示协方差矩阵。
第一种方式:存在一个对数标准差向量,它不是状态的函数:
是独立的参数。(你应该知道:我们对 VPG、TRPO 和 PPO 的实现是采用这种方式。 )
第二种方式:有一个神经网络将状态映射到对数标准差。它可以选择与均值网络共享某些层。
注意,在这两种情况下,我们输出的是对数标准差而不是直接输出标准差。这是因为对数标准差可以取 中的任何值,而标准差必须是非负的。如果不必强制加上这些限制,训练参数会更容易。通过对对数标准差取指数可以立即得到标准差,所以我们用这种方式表示不会损失任何信息。
采样:给定平均动作和标准差
,以及来自标准高斯分布的噪声向量
,可以通过以下公式计算动作样本:
其中表示两个向量的逐元素乘积。标准框架有内置的生成噪声向量的方法,比如
torch.normal
或tf.random_normal
。或者,你可以构建分布对象,例如通过torch.distributions.Normal
或tf.distributions.Normal
,并使用它们来生成样本。(后一种方法的优点是这些对象还可以为你计算对数似然。 )
对数似然:对于均值、标准差
的对角高斯分布,k 维动作a 的对数似然由下式给出:
1.4轨迹(Trajectories )
轨迹 是世界中的状态和动作的序列,
世界最初的状态,,是从初始状态分布中随机抽取的,有时表示为
:
状态转换(在时间的状态
和
的状态
之间世界发生的变化),由环境的自然法则所支配,并且只依赖于最近的一次动作
。它们可以是确定的,
或随机的,
动作由智能体根据其策略执行。
通俗来说,轨迹是智能体与环境交互过程中产生的完整状态 - 动作序列,就像智能体在环境中 “走一遍” 的完整记录,包含了每一步的状态(智能体看到的环境样子)、每一步的动作(智能体采取的行为)和每一步的奖励。
1.5奖励与回报(Reward and Return )
奖励函数在强化学习中至关重要。它取决于世界的当前状态、刚刚采取的动作以及世界的下一个状态:
,
尽管通常这会简化为仅依赖于当前状态,即 ,或者状态 - 动作对
。
智能体的目标是最大化轨迹上某种累积奖励的概念,但这实际上可以有几种含义。我们将用 表示所有这些情况,并且从上下文要么能清楚知道我们指的是哪种情况,要么这并不重要(因为相同的方程将适用于所有情况)。
一种回报是有限时域无折扣回报( finite-horizon undiscounted return),它只是在固定步数窗口内获得的奖励之和(奖励直接相加等于回报):
。
另一种回报是无限时域有折扣回报(infinite-horizon discounted return),它是智能体获得的所有奖励的总和,但根据奖励在未来多远获得而进行折扣(当下的奖励比未来的奖励要好,故加权奖励相加等于回报)。这种奖励的表述包括一个折扣因子
然而,我们为什么需要一个折扣因子呢?我们不就是想要获得所有奖励吗?我们确实是,但折扣因子既直观合理又在数学上方便。直观层面:现在的现金比以后的现金好。数学层面:无限时域的奖励总和可能不会收敛到一个有限值,并且在方程中很难处理。但有了折扣因子,在合理条件下,无限求和会收敛。
虽然在强化学习形式体系中这两种回报表述之间的界限相当明显,但深度强化学习实践往往在很大程度上模糊了这条界限——例如,我们经常设置算法来优化无折扣回报,但在估计价值函数时使用折扣因子。
总结:奖励是环境对智能体行为的即时反馈,回报是累积奖励,用于衡量智能体在一个轨迹(一系列状态和动作)上的总体表现。
1.6强化学习问题(The RL Problem )
无论选择何种回报度量(无论是无限时域折扣还是有限时域无折扣),也无论选择何种策略,强化学习的目标是选择一种策略,当智能体按照该策略行动时,使期望回报(expected return)最大化。
为了讨论期望回报,我们首先必须讨论轨迹上的概率分布。
假设环境转移和策略都是随机的。在这种情况下,一个 步轨迹的概率是:
。
期望回报(无论哪种度量),用 表示,那么:
。
强化学习的中心优化问题可以表示为 ,其中
是最优策略(optimal policy)。
综上,强化学习问题的核心是让智能体找到一种 最优策略,使按此策略行动时的 期望回报 最大化。策略决定智能体在不同状态下的行动,期望回报则是对智能体按策略行动后累积奖励的平均度量。例如在游戏中,智能体每一步的动作会影响后续状态与奖励,强化学习就是要寻找这样一种策略:让智能体在与环境的交互过程中,最终获得的累积奖励的期望值达到最大,从而实现目标优化。
1.7价值函数(Value Functions )
值函数(Value Function)是强化学习中用于评估 状态或状态 - 动作对 “价值” 的工具,本质是计算从某状态或状态 - 动作对出发,按特定策略行动后能获得的 期望回报,以此衡量该状态或状态 - 动作对的优劣。
了解一个状态或状态 - 动作对的值通常是很有用的。这里所说的“值”,是指如果从那个状态或状态 - 动作对开始,然后永远按照特定策略行动,所得到的期望回报(expected return)。
几乎每一个强化学习算法都会使用值函数。 这里有四个主要的函数:
1.7.1 同策略值函数(On - Policy Value Function)
,如果你从状态
开始并始终按照策略
行动,它给出期望回报:
。
值函数(V):评估 状态 的价值。
1.7.2 同策略动作值函数(On - Policy Action - Value Function)
,如果你从状态
开始,采取任意动作 a(该动作可能不是来自策略),然后永远按照策略
行动,它给出期望回报:
。
Q 函数:评估 状态 - 动作对 的价值。
1.7.3 最优值函数(Optimal Value Function)
,如果你从状态
开始并始终按照环境中的最优策略行动,它给出期望回报:
。
值函数(V):评估 状态 的价值。
1.7.4 最优动作值函数(Optimal Action - Value Function)
,如果你从状态
开始,采取任意动作a,然后永远按照环境中的最优策略行动,它给出期望回报:
。
Q 函数:评估 状态 - 动作对 的价值。
问题1:当我们谈论值函数时,如果我们不考虑时间依赖性,我们仅指期望的无限时域折扣回报(infinite - horizon discounted return)。对于有限时域无折扣回报的值函数,需要将时间作为一个参数。你能想到为什么吗?提示:当时间到了会发生什么?
注2:值函数和动作值函数之间有两个经常出现的关键联系:, 以及
。 这些关系直接来自于刚刚给出的定义:你能证明它们吗?
1.8最优 Q 函数和最优动作(The Optimal Q - Function and the Optimal Action )
最优动作值函数与最优策略所选择的动作之间存在重要联系。根据定义,
给出了从状态 s开始,采取(任意)动作 a,然后永远按照最优策略行动的期望回报。 在状态s 下,最优策略会选择任何一个能使从 s 开始的期望回报最大化的动作。因此,如果我们有
,我们可以通过
直接获得最优动作 。 注意:可能存在多个使
最大化的动作,在这种情况下,所有这些动作都是最优的,并且最优策略可能会随机选择其中任何一个。但总是存在一个确定性地选择动作的最优策略。
1.9贝尔曼方程(Bellman Equations )
所有这四个值函数都服从被称为贝尔曼方程的特殊自洽方程。
贝尔曼方程背后的基本思想是:起点的价值是你期望从该起点获得的奖励,加上你下一步到达的任何地方的价值。即“当下奖励 + 未来奖励”。
同策略值函数的贝尔曼方程为:
,
,
其中 是
的简写,表示下一个状态
是从环境的转移规则中采样得到的;
是
的简写;
是
的简写。
最优值函数的贝尔曼方程为:
,
。
同策略值函数与最优值函数的贝尔曼方程之间的关键区别在于是否存在对动作的 \( \max \) 操作。包含 \( \max \) 操作反映了这样一个事实:每当智能体选择动作时,为了最优地行动,它必须选择能带来最高价值的动作。
“贝尔曼回溯(Bellman backup)” 这一术语在强化学习文献中经常出现。对于一个状态或状态 - 动作对,贝尔曼回溯是贝尔曼方程的右侧:奖励加上下一个值。
1.10优势函数(Advantage Functions )
在强化学习中,有时我们不需要从绝对意义上描述一个动作有多好,而只需描述它平均而言比其他动作好多少。也就是说,我们想知道该动作的相对优势,我们用优势函数来精确这个概念。
对应于策略的优势函数
描述了在状态s下采取特定动作 a,相较于根据
随机选择一个动作能好多少,假设此后永远按照策略
行动。从数学上讲,优势函数定义为:
。
2.强化学习算法分类
2.1分类概述
在强化学习算法中,智能体是否利用环境模型是一个关键分支,据此分为无模型(Model-Free)与有模型(Model-Based)RL。
有模型方法允许智能体通过规划提前思考,提升样本效率,但环境真实模型常不可得,学习模型面临偏差等挑战;无模型方法虽放弃模型带来的样本效率提升,但更易实现和调优,截至2018年比有模型方法更流行。
无模型RL有两种主要方法。策略优化显式表示策略 \( \pi_{\theta}(a|s) \),通过直接(如A2C/A3C用梯度上升)或间接(如PPO最大化替代目标函数)优化参数,通常在线策略更新,还常学习值函数近似 \( V_{\phi}(s) \) 以更新策略。Q - 学习则学习最优动作值函数 \( Q^*(s, a) \) 的近似 \( Q_{\theta}(s, a) \),基于贝尔曼方程离线策略优化(如DQN、C51)。策略优化稳定性高但样本效率低,Q - 学习相反。也有介于两者之间的算法,如DDPG同时学习确定策略和Q函数,SAC利用随机策略、熵正则化等技巧稳定学习并在标准基准上表现更优。
有模型RL使用模型的方式多样。纯规划如模型预测控制(MPC),每次观察环境时计算最优计划并执行首个动作(如MBMF的研究)。专家迭代结合规划与策略学习,智能体在模型中用规划算法生成优于当前策略的动作,再更新策略(如ExIt训练神经网络玩六子棋,AlphaZero也是典型)。无模型方法的数据增强包括用虚构经验增强真实经验(如MBVE)或纯虚构经验训练(如World Models的“梦境训练”)。还有将规划过程嵌入策略作为子程序,使策略能学习如何及何时使用计划,减少模型偏差影响(如I2A赋予智能体这种想象力)。
2.2无模型(Model-Free)
2.3有模型(Model-Based)
3. 策略优化
在本节中,我们将讨论策略优化算法的数学基础,并将相关内容与示例代码联系起来。我们将介绍策略梯度理论中的三个关键结论:
(1)描述策略性能关于策略参数梯度的最简方程;
(2)一个可从该表达式中剔除无用项的规则;
(3)以及一个可向该表达式添加有用项的规则。
最后,我们会将这些结论整合起来,阐述基于优势函数的策略梯度表达式,即我们在 “原始策略梯度”(Vanilla Policy Gradient)实现中所使用的版本。
3.1 策略梯度推导