机器学习(ML)(二十) — 强化学习探析

ML-Agents

强化学习(RL)的挑战之一是创建环境。幸运的是,我们可以使用游戏引擎来实现它。这些引擎(例如UnityGodotUnreal Engine)是为创建视频游戏而开发的工具包。它们非常适合创建环境:它们提供物理系统、2D/3D渲染等。Unity ML-Agents Toolkit是一个Unity游戏引擎的插件,可以使用Unity游戏引擎作为环境构建器来训练智能体(Agent)。Unity ML-Agents Toolkit提供了许多出色的预制环境。

深度强化学习中的好奇心是什么?要理解好奇心是什么,我们首先需要了解强化学习(RL)的两个主要问题:

  • 稀疏奖励问题:即大多数奖励不包含信息,因此被设置为0强化学习(RL)基于奖励假设,即每个目标都可以描述为奖励的最大化。因此,奖励充当强化学习(RL)智能体的反馈;如果没有收到任何反馈,就无法判定执行的动作合不合适。
  • 奖励函数是人为创建的;在每个环境中,都必须创建奖励函数

创建一个智能体(Agent)固有的奖励函数,即由智能体(Agent)自身生成的奖励函数智能体(Agent)将充当自学者,因为它将是学生和自己的反馈大师。这种内在奖励机制被称为好奇心,因为这种奖励会促使智能体(Agent)探索新奇/不熟悉的状态。为了实现这一点,智能体(Agent)在探索新轨迹时将获得高额奖励。这种奖励的灵感来源于人类的行为方式。人类天生就有探索环境、发现新事物的内在欲望。计算这种内在奖励的方法有很多种。经典方法是将好奇心计算为智能体(Agent)在给定当前状态和所采取的动作的情况下预测下一个状态的误差。

Actor-Critic

在基于策略的方法中,我们的目标是直接优化策略,而不使用价值函数。更准确地说,Reinforce是基于策略的方法的一个子类,称为策略梯度方法。这个子类通过使用梯度上升估计最优策略的权重来直接优化策略。虽然Reinforce效果很好。但是,由于使用了蒙特卡洛抽样来估计回报(使用整个回合来计算回报),因此在策略梯度预测中存在显著差异。策略梯度预测是收益增长最快的方向。换句话说,如何更新策略权重,以便有更高的概率采取良好收益的动作。Actor-Critic方法,这是一种结合价值和策略的方法的混合架构,它通过减少方差来帮助稳定训练:控制智能体(Agent)动作的Actor(基于策略的方法);衡量所采取动作好坏的Critic(基于价值的方法)。

Reinforce中,根据回报率的高低按比例增加轨迹中动作的概率。记作:

  • 如果回报很高,就将提高(状态,动作)组合的概率。
  • 如果回报很低,就将降低(状态,动作)组合的概率。

此回报是使用蒙特卡洛抽样计算的。通过收集一条轨迹并计算折扣回报,并使用此分数来增加或减少该轨迹中采取的每个动作的概率。如果回报良好,所有动作都会通过增加其被采取的可能性而得到“强化”。,这种方法的优点是无偏。由于不预测回报,因此只使用获得的真实回报。鉴于环境的随机性(一个回合期间的随机事件)和策略的随机性,轨迹可能产生不同的回报,从而导致较高的方差。因此,相同的起始状态可能产生截然不同的回报。正因为如此,从相同状态开始的回报在各个回合之间可能会有很大差异。解决办法是通过使用大量轨迹来减少方差,希望任何一条轨迹引入的方差总体上都会减少,并提供对回报的“真实”预测。

利用Actor-Critic方法减少方差:减少强化算法的方差并更快更好地训练智能体(Agent)的办法是利用基于策略和价值的方法的组合,即Actor-Critic方法。要理解Actor-Critic,想象一下你正在玩电子游戏。你可以和一个朋友一起玩,他会给你一些反馈。你是演员,你的朋友是评论家。一开始你不知道怎么玩,所以你随机尝试一些动作。评论家观察你的动作并提供反馈。通过这些反馈,您可以更新您的策略并更好地玩该游戏。另一方面,你的朋友(评论家)也会更新来提供反馈,以便下次反馈得更好。这就是Actor-Critic背后的思想。学习两个函数近似:控制智能体如何采取动作的策略:;通过衡量所采取的动作有多好来协助策略更新价值函数

