提交 bf62ad1c 编写于 作者: W wizardforcel

2020-12-27 14:35:53

上级 663d02d9
......@@ -457,7 +457,7 @@ Sampling Next Batch of Tasks
# MAML 强化学习
如何在**强化学习****RL**)设置中应用 MAML? 在 RL 中,我们的目标是找到正确的策略函数,该功能将告诉我们在每种状态下要执行哪些操作。 但是我们如何在 RL 中应用元学习呢? 假设我们训练了智能体以解决两臂老虎机问题。 但是,我们不能使用相同的智能体来解决四臂老虎机问题。 我们必须再次从头开始训练特工,以解决这个新的四臂老虎机问题。 当另一名`n`臂老虎机进来时,情况也是如此。我们一直在从头训练智能体以解决新问题,即使它与智能体已经学会解决的问题密切相关。 因此,代替执行此操作,我们可以应用元学习并在一组相关任务上对智能体进行培训,以便智能体可以利用其先前的知识在最短的时间内学习新的相关任务,而无需从头开始进行培训。
如何在**强化学习****RL**)设置中应用 MAML? 在 RL 中,我们的目标是找到正确的策略函数,该功能将告诉我们在每种状态下要执行哪些操作。 但是我们如何在 RL 中应用元学习呢? 假设我们训练了智能体以解决两臂老虎机问题。 但是,我们不能使用相同的智能体来解决四臂老虎机问题。 我们必须再次从头开始训练智能体,以解决这个新的四臂老虎机问题。 当另一名`n`臂老虎机进来时,情况也是如此。我们一直在从头训练智能体以解决新问题,即使它与智能体已经学会解决的问题密切相关。 因此,代替执行此操作,我们可以应用元学习并在一组相关任务上对智能体进行培训,以便智能体可以利用其先前的知识在最短的时间内学习新的相关任务,而无需从头开始进行培训。
在 RL 中,我们可以将轨迹称为包含一系列观察和动作的元组。 因此,我们在这些轨迹上训练模型以学习最佳策略。 但是,同样,我们应该使用哪种算法来训练我们的模型? 对于 MAML,我们可以使用可以通过梯度下降训练的任何 RL 算法。 我们使用策略梯度来训练我们的模型。 策略梯度通过直接将带有某些参数`θ`的策略`π`参数化为`π[θ]`来找到最佳策略。 因此,使用 MAML,我们尝试找到可在各个任务之间推广的最佳参数`θ`
......
# 评估
# 答案
# 第 1 章:元学习简介
......
......@@ -31,7 +31,7 @@
![](img/00007.gif)
RL 智能体可以**探索**可能提供良好奖励的不同动作,也可以**利用**(使用)导致良好奖励的先前动作。 如果 RL 智能体探索不同的行动,则该智能体很可能会收到较差的报酬,因为所有行动都不会成为最佳行动。 如果 RL 智能体仅利用已知的最佳动作,那么也有可能会错过最佳动作,这可能会提供更好的回报。 勘探与开发之间总是要权衡取舍。 我们不能同时进行勘探和开发。 在接下来的章节中,我们将详细讨论勘探与开发难题。
RL 智能体可以**探索**可能提供良好奖励的不同动作,也可以**利用**(使用)导致良好奖励的先前动作。 如果 RL 智能体探索不同的行动,则该智能体很可能会收到较差的报酬,因为所有行动都不会成为最佳行动。 如果 RL 智能体仅利用已知的最佳动作,那么也有可能会错过最佳动作,这可能会提供更好的回报。 探索与利用之间总是要权衡取舍。 我们不能同时进行探索和利用。 在接下来的章节中,我们将详细讨论探索与利用难题。
# RL 算法
......@@ -53,19 +53,19 @@ RL 智能体可以**探索**可能提供良好奖励的不同动作,也可以*
还有另一种称为半监督学习的学习,它基本上是有监督学习和无监督学习的结合。 它涉及对标记和未标记数据的功能估计,而 RL 本质上是智能体与其环境之间的相互作用。 因此,RL 与所有其他机器学习范例完全不同。
# RL 的
# RL 的
RL 的元素在以下各节中显示。
# 智能体
智能体是做出明智决策的软件程序,它们基本上是 RL 的学习者。 特工通过与环境互动来采取行动,他们会根据自己的行动获得奖励,例如,在视频游戏中导航的超级马里奥。
智能体是做出明智决策的软件程序,它们基本上是 RL 的学习者。 智能体通过与环境互动来采取行动,他们会根据自己的行动获得奖励,例如,在视频游戏中导航的超级马里奥。
# 策略功能
# 策略函数
策略定义环境中智能体的行为。 智能体决定执行哪种操作的方式取决于策略。 假设您想在家中到达办公室; 到达办公室的路线会有所不同,有些路线是捷径,有些路线很长。 这些路线被称为策略,因为它们代表了我们选择采取行动以达到目标的方式。 策略通常用符号π表示。 策略可以采用查找表或复杂的搜索过程的形式。
# 价值功能
# 值函数
值函数表示智能体处于特定状态的程度如何。 它取决于策略,通常用`v(s)`表示。 它等于智能体从初始状态开始收到的总预期奖励。 可以有多个值函数。 最优值函数是与其他值函数相比在所有状态下具有最高值的函数。 同样,最优策略是具有最优价值功能的策略。
......@@ -75,7 +75,7 @@ RL 的元素在以下各节中显示。
# 智能体环境接口
智能体是指一次执行`A[t]``t`移动的动作的软件智能体。 从一种状态`S[t]`,到另一种状态`S[t + 1]`。 基于行为,特工从环境中获得数值奖励`R`。 最终,RL 就是寻找可以增加数值奖励的最佳行动:
智能体是指一次执行`A[t]``t`移动的动作的软件智能体。 从一种状态`S[t]`,到另一种状态`S[t + 1]`。 基于行为,智能体从环境中获得数值奖励`R`。 最终,RL 就是寻找可以增加数值奖励的最佳行动:
![](img/00008.gif)
......@@ -132,13 +132,13 @@ RL 的元素在以下各节中显示。
RL 平台用于在环境中模拟,构建,渲染和试验我们的 RL 算法。 有很多可用的 RL 平台,如以下各节所述。
# OpenAI 体育馆和宇宙
# OpenAI Gym 和 Universe
OpenAI Gym 是用于构建,评估和比较 RL 算法的工具包。 它与在 TensorFlow,Theano,Keras 等任何框架中编写的算法兼容。 它很容易理解。 它不对智能体的结构做任何假设,并提供了所有 RL 任务的接口。
OpenAI Universe 是 OpenAI Gym 的扩展。 它提供了在各种简单到实时复杂环境中训练和评估智能体的能力。 它可以无限制地访问许多游戏环境。 使用 Universe,可以通过在虚拟网络计算远程桌面后自动启动程序来将任何程序转换为 Gym 环境,而无需访问程序内部,源代码或 API,因为 Universe 可以工作。
# 深度实验室
# DeepMind Lab
DeepMind Lab 是另一个基于 AI 智能体的惊人研究平台。 它提供了一个丰富的模拟环境,可以作为运行几种 RL 算法的实验室。 它是高度可定制和可扩展的。 视觉效果非常丰富,科幻风格且逼真。
......@@ -146,9 +146,9 @@ DeepMind Lab 是另一个基于 AI 智能体的惊人研究平台。 它提供
RL-Glue 提供了一个接口,用于将智能体,环境和程序连接在一起,即使它们是用不同的编程语言编写的。 它具有与他人共享您的智能体和环境以在您的工作之上进行构建的能力。 由于这种兼容性,可重用性大大提高了。
# 马尔默计划
# Malmo 计划
马尔默计划(Project Malmo)是微软在 Minecraft 之上构建的另一个 AI 实验平台。 它为自定义环境提供了良好的灵活性。 它与复杂的环境集成在一起。 它还允许超频,这使程序员能够比标准 Minecraft 更快地播放场景。 但是,与 Open AI Universe 不同,Malmo 当前仅提供 Minecraft 游戏环境。
Malmo 计划是微软在 Minecraft 之上构建的另一个 AI 实验平台。 它为自定义环境提供了良好的灵活性。 它与复杂的环境集成在一起。 它还允许超频,这使程序员能够比标准 Minecraft 更快地播放场景。 但是,与 Open AI Universe 不同,Malmo 当前仅提供 Minecraft 游戏环境。
# ViZDoom
......
......@@ -11,7 +11,7 @@ OpenAI 是由 Elon Musk 和 Sam Altman 创立的非营利性,开源**人工智
* TensorFlow 的基本原理
* 使用 TensorBoard
# 置机器
# 置机器
安装 OpenAI 并不是一件容易的事。 要设置和运行系统,必须正确遵循一组步骤。 现在,让我们看看如何设置我们的机器并安装 OpenAI Gym 和 Universe。
......@@ -206,7 +206,7 @@ docker build -t universe .
docker run --privileged --rm -it -p 12345:12345 -p 5900:5900 -e DOCKER_NET_HOST=172.17.0.1 universe /bin/bash
```
# OpenAI 体育馆
# OpenAI Gym
借助 OpenAI Gym,我们可以模拟各种环境,并开发,评估和比较 RL 算法。 现在让我们了解如何使用 Gym。
......@@ -283,7 +283,7 @@ for _ in range(1000):
该策略是当机器人向前移动时将获得`X`点作为奖励,如果机器人无法移动,则会减少`Y`点。 因此,机器人将在最大化奖励的情况下学习行走。
首先,我们将导入库,然后通过`make`函数创建一个仿真实例。 Open AI Gym 提供了一个称为`BipedalWalker-v2`的环境,用于在简单的地形中训练机器人特工
首先,我们将导入库,然后通过`make`函数创建一个仿真实例。 Open AI Gym 提供了一个称为`BipedalWalker-v2`的环境,用于在简单的地形中训练机器人智能体
```py
import gym
......@@ -356,7 +356,7 @@ for i_episode in range(100):
![](img/00014.jpeg)
# OpenAI 宇宙
# OpenAI Universe
OpenAI Universe 提供了广泛的现实游戏环境。 它是 OpenAI Gym 的扩展。 它提供了在各种简单到实时复杂环境中训练和评估智能体的能力。 它可以无限制地访问许多游戏环境。
......@@ -439,7 +439,7 @@ while True:
* `done_n`:这是一个布尔值; 如果游戏结束,它将设置为`true`
* `info_n`:用于调试目的
显然,特工(汽车)无法在整个游戏中前进; 它需要转弯,避免障碍物,并且还会撞到其他车辆。 但是它必须确定是否应该转弯,如果需要转弯,则应朝哪个方向转弯。
显然,智能体(汽车)无法在整个游戏中前进; 它需要转弯,避免障碍物,并且还会撞到其他车辆。 但是它必须确定是否应该转弯,如果需要转弯,则应朝哪个方向转弯。
首先,我们将计算到目前为止获得的奖励的平均值; 如果是`0`,则很明显我们在前进时被卡在某处,我们需要转弯。 然后,我们需要转向哪个方向? 您是否还记得我们在第 1 章,“强化学习简介”中研究的**策略函数**
......@@ -554,7 +554,7 @@ print(sess.run(hello))
变量,常量和占位符是 TensorFlow 的基本元素。 但是,这三者之间总是存在混淆。 让我们逐一查看每个元素,并了解它们之间的区别。
# 变
# 变
变量是用于存储值的容器。 变量将用作计算图中其他几个操作的输入。 我们可以使用`tf.Variable()`函数创建 TensorFlow 变量。 在下面的示例中,我们定义一个具有随机正态分布值的变量,并将其命名为`weights`
......@@ -564,7 +564,7 @@ weights = tf.Variable(tf.random_normal([3, 2], stddev=0.1), name="weights")
但是,在定义变量后,我们需要使用`tf.global_variables_initializer()`方法显式创建初始化操作,该方法将为变量分配资源。
# 常
# 常
常量与变量不同,不能更改其值。 常量是不可变的。 一旦为它们分配了值,就不能在整个过程中进行更改。 我们可以使用`tf.constant()`函数创建常量:
......@@ -608,7 +608,7 @@ B = tf.multiply(4,3)
每当我们导入 TensorFlow 时,都会自动创建一个默认图,并且我们创建的所有节点都将与该默认图关联。
# 届会
# 会话
计算图只会被定义; 为了执行计算图,我们使用 TensorFlow 会话:
......@@ -643,7 +643,7 @@ with tf.Session() as sess:
前面的代码将显示`6`
# 张量板
# TensorBoard
TensorBoard 是 TensorFlow 的可视化工具,可用于可视化计算图。 它也可以用来绘制各种定量指标和一些中间计算的结果。 使用 TensorBoard,我们可以轻松地可视化复杂的模型,这对于调试和共享非常有用。
......
......@@ -6,7 +6,7 @@
* 马尔可夫链与马尔可夫过程
* 马尔可夫决策过程
* 奖励与退货
* 奖励与回报
* 贝尔曼方程
* 使用动态规划求解贝尔曼方程
* 利用价值和策略迭代来解决冻湖问题
......@@ -68,9 +68,9 @@ MDP 由五个重要元素表示:
* 奖励概率(`R[ss']^a`),是智能体通过执行某些动作`a`从一种状态`s`转移到另一种状态`s'`所获得的奖励的概率。
* 折扣因子(`γ`),用于控制立即和将来奖励的重要性。 我们将在接下来的部分中详细讨论。
# 奖励与退货
# 奖励与回报
如我们所知,在 RL 环境中,智能体通过执行操作与环境交互,并从一种状态转移到另一种状态。 根据其执行的动作,它会获得奖励。 奖励不过是一个数字值,例如,一个好动作为 +1,而一个坏动作为 -1。 我们如何确定一个动作是好是坏? 在迷宫游戏中,好动作是指特工进行移动以使其不会撞到迷宫壁的地方,而不好的动作是指特工进行移动并撞到迷宫壁的地方。
如我们所知,在 RL 环境中,智能体通过执行操作与环境交互,并从一种状态转移到另一种状态。 根据其执行的动作,它会获得奖励。 奖励不过是一个数字值,例如,一个好动作为 +1,而一个坏动作为 -1。 我们如何确定一个动作是好是坏? 在迷宫游戏中,好动作是指智能体进行移动以使其不会撞到迷宫壁的地方,而不好的动作是指智能体进行移动并撞到迷宫壁的地方。
智能体试图最大化从环境而不是即时奖励中获得的奖励(累积奖励)总量。 智能体从环境中获得的总奖励金额称为回报。 因此,我们可以将智能体收到的奖励(回报)总额计算如下:
......@@ -87,7 +87,7 @@ MDP 由五个重要元素表示:
在连续任务中,没有终端状态。 连续的任务永远不会结束。 例如,个人协助机器人没有终端状态。
# 折现系数
# 折扣因子
我们已经看到,智能体的目标是使回报最大化。 对于一项临时任务,我们可以将返回定义为`R[t] = r[t + 1] + r[t + 2] + ... + r[T]`,其中`T`是情节的最终状态,我们尝试最大化回报`R[t]`
......@@ -105,13 +105,13 @@ MDP 由五个重要元素表示:
根据使用情况,我们重视即时奖励和将来的奖励。 在某些情况下,未来的奖励比立即的奖励更可取,反之亦然。 在国际象棋游戏中,目标是击败对手的国王。 如果我们重视即时奖励,而即时奖励是通过典当击败任何对手玩家等行动获得的,那么坐席将学会执行此子目标,而不是学习达到实际目标。 因此,在这种情况下,我们重视未来的奖励,而在某些情况下,我们更喜欢即时奖励,而不是未来的奖励。 (说,如果我今天或 13 个月后给您巧克力,您会喜欢巧克力吗?)
# 策略功能
# 策略函数
我们已经在第 1 章,“强化学习简介”中了解了策略函数,该功能将状态映射到操作。 用π表示。
策略函数可以表示为`π(s): s -> a`,指示从状态到动作的映射。 因此,基本上,策略函数会说明在每种状态下要执行的操作。 我们的最终目标在于找到最佳策略,该策略指定在每个状态下执行的正确操作,从而最大化回报。
# 状态值功能
# 状态值函数
状态值函数也简称为值函数。 它通过策略`π`指定智能体处于特定状态的状态如何。 值函数通常由`V(s)`表示。 它表示遵循策略的状态的值。
......@@ -134,7 +134,7 @@ MDP 由五个重要元素表示:
根据上表,我们可以知道处于状态 2 很好,因为它具有很高的价值。 在接下来的部分中,我们将看到如何直观地估计这些值。
# 状态作用值功能(Q 功能
# 状态作用值函数(Q 函数
状态作用值函数也称为`Q`函数。 它指定智能体在具有策略`π`的状态下执行特定操作的效果如何。`Q`函数由`Q(s)`表示。 它表示在遵循策略`π`的状态下执行操作的值。
......@@ -163,7 +163,7 @@ MDP 由五个重要元素表示:
#贝尔曼方程和最优性
以美国数学家理查德·贝尔曼(Richard Bellman)命名的贝尔曼方程式可帮助我们求解 MDP。 它在 RL 中无处不在。 当我们说解决 MDP 时,实际上意味着找到最佳的策略和价值功能。 根据不同的策略,可以有许多不同的值函数。 与所有其他值函数相比,最优值函数`V*(s)`是产生最大值的函数:
以美国数学家理查德·贝尔曼(Richard Bellman)命名的贝尔曼方程式可帮助我们求解 MDP。 它在 RL 中无处不在。 当我们说解决 MDP 时,实际上意味着找到最佳的策略和价值功能。 根据不同的策略,可以有许多不同的值函数。 与所有其他值函数相比,最优值函数`V*(s)`是产生最大值的函数:
![](img/00048.jpeg)
......@@ -211,7 +211,7 @@ MDP 由五个重要元素表示:
![](img/00064.jpeg) 来自(1)
我们可以通过获取第一笔报酬来重写值函数:
我们可以通过获取第一笔报酬来重写值函数:
![](img/00065.jpeg) ---(6)
......@@ -264,7 +264,7 @@ MDP 由五个重要元素表示:
* 价值迭代
* 策略迭代
# 值迭代
# 值迭代
在值迭代中,我们从随机值函数开始。 显然,随机值函数可能不是最佳函数,因此我们以迭代方式寻找新的改进值函数,直到找到最佳值函数为止。 一旦找到最优值函数,就可以轻松地从中得出最优策略:
......@@ -349,7 +349,7 @@ Q(A, 1) = 0.3
但是我们什么时候停止呢? 当每次迭代之间的值变化较小时,我们将停止; 如果查看第二和第三次迭代,则值函数的变化不大。 在这种情况下,我们停止迭代并将其视为最佳值函数。
好了,既然我们已经找到了最优值函数,那么我们如何得出最优策略呢?
好了,既然我们已经找到了最优值函数,那么我们如何得出最优策略呢?
这很简单。 我们用最终的最优值函数计算`Q`函数。 假设我们计算出的`Q`函数如下所示:
......@@ -359,12 +359,12 @@ Q(A, 1) = 0.3
# 策略迭代
与值迭代不同,在策略迭代中,我们从随机策略开始,然后找到该策略的值函数。 如果值函数不是最优的,那么我们会找到新的改进策略。 我们重复此过程,直到找到最佳策略。
与值迭代不同,在策略迭代中,我们从随机策略开始,然后找到该策略的值函数。 如果值函数不是最优的,那么我们会找到新的改进策略。 我们重复此过程,直到找到最佳策略。
策略迭代有两个步骤:
1. **策略评估**:评估随机估算策略的值函数。
2. **策略改进**:在评估值函数时,如果它不是最优的,我们会发现新的改进策略:
1. **策略评估**:评估随机估算策略的值函数。
2. **策略改进**:在评估值函数时,如果它不是最优的,我们会发现新的改进策略:
![](img/00088.gif)
......@@ -395,7 +395,7 @@ C -> 0
![](img/00089.gif)
现在,根据随机初始化的策略有了新的价值函数,让我们使用新的价值函数计算新的策略。 我们如何做到这一点? 这与我们在*值迭代*中所做的非常相似。 我们为新值函数计算`Q`值,然后针对具有最大值的每个状态采取措施作为新策略。
现在,根据随机初始化的策略有了新的值函数,让我们使用新的值函数计算新的策略。 我们如何做到这一点? 这与我们在*值迭代*中所做的非常相似。 我们为新值函数计算`Q`值,然后针对具有最大值的每个状态采取措施作为新策略。
我们说新策略的结果是:
......@@ -431,10 +431,10 @@ policy_iteration():
看上图:
*`S`是起始位置(原点)
*`F`是您可以漫步的冰冻湖
*`H`是孔,您必须非常小心
*`G`是目标(办公室)
* `S`是起始位置(原点)
* `F`是您可以漫步的冰冻湖
* `H`是孔,您必须非常小心
* `G`是目标(办公室)
好的,现在让我们代替您使用我们的智能体来找到到达办公室的正确方法。 该智能体的目标是找到从`S``G`的最佳路径,而不会陷入`H`的陷阱。 智能体如何做到这一点? 如果智能体正确地在冰冻的湖面上行走,我们给 +1 分作为奖励,如果智能体正确落入洞中,则给 0 分,以便智能体确定正确的行动。 智能体现在将尝试找到最佳策略。 最优策略意味着采取正确的道路,这将最大化智能体的报酬。 如果智能体正在使报酬最大化,则显然智能体正在学习跳过漏洞并到达目的地。
......@@ -453,14 +453,14 @@ policy_iteration():
当我们说有多好时,这到底意味着什么? 这意味着最大化奖励是多么的好。
然后,我们使用称为贝尔曼最优性方程的特殊方程式表示值函数和`Q`函数。 如果我们解决这个方程,我们可以找到最佳策略。 在这里,求解方程式意味着找到正确的值函数和策略。 如果我们找到正确的价值功能和策略,那将是我们获得最大回报的最佳途径。
然后,我们使用称为贝尔曼最优性方程的特殊方程式表示值函数和`Q`函数。 如果我们解决这个方程,我们可以找到最佳策略。 在这里,求解方程式意味着找到正确的值函数和策略。 如果我们找到正确的价值功能和策略,那将是我们获得最大回报的最佳途径。
我们将使用一种称为动态规划的特殊技术来求解贝尔曼最优性方程。 要应用 DP,必须预先知道模型动态,这基本上意味着必须预先知道模型环境的转换概率和奖励概率。 由于我们知道模型动态,因此可以在此处使用 DP。 我们使用两种特殊的 DP 算法来找到最佳策略:
* 价值迭代
* 策略迭代
# 值迭代
# 值迭代
简单来说,在值迭代中,我们首先将一些随机值初始化为值函数。 我们初始化的随机值很有可能不会达到最佳状态。 因此,我们遍历每个状态并找到新的值函数; 我们停止迭代,直到找到最佳值函数。 一旦找到最优值函数,就可以轻松地从中提取最优策略。
......@@ -693,11 +693,11 @@ print(optimal_policy)
# 策略迭代
在策略迭代中,首先我们初始化一个随机策略。 然后,我们将评估初始化的随机策略:它们是否好? 但是,我们如何评估策略呢? 我们将通过计算它们的值函数来评估我们随机初始化的策略。 如果它们不好,那么我们会找到新的策略。 我们重复此过程,直到找到好的策略。
在策略迭代中,首先我们初始化一个随机策略。 然后,我们将评估初始化的随机策略:它们是否好? 但是,我们如何评估策略呢? 我们将通过计算它们的值函数来评估我们随机初始化的策略。 如果它们不好,那么我们会找到新的策略。 我们重复此过程,直到找到好的策略。
现在让我们看看如何使用策略迭代来解决冻湖问题。
在查看策略迭代之前,我们将了解在给定策略的情况下如何计算值函数。
在查看策略迭代之前,我们将了解在给定策略的情况下如何计算值函数。
我们用状态数将`value_table`初始化为零:
......
# 蒙特卡洛方法进行游戏
# 用于游戏的蒙特卡洛方法
蒙特卡洛算法是从物理,机械到计算机科学的各个领域中最受欢迎和最常用的算法之一。 当未知环境模型时,在**强化学习****RL**)中使用蒙特卡洛算法。 在上一章第 3 章,“马尔可夫决策过程和动态规划”中,我们着眼于使用**动态规划****DP**)查找我们了解模型动态的最佳策略,即转移和奖励概率。 但是,当我们不知道模型动态时,如何确定最佳策略? 在这种情况下,我们使用蒙特卡洛算法; 当我们不了解环境时,它对于找到最佳策略非常有用。
......@@ -8,7 +8,7 @@
* 蒙特卡洛预测
* 和蒙特卡洛一起玩二十一点
* 卡洛控制模型
* 蒙特卡洛开始勘探
* 蒙特卡洛开始探索
* 策略性蒙特卡洛控制
* 脱离策略的蒙特卡洛控制
......@@ -169,13 +169,13 @@ print("Approximate value of pi is {}" .format(calculate_pi(points_inside_circle,
因此,在蒙特卡洛预测中,我们通过取均值回报而不是期望回报来近似值函数。
使用蒙特卡洛预测,我们可以估计任何给定策略的值函数。 蒙特卡洛预测中涉及的步骤非常简单,如下所示:
使用蒙特卡洛预测,我们可以估计任何给定策略的值函数。 蒙特卡洛预测中涉及的步骤非常简单,如下所示:
1. 首先,我们将随机值初始化为我们的值函数
2. 然后我们初始化一个称为`return`的空列表来存储我们的退货
2. 然后我们初始化一个称为`return`的空列表来存储我们的回报
3. 然后针对情节中的每个州,我们计算收益
4. 接下来,我们将退货附加到退货清单中
5. 最后,我们将收益平均值作为我们的值函数
4. 接下来,我们将回报附加到回报清单中
5. 最后,我们将收益平均值作为我们的值函数
以下流程图使其更简单:
......@@ -183,18 +183,18 @@ print("Approximate value of pi is {}" .format(calculate_pi(points_inside_circle,
蒙特卡洛预测算法有两种类型:
* 第一次访问蒙特卡洛
* 次访问蒙特卡洛
* 每次访问蒙特卡洛
# 第一次访问蒙特卡洛
# 次访问蒙特卡洛
如我们所见,在蒙特卡洛方法中,我们通过取平均收益来近似值函数。 但是在首次访问 MC 方法中,我们仅在情节中首次访问状态时才对返回值进行平均。 例如,假设一个智能体正在玩蛇和梯子游戏,那么如果该智能体被蛇咬伤,它很有可能会返回到该状态。 当智能体重新访问状态时,我们不考虑平均回报。 我们仅在智能体首次访问该州时才考虑平均回报。
# 每次访问蒙特卡洛
在蒙特卡洛的每次访问中,我们平均将情节中每次访问州的收益均值化。 考虑相同的蛇和梯子游戏示例:如果特工在蛇咬之后返回到相同的状态,尽管特工正在重新访问状态,但我们可以将其视为平均收益。 在这种情况下,我们平均每次智能体访问该州时的回报。
在蒙特卡洛的每次访问中,我们平均将情节中每次访问州的收益均值化。 考虑相同的蛇和梯子游戏示例:如果智能体在蛇咬之后返回到相同的状态,尽管智能体正在重新访问状态,但我们可以将其视为平均收益。 在这种情况下,我们平均每次智能体访问该州时的回报。
# 让我们和蒙特卡洛一起玩二十一点
# 让我们使用蒙特卡洛玩二十一点
现在,让我们通过二十一点游戏更好地了解蒙特卡洛。 二十一点,也称为 21,是在赌场玩的一种流行的纸牌游戏。 游戏的目标是使您的所有牌的总和接近 21 并且不超过 21。牌 J,K 和 Q 的值为 10。王牌的值为 1 或 11;王牌的值为 1 或 11。 这取决于玩家的选择。 其余卡(1 至 10)的值与它们显示的数字相同。
......@@ -485,13 +485,13 @@ plot_blackjack(value, axes[0], axes[1])
# 蒙特卡洛控制
在蒙特卡洛预测中,我们已经看到了如何估计值函数。 在蒙特卡洛控制中,我们将看到如何优化值函数,即如何使值函数比估计值更准确。 在控制方法中,我们遵循一种称为通用策略迭代的新型迭代,其中策略评估和策略改进彼此交互。 它基本上是在策略评估和改进之间循环的,也就是说,相对于价值函数而言,策略总是会得到改进,而根据策略,价值函数总是会得到改善。 它继续这样做。 当没有变化时,可以说策略和价值函数已经达到收敛,即发现了最优价值函数和最优策略:
在蒙特卡洛预测中,我们已经看到了如何估计值函数。 在蒙特卡洛控制中,我们将看到如何优化值函数,即如何使值函数比估计值更准确。 在控制方法中,我们遵循一种称为通用策略迭代的新型迭代,其中策略评估和策略改进彼此交互。 它基本上是在策略评估和改进之间循环的,也就是说,相对于值函数而言,策略总是会得到改进,而根据策略,值函数总是会得到改善。 它继续这样做。 当没有变化时,可以说策略和值函数已经达到收敛,即发现了最优值函数和最优策略:
![](img/00103.gif)
现在,我们将看到如下不同的蒙特卡洛控制算法。
# 蒙特卡洛开始勘探
# 蒙特卡洛探索
与 DP 方法不同,这里我们不估计状态值。 相反,我们专注于行动价值。 当我们知道环境模型时,仅状态值就足够了。 由于我们不了解模型动态,因此这不是单独确定状态值的好方法。
......@@ -566,7 +566,7 @@ def epsilon_greedy_policy(state, epsilon):
策略性蒙特卡洛方法涉及的步骤非常简单:
1. 首先,我们初始化随机策略和随机 Q 函数。
2. 然后,我们初始化一个称为`return`的列表,用于存储退货
2. 然后,我们初始化一个称为`return`的列表,用于存储回报
3. 我们使用随机策略`π`生成情节。
4. 我们将情节中发生的每个状态操作对的返回存储到返回列表中。
......
# 时间差异学习
在上一章第四章,“使用蒙特卡洛方法的游戏”中,我们了解了有趣的蒙特卡洛方法,该方法用于解决**马尔可夫决策过程****MDP**),而不像动态规划那样预先未知环境的模型动态。 我们研究了蒙特卡洛预测方法,该方法用于预测值函数,而控制方法用于进一步优化值函数。 但是蒙特卡洛方法存在一些陷阱。 它仅适用于情景任务。 如果情节很长,那么我们必须等待很长时间才能计算值函数。 因此,我们将使用另一种有趣的算法,称为**时差****TD**)学习,这是一种无模型的学习算法:不需要事先知道模型动态,它也可以用于非临时性任务。
在上一章第四章,“使用蒙特卡洛方法的游戏”中,我们了解了有趣的蒙特卡洛方法,该方法用于解决**马尔可夫决策过程****MDP**),而不像动态规划那样预先未知环境的模型动态。 我们研究了蒙特卡洛预测方法,该方法用于预测值函数,而控制方法用于进一步优化值函数。 但是蒙特卡洛方法存在一些陷阱。 它仅适用于情景任务。 如果情节很长,那么我们必须等待很长时间才能计算值函数。 因此,我们将使用另一种有趣的算法,称为**时差****TD**)学习,这是一种无模型的学习算法:不需要事先知道模型动态,它也可以用于非临时性任务。
在本章中,您将学习:
......@@ -89,7 +89,7 @@ V(s) = -0.0315
# TD 控制
在 TD 预测中,我们估计了值函数。 在 TD 控制中,我们优化了值函数。 对于 TD 控制,我们使用两种控制算法:
在 TD 预测中,我们估计了值函数。 在 TD 控制中,我们优化了值函数。 对于 TD 控制,我们使用两种控制算法:
* **无策略学习算法**:Q 学习
* **策略学习算法**:SARSA
......@@ -347,7 +347,7 @@ for i in range(8000):
env.close()
```
# 萨尔萨
# SARSA
**状态-动作-奖励-状态-动作****SARSA**)是一种策略上的 TD 控制算法。 就像我们在 Q 学习中所做的一样,这里我们也关注状态-动作值,而不是状态-值对。 在 SARSA 中,我们根据以下更新规则更新 Q 值:
......@@ -419,7 +419,7 @@ for s in range(env.observation_space.n):
Q[(s,a)] = 0.0
```
和往常一样,我们为勘探定义了`epsilon_greedy`策略:
和往常一样,我们为探索定义了`epsilon_greedy`策略:
```py
def epsilon_greedy(state, epsilon):
......
......@@ -31,7 +31,7 @@ MAB 如下所示:
![](img/00145.jpeg)
我们智能体的目标是找到最佳手臂,并最大程度地减少后悔,这可以定义为了解`k`哪个手臂是最佳手臂的代价。 现在,我们如何找到最好的手臂? 我们应该探索所有武器还是选择已经给予我们最大累积奖励的武器? 这就是勘探与开发的困境。 现在,我们将看到如何使用以下各种探索策略来解决这个难题:
我们智能体的目标是找到最佳手臂,并最大程度地减少后悔,这可以定义为了解`k`哪个手臂是最佳手臂的代价。 现在,我们如何找到最好的手臂? 我们应该探索所有武器还是选择已经给予我们最大累积奖励的武器? 这就是探索与利用的困境。 现在,我们将看到如何使用以下各种探索策略来解决这个难题:
* 厄普西隆贪婪策略
* Softmax 探索
......@@ -308,7 +308,7 @@ The optimal arm is 1
# 汤普森采样算法
**汤普森采样****TS**)是另一种广泛使用的算法,可克服勘探开发难题。 它是一种概率算法,基于先验分布。 TS 背后的策略非常简单:首先,我们先计算每个`k`武器的平均回报,也就是说,我们从`K`个手臂的每个中提取`n`个样本,并计算`k`个分布。 这些初始分布将与真实分布不同,因此我们将其称为先验分布:
**汤普森采样****TS**)是另一种广泛使用的算法,可克服探索利用难题。 它是一种概率算法,基于先验分布。 TS 背后的策略非常简单:首先,我们先计算每个`k`武器的平均回报,也就是说,我们从`K`个手臂的每个中提取`n`个样本,并计算`k`个分布。 这些初始分布将与真实分布不同,因此我们将其称为先验分布:
![](img/00155.gif)
......@@ -397,9 +397,9 @@ The optimal arm is 3
老虎机被用来代替 AB 测试。 AB 测试是常用的经典测试方法之一。 假设您有网站登录页面的两个版本。 您怎么知道大多数用户喜欢哪个版本? 您进行 AB 测试以了解用户最喜欢哪个版本。
在 AB 测试中,我们分配一个单独的勘探时间和一个单独的开采时间。 也就是说,它有两个不同的专用时期,仅用于勘探和开发。 但是这种方法的问题在于,这将引起很多遗憾。 因此,我们可以使用解决 MAB 的各种探索策略来最大程度地减少后悔。 与其与老虎机分别进行完整的勘探和开发,不如以适应性方式同时进行勘探和开发
在 AB 测试中,我们分配一个单独的探索时间和一个单独的开采时间。 也就是说,它有两个不同的专用时期,仅用于探索和利用。 但是这种方法的问题在于,这将引起很多遗憾。 因此,我们可以使用解决 MAB 的各种探索策略来最大程度地减少后悔。 与其与老虎机分别进行完整的探索和利用,不如以适应性方式同时进行探索和利用
老虎机广泛用于网站优化,最大化转化率,在线广告,广告系列等。 考虑您正在运行一个短期活动。 如果在这里进行 AB 测试,那么几乎所有的时间都将花费在探索和开发上,因此在这种情况下,使用老虎机将非常有用。
老虎机广泛用于网站优化,最大化转化率,在线广告,广告系列等。 考虑您正在运行一个短期活动。 如果在这里进行 AB 测试,那么几乎所有的时间都将花费在探索和利用上,因此在这种情况下,使用老虎机将非常有用。
# 使用 MAB 识别正确的广告横幅
......
......@@ -429,7 +429,7 @@ RNN 是一种特殊类型的神经网络,广泛应用于顺序数据。 换句
在前面的示例中,`y[t]`是时间`t`时的实际单词,`y_hat[t]`是时间`t`时的预测单词。 由于我们将整个序列作为训练样本,因此总损失将是每个时间步的损失总和。
# 通过时间反向传播
# 时间上的反向传播
现在,我们如何训练 RNN? 就像我们训练了正常的神经网络一样,我们可以使用反向传播来训练 RNN。 但是在 RNN 中,由于所有时间步长都具有依赖性,因此每个输出的梯度将不仅取决于当前时间步长,还取决于先前时间步长。 我们将此**沿时间的反向传播****BPTT**)。 它与反向传播基本相同,不同之处在于它应用了 RNN。 要查看它如何在 RNN 中发生,让我们考虑一下 RNN 的展开版本,如下图所示:
......@@ -724,7 +724,7 @@ CNN,也称为卷积网络(ConvNet),是一种特殊的神经网络,广
CNN 通常包含三个主要层:
* 卷积层
* 汇聚
* 池化
* 全连接层
# 卷积层
......@@ -793,7 +793,7 @@ CNN 通常包含三个主要层:
执行卷积运算后,我们应用 ReLU 激活函数引入非线性。
# 汇聚
# 池化
在卷积层之后,我们有了池化层。 池化层用于减少特征映射的维数,并且仅保留必要的细节,因此可以减少计算量。 例如,要确定图像中是否有一只狗,我们不想了解狗在图像中的哪个位置,我们只需要狗的特征。 因此,池化层通过仅保留重要特征来减小空间尺寸。 有多种类型的池化操作。 最大池化是最常用的池化操作之一,我们仅从窗口内的要素图中获取最大值。
......
......@@ -74,7 +74,7 @@ DQN 的第一层是卷积网络,网络的输入将是游戏屏幕的原始帧
您可能会注意到目标`Q`的参数是`θ'`而不是`θ`。 我们的实际 Q 网络用于预测`Q`值,它通过使用梯度下降来学习`θ`的正确权重。 将目标网络冻结几个时间步,然后通过从实际 Q 网络复制权重来更新目标网络权重。 冻结目标网络一段时间,然后使用实际的 Q 网络权重更新其权重,以稳定训练。
# 削减奖励
# 裁剪奖励
我们如何分配奖励? 奖励分配因每个游戏而异。 在某些游戏中,我们可以分配奖励,例如 +1 表示获胜,-1 表示损失,而 0 则不计任何收益,但是在某些其他游戏中,我们必须分配诸如 +100 表示​​执行某项操作和 +50 表示进行另一项操作的奖励。 为避免出现此问题,我们将所有奖励分别裁剪为 -1 和 +1。
......
# 用深度循环 Q 网络玩世界末日
# 用深度循环 Q 网络玩《毁灭战士》
在上一章中,我们介绍了如何使用**深度 Q 网络****DQN**)构建智能体以玩 Atari 游戏。 我们利用神经网络来近似 Q 函数,使用了**卷积神经网络****CNN**)来理解输入游戏画面,并利用过去的四个游戏画面来更好地理解当前的游戏状态。 在本章中,我们将学习如何利用**循环神经网络****RNN**)来提高 DQN 的性能。 我们还将研究**马尔可夫决策过程****MDP**)的部分可观察之处,以及如何使用**深度循环 Q 网络****DRQN**)。 接下来,我们将学习如何构建一个智能体来使用 DRQN 玩《毁灭战士》游戏。 最后,我们将看到 DRQN 的一种变体,称为**深度注意力循环 Q 网络****DARQN**),它增强了 DRQN 架构的注意力机制。
......@@ -32,7 +32,7 @@
等待。 经验回放缓冲区如何? 在 DQN 中,为避免相关的经验,我们使用了经验回放,该经验存储了游戏的转移,并使用了随机的一组经验来训练网络。 对于 DRQN,我们将整个情节存储在经验缓冲区中,并从随机的情节批次中随机采样`n`个步骤。 因此,通过这种方式,我们既可以适应随机化,又可以适应另一种实际的经验。
# 训练特工玩《毁灭战士》
# 训练智能体玩《毁灭战士》
毁灭战士是一款非常受欢迎的第一人称射击游戏。 游戏的目标是杀死怪物。 末日是部分可观察的 MDP 的另一个示例,因为智能体(玩家)的视角限制为 90 度。 该智能体对其余环境一无所知。 现在,我们将看到如何使用 DRQN 来训练我们的经纪人玩《毁灭战士》。
......@@ -44,7 +44,7 @@ pip install vizdoom
ViZDoom 提供了许多 Doom 方案,可以在软件包文件夹`vizdoom/scenarios`中找到这些方案。
# 基本 Doom 游戏
# 基本《毁灭战士》游戏
在开始之前,让我们通过看一个基本示例来熟悉`vizdoom`环境:
......@@ -119,9 +119,9 @@ for i in range(no_of_episodes):
![](img/00289.jpeg)
# DRQN 的 Doom
# DRQN 的《毁灭战士》
现在,让我们看看如何利用 DRQN 算法来训练我们的特工玩《毁灭战士》。 我们为成功杀死怪物分配正面奖励,为失去生命,自杀和失去弹药(子弹)分配负面奖励。 您可以在[这里](https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/09.%20Playing%20Doom%20Game%20using%20DRQN/9.5%20Doom%20Game%20Using%20DRQN.ipynb)获得 Jupyter 笔记本的完整代码及其解释。 本节中使用的代码的权利归于 [Luthanicus](https://github.com/Luthanicus/losaltoshackathon-drqn)
现在,让我们看看如何利用 DRQN 算法来训练我们的智能体玩《毁灭战士》。 我们为成功杀死怪物分配正面奖励,为失去生命,自杀和失去弹药(子弹)分配负面奖励。 您可以在[这里](https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/09.%20Playing%20Doom%20Game%20using%20DRQN/9.5%20Doom%20Game%20Using%20DRQN.ipynb)获得 Jupyter 笔记本的完整代码及其解释。 本节中使用的代码的权利归于 [Luthanicus](https://github.com/Luthanicus/losaltoshackathon-drqn)
首先,让我们导入所有必需的库:
......@@ -556,7 +556,7 @@ def train(num_episodes, episode_length, learning_rate, scenario = "deathmatch.cf
train(num_episodes = 10000, episode_length = 300, learning_rate = 0.01, render = True)
```
运行该程序时,可以看到如下所示的输出,还可以看到我们的特工如何通过情节学习:
运行该程序时,可以看到如下所示的输出,还可以看到我们的智能体如何通过情节学习:
![](img/00290.jpeg)
......@@ -581,7 +581,7 @@ DARQN 的架构如下所示:
# 总结
在本章中,我们学习了如何使用 DRQN 记住有关先前状态的信息,以及它如何克服部分可观察的 MDP 问题。 我们已经看到了如何训练我们的特工使用 DRQN 算法玩《毁灭战士》游戏。 我们还了解了 DARQN 作为 DRQN 的改进,它在卷积层的顶部增加了一个关注层。 在此之后,我们看到了两种类型的注意力机制: 即软硬关注。
在本章中,我们学习了如何使用 DRQN 记住有关先前状态的信息,以及它如何克服部分可观察的 MDP 问题。 我们已经看到了如何训练我们的智能体使用 DRQN 算法玩《毁灭战士》游戏。 我们还了解了 DARQN 作为 DRQN 的改进,它在卷积层的顶部增加了一个关注层。 在此之后,我们看到了两种类型的注意力机制: 即软硬关注。
在下一章第 10 章,“异步优势演员评论家网络”中,我们将学习另一种有趣的深度强化学习算法,称为异步优势演员评论家网络。
......
......@@ -15,7 +15,7 @@
A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外,与其他算法相比,它还具有良好的准确性。 它在连续和离散动作空间中都可以很好地工作。 它使用多个智能体,每个智能体在实际环境的副本中与不同的探索策略并行学习。 然后,将从这些智能体获得的经验汇总到全局智能体。 全局智能体也称为主网络或全局网络,其他智能体也称为工作器。 现在,我们将详细了解 A3C 的工作原理以及与 DQN 算法的区别。
# 三成
# A3C
潜水之前,A3C 是什么意思? 这三个 As 代表什么?
......@@ -35,7 +35,7 @@ A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外
# A3C 如何运作
首先,辅助智能体重置全局网络,然后它们开始与环境进行交互。 每个工人遵循不同的勘探策略以学习最佳策略。 然后,他们计算价值和策略损失,然后计算损失的梯度并将梯度更新到全球网络。 随着工作人员智能体开始重置全局网络并重复相同的过程,该循环继续进行。 在查看价值和策略损失函数之前,我们将了解优势函数的计算方式。 众所周知,优点是`Q`函数和值函数之间的区别:
首先,辅助智能体重置全局网络,然后它们开始与环境进行交互。 每个工人遵循不同的探索策略以学习最佳策略。 然后,他们计算价值和策略损失,然后计算损失的梯度并将梯度更新到全球网络。 随着工作人员智能体开始重置全局网络并重复相同的过程,该循环继续进行。 在查看价值和策略损失函数之前,我们将了解优势函数的计算方式。 众所周知,优点是`Q`函数和值函数之间的区别:
![](img/00293.jpeg)
......@@ -411,7 +411,7 @@ for worker in workers:
coord.join(worker_threads)
```
输出如下所示。 如果您运行该程序,则可以看到我们的特工如何在几个情节中学会爬山:
输出如下所示。 如果您运行该程序,则可以看到我们的智能体如何在几个情节中学会爬山:
![](img/00299.jpeg)
......
......@@ -23,7 +23,7 @@
# 使用策略梯度的 Lunar Lander
假设我们的经纪人正在驾驶航天器,而我们的经纪人的目标是正确着陆在着陆垫上。 如果我们的特工(着陆器)从着陆点着陆,则它会失去奖励,并且如果特工崩溃或休息,情节将终止。 在环境中可用的四个离散动作是“不执行任何操作”,“点火向左的引擎”,“点火主引擎”和“点火向右的引擎”。
假设我们的经纪人正在驾驶航天器,而我们的经纪人的目标是正确着陆在着陆垫上。 如果我们的智能体(着陆器)从着陆点着陆,则它会失去奖励,并且如果智能体崩溃或休息,情节将终止。 在环境中可用的四个离散动作是“不执行任何操作”,“点火向左的引擎”,“点火主引擎”和“点火向右的引擎”。
现在,我们将看到如何训练我们的智能体以策略梯度正确降落在降落区。 本节中使用的代码属于 [Gabriel](https://github.com/gabrielgarza/openai-gym-policy-gradient)
......@@ -253,7 +253,7 @@ class PolicyGradient:
![](img/00323.jpeg)
# 摆动钟摆
# 摆动摆锤
我们有一个从随机位置开始的摆锤,我们的探员的目标是向上摆动摆锤使其保持直立。 我们将在这里看到如何使用 DDPG。 [wshuail](https://github.com/wangshuailong/reinforcement_learning_with_Tensorflow/tree/master/DDPG) 提供了本节中使用的代码。
......@@ -533,7 +533,7 @@ for i in range(no_of_episodes):
# 信任区域策略优化
在了解**信任区域策略优化****TRPO**)之前,我们需要了解受约束的策略优化。 我们知道,在 RL 智能体中,通过反复试验来学习,以使报酬最大化。 为了找到最佳策略,我们的智能体将探索所有不同的行动,并选择能获得良好回报的行动。 在探索不同的动作时,我们的智能体很有可能也会探索不良的动作。 但是最大的挑战是,当我们允许智能体在现实世界中学习以及奖励功能设计不当时。 例如,考虑一个学习走路而没有遇到任何障碍的特工。 如果智能体被任何障碍物击中,它将获得负奖励;而如果没有被任何障碍物击中,则将获得正奖励。 为了找出最佳策略,智能体会探索不同的操作。 智能体还采取行动,例如撞到障碍物以检查它是否给出了良好的回报。 但这对我们的经纪人来说并不安全; 当智能体在现实环境中学习时,这尤其不安全。 因此,我们介绍了基于约束的学习。 我们设置一个阈值,如果碰到障碍物的可能性小于该阈值,则我们认为我们的智能体是安全的,否则我们认为我们的智能体是不安全的。 添加了约束以确保我们的智能体位于安全区域内。
在了解**信任区域策略优化****TRPO**)之前,我们需要了解受约束的策略优化。 我们知道,在 RL 智能体中,通过反复试验来学习,以使报酬最大化。 为了找到最佳策略,我们的智能体将探索所有不同的行动,并选择能获得良好回报的行动。 在探索不同的动作时,我们的智能体很有可能也会探索不良的动作。 但是最大的挑战是,当我们允许智能体在现实世界中学习以及奖励功能设计不当时。 例如,考虑一个学习走路而没有遇到任何障碍的智能体。 如果智能体被任何障碍物击中,它将获得负奖励;而如果没有被任何障碍物击中,则将获得正奖励。 为了找出最佳策略,智能体会探索不同的操作。 智能体还采取行动,例如撞到障碍物以检查它是否给出了良好的回报。 但这对我们的经纪人来说并不安全; 当智能体在现实环境中学习时,这尤其不安全。 因此,我们介绍了基于约束的学习。 我们设置一个阈值,如果碰到障碍物的可能性小于该阈值,则我们认为我们的智能体是安全的,否则我们认为我们的智能体是不安全的。 添加了约束以确保我们的智能体位于安全区域内。
在 TRPO 中,我们迭代地改进了该策略,并施加了一个约束,以使旧策略和新策略之间的 **Kullback-Leibler****KL**)差异要小于某个常数。 ![](img/00326.jpeg)。 该约束称为信任区域约束。
......
# Capstone 项目–使用 DQN 进行赛车
# Capstone 项目 – 将 DQN 用于赛车
在最后几章中,我们通过使用神经网络近似 q 函数来了解 Deep Q 学习的工作原理。 在此之后,我们看到了**深度 Q 网络****DQN**)的各种改进,例如双重 Q 学习,决斗网络架构和深度循环 Q 网络。 我们已经了解了 DQN 如何利用回放缓冲区来存储智能体的经验,并使用缓冲区中的小批样本来训练网络。 我们还实现了用于玩 Atari 游戏的 DQN 和一个用于玩 Doom 游戏的**深度循环 Q 网络****DRQN**)。 在本章中,让我们进入决斗 DQN 的详细实现,它与常规 DQN 基本相同,除了最终的全连接层将分解为两个流,即值流和优势流,而这两个流将合并在一起以计算 Q 函数。 我们将看到如何训练决斗的 DQN 来赢得赛车比赛的智能体。
......@@ -10,7 +10,7 @@
* 训练网络
* 赛车
# 环境包装器功能
# 环境包装器函数
本章使用的代码归功于 Giacomo Spigler 的 [GitHub 存储库](https://github.com/spiglerg/DQN_DDQN_Dueling_and_DDPG_Tensorflow)。 在本章中,每一行都对代码进行了说明。 有关完整的结构化代码,请查看上面的 GitHub 存储库。
......
......@@ -45,7 +45,7 @@ I2A 的架构如下:
如果我们被要求玩推箱子,那么在做出任何举动之前,我们会想一想并计划好,因为糟糕的举动会导致游戏结束。 I2A 架构将在此类环境中提供良好的结果,在这种环境中,智能体必须提前计划才能采取任何措施。 本文的作者在推箱子上测试了 I2A 性能,并取得了显著成果。
# 向人的偏好学习
# 从人类偏好学习
向人类学习是 RL 的重大突破。 该算法由 OpenAI 和 DeepMind 的研究人员提出。 该算法背后的思想是使智能体根据人的反馈进行学习。 最初,智能体会随机行动,然后将执行动作的智能体的两个视频片段提供给人类。 人们可以检查视频剪辑,并告诉智能体哪个视频剪辑更好,也就是说,智能体在哪个视频中更好地执行任务,并将其实现目标。 给出反馈后,智能体将尝试执行人类喜欢的操作并相应地设置奖励。 设计奖励功能是 RL 中的主要挑战之一,因此,与智能体进行人为互动可以直接帮助我们克服挑战,也可以最大程度地减少编写复杂目标功能的过程。
......@@ -64,13 +64,13 @@ I2A 的架构如下:
您可以在[这个页面](https://youtu.be/oC7Cw3fu3gU)上查看视频,以了解算法的工作原理。
# 从演示中进行深度 Q 学习
# 来自演示的深度 Q 学习
我们已经了解了很多有关 DQN 的知识。 我们从原始 DQN 开始,然后看到了各种改进,例如双重 DQN,决斗的网络架构和优先级的经验回放。 我们还学会了构建 DQN 来玩 Atari 游戏。 我们将智能体与环境的交互存储在经验缓冲区中,并使智能体从这些经验中学习。 但是问题是,我们花了很多培训时间来提高性能。 对于在模拟环境中学习,这很好,但是当我们让智能体在现实环境中学习时,会引起很多问题。 为了克服这个问题,谷歌公司 DeepMind 的研究人员在演示(**DQfd**)的基础上,对 DQN 进行了改进,称为**深度 Q 学习**
如果我们已经有了一些演示数据,则可以将这些演示直接添加到经验回放缓冲区中。 例如,考虑一个学习玩 Atari 游戏的特工。 如果我们已经有了一些演示数据来告诉我们的智能体,哪个状态更好,哪个动作可以提供良好的回报,那么智能体可以直接使用此数据进行学习。 即使是少量的演示,也可以提高智能体的表现并最大程度地减少培训时间。 由于演示的数据将直接添加到优先经验重放缓冲区中,因此智能体可以从演示数据中使用的数据量以及智能体可以从其自己的交互中用于学习的数据量将由优先经验重放来控制缓冲区,因为经验将被优先考虑。
如果我们已经有了一些演示数据,则可以将这些演示直接添加到经验回放缓冲区中。 例如,考虑一个学习玩 Atari 游戏的智能体。 如果我们已经有了一些演示数据来告诉我们的智能体,哪个状态更好,哪个动作可以提供良好的回报,那么智能体可以直接使用此数据进行学习。 即使是少量的演示,也可以提高智能体的表现并最大程度地减少培训时间。 由于演示的数据将直接添加到优先经验重放缓冲区中,因此智能体可以从演示数据中使用的数据量以及智能体可以从其自己的交互中用于学习的数据量将由优先经验重放来控制缓冲区,因为经验将被优先考虑。
DQfd 中的损失函数将是各种损失的总和。 为了防止我们的智能体过度适合演示数据,我们在网络权重上计算 L2 正则化损失。 我们像往常一样计算 TD 损失,也计算监督损失,以了解我们的特工如何从演示数据中学习。 本文的作者在 DQfd 和各种环境下进行了实验,并且 DQfd 的性能比双重决斗 DQN 优先排序的性能更好,更快。
DQfd 中的损失函数将是各种损失的总和。 为了防止我们的智能体过度适合演示数据,我们在网络权重上计算 L2 正则化损失。 我们像往常一样计算 TD 损失,也计算监督损失,以了解我们的智能体如何从演示数据中学习。 本文的作者在 DQfd 和各种环境下进行了实验,并且 DQfd 的性能比双重决斗 DQN 优先排序的性能更好,更快。
您可以观看此视频,[以了解 DQfd 如何学会玩“Private Eye”游戏](https://youtu.be/4IFZvqBHsFY)
......@@ -86,7 +86,7 @@ DQfd 中的损失函数将是各种损失的总和。 为了防止我们的智
![](img/00435.jpeg)
但这并不意味着特工没有学到任何东西。 智能体已经实现了一个不同的目标,即它学会了接近实际目标。 因此,我们认为它有一个不同的目标,而不是认为它是失败的。 如果我们在多次迭代中重复此过程,智能体将学会实现我们的实际目标。 HER 可以应用于任何非策略算法。 将 HER 的性能与没有 HER 的 DDPG 进行比较,反之亦然,可以看出带有 HER 的 DDPG 的收敛速度比没有 HER 的 DDPG 快。 [您可以在以下视频中看到 HER 的性能](https://youtu.be/Dz_HuzgMxzo)
但这并不意味着智能体没有学到任何东西。 智能体已经实现了一个不同的目标,即它学会了接近实际目标。 因此,我们认为它有一个不同的目标,而不是认为它是失败的。 如果我们在多次迭代中重复此过程,智能体将学会实现我们的实际目标。 HER 可以应用于任何非策略算法。 将 HER 的性能与没有 HER 的 DDPG 进行比较,反之亦然,可以看出带有 HER 的 DDPG 的收敛速度比没有 HER 的 DDPG 快。 [您可以在以下视频中看到 HER 的性能](https://youtu.be/Dz_HuzgMxzo)
# 分层强化学习
......@@ -161,7 +161,7 @@ MAXQ 值函数分解是 HRL 中最常用的算法之一。 让我们看看 MAXQ
# 逆强化学习
那么,我们在 RL 中做了什么? 我们试图找到具有奖励功能的最优策略。 逆强化学习只是强化学习的逆,也就是说,给出了最优策略,我们需要找到奖励函数。 但是为什么反强化学习会有所帮助? 设计奖励功能不是一项简单的任务,而较差的奖励功能会导致智能体的不良行为。 我们并不总是知道适当的奖励功能,但我们知道正确的策略,即在每个州采取正确的行动。 因此,这种最佳策略由人类专家提供给智能体,智能体尝试学习奖励功能。 例如,考虑一个学习在真实环境中行走的特工; 很难为将要执行的所有动作设计奖励功能。 取而代之的是,我们可以将人类专家的演示(最佳策略)提供给智能体,智能体将尝试学习奖励功能。
那么,我们在 RL 中做了什么? 我们试图找到具有奖励功能的最优策略。 逆强化学习只是强化学习的逆,也就是说,给出了最优策略,我们需要找到奖励函数。 但是为什么反强化学习会有所帮助? 设计奖励功能不是一项简单的任务,而较差的奖励功能会导致智能体的不良行为。 我们并不总是知道适当的奖励功能,但我们知道正确的策略,即在每个州采取正确的行动。 因此,这种最佳策略由人类专家提供给智能体,智能体尝试学习奖励功能。 例如,考虑一个学习在真实环境中行走的智能体; 很难为将要执行的所有动作设计奖励功能。 取而代之的是,我们可以将人类专家的演示(最佳策略)提供给智能体,智能体将尝试学习奖励功能。
RL 周围有各种改进和进步。 现在,您已经阅读完本书,可以开始探索强化学习的各种进步,并开始尝试各种项目。 学习和加强!
......
# 评估
# 答案
# 第 1 章
......@@ -35,7 +35,7 @@
7. 值函数指定状态的优劣,而 Q 函数指定状态下的行为的优劣。
8. 请参阅“值迭代”和“策略迭代”部分。
# 第
# 第 4
1. 当环境模型未知时,在 RL 中使用蒙特卡洛算法。
2. 请参阅“使用蒙特卡洛估算`pi`的值”部分。
......@@ -46,7 +46,7 @@
6. 请参阅“策略上的蒙特卡洛控制”和“策略外的蒙特卡洛控制”部分
7. 请参阅“让我们使用蒙特卡洛玩二十一点”部分。
# 第
# 第 5
1. 蒙特卡罗方法仅适用于情节任务,而 TD 学习可应用于情节任务和非情节任务
2. 实际值与预测值之差称为 TD 误差
......@@ -54,7 +54,7 @@
4. 请参阅“使用 Q 学习解决滑行问题”部分
5. 在 Q 学习中,我们使用`ε`贪婪策略采取行动,并且在更新 Q 值的同时,我们仅采取最大行动。 在 SARSA 中,我们使用`ε`贪婪策略采取措施,并且在更新 Q 值的同时,我们使用`ε`贪婪策略采取措施。
# 第
# 第 6
1. MAB 实际上是一台老虎机,是一种在赌场玩的赌博游戏,您可以拉动手臂(杠杆)并根据随机生成的概率分布获得支出(奖励)。 一台老虎机称为单臂老虎机,当有多台老虎机时,称为多臂老虎机或 k 臂老虎机。
2. 当业务代表不确定是使用以前的经验来探索新动作还是利用最佳动作时,就会出现探索-利用困境。
......@@ -63,7 +63,7 @@
5. UCB 算法可帮助我们根据置信区间选择最佳分支。
6. 在 Thomson 抽样中,我们使用先验分布进行估算,而在 UCB 中,我们使用置信区间进行估算。
# 第
# 第 7
1. 在神经元中,我们通过应用称为激活或传递函数的函数`f()`将非线性引入结果`z`。 请参阅“人工神经元”部分。
2. 激活函数用于引入非线性。
......@@ -73,7 +73,7 @@
6. 门是 LSTM 中的特殊结构,用于决定保留,丢弃和更新哪些信息。
7. 池化层用于减少特征映射的维数,并且仅保留必要的细节,因此可以减少计算量。
# 第
# 第 8
1. **深度 Q 网络****DQN**)是用于近似 Q 函数的神经网络。
2. 经验回放用于删除智能体经验之间的相关性。
......@@ -83,7 +83,7 @@
6. 经验是优先经验回放中基于 TD 错误的优先级。
7. DQN 通过将 Q 函数计算分解为值函数和优势函数来精确估算 Q 值。
# 第
# 第 9
1. DRQN 利用**循环神经网络****RNN**),其中 DQN 利用原始神经网络。
2. 当可以部分观察 MDP 时,不使用 DQN。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册