使用 Tensorflow 代理进行强化学习 [2022]

已发表: 2021-01-01

随着 DeepMind 的 AlphaGo 方法最近在击败世界围棋冠军选手方面取得成功,强化学习获得了宝贵的人气。 AlphaGo 方法部分是通过对深度神经网络的强化学习来教育的。

这种学习方式是机器学习与经典有监督和无监督范式相比的一个显着特征。 在强化学习中,网络使用深度神经网络响应环境数据(称为状态),并影响代理的行为以尝试优化奖励。

这种技术帮助网络学习如何进行体育运动,例如 Atari 或其他视频游戏,或者可以重写为游戏形式的其他挑战。 在本教程中,一个常见的强化学习模型,我将介绍 Q 学习的广泛原理,并演示如何将深度 Q 学习融入 TensorFlow。

目录

强化学习简介

如上所述,强化学习由一些基本实体或原则组成。 它们是:创造条件和奖励的环境,以及在给定环境中执行动作的实体。 在下图中,您可以看到这种交互:

在这种情况下,智能体的任务是分析它接收到的状态和激励信息,并选择一种行为来最大化它从奖励中接收到的输入。 代理通过与世界的重复接触来学习,或者换句话说,通过重复玩游戏来学习。

为了成功,代理必须:

1. 了解状态、行为和由此产生的激励之间的联系

2. 确定从 (1) 中选择的最佳着法

实施 (1) 需要定义一组可用于通知 (2) 和 (2) 的原则,称为操作策略。 使用深度 Q 应用 (1) 和 (2) 的最常见方法之一是 Deep Q 网络和 epsilon-greedy 策略。

学习:最受初学者欢迎的 5 个 TensorFlow 项目

Q学习

Q 学习是一种基于价值的方式来传递数据以判断代理可以采取哪些行动。 创建一个表格来总结在一个状态下对多个游戏采取行动的好处是一个最初直观的概念,即生成作为行动基础的原则。 这将跟踪最有益的运动。 首先,让我们考虑一个简单的游戏,每个状态都有 3 个状态和两个潜在动作——一张表可以代表这个游戏的奖励:

行动 1 行动 2
状态 1 0 10
状态 2 10 0
状态 3 0 10

在上表中可以看到,对于这个简单的游戏,当智能体处于状态 1 并采取行动 2 时,如果采取行动 1,它将获得 10 的奖励,但奖励为零。 在状态 2 中,条件颠倒,状态 3 最终类似于状态 1。如果一个智能体任意探索这个游戏并计算出在三个状态中的任何一个中获得最多奖励的行为(例如,将这些知识存储在一个数组中),所以上表的实际形式将有效地被知道。

换句话说,如果代理真的选择了它过去学到的提供最高奖励的行为(有效地学习了上表的某种形式),它就会学会如何有效地玩游戏。 当简单地通过求和构建表格是合适的时候,为什么我们需要像 Q 学习和神经网络这样的奇思妙想?

递延奖励

嗯,第一个明显的答案是上面的游戏非常简单,只有 3 个状态和每个状态 2 个动作。 真正的游戏要复杂得多。 上述案例中的延迟奖励原则是另一个缺失的重要概念。 智能体必须学会采取措施正确玩最逼真的游戏,这可能不一定会带来奖励,但可能会在以后产生显着的奖励。

行动 1 行动 2
状态 1 0 5
状态 2 0 5
状态 3 0 5
状态 4 20 0

如果在上述博弈中的所有状态下都采取了行动 2,则智能体回到状态 1,即回到起点。 在状态 1 到 3 中,它甚至获得了 5 分。 因此,如果在所有状态 1-3 中都采取了行动 1,则代理将前往下一个状态,但在进入状态 4 之前不会获得奖励,此时它将获得 20 的奖励。

换句话说,如果代理不采取行动 2 来获得 5 的瞬时奖励,它会更好,而是可以选择行动 1 连续通过状态以获得 20 的奖励。代理希望能够当延迟奖励值太高时,选择导致延迟奖励的行为。

另请阅读: Tensorflow 图像分类

Q 学习法则

这鼓励我们澄清 Q 学习规则。 在深度 Q 学习中,神经网络需要将当前状态 s 作为向量,并为该状态下的每个潜在行为 a 返回一个 Q 值,即对于两者都需要返回 Q(s, a) s和a。 这个 Q(s, a) 需要在训练中通过以下规则进行修改:

