Python 与 TensorFlow2 生成式 AI(五)(2)

简介: Python 与 TensorFlow2 生成式 AI(五)

Python 与 TensorFlow2 生成式 AI(五)(1)https://developer.aliyun.com/article/1512057

逆强化学习:从专家中学习

上面的深度 Q 学习示例依赖于一个明确的奖励函数——游戏中的分数。然而,我们并不总是能够访问明确的奖励函数,包括在重要的现实场景中,比如自动驾驶汽车。在驾驶员根据道路上的环境选择导航的情况下,我们会给予什么“奖励”值呢?虽然我们对“正确”决定有直观的感觉,但为这样的奖励函数量化详尽的规则将是具有挑战性的。

我们可以不必尝试确定奖励函数,而是观察专业驾驶员执行复杂的操作,比如在多车道交通中合并,并优化一个行为模仿专家的代理。这是一个更一般的问题,被称为模仿学习。模仿学习的一种形式是行为克隆,¹⁹它遵循以下算法:

  1. 从专家行为中收集一组状态、动作对!。
  2. 学习一个策略函数!,其中是一种监督分类算法。

虽然这种方法很直接,但需要大量数据才能创建一个能够推广到未知环境的分类器,特别是当潜在环境的数量很大时(例如自动驾驶汽车的情况)。²⁰

特别是,行为克隆的成功取决于未来环境的分布与训练数据的相似性,当模型的结果能够影响后续观察结果的分布时,这一点尤其困难。例如,自动驾驶汽车在道路上的选择成为重新训练模型的进一步数据,导致潜在的复合错误和数据漂移的反馈循环。²¹

另一种方法是学习一个代理,试图匹配专家的整个轨迹的结果,而不是单个动作,就像行为克隆中一样。然后,该算法的输出是一个在轨迹上将"专家行为"评分高于新手行为的函数。这种方法被称为逆强化学习IRL),因为它颠倒了常见的模式(图 12.3)-在左侧,我们看到了一个典型的反馈循环,如我们为 Atari 玩深度 Q 网络描述的那样,其中一个代理(蓝色)观察到一个状态(s)并使用奖励函数(R)选择一个动作(a)产生一个转移(T)到一个新状态和一个奖励(r)。相比之下,在右侧,从这些状态、动作和转移中产生的奖励隐含地由来自专家(E)的例子表示,代理(蓝色)学习复制这个序列通过一个学习到的奖励函数(R[E]),而不是显式地"在算法的循环中"。换句话说,我们不是从显式奖励函数中学习策略,而是观察专家的行为并推断出一个会导致他们观察到的动作的奖励函数。


图 12.3:强化学习(a)和逆强化学习(b)²²

如何通过从头开始学习奖励函数来量化"专家"的行为呢?如果我们重新审视我们之前的视频游戏示例,我们可以检查专家人类游戏的像素屏幕 x 和动作 ax[1],a[1],x[2],a[2]…)序列,这些序列构成了一个完整的会话,并尝试找到一个函数 f,该函数会为给定的游戏给出总奖励:


然后,我们可以询问给定的函数 f 是否倾向于复制专家玩家的行为,而不是其他替代方案。然而,存在固有的问题-多个 f 可能会给出相同的奖励结果,使得不清楚哪一个(可能性很多)最能泛化到新数据。²³

或者,我们可以尝试优化一个代理,使其产生的观察轨迹与专家的概率相同;换句话说,我们从跟随该代理产生的序列中看到的分布与从专家行为中随机抽取的序列相同,而优化算法基于最小化提出的和从专家处观察到的序列的经验分布之间的差异。²⁴ 这个预期分布(无论是观察到的还是由代理生成的)可以用以下方式表示:


这里P是轨迹()的概率,f是状态的特征,例如视频游戏示例中的观察像素。我们已经解决了解决模糊奖励函数的问题,但我们仍然面临着许多代理可能导致相同行为的可能性。我们甚至可能需要混合不同的策略或奖励函数来模拟给定的专家行为,并且目前尚不清楚如何选择这些。


图 12.4:来自(非)确定性 MDP 的路径轨迹。(b)是确定性 MDP(a)的特定路径(轨迹),而(d)是来自非确定性 MDP©的样本路径,其中对于状态动作a[4]可能导致的情况存在歧义。(23)

当研究受限玻尔兹曼机时,我们可以引用我们在第四章教网络生成数字中看到的分区函数和玻尔兹曼分布。如果我们将由 RL 代理表示的 MDP 并“展开”沿着对一组状态作出反应的一组特定动作的轨迹,我们将得到一组树形图中的变长路径,如图 12.4所示。

