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

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

第十二章:用生成式人工智能玩视频游戏:GAIL

在之前的章节中,我们已经看到如何使用生成式人工智能来生成简单的(受限玻尔兹曼机器)和复杂的(变分自动编码器,生成式对抗模型)图像,音符(MuseGAN)和新颖文本(BERT,GPT-3)。

在所有先前的示例中,我们着重于使用深度神经网络生成复杂数据。然而,神经网络也可以用于学习实体(如视频游戏角色或车辆)如何响应环境以优化奖励的规则;正如我们将在本章描述的那样,这个领域被称为强化学习RL)。虽然 RL 并不是与深度学习或生成式人工智能有内在联系,但这些领域的结合已经创造出了一套优化复杂行为函数的强大技术。

在本章中,我们将向您展示如何将 GANs 应用于学习不同角色在 OpenAI 模拟环境中导航的最佳策略。为了理解这些方法与 RL 传统方法的强大组合,我们将首先回顾 RL 要解决的更一般问题:如何确定给定 状态 的实体的正确 动作,产生一个新的 状态 和一个 奖励。优化这些奖励的规则称为 策略。我们将讨论以下主题:

  • 深度神经网络如何用于学习高维数据(如 Atari 视频游戏的原始像素)的复杂策略。
  • 逆强化学习IRL)的问题 – 如何从观察“专家”智能体给出的策略示例中学习奖励函数 – 这种算法因此也被称为模仿学习,我们将更详细地描述。
  • 我们如何使用 GAN 训练函数来区分专家和非专家行为(就像我们在以前的示例中区分模拟数据和自然数据)来优化奖励函数。

强化学习:动作,智能体,空间,策略和奖励

第一章 《生成式人工智能导论:“从模型中“绘制”数据》》中回忆起,多数判别式人工智能示例都涉及将连续或离散标签应用于一条数据。在本书中我们讨论的图像示例中,这可以是应用深度神经网络来确定 MNIST 图像代表的数字,或者 CIFAR-10 图像是否包含一匹马。在这些情况下,模型产生了一个单一输出,一个最小误差的预测。在强化学习中,我们也希望进行这种点预测,但要经过多个步骤,并且在重复使用中优化总误差。


图 12.1:Atari 视频游戏示例¹

以一个具体的例子来说明,考虑一个玩家控制太空船击落外星飞船的视频游戏。在这个例子中,玩家操纵的太空船是代理;游戏中任意时间点屏幕上的像素集合就是状态。基于这个环境,玩家需要做出正确的动作(例如向右移动,按下开火),这将最大化奖励 – 这里确实是游戏的得分。我们不只需要考虑接下来的即时动作,而是所有动作直到游戏结束,因为只要我们不用完生命值,我们就可以累积额外的分数。专业的视频游戏玩家学会如何在不同情况下做出反应,一个策略,用以面对游戏过程中不同的情况。RL 的问题是确定一个机器学习算法,能够通过接收一组输入(游戏的当前状态)并输出最优动作来增加胜率,来复制这样一个人类专家的行为。

要使用数学符号正式描述这一情况,我们可以将环境,比如视频游戏,在其中代理作为  来表示,这个代理在每个时间点输出一组数据(像素)作为状态 x[t]。在游戏的每个时间点,玩家(算法)从动作集合中选择 a[t],该集合包括n个动作 A = {1, 2, …. N};这也被称为“动作集”或“动作空间”。虽然为了清晰起见,我们在本章中限制了对离散动作空间的讨论,但理论上并没有这样的限制,这个理论同样适用于连续动作(尽管由此产生的 RL 问题会更加复杂,因为有无穷无尽的可能性)。对于这些动作中的每一个,代理会获得奖励 r[t],这可能会改变游戏得分。

如果我们只考虑当前屏幕 x[t] 作为系统的“状态”,那么我们的决策只依赖于当前,并且 RL 问题就成为了马尔可夫决策过程MDP),因为下一步动作的选择只依赖于即时可用的数据,而不依赖于历史(图 12.2)。然而,在上述给定的视频游戏例子中,仅仅考虑当前屏幕可能不足以确定最优动作,因为它只是局部可观测 – 我们不知道敌方星际飞船是否已经移出屏幕(因此它可能会重新出现)。我们也不知道我们的飞船移动的方向,而不经过比较之前的例子我们就无法得知,这可能会影响我们是否需要改变方向。如果环境的当前状态包含了我们需要知道的游戏的所有信息 – 比如一场扑克游戏,所有玩家都展示自己的牌 – 那么我们就说这个环境是完全可观测的。²


