提交 848973d1 编写于 作者: W wizardforcel

2021-01-21 17:50:30

上级 0bbda538
......@@ -128,7 +128,7 @@ Rosenblatt 还介绍了权重的概念(`w1`,`w2`,...,`wn`),这些数
![Figure 2.7: Sigmoid activation function ](img/B15778_02_07.jpg)
图 2.7:乙状结肠激活函数
图 2.7:Sigmoid激活函数
下图显示了 Sigmoid 激活函数的图形表示:
......@@ -781,7 +781,7 @@ PyTorch 的构建考虑了该领域许多开发人员的意见,其优点是可
* **线性层**:这将线性变换应用于输入数据,同时保持内部张量来容纳权重和偏差。 它接收输入样本的大小(数据集的要素数量或上一层的输出数量),输出样本的大小(当前层中的单位数量,即输出数量) ),以及是否在训练过程中使用偏差张量(默认设置为`True`)作为参数。
* **激活函数**:它们接收线性层的输出作为输入,以破坏线性。 如前所述,有几个激活函数可以添加到顺序容器中。 最常用的解释如下:
**ReLU**:这将校正后的线性单函数应用于包含输入数据的张量。 它接受的唯一参数是是否应在原位进行操作,默认情况下将其设置为`False`。
**ReLU**:这将校正后的线性单函数应用于包含输入数据的张量。 它接受的唯一参数是是否应在原位进行操作,默认情况下将其设置为`False`。
**Tanh**:这会将基于元素的 tanh 函数应用于包含输入数据的张量。 它不需要任何参数。
......
......@@ -78,7 +78,7 @@
**方式**:使用历史数据包含人口统计信息,信用历史记录以及有或没有拖欠付款的客户以前的账单,以训练模型。 在对输入数据进行训练之后,该模型应该能够确定客户是否可能拖欠下一次付款。
考虑到这一点,似乎目标功能应该是说明客户是否会在下次付款时违约,这将导致二进制结果(是/否)。 这意味着要开发的学习任务是分类任务,因此损失函数应该能够测量这种学习类型的差异(例如,交叉熵函数,如上一章所述)。 。
考虑到这一点,似乎目标函数应该是说明客户是否会在下次付款时违约,这将导致二进制结果(是/否)。 这意味着要开发的学习任务是分类任务,因此损失函数应该能够测量这种学习类型的差异(例如,交叉熵函数,如上一章所述)。 。
明确定义问题后,您需要确定最终模型的优先级。 这意味着确定所有输出类别是否同样重要。 例如,建立模型的时候,测量肺部肿块是否恶变的模型应主要集中在使**假负例**最小化(模型预测为无恶性肿块,但实际上是恶性的患者)上。 识别手写字符不应只关注一个特定的字符,而应最大化其在平等地识别所有字符方面的性能。
......
......@@ -71,7 +71,7 @@ RNN 中我们经常面临的一个问题是**梯度爆炸或收缩**。 我们
尽管 RNN 允许我们将单词序列用作模型输入,但它们远非完美。 RNN 有两个主要缺陷,可以使用更高级的 RNN 版本 **LSTM** 来部分弥补。
RNN 的基本结构意味着它们很难长期保留信息。 考虑一个 20 个字长的句子。 从影响初始隐藏状态的句子中的第一个单词到句子中的最后一个单词,我们的隐藏状态被更新 20 次。 从句子的开头到最终的隐藏状态,RNN 很难保留句子开头的单词信息。 这意味着 RNN 不太擅长捕获序列中的长期依赖关系。 这也与前面提到的消失的梯度问题有关,在梯度问题中,通过向量的稀疏序列反向传播非常无效。
RNN 的基本结构意味着它们很难长期保留信息。 考虑一个 20 个字长的句子。 从影响初始隐藏状态的句子中的第一个单词到句子中的最后一个单词,我们的隐藏状态被更新 20 次。 从句子的开头到最终的隐藏状态,RNN 很难保留句子开头的单词信息。 这意味着 RNN 不太擅长捕获序列中的长期依赖关系。 这也与前面提到的梯度消失问题有关,在梯度问题中,通过向量的稀疏序列反向传播非常无效。
考虑一段较长的段落,我们试图预测下一个单词。 句子的开头是`I study math…`,而结尾处是`my final exam is in….`中。 直观地,我们希望下一个单词是`math`或某些与数学相关的字段。 但是,在较长序列的 RNN 模型中,由于需要多个更新步骤,我们的隐藏状态可能难以在到达句子结尾时保留句子开头的信息。
......
......@@ -230,7 +230,7 @@ TorchVision 的`datasets`模块附带了许多受欢迎的数据集; 如果机
在秘籍中,通过建立前向网络来完成网络,其中我们将构造函数中定义的网络组件捆绑在一起。 用`nn.Module`定义的网络需要定义`forward()`方法。 它采用输入张量,并按照正向方法中定义的操作顺序,将其通过网络类中`__init__()`方法中定义的网络组件。
当传递输入时,将引用模型对象的名称自动调用 forward 方法。 `nn.Module`自动创建将在正向方法中使用的权重和偏差张量。 线性单本身定义了线性函数,例如`xW + B`; 要具有非线性功能,我们需要插入非线性激活函数,在这里我们使用最流行的激活函数之一 ReLU,尽管您可以在 PyTorch 中使用其他可用的激活函数。
当传递输入时,将引用模型对象的名称自动调用 forward 方法。 `nn.Module`自动创建将在正向方法中使用的权重和偏差张量。 线性单本身定义了线性函数,例如`xW + B`; 要具有非线性功能,我们需要插入非线性激活函数,在这里我们使用最流行的激活函数之一 ReLU,尽管您可以在 PyTorch 中使用其他可用的激活函数。
我们的输入层有 784 个单位(从`28 x 28`像素开始),第一层具有 ReLU 激活的 256 个单位,然后具有 ReLU 激活的 128 个单位,最后有 softmax 激活的 10 个单位。 我们通过 softmax 压缩最终层输出的原因是因为我们希望有 1 个输出类的概率高于所有其他类,并且输出概率之和应等于 1。softmax 函数的参数`dim=1`为 确保在输出的各列中采用 softmax。 然后,我们使用模型类创建一个对象,并使用`print(model)`打印该类的详细信息。
......
......@@ -371,7 +371,7 @@ pip install torchtext
# 构建 LSTM 网络
**长短期记忆****LSTM**)网络是一种循环神经网络,具有内部门控,有助于更好地保持信息。 这些门是微小的神经网络,用于控制何时需要保存信息以及何时可以擦除或忘记信息。 RNN 受梯度消失和爆炸的影响,因此很难学习长期依赖关系。 LSTM 可以抵抗爆炸和消失的梯度,尽管在数学上仍然可行。
**长短期记忆****LSTM**)网络是一种循环神经网络,具有内部门控,有助于更好地保持信息。 这些门是微小的神经网络,用于控制何时需要保存信息以及何时可以擦除或忘记信息。 RNN 受梯度消失和爆炸的影响,因此很难学习长期依赖关系。 LSTM 可以抵抗爆炸和梯度消失,尽管在数学上仍然可行。
# 操作步骤
......
......@@ -34,7 +34,7 @@ GAN 中的两个模型称为生成器和判别器,其中生成器负责创建
# 创建一个 DCGAN 生成器
在本秘籍及其后续秘籍中,我们将实现 DCGAN。 DCGAN 代表“深度卷积 GAN”; 与香草 GAN 相比,它们有很大的改进。 在 DCGAN 中,我们使用卷积神经网络,而不是香草 GAN 中的全连接网络。 在第 3 章,“用于计算机视觉的卷积神经网络”中,我们看到了第 2 章“处理神经网络”中全连接分类器是什么样,是该领域的一项改进; DCGAN 与香草 GAN 的情况相同。 在 DCGAN 中,我们将使用批量归一化,这是一种技术,它可以将作为输入输入到下一层的层的输出归一化。 批量归一化允许网络的每一层独立于其他层进行学习,从而减少了协变量偏移。
在本秘籍及其后续秘籍中,我们将实现 DCGAN。 DCGAN 代表“深度卷积 GAN”; 与原始 GAN 相比,它们有很大的改进。 在 DCGAN 中,我们使用卷积神经网络,而不是原始 GAN 中的全连接网络。 在第 3 章,“用于计算机视觉的卷积神经网络”中,我们看到了第 2 章“处理神经网络”中全连接分类器是什么样,是该领域的一项改进; DCGAN 与原始 GAN 的情况相同。 在 DCGAN 中,我们将使用批量归一化,这是一种技术,它可以将作为输入输入到下一层的层的输出归一化。 批量归一化允许网络的每一层独立于其他层进行学习,从而减少了协变量偏移。
批量归一化是通过缩放来实现的,以使平均值为 0,方差为 1。在此秘籍中,我们将生成类似于 MNIST 数据集的手写数字,其中包含来自噪声向量的数据。 我们将扩展此噪声向量,将其转换为 2D 矩阵,最后将其转换为`28 x 28`黑白图像。 为了增加高度和宽度,我们必须执行与卷积操作相反的操作,这称为反卷积。 我们将在使用卷积执行分类任务时执行此操作。 在执行反卷积时,我们将增加高度和宽度,同时减少通道数。
......
......@@ -330,7 +330,7 @@ if not self.explore_limit:
# 训练 DQN
在此秘籍中,我们将完成训练 DQN 增强算法的过程,并在训练模型后可视化我们的小车。 我们将使用 DQN 类来预测操作并将该操作应用于环境以获得奖励。 此秘籍的目的是使奖励最大化。 我们将使用经验重播来训练我们的模型以预测 Q 值。
在此秘籍中,我们将完成训练 DQN 增强算法的过程,并在训练模型后可视化我们的小车。 我们将使用 DQN 类来预测操作并将该操作应用于环境以获得奖励。 此秘籍的目的是使奖励最大化。 我们将使用经验回放来训练我们的模型以预测 Q 值。
# 操作步骤
......
......@@ -20,7 +20,7 @@
第 6 章,“生成网络”,简要讨论了生成网络的历史,然后解释了各种生成网络。 在这些不同的类别中,本章向我们介绍了自回归模型和 GAN。 我们将研究作为自动回归模型一部分的 PixelCNN 和 WaveNet 的实现细节,然后详细研究 GAN。
第 7 章,“强化学习”介绍了强化学习的概念,它实际上并不是深度学习的子类。 我们首先来看定义问题陈述。 然后,我们将探讨累积奖励的概念。 我们将探索 Markov 决策过程和 Bellman 方程,然后转向深层 Q 学习。 我们还将看到由 OpenAI 开发的工具包 Gym 的介绍,该工具包用于开发和尝试强化学习算法。
第 7 章,“强化学习”介绍了强化学习的概念,它实际上并不是深度学习的子类。 我们首先来看定义问题陈述。 然后,我们将探讨累积奖励的概念。 我们将探索 Markov 决策过程和贝尔曼方程,然后转向深层 Q 学习。 我们还将看到由 OpenAI 开发的工具包 Gym 的介绍,该工具包用于开发和尝试强化学习算法。
第 8 章,“生产中的 PyTorch”着眼于在将深度学习模型部署到生产过程中人们甚至是深度学习专家所面临的困难。 我们将探索用于生产部署的不同选项,包括使用围绕 PyTorch 的 Flask 包装器以及使用 RedisAI,RedisAI 是高度优化的运行时,用于在多集群环境中部署模型,并且每秒可以处理数百万个请求。
......
......@@ -513,13 +513,13 @@ tensor([[1]], dtype=torch.uint8)
#### 注意
**Sigmoid 激活**:激活函数在神经网络的各层之间创建非线性。 这是必不可少的,因为在没有非线性的情况下,各层只是将输入值与权重相乘。 在那种情况下,神经网络的单层可以完成 100 层的确切功能; 这只是增加或减少权重值的问题。 乙状结肠激活可能是最传统的激活函数。 它将输入压缩到[0,1]的范围。
**Sigmoid 激活**:激活函数在神经网络的各层之间创建非线性。 这是必不可少的,因为在没有非线性的情况下,各层只是将输入值与权重相乘。 在那种情况下,神经网络的单层可以完成 100 层的确切功能; 这只是增加或减少权重值的问题。 Sigmoid激活可能是最传统的激活函数。 它将输入压缩到[0,1]的范围。
![The functional module](img/B09475_02_10.jpg)
图 2.10:乙状结肠激活
图 2.10:Sigmoid激活
尽管 sigmoid 对输入非线性作用,但它不会产生以零为中心的输出。 逐渐消失的梯度和计算上昂贵的取幂是 Sigmoid 曲线的其他缺点,由于这些原因,几乎所有深度学习从业人员如今都没有在任何用例中使用 Sigmoid 曲线。 找到合适的非线性是一个主要的研究领域,人们已经提出了更好的解决方案,例如 ReLU,Leaky ReLU 和 ELU。 在以后的章节中,我们将看到其中的大多数。
尽管 sigmoid 对输入非线性作用,但它不会产生以零为中心的输出。 逐渐梯度消失和计算上昂贵的取幂是 Sigmoid 曲线的其他缺点,由于这些原因,几乎所有深度学习从业人员如今都没有在任何用例中使用 Sigmoid 曲线。 找到合适的非线性是一个主要的研究领域,人们已经提出了更好的解决方案,例如 ReLU,Leaky ReLU 和 ELU。 在以后的章节中,我们将看到其中的大多数。
`FizBuzNet``forward`函数内部,我们有两个线性层和两个非线性激活层。 通常,`forward`函数的输出返回是代表概率分布的对数,其中正确的类获得较高的值,但是在我们的模型中,我们从 Sigmoid 返回输出。
......
......@@ -10,7 +10,7 @@
尽管原始 RNN(在输入中为每个单元展开一个简单的 RNN 单元)是一个革命性的想法,但未能提供可用于生产的结果。 主要障碍是长期依赖问题。 当输入序列的长度增加时,网络到达最后一个单元时将无法从初始单位(单词,如果是自然语言)中记住信息。 我们将在接下来的部分中看到 RNN 单元包含的内容以及如何将其展开。
几次迭代和多年的研究得出了 RNN 架构设计的几种不同方法。 最新的模型现在使用**长短期记忆****LSTM**)实现或**门控循环单元****GRU**)。 这两种实现都将 RNN 单元内的门用于不同目的,例如遗忘门,它使网络忘记不必要的信息。 这些架构具有香草 RNN 所存在的长期依赖性问题,因此使用门不仅要忘记不必要的信息,而且要记住在长距离移动到最后一个单元时所必需的信息。
几次迭代和多年的研究得出了 RNN 架构设计的几种不同方法。 最新的模型现在使用**长短期记忆****LSTM**)实现或**门控循环单元****GRU**)。 这两种实现都将 RNN 单元内的门用于不同目的,例如遗忘门,它使网络忘记不必要的信息。 这些架构具有原始 RNN 所存在的长期依赖性问题,因此使用门不仅要忘记不必要的信息,而且要记住在长距离移动到最后一个单元时所必需的信息。
注意是下一个重大发明,它可以帮助网络将注意力集中在输入的重要部分上,而不是搜索整个输入并试图找到答案。 实际上,来自 Google Brain 和多伦多大学的一个团队证明,注意力可以击败 LSTM 和 GRU 网络[1]。 但是,大多数实现都同时使用 LSTM/GRU 和注意力。
......
......@@ -148,7 +148,7 @@ MDP 定义有五件事:
![Bellman equation](img/B09475_07_005.jpg)
简而言之,Bellman 等式指出,每个点的收益等于下一时间步长的估计报酬加上随后状态的折现报酬。 可以肯定地说,某些策略的任何值函数都遵循 Bellman 方程。
简而言之,Bellman 等式指出,每个点的收益等于下一时间步长的估计报酬加上随后状态的折现报酬。 可以肯定地说,某些策略的任何值函数都遵循贝尔曼方程。
#### 寻找最佳 Q 函数
......@@ -162,7 +162,7 @@ MDP 定义有五件事:
因此,值函数现在将接受网络的状态和权重,并输出当前状态的值。 我们将需要计算某种误差并将其反向传播到网络,然后使用梯度下降进行训练。 我们需要将网络的输出(值函数)与我们认为最佳的值进行比较。
根据 Bellman 方程:
根据贝尔曼方程:
![Deep Q-learning](img/B09475_07_005.jpg)
......
......@@ -62,7 +62,7 @@ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
## 重播内存
我们将使用经验重播记忆来训练我们的 DQN。 它存储代理观察到的转换,使我们以后可以重用此数据。 通过从中随机抽样,可以构建批量的转换相关。 已经表明,这极大地稳定和改善了 DQN 训练程序。
我们将使用经验回放记忆来训练我们的 DQN。 它存储代理观察到的转换,使我们以后可以重用此数据。 通过从中随机抽样,可以构建批量的转换相关。 已经表明,这极大地稳定和改善了 DQN 训练程序。
为此,我们将需要两个类:
......@@ -109,7 +109,7 @@ Q 学习的主要思想是,如果我们有一个函数`Q*:State x Action =>
但是,我们对世界一无所知,因此无法访问`Q*`。 但是,由于神经网络是通用函数逼近器,因此我们可以简单地创建一个并将其训练为类似于`Q*`的函数。
对于我们的训练更新规则,我们将使用一个事实,即某些策略的每个`Q`函数都遵循 Bellman 方程:
对于我们的训练更新规则,我们将使用一个事实,即某些策略的每个`Q`函数都遵循贝尔曼方程:
![](img/tex34-2.gif)
......
......@@ -6,7 +6,7 @@
## 第 1 步:将 PyTorch 模型转换为 Torch 脚本
PyTorch 模型从 Python 到 C++ 的旅程由 [Torch 脚本](https://pytorch.org/docs/master/jit.html)启用,它是 PyTorch 模型的一种表示形式,可以由 Torch 脚本编译器理解,编译和序列化。 如果您从使用香草“渴望” API 编写的现有 PyTorch 模型开始,则必须首先将模型转换为 Torch 脚本。 在最常见的情况下(如下所述),只需很少的努力。 如果您已经有了 Torch 脚本模块,则可以跳到本教程的下一部分。
PyTorch 模型从 Python 到 C++ 的旅程由 [Torch 脚本](https://pytorch.org/docs/master/jit.html)启用,它是 PyTorch 模型的一种表示形式,可以由 Torch 脚本编译器理解,编译和序列化。 如果您从使用原始“渴望” API 编写的现有 PyTorch 模型开始,则必须首先将模型转换为 Torch 脚本。 在最常见的情况下(如下所述),只需很少的努力。 如果您已经有了 Torch 脚本模块,则可以跳到本教程的下一部分。
有两种将 PyTorch 模型转换为 Torch 脚本的方法。 第一种称为*跟踪*,该机制通过使用示例输入对模型的结构进行一次评估,并记录这些输入在模型中的流量来捕获模型的结构。 这适用于有限使用控制流的模型。 第二种方法是在模型中添加显式批注,以告知 TorchScript 编译器可以根据 Torch Script 语言施加的约束直接解析和编译模型代码。
......@@ -44,7 +44,7 @@ Out[2]: tensor([-0.2698, -0.0381, 0.4023, -0.3010, -0.0448], grad_fn=<SliceBack
### 通过注释转换为 Torch 脚本
在某些情况下,例如,如果模型采用特定形式的控制流,则可能需要直接在 Torch 脚本中编写模型并相应地注释模型。 例如,假设您具有以下香草 Pytorch 模型:
在某些情况下,例如,如果模型采用特定形式的控制流,则可能需要直接在 Torch 脚本中编写模型并相应地注释模型。 例如,假设您具有以下原始 Pytorch 模型:
```py
import torch
......
......@@ -90,7 +90,7 @@ class BatchUpdateParameterServer(object):
```
对于训练器,它们都使用来自 PS 的相同参数集进行初始化。 在每次迭代中,每位训练器首先进行前进和后退操作,以局部生成梯度。 然后,每个训练器都使用 RPC 向 PS 报告其梯度,并通过同一 RPC 请求的返回值取回更新的参数。 在训练器的实现中,目标功能是否标记有`@rpc.functions.async_execution`都没有关系。 训练器只需使用`rpc_sync`调用`update_and_fetch_model`,这会阻塞训练器,直到返回更新的模型。
对于训练器,它们都使用来自 PS 的相同参数集进行初始化。 在每次迭代中,每位训练器首先进行前进和后退操作,以局部生成梯度。 然后,每个训练器都使用 RPC 向 PS 报告其梯度,并通过同一 RPC 请求的返回值取回更新的参数。 在训练器的实现中,目标函数是否标记有`@rpc.functions.async_execution`都没有关系。 训练器只需使用`rpc_sync`调用`update_and_fetch_model`,这会阻塞训练器,直到返回更新的模型。
```py
batch_size, image_w, image_h = 20, 64, 64
......
......@@ -58,7 +58,7 @@
* **通用深度学习**:密集连接的层或全连接网络
* **序列模型**:循环神经网络,长短期记忆网络,门控递归单元等
* **序列模型**:循环神经网络,长短期记忆网络,门控递归单元等
* **空间数据模型**(例如,图像):卷积神经网络,生成对抗网络
......@@ -96,9 +96,9 @@
我们将在以下各节中讨论一些流行的激活函数。
# 乙状结肠功能
# Sigmoid 函数
乙状结肠是一种平滑且连续可微的功能。 这导致非线性输出。 Sigmoid 函数在这里表示:
Sigmoid是一种平滑且连续可微的功能。 这导致非线性输出。 Sigmoid 函数在这里表示:
![](img/9241aa68-606b-4192-b3cc-ccb29f4ef110.png)
......@@ -112,7 +112,7 @@
![](img/d8011c52-5574-4521-a42d-e18893417c8d.png)
乙状结肠得到广泛使用,但其缺点是该函数趋于 +3 和 -3 平坦。 因此,无论何时函数落在该区域中,梯度都趋于接近零,并且我们的神经网络学习停止。
Sigmoid得到广泛使用,但其缺点是该函数趋于 +3 和 -3 平坦。 因此,无论何时函数落在该区域中,梯度都趋于接近零,并且我们的神经网络学习停止。
由于 Sigmoid 函数输出的值从 0 到 1,即全为正,因此它在原点周围是非对称的,并且所有输出信号都是正的,即具有相同的符号。 为了解决这个问题,已将 Sigmoid 函数缩放为 tanh 函数,我们将在下面进行研究。 而且,由于梯度导致的值很小,因此很容易遇到梯度消失的问题(我们将在本章稍后讨论)。
......@@ -126,7 +126,7 @@ Tanh 是围绕原点对称的连续函数。 它的范围是 -1 至 1。tanh 函
![](img/93d7dc16-99f6-48f9-b12f-39bb21a534d6.png)
现在看下面的 tanh 函数的梯度曲线,我们发现它比 Sigmoid 函数陡峭。 tanh 函数还具有消失的梯度问题:
现在看下面的 tanh 函数的梯度曲线,我们发现它比 Sigmoid 函数陡峭。 tanh 函数还具有梯度消失问题:
![](img/1472e114-eba7-4719-9668-48f28c2716b0.png)
......@@ -150,7 +150,7 @@ softmax 函数主要用于处理分类问题,并且最好在输出层中使用
因此,我们看到了所有类别的概率。 由于每个分类器的输出都需要所有分类的概率值,因此 softmax 函数成为分类器外层激活函数的最佳候选者。
# 整流线性单位功能
# 整流线性单元函数
**整流线性单元**(更称为 **ReLU**)是使用最广泛的激活函数:
......@@ -186,7 +186,7 @@ ReLU 的导数图,对于`x <= 0`,`f'(x) = 1`,对于`x > 0`,`f'(x) = 0`
* 避免在外层使用 ReLU。
# 逻辑回归作为神经网络
# 作为神经网络的逻辑回归
逻辑回归是一种分类器算法。 在这里,我们尝试预测输出类别的概率。 具有最高概率的类别将成为预测输出。 使用交叉熵计算实际输出和预测输出之间的误差,并通过反向传播将其最小化。 检查下图,了解二进制逻辑回归和多类逻辑回归。 区别基于问题陈述。 如果输出类的唯一数量为两个,则称为**二分类**;如果输出类的唯一数量为两个以上,则称为多类分类。 如果没有隐藏层,我们将 Sigmoid 函数用于二分类,并获得用于二进制逻辑回归的架构。 类似地,如果没有隐藏层,并且我们使用 softmax 函数进行多类分类,则可以得到多类逻辑回归的架构。
......@@ -496,7 +496,7 @@ Xavier 初始化是神经网络中权重的初始化,是遵循高斯分布的
由于 RNN 合并了序列数据,因此反向传播会随时间扩展到反向传播。 在此,时间是一系列相互连接的有序时间步长,从而可以通过不同的时间步长进行反向传播。
# 长短期记忆网络
# 长短期记忆网络
RNN 实际上无法处理**长期依赖项**。 随着输出序列中的输出数据点与输入序列中的输入数据点之间的距离增加,RNN 无法在两者之间连接信息。 这通常发生在基于文本的任务中,例如机器翻译,音频到文本,以及序列长度较长的更多任务。
......@@ -611,10 +611,10 @@ Inception 由 Google 团队于 2014 年创建。其主要思想是创建更广
训练在反向传播期间进行。 因此,训练的方向始终是从较后的层(输出/右侧)到较早的层(输入/左侧)。 与早期的层相比,这导致后面的层学习得很好。 网络越深入,情况恶化的程度就越大。 这引起了与深度学习相关的两个可能的问题,它们是:
* 消失的梯度问题
* 梯度消失问题
* 梯度爆炸问题
# 消失的梯度问题
# 梯度消失问题
当早期层中存在的神经元无法学习时,梯度梯度消失是与人工神经网络训练相关的问题之一,因为训练权重的梯度缩小到零。 这是由于神经网络的深度较大,加上带有导数的激活函数导致值较低。
......@@ -629,7 +629,7 @@ Inception 由 Google 团队于 2014 年创建。其主要思想是创建更广
梯度爆炸问题是与训练人工神经网络有关的另一个问题,当在早期层中存在的神经元的学习发生分歧时,因为梯度变得太大而导致权重发生严重变化,从而避免了收敛。 如果权重分配不正确,通常会发生这种情况。
在遵循针对消失的梯度问题提到的步骤时,我们观察到梯度在早期层中爆炸,也就是说,它们变大了。 早期层发散的现象称为**梯度爆炸问题**
在遵循针对梯度消失问题提到的步骤时,我们观察到梯度在早期层中爆炸,也就是说,它们变大了。 早期层发散的现象称为**梯度爆炸问题**
# 克服深度学习的局限性
......@@ -741,7 +741,7 @@ Q 学习涉及的步骤:
有关 Q 学习和深度 Q 网络的更多详细信息,将在第 5 章, “Q 学习和深度 Q 网络”中进行介绍。
# 异步优势参与者批评
# 异步优势演员评论
A3C 算法由 Google DeepMind 和 MILA 的联合团队于 2016 年 6 月发布。 它更简单并且具有更轻的框架,该框架使用异步梯度下降来优化深度神经网络。 它速度更快,并且能够在多核 CPU 而非 GPU 上显示出良好的结果。 A3C 的一大优势是它可以在连续动作空间和离散动作空间上工作。 结果,它为许多具有复杂状态和动作空间的新挑战性难题打开了门户。
......@@ -982,11 +982,11 @@ OpenAI Gym 由两部分组成:
在继续进行所有编码之前,让我们阐明一些在深度强化学习领域中的先驱,行业领导者和研究突破。
# 戴维·西尔弗
# David Silver
David Silver 博士的 H 指数为 30,是 Google DeepMind 强化学习研究团队的负责人,也是 AlphaGo 的首席研究员。 David 共同创立了 Elixir Studios,然后在艾伯塔大学获得了强化学习博士学位,在那里他共同介绍了第一个大师级`9x9`围棋程序中使用的算法。 此后,他成为伦敦大学学院的讲师。 在 2013 年加入全职之前,他曾为 DeepMind 担任顾问。David 领导了 AlphaGo 项目,该项目成为在围棋游戏中击败顶级职业玩家的第一个程序。
# 彼得阿比尔
# Pieter Abbeel
Pieter Abbeel 是加州大学伯克利分校的教授,也是 OpenAI 的研究科学家。 Pieter 在 Ng 的带领下完成了计算机科学博士学位。 他目前的研究重点是机器人技术和机器学习,尤其是深度强化学习,深度模仿学习,深度无监督学习,元学习,学习到学习和 AI 安全。 Pieter 还获得了 NIPS 2016 最佳论文奖。
......@@ -1004,9 +1004,9 @@ Google DeepMind 是一家英国人工智能公司,成立于 2010 年 9 月,
正如 Google DeepMind 先前所述,AlphaGo 是一种计算机程序,它首先击败了 Lee Sedol,然后击败了当时在围棋中排名世界第一的 Ke Jie。 在 2017 年的改进版本中,AlphaGo Zero 发布,击败了 AlphaGo 100 场比赛至 0 局。
# 天秤座
# Libratus
Libratus 是由卡内基梅隆大学的 Tuomas Sandholm 教授带领的团队设计的人工智能计算机程序,用于玩扑克。 天秤座和它的前身克劳迪科有着相同的含义,平衡。
Libratus 是由卡内基梅隆大学的 Tuomas Sandholm 教授带领的团队设计的人工智能计算机程序,用于玩扑克。 Libratus 和它的前身克劳迪科有着相同的含义,平衡。
2017 年 1 月,它在一场为期 20 天的马拉松比赛中击败了世界上最好的四名职业扑克选手,创造了历史。
......
# 使用 OpenAI Gym 训练强化学习代理
# 使用 OpenAI Gym 训练强化学习智能体
OpenAI Gym 提供了许多虚拟环境来训练您的强化学习代理。 在强化学习中,最困难的任务是创造环境。 OpenAI Gym 通过提供许多玩具游戏环境为用户提供了一个平台,以训练和确定他们的强化学习代理,从而为救援提供了帮助。
......@@ -136,7 +136,7 @@ Discrete(16)
`Discrete(16)`输出表示冻结湖环境的观察(状态)空间是一组离散值,并具有 16 种要由代理探索的不同状态。
# 使用 OpenAI Gym 环境对代理编程
# 使用 OpenAI Gym 环境对智能体编程
本节考虑的环境是 **FrozenLake-v0**。 有关环境的实际文档可以在[这个页面](https://gym.openai.com/envs/FrozenLake-v0/)中找到。
......@@ -571,4 +571,4 @@ Q 学习和 Q 网络都需要付出一定的稳定性。 在某些情况下,
在本章中,我们学习了 OpenAI Gym,包括安装各种重要功能以加载,渲染和理解环境状态操作空间。 我们了解了 ε 贪婪方法作为探索与利用难题的解决方案,并尝试实现基本的 Q 学习和 Q 网络算法,以训练增强学习代理从 OpenAI Gym 导航环境。
在下一章中,我们将介绍强化学习中最基本的概念,包括**马尔可夫决策过程****MDP**),Bellman 方程和 Markov Chain Monte Carlo。
\ No newline at end of file
在下一章中,我们将介绍强化学习中最基本的概念,包括**马尔可夫决策过程****MDP**),贝尔曼方程和 Markov Chain Monte Carlo。
\ No newline at end of file
# 马尔可夫决策过程
**马尔可夫决策过程**(通常称为 **MDP**)是一种加强学习的方法,可用于在网格世界环境中进行决策。 Gridworld 环境由网格形式的状态组成,例如 OpenAI Gym 的 FrozenLake-v0 环境中的状态,我们在上一章中试图进行研究和解决。
**马尔可夫决策过程**(通常称为 **MDP**)是一种强化学习的方法,可用于在网格世界环境中进行决策。 Gridworld 环境由网格形式的状态组成,例如 OpenAI Gym 的 FrozenLake-v0 环境中的状态,我们在上一章中试图进行研究和解决。
MDP 试图通过将网格划分为状态,动作,模型/转换模型和奖励来捕获网格形式的世界。 MDP 的解决方案称为策略,目标是为该 MDP 任务找到最佳策略。
因此,任何遵循 Markov 属性的,由一组状态,动作和奖励组成的强化学习任务都将被视为 MDP。
在本章中,我们将深入研究 MDP,状态,动作,奖励,策略,以及如何使用 Bellman 方程求解它们。 此外,我们将介绍部分可观察的 MDP 的基础知识及其解决的复杂性。 我们还将介绍探索开发难题和著名的 E3(开发,探索或利用)算法。 然后我们将进入引人入胜的部分,在该部分中,我们将为代理编程,以使用 MDP 原理学习和玩乒乓球。
在本章中,我们将深入研究 MDP,状态,动作,奖励,策略,以及如何使用贝尔曼方程求解它们。 此外,我们将介绍部分可观察的 MDP 的基础知识及其解决的复杂性。 我们还将介绍探索利用难题和著名的 E3(开发,探索或利用)算法。 然后我们将进入引人入胜的部分,在该部分中,我们将为代理编程,以使用 MDP 原理学习和玩乒乓球。
我们将在本章介绍以下主题:
......@@ -28,7 +28,7 @@ MDP 试图通过将网格划分为状态,动作,模型/转换模型和奖励
让我们尝试将其分解为不同的乐高积木,以了解整个过程的含义。
# 马尔可夫财产
# 马尔可夫属性
简而言之,根据**马尔可夫属性**,为了了解不久的将来的信息(例如,在时间`t + 1`),当前信息在时间`t`很重要。
......@@ -56,11 +56,11 @@ MDP 试图通过将网格划分为状态,动作,模型/转换模型和奖励
前面的示例将动作空间显示为离散的设置空间,即`a ∈ A`,其中`A = {UP, DOWN, LEFT, RIGHT}`。 也可以将其视为状态的函数,即`a = A(s)`,其中根据状态函数来确定可能采取的行动。
# 过渡模型
# 转移模型
过渡模型`T(s, a, s')`是三个变量的函数,它们是当前状态(`s`),动作(`a`) 以及新状态(`s'`),并定义了在环境中玩游戏的规则。 它给出了`P(s' | s, a)`的概率,也就是说,假设代理采取了行动`a`,在给定状态`s`下降落到新的`s'`状态的概率。
转移模型`T(s, a, s')`是三个变量的函数,它们是当前状态(`s`),动作(`a`) 以及新状态(`s'`),并定义了在环境中玩游戏的规则。 它给出了`P(s' | s, a)`的概率,也就是说,假设代理采取了行动`a`,在给定状态`s`下降落到新的`s'`状态的概率。
过渡模型在随机世界中起着至关重要的作用,与确定性世界的情况不同,在确定性世界中,除了确定的着陆状态之外,任何着陆状态的概率都为零。
转移模型在随机世界中起着至关重要的作用,与确定性世界的情况不同,在确定性世界中,除了确定的着陆状态之外,任何着陆状态的概率都为零。
让我们考虑以下环境(世界),并考虑确定和随机的不同情况:
......@@ -73,11 +73,11 @@ MDP 试图通过将网格划分为状态,动作,模型/转换模型和奖励
* **确定的环境**:在确定的环境中,如果您采取某种行动,例如说`UP`,则您肯定会以概率 1 执行该行动。
* **随机环境**:在随机环境中,如果您执行相同的操作(例如说`UP`),则有一定的概率说 0.8 可以实际执行给定的操作,而有 0.1 的概率可以执行 垂直于给定动作`UP`动作(`LEFT``RIGHT`)。 在此,对于`s`状态和`UP`动作转换模型,`T(s', UP, s) = P(s' | s, UP) = 0.8`
由于`T(s, a, s') ~ P(s' | s, a)`,因此新状态的概率仅取决于当前状态和操作,而与过去状态无关。 因此,过渡模型遵循一阶马尔可夫性质。
由于`T(s, a, s') ~ P(s' | s, a)`,因此新状态的概率仅取决于当前状态和操作,而与过去状态无关。 因此,转移模型遵循一阶马尔可夫性质。
我们也可以说我们的宇宙也是一个随机环境,因为宇宙是由处于不同状态的原子组成的,这些原子由位置和速度定义。 每个原子执行的动作都会改变其状态,并导致宇宙发生变化。
# 奖
# 奖
状态的**奖励**量化了进入状态的有用性。 有三种不同的形式来表示奖励,即`R(s)``R(s, a)``R(s, a, s')`,但它们都是等效的。
......@@ -92,7 +92,7 @@ MDP 试图通过将网格划分为状态,动作,模型/转换模型和奖励
# 策略
到现在为止,我们已经解决了造成 MDP 问题的块,即状态,动作,过渡模型和奖励,现在是解决方案。 该策略是解决 MDP 问题的方法。
到现在为止,我们已经解决了造成 MDP 问题的块,即状态,动作,转移模型和奖励,现在是解决方案。 该策略是解决 MDP 问题的方法。
![](img/ec5c8b7c-4b92-426c-97e0-673286364a05.png)
......@@ -102,7 +102,7 @@ MDP 试图通过将网格划分为状态,动作,模型/转换模型和奖励
因此,该策略不过是一个指南,它告诉您针对给定状态应采取的行动。 它不是计划,而是通过返回针对每个状态要采取的行动来揭示环境的基础计划。
# 奖励顺序-假设
# 奖励序列-假设
奖励序列在找到 MDP 问题的最佳策略中起着重要作用,但是有一些假设揭示了一系列奖励如何实现延迟奖励的概念。
......@@ -197,15 +197,15 @@ MDP 试图通过将网格划分为状态,动作,模型/转换模型和奖励
其中,`T(s, a, s')`是转移概率,即`P(s' | s, a)`;在对`s`状态采取`a`动作后,`U(s')`是新着陆状态的效用。
![](img/c7961616-4973-4920-969e-2ac20e4661b1.png)指的是针对特定行动采取的所有可能的新状态结果的总和,然后无论哪个行动给出了![](img/bde26e3c-33c6-446d-90be-164102224f37.png)的最大值,该最大值被认为是最优策略的一部分,因此, 状态由以下 **Bellman 方程**给出,
![](img/c7961616-4973-4920-969e-2ac20e4661b1.png)指的是针对特定行动采取的所有可能的新状态结果的总和,然后无论哪个行动给出了![](img/bde26e3c-33c6-446d-90be-164102224f37.png)的最大值,该最大值被认为是最优策略的一部分,因此, 状态由以下 **贝尔曼方程**给出,
![](img/0ef93e7c-5cc5-45ab-8baf-db2a07bd9e29.png)
其中,![](img/adb4cb12-b671-4248-8b74-0dc2b334b995.png)是即时奖励,![](img/c41ab863-e019-4bc7-ad8d-7530f9e0190b.png)是来自未来的奖励,也就是说,如果采取行动`a`,代理可以从给定的`s`状态到达的`s'`状态的贴现效用。
# 解决 Bellman 方程以找到策略
# 解决贝尔曼方程来找到策略
假设在给定的环境中我们有`n`个状态,如果我们看到 Bellman 方程,
假设在给定的环境中我们有`n`个状态,如果我们看到贝尔曼方程,
![](img/5051739f-0788-416d-9182-38ae2169ffca.png)
......@@ -215,7 +215,7 @@ MDP 试图通过将网格划分为状态,动作,模型/转换模型和奖励
* 从任意工具开始
* 根据邻域更新效用,直到收敛为止,也就是说,根据给定状态的着陆状态的效用,使用 Bellman 方程更新状态的效用
* 根据邻域更新效用,直到收敛为止,也就是说,根据给定状态的着陆状态的效用,使用贝尔曼方程更新状态的效用
多次迭代以得出状态的真实值。 迭代以收敛到状态的真实值的过程称为**值迭代**
......@@ -223,7 +223,7 @@ MDP 试图通过将网格划分为状态,动作,模型/转换模型和奖励
让我们尝试通过示例来理解这一点。
# 使用 Bellman 方程的值迭代的示例
# 使用贝尔曼方程的值迭代的示例
请考虑以下环境和给定的信息:
......@@ -376,7 +376,7 @@ MDP 试图通过将网格划分为状态,动作,模型/转换模型和奖励
# 部分可观察的马尔可夫决策过程
在 MDP 中,可观察的数量是动作,设置`A`,状态,设置`S`过渡模型,`T`和奖励,设置`R`。 在**部分可观察的 MDP**(也称为 **POMDP**)的情况下,情况并非如此。 在 POMDP 中,内部存在一个 MDP,代理无法直接观察到它,而是根据所做的任何观察来做出决定。
在 MDP 中,可观察的数量是动作,设置`A`,状态,设置`S`转移模型,`T`和奖励,设置`R`。 在**部分可观察的 MDP**(也称为 **POMDP**)的情况下,情况并非如此。 在 POMDP 中,内部存在一个 MDP,代理无法直接观察到它,而是根据所做的任何观察来做出决定。
在 POMDP 中,有一个观测集`Z`,它包含不同的可观测状态和观测函数`O`,它采用`s`状态和`z`观察值作为输入,输出在`s`状态下看到`z`观察值的可能性。
......@@ -590,7 +590,7 @@ After learning completion printing the utilities for each states below from stat
# 总结
在本章中,我们介绍了网格世界类型的环境的详细信息,并了解了马尔可夫决策过程的基础,即状态,动作,奖励,过渡模型和策略。 此外,我们利用这些信息通过价值迭代和策略迭代方法来计算效用和最优策略。
在本章中,我们介绍了网格世界类型的环境的详细信息,并了解了马尔可夫决策过程的基础,即状态,动作,奖励,转移模型和策略。 此外,我们利用这些信息通过价值迭代和策略迭代方法来计算效用和最优策略。
除此之外,我们对部分可观察的马尔可夫决策过程是什么样子以及解决它们的挑战有了基本的了解。 最后,我们从 OpenAI Gym 获取了我们最喜欢的 gridworld 环境,即 FrozenLake-v0,并实现了一种值迭代方法,以使我们的代理学会在该环境中导航。
......
......@@ -14,7 +14,7 @@
* 策略优化方法
* 为什么要采用策略优化方法?
* 策略目标功能
* 策略目标函数
* 时差规则
* 策略梯度
* 使用策略梯度的 Agent 学习 Pong
......@@ -56,9 +56,9 @@
让我们看两个例子,这些例子将解释基于价值方法将随机策略与接近确定性策略相结合的重要性。
# 示例 1-石头,石头,剪刀
# 示例 1-石头,剪刀,布
石头,剪刀,剪刀是两人游戏,包含以下规则:
石头,剪刀,是两人游戏,包含以下规则:
* 摇滚剪刀
* 剪刀打纸
......@@ -66,7 +66,7 @@
因此,不可能有确定的策略来取胜。 说,如果有确定性的策略,那摇滚总是赢家,但是如果对手有剪刀,情况就是这样。 但是,当对手拿到纸时,石头就被击败了。 因此,在这种环境下无法确定解决方案。 解决此问题的唯一方法是使用本质上是随机的统一随机策略。
# 示例 2-状态别名网格世界
# 示例 2-名为网格世界的状态
考虑以下别名为 grid-world 的状态:
......@@ -97,7 +97,7 @@
因此,从前面的示例中,我们已经知道,每当发生状态别名时,随机策略都可以执行得更好。 因此,只要存在状态混叠的情况(即环境的表示),就会部分观察状态(例如,您处于部分可观察的马尔可夫决策过程中)或函数逼近器使用状态的特征,这会限制 从环境的整体角度来看,使用基于随机策略的基于策略的方法要比基于价值的方法要好。
# 策略目标功能
# 策略目标函数
现在让我们讨论如何优化策略。 在策略方法中,我们的主要目标是具有参数向量![](img/7f80ae4c-023b-41eb-afe0-4adc03aeaa6f.png)的给定策略![](img/fba31d95-dfc8-484d-89a8-3f18a2a052a1.png)找到参数向量的最佳值。 为了测量哪个最好,我们针对参数向量![](img/1d265c8a-58fb-47ad-a899-332ce8ed4b57.png)的不同值测量![](img/f7d09ac3-d177-4d26-be11-40d62ddd2498.png)策略![](img/7eff98de-883b-4dc2-91b2-bcf5345e6d21.png)的质量。
......@@ -119,7 +119,7 @@
到目前为止,我们知道基于策略的强化学习是一个优化问题,目标是找到使![](img/29b8bcc8-8899-4036-915c-da44b0572d00.png)最大化的![](img/ebff45ff-12c2-44e0-bda5-21cde9d251b6.png)。 同样,在这里,我们将使用基于梯度的方法进行优化。 使用基于梯度的优化的原因是要获得更高的效率,因为与无梯度方法相比,梯度指向了更高效率的方向。
让衡量策略质量的![](img/e692d5f7-a0f4-429d-88b9-76841097db58.png)成为我们的策略目标功能。 因此,策略梯度算法通过相对于参数![](img/ea8c20d8-5c4c-48ed-92eb-d67c4fce01c2.png)提升策略的梯度,在![](img/2db17489-4871-4766-aecf-8ceb59e3588f.png)中寻找局部最大值。 这是因为我们的目标是使![](img/8fa96eec-d05a-4d08-823a-c94a2f12d1f2.png)相对于![](img/a785ed7b-74a1-4b8c-a661-44cbe24676b7.png)最大化,因此我们进行了梯度上升,其中
让衡量策略质量的![](img/e692d5f7-a0f4-429d-88b9-76841097db58.png)成为我们的策略目标函数。 因此,策略梯度算法通过相对于参数![](img/ea8c20d8-5c4c-48ed-92eb-d67c4fce01c2.png)提升策略的梯度,在![](img/2db17489-4871-4766-aecf-8ceb59e3588f.png)中寻找局部最大值。 这是因为我们的目标是使![](img/8fa96eec-d05a-4d08-823a-c94a2f12d1f2.png)相对于![](img/a785ed7b-74a1-4b8c-a661-44cbe24676b7.png)最大化,因此我们进行了梯度上升,其中
为![](img/029690bc-9836-48b8-b4c6-2106aa3a2a32.png)的参数的增量如下:
![](img/9ff648e7-9f6f-4a44-a52f-7d749cb6e1cf.png)
......@@ -269,7 +269,7 @@ end for
Output: final
```
# 批评者算法
# 评论家算法
先前使用蒙特卡洛策略梯度方法进行的策略优化导致较大的差异。 为了解决此问题,我们使用评论家来估计状态作用值函数,如下所示:
......@@ -328,7 +328,7 @@ Output : final
因此,通过使用基线函数,期望值受到方差降低的控制,而方向没有任何变化。
# 香草策略梯度
# 原始策略梯度
在常规策略梯度方法中,目标是使用策略梯度估计和更好的基线估计来更新策略。
......@@ -346,7 +346,7 @@ for iteration = 1,2,......N do
end for
```
# 使用策略梯度的智能体学习 Pong
# 使用策略梯度的学习 Pong 的智能体
在本节中,我们将创建一个策略网络,该策略网络将使用来自 pong 环境的原始像素(来自 OpenAI Gym 的 **pong-v0**)作为输入。 策略网络是一个单独的隐藏层神经网络,它全连接到输入层上 pong 的原始像素,还全连接到包含单个节点的输出层,该单个节点返回了桨上升的可能性。 我要感谢 Andrej Karpathy 提出了一种使代理使用策略梯度进行学习的解决方案。 我们将尝试实现类似的方法。
......@@ -608,6 +608,6 @@ while True:
# 总结
在本章中,我们介绍了强化学习中最著名的算法,策略梯度和参与者批评算法。 在制定策略梯度以加强学习中更好的基准测试方面,正在进行大量研究。 策略梯度的进一步研究包括**信任区域策略优化****TRPO**),**自然策略梯度****深度依赖策略梯度****DDPG**),这些内容不在本书的讨论范围之内。
在本章中,我们介绍了强化学习中最著名的算法,策略梯度和参与者批评算法。 在制定策略梯度以强化学习中更好的基准测试方面,正在进行大量研究。 策略梯度的进一步研究包括**信任区域策略优化****TRPO**),**自然策略梯度****深度依赖策略梯度****DDPG**),这些内容不在本书的讨论范围之内。
在下一章中,我们将研究 Q 学习的基础知识,应用深度神经网络以及更多技术。
\ No newline at end of file
# Q 学习和深度 Q 网络
在第 3 章,“马尔可夫决策过程”中,我们讨论了遵循马尔可夫性质的环境过渡模型以及延迟的奖励和价值的概念( 或工具)功能。 好,在本章中,我们将研究马尔可夫决策过程,了解 Q 学习,以及一种称为深度 Q 网络的改进方法,用于在不同环境中进行泛化。
在第 3 章,“马尔可夫决策过程”中,我们讨论了遵循马尔可夫性质的环境转移模型以及延迟的奖励和价值的概念( 或工具)功能。 好,在本章中,我们将研究马尔可夫决策过程,了解 Q 学习,以及一种称为深度 Q 网络的改进方法,用于在不同环境中进行泛化。
我们将在本章介绍以下主题:
* 人工智能的有监督和无监督学习
* 基于模型的学习和免费模型学习
* 基于模型的学习和模型学习
* Q 学习
* 深度 Q 网络
* 蒙特卡罗树搜索算法
* SARSA 算法
# 为什么要加强学习?
# 为什么要强化学习?
2014 年,Google 以高达 5 亿美元的价格收购了伦敦一家名为 DeepMind 的创业公司。 在新闻中,我们了解到他们创建了一个 AI 代理来击败任何 Atari 游戏,但是 Google 付出如此高的价格收购它的主要原因是因为这一突破向**通用人工智能**靠近了一步。 通用人工智能被称为 AI 代理。 它能够完成各种任务并像人类一样泛化。 当它超过这一点时,该点称为人工超级智能。 目前,AI 社区所做的工作就是我们所说的人工智能,即人工智能,其中 AI 代理能够执行多个任务,但不能概括各种任务。
......@@ -44,9 +44,9 @@ DeepMind 在研究期刊 **Nature** 上发表了他们的论文[《通过深度
根据传感器在特定时间步长感测环境时接收到的信号,此处的状态基本上是代理对环境的看法。
# 基于模型的学习和免费模型学习
# 基于模型的学习和模型学习
在第 3 章,“马尔可夫决策过程”中,我们使用状态,动作,奖励,过渡模型和折现因子来解决我们的马尔可夫决策过程,即 MDP 问题。 因此,如果 MDP 问题的所有这些要素均可用,我们可以轻松地使用规划算法为目标提出解决方案。 这种类型的学习称为**基于模型的学习**,其中 AI 代理将与环境交互,并基于其交互,将尝试近似环境的模型,即状态转换模型。 给定模型,现在代理可以尝试通过值迭代或策略迭代找到最佳策略。
在第 3 章,“马尔可夫决策过程”中,我们使用状态,动作,奖励,转移模型和折现因子来解决我们的马尔可夫决策过程,即 MDP 问题。 因此,如果 MDP 问题的所有这些要素均可用,我们可以轻松地使用规划算法为目标提出解决方案。 这种类型的学习称为**基于模型的学习**,其中 AI 代理将与环境交互,并基于其交互,将尝试近似环境的模型,即状态转换模型。 给定模型,现在代理可以尝试通过值迭代或策略迭代找到最佳策略。
但是,对于我们的 AI 代理来说,学习环境的显式模型不是必需的。 它可以直接从与环境的交互中得出最佳策略,而无需构建模型。 这种学习称为**无模型学习**。 无模型学习涉及在没有具体环境模型的情况下预测某个策略的值函数。
......@@ -101,7 +101,7 @@ Repeat forever:
# Q 学习
在强化学习中,我们希望 Q 函数`Q(s, a)`预测状态`s`的最佳动作,以便最大化未来的回报。 使用 Q 学习估计 Q 函数,该过程涉及使用 Bellman 方程通过一系列迭代更新 Q 函数的过程,如下所示:
在强化学习中,我们希望 Q 函数`Q(s, a)`预测状态`s`的最佳动作,以便最大化未来的回报。 使用 Q 学习估计 Q 函数,该过程涉及使用贝尔曼方程通过一系列迭代更新 Q 函数的过程,如下所示:
![](img/8276b9a8-c086-4554-9c03-a77af4be5eb4.png)
......@@ -149,7 +149,7 @@ For each episode:
end
```
# 探索开发困境
# 探索利用困境
下表总结了探索与利用之间的困境:
......@@ -342,7 +342,7 @@ Episode 10 completed with total reward 222.356805259 in 843 steps
与 Q 网络相比,深度 Q 网络具有更强的泛化能力。 为了将 Q 网络转换为深度 Q 网络,我们需要进行以下改进:
* 使用卷积神经网络代替单层神经网络
* 使用经验重播
* 使用经验回放
* 分离目标网络以计算目标 Q 值
在以下主题中,我们将详细讨论每个参数:
......@@ -355,13 +355,13 @@ DeepMind 在其 DQN 网络中使用了三个卷积层和两个全连接层,从
![](img/373d89a3-057c-444c-91b2-bbe4eeb5e1b4.png)
# 使用经验重播
# 使用经验回放
添加到深度 Q 网络的另一个重要功能是**经验回放**。 该功能背后的想法是,代理可以存储其过去的经验,并分批使用它们来训练深度神经网络。 通过存储经验,代理可以随机抽取批量,并帮助网络从各种数据中学习,而不仅仅是对即时经验的决策正式化。 这些经历中的每一个都以包括**状态,动作,奖励****下一个状态**的四维向量的形式存储。
为了避免存储问题,体验重放的缓冲区是固定的,并且随着新体验的存储,旧体验将被删除。 为了训练神经网络,从缓冲区中提取均匀批量的随机经验。
# 分离目标网络计算目标 Q 值
# 分离目标网络计算目标 Q 值
生成目标 Q 值的单独网络是一项重要功能,它使深层 Q 网络具有独特性。 由此单独的目标网络生成的 Q 值用于计算代理在训练过程中采取的每项操作之后的损失。 使用两个网络而不是一个网络的原因在于,由于每个步骤的权重变化,主要的 Q 网络值在每个步骤中都在不断变化,这使得从该网络生成的 Q 值不稳定。
......@@ -425,7 +425,7 @@ end
决斗 DQN 具有独立的网络来计算值和优势函数,然后将它们组合回以获取 Q 函数的值。 将价值和优势的计算脱钩的原因在于,对于给定状态下的每个动作,代理不必照顾不必要的值函数。 因此,将这些计算去耦会导致鲁棒的状态动作 Q 值。
# 用于 OpenAI Gym 山地车问题的深度 Q 网络
# 用于 OpenAI Gym 山地车问题的深度 Q 网络
在针对山地车问题实现 Q 学习时,我们已经讨论了环境。 让我们直接深入实现一个深度 Q 网络来解决山地车问题。 首先,我们将使用以下代码导入所需的库:
......@@ -690,7 +690,7 @@ Episode 10 with Reward : 38.7923903502 at epsilon 0.9002 in steps 126
接下来,在以下主题中,我们尝试实现一个深度 Q 网络来解决 OpenAI Gym 中的 Cartpole 问题。
# 用于 OpenAI Gym 的 Cartpole 问题的深度 Q 网络
# 用于 OpenAI Gym 的 Cartpole 问题的深度 Q 网络
**Cartpole** 是 MDP 环境中最简单的问题之一,如以下屏幕快照所示。 它由一个在水平轴上移动的推车组成,该推车的中心处固定有一根可旋转的杆。 目的是采取行动,使电杆保持接近垂直且不会向下旋转。
......@@ -848,7 +848,7 @@ Mean over last 100 episodes are: 248.72999999999999
由于输出日志太长,因此在这里,我们的输出适合最近六个情节以及最近 100 个情节的每集平均奖励。
# 适用于 OpenAI Gym Atari 突破的深度 Q 网络
# 用于 OpenAI Gym Atari Breakout 的深度 Q 网络
**Breakout** 环境是 Atari 的 Nolan Bushnell,Steve Bristow 和 Steve Wozniak 团队开发的。与我们在山地车 Cartpole 中看到的状态相比,Atari Breakout 环境的状态要大得多。 或“冰湖”。 状态空间与我们在 Atari Pong 中看到的范围相似。 因此,学习收敛需要很长时间。 以下屏幕快照说明了 Atari Breakout 环境的初始图像帧:
......@@ -1361,7 +1361,7 @@ For each episode:
end
```
# 用于 OpenAI Gym 山地车问题的 SARSA 算法
# 用于 OpenAI Gym 山地车问题的 SARSA 算法
让我们尝试实现先前在山地车问题中解释过的 SARSA 算法。 该程序的初始部分与先前的 Q 学习器具有相似之处。
......@@ -1504,7 +1504,7 @@ Episode 10 completed with total reward 213.212231118 in 786 steps
# 总结
我们知道强化学习可以优化环境中智能体的回报,**马尔可夫决策过程****MDP**)是一种环境表示和数学框架,用于使用状态对决策进行建模 ,动作和奖励。 在本章中,我们了解到 Q 学习是一种无需任何过渡模型即可为任何 MDP 找到最佳动作选择策略的方法。 另一方面,如果给出了转换模型,则值迭代会为任何 MDP 找到最佳的动作选择策略。
我们知道强化学习可以优化环境中智能体的回报,**马尔可夫决策过程****MDP**)是一种环境表示和数学框架,用于使用状态对决策进行建模 ,动作和奖励。 在本章中,我们了解到 Q 学习是一种无需任何转移模型即可为任何 MDP 找到最佳动作选择策略的方法。 另一方面,如果给出了转换模型,则值迭代会为任何 MDP 找到最佳的动作选择策略。
我们还学习了另一个重要的话题,称为深度 Q 网络,这是一种经过改进的 Q 学习方法,它采用深度神经网络作为函数逼近器来在不同环境中进行泛化,这与特定于环境的 Q 表不同。 此外,我们还学会了在 OpenAI Gym 环境中实现 Q 学习,深度 Q 网络和 SARSA 算法。 先前显示的大多数实现可能在具有更好的超参数值和更多训练集的情况下效果更好。
......
......@@ -28,7 +28,7 @@
Google DeepMind 和 MILA 的联合团队于 2016 年 6 月发布了用于深度强化学习的[**同步方法**](https://arxiv.org/pdf/1602.01783.pdf)。 它速度更快,并且能够在多核 CPU 上而不是使用 GPU 上显示出良好的效果。 异步方法也适用于连续动作空间和离散动作空间。
如果我们回想起深度 Q 网络的方法,我们会使用经验重播作为存储所有经验的存储,然后使用其中的随机样本来训练我们的深度神经网络,从而反过来预测最大 Q 值。 有利的行动。 但是,随着时间的流逝,它具有高内存使用和大量计算的缺点。 这背后的基本思想是克服这个问题。 因此,不是使用经验重播,而是创建了环境的多个实例,并且多个代理以异步方式并行执行操作(如下图所示):
如果我们回想起深度 Q 网络的方法,我们会使用经验回放作为存储所有经验的存储,然后使用其中的随机样本来训练我们的深度神经网络,从而反过来预测最大 Q 值。 有利的行动。 但是,随着时间的流逝,它具有高内存使用和大量计算的缺点。 这背后的基本思想是克服这个问题。 因此,不是使用经验回放,而是创建了环境的多个实例,并且多个代理以异步方式并行执行操作(如下图所示):
![](img/f1e415ce-be75-4cb7-b24e-7e81937e3c04.png)
......@@ -43,7 +43,7 @@ Google DeepMind 和 MILA 的联合团队于 2016 年 6 月发布了用于深度
使用并行学习器的好处如下:
* 减少训练时间。
* 不使用经验重播。 因此,基于策略的强化学习方法也可以用于训练神经网络。
* 不使用经验回放。 因此,基于策略的强化学习方法也可以用于训练神经网络。
深度强化学习中异步方法的不同变体是:
......
......@@ -77,7 +77,7 @@ Brett Sperry 首先使用术语**实时策略**(**RTS**)作为宣传其游
为了覆盖较大的状态操作空间,解决方案库中将需要大量规则。 此外,没有探索策略可以找到最佳解决方案。 因此,由于所有前面提到的与实时策略游戏相关的问题和复杂性,这些传统的 AI 方法很难实现。
# 为什么要加强学习?
# 为什么要强化学习?
强化学习相对于其他 AI 方法脱颖而出的原因如下:
......@@ -95,7 +95,7 @@ Brett Sperry 首先使用术语**实时策略**(**RTS**)作为宣传其游
* 状态`S`
* 动作`A`
* 奖励`R`
* 过渡模型(如果基于策略,非策略学习不需要)
* 转移模型(如果基于策略,非策略学习不需要)
如果这些组件在接收来自给定游戏环境的信号时被学习代理上的传感器感知和处理,则可以成功应用强化学习算法。 传感器感知到的信号可以进行处理,以形成当前的环境状态,根据状态信息预测动作,并接收反馈,即在所采取动作的好坏之间进行奖励。 这将更新状态-动作对值,即根据收到的反馈加强其学习。
......
......@@ -87,7 +87,7 @@
由于使用了多种类型的传感器,所有这些信息的集成对于自动驾驶至关重要。 由于数据维数的差异,很难整合来自不同来源的感官输入。 例如,摄像机输入为高维,而 LIDAR 输入为低维。 提取相关信息并忽略不相关信息无疑会提高性能和准确率。 它降低了计算和存储能力的利用率。 因此,为了获取相关信息,注意模型适用于此目的,因为使用注意力机制的循环神经网络强化学习已成功应用于图像,从而仅关注相关部分。
# 为什么要加强学习?
# 为什么要强化学习?
我们已经讨论的一个重要原因是车辆操纵的可变性,无法以有监督的方式学习。 在本节中,我们将详细介绍为什么强化学习是自动驾驶的最佳选择。
......
......@@ -195,7 +195,7 @@ EIIE 通过**在线随机批量学习**(**OSBL**)进行训练,其中强化
![](img/30dd553d-c641-400c-ad76-588c5edf5a11.png)
创建了三个具有深度神经网络的三个不同变体的策略网络,分别是 CNN,RNN 和 LSTM。 前一个时间段的输出是当前时间段内网络的输入。 因此,使用策略梯度和深层 Q 网络中的经验重播的想法,创建了一个 PVM,用于存储网络输出,也就是说,它将包含每个时间步骤的投资组合权重向量。
创建了三个具有深度神经网络的三个不同变体的策略网络,分别是 CNN,RNN 和 LSTM。 前一个时间段的输出是当前时间段内网络的输入。 因此,使用策略梯度和深层 Q 网络中的经验回放的想法,创建了一个 PVM,用于存储网络输出,也就是说,它将包含每个时间步骤的投资组合权重向量。
PVM 是按时间步长顺序(即时间顺序)收集投资组合向量的集合。 在训练纪元的每个时间步`t`,策略网络从`t-1`的存储位置取最后时间段的投资组合权重向量![](img/ca7f8384-0365-47e5-8367-e72df668cd15.png),并进行覆盖`t`处的内存与输出投资组合权重向量![](img/ae0ed081-d2b6-4980-bda0-ab8224c0ed3f.png)的关系。 由于策略网络参数的收敛,PVM 中的值随着训练时期的增加而收敛。
......
......@@ -33,7 +33,7 @@
# 强化学习的演变
在本书中,我们涵盖了从基础到高级的强化学习领域中的大多数算法。 因此,这些章节是理解机器人领域中不同算法所面临的应用和挑战的前提。 早期强化学习算法通过首先获取状态动作值,然后从中得出策略来处理获取最佳策略的问题。 然后,策略迭代方法出现了,直接用于输出优化的策略。 探索开发技术有助于完善现有策略,探索新措施并更新现有策略。 强化学习方法,例如 MDP(在第 3 章,“马尔可夫决策过程”中),其中需要采用过渡模型的值迭代方法称为**基于模型的学习器**。 另一方面,诸如 Q 学习(在第 5 章,“Q 学习和深度 Q 网络”中)的算法不需要这种过渡模型,因此也不需要任何预定义的策略。 他们被称为**无模型的脱离策略学习器**
在本书中,我们涵盖了从基础到高级的强化学习领域中的大多数算法。 因此,这些章节是理解机器人领域中不同算法所面临的应用和挑战的前提。 早期强化学习算法通过首先获取状态动作值,然后从中得出策略来处理获取最佳策略的问题。 然后,策略迭代方法出现了,直接用于输出优化的策略。 探索利用技术有助于完善现有策略,探索新措施并更新现有策略。 强化学习方法,例如 MDP(在第 3 章,“马尔可夫决策过程”中),其中需要采用转移模型的值迭代方法称为**基于模型的学习器**。 另一方面,诸如 Q 学习(在第 5 章,“Q 学习和深度 Q 网络”中)的算法不需要这种转移模型,因此也不需要任何预定义的策略。 他们被称为**无模型的脱离策略学习器**
在深度强化学习领域,行动值函数逼近器和策略函数逼近器在制定最先进的学习算法集方面发挥着关键作用。 策略搜索算法(例如策略梯度)旨在通过最大化期望的奖励总和来找到最佳策略,而使用行动值函数近似器(例如深度 Q 网络)的算法旨在通过最大化期望的总和来找到给定状态的行动值 奖励。 但是,在处理由高维和连续状态动作空间构成的环境时,性能上的差异在于,这最能描述机器人在其中运行的真实环境。 在这种情况下,策略搜索算法的性能会更好,因为它们在连续状态操作空间域中可以更好地工作:
......@@ -137,7 +137,7 @@ Perkins 和 Barto(2002)提出了一种基于 Lyapunov 函数构造强化学
* 强化学习算法的成功很大程度上取决于奖励函数的质量,其对不同状态表示的覆盖范围以及与之相关的不确定性
* 先验领域知识的重要性是什么?
* 先验知识对于加强学习代理的准确率更好。
* 先验知识对于强化学习代理的准确率更好。
* 在尽可能少的情节中更好地学习所需的先验知识量尚不确定,并且尚待解决。 因此,重复大量的迭代以确保更好的学习。
* 在某些情况下,由于与环境相关的大量不确定性,先验知识可能无济于事。
* 我们如何根据感知数据仔细学习?
......
......@@ -242,7 +242,7 @@ DCN 在答案的开始位置创建概率分布,并在答案的结束位置创
* **完全匹配**:一个二进制值,指示模型输出的答案范围与地面真实答案范围具有精确的字符串匹配
* **F1 分数**:该值用于量化模型在预测答案范围和地面真实答案范围之间的单词重叠程度
根据原始的 DCN 框架,目标功能和评估指标是不连贯的,因此,对确切的匹配给予了极大的鼓励。 举例来说,有两个答案范围`A``B`,但它们都不与地面真实答案范围匹配,但是`A`具有完全匹配的字符串,而`B`没有字符串匹配。 然后,在这种情况下,尽管根据先前的完全匹配指标,`A`是正确的输出,但仅交叉熵损失的旧客观方法将同等地惩罚`A``B`和 F1 得分。
根据原始的 DCN 框架,目标函数和评估指标是不连贯的,因此,对确切的匹配给予了极大的鼓励。 举例来说,有两个答案范围`A``B`,但它们都不与地面真实答案范围匹配,但是`A`具有完全匹配的字符串,而`B`没有字符串匹配。 然后,在这种情况下,尽管根据先前的完全匹配指标,`A`是正确的输出,但仅交叉熵损失的旧客观方法将同等地惩罚`A``B`和 F1 得分。
如果我们检查 F1 分数,则`A`的量度显示单词在跨度`A`中重叠且具有真实答案范围,但答案`B`则不是这种情况。 因此,F1 分数与自关键策略梯度算法一起用作训练的奖励函数。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册