Actor-Critic过程:正如所见,使用Actor-Critic方法,有两个函数近似(两个神经网络)。在每个时间步,从环境中获取当前状态​并将其作为输入传递给ActorCritic。我们的策略输入状态并输出动作。

评论家(Critic)将该动作作为输入,并使用​和​计算在该状态下采取该动作的价值:Q值。

在环境中执行的动作​输出新的状态和奖励​。

演员(Actor)使用Q值更新其策略参数。记作:。由于其更新了参数,演员(Actor)在给定新状态​的情况下生成在时要采取的下一个动作。然后,评论家(Critic)会更新其价值参数。

我们可以使用Advantage函数作为评论家(Critic)代替动作值函数来进一步提高学习的稳定性。其思想是Advantage函数计算某个动作相对于某个状态下其他动作的相对优势:与该状态下的平均值相比,在某个状态下采取该动作更好,它从状态-动作对中减去状态的平均值,记作。通过这个函数计算,如果在该状态下采取这个动作,得到的额外奖励与在该状态下得到的平均奖励的差值。额外的奖励是超出该状态预期值的奖励。

  • 如果梯度就会被推向那个方向。
  • 如果梯度就会被推向相反的方向。

实现Advantage函数需要两个值函数。可以使用TD误差作为Advantage函数的良好预测值。记作

多智能体强化学习

之前我们研究了单智能体的强化学习,但是实际我们处在一个多智能体的世界,智能体与智能体之间互动。因此,我们的目标是创建能够与多个智能体互动的智能体。多个智能体在同一个环境中共享和交互。例如,你可以想象一个仓库,其中多个机器人需要导航来装载和卸载包裹,或者一条有几辆自动驾驶汽车的道路。在这些示例中,我们有多个智能体在环境中与其他智能体进行交互。鉴于在多智能体系统中,智能体与其他智能体交互,我们可以拥有不同类型的环境:

  • 合作环境:您的代理商需要最大化共同利益的地方。例如,在仓库中,机器人必须协作才能高效地装卸包裹。
  • 竞争/对抗环境:在这种情况下,智能体希望通过最小化对手的利益来最大化自己的利益。例如,在一场网球比赛中,每个智能体都想击败另一个智能体。
  • 对抗与合作混合:就像在SoccerTwos(一款2vs2游戏)环境中一样,两个智能体是团队的一部分,他们需要相互合作并击败对手团队。

目前有2种方案来设计多智能体系统:集中式去中心化式

  • 集中式:在这个方案中,有一个收集智能体(Agent)经验的流程:经验缓冲区。通过利用经验缓冲区的经验来学习一个通用的策略。
  • 去中心化式:在分散式学习中,每个智能体(Agent)都独立于其他智能体(Agent)进行训练。而不是关心其他智能体正在做什么。好处是代理之间不共享任何信息,因此可以像训练单个智能体一样设计和训练。然而这种方式的缺点是它会使环境变得不稳定,因为底层的马尔可夫决策过程会随着其他智能体在环境中交互而随时间而变化。这对于许多无法在非平稳环境中达到全局最优的强化学习算法来说是个问题。

在去中心化方式中,独立对待所有智能体,而不考虑其他智能体的存在。在这种情况下,所有智能体都将其他智能体视为环境的一部分。这是一个非平稳环境条件,因此无法保证收敛。在集中式方法中,从所有智能体中学习到单一策略。以环境的当前状态作为输入,并以策略输出联合动作,该奖励是全局性的。

在对抗游戏中训练智能体非常复杂。一方面,需要找到一个训练有素的对手来与你的智能体对战。另一方面,如果找到了一个训练有素的对手,当对手太强大时,你的智能体将如何改进其策略?想象一下一个刚开始学习足球的孩子。与非常优秀的足球运动员比赛是毫无意义的,因为获胜或拿到球太难了。所以孩子会不断失败而没有时间学习好的策略。解决方法是自我对弈。在自我对弈中,智能体使用自己的先前副本(其策略)作为对手。这样,智能体将与同一级别的智能体对弈(具有挑战性但不会太难),有机会逐步改进其策略,然后随着对手变得更好而更新其策略。这是一种引导对手并逐步增加对手复杂性的方法。这与人类在竞争中学习的方式相同:开始与水平相当的对手进行训练,然后从中学习,当掌握了一些技能后,就可以与更强大的对手走得更远。