图 12.2:马尔可夫决策过程(MDP)³。通过具有一定概率的行动(橙色圆圈)之间的状态(绿色圆圈)的转移(黑色箭头)得到奖励(橙色箭头)。

的确,人类的视频游戏玩家并不仅仅依赖游戏的当前状态来确定下一步该做什么;他们还依赖游戏之前的提示,比如敌人离开屏幕的时间点,以便预料它们再次出现。

类似地,我们的算法将受益于使用导致当前状态s={x[1]…,x[t];a[1]…a[t-1]}的一系列状态和行动作为当前决策的输入。换句话说,“状态”变成了以前状态和行动的这个序列,并且我们仍然可以使用为 MDP 开发的方法来解决这个 RL 问题。

在每个时间点,基于这个状态(历史),我们希望做出决定,以最大化游戏结束时的未来奖励 R。直觉上,我们通常更擅长估计我们即将采取的行动的结果,而不是它们对未来的长期影响,因此我们需要使用一个贴现项,,在计算预期奖励时对近期和长期采取行动的影响进行估计:


这里,t’是当前时间点t和游戏结束T之间的时间点。我们可以看到基于的值,未来奖励函数有三种潜在的解释:

  • . 未来的奖励对我们的决策没有影响,我们只关心当前的奖励。
  • . 随着t’t之间的距离增加,这个乘法因子的指数会变得更大,贴现项变得更小,将未来奖励缩小到无限远处为 0。在这种情况下,我们更加重视近期目标而不是远期目标。
  • . 在这种情况下,我们的环境可能是确定性的,因此我们不需要贴现未来的奖励,因为结果没有不确定性,但即使在随机环境中,使用或可以看作是在奖励计算之间进行正则化的选择(或者选择不进行正则化)。当贴现因子<1 时,该算法受到(潜在稀疏的)长期数据的影响较小,因此可以帮助解决行动空间非常大且在没有进行贴现的情况下训练很多未来步骤可能导致在该空间中单个路径上过拟合的情况。

我们在这里描述的 RL 问题的目标是学习一个值函数Q,它在给定一个序列和一个策略的情况下最大化奖励-将这写成"Q"函数的约定来自于这个函数评估 RL 算法做出的决策的“质量”。


换句话说,给定一个状态(或者,在我们的情况下,一系列状态)和一个提议的动作,Q 函数根据最大的总未来奖励 R 对提议的动作进行评分。这个 Q 函数通常是未知的,我们需要解决它 - 然而,最优的 Q 函数遵循一条基于动态规划的重要规则,称为最优性原则

“最优策略具有这样的性质:无论初始状态和初始决策是什么,剩余的决策必须构成一个对于第一个决策产生的状态而言的最优策略。”⁶

换句话说,无论起始状态如何,一旦我们由于第一个动作而转移到新状态,所有后续动作都必须在最优策略下是最优的。如果我们将这个原则以数学形式写出,它将值函数分成两部分,形成一个递归表达式,称为贝尔曼方程


其中 Q* 是“最优”的 Q 函数,E 是期望值,而  是从中采样未来状态 s’ 的环境。这个表达式表示最优的 Q 函数应该给出当前序列和提议动作的期望值,作为当前奖励 r 和下一系列动作的折现未来值 Q*(s’, a’) 之和的期望值。这个表达式也被称为函数表达式,因为解决方案是函数 Q*,因此这个一般类问题称为“Q 学习”。⁷ 在 Q 学习中解决 Q* 的一种方法是通过值迭代


其中  是一个学习速率,决定了如何快速地根据新信息修改函数。如果我们对足够大的is运行此更新,我们可以收敛到Q的最优值,Q*。 ^(8, 9) 对于简单问题,我们只有少量的动作和状态,我们可以创建一个表格,给出任何潜在动作的Q值。该表中的条目对于每个Q(s, a)都是随机初始化的,并使用值迭代公式进行更新:

