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月前
|
存储 人工智能 开发工具
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
只需要通过向AI助理提问的方式输入您的需求,即可瞬间获得核心流程代码及参数,缩短学习路径、提升开发效率。
1435 4
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
|
18天前
|
人工智能 IDE 开发工具
Python AI 编程助手
Python AI 编程助手。
37 5
|
27天前
|
人工智能 C语言 Python
AI师傅+通义灵码=零基础小白上手python真·不是梦
作为一名不懂编程的设计师,我一直渴望掌握AI辅助设计。在快刀青衣的推荐下,我尝试了AI师傅和通义灵码,成功写出了第一个Python程序,并理解了编程的基本概念。通过AI师傅的引导和通义灵码的帮助,我顺利完成了Coursera上的Python课程,获得了两张证书。这种学习方式让编程变得不再遥不可及,为我的未来学习打开了新大门。
|
2月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
2月前
|
数据采集 人工智能 自然语言处理
Python实时查询股票API的FinanceAgent框架构建股票(美股/A股/港股)AI Agent
金融领域Finance AI Agents方面的工作,发现很多行业需求和用户输入的 query都是和查询股价/行情/指数/财报汇总/金融理财建议相关。如果需要准确的 金融实时数据就不能只依赖LLM 来生成了。常规的方案包括 RAG (包括调用API )再把对应数据和prompt 一起拼接送给大模型来做文本生成。稳定的一些商业机构的金融数据API基本都是收费的,如果是以科研和demo性质有一些开放爬虫API可以使用。这里主要介绍一下 FinanceAgent,github地址 https://github.com/AI-Hub-Admin/FinanceAgent
|
2月前
|
人工智能 开发者 Python
python读取word文档 | AI应用开发
在RAG系统中,构建知识库时需读取多种外部文档,其中Word文档较为常见。本文介绍如何使用`python-docx`库读取Word文档(.docx格式)中的标题、段落、表格和图片等内容。首先通过`pip install python-docx`安装库,然后利用提供的接口提取所需信息。尽管该库功能强大,但在识别标题样式时需自定义逻辑,并且仅提供图片的URI而非直接加载。示例代码展示了读取文本、识别标题、读取表格及获取图片URI的方法。【10月更文挑战第2天】
83 2
|
3月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络深度剖析:Python带你潜入AI大脑,揭秘智能背后的秘密神经元
【9月更文挑战第12天】在当今科技飞速发展的时代,人工智能(AI)已深入我们的生活,从智能助手到自动驾驶,从医疗诊断到金融分析,其力量无处不在。这一切的核心是神经网络。本文将带领您搭乘Python的航船,深入AI的大脑,揭秘智能背后的秘密神经元。通过构建神经网络模型,我们可以模拟并学习复杂的数据模式。以下是一个使用Python和TensorFlow搭建的基本神经网络示例,用于解决简单的分类问题。
49 10
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
python如何实现AI问答与举例
python如何实现AI问答与举例
39 0
|
3月前
|
Unix Shell Linux
nohup python -u ai_miniprogram_main.py > ../iwork.out 2>&1 & 这句命令是做什么的?
nohup python -u ai_miniprogram_main.py > ../iwork.out 2>&1 & 这句命令是做什么的?
21 1
|
3月前
|
机器学习/深度学习 人工智能 TensorFlow
深入骨髓的解析:Python中神经网络如何学会‘思考’,解锁AI新纪元
【9月更文挑战第11天】随着科技的发展,人工智能(AI)成为推动社会进步的关键力量,而神经网络作为AI的核心,正以其强大的学习和模式识别能力开启AI新纪元。本文将探讨Python中神经网络的工作原理,并通过示例代码展示其“思考”过程。神经网络模仿生物神经系统,通过加权连接传递信息并优化输出。Python凭借其丰富的科学计算库如TensorFlow和PyTorch,成为神经网络研究的首选语言。
52 1