Q(s,a) = Q(s,a) + alp[r+γmax Q(s',a ') – Q(s,a)] + alp[r+ γmax Q(s',a')

这条法律需要一些拆包才能升级。 其次,您可以看到 Q(s, a) 的新值需要通过在上述等式的右侧插入一些额外的位来更改其现有值。 从左到右切换。 暂时忘记阿尔法。 在方括号内,我们看到第一个单词是 r,它代表在各州采取行动所获得的奖励。

这是即时奖励; 尚未涉及延迟满足。 下一个词是递延激励估计。 首先,我们有一个 γ 值,它可以忽略延迟奖励效应,它总是介于 0 和 1 之间。稍后会详细介绍。 下一项 maxa'Q(s, 'a') 是下一个条件中可用的最大 Q 值。

让我们让事情变得简单一些——代理从状态开始,采取行动 a,在状态结束,然后代码指定状态中 Q 的最大值,即 max a 'Q(s',a')。 那么,为什么要考虑 Max a 'Q(s',a') 意义呢? 如果它生效并处于状态 s,则表示将全部可能的奖励交给处理程序。

然而,考虑到永远等待可能的激励对代理来说是不可取的,γ 对这个值打了折扣——代理最好用最少的时间瞄准最大的奖品。 请注意,Q(s',a)' 值还隐含地保留了之后经济的最高折扣激励,即 Q(s',a)',因为它保持了状态 Q(s',a) 的折扣动机' 等等。

这是因为智能体不仅会根据即时奖励 r 选择动作,还会根据潜在的未来折扣激励来选择动作。

深度 Q 学习

深度 Q 学习在整个训练阶段都遵循 Q 学习更新规律。 换句话说,创建一个将状态 s 作为其输入的神经网络,然后训练网络为状态 s 中的每个行为生成适当的 Q(s, a) 值。 然后将通过采取具有最大 Q(s, a) 值的动作(通过从神经网络的输出中获取 argmax)来选择代理的动作。 这可以在下图的第一步中看到:

动作选择和训练步骤——深度 Q 学习

一旦进行了此转移并选择了一个动作,代理将执行该动作。 然后,代理将获得有关从该状态采取行动的激励措施的反馈。 按照 Q 学习指南,我们现在要做的下一步是训练网络。 在第二部分中,这可以在上图中看到。

状态向量 s 是网络训练的 x 输入数组,y 输出训练样本是动作选择过程中收集的 Q(s, a) 向量。 但是,对应于动作 a 的 Q(s,a) 值之一被设置为具有 r+γQ(s',a') 的目标,如上图所示。 通过以这种方式训练网络来告诉代理什么行为将是其长期利益的最佳选择,网络的 Q(s, a) 输出向量将随着时间的推移变得更强。

强化学习的优点:

  • 强化学习可用于解决传统方法无法克服的极具挑战性的挑战。
  • 选择这种策略是为了产生长期的结果,这是很难实现的。
  • 这种学习模式有点类似于人类的学习。 因此,它接近于完美。
  • 该模型将纠正在测试阶段发生的错误。
  • 如果模型纠正了错误,则发生相同错误的机会会略低。
  • 它将为要解决的特定问题创建最佳范例。

强化学习的缺点

  • 强化学习作为一种方案在许多不同方面都是不正确的,但正是这种品质使它变得有用。
  • 过多的强化学习会导致状态不堪重负,从而降低结果。
  • 强化学习不适合用于解决基本问题。
  • 强化学习需要大量的智能和大量的计算。 这是数据饥渴。 这就是为什么它非常适合视频游戏,因此您可以一遍又一遍地玩游戏,并且似乎可以获得很多细节。
  • 强化学习假设宇宙是马尔可夫的,但事实并非如此。 马尔可夫模型描述了一系列可能的事件,其中每次发生的概率仅取决于前一个事件中达到的条件。

接下来是什么?

如果您想掌握机器学习并学习如何训练代理玩井字游戏、训练聊天机器人等,请查看 upGrad 的机器学习和人工智能 PG 文凭课程。

什么是 TensorFlow?

Python 是机器学习中常用的编程语言,它带有大量的函数库。 TensorFlow 就是谷歌推出的此类 Python 库之一,它支持快速高效的数值计算。 它是由 Google 创建和维护的开源库,广泛用于开发深度学习模型。 TensorFlow 还与其他包装库一起使用以简化流程。 与其他一些也用于深度学习的数值库不同,TensorFlow 是为应用程序的研究和开发以及生产环境功能而开发的。 它可以在具有单 CPU、移动设备和分布式计算机系统的机器上执行。

在机器学习中还有哪些其他库,例如 TensorFlow?

在早期,机器学习工程师过去常常为不同的机器学习算法手动编写所有代码。 现在,每次为类似的算法、统计和数学模型编写相同的代码行不仅耗时,而且效率低下且乏味。 作为一种解决方法,引入了 Python 库以重用函数并节省时间。 Python 的库集合庞大且用途广泛。 除了 TensorFlow,Python 最常用的一些库是 Theano、Numpy、Scipy、Pandas、Matplotlib、PyTorch、Keras 和 Scikit-learn。 Python 库也很容易与 C/C++ 库兼容。

使用 TensorFlow 有什么优势?

TensorFlow 的众多优势使其成为在深度学习和机器学习中开发计算模型的非常流行的选择。 首先,它是一个开源平台,通过图形表示支持增强的数据可视化格式。 程序员还可以轻松地使用它来调试节点,从而节省时间并消除检查整个神经网络代码长度的需要。 TensorFlow 支持各种操作,开发者可以在这个平台上构建任何类型的模型或系统。 它很容易与其他编程语言兼容,如 Ruby、C++ 和 Swift。