状态/动作 A1 A2 A3 A4
S1 Q(S1, A1)
S2
S3

表 12.1:Q 学习的查找表。每个单元格包含特定状态(S)和动作(A)对的 Q 值。值是随机初始化的,并使用值迭代进行更新。

然而,正如之前的作者所指出的¹,对于我们所描述的视频游戏场景这样的问题,几乎不可能枚举所有潜在的序列和动作。此外,由于任何特定序列-动作对的可能性非常低,我们需要采样大量示例才能准确地估计使用值迭代来估计 Q 值。

为了使这个问题更具有计算可行性,我们需要将 Q 从查找表转变为一个可以对它没有见过的状态-动作对的值进行推广估计的函数。为了做到这一点, Q 可以用一些参数  表示:该函数可以是线性的,树模型的,或者在现代应用程序中甚至是我们在本书的其他部分中学习的深度神经网络。在这种情况下,我们的目标更像是一个经典的学习算法,我们尝试最小化:


使用

p 是代理在环境中执行的潜在非常大空间的行动和序列的分布 。由于 L 是可微分的,我们可以像 第三章 中讨论过的深度学习算法一样使用随机梯度下降来优化它:


通过固定参数并优化 L,然后从 ps 构建新的样本,我们得到了一个类似于上面给出的值迭代 Q-学习的迭代更新算法。¹⁰

这种方法在 RL 方法的层次结构中属于哪个位置?一般来说,RL 方法根据以下几点进行分类:

  • 是否使用静态(离线)数据集,还是持续交付给系统的新数据进行训练(在线)。¹¹
  • 策略函数是否使用 Q 进行更新(on-policy)或独立更新(off-policy)。¹²
  • 过渡方程是否明确建模(基于模型)或不是(无模型)。¹²

在所有可能的 RL 算法变体中,上面描述的 Q-学习版本被分类为off-policy, online, and model-free。虽然我们可以使用 Q 的值作为选择下一个行动的策略,我们从 p(]) 的样本不需要遵循这个策略。

在实践中,一个 epsilon-贪婪分布通常用于想要为算法引入一些随机性以防止其陷入局部最小值的问题,比如深度 Q-学习(稍后介绍),它选择“贪婪”(最大化 Q)的行动概率为 e,以及随机行动概率为 1-e。因此,我们正在学习的策略(Q)不严格用于选择具有这种随机性的行动(a)。这种方法是无模型的,因为神经网络近似了过渡模型,并且是在线的,因为它是在动态生成的数据集上学习的,尽管也可以使用静态离线视频游戏会话历史进行训练。

相比之下,在on-policy的 Q 学习算法中,比如状态-动作-奖励-状态-动作SARSA)¹³,我们使用直接更新 Q 函数的方法,就像上面描述的值迭代步骤那样。与离策略示例不同,我们不是根据从分布p(有时称为行为策略)生成的样本或探索性选择的动作来计算最优Q;相反,我们是根据策略选择动作,并可能在学习 Q 的过程中更新该策略。

深度 Q 学习

尽管深度学习领域独立于强化学习方法,如 Q 学习算法,但这两种方法的强大组合被应用于训练算法以接近人类水平地玩街机游戏。¹ 在这项研究中的一个重要见解是将深度神经网络应用于从视频游戏的原始像素生成向量表示,而不是试图显式地表示游戏状态的一些特征;这个神经网络是这个 RL 算法的 Q 函数。

另一个关键的发展是一种称为经验回放的技术,其中状态的历史(在这里,是游戏中的视频帧像素)、行动和奖励被存储在一个固定长度的列表中,并且反复随机重新采样,通过使用上述的ε-贪心方法来以一定的随机可能性选择一个非最优结果。结果是,对于相同数据的许多样本,值函数的更新被平均化,并且连续样本之间的相关性(可能使算法仅探索解空间的有限集合)被打破。此外,这种“深度”Q 学习算法是离策略实现的,以避免使用联合优化策略函数生成最优样本的潜在循环反馈。

深度 Q 学习也是无模型的,即我们没有环境E的表示或模型(比如一个可以模拟游戏新帧的生成模型)。事实上,就像视频游戏的例子一样,它可能只是表示被玩家观察到的游戏的“内部状态”的历史数据样本。

