提交 bdeca57e 编写于 作者: W wizardforcel

2021-01-16 11:59:35

上级 d3d7a3fe
......@@ -12,11 +12,11 @@
# 本书涵盖的内容
[第 1 章](../Text/1.html)*单次学习简介*告诉我们什么是单次学习及其工作原理。 它还告诉我们有关人脑的工作原理以及它如何转换为机器学习。
第 1 章*单次学习简介*告诉我们什么是单次学习及其工作原理。 它还告诉我们有关人脑的工作原理以及它如何转换为机器学习。
[第 2 章](../Text/2.html)*基于度量的方法*通过将核心保持为基本的 k 最近邻,探索了使用不同形式的嵌入和评估度量的方法。
第 2 章*基于度量的方法*通过将核心保持为基本的 k 最近邻,探索了使用不同形式的嵌入和评估度量的方法。
[第 3 章](../Text/5.html)*基于模型的方法*探索了两种体系结构,其内部体系结构有助于训练 k-shot 学习模型。
第 3 章*基于模型的方法*探索了两种体系结构,其内部体系结构有助于训练 k-shot 学习模型。
*基于优化的方法*探索了各种形式的优化算法,即使数据量很少,它们也有助于提高准确性。
......
......@@ -114,7 +114,7 @@ MANN 的读取操作与 NTM 的读取操作非常相似,唯一的区别是此
顾名思义,元网络是基于模型的元学习方法的一种形式。 在通常的深度学习方法中,神经网络的权重是通过随机梯度下降来更新的,这需要大量的时间来训练。 众所周知,随机梯度下降法意味着我们将考虑每个训练数据点进行权重更新,因此,如果我们的批次大小为 1,这将导致模型优化非常缓慢-换句话说,**较慢的权重**更新。
元网络建议通过训练与原始神经网络并行的神经网络来预测目标任务的参数,从而解决权重缓慢的问题。 生成的权重称为**快速权重** *。* 如果您还记得的话,LSTM 元学习器(请参阅[第 4 章](../Text/4.html)*基于优化的方法*)也是基于类似的基础来预测使用 LSTM 单元的任务的参数更新 。
元网络建议通过训练与原始神经网络并行的神经网络来预测目标任务的参数,从而解决权重缓慢的问题。 生成的权重称为**快速权重** *。* 如果您还记得的话,LSTM 元学习器(请参阅第 4 章*基于优化的方法*)也是基于类似的基础来预测使用 LSTM 单元的任务的参数更新 。
与其他元学习方法类似,元网络包含两个级别:
......
......@@ -59,7 +59,7 @@
这种方法接近一次学习,因为我们期望创建的机器学习模型应该能够从一些示例中学习分布。
要了解有关度量形式的更多信息,请参阅[第 2 章](../Text/2.html)*基于度量的方法*
要了解有关度量形式的更多信息,请参阅第 2 章*基于度量的方法*
# 元学习
......
......@@ -4,4 +4,4 @@
本节包括以下章节:
* [第 1 章](../Text/1.html)*单次学习简介*
\ No newline at end of file
* 第 1 章和*单次学习简介*
\ No newline at end of file
......@@ -4,6 +4,6 @@
本节包括以下章节:
* [第 2 章](../Text/2.html)*基于度量的方法*
* [第 3 章](../Text/3.html)*基于模型的方法*
* [第 4 章](../Text/4.html)*基于优化的方法*
\ No newline at end of file
* 第 2 章和*基于度量的方法*
* 第 3 章和*基于模型的方法*
* 第 4 章和*基于优化的方法*
\ No newline at end of file
......@@ -4,5 +4,5 @@
本节包括以下章节:
* [第 5 章](../Text/5.html)*基于生成建模的方法*
* [第 6 章](../Text/6.html)*结论和其他方法*
\ No newline at end of file
* 第 5 章和*基于生成建模的方法*
* 第 6 章,*结论和其他方法*
\ No newline at end of file
......@@ -12,21 +12,21 @@
# 本书涵盖的内容
[第 1 章](../Text/1.html)*使用 PyTorch 处理张量*介绍 PyTorch 及其安装,然后继续使用 PyTorch 处理张量。
第 1 章*使用 PyTorch 处理张量*介绍 PyTorch 及其安装,然后继续使用 PyTorch 处理张量。
[第 2 章](../Text/2.html)*处理神经网络*全面介绍了开始和训练全连接神经网络的所有要求,从而对基本神经网络的所有组件进行了详尽的解释。 :层,前馈网络,反向传播,损失函数,梯度,权重更新以及使用 CPU / GPU。
第 2 章*处理神经网络*全面介绍了开始和训练全连接神经网络的所有要求,从而对基本神经网络的所有组件进行了详尽的解释。 :层,前馈网络,反向传播,损失函数,梯度,权重更新以及使用 CPU / GPU。
[第 3 章](../Text/3.html)*用于计算机视觉的卷积神经网络*首先介绍了用于更高级任务的一类神经网络,即卷积神经网络。 在这里,我们将与 PyTorch 一起探索 TorchVision,训练 CNN 模型,并使用 TensorBoard 可视化其进度。 我们还将介绍与卷积网络构建块相关的各种任务。 卷积神经网络(CNN 或 ConvNet)是一类 DNN,最常用于分析图像。
第 3 章*用于计算机视觉的卷积神经网络*首先介绍了用于更高级任务的一类神经网络,即卷积神经网络。 在这里,我们将与 PyTorch 一起探索 TorchVision,训练 CNN 模型,并使用 TensorBoard 可视化其进度。 我们还将介绍与卷积网络构建块相关的各种任务。 卷积神经网络(CNN 或 ConvNet)是一类 DNN,最常用于分析图像。
[第 4 章](../Text/4.html)*用于 NLP 的循环神经网络*探索循环神经网络,并研究 RNN 中的各种修改以及最佳实践。
第 4 章*用于 NLP 的循环神经网络*探索循环神经网络,并研究 RNN 中的各种修改以及最佳实践。
[第 5 章](../Text/5.html)*转移学习和 TensorBoard* 显示了如何使用经过训练的 ResNet-50 模型训练图像分类器以区分正常和肺炎的胸部 X 射线。 我们将替换分类器,并使用两个输出单位来代表正常和肺炎类别。
第 5 章*转移学习和 TensorBoard* 显示了如何使用经过训练的 ResNet-50 模型训练图像分类器以区分正常和肺炎的胸部 X 射线。 我们将替换分类器,并使用两个输出单位来代表正常和肺炎类别。
[第 6 章](../Text/6.html)*探索生成对抗网络*探索生成对抗网络,以及如何实现 PyTorch 的组件并训练端到端网络。 我们将探索 DCGAN,并通过渐进式 GAN 网络进一步改善 DCGAN 的局限性。
第 6 章*探索生成对抗网络*探索生成对抗网络,以及如何实现 PyTorch 的组件并训练端到端网络。 我们将探索 DCGAN,并通过渐进式 GAN 网络进一步改善 DCGAN 的局限性。
[第 7 章](../Text/7.html)*深度强化学习*可帮助您通过各种食谱来了解深度 RL。 本章是一系列食谱和任务,您将在其中利用所需的能力和体系结构来转变为深度强化学习专家。
第 7 章*深度强化学习*可帮助您通过各种食谱来了解深度 RL。 本章是一系列食谱和任务,您将在其中利用所需的能力和体系结构来转变为深度强化学习专家。
[第 8 章](../Text/8.html)*在 PyTorch* 中生产 AI 模型,着眼于以两种方式生产 PyTorch 应用程序。 首先,生成已经训练过的模型,其次,对大型数据集进行分布式训练。 最后,我们将研究各种框架之间的可移植性。
第 8 章*在 PyTorch* 中生产 AI 模型,着眼于以两种方式生产 PyTorch 应用程序。 首先,生成已经训练过的模型,其次,对大型数据集进行分布式训练。 最后,我们将研究各种框架之间的可移植性。
# 充分利用这本书
......
......@@ -603,7 +603,7 @@ pip install torchvision==0.x.x
# 定义 CNN 架构
到目前为止,在本章中,我们一直在研究 CNN 的不同组成部分,以及如何将数据集中的数据加载到可以馈入 CNN 模型的格式中。 在本食谱中,我们将通过到目前为止已经看到的完成模型的组件来定义 CNN 模型架构。 这与我们在[第 2 章](../Text/2.html)*处理神经网络*中介绍的全连接神经网络非常相似。 为了更好地理解此配方,从[第 2 章](../Text/2.html)*处理神经网络*修改全连接神经网络的模型定义将是一个好主意。 我们将在 CIFAR10 数据集上建立图像分类模型,我们在*加载图像数据*配方中对此进行了讨论。
到目前为止,在本章中,我们一直在研究 CNN 的不同组成部分,以及如何将数据集中的数据加载到可以馈入 CNN 模型的格式中。 在本食谱中,我们将通过到目前为止已经看到的完成模型的组件来定义 CNN 模型架构。 这与我们在第 2 章,*处理神经网络*中介绍的全连接神经网络非常相似。 为了更好地理解此配方,从第 2 章*处理神经网络*修改全连接神经网络的模型定义将是一个好主意。 我们将在 CIFAR10 数据集上建立图像分类模型,我们在*加载图像数据*配方中对此进行了讨论。
# 怎么做...
......@@ -676,7 +676,7 @@ CNN(
# 这个怎么运作...
此食谱的工作方式与[第 2 章](../Text/2.html)*处理神经网络*时非常相似,当我们研究一个全连接神经网络时。 我们从`__init__()`方法和父类的构造函数开始,定义了从 PyTorch 中的`nn.Module`继承的 CNN 类。 之后,我们通过传入与每一层相关的参数来定义 CNN 中的各个层。 对于我们的第一卷积层,输入通道的数量为 3(RGB),输出通道的数量定义为 16,其平方核大小为 3。第二卷积层采用上一层的张量,并具有 16 个输入通道和 32 个输出通道,内核尺寸为 3 x3。类似地,第三卷积层具有 32 个输入通道和 64 个输出通道,内核尺寸为 3 x 3。 我们还需要一个最大池化层,并使用 2 的内核大小和 2 的步幅。我们使用`.view()`将张量的三个维度展平为一个维度,以便可以将其传递到全连接网络中。 `view`函数中的-1 通过确保`view`函数之前和之后的元素数量保持相同(在本例中为批量大小)来确保将正确的尺寸自动分配给该尺寸。
此食谱的工作方式与第 2 章*处理神经网络*时非常相似,当我们研究一个全连接神经网络时。 我们从`__init__()`方法和父类的构造函数开始,定义了从 PyTorch 中的`nn.Module`继承的 CNN 类。 之后,我们通过传入与每一层相关的参数来定义 CNN 中的各个层。 对于我们的第一卷积层,输入通道的数量为 3(RGB),输出通道的数量定义为 16,其平方核大小为 3。第二卷积层采用上一层的张量,并具有 16 个输入通道和 32 个输出通道,内核尺寸为 3 x3。类似地,第三卷积层具有 32 个输入通道和 64 个输出通道,内核尺寸为 3 x 3。 我们还需要一个最大池化层,并使用 2 的内核大小和 2 的步幅。我们使用`.view()`将张量的三个维度展平为一个维度,以便可以将其传递到全连接网络中。 `view`函数中的-1 通过确保`view`函数之前和之后的元素数量保持相同(在本例中为批量大小)来确保将正确的尺寸自动分配给该尺寸。
对于第一个全连接层,我们有 1,024 个输入(通过将最大池后的`64 x 4 x 4`张量展平而获得)和 512 个输出。 对于最后一个全连接层,我们有 512 个输入和 10 个输出,代表输出类别的数量。 我们还为全连接层定义了一个辍学层,概率为 0.3。
......@@ -694,7 +694,7 @@ CNN(
# 训练图像分类器
现在我们已经定义了模型,接下来的主要步骤是使用手头的数据训练该模型。 这将与我们在[第 2 章](../Text/2.html)*处理神经网络*和我们全连接神经网络中进行的训练非常相似。 在本食谱中,我们将完成训练图像分类器的工作。 如果您在完成本食谱之前,先阅读了[第 2 章](../Text/2.html)*与神经网络**实现优化器*食谱,那将非常有用。
现在我们已经定义了模型,接下来的主要步骤是使用手头的数据训练该模型。 这将与我们在第 2 章,*处理神经网络*和我们全连接神经网络中进行的训练非常相似。 在本食谱中,我们将完成训练图像分类器的工作。 如果您在完成本食谱之前,先阅读了第 2 章*与神经网络**实现优化器*食谱,那将非常有用。
# 怎么做...
......
......@@ -472,7 +472,7 @@ return self.fc(hidden)
# 还有更多...
对于具有两个以上状态的毒性审查任务,我们将使用`CrossEntropyLoss()`,对于仅具有一个输出的情感分析器,我们将使用`BCEWithLogitsLoss()`。 其余训练与我们在[第 3 章](../Text/3.html)*用于计算机视觉的卷积神经网络*中看到的内容相同,我们在其中训练了卷积神经网络。
对于具有两个以上状态的毒性审查任务,我们将使用`CrossEntropyLoss()`,对于仅具有一个输出的情感分析器,我们将使用`BCEWithLogitsLoss()`。 其余训练与我们在第 3 章*用于计算机视觉的卷积神经网络*中看到的内容相同,我们在其中训练了卷积神经网络。
# 也可以看看
......
......@@ -34,7 +34,7 @@ GAN 中的两个模型称为生成器和鉴别器,其中生成器负责创建
# 创建一个 DCGAN 生成器
在本食谱及其后续食谱中,我们将实现 DCGAN。 DCGAN 代表“深度卷积 GAN”; 与香草 GAN 相比,它们有很大的改进。 在 DCGAN 中,我们使用卷积神经网络,而不是香草 GAN 中的全连接网络。 在[第 3 章](../Text/3.html)*用于计算机视觉的卷积神经网络*中,我们看到了[第 2 章](../Text/2.html)*的全连接分类器如何处理神经网络* ,是该领域的一项改进; DCGAN 与香草 GAN 的情况相同。 在 DCGAN 中,我们将使用批量归一化,这是一种技术,它可以将作为输入输入到下一层的层的输出归一化。 批量归一化允许网络的每一层独立于其他层进行学习,从而减少了协变量偏移。
在本食谱及其后续食谱中,我们将实现 DCGAN。 DCGAN 代表“深度卷积 GAN”; 与香草 GAN 相比,它们有很大的改进。 在 DCGAN 中,我们使用卷积神经网络,而不是香草 GAN 中的全连接网络。 在第 3 章和*用于计算机视觉的卷积神经网络*中,我们看到了第 2 章*的全连接分类器如何处理神经网络* ,是该领域的一项改进; DCGAN 与香草 GAN 的情况相同。 在 DCGAN 中,我们将使用批量归一化,这是一种技术,它可以将作为输入输入到下一层的层的输出归一化。 批量归一化允许网络的每一层独立于其他层进行学习,从而减少了协变量偏移。
批量归一化是通过缩放来实现的,以使平均值为 0,方差为 1。在此配方中,我们将生成类似于 MNIST 数据集的手写数字,其中包含来自噪声矢量的数据。 我们将扩展此噪声矢量,将其转换为 2D 矩阵,最后将其转换为 28 x 28 黑白图像。 为了增加高度和宽度,我们必须执行与卷积操作相反的操作,这称为反卷积。 我们将在使用卷积执行分类任务时执行此操作。 在执行反卷积时,我们将增加高度和宽度,同时减少通道数。
......@@ -42,7 +42,7 @@ GAN 中的两个模型称为生成器和鉴别器,其中生成器负责创建
![](img/89189246-b3a7-49dc-acc5-78bc00c5f9b7.png)
请注意,我们将使用[第 3 章](https://cdp.packtpub.com/pytorch_1_0_artificial_intelligence_cookbook/wp-admin/post.php?post=27&action=edit#post_29)*用于计算机视觉的卷积神经网络* *和*中的概念,因此再次阅读这些食谱将非常有用。
请注意,我们将使用第 3 章*用于计算机视觉的卷积神经网络* *和*中的概念,因此再次阅读这些食谱将非常有用。
# 怎么做...
......@@ -114,7 +114,7 @@ def forward(self, input):
# 这个怎么运作...
在此食谱中,我们进行了变换以将图像转换为张量并对其进行归一化,就像在[第 3 章](https://cdp.packtpub.com/pytorch_1_0_artificial_intelligence_cookbook/wp-admin/post.php?post=27&action=edit#post_29)*用于计算机视觉的卷积神经网络*中所做的一样。 然后,我们确定了机器上的设备:CPU 或 GPU。 然后,我们定义了从`nn.Module`类继承的`Generator_model`类,就像在所有以前的体系结构中所做的一样。
在此食谱中,我们进行了变换以将图像转换为张量并对其进行归一化,就像在第 3 章*用于计算机视觉的卷积神经网络*中所做的一样。 然后,我们确定了机器上的设备:CPU 或 GPU。 然后,我们定义了从`nn.Module`类继承的`Generator_model`类,就像在所有以前的体系结构中所做的一样。
在构造函数中,我们传递了`z_dim`参数,这是我们的噪声矢量大小。 然后,我们定义了一个全连接单元`self.fc`,我们将噪声矢量传递给该单元,并为其提供了`256 * 7 * 7`输出。 然后,我们定义了一个称为`self.gen``nn.Sequential`单元,其中包含用于定义生成器的关键组件。 我们使用 PyTorch 中提供的`nn.ConvTranspose2d``nn.BatchNorm2d``nn.LeakyReLU`使用一组反卷积,批处理规范化和激活层。 `ConvTranspose2d`接受输入通道,输出通道,内核大小,步幅和填充等参数。 `BatchNorm2d`接受上一层的要素/通道数作为其参数,而 LeakyReLU 接受负斜率的角度。
......@@ -136,7 +136,7 @@ def forward(self, input):
# 准备好
在本食谱中,我们将严重依赖[第 3 章](https://cdp.packtpub.com/pytorch_1_0_artificial_intelligence_cookbook/wp-admin/post.php?post=27&action=edit#post_29)*用于计算机视觉的卷积神经网络*的食谱,因此最好快速浏览 [第 3 章](https://cdp.packtpub.com/pytorch_1_0_artificial_intelligence_cookbook/wp-admin/post.php?post=27&action=edit#post_29)*用于计算机视觉的卷积神经网络*
在本食谱中,我们将严重依赖第 3 章和*用于计算机视觉的卷积神经网络*的食谱,因此最好快速浏览 第 3 章*用于计算机视觉的卷积神经网络*
# 怎么做...
......
......@@ -440,7 +440,7 @@ pip install onnx
这样,我们就可以进行配方了。
对于此配方,我们还将需要在[第 3 章](../Text/3.html)*用于计算机视觉的卷积神经网络*中在`CIFAR-10`上训练的模型的训练权重。
对于此配方,我们还将需要在第 3 章*用于计算机视觉的卷积神经网络*中在`CIFAR-10`上训练的模型的训练权重。
# 怎么做...
......@@ -571,7 +571,7 @@ CNN(
# 这个怎么运作...
在此食谱中,我们将正常的 PyTorch 模型导出为 ONNX 格式,并使用 ONNX 运行时运行`onnx`模型。 为此,我们采用了权重模型。 在这里,我们使用了[第 3 章](https://cdp.packtpub.com/pytorch_1_0_artificial_intelligence_cookbook/wp-admin/post.php?post=31&action=edit#post_29)*卷积神经网络的 CIFAR-10 模型,用于计算机视觉*。 我们从训练中使用了模型的权重,并将模型设置为评估模式,以进行快速,轻便的计算。
在此食谱中,我们将正常的 PyTorch 模型导出为 ONNX 格式,并使用 ONNX 运行时运行`onnx`模型。 为此,我们采用了权重模型。 在这里,我们使用了第 3 章*卷积神经网络的 CIFAR-10 模型,用于计算机视觉*。 我们从训练中使用了模型的权重,并将模型设置为评估模式,以进行快速,轻便的计算。
然后,我们使用了一个随机变量,其形状与输入张量的形状相同,在本例中为三通道 32 x 32 像素图像。 我们将此随机输入传递到模型中并获得输出。 然后,我们使用输出将其与模型的 ONNX 版本中的模型进行比较。
......
......@@ -8,21 +8,21 @@
## 这本书涵盖的内容
[第 1 章](../Text/1.html "Chapter 1\. Deep Learning Walkthrough and PyTorch Introduction")*深度学习演练和 PyTorch 简介*是对 PyTorch 进行深度学习的方式以及 PyTorch 的基本 API 的介绍。 它首先显示了 PyTorch 的历史以及为什么 PyTorch 应该成为深度学习开发的必备框架。 它还介绍了不同的深度学习方法,我们将在接下来的章节中介绍这些方法。
第 1 章*深度学习演练和 PyTorch 简介*是对 PyTorch 进行深度学习的方式以及 PyTorch 的基本 API 的介绍。 它首先显示了 PyTorch 的历史以及为什么 PyTorch 应该成为深度学习开发的必备框架。 它还介绍了不同的深度学习方法,我们将在接下来的章节中介绍这些方法。
[第 2 章](../Text/2.html "Chapter 2\. A Simple Neural Network")*一个简单的神经网络*可帮助您构建第一个简单的神经网络,并展示如何连接神经网络,优化器和参数更新之类的点点滴滴来构建一个 新手深度学习模型。 它还介绍了 PyTorch 如何进行反向传播,这是所有最新的深度学习算法的关键。
第 2 章*一个简单的神经网络*可帮助您构建第一个简单的神经网络,并展示如何连接神经网络,优化器和参数更新之类的点点滴滴来构建一个 新手深度学习模型。 它还介绍了 PyTorch 如何进行反向传播,这是所有最新的深度学习算法的关键。
[第 3 章](../Text/3.html "Chapter 3\. Deep Learning Workflow")*深度学习工作流程*深入研究了深度学习工作流程的实现和有助于构建工作流程的 PyTorch 生态系统。 如果您打算为即将进行的项目建立深度学习团队或开发渠道,那么这可能是最关键的一章。 在本章中,我们将遍历深度学习管道的不同阶段,并了解 PyTorch 社区如何通过制作适当的工具在工作流程的每个阶段中不断改进。
第 3 章*深度学习工作流程*深入研究了深度学习工作流程的实现和有助于构建工作流程的 PyTorch 生态系统。 如果您打算为即将进行的项目建立深度学习团队或开发渠道,那么这可能是最关键的一章。 在本章中,我们将遍历深度学习管道的不同阶段,并了解 PyTorch 社区如何通过制作适当的工具在工作流程的每个阶段中不断改进。
[第 4 章](../Text/4.html "Chapter 4\. Computer Vision")*计算机视觉*是迄今为止深度学习最成功的结果,它讨论了成功背后的关键思想,并贯穿了使用最广泛的视觉算法– **卷积神经网络(CNN)**。 我们将逐步实现 CNN 以了解其工作原理,然后使用 PyTorch 的 nn 包中预定义的 CNN。 本章可帮助您制作简单的 CNN 和基于高级 CNN 的视觉算法,称为语义分割。
第 4 章*计算机视觉*是迄今为止深度学习最成功的结果,它讨论了成功背后的关键思想,并贯穿了使用最广泛的视觉算法– **卷积神经网络(CNN)**。 我们将逐步实现 CNN 以了解其工作原理,然后使用 PyTorch 的 nn 包中预定义的 CNN。 本章可帮助您制作简单的 CNN 和基于高级 CNN 的视觉算法,称为语义分割。
[第 5 章](../Text/5.html "Chapter 5\. Sequential Data Processing")*顺序数据处理*着眼于循环神经网络,它是目前最成功的顺序数据处理算法。 本章向您介绍主要的 RNN 组件,例如**长短期内存****LSTM**)网络和**门控循环单元****GRU**)。 然后,在探索循环神经网络之前,我们将经历 RNN 实现中的算法更改,例如双向 RNN,并增加层数。 为了理解递归网络,我们将使用斯坦福大学 NLP 小组的著名示例(堆栈增强的解析器-解释器神经网络(SPINN)),并将其在 PyTorch 中实现。
第 5 章*顺序数据处理*着眼于循环神经网络,它是目前最成功的顺序数据处理算法。 本章向您介绍主要的 RNN 组件,例如**长短期内存****LSTM**)网络和**门控循环单元****GRU**)。 然后,在探索循环神经网络之前,我们将经历 RNN 实现中的算法更改,例如双向 RNN,并增加层数。 为了理解递归网络,我们将使用斯坦福大学 NLP 小组的著名示例(堆栈增强的解析器-解释器神经网络(SPINN)),并将其在 PyTorch 中实现。
[第 6 章](../Text/6.html "Chapter 6\. Generative Networks")*生成网络,*简要讨论了生成网络的历史,然后解释了各种生成网络。 在这些不同的类别中,本章向我们介绍了自回归模型和 GAN。 我们将研究作为自动回归模型一部分的 PixelCNN 和 WaveNet 的实现细节,然后详细研究 GAN。
第 6 章*生成网络,*简要讨论了生成网络的历史,然后解释了各种生成网络。 在这些不同的类别中,本章向我们介绍了自回归模型和 GAN。 我们将研究作为自动回归模型一部分的 PixelCNN 和 WaveNet 的实现细节,然后详细研究 GAN。
[第 7 章](../Text/7.html "Chapter 7\. Reinforcement Learning")*强化学习*介绍了强化学习的概念,它实际上并不是深度学习的子类。 我们首先来看定义问题陈述。 然后,我们将探讨累积奖励的概念。 我们将探索 Markov 决策过程和 Bellman 方程,然后转向深层 Q 学习。 我们还将看到由 OpenAI 开发的工具包 Gym 的介绍,该工具包用于开发和尝试强化学习算法。
第 7 章*强化学习*介绍了强化学习的概念,它实际上并不是深度学习的子类。 我们首先来看定义问题陈述。 然后,我们将探讨累积奖励的概念。 我们将探索 Markov 决策过程和 Bellman 方程,然后转向深层 Q 学习。 我们还将看到由 OpenAI 开发的工具包 Gym 的介绍,该工具包用于开发和尝试强化学习算法。
[第 8 章](../Text/8.html "Chapter 8\. PyTorch to Production")*PyTorch 到生产*着眼于在将深度学习模型部署到生产过程中人们甚至是深度学习专家所面临的困难。 我们将探索用于生产部署的不同选项,包括使用围绕 PyTorch 的 Flask 包装器以及使用 RedisAI,RedisAI 是高度优化的运行时,用于在多集群环境中部署模型,并且每秒可以处理数百万个请求。
第 8 章*PyTorch 到生产*着眼于在将深度学习模型部署到生产过程中人们甚至是深度学习专家所面临的困难。 我们将探索用于生产部署的不同选项,包括使用围绕 PyTorch 的 Flask 包装器以及使用 RedisAI,RedisAI 是高度优化的运行时,用于在多集群环境中部署模型,并且每秒可以处理数百万个请求。
## 要充分利用这本书
......
......@@ -198,7 +198,7 @@ for epoch in range(epochs):
在 PyTorch 代码中,输入变量定义未创建占位符。 而是将变量对象包装到您的输入上。 图形定义不会执行一次; 相反,它在循环内,并且每次迭代都在构建图形。 您在每个图实例之间共享的唯一信息是您要优化的权重矩阵。
在这种方法中,如果您在遍历数据时改变了数据大小或形状,则在图形中运行新形状的数据绝对好,因为新创建的图形可以接受新形状。 可能性不止于此。 如果要动态更改图形的行为,也可以这样做。 在[第 5 章](../Text/5.html "Chapter 5\. Sequential Data Processing")*顺序数据处理,*中的循环神经网络会话中给出的示例均基于此思想。
在这种方法中,如果您在遍历数据时改变了数据大小或形状,则在图形中运行新形状的数据绝对好,因为新创建的图形可以接受新形状。 可能性不止于此。 如果要动态更改图形的行为,也可以这样做。 在第 5 章*顺序数据处理,*中的循环神经网络会话中给出的示例均基于此思想。
## 探索深度学习
......@@ -256,7 +256,7 @@ for epoch in range(epochs):
如果您能够训练一个可以做到这一点的神经网络,那么 voilà,您将找到一个很好的压缩算法,可以将高维输入以一个数量级的幅度传输到低维向量 获得。
如今,自动编码器被用于不同的情况和行业。 当我们讨论语义分割时,您将在[第 4 章](../Text/4.html "Chapter 4\. Computer Vision")*计算机视觉*中看到类似的体系结构。
如今,自动编码器被用于不同的情况和行业。 当我们讨论语义分割时,您将在第 4 章*计算机视觉*中看到类似的体系结构。
![Encoders and decoders](img/B09475_01_12.jpg)
......@@ -274,7 +274,7 @@ RNN 是最常见的深度学习算法之一,它们席卷全球。 我们现在
顾名思义,循环神经网络是树状网络,用于了解序列数据的层次结构。 递归网络已在**自然语言处理**应用程序中大量使用,尤其是 Salesforce 首席科学家 Richard Socher 及其团队。
词向量,我们将在[第 5 章](../Text/5.html "Chapter 5\. Sequential Data Processing")*顺序数据处理*中很快看到,它们能够将词的含义有效地映射到向量空间中,但是涉及到含义 在整个句子中,没有像 word2vec 这样的单词适合的解决方案。 循环神经网络是此类应用最常用的算法之一。 递归网络可以创建一个解析树和组成向量,并映射其他层次关系,这反过来又帮助我们找到了结合单词和句子的规则。 **斯坦福自然语言推断**小组发现了一种著名的且使用良好的算法,称为 **SNLI** ,这是递归网络使用的一个很好的例子。
词向量,我们将在第 5 章*顺序数据处理*中很快看到,它们能够将词的含义有效地映射到向量空间中,但是涉及到含义 在整个句子中,没有像 word2vec 这样的单词适合的解决方案。 循环神经网络是此类应用最常用的算法之一。 递归网络可以创建一个解析树和组成向量,并映射其他层次关系,这反过来又帮助我们找到了结合单词和句子的规则。 **斯坦福自然语言推断**小组发现了一种著名的且使用良好的算法,称为 **SNLI** ,这是递归网络使用的一个很好的例子。
![Recursive neural networks](img/B09475_01_14.jpg)
......@@ -482,7 +482,7 @@ PyTorch 具有称为`unsqueeze`的防挤压操作,该操作会为张量对象
普通的 Python 数据结构是可以保存数据和元数据的单层内存对象。 但是 PyTorch 数据结构是分层设计的,这使得该框架不仅可以互操作而且还可以提高内存效率。 PyTorch 核心的计算密集型部分已通过 ATen 和 Caffe2 库迁移到了 C / C ++后端,而不是将其保留在 Python 本身中,以便提高速度。
即使将 PyTorch 创建为研究框架,也已将其转换为面向研究但可用于生产的框架。 通过引入两种执行类型,可以解决多用例需求所带来的折衷。 我们将在[第 8 章](../Text/8.html "Chapter 8\. PyTorch to Production")*PyTorch 投入生产*中看到更多相关信息,我们将在其中讨论如何将 PyTorch 投入生产。
即使将 PyTorch 创建为研究框架,也已将其转换为面向研究但可用于生产的框架。 通过引入两种执行类型,可以解决多用例需求所带来的折衷。 我们将在第 8 章*PyTorch 投入生产*中看到更多相关信息,我们将在其中讨论如何将 PyTorch 投入生产。
C / C ++后端中设计的自定义数据结构已分为不同的层。 为简单起见,我们将省略 CUDA 数据结构,而将重点放在简单的 CPU 数据结构上。 PyTorch 中的面向用户的主要数据结构是`THTensor`对象,它保存有关尺寸,偏移,步幅等信息。 但是,`THTensor`存储的另一个主要信息是指向`THStorage`对象的指针,该对象是为存储而保存的张量对象的内部层。
......
......@@ -22,7 +22,7 @@
建立数据管道与网络的体系结构一样重要,尤其是在实时训练网络时。 从野外获得的数据永远不会干净,在将其扔到网络之前,您必须对其进行处理。 例如,如果我们要收集数据以预测某人是否购买产品,那么最终将出现异常值。 离群值可以是任何种类且不可预测的。 例如,某人可能不小心下了订单,或者他们可以访问后来下订单的朋友,依此类推。
从理论上讲,深度神经网络非常适合从数据集中查找模式和解,因为它们应该模仿人的大脑。 但是,实际上,情况并非总是如此。 如果您的数据干净且格式正确,您的网络将能够通过找到模式来轻松解决问题。 PyTorch 开箱即用地提供了数据预处理包装器,我们将在[第 3 章](../Text/3.html "Chapter 3\. Deep Learning Workflow")*深度学习工作流程*中进行讨论。 除此之外,我们将讨论如何格式化或清除数据集。
从理论上讲,深度神经网络非常适合从数据集中查找模式和解,因为它们应该模仿人的大脑。 但是,实际上,情况并非总是如此。 如果您的数据干净且格式正确,您的网络将能够通过找到模式来轻松解决问题。 PyTorch 开箱即用地提供了数据预处理包装器,我们将在第 3 章*深度学习工作流程*中进行讨论。 除此之外,我们将讨论如何格式化或清除数据集。
为简单起见,我们将使用一些简单的函数来生成数据。 让我们开始为 *FizzBu​​zz* 模型构建简单的数据集。 当我们的模型得到一个数字时,它应该预测下一个输出,就好像是在玩游戏的人一样。 例如,如果输入为三,则模型应预测下一个数字为四。 如果输入为八,则模型应显示“嘶嘶声”,因为九可以被三整除。
......@@ -60,7 +60,7 @@ def get_numpy_data(input_size=10, limit=1000):
return training_test_gen(np.array(x), np.array(y))
```
编码器功能将输入编码为二进制数,从而使神经网络易于学习。 将数值直接传递到神经网络会对网络施加更多约束。 不要担心最后一行中的`training_test_gen`功能; 我们将在[第 3 章](../Text/3.html "Chapter 3\. Deep Learning Workflow")*深度学习工作流程*中进行更多讨论。 现在,请记住,它将数据集拆分为训练和测试集,并将其作为 NumPy 数组返回。
编码器功能将输入编码为二进制数,从而使神经网络易于学习。 将数值直接传递到神经网络会对网络施加更多约束。 不要担心最后一行中的`training_test_gen`功能; 我们将在第 3 章*深度学习工作流程*中进行更多讨论。 现在,请记住,它将数据集拆分为训练和测试集,并将其作为 NumPy 数组返回。
利用到目前为止我们拥有的关于数据集的信息,我们可以按以下方式构建网络:
......@@ -222,7 +222,7 @@ for epoch in range(epochs):
b2 -= lr * b2.grad
```
前面的代码段与在[第 1 章](../Text/1.html "Chapter 1\. Deep Learning Walkthrough and PyTorch Introduction")*深度学习演练和 PyTorch 简介*中看到的相同,其中解释了静态和动态计算图,但在这里我们来看一下 从另一个角度看代码:模型说明。 它从循环遍历每个时期的批处理开始,并使用我们正在构建的模型处理每个批处理。 与基于静态计算图的框架不同,我们尚未构建图。 我们刚刚定义了超参数,并根据我们的数据制作了张量。
前面的代码段与在第 1 章*深度学习演练和 PyTorch 简介*中看到的相同,其中解释了静态和动态计算图,但在这里我们来看一下 从另一个角度看代码:模型说明。 它从循环遍历每个时期的批处理开始,并使用我们正在构建的模型处理每个批处理。 与基于静态计算图的框架不同,我们尚未构建图。 我们刚刚定义了超参数,并根据我们的数据制作了张量。
##### 建立图表
......
......@@ -12,7 +12,7 @@ PyTorch 最初是由 Facebook 实习生作为研究框架开始的,现已发
先前的深度学习工作流程几乎等同于业内几乎每个人所实现的工作流程,即使对于高度复杂的实现,也略有不同。 本章简要说明了第一和最后一个阶段,并进入了中间三个阶段的核心,即设计和实验,模型实现以及培训和验证。
工作流的最后阶段通常是人们很费劲的,尤其是在应用程序规模很大的情况下。 之前我曾提到,尽管 PyTorch 是作为面向研究的框架构建的,但是社区设法将 Caffe2 集成到 PyTorch 的后端,这为 Facebook 使用的数千种模型提供了支持。 因此,在[第 8 章](../Text/8.html "Chapter 8\. PyTorch to Production")*PyTorch 到生产*中详细讨论了将模型交付生产的过程,并举例说明了如何使用 ONNX,PyTorch JIT 等来展示如何交付用于服务的 PyTorch 模型 数百万个请求,以及将模型迁移到单板计算机和移动设备。
工作流的最后阶段通常是人们很费劲的,尤其是在应用程序规模很大的情况下。 之前我曾提到,尽管 PyTorch 是作为面向研究的框架构建的,但是社区设法将 Caffe2 集成到 PyTorch 的后端,这为 Facebook 使用的数千种模型提供了支持。 因此,在第 8 章*PyTorch 到生产*中详细讨论了将模型交付生产的过程,并举例说明了如何使用 ONNX,PyTorch JIT 等来展示如何交付用于服务的 PyTorch 模型 数百万个请求,以及将模型迁移到单板计算机和移动设备。
## 构思和计划
......@@ -30,7 +30,7 @@ PyTorch 最初是由 Facebook 实习生作为研究框架开始的,现已发
不同类型的深度学习问题需要不同类型的数据集,并且每种类型的可能需要不同类型的预处理,具体取决于我们使用的神经网络架构。 这是深度学习管道构建中的核心问题之一。
尽管社区已经免费提供了用于不同任务的数据集,但是编写预处理脚本几乎总是很痛苦。 PyTorch 通过提供抽象类来编写自定义数据集和数据加载器来解决此问题。 这里给出的示例是一个简单的`dataset`类,用于加载我们在[第 2 章](../Text/2.html "Chapter 2\. A Simple Neural Network")*一个简单神经网络*中使用的`fizzbuzz`数据集,但是将其扩展为可以处理任何类型的数据集 非常简单。 PyTorch 的官方文档使用类似的方法对图像数据集进行预处理,然后再将其传递给复杂的**卷积神经网络****CNN**)体系结构。
尽管社区已经免费提供了用于不同任务的数据集,但是编写预处理脚本几乎总是很痛苦。 PyTorch 通过提供抽象类来编写自定义数据集和数据加载器来解决此问题。 这里给出的示例是一个简单的`dataset`类,用于加载我们在第 2 章*一个简单神经网络*中使用的`fizzbuzz`数据集,但是将其扩展为可以处理任何类型的数据集 非常简单。 PyTorch 的官方文档使用类似的方法对图像数据集进行预处理,然后再将其传递给复杂的**卷积神经网络****CNN**)体系结构。
PyTorch 中的`dataset`类是高级抽象,可处理数据加载程序几乎需要的所有内容。 用户定义的自定义`dataset`类需要覆盖父类的`__len__`函数和`__getitem__`函数,其中数据加载程序正在使用`__len__`来确定数据集的长度,而`__getitem__` 数据加载器正在使用该物品来获取物品。 `__getitem__`函数希望用户将索引作为参数传递,并获取驻留在该索引上的项目:
......@@ -464,7 +464,7 @@ python -m torch.utils.bottleneck /path/to/source/script.py [args]
## 培训和验证
尽管工作流实际上以将深度模型的部署到生产中而结束,但我们已经到达深度学习工作的最后一步,我们将在[第 8 章](../Text/8.html "Chapter 8\. PyTorch to Production")[HTG4 PyTorch 投入生产。 在完成所有预处理和模型构建之后,现在我们必须训练网络,测试准确性并验证可靠性。 在开源世界(甚至在本书中)中,我们看到的大多数现有代码实现都使用直接方法,在该方法中,我们明确编写了培训,测试和验证所需的每一行,以提高可读性,因为 可以避免样板的特定工具会增加学习曲线,尤其是对于新手。 很显然,对于那些每天都在使用神经网络的程序员来说,可以避免样板的工具将是一个救生员。 因此,PyTorch 社区构建的不是一个而是两个工具:Torchnet 和 ignite。 本次会议仅与点燃有关,因为它被发现比 Torchnet 更为有用和抽象,但两者都是积极开发的工具,有可能在不久的将来合并。
尽管工作流实际上以将深度模型的部署到生产中而结束,但我们已经到达深度学习工作的最后一步,我们将在第 8 章和[HTG4 PyTorch 投入生产。 在完成所有预处理和模型构建之后,现在我们必须训练网络,测试准确性并验证可靠性。 在开源世界(甚至在本书中)中,我们看到的大多数现有代码实现都使用直接方法,在该方法中,我们明确编写了培训,测试和验证所需的每一行,以提高可读性,因为 可以避免样板的特定工具会增加学习曲线,尤其是对于新手。 很显然,对于那些每天都在使用神经网络的程序员来说,可以避免样板的工具将是一个救生员。 因此,PyTorch 社区构建的不是一个而是两个工具:Torchnet 和 ignite。 本次会议仅与点燃有关,因为它被发现比 Torchnet 更为有用和抽象,但两者都是积极开发的工具,有可能在不久的将来合并。
### 点燃
......@@ -476,7 +476,7 @@ Ignite 是一种神经网络培训工具,可将某些样板代码抽象出来
#### 引擎
`Engine`接受一个训练器函数,该函数实质上是用于训练神经网络算法的典型循环。 它包括循环遍历,循环遍历,将现有梯度值归零,使用批次调用模型,计算损失以及更新梯度。 以下示例显示了这一点,该示例取自[第 2 章](../Text/2.html "Chapter 2\. A Simple Neural Network")*简单神经网络*
`Engine`接受一个训练器函数,该函数实质上是用于训练神经网络算法的典型循环。 它包括循环遍历,循环遍历,将现有梯度值归零,使用批次调用模型,计算损失以及更新梯度。 以下示例显示了这一点,该示例取自第 2 章*简单神经网络*
```py
for epoch in range(epochs):
......
......@@ -10,7 +10,7 @@
CNN 是具有数十年历史的机器学习算法,直到 Geoffrey Hinton 和他的实验室提出 AlexNet 时,才证明其功能强大。 从那时起,CNN 经历了多次迭代。 现在,我们在 CNN 之上构建了一些不同的体系结构,这些体系结构为世界各地的所有计算机视觉实现提供了动力。
CNN 是一种基本上由小型网络组成的网络体系结构,几乎类似于[第 2 章](../Text/2.html "Chapter 2\. A Simple Neural Network")*简单神经网络*中引入的简单前馈网络,但用于解决图像作为输入的问题。 CNN 由神经元组成,这些神经元具有非线性,权重参数,偏差并吐出一个损耗值,基于该值,可以使用反向传播对整个网络进行重新排列。
CNN 是一种基本上由小型网络组成的网络体系结构,几乎类似于第 2 章*简单神经网络*中引入的简单前馈网络,但用于解决图像作为输入的问题。 CNN 由神经元组成,这些神经元具有非线性,权重参数,偏差并吐出一个损耗值,基于该值,可以使用反向传播对整个网络进行重新排列。
如果这听起来像简单的全连接网络,那么 CNN 为何特别适合处理图像? CNN 让开发人员做出适用于图像的某些假设,例如像素值的空间关系。
......@@ -62,7 +62,7 @@ PyTorch 为计算机视觉提供了几个便捷功能,其中包括卷积层和
我们正在开发 CNN 以执行简单的分类任务。 使用简单 CNN 的想法是为了了解 CNN 的工作原理。 弄清基础知识后,我们将转到高级网络设计,在其中使用高级 PyTorch 函数,该函数与该应用程序具有相同的功能,但效率更高。
我们将使用 CIFAR10 作为输入数据集,它由 10 类 60,000 张 32x32 彩色图像组成,每类 6,000 张图像。 `torchvision`具有更高级别的功能,可下载和处理数据集。 如我们在[第 3 章](../Text/3.html "Chapter 3\. Deep Learning Workflow")*深度学习工作流*中看到的示例一样,我们下载数据集,然后使用转换对其进行转换,并将其包装在`get_data()`函数下。
我们将使用 CIFAR10 作为输入数据集,它由 10 类 60,000 张 32x32 彩色图像组成,每类 6,000 张图像。 `torchvision`具有更高级别的功能,可下载和处理数据集。 如我们在第 3 章*深度学习工作流*中看到的示例一样,我们下载数据集,然后使用转换对其进行转换,并将其包装在`get_data()`函数下。
```py
def get_data():
......
......@@ -31,7 +31,7 @@ GAN 的创建者 Ian Goodfellow 描述了几类生成网络:
* 自回归模型
*
自回归模型是从先前的值推断当前值的模型,正如我们在[第 5 章](../Text/5.html "Chapter 5\. Sequential Data Processing")*顺序数据处理*中使用 RNN 所讨论的那样。 **可变自动编码器****VAE**)是自动编码器的一种变体,由编码器和解码器组成,其中编码器将输入编码为低维潜在空间矢量, 解码器解码潜矢量以生成类似于输入的输出。
自回归模型是从先前的值推断当前值的模型,正如我们在第 5 章*顺序数据处理*中使用 RNN 所讨论的那样。 **可变自动编码器****VAE**)是自动编码器的一种变体,由编码器和解码器组成,其中编码器将输入编码为低维潜在空间矢量, 解码器解码潜矢量以生成类似于输入的输出。
整个研究界都同意,GAN 是人工智能世界中的下一个重要事物之一。 GAN 具有生成网络和对抗网络,并且两者相互竞争以生成高质量的输出图像。 GAN 和自回归模型都基于不同的原理工作,但是每种方法都有其自身的优缺点。 在本章中,我们将使用这两种方法开发一个基本示例。
......
......@@ -12,7 +12,7 @@ ONNX 很棒,并且每个人都喜欢它,但是 ONNX 的主要缺点之一是
接下来是 TorchScript 的引入,它可以将本机 Python 模型转换为可以在高性能 Universe 中加载的序列化形式,例如 C ++线程。 PyTorch 的后端 LibTorch 可以读取 TorchScript,这使 PyTorch 高效。 有了它,开发人员可以对模型进行原型设计,甚至可以使用 Python 本身对其进行训练。 训练后,可以将模型转换为到**中间表示****IR**)。 目前,仅开发了 C ++后端,因此可以将 IR 作为 C ++对象加载,然后可以从 PyTorch 的 C ++ API 中读取。 TorchScript 甚至可以在 Python 程序中转换控制流,这在生产支持的情况下使其优于 ONNX 方法。 TorchScript 本身是 Python 语言中可能的操作的子集,因此不允许任何 Python 操作用 TorchScript 编写。 官方文档本身提供了非常详细的说明,并讨论了可能的情况和不可能的情况,以及许多示例[1]。
在本章中,我们将从使用 Flask(流行的 Python Web 框架)提供普通的 Python PyTorch 模型开始。 这样的设置通常就足够了,特别是如果您要设置示例 Web 应用程序或满足您个人需求或类似用例的东西。 然后,我们将探索 ONNX 并将 PyTorch 模型转换为 MXNet,然后可以使用 MXNet 模型服务器提供服务。 从那里,我们将转到 TorchScript,这是 PyTorch 街区的新孩子。 使用 TorchScript,我们将制作 C ++可执行文件,然后可以在 LibTorch 的帮助下从 C ++执行该可执行文件。 然后,可以从稳定,高性能的 C ++服务器甚至使用 cgo 的 Go 服务器提供高效的 C ++可执行文件。 对于所有份量,我们将使用在[第 2 章](../Text/2.html "Chapter 2\. A Simple Neural Network")*简单神经网络*中构建的 fizzbuzz 网络。
在本章中,我们将从使用 Flask(流行的 Python Web 框架)提供普通的 Python PyTorch 模型开始。 这样的设置通常就足够了,特别是如果您要设置示例 Web 应用程序或满足您个人需求或类似用例的东西。 然后,我们将探索 ONNX 并将 PyTorch 模型转换为 MXNet,然后可以使用 MXNet 模型服务器提供服务。 从那里,我们将转到 TorchScript,这是 PyTorch 街区的新孩子。 使用 TorchScript,我们将制作 C ++可执行文件,然后可以在 LibTorch 的帮助下从 C ++执行该可执行文件。 然后,可以从稳定,高性能的 C ++服务器甚至使用 cgo 的 Go 服务器提供高效的 C ++可执行文件。 对于所有份量,我们将使用在第 2 章*简单神经网络*中构建的 fizzbuzz 网络。
## 与烧瓶一起食用
......@@ -72,7 +72,7 @@ flask run
```
我们已经建立了简单的 Flask 应用程序。 现在,将 fizzbuzz 模型引入我们的应用程序。 以下代码片段显示了与[第 2 章](../Text/2.html "Chapter 2\. A Simple Neural Network")*简单神经网络*相同的模型,供您参考。 该模型将从路由器功能中调用。 我们已经在[第 2 章](../Text/2.html "Chapter 2\. A Simple Neural Network")*一个简单的神经网络*中对模型进行了训练,因此,我们将在这里加载训练后的模型,而不是再次对其进行训练:
我们已经建立了简单的 Flask 应用程序。 现在,将 fizzbuzz 模型引入我们的应用程序。 以下代码片段显示了与第 2 章和*简单神经网络*相同的模型,供您参考。 该模型将从路由器功能中调用。 我们已经在第 2 章*一个简单的神经网络*中对模型进行了训练,因此,我们将在这里加载训练后的模型,而不是再次对其进行训练:
```py
import torch.nn as nn
......@@ -154,7 +154,7 @@ Flask 为我们提供了`request`实用程序,它是一个全局变量,但
在 HTTP `POST`请求中,我们传递了输入数字为`14`的 JSON 对象,我们的服务器返回了下一个数字`FizBuz`。 所有这些魔术都发生在我们的`app.py`调用的`controller.run()`方法中。 现在,让我们看看该函数在做什么。
接下来是使用`run()`方法的`controller`文件。 在这里,我们将输入数字转换为 10 位二进制数(请记住,这是我们作为输入传递给[第 2 章](../Text/2.html "Chapter 2\. A Simple Neural Network")*简单神经网络*的 fizzbuzz 网络)的函数 火炬张量。 然后将二进制张量传递给我们模型的正向函数,以得到具有预测的 1 x 4 张量。
接下来是使用`run()`方法的`controller`文件。 在这里,我们将输入数字转换为 10 位二进制数(请记住,这是我们作为输入传递给第 2 章*简单神经网络*的 fizzbuzz 网络)的函数 火炬张量。 然后将二进制张量传递给我们模型的正向函数,以得到具有预测的 1 x 4 张量。
通过从加载了保存的`.pth`文件的模型文件中调用`FizBuz`类来创建我们的模型。 我们使用 Torch 的`load_state_dict`方法将参数加载到初始化的模型中。 之后,我们将模型转换为`eval()`模式,这将模型设置为评估模式(它在评估模式下关闭了 batchnorm 丢弃层)。 模型的输出是运行`max`并确定哪个索引具有最大值,然后将其转换为可读输出的概率分布。
......
......@@ -16,7 +16,7 @@
* Python 和 TensorFlow
* 线性代数是神经网络的前提
* 安装包:Python,TensorFlow 和 OpenAI 健身房(在[第 1 章](../Text/01.html)*深度学习–架构和框架*[第 2 章](../Text/02.html)*中显示) 使用 OpenAI Gym* 的特工
* 安装包:Python,TensorFlow 和 OpenAI 健身房(在第 1 章,*深度学习–架构和框架*和第 2 章*中显示) 使用 OpenAI Gym* 的特工
# 下载示例代码文件
......
......@@ -700,7 +700,7 @@ V(s),即状态的值定义为,从该状态到后续状态直到代理到
*V(s)= E [所有将来的奖励均已折扣| S(t)= s]*
关于值函数的更多详细信息将在[第 3 章](../Text/03.html)*马尔可夫决策过程和部分可观察的 MDP* 中进行介绍。
关于值函数的更多详细信息将在第 3 章*马尔可夫决策过程和部分可观察的 MDP* 中进行介绍。
# 最优政策模型
......@@ -736,17 +736,17 @@ Q 学习涉及的步骤:
当状态空间和动作空间的数量增加时,很难维护 Q 表。 在现实世界中,状态空间无限大。 因此,需要另一种无需 Q 表即可生成 *Q(s,a)*的方法。 一种解决方案是用功能替换 Q 表。 该函数将状态作为矢量形式的输入,并输出给定​​状态下所有动作的 Q 值矢量。 该函数逼近器可以由神经网络表示,以预测 Q 值。 因此,当状态和动作空间变大时,我们可以添加更多的层并适合于深度神经网络,以更好地预测 Q 值,这对于 Q 表来说似乎是不可能的。 这样就产生了 Q 网络,如果使用了更深层的神经网络(例如卷积神经网络),那么它会导致**深层 Q 网络****DQN**)。
有关 Q 学习和深度 Q 网络的更多详细信息,将在[第 5 章](../Text/05.html)*Q 学习和深度 Q 网络*中进行介绍。
有关 Q 学习和深度 Q 网络的更多详细信息,将在第 5 章*Q 学习和深度 Q 网络*中进行介绍。
# 异步优势参与者批评家
A3C 算法由 Google DeepMind 和 MILA 的联合团队于 2016 年 6 月发布。 它更简单并且具有更轻的框架,该框架使用异步梯度下降来优化深度神经网络。 它速度更快,并且能够在多核 CPU 而非 GPU 上显示出良好的结果。 A3C 的一大优势是它可以在连续动作空间和离散动作空间上工作。 结果,它为许多具有复杂状态和动作空间的新挑战性难题打开了门户。
我们将在此处重点讨论,但是我们将在[第 6 章](../Text/06.html)*异步方法*中进行更深入的探讨。 让我们从名称开始,即**异步优势参与者批评者****A3C**)算法,然后将其解压缩以获得该算法的基本概述:
我们将在此处重点讨论,但是我们将在第 6 章*异步方法*中进行更深入的探讨。 让我们从名称开始,即**异步优势参与者批评者****A3C**)算法,然后将其解压缩以获得该算法的基本概述:
* **异步**:在 DQN 中,您还记得我们将神经网络与我们的代理一起使用来预测动作。 这意味着只有一个代理,并且它正在与一个环境交互。 A3C 所做的是创建代理环境的多个副本,以使代理更有效地学习。 A3C 具有一个全球网络和多个工作人员代理,其中每个代理都有其自己的一组网络参数,并且每个参数都与其环境副本同时进行交互,而无需与另一个代理的环境进行交互。 它比单个代理更好的原因是每个代理的经验独立于其他代理的经验。 因此,所有工人代理人的总体经验导致了各种各样的培训。
* **Actor-critic**:Actor-critic 结合了价值迭代和策略迭代的优势。 因此,网络将为给定状态 s 估计值函数 V(s)和策略π(s)。 函数逼近器神经网络的顶部将有两个单独的全连接层,分别输出状态的值和状态策略。 代理使用值,该值充当批评者来更新策略,即,智能角色。
* **优点**:策略梯度使用折现收益告诉代理该行动是好是坏。 用 Advantage 代替它不仅可以量化操作的好坏状态,而且可以更好地鼓励和劝阻操作(我们将在[第 4 章](../Text/04.html)*策略梯度*中进行讨论)。
* **优点**:策略梯度使用折现收益告诉代理该行动是好是坏。 用 Advantage 代替它不仅可以量化操作的好坏状态,而且可以更好地鼓励和劝阻操作(我们将在第 4 章*策略梯度*中进行讨论)。
# TensorFlow 和 OpenAI Gym 简介
......@@ -973,7 +973,7 @@ OpenAI Gym 由两部分组成:
有关安装和依赖项,[请参考以下链接](https://gym.openai.com/docs/)
在介绍了基础知识之后,现在我们将从下一个[第 2 章](../Text/02.html)*使用 OpenAI Gym* 训练强化学习代理开始使用 OpenAI Gym 实施强化学习。
在介绍了基础知识之后,现在我们将从下一个第 2 章*使用 OpenAI Gym* 训练强化学习代理开始使用 OpenAI Gym 实施强化学习。
# 强化学习的先驱与突破
......
......@@ -422,7 +422,7 @@ POMDP 中的值迭代基本上是从信念 MDP 获得的无限状态空间上的
# 使用 MDP 训练 FrozenLake-v0 环境
这是关于 OpenAI 体育馆中名为 **FrozenLake-v0** 的网格世界环境,在[第 2 章](../Text/02.html)*中讨论了使用 OpenAI 体育馆*训练强化学习代理。 我们实施了 Q 学习和 Q 网络(我们将在以后的章节中进行讨论)以了解 OpenAI 体育馆的环境。
这是关于 OpenAI 体育馆中名为 **FrozenLake-v0** 的网格世界环境,在第 2 章*中讨论了使用 OpenAI 体育馆*训练强化学习代理。 我们实施了 Q 学习和 Q 网络(我们将在以后的章节中进行讨论)以了解 OpenAI 体育馆的环境。
现在,让我们尝试使用以下代码实现值迭代,以获取 FrozenLake-v0 环境中每个状态的效用值:
......
# Q 学习和深度 Q 网络
[第 3 章](../Text/03.html)*马尔可夫决策过程* *和*中,我们讨论了遵循马尔可夫性质的环境过渡模型以及延迟的奖励和价值的概念( 或实用程序)功能。 好,在本章中,我们将研究马尔可夫决策过程,了解 Q 学习,以及一种称为深度 Q 网络的改进方法,用于在不同环境中进行泛化。
第 3 章*马尔可夫决策过程* *和*中,我们讨论了遵循马尔可夫性质的环境过渡模型以及延迟的奖励和价值的概念( 或实用程序)功能。 好,在本章中,我们将研究马尔可夫决策过程,了解 Q 学习,以及一种称为深度 Q 网络的改进方法,用于在不同环境中进行泛化。
我们将在本章介绍以下主题:
......@@ -38,7 +38,7 @@ DeepMind 在研究期刊 **Nature** 上发表了他们的论文[《通过深度
因此,对于基于随机环境的问题,似乎最好的学习方法是尝试各种可能性。 因此,与其通过监督分类将其解决为模式识别问题,不如通过试错法更好,在这种方法中,结果标签将替换为量化特定操作对完成给定问题的最终目的的有用性的奖励。 声明。
这产生了环境-代理交互方法,我们在[第 1 章](../Text/01.html)*深度强化–体系结构和框架,*中讨论了该方法,在该系统中,我们设计了一种使代理与环境交互的系统 首先,通过传感器感知状态,通过效应器对环境执行一些操作,然后接收反馈,即对所采取操作的奖励,如下图所示:
这产生了环境-代理交互方法,我们在第 1 章*深度强化–体系结构和框架,*中讨论了该方法,在该系统中,我们设计了一种使代理与环境交互的系统 首先,通过传感器感知状态,通过效应器对环境执行一些操作,然后接收反馈,即对所采取操作的奖励,如下图所示:
![](img/c7f38da6-965e-4b9f-9149-bc088223f8bd.png)
......@@ -46,7 +46,7 @@ DeepMind 在研究期刊 **Nature** 上发表了他们的论文[《通过深度
# 基于模型的学习和免费模型学习
[第 3 章](../Text/03.html)*马尔可夫决策过程中,*我们使用状态,动作,奖励,过渡模型和折现因子来解决我们的马尔可夫决策过程,即 MDP 问题。 因此,如果 MDP 问题的所有这些要素均可用,我们可以轻松地使用规划算法为目标提出解决方案。 这种类型的学习称为**基于模型的学习**,其中 AI 代理将与环境交互,并基于其交互,将尝试近似环境的模型,即状态转换模型。 给定模型,现在代理可以尝试通过值迭代或策略迭代找到最佳策略。
第 3 章*马尔可夫决策过程中,*我们使用状态,动作,奖励,过渡模型和折现因子来解决我们的马尔可夫决策过程,即 MDP 问题。 因此,如果 MDP 问题的所有这些要素均可用,我们可以轻松地使用规划算法为目标提出解决方案。 这种类型的学习称为**基于模型的学习**,其中 AI 代理将与环境交互,并基于其交互,将尝试近似环境的模型,即状态转换模型。 给定模型,现在代理可以尝试通过值迭代或策略迭代找到最佳策略。
但是,对于我们的 AI 代理来说,学习环境的显式模型不是必需的。 它可以直接从与环境的交互中得出最佳策略,而无需构建模型。 这种学习称为**模型免费学习**。 无模型学习涉及在没有具体环境模型的情况下预测某个策略的价值功能。
......@@ -330,7 +330,7 @@ Episode 10 completed with total reward 222.356805259 in 843 steps
# 深度 Q 网络
如果我们回想起[第 2 章](../Text/02.html)*使用 OpenAI Gym 训练强化学习代理,*我们曾尝试在其中实现基本的 Q 网络,那么我们就针对一个实际问题研究了 Q 学习 由于连续的状态和动作空间,使用 Q 表不是可行的解决方案。 而且,Q 表是特定于环境的,而不是通用的。 因此,我们需要一个模型,该模型可以将作为输入提供的状态信息映射到可能的一组动作的 Q 值。 在这里,神经网络开始发挥函数逼近器的作用,函数逼近器可以接受矢量形式的状态信息输入,并学习将其映射为所有可能动作的 Q 值。
如果我们回想起第 2 章*使用 OpenAI Gym 训练强化学习代理,*我们曾尝试在其中实现基本的 Q 网络,那么我们就针对一个实际问题研究了 Q 学习 由于连续的状态和动作空间,使用 Q 表不是可行的解决方案。 而且,Q 表是特定于环境的,而不是通用的。 因此,我们需要一个模型,该模型可以将作为输入提供的状态信息映射到可能的一组动作的 Q 值。 在这里,神经网络开始发挥函数逼近器的作用,函数逼近器可以接受矢量形式的状态信息输入,并学习将其映射为所有可能动作的 Q 值。
让我们讨论游戏环境中的 Q 学习问题以及深度 Q 网络的发展。 考虑将 Q 学习应用于游戏环境,该状态将由玩家,障碍物,对手等的位置来定义,但这将是特定于游戏的,即使在我们创建时也不能在其他游戏环境中推广 一个以某种方式表示该游戏所有可能状态的 Q 表。
......@@ -1027,7 +1027,7 @@ def bias_variable(self,b_shape,layer,c):
* **大步前进**:以[`1,x_movement,y_movement,1`]形式出现的列表,其中:
* `x_movement`:定义水平移动补丁的步数
* `y_movement`:定义在垂直方向上移动的色块的步数
* **填充**`SAME``VALID`(我们在[第 1 章](../Text/01.html)*深度学习–体系结构和框架*中讨论了此和有效的填充)
* **填充**`SAME``VALID`(我们在第 1 章*深度学习–体系结构和框架*中讨论了此和有效的填充)
我们将使用以下代码定义函数:
......
......@@ -2,7 +2,7 @@
到目前为止,我们已经涵盖了大多数重要主题,例如马尔可夫决策过程,值迭代,Q 学习,策略梯度,深度 Q 网络和参与者批评算法。 这些构成了强化学习算法的核心。 在本章中,我们将继续从 Actor Critic Algorithms 中停止的地方继续搜索,并深入研究用于深度强化学习的高级**异步方法及其最著名的变体**异步优势 actor-critic 算法**,通常称为 **A3C 算法**。**
但是,在开始使用 A3C 算法之前,让我们修改[第 4 章](../Text/04.html)*策略梯度*中涵盖的 Actor Critic 算法的基础。 如果您还记得,演员评论算法有两个组成部分:
但是,在开始使用 A3C 算法之前,让我们修改第 4 章*策略梯度*中涵盖的 Actor Critic 算法的基础。 如果您还记得,演员评论算法有两个组成部分:
* 演员
* 评论家
......@@ -210,7 +210,7 @@ repeat until :
在异步优势参与者批评者的体系结构中,每个学习代理都包含一个参与者批评者,该学习者结合了基于价值和基于策略的方法的优点。 参与者网络将状态作为输入,并预测该状态的最佳动作,而评论家网络将状态和动作作为输入,并输出动作分数以量化该状态的动作效果。 参与者网络使用策略梯度更新其权重参数,而评论者网络使用 *TD(0)*来更新其权重参数,换言之,两个时间步长之间的值估计之差,如[中所述 ]第 4 章](../Text/04.html)*政策梯度*
[第 4 章](../Text/04.html)*策略梯度*中,我们研究了如何通过从策略梯度的预期未来收益中减去基线函数来更新策略梯度,从而在不影响预期收益的情况下减少方差的情况。 梯度。 预期的未来奖励和基线函数之间的差称为**优势函数**; 它不仅告诉我们状态的好坏,而且还告诉我们该动作的预期好坏。
第 4 章*策略梯度*中,我们研究了如何通过从策略梯度的预期未来收益中减去基线函数来更新策略梯度,从而在不影响预期收益的情况下减少方差的情况。 梯度。 预期的未来奖励和基线函数之间的差称为**优势函数**; 它不仅告诉我们状态的好坏,而且还告诉我们该动作的预期好坏。
卷积神经网络既用于演员网络,又用于评论者网络。 在每个![](img/4a53a424-256c-43ac-98a9-b4b0fe5c0156.png)步骤之后或直到达到终端状态之前,将更新策略和操作值参数。 将与以下伪代码一起说明网络更新,熵和目标函数。 此外,将策略![](img/861ea090-c642-4a1f-b1b0-5082002bc932.png)的熵 H 添加到目标函数中,以通过避免过早收敛到次优策略来改善探索。
......@@ -267,7 +267,7 @@ repeat until :
# OpenAI 体育馆中 Pong-v0 的 A3C
[第 4 章](../Text/04.html)*策略梯度*中,我们已经讨论过乒乓环境。 我们将使用以下代码在 OpenAI 健身房中为 Pong-v0 创建 A3C:
第 4 章*策略梯度*中,我们已经讨论过乒乓环境。 我们将使用以下代码在 OpenAI 健身房中为 Pong-v0 创建 A3C:
```py
import multiprocessing
......
......@@ -131,11 +131,11 @@ Brett Sperry 首先使用术语**实时策略**(**RTS**)作为宣传其游
强化学习中的奖励功能必须与每个状态相关联,以使从开始状态开始的动作通过一系列中间状态导致达到目标状态,从而使预期的奖励总和最大化,从而导致 最佳路径。
基本的强化学习算法,例如 Q 学习和 SARSA 算法(在[第 5 章](../Text/05.html)*Q-Learning 和深度 Q 网络*中进行了解释)在收敛时间和比率方面表现更好 与早期的在线案例学习相比。
基本的强化学习算法,例如 Q 学习和 SARSA 算法(在第 5 章*Q-Learning 和深度 Q 网络*中进行了解释)在收敛时间和比率方面表现更好 与早期的在线案例学习相比。
此外,在深度强化学习领域中正在进行大量研究,该研究集中于使用图像进行代理感知以在更复杂的领域中更好地工作。 以前的自动编码器方法有助于将非常复杂的域转换为更简单的域。 此外,学习奖励功能和自动编码器的其他变体,尤其是去噪堆叠式自动编码器,将进一步改善结果。
此外,使用异步或分布式多主体强化学习方法(在[第 6 章](../Text/06.html)*异步方法*中讨论),其中学习代理与自己的环境副本并行工作将进一步减少 收敛时间更好的结果。
此外,使用异步或分布式多主体强化学习方法(在第 6 章*异步方法*中讨论),其中学习代理与自己的环境副本并行工作将进一步减少 收敛时间更好的结果。
# 概要
......
......@@ -62,7 +62,7 @@ Go 游戏起源于中国大约 3000 年前。 游戏规则很简单,如下所
# DeepBlue 如何击败 Gary Kasparov?
[第 5 章](../Text/05.html)*Q 学习和深度 Q 网络*中,我们研究了游戏树和 minimax 算法。 让我们回想一下那些了解 IBM DeepBlue AI 程序背后的体系结构的方法。
第 5 章*Q 学习和深度 Q 网络*中,我们研究了游戏树和 minimax 算法。 让我们回想一下那些了解 IBM DeepBlue AI 程序背后的体系结构的方法。
游戏树表示游戏的完整端到端表示,其中树中的每个节点表示特定的游戏状态(位置),链接节点的边表示在先前游戏状态下所采取的动作(动作),导致 新游戏状态。 根节点代表游戏的开始,下一级别的节点代表在游戏的开始状态下采取了所有不同的可能动作之后生成的可能状态,并且类似地生成了其他层中的节点。
......@@ -103,7 +103,7 @@ AlphaGo 使用策略和价值网络的方式是将搜索树的巨大复杂性降
# 蒙特卡罗树搜索
[第 5 章](../Text/05.html)*Q 学习和深度 Q 网络*中,我们研究了蒙特卡洛树搜索。 在这里,让我们再次对其进行修改,看看 AlphaGo 如何使用它来获得更好的结果。
第 5 章*Q 学习和深度 Q 网络*中,我们研究了蒙特卡洛树搜索。 在这里,让我们再次对其进行修改,看看 AlphaGo 如何使用它来获得更好的结果。
蒙特卡洛树搜索是游戏树搜索的另一种方法。 在这种方法中,我们对游戏进行了许多模拟,其中每个模拟都以当前游戏状态开始,以两个玩家之一作为获胜者结束。 开始时,模拟是随机的,即为两个玩家随机选择动作。 在每个模拟中,对于该模拟的每个游戏状态,都会存储相应的值。 游戏状态(节点)的该值表示该节点的出现频率以及其中几次出现导致获胜的频率。 这些值可为以后的模拟选择动作提供指导。 运行的模拟次数越多,这些值在选择获胜举动时就会越优化。
......
......@@ -81,7 +81,7 @@
![](img/a439e6b9-b14f-40fb-84e3-2d8ef4bf84ca.png)
* 识别周围环境的组成部分,其中包括人行道,人,交通信号灯,任何建筑,道路边界,其他车辆等。 对于 AI,由于使用**卷积神经网络****CNN**)和**生成对抗网络****GAN**)。 CNN 和 GAN 的成功可用于自动驾驶环境要素的识别过程。
* **预测**环境的未来状态。 识别当前环境状态的环境的当前组成部分很重要,但是将其用作输入并预测未来环境状态对于计划下一步行动也很有必要。 解决此问题的基本方法之一是创建环境图。 此外,我们可以合并深度神经网络,例如循环神经网络的变体,例如**长短时记忆网络****LSTM**)或**门控循环单元**[ **GRU**),以整合和整合过去时间步长以及当前时间步长和预测未来中的数据。 正如我们在[第 1 章](../Text/01.html)*深度学习–体系结构和框架*中讨论的那样,由于长期依赖以及 LSTM 单元如何解决该问题,围绕梯度消失的问题仍然存在 RNN 的情况。 RNN 是集成时间序列数据的最新技术,它在 [DeepTracking](https://arxiv.org/pdf/1602.00991.pdf)中显示了对象跟踪方面的改进。
* **预测**环境的未来状态。 识别当前环境状态的环境的当前组成部分很重要,但是将其用作输入并预测未来环境状态对于计划下一步行动也很有必要。 解决此问题的基本方法之一是创建环境图。 此外,我们可以合并深度神经网络,例如循环神经网络的变体,例如**长短时记忆网络****LSTM**)或**门控循环单元**[ **GRU**),以整合和整合过去时间步长以及当前时间步长和预测未来中的数据。 正如我们在第 1 章,*深度学习–体系结构和框架*中讨论的那样,由于长期依赖以及 LSTM 单元如何解决该问题,围绕梯度消失的问题仍然存在 RNN 的情况。 RNN 是集成时间序列数据的最新技术,它在 [DeepTracking](https://arxiv.org/pdf/1602.00991.pdf)中显示了对象跟踪方面的改进。
* **规划**是整个过程中最难的部分。 该任务包括将识别和预测的结果集成在一起,以计划将来的动作序列以及下一个驾驶动作集(向左或向右转向,加速等等),以使导航安全且成功。 这是一项艰巨的任务,因为整合和规划需要处理不可避免的情况才能安全到达目的地。 强化学习最适合此类控制计划任务。 我们已经了解了如何成功地部署强化学习来控制 50 场 Atari 游戏中的计划任务,以及 Google DeepMind 提供的最先进的 AlphaGo Zero。 在这些情况下,我们目睹了深度学习在进行表示学习的同时进行强化学习的规划。
......@@ -146,7 +146,7 @@
先前的网络构成**深度 Q 网络****DQN**)的一部分,该网络将状态信息作为输入并将体验存储在体验缓冲区中。 来自该经验缓冲区的样本数据用于训练 DQN 中使用的深度神经网络,该神经网络进而预测状态动作值。 状态操作值有助于得出最佳策略,即为给定状态规划最佳操作。
基于 DQN 的方法适用于连续状态空间,但它要求动作空间是离散的。 因此,在连续动作空间的情况下,首选参与者批评算法。 回顾[第 4 章](../Text/04.html)*策略梯度*的参与者评论算法,以下是参与者评论算法的示意图:
基于 DQN 的方法适用于连续状态空间,但它要求动作空间是离散的。 因此,在连续动作空间的情况下,首选参与者批评算法。 回顾第 4 章*策略梯度*的参与者评论算法,以下是参与者评论算法的示意图:
![](img/14723421-f8a4-45db-b3be-1e311e207484.png)
......
......@@ -33,7 +33,7 @@
# 强化学习的演变
在本书中,我们涵盖了从基础到高级的强化学习领域中的大多数算法。 因此,这些章节是理解机器人领域中不同算法所面临的应用和挑战的前提。 早期强化学习算法通过首先获取状态动作值,然后从中得出策略来处理获取最佳策略的问题。 然后,策略迭代方法出现了,直接用于输出优化的策略。 勘探开发技术有助于完善现有政策,探索新措施并更新现有政策。 强化学习方法,例如 MDP(在[第 3 章](../Text/03.html)*马尔可夫决策过程*中),其中需要采用过渡模型的值迭代方法称为基于**模型的学习者**。 另一方面,诸如 Q 学习(在[第 5 章](../Text/05.html)*Q-Learning 和深度 Q 网络*中)的算法不需要这种过渡模型,因此也不需要任何预定义的策略。 ,他们被称为**模型免费土地脱离政策学习者**
在本书中,我们涵盖了从基础到高级的强化学习领域中的大多数算法。 因此,这些章节是理解机器人领域中不同算法所面临的应用和挑战的前提。 早期强化学习算法通过首先获取状态动作值,然后从中得出策略来处理获取最佳策略的问题。 然后,策略迭代方法出现了,直接用于输出优化的策略。 勘探开发技术有助于完善现有政策,探索新措施并更新现有政策。 强化学习方法,例如 MDP(在第 3 章,*马尔可夫决策过程*中),其中需要采用过渡模型的值迭代方法称为基于**模型的学习者**。 另一方面,诸如 Q 学习(在第 5 章*Q-Learning 和深度 Q 网络*中)的算法不需要这种过渡模型,因此也不需要任何预定义的策略。 ,他们被称为**模型免费土地脱离政策学习者**
在深度强化学习领域,行动价值函数逼近器和策略函数逼近器在制定最先进的学习算法集方面发挥着关键作用。 策略搜索算法(例如策略梯度)旨在通过最大化期望的奖励总和来找到最佳策略,而使用行动值函数近似器(例如深度 Q 网络)的算法旨在通过最大化期望的总和来找到给定状态的行动值 奖励。 但是,在处理由高维和连续状态动作空间构成的环境时,性能上的差异在于,这最能描述机器人在其中运行的真实环境。 在这种情况下,策略搜索算法的性能会更好,因为它们在连续状态操作空间域中可以更好地工作:
......
......@@ -65,7 +65,7 @@
* 这些代理商将使用历史市场数据并直接与市场参与者进行交互,并根据此数据对自己的行为进行建模,从而帮助制定不同的决策策略
* 使用强化学习的机器学习方法
* 在[第 3 章](../Text/03.html)和 *Markov 决策过程*中可以看到**马尔可夫决策过程**(**MDP**)的框架,在该框架中,我们最大化了每个模型的预期效用 通过最大化预期奖励总和,最优化进入目标状态的路径的状态
* 在第 3 章和 *Markov 决策过程*中可以看到**马尔可夫决策过程**(**MDP**)的框架,在该框架中,我们最大化了每个模型的预期效用 通过最大化预期奖励总和,最优化进入目标状态的路径的状态
# 在展示广告中通过强化学习进行实时出价
......
......@@ -4,7 +4,7 @@
# 连续动作空间算法
深度强化学习拓扑中有许多连续的动作空间算法。 我们在[第 4 章](../Text/04.html)*策略梯度*中较早介绍的其中一些主要是随机策略梯度和随机行为者-批判算法。 随机策略梯度与许多问题相关,例如由于观察值和奖励分配的连续变化而导致的非平稳数据导致难以选择步长,其中差的步长会对策略网络参数的学习产生不利影响。 因此,需要一种在训练策略网络参数时可以限制此策略搜索空间并避免不良步骤的方法。
深度强化学习拓扑中有许多连续的动作空间算法。 我们在第 4 章*策略梯度*中较早介绍的其中一些主要是随机策略梯度和随机行为者-批判算法。 随机策略梯度与许多问题相关,例如由于观察值和奖励分配的连续变化而导致的非平稳数据导致难以选择步长,其中差的步长会对策略网络参数的学习产生不利影响。 因此,需要一种在训练策略网络参数时可以限制此策略搜索空间并避免不良步骤的方法。
在这里,我们将尝试介绍一些高级连续动作空间算法:
......@@ -31,7 +31,7 @@ TRPO 由 Schulman 等(2017)发布在名为[《信任区域策略优化》](h
# NLP 顺序模型中的评分机制
两种评分机制用于评估[第 14 章](../Text/14.html)*NLP* 中的深度强化学习中提到的方法,如下所示:
两种评分机制用于评估第 14 章*NLP* 中的深度强化学习中提到的方法,如下所示:
# 蓝色
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册