在对抗类游戏中,跟踪累积奖励并不总是一个有意义的指标:因为这个指标取决于对手的技能。使用ELO评级系统(以Arpad Elo命名),计算零和游戏中两名玩家之间的相对技能水平。零和博弈:一个智能体赢,另一个智能体输。这是一种数学表示,即每个参与者的效用收益或损失恰好与其他参与者的效用收益或损失相平衡。ElO系统是与其他玩家的输赢和打平情况得出的。这意味着玩家的评级取决于对手的评级和对手的得分结果。球员的表现被视为一个服从正态分布的随机变量。

近端策略优化(PPO)

近端策略优化(PPO)是一种通过避免策略更新过大来提高智能体训练稳定性的架构。这样做可以保证我们的策略更新不会太大,并且训练更加稳定。训练期间较小的策略更新更有可能收敛到最优解。策略更新步调过大,很容易生成糟糕的策略,并且需要很长时间,甚至没有恢复的可能。为此,我们需要使用当前策略和上一个策略之间的比率来衡量当前策略与上一个策略相比的变化率。将这个比率限制在一个范围内,这意味着我们消除了当前策略与旧策略相差太大的几率。

回顾移一下,策略目标函数,通过这个函数执行梯度上升,这将推动智能体采取更高回报的动作并避免有害动作。主要问题来自于步长:步长太小,训练过程太慢;步长太高,训练的变异性太大。它目的是利用PPO的目标函数来约束策略的更新,该函数使用clip将策略变化限制在一个小的范围内。旨在避免破坏性的大规模权重更新:

其中比率函数比率函数的计算公式为:。它是在当前策略中在状态采取动作的概率,除以上一个策略的概率。我们可以看到,表示当前策略与旧策略之间的概率比:

  • 如果,则在状态下的动作在当前策略中比旧策略中更有可能发生。
  • 如果,则当前策略采取该动作的可能性小于旧策略。

因此,这个概率比是预测旧策略和当前策略之间差异的简单方法。裁剪智能体的目标函数中未裁剪的部分:这个比率可以替代在策略目标函数中使用的对数概率。

如果没有约束,当前策略中采取的动作比之前策略中采取的动作更有可能发生,这将导致显著的策略梯度下降,从而导致过度的策略更新。裁剪代理目标函数的裁剪部分,通过裁剪比率,确保不会有太大的策略更新,因为当前策略不能与旧策略有太大差别。为此,这里有2个方法:

  • TRPO(Trust Region Policy Optimization)利用目标函数外的KL散度约束来约束策略更新,但该方法实现起来比较复杂,计算时间较长。
  • PPO目标函数中的裁剪概率比直接与其裁剪后的替代目标函数相加。

他的剪辑部分是被剪辑范围是在之间。使用裁剪替代目标函数,我们得到两个概率比,一个未裁剪,一个裁剪,范围介于之间,是一个超参数,可以帮助定义这个剪辑范围(在论文中)。然后,取剪辑和未剪辑目标中的最小值,因此最终结果是未剪辑目标的下限。取剪辑和非剪辑目标中的最小值意味着将根据比率和优势情况选择剪辑或非剪辑目标。

如上图所示,这里有6种情况:

  • 情况12的概率比范围介于之间,在情况1中,具有积极优势:该动作优于该状态下所有动作的平均值。因此,我们应该激励当前策略增加在该状态下采取该动作的概率;在情况2中,具有负面优势:该动作比该状态下所有动作的平均值更差。因此,我们应该降低当前策略在该状态下采取该动作的概率。
  • 情况34的概率比低于范围,如果概率比低,则在该状态下采取该动作的概率比旧策略低。在情况3中,优势预测为正(),那么应该增加在该状态下采取该动作的概率;在情况4中,优势预测为负,为了提升该状态下采取该动作的概率。由于(因为在一条水平线上),所以不用更新权重。
  • 情况56:概率比高于范围,如果概率比高于,则当前策略中该状态下采取该动作的概率远高于上一个策略。在情况5中,优势为正,与上一个策略相比,在该状态下采取该行动的概率已经很高,由于(因为在一条水平线上),所以不用更新权重;在情况6中,优势为负,希望降低在该状态下采取该动作的概率。

