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

相关文章
|
7天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
62 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
22天前
|
存储 人工智能 搜索推荐
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
Memoripy 是一个 Python 库,用于管理 AI 应用中的上下文感知记忆,支持短期和长期存储,兼容 OpenAI 和 Ollama API。
70 6
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
|
7天前
|
机器学习/深度学习 人工智能 数据挖掘
AI精通Python365天第1课,揭秘难易度
学习Python能显著提升就业竞争力,实现工作自动化,增强数据分析、机器学习、Web开发等技能,促进跨领域应用和个人成长。无论是职场新人还是资深人士,掌握Python都能带来正向的职业发展和收入增长,同时回馈社会。通过AI辅助学习Python,从基础代码开始实践,逐步提升编程能力,让技术成为个人发展的强大助力。
16 1
|
17天前
|
机器学习/深度学习 人工智能 算法
强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用
本文探讨了强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用,通过案例分析展示了其潜力,并讨论了面临的挑战及未来发展趋势。强化学习正为游戏AI带来新的可能性。
51 4
|
27天前
|
人工智能 IDE 开发工具
Python AI 编程助手
Python AI 编程助手。
42 5
|
25天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
74 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
25天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
68 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
25天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
73 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
29天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
54 3
|
1月前
|
人工智能 C语言 Python
AI师傅+通义灵码=零基础小白上手python真·不是梦
作为一名不懂编程的设计师,我一直渴望掌握AI辅助设计。在快刀青衣的推荐下,我尝试了AI师傅和通义灵码,成功写出了第一个Python程序,并理解了编程的基本概念。通过AI师傅的引导和通义灵码的帮助,我顺利完成了Coursera上的Python课程,获得了两张证书。这种学习方式让编程变得不再遥不可及,为我的未来学习打开了新大门。

热门文章

最新文章