将这些部分组合在一起,深度 Q 学习算法使用以下步骤来学习玩 Atari 游戏¹⁴:

  1. 创建一个列表,以存储(当前状态、动作、奖励、下一个状态)的样本作为“回放内存”。
  2. 随机初始化表示 Q 函数的神经网络中的权重。
  3. 对于一定数量的游戏序列,初始化一个起始游戏屏幕(像素)和对这个输入的转换(比如最后四个屏幕)。这个固定长度历史的“窗口”很重要,因为否则 Q 网络将需要容纳任意大小的输入(非常长或非常短的游戏屏幕序列),这个限制使得将卷积神经网络应用于这个问题变得更容易。
  4. 对于游戏中的一定步骤(屏幕),使用ε-greedy 采样来选择给定当前屏幕和通过 Q 计算的奖励函数的下一个动作。
  5. 更新状态后,将这个转换(当前状态,动作,奖励,动作,下一个状态)保存到重播记忆中。
  6. 从重播记忆中随机选择一组(当前状态,动作,奖励,下一个状态)的转换,并使用 Q 函数计算它们的奖励。使用随机梯度下降来基于这些转换更新 Q。
  7. 对许多游戏和游戏步骤继续步骤 3-6,直到 Q 网络中的权重收敛。

虽然 Q-learning 的其他应用与其特定领域有关,但是使用深度神经网络来近似大量可能结果的 Q 函数的一般方法(而不是可以在表中表示的一小部分状态和动作)在许多情况下都被证明是有效的。其他应用深度 Q-learning 的例子包括:

  • 使用 CNN 处理围棋(一种类似于国际象棋的东亚游戏)游戏板上的位置,并应用 Q-learning 来确定游戏中基于人类玩家的历史例子的下一个最佳移动;2015 年发布了名为“AlphaGo”的模型。¹⁵
  • 对 2017 年 AlphaGo 发布的创新,命名为“AlphaGo Zero”,该程序完全是从合成游戏(两个 RL 代理相互对弈)中学习,而不是从人类玩家的历史示例中学习。¹⁶
  • AlphaGo Zero 的更一般形式“AlphaZero”,也使用自我对弈掌握了国际象棋和将棋。¹⁷
  • AlphaStar 是一种 RL 算法,可以在多人实时战略游戏星际争霸中击败人类大师。¹⁸
  • 一个名为“AlphaFold”的模型,可以根据其 2D 序列预测蛋白质的 3D 结构 - 我们将在第十三章生成 AI 的新兴应用中更详细地描述 AlphaFold。

我们迄今为止描述了 Q-learning 及其变体,以及如何通过深度学习增强 Q-learning 以应对复杂的环境和数据集。然而,我们描述的问题都共享一个共同特征,即我们能够用定义明确的数学术语表达奖励函数(例如游戏中的得分)。在许多现实场景中 - 例如训练 RL 代理驾驶汽车 - 这个奖励函数并不容易定义。在这些情况下,我们可能不是编写奖励函数,而是使用人类驾驶员的示例作为奖励的隐式表示 - 这是一种称为逆强化学习的方法,我们将在下面更详细地描述。

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

相关文章
|
1月前
|
存储 人工智能 开发工具
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
只需要通过向AI助理提问的方式输入您的需求,即可瞬间获得核心流程代码及参数,缩短学习路径、提升开发效率。
1433 4
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
|
14天前
|
人工智能 IDE 开发工具
Python AI 编程助手
Python AI 编程助手。
36 5
|
12天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
43 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
12天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
43 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
12天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
52 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
16天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
39 3
|
23天前
|
人工智能 C语言 Python
AI师傅+通义灵码=零基础小白上手python真·不是梦
作为一名不懂编程的设计师,我一直渴望掌握AI辅助设计。在快刀青衣的推荐下,我尝试了AI师傅和通义灵码,成功写出了第一个Python程序,并理解了编程的基本概念。通过AI师傅的引导和通义灵码的帮助,我顺利完成了Coursera上的Python课程,获得了两张证书。这种学习方式让编程变得不再遥不可及,为我的未来学习打开了新大门。
|
28天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
72 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
110 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
1月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
下一篇
无影云桌面