通过遵循不同策略,可以获得对这些路径发生的不同分布,即使具有相同的像素特征分布,某些策略可能也会根据特定的奖励函数更喜欢一条路径而不是另一条路径。为了解决这种歧义,我们可以优化具有参数的奖励函数,以使基于这些特征的相同奖励函数值的路径获得相同的偏好,但我们指数地偏爱更高的奖励:


这种方法被称为最大熵;从第四章教网络生成数字中回忆,Z是分区函数,将P归一化为关于由线性奖励函数评估的步骤s[j]组成的平均轨迹f的概率密度。(25)即使在非确定性结果(图 12.4,(b)和(d))的情况下,这也可能是可能的,例如,在计算机随机生成敌方太空船行为的视频游戏中,我们可以将此方程参数化为过渡分布T的条件。(23)


这里,分布与以前相似,但我们增加了基于行动a和状态s使用过渡模型T观察结果o的概率P[T]。  表示指示函数,当 时评估为 1,否则为 0。然后,我们可以优化此方程以找到最大化此函数概率的奖励函数参数:


此似然的梯度仅是期望的特征计数(例如,像素分布)来自专家游戏和通过遵循提出的代理人获得的特征计数之间的差异,根据访问给定状态D的频率:


这给了我们一个优化的目标,但是我们可以选择使用什么样的P。 我们将研究的是最大因果熵,在其中给定行动的概率(因此,状态和路径分布)条件于先前的状态和行动集,就像我们先前的视频游戏示例中一样^(26 27):


因为如果路径永远不终止,这个熵值可能是无限的,所以我们可以应用一个折现因子使其有限²⁶:


其中折现因子B应用于每个时间步t,期望值为初始状态P[0]的分布和随后状态P的分布,受到策略的影响;表示因果熵;而是因果条件概率= (在序列中先前行动的条件概率)。

因此,在这一点上,我们有一个优化目标(折现因果熵),以及计算为特定代理人制定奖励函数的概念,使其行为类似于专家。 这个目标与生成式人工智能有什么联系呢? 答案在于我们如何在区分专家和学习者之间进行类比,并从学习者中生成样本——与我们在第 6第 7第 8章中研究过的 GAN 类似!

对抗学习和模仿

给定一组专家观察(驾驶员或冠军电子游戏玩家),我们希望找到一个奖励函数,为与专家行为匹配的代理人分配高奖励,并为不匹配的代理人分配低奖励。 同时,我们希望在此奖励函数下选择这样一个代理人的策略,,使其尽可能地信息丰富,通过最大化熵和偏好专家而不是非专家的选择。 我们将展示如何通过一种名为生成对抗性模仿学习GAIL)的算法在 2016 年发表的方法来实现这两点。²⁰

在接下来的内容中,我们使用“成本”函数而不是“奖励”函数来匹配此主题的参考文献中使用的约定,但它只是奖励函数的负值。

将这些约束放在一起,我们得到²⁰:


在内部项中,我们试图找到一种最大化折现熵的策略:


因此导致一个大的负值,并最小化成本项。我们希望通过选择一个不仅满足内部约束而且提供低成本专家样式行为的成本函数来最大化不同潜在成本函数的整体表达式。请注意,该内部项也等价于一个寻求其行为优化目标的 RL 问题:


在可能策略空间上  上,记为 。然而,为了限制 c 的可能选择空间,我们应用一个正则化函数 ,它在许多可能选择中寻找低复杂度的 c,并将此约束添加到整体目标中:


我们可以看到我们可以在给定策略(IRL)下交替优化 c,并在该 c 下优化策略(RL) - 这正是我们将要采取的方法。我们可以用前面描述的方法表达最优策略,作为对在该策略下不同状态的 占用度 () 的度量:


然后,RL 和 IRL 问题的最优点等价于最小化学习和专家占用之间的差异:


其中  表示函数合成,,这里表示 RL 代理将 IRL 输出作为其参数之一。然而,我们收到的专家行为示例通常是有限的,因此我们不希望完全模仿它们的分布,因为那可能导致代理过度拟合。相反,我们希望使用距离度量,例如我们在 第六章 中看到的 KL 散度或 JS 散度,来量化观察到的专家行为分布与试图近似该行为的 IRL 代理采取的动作分布之间的差异:


在这个算法中应该使用什么样的正则化函数,?GAIL 算法的作者提出了一个函数,如果成本低则分配低惩罚,反之则分配高惩罚。在论文《生成对抗模仿学习》中给出了满足此属性的正则化函数的完整推导:

其中

这个函数的直观解释是,它最小化了策略 H 的因果熵与惩罚项 (例如,学习策略的可能性)之间的差异,以及专家和学习策略状态的占用差异 :


这个  或  可以写成一个二元分类器的负对数损失,用于区分专家(0)和学习(1)的行动状态对:


这个表达式可能看起来非常熟悉,因为它类似于 第六章 使用 GAN 生成图像 的目标函数,也用于区分生成和真实数据!将这些术语组合在一起(正则化器和因果熵),我们可以看到完整的目标函数是:


要优化这个目标函数,GAIL 算法利用以下步骤:

  1. 准备一组专家轨迹并随机初始化鉴别器和策略参数。
  2. 为 RL 代理生成一组轨迹。
  3. 使用随机梯度下降步骤更新鉴别器参数。
  4. 使用 2015 年发布的名为Trust Region Policy OptimizationTRPO)的算法,使用基于梯度的更新来更新策略参数 - 请参阅原始文章"Trust Region Policy Optimization"了解有关此梯度更新形式的更多详细信息。²⁸
  5. 重复算法的 步骤 2-4 直到策略和鉴别器参数的值收敛。

现在我们已经解释了使用生成式 AI 进行强化学习的直觉,让我们深入到在虚拟环境中训练步行人形的一个实际示例中。

Python 与 TensorFlow2 生成式 AI(五)(3)https://developer.aliyun.com/article/1512059

相关文章
|
2月前
|
人工智能 数据安全/隐私保护 Python
小红书图文生成器,小红书AI图文生成工具,python版本软件
Pillow库自动生成符合平台尺寸要求的配图7;3)利用Playwright实现自动化发布流程6。
|
4月前
|
人工智能 自然语言处理 数据可视化
中国版“Manus”开源?AiPy:用Python重构AI生产力的通用智能体
AiPy是LLM大模型+Python程序编写+Python程序运行+程序可以控制的一切。
|
24天前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
280 1
|
2月前
|
数据采集 人工智能 API
推荐一款Python开源的AI自动化工具:Browser Use
Browser Use 是一款基于 Python 的开源 AI 自动化工具,融合大型语言模型与浏览器自动化技术,支持网页导航、数据抓取、智能决策等操作,适用于测试、爬虫、信息提取等多种场景。
564 4
推荐一款Python开源的AI自动化工具:Browser Use
|
2月前
|
人工智能 测试技术 编译器
从 Python 演进探寻 AI 与云对编程语言的推动
Python 自 2008 年发布 3.0 版本以来,经历了持续演进与革新。十六年间,从 Python 3.0 到即将发布的 3.14,语言设计、性能优化、类库生态及虚拟机技术等方面均有显著提升。字符串处理、异步编程、类型系统等核心功能不断现代化,Faster CPython 和 JIT 编译技术推动运行效率飞跃。同时,AI、云计算等新兴技术成为其发展的重要驱动力。本文全面回顾了 Python 的演进历程,并展望未来发展方向。
|
4月前
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
304 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
4月前
|
存储 机器学习/深度学习 人工智能
多模态RAG实战指南:完整Python代码实现AI同时理解图片、表格和文本
本文探讨了多模态RAG系统的最优实现方案,通过模态特定处理与后期融合技术,在性能、准确性和复杂度间达成平衡。系统包含文档分割、内容提取、HTML转换、语义分块及向量化存储五大模块,有效保留结构和关系信息。相比传统方法,该方案显著提升了复杂查询的检索精度(+23%),并支持灵活升级。文章还介绍了查询处理机制与优势对比,为构建高效多模态RAG系统提供了实践指导。
1126 0
多模态RAG实战指南:完整Python代码实现AI同时理解图片、表格和文本
|
4月前
|
机器学习/深度学习 人工智能 算法
Python+YOLO v8 实战:手把手教你打造专属 AI 视觉目标检测模型
本文介绍了如何使用 Python 和 YOLO v8 开发专属的 AI 视觉目标检测模型。首先讲解了 YOLO 的基本概念及其高效精准的特点,接着详细说明了环境搭建步骤,包括安装 Python、PyCharm 和 Ultralytics 库。随后引导读者加载预训练模型进行图片验证,并准备数据集以训练自定义模型。最后,展示了如何验证训练好的模型并提供示例代码。通过本文,你将学会从零开始打造自己的目标检测系统,满足实际场景需求。
2208 0
Python+YOLO v8 实战:手把手教你打造专属 AI 视觉目标检测模型
|
6月前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
185 28

推荐镜像

更多