使用未裁剪的目标部分来更新策略。当最小值是裁剪的目标部分时,这里不会更新策略权重,因为梯度将等于0。因此,仅会在以下情况下更新策略:

  • 概率比在范围内的时候。
  • 概率比超出了范围,但是概率比小于,或概率比大于

你可能会想,为什么当最小值为截断比时,梯度为0。当概率比被截断时,在这种情况下,导数将不是​的导数,而是​或​的导数,其中两者都等于0PPO Actor-Critic的最终裁剪替代了目标损失,它利用裁剪替代目标函数价值损失函数熵奖励的组合:

其中是系数,是价值损失函数,是熵奖励函数,为了确保其充分的探索。

Sample Factory是最快的强化学习(RL)库之一,专注于同步和异步策略梯度(PPO)实现。Sample Factory具有的相关特性:

  • 高度优化的算法架构,实现学习的最大吞吐量。
  • 支持同步和异步训练机制。
  • 支持串行(单进程)模式,方便调试。
  • 在基CPU和GPU加速的环境下均实现了最优性能。
  • 支持单智能体多智能体训练,自我对弈,同时支持在一个或多个GPU上同时训练多个策略。
  • 支持PBT(Population-Based Training)模型训练方法。
  • 支持离散、连续、混合动作空间。
  • 支持基于矢量、基于图像、字典观察空间。
  • 通过解析动作/观察空间规范自动创建模型架构。支持自定义模型架构。
  • 支持自定义环境导入工程。
  • 详细的WandBTensorboard摘要、自定义指标。
  • 整合了多个示例(调整参数和训练模型)并与环境集成。

Sample Factory工作原理,如下图所示:

Sample Factory的工作原理是由多个执行工作者(rollout workers)、推理工作者(inference workers)和一个学习工作者(learner worker)进程构成。工作者进程之间通过共享内存进行通信,从而降低了进程之间的通信成本。执行工作者(rollout workers)与环境进行互动,并将观察结果发送给推理工作者(inference workers)。推理工作者查询策略的指定版本,并将动作发送回执行工作者(rollout workers)。经过k步之后,执行工作者(rollout workers)会将经验轨迹发送给学习工作者(learner worker),以便学习工作者(learner worker)能够更新智能体的策略网络

Sample Factory中的Actor Critic模型由3个组件构成:

  • 编码器(encoder):处理输入观察值(图像、矢量)并将其映射到矢量,这部分可以自定义。
  • 核心(core):整合一个或多个编码器的向量,可以选择在基于内存的智能体中包含单层或多层LSTM/GRU
  • 解码器(decoder):在计算策略和值输出之前,将附加层应用于模型核心(core)的输出。

有模型的强化学习(MBRL)

有模型的强化学习(MBRL)与无模型的强化学习仅在学习动态模型方面有所不同,但这对于决策的制定方式有着重大的影响。动态模型通常对环境转移动态进行建模,,但逆动态模型(从状态到动作的映射)或奖励模型(预测奖励)都可以在这个框架中使用。MBRL定义:

  • 有一个智能体反复尝试解决一个问题,积累状态和动作数据。
  • 利用这些数据,智能体可以创建一个结构化的学习工具,即动态模型,用来推理真实环境。
  • 通过动态模型,智能体可以通过预测接下来采取的动作。
  • 通过这些动作,智能体可以收集更多数据,改进所述模型,并且改进接下来的动作。

有模型的强化学习(MBRL)采用智能体在环境交互中的框架,学习环境模型,然后利用该模型进行决策。具体来说,智能体在转换函数控制的马尔可夫决策过程 (MDP)中执行,并在每一步中返回奖励。通过收集的数据集,智能体学习一个模型,是以最小化转换的负对数似然。这里采用基于样本的模型预测控制(MPC),使用学习到的动态模型,它从一组从均匀分布抽样的动作中,优化有限、递归预测范围内的预期奖励。