提交 5b033760 编写于 作者: W wizardforcel

2021-01-13 16:37:25

上级 ef0b33b3
......@@ -44,11 +44,11 @@
导入 matplotlib.pyplot 作为 plt
这样显示了新术语和重要单词:“本章还将探讨**自然语言处理** **NLP** )的概念。”
这样显示了新术语和重要单词:“本章还将探讨**自然语言处理****NLP**)的概念。”
## 代码演示
跨多行的代码行使用反斜杠( **\** )分割。 执行代码时,Python 将忽略反斜杠,并将下一行中的代码视为当前行的直接延续。
跨多行的代码行使用反斜杠(**\**)分割。 执行代码时,Python 将忽略反斜杠,并将下一行中的代码视为当前行的直接延续。
例如:
......@@ -128,7 +128,7 @@ pip --version
由于计算机上的 **pip** 先前版本已经使用 **pip** 命令,因此您可能需要使用 **pip3** 命令。
如果您的计算机无法识别 **pip** (或 **pip3** )命令,请按照以下步骤进行安装:
如果您的计算机无法识别 **pip** (或 **pip3**)命令,请按照以下步骤进行安装:
1. 要安装 **pip**[请访问以下链接并下载 **get-pip.py** 文件](https://pip.pypa.io/en/stable/installing/)
2. Then, on the Terminal or Command Prompt, use the following command to install it:
......
......@@ -10,7 +10,7 @@
深度学习的一些最著名的应用是自动驾驶汽车,流行的聊天机器人以及各种语音激活助手,这些将在本章中进一步说明。
PyTorch 于 2017 年推出,其主要特点是它使用**图形处理单元** **GPU** )来使用“张量”处理数据。 这使算法可以高速运行,同时,它为用户提供了灵活性和标准语法,可以为许多数据问题获得最佳结果。 此外,PyTorch 使用动态计算图,使您可以随时随地更改网络。 本书使用 PyTorch 揭开了神经网络神秘面纱,并帮助您了解神经网络架构的复杂性。
PyTorch 于 2017 年推出,其主要特点是它使用**图形处理单元****GPU**)来使用“张量”处理数据。 这使算法可以高速运行,同时,它为用户提供了灵活性和标准语法,可以为许多数据问题获得最佳结果。 此外,PyTorch 使用动态计算图,使您可以随时随地更改网络。 本书使用 PyTorch 揭开了神经网络神秘面纱,并帮助您了解神经网络架构的复杂性。
# 为什么选择深度学习?
......@@ -18,7 +18,7 @@ PyTorch 于 2017 年推出,其主要特点是它使用**图形处理单元**
**深度学习**是机器学习的子集,它使用多层神经网络(大型神经网络),受人脑的生物结构启发,其中一层中的神经元接收一些输入数据,对其进行处理, 并将输出发送到下一层。 这些神经网络可以由成千上万个相互连接的节点(神经元)组成,大多数情况下组织在不同的层中,其中一个节点连接到上一层中的多个节点,从那里接收输入数据,还连接到上一层中的几个节点。 下一层,在处理完输出数据后,它将输出数据发送到下一层。
深度学习的普及是由于其准确性。 对于诸如**自然语言处理** **NLP** )之类的复杂数据问题,它已达到比其他算法更高的准确度。 深度学习的出色表现能力已经达到了机器可以胜过人类的水平,例如在欺诈检测中。 深度学习模型不仅可以优化流程,而且可以提高其质量。 这意味着在诸如安全性之类的出于安全原因至关重要的革命性领域(例如自动驾驶汽车)的进步。
深度学习的普及是由于其准确性。 对于诸如**自然语言处理****NLP**)之类的复杂数据问题,它已达到比其他算法更高的准确度。 深度学习的出色表现能力已经达到了机器可以胜过人类的水平,例如在欺诈检测中。 深度学习模型不仅可以优化流程,而且可以提高其质量。 这意味着在诸如安全性之类的出于安全原因至关重要的革命性领域(例如自动驾驶汽车)的进步。
尽管神经网络在几十年前就已经理论化了,但神经网络最近变得流行有两个主要原因:
......@@ -42,7 +42,7 @@ PyTorch 于 2017 年推出,其主要特点是它使用**图形处理单元**
注意
为了加速深度学习,以便能够利用大量训练数据并构建最新模型,**现场可编程门阵列**( **FPGA** )和**张量处理单元**( **TPU** )正在由主要的云计算提供商开发,例如 AWS,Microsoft Azure 和 Google。
为了加速深度学习,以便能够利用大量训练数据并构建最新模型,**现场可编程门阵列**(**FPGA**)和**张量处理单元**(**TPU**)正在由主要的云计算提供商开发,例如 AWS,Microsoft Azure 和 Google。
## 深度学习的应用
......@@ -75,7 +75,7 @@ PyTorch 于 2017 年 1 月首次向公众发布。它使用 **GPU** 的功能来
GPU 最初是为了加速图形渲染中的计算而开发的,尤其是对于视频游戏等。 但是,由于它们能够帮助加快任何领域的计算速度,包括深度学习计算,它们最近变得越来越受欢迎。
有几种平台可以将变量分配给计算机的 GPU,其中**计算统一设备体系结构** **CUDA** )是最常用的平台之一。 CUDA 是 Nvidia 开发的计算平台,由于使用 GPU 来执行计算,因此可以加快计算密集型程序的速度。
有几种平台可以将变量分配给计算机的 GPU,其中**计算统一设备体系结构****CUDA**)是最常用的平台之一。 CUDA 是 Nvidia 开发的计算平台,由于使用 GPU 来执行计算,因此可以加快计算密集型程序的速度。
在 PyTorch 中,可以通过使用 **torch.cuda** 包将变量分配给 CUDA,如以下代码片段所示:
......@@ -111,7 +111,7 @@ torch.cuda.is_available()
这意味着张量不仅是数据结构,而且是容器,当容器提供某些数据时,它们可以与其他张量以多线性方式映射。
类似于 NumPy 阵列或任何其他类似矩阵的结构,PyTorch 张量可以具有所需的任意多个尺寸。 可以使用以下代码片段在 PyTorch 中定义一维张量( **tensor_1** )和二维张量( **tensor_2** ):
类似于 NumPy 阵列或任何其他类似矩阵的结构,PyTorch 张量可以具有所需的任意多个尺寸。 可以使用以下代码片段在 PyTorch 中定义一维张量(**tensor_1**)和二维张量(**tensor_2**):
te nsor_1 = torch.tensor([1,1,0,2])
......@@ -135,7 +135,7 @@ tensor_1.shape
注意
此处显示的代码段使用反斜杠( **\** )将逻辑划分为多行。 执行代码时,Python 将忽略反斜杠,并将下一行中的代码视为当前行的直接延续。
此处显示的代码段使用反斜杠(**\**)将逻辑划分为多行。 执行代码时,Python 将忽略反斜杠,并将下一行中的代码视为当前行的直接延续。
example_1 = torch.randn(3,3)
......@@ -261,7 +261,7 @@ ab.backward()
接下来,使用两个张量的值定义一个函数。 最后,使用**向后()**函数来计算梯度。
通过打印 **a****b** 的梯度,可以确认仅对第一个变量( **a** )计算梯度,而对第二个梯度进行计算 一个( **b** ),则会引发错误:
通过打印 **a****b** 的梯度,可以确认仅对第一个变量(**a**)计算梯度,而对第二个梯度进行计算 一个(**b**),则会引发错误:
打印(a.grad.data)
......@@ -303,7 +303,7 @@ loss_funct = nn.MSELoss()
从前面的代码中可以看出,网络的体系结构包含一个隐藏层,其后是 ReLU 激活功能和一个输出层,然后是一个 S 型激活功能,从而使其成为两层网络。
最后,损失函数定义为**均方误差** **MSE** )。
最后,损失函数定义为**均方误差****MSE**)。
注意
......@@ -375,7 +375,7 @@ loss_funct = nn.MSELoss()
### PyTorch 优化软件包
**optim** 程序包用于定义优化器,该优化器将使用 **autograd** 计算出的梯度来更新每次迭代中的参数(将在以下各章中进一步说明)。 模块。 在这里,可以从可用的不同优化算法中进行选择,例如**亚当****随机梯度下降** **SGD** )和**均方根 平方传播****RMSprop** )等。
**optim** 程序包用于定义优化器,该优化器将使用 **autograd** 计算出的梯度来更新每次迭代中的参数(将在以下各章中进一步说明)。 模块。 在这里,可以从可用的不同优化算法中进行选择,例如**亚当****随机梯度下降****SGD**)和**均方根 平方传播****RMSprop**)等。
注意
......@@ -395,7 +395,7 @@ loss_funct = nn.MSELoss()
注意
以下代码段中的**#**符号表示代码注释。 注释已添加到代码中,以帮助解释特定的逻辑位。 下面的代码片段中的三引号(**“”“** )用来表示多行代码注释的起点和终点。在代码中添加了注释,以帮助解释特定的逻辑位 。
以下代码段中的**#**符号表示代码注释。 注释已添加到代码中,以帮助解释特定的逻辑位。 下面的代码片段中的三引号(**“”“**)用来表示多行代码注释的起点和终点。在代码中添加了注释,以帮助解释特定的逻辑位 。
对于我在范围(100)中:
......@@ -425,7 +425,7 @@ loss.backward()
Optimizer.step()
对于每次迭代,调用模型以获得预测( **y_pred** )。 该预测和地面真实值( **y** )被馈送到损失函数,以确定模型逼近地面真实的能力。
对于每次迭代,调用模型以获得预测(**y_pred**)。 该预测和地面真实值(**y**)被馈送到损失函数,以确定模型逼近地面真实的能力。
接下来,将梯度归零,并使用 **Backward()**函数计算损失函数的梯度。
......
......@@ -10,7 +10,7 @@
尽管神经网络理论是在几十年前发展起来的,但是自从感知器概念演变成神经网络理论以来,最近就已经创建了不同的体系结构来解决不同的数据问题。 这部分是由于在现实生活中的数据问题(例如文本,音频和图像)中可以找到不同的数据格式。
本章的目的是深入探讨神经网络及其主要优点和缺点的主题,以便您了解何时以及如何使用它们。 然后,我们将解释最流行的神经网络体系结构的构建块:**人工神经网络** **ANNs** ),**卷积神经网络****CNN [** )和**递归神经网络****RNN** )。
本章的目的是深入探讨神经网络及其主要优点和缺点的主题,以便您了解何时以及如何使用它们。 然后,我们将解释最流行的神经网络体系结构的构建块:**人工神经网络****ANNs**),**卷积神经网络****CNN [**)和**递归神经网络****RNN**)。
接下来,将通过解决现实生活中的回归问题来说明建立有效模型的过程。 这包括准备要馈送到神经网络的数据(也称为数据预处理),定义要使用的神经网络架构以及评估模型的性能,目的是确定如何对其进行改进以实现最佳性能。 最佳解决方案。
......@@ -282,7 +282,7 @@ Rosenblatt 还介绍了权重的概念( *w* 1, *w* 2,…, *w* n),这
## 卷积神经网络简介
**卷积神经网络** **CNN** )主要用于计算机视觉领域,在最近几十年中,机器达到的准确性水平超过了人类的能力。
**卷积神经网络****CNN**)主要用于计算机视觉领域,在最近几十年中,机器达到的准确性水平超过了人类的能力。
CNN 创建的模型使用神经元的子组来识别图像的不同方面。 这些组应该能够相互通信,以便它们可以一起形成完整的图像。
......@@ -356,7 +356,7 @@ CNN 创建的模型使用神经元的子组来识别图像的不同方面。 这
前述神经网络(ANN 和 CNN)的主要局限性在于,它们只能通过考虑当前事件(正在处理的输入)来学习,而不会考虑先前或后续事件,因此考虑到我们人类并不认为这是不便的 那样。 例如,当阅读一本书时,通过考虑上一段或更多段中的上下文,您可以更好地理解每个句子。
因此,并考虑到神经网络旨在优化传统上由人类完成的多个过程这一事实,至关重要的是考虑一个能够考虑输入和输出序列的网络,因此**递归神经网络** **RNN** )。 它们是一种强大的神经网络,可以通过使用内部存储器找到复杂数据问题的解决方案。
因此,并考虑到神经网络旨在优化传统上由人类完成的多个过程这一事实,至关重要的是考虑一个能够考虑输入和输出序列的网络,因此**递归神经网络****RNN**)。 它们是一种强大的神经网络,可以通过使用内部存储器找到复杂数据问题的解决方案。
简而言之,这些网络中包含循环,即使在处理后续的一组信息时,这些循环也可以使信息在其内存中保留更长的时间。 这意味着 RNN 中的感知器不仅将输出传递到下一个感知器,而且还保留了一些信息给自己,这对于分析下一信息很有用。 这种内存保留功能使他们可以非常准确地预测下一步。
......@@ -397,7 +397,7 @@ RNN 允许以输入序列,输出序列或什至同时以两种形式处理数
## 处理混乱数据
该任务主要包括执行**探索性数据分析** **EDA** ),以了解可用数据,以及检测可能影响模型开发的潜在问题。
该任务主要包括执行**探索性数据分析****EDA**),以了解可用数据,以及检测可能影响模型开发的潜在问题。
EDA 流程很有用,因为它有助于开发人员发现对于定义操作过程至关重要的信息。 此处说明此信息:
......@@ -782,7 +782,7 @@ PyTorch 的构建考虑了该领域许多开发人员的意见,其优点是可
在随后的章节中将解释用于其他类型的体系结构(例如 CNN 和 RNN)的模块。
* **线性层**:这将线性变换应用于输入数据,同时保持内部张量来容纳权重和偏差。 它接收输入样本的大小(数据集的要素数量或上一层的输出数量),输出样本的大小(当前层中的单位数量,即输出数量) ),以及是否在训练过程中使用偏差张量(默认设置为 **True** )作为参数。
* **线性层**:这将线性变换应用于输入数据,同时保持内部张量来容纳权重和偏差。 它接收输入样本的大小(数据集的要素数量或上一层的输出数量),输出样本的大小(当前层中的单位数量,即输出数量) ),以及是否在训练过程中使用偏差张量(默认设置为 **True**)作为参数。
* **Activation functions**: They receive the output from the linear layer as input in order to break the linearity. There are several activation functions, as explained previously, that can be added to the sequential container. The most commonly used ones are explained here:
**ReLU** :这将校正后的线性单位函数应用于包含输入数据的张量。 它接受的唯一参数是是否应在原位进行操作,默认情况下将其设置为 **False** 。
......@@ -898,7 +898,7 @@ PyTorch 的构建考虑了该领域许多开发人员的意见,其优点是可
基本事实:60.0 预测:69.5818099975586
如您所见,地面真实值( **60** )非常接近预测值( **69.58** )。
如您所见,地面真实值(**60**)非常接近预测值(**69.58**)。
注意
......
......@@ -2,7 +2,7 @@
总览
在本章中,我们将看一个银行业中的实际例子,以解决分类数据问题。 您将学习如何利用 PyTorch 的自定义模块来定义网络体系结构并训练模型。 您还将探索错误分析的概念,以提高模型的性能。 最后,您将研究部署模型的不同方法,以便将来使用它。 到本章结束时,您将对该过程有深刻的了解,以便可以使用**深层神经网络** **DNN** )在 PyTorch 中。
在本章中,我们将看一个银行业中的实际例子,以解决分类数据问题。 您将学习如何利用 PyTorch 的自定义模块来定义网络体系结构并训练模型。 您还将探索错误分析的概念,以提高模型的性能。 最后,您将研究部署模型的不同方法,以便将来使用它。 到本章结束时,您将对该过程有深刻的了解,以便可以使用**深层神经网络****DNN**)在 PyTorch 中。
# 简介
......@@ -12,7 +12,7 @@
利用这种模型的一个领域是银行业务。 这主要是由于他们需要根据人口统计数据预测未来的行为,以及确保长期盈利的主要目标。 银行业的一些用途包括评估贷款申请,信用卡批准,预测股票市场价格以及通过分析行为来检测欺诈。
本章将重点介绍使用深层**人工神经网络** **ANN** )解决分类库问题的步骤,并遵循建立有效模型所需的所有步骤:数据探索,数据准备, 架构定义和模型训练,模型微调,错误分析,以及最后部署最终模型。
本章将重点介绍使用深层**人工神经网络****ANN**)解决分类库问题的步骤,并遵循建立有效模型所需的所有步骤:数据探索,数据准备, 架构定义和模型训练,模型微调,错误分析,以及最后部署最终模型。
注意
......@@ -66,7 +66,7 @@
## 探索数据集
在以下各节中,我们将重点关注使用**信用卡客户默认值** **DCCC** )数据集解决与信用卡付款有关的分类任务,该数据集先前是从 UC Irvine 下载的 储存库站点。
在以下各节中,我们将重点关注使用**信用卡客户默认值****DCCC**)数据集解决与信用卡付款有关的分类任务,该数据集先前是从 UC Irvine 下载的 储存库站点。
本节的主要思想是清楚说明数据问题的内容,原因和方式,这将有助于确定研究目的和评估指标。 此外,我们将详细分析手头的数据,以识别数据准备过程中所需的一些步骤(例如,将定性特征转换为其数值表示形式)。
......@@ -298,7 +298,7 @@ data_resampled = pd.concat([data_no,over_sampling],\
考虑到**婚姻****教育**都是顺序特征,这意味着它们遵循顺序或等级; 选择重新缩放方法时,请确保保持顺序。
为了便于为即将进行的活动使用准备好的数据集,将特征( **X** )和目标( **y** )矩阵连接到一个 Pandas DataFrame 中, 使用以下代码将其保存到 CSV 文件中:
为了便于为即将进行的活动使用准备好的数据集,将特征(**X**)和目标(**y**)矩阵连接到一个 Pandas DataFrame 中, 使用以下代码将其保存到 CSV 文件中:
final_data = pd.concat([X,y],axis = 1)
......@@ -316,7 +316,7 @@ final_data.to_csv(“ dccc_prepared.csv”,index = False)
*活动 2.02* 中所示,*从*第 2 章*和*神经网络的构建模块*开发用于回归问题*的深度学习解决方案 ],为回归任务而构建的神经网络使用输出作为连续值,这就是为什么在输出层不具有激活函数且仅具有一个输出节点(实际值)的原因,就像在构建用于预测房价的模型的情况下一样 根据房屋和邻里的特征
鉴于此,要测量与此类模型相关的性能,您应该计算地面真实值和预测值之间的差,例如,计算 125.3(预测)与 126.38(地面真实值)之间的距离 。 如前所述,有许多方法可以测量此差异,例如**均方误差** **MSE** ),或另一种变化是**均方根误差****RMSE** ),是最常用的指标。
鉴于此,要测量与此类模型相关的性能,您应该计算地面真实值和预测值之间的差,例如,计算 125.3(预测)与 126.38(地面真实值)之间的距离 。 如前所述,有许多方法可以测量此差异,例如**均方误差****MSE**),或另一种变化是**均方根误差****RMSE**),是最常用的指标。
与此相反,分类任务的输出是属于每个输出标签或类的某些输入要素集合的概率,这是使用 Sigmoid(用于二进制分类)或 softmax(用于多类分类)完成的 )激活功能。 对于二元分类任务,输出层应包含一个(对于 Sigmoid)或两个(对于 softmax)输出节点,而对于多类分类任务,输出层应等于类标签的数量。
......@@ -472,7 +472,7 @@ o = F.softmax(self.linear2(z))
重要的是要提到,交叉熵损失函数要求网络的输出是原始的(在通过使用 **softmax** 激活函数获得概率之前),这就是为什么通常会发现 用于分类问题的神经网络体系结构,而没有针对输出层的激活功能。 此外,为了通过这种方法进行预测,必须在训练模型后将 **softmax** 激活函数应用于网络的输出。
解决此问题的另一种方法是对输出层使用 **log_softmax** 激活函数。 这样,损失函数可以定义为负对数似然损失( **nn.NLLLoss** )。 最后,可以通过从网络输出中获取指数来获得属于每个类别标签的一组要素的概率。 这是本章活动中将使用的方法。
解决此问题的另一种方法是对输出层使用 **log_softmax** 激活函数。 这样,损失函数可以定义为负对数似然损失(**nn.NLLLoss**)。 最后,可以通过从网络输出中获取指数来获得属于每个类别标签的一组要素的概率。 这是本章活动中将使用的方法。
一旦定义了模型体系结构,下一步将是对负责根据训练数据进行模型训练的部分进行编码,并在训练和验证集上测量其性能。
......@@ -730,7 +730,7 @@ batch_size = 100
验证设置误差(VSE)= 1 – 0.71 = 0.29
用作两组精度的值( **0.716** 和 **0.71** )是在*活动 3.01* ,*建立 ANN* :
用作两组精度的值(**0.716** 和 **0.71**)是在*活动 3.01* ,*建立 ANN* :
高偏置= TSE – BE = 0.134
......@@ -834,7 +834,7 @@ batch_size = 100
鉴于此,PyTorch 最近提出了一种简单的方法,使用户可以享受两全其美的好处。 尽管他们可以继续使用 Pythonic 进行编程,但是现在可以将模型序列化为可以从 C ++加载和执行的表示形式,而无需依赖 Python。 这种表示称为 TorchScript。
通过 PyTorch 的**即时** **JIT** )编译器模块可以将 PyTorch 模型转换为 TorchScript。 这是通过将模型以及示例输入通过 **torch.jit.trace()**函数传递来实现的,如下所示:
通过 PyTorch 的**即时****JIT**)编译器模块可以将 PyTorch 模型转换为 TorchScript。 这是通过将模型以及示例输入通过 **torch.jit.trace()**函数传递来实现的,如下所示:
traced_script = torch.jit.trace(模型,示例)
......@@ -846,7 +846,7 @@ traced_script = torch.jit.trace(模型,示例)
## 建立 API
**应用程序编程接口** **API** )包含一个专门创建供其他程序使用的程序(与网站或界面相反,后者是由人为操纵的) 。 据此,API 在创建要在生产环境中使用的深度学习解决方案时使用,因为它们允许通过其他方式(例如网站)访问从运行模型(例如预测)获得的信息。
**应用程序编程接口****API**)包含一个专门创建供其他程序使用的程序(与网站或界面相反,后者是由人为操纵的) 。 据此,API 在创建要在生产环境中使用的深度学习解决方案时使用,因为它们允许通过其他方式(例如网站)访问从运行模型(例如预测)获得的信息。
在本节中,我们将探讨 Web API(通过 Internet 与其他程序共享信息的 API)的创建。 该 API 的功能是加载先前保存的模型并根据一组给定的功能进行预测。 向 API 发出 HTTP 请求的程序可以访问此预测。
......
......@@ -2,7 +2,7 @@
总览
本章介绍了训练**卷积神经网络** **CNN** )的过程-也就是说,发生在不同层的计算通常可以在 CNN 体系结构中找到,其目的 培训过程。 您将学习如何通过对模型应用数据扩充和批处理规范化来改善计算机视觉模型的性能。 到本章末,您将能够使用 CNN 通过 PyTorch 解决图像分类问题。 这将是在计算机视觉领域实施其他解决方案的起点。
本章介绍了训练**卷积神经网络****CNN**)的过程-也就是说,发生在不同层的计算通常可以在 CNN 体系结构中找到,其目的 培训过程。 您将学习如何通过对模型应用数据扩充和批处理规范化来改善计算机视觉模型的性能。 到本章末,您将能够使用 CNN 通过 PyTorch 解决图像分类问题。 这将是在计算机视觉领域实施其他解决方案的起点。
# 简介
......@@ -402,7 +402,7 @@ x = self.pool1(x)
返回 x
可以看出,在 **__init__** 方法中将池化层( **MaxPool2d** )添加到网络体系结构中。 在这里,进入最大池层的参数从左到右分别是过滤器( **2** )和步幅( **2** )的大小。 接下来,更新了**正向**方法,以使信息通过新的合并层。
可以看出,在 **__init__** 方法中将池化层(**MaxPool2d**)添加到网络体系结构中。 在这里,进入最大池层的参数从左到右分别是过滤器(**2**)和步幅(**2**)的大小。 接下来,更新了**正向**方法,以使信息通过新的合并层。
同样,这里显示了一种同样有效的方法,其中使用了自定义模块和**顺序**容器:
......@@ -578,7 +578,7 @@ test_loader = torch.utils.data.DataLoader(test_data,\
batch_size =批量大小)
**DataLoader()**函数用于为每组数据批量加载图像。 首先,将包含集合的变量作为参数传递,然后定义批处理大小。 最后,我们在上一步中创建的采样器用于确保随机创建每次迭代中使用的批次,这有助于提高模型的性能。 此函数的结果变量( **train_loader****dev_loader****test_loader** )将分别包含功能部件和目标的值。
**DataLoader()**函数用于为每组数据批量加载图像。 首先,将包含集合的变量作为参数传递,然后定义批处理大小。 最后,我们在上一步中创建的采样器用于确保随机创建每次迭代中使用的批次,这有助于提高模型的性能。 此函数的结果变量(**train_loader****dev_loader****test_loader**)将分别包含功能部件和目标的值。
注意
......
......@@ -8,7 +8,7 @@
上一章介绍了传统 CNN 的不同构建基块,以及一些改进其性能并减少培训时间的技术。 此处说明的体系结构虽然很典型,但并不是一成不变的,并且出现了许多 CNN 体系结构来解决不同的数据问题,这在计算机视觉领域最为普遍。
这些体系结构的配置和学习任务各不相同。 如今,由牛津机器人学院的 Karen Simonyan 和 Andrew Zisserman 创建的**视觉几何组** **VGG** )体系结构是一种非常流行的方法。 它是为对象识别而开发的,并由于网络所依赖的大量参数而达到了最先进的性能。 它在数据科学家中受欢迎的主要原因之一是训练后的模型的参数(权重和偏差)的可用性,这使研究人员无需训练即可使用它,并且模型具有出色的性能。
这些体系结构的配置和学习任务各不相同。 如今,由牛津机器人学院的 Karen Simonyan 和 Andrew Zisserman 创建的**视觉几何组****VGG**)体系结构是一种非常流行的方法。 它是为对象识别而开发的,并由于网络所依赖的大量参数而达到了最先进的性能。 它在数据科学家中受欢迎的主要原因之一是训练后的模型的参数(权重和偏差)的可用性,这使研究人员无需训练即可使用它,并且模型具有出色的性能。
在本章中,我们将使用这种经过预训练的模型来解决计算机视觉问题,该问题由于专门用于共享图像的社交媒体渠道的普及而特别著名。 它包括执行样式转换,以便使用一个图像的样式(颜色和纹理)以及另一个图像的内容(形状和对象)创建新图像。
......@@ -95,7 +95,7 @@ VGG-19 是由 19 层组成的 CNN。 它使用 ImageNet 数据库中的数百万
执行样式转换的第一步包括加载内容和样式图像。 在此步骤中,将处理基本的预处理,其中图像必须具有相同的大小(最好是用于训练预训练模型的图像的大小),该大小也将等于输出图像的大小。 此外,图像会转换为 PyTorch 张量,并且可以根据需要进行归一化。
最好始终显示已加载的图像,以确保它们符合要求。 考虑到此时图像已被转换为张量并进行了规范化,应该克隆张量,并且需要执行一组新的转换,以便我们可以使用 Matplotlib 显示它们。 这意味着张量应转换回 **Python Imaging Library****PIL** )图像,并且必须还原规范化过程,如以下示例所示:
最好始终显示已加载的图像,以确保它们符合要求。 考虑到此时图像已被转换为张量并进行了规范化,应该克隆张量,并且需要执行一组新的转换,以便我们可以使用 Matplotlib 显示它们。 这意味着张量应转换回 **Python Imaging Library****PIL**)图像,并且必须还原规范化过程,如以下示例所示:
图片= tensor.clone()
......@@ -492,7 +492,7 @@ features [layers [index]] = x
内容丢失功能背后的主要思想是最小化内容图像和目标图像之间的距离,以便后者在内容方面与前者高度相似。
内容损失可以计算为相关层的内容和目标图像的特征图之间的均方差( **conv4_2** ),可以使用以下公式实现:
内容损失可以计算为相关层的内容和目标图像的特征图之间的均方差(**conv4_2**),可以使用以下公式实现:
![Figure 5.6: The content loss function ](img/B15778_05_06.jpg)
......@@ -506,7 +506,7 @@ features [layers [index]] = x
必须使用循环的**为所有相关层(在本例中为五层)计算样式损失。 这将导致损失函数考虑来自两个图像的简单和复杂样式表示。**
此外,优良作法是将这些层中每个层的样式表示权衡在 0 到 1 之间,以便比提取非常复杂特征的层更多地强调提取更大和更简单特征的层。 这是通过为较早的图层( **conv1_1****conv2_1** )赋予更高的权重来实现的,这些图层从样式图像中提取了更多的通用特征。
此外,优良作法是将这些层中每个层的样式表示权衡在 0 到 1 之间,以便比提取非常复杂特征的层更多地强调提取更大和更简单特征的层。 这是通过为较早的图层(**conv1_1****conv2_1**)赋予更高的权重来实现的,这些图层从样式图像中提取了更多的通用特征。
对于每个相关层,可以使用以下方程式来计算样式损失:
......@@ -690,7 +690,7 @@ features [layers [index]] = x
2. 指定要对输入图像执行的转换。 确保将它们调整为相同的大小,将它们转换为张量,然后对其进行规范化。
3. 定义图像加载器功能。 这应该打开图像并对其进行转换。 调用图像加载器功能加载两个输入图像。
4. 为了能够显示图像,请定义一组新的转换,以恢复图像的规范化并将张量转换为 PIL 图像。
5. 创建一个函数( **tensor2image** ),该函数能够对张量执行先前的转换。 调用两个图像的函数并绘制结果。
5. 创建一个函数(**tensor2image**),该函数能够对张量执行先前的转换。 调用两个图像的函数并绘制结果。
6. 加载 VGG-19 模型。
7. 创建一个字典,将相关层(键)的索引映射到名称(值)。 然后,创建一个函数以提取相关图层的特征图。 使用它们提取两个输入图像的特征。
8. 计算样式特征的克矩阵。 另外,创建初始目标图像。
......
......@@ -2,7 +2,7 @@
总览
本章扩展了递归神经网络的概念。 您将了解**递归神经网络** **RNN** )的学习过程以及它们如何存储内存。 本章将介绍**长短期存储器****LSTM** )网络体系结构,该体系结构使用短期和长期存储器来解决数据序列中的数据问题。 在本章的最后,您将牢固地掌握 RNN 以及如何解决**自然语言处理****NLP** )数据问题。
本章扩展了递归神经网络的概念。 您将了解**递归神经网络****RNN**)的学习过程以及它们如何存储内存。 本章将介绍**长短期存储器****LSTM**)网络体系结构,该体系结构使用短期和长期存储器来解决数据序列中的数据问题。 在本章的最后,您将牢固地掌握 RNN 以及如何解决**自然语言处理****NLP**)数据问题。
# 简介
......@@ -226,7 +226,7 @@ out = self.output(输出)
返回,隐藏
在这里,必须将循环层定义为采用输入中预期特征数的参数( **input_size** ); 由用户定义的处于隐藏状态的功能部件数( **hidden_​​size** ); 和循环层数( **num_layers** )。
在这里,必须将循环层定义为采用输入中预期特征数的参数(**input_size**); 由用户定义的处于隐藏状态的功能部件数(**hidden_​​size**); 和循环层数(**num_layers**)。
注意
......@@ -332,7 +332,7 @@ Optimizer.step()
此处, *STM* t-1 是指从先前的预测得出的短期记忆, *W**b* 是权重和偏差,并且[ *E* t 表示当前事件。
* **忘记门**:长期存储(也称为单元状态)进入忘记门,其中删除了一些信息。 这是通过将长期记忆和遗忘因子相乘来实现的。 要计算遗忘因子,请将短期记忆和当前事件通过线性函数和激活函数( **sigmoid** )传递:
* **忘记门**:长期存储(也称为单元状态)进入忘记门,其中删除了一些信息。 这是通过将长期记忆和遗忘因子相乘来实现的。 要计算遗忘因子,请将短期记忆和当前事件通过线性函数和激活函数(**sigmoid**)传递:
![Figure 6.15: The mathematical computations that occur in the forget gate ](img/B15778_06_15.jpg)
......@@ -800,7 +800,7 @@ top = top.numpy()[0]
这意味着,尽管人类能够理解说“他昨晚着火了,真是个好游戏!”的句子。 指某种运动的运动员的表现,计算机会从字面意义上理解它-意味着它将把它解释为昨晚确实起火的人。
NLP 是**人工智能** **AI** )的子字段,它通过使计算机能够理解人类语言来工作。 尽管在某些情况下人类可能总是会做得更好,但是 NLP 的主要目标是通过使计算机理解人类语言来使计算机与人类更接近。
NLP 是**人工智能****AI**)的子字段,它通过使计算机能够理解人类语言来工作。 尽管在某些情况下人类可能总是会做得更好,但是 NLP 的主要目标是通过使计算机理解人类语言来使计算机与人类更接近。
这个想法是创建专注于特定领域的模型,例如机器翻译和文本摘要。 任务的这种专业化有助于计算机开发一种模型,该模型能够解决现实生活中的数据问题,而无需一次处理所有复杂的人类语言。
......
......@@ -1130,7 +1130,7 @@
返回 x
前面的代码段包含一个定义了网络体系结构的类( **__init__** 方法),以及在信息正向传递过程中所遵循的步骤(**正向** 方法)。
前面的代码段包含一个定义了网络体系结构的类(**__init__** 方法),以及在信息正向传递过程中所遵循的步骤(**正向** 方法)。
7. Define all of the parameters that are required to train your model. Set the number of epochs to **50**:
......@@ -1496,7 +1496,7 @@
2. Change the definition of the **transform** variable so that it includes, in addition to normalizing and converting the data into tensors, the following transformations:
对于训练/验证集,请使用 **RandomHorizo​​ntalFlip** 函数,其概率为 50%( **0.5** ),并使用 **RandomGrayscale** 函数,其概率为 10%( **0.1** )。
对于训练/验证集,请使用 **RandomHorizo​​ntalFlip** 函数,其概率为 50%(**0.5**),并使用 **RandomGrayscale** 函数,其概率为 10%(**0.1**)。
对于测试集,请勿添加任何其他转换:
......
......@@ -55,7 +55,7 @@
机器学习可以分为两类:
* **参数**:使用给定训练数据(例如逻辑回归,支持向量机和神经网络)的算法调整数学或统计模型中的参数,即可完成学习。
* **非参数**:通过存储训练数据(记忆)并执行一些降维映射来完成学习,例如, **k 最近邻** **kNN** )和决策 树木。
* **非参数**:通过存储训练数据(记忆)并执行一些降维映射来完成学习,例如, **k 最近邻****kNN**)和决策 树木。
由于学习参数的要求,参数方法通常需要大量数据。 顺便说一句,如果我们有大量的数据集,则最好使用参数方法,因为非参数方法通常需要存储数据并针对每个查询对其进行处理。
......
......@@ -129,9 +129,9 @@ Logistic 回归是**判别式分类器**的一种形式,在判别式分类器
要了解三重态损失函数,首先,我们需要成对定义数据点,如下所示:
* **锚点** **A** ):主数据点
* **正** **P** ):类似于锚点的数据点
* **负数** **N** ):与锚点不同的数据点
* **锚点****A**):主数据点
* **正****P**):类似于锚点的数据点
* **负数****N**):与锚点不同的数据点
考虑到 <sub>![](img/e9178178-fb66-4068-9c95-136daa792b82.png)</sub> 是暹罗网络的输出,理想情况下,我们可以假设以下内容:
......@@ -232,7 +232,7 @@ VGG16 和 Inception Net 是深度学习架构,它们在 ImageNet 数据集上
* **问题 1:**即使分类策略 <sub>![](img/17dc3f3b-c6a5-4351-b438-0bea4fdd2273.png)</sub>已设定条件,训练集图像的嵌入也彼此独立,而不认为它们是支持集的一部分 在支持集上。
**解决方案:**匹配网络使用**双向长短期存储器** **LSTM** )在整个支持范围内启用每个数据点的编码 组。 通常,LSTM 用于理解数据序列,因为它们能够使用其单元内部的门保持整个数据的上下文。 同样,使用双向 LSTM 可以更好地理解数据序列。 匹配网络使用双向 LSTM 来确保支持集中一幅图像的嵌入将具有所有其他图像嵌入的上下文。
**解决方案:**匹配网络使用**双向长短期存储器****LSTM**)在整个支持范围内启用每个数据点的编码 组。 通常,LSTM 用于理解数据序列,因为它们能够使用其单元内部的门保持整个数据的上下文。 同样,使用双向 LSTM 可以更好地理解数据序列。 匹配网络使用双向 LSTM 来确保支持集中一幅图像的嵌入将具有所有其他图像嵌入的上下文。
* **问题 2:**如果要计算两个数据点之间的相似度,首先需要将它们放入相同的嵌入空间。 因此,支持集 *S* 必须能够有助于提取测试图像嵌入。
......
......@@ -22,7 +22,7 @@
* 神经网络仅接受固定大小的输入,这在输入长度可变的现实生活中不会有太大帮助。
* 神经网络无法将值绑定到我们已知的两个信息系统(人脑和计算机)大量使用的数据结构中的特定位置。 简单来说,在神经网络中,我们无法将特定的权重设置到特定的位置。
第一个问题可以通过在各种任务上实现最先进性能的 RNN 来解决。 通过查看**神经图灵机** **NTM** )可以解决第二个问题。 在本节中,我们将讨论 NTM 的总体体系结构,这是理解**记忆增强神经网络****MANN** )的基础,这些神经网络修改了 NMT 的体系结构并使之适用于一个 镜头的学习任务。
第一个问题可以通过在各种任务上实现最先进性能的 RNN 来解决。 通过查看**神经图灵机****NTM**)可以解决第二个问题。 在本节中,我们将讨论 NTM 的总体体系结构,这是理解**记忆增强神经网络****MANN**)的基础,这些神经网络修改了 NMT 的体系结构并使之适用于一个 镜头的学习任务。
# NTM 的体系结构
......@@ -80,13 +80,13 @@
![](img/f6a0bbfd-bfe5-4d2d-8d0e-015fc55c1642.png)
所有操作(包括读取,写入和寻址的四个阶段)都是差分的,因此可以使用反向传播和任何基于梯度下降的优化器从头到尾训练整个 NMT 模型。 控制器是一个神经网络,可以是前馈网络,也可以是递归神经网络,例如**长短期记忆** **LSTM** )。 它已显示在各种算法任务(例如复制任务)上均具有良好的性能,这些任务将在本章的稍后部分实现。
所有操作(包括读取,写入和寻址的四个阶段)都是差分的,因此可以使用反向传播和任何基于梯度下降的优化器从头到尾训练整个 NMT 模型。 控制器是一个神经网络,可以是前馈网络,也可以是递归神经网络,例如**长短期记忆****LSTM**)。 它已显示在各种算法任务(例如复制任务)上均具有良好的性能,这些任务将在本章的稍后部分实现。
既然我们了解了 NTM 的体系结构和工作原理,我们就可以开始研究 MANN,这是对 NMT 的修改,并且经过修改可以在一次学习中表现出色。
# 记忆增强神经网络
MANN 的目标是在一次学习任务中表现出色。 正如我们之前阅读的,NMT 控制器同时使用基于内容的寻址和基于位置的寻址。 另一方面,MANN 控制器仅使用基于内容的寻址。 有两个原因。 原因之一是一次学习任务不需要基于位置的寻址。 在此任务中,对于给定的输入,控制器可能只需要执行两个操作,并且这两个操作都与内容有关,而与位置无关。 当输入与先前看到的输入非常相似时,将采取一种措施,在这种情况下,我们可以更新内存的当前内容。 当当前输入与以前看到的输入不相似时,将采取另一种操作,在这种情况下,我们不想覆盖最近的信息。 相反,我们写到使用最少的内存位置。 在这种情况下,该存储模块称为**最近最少使用的访问** **LRUA** )模块。
MANN 的目标是在一次学习任务中表现出色。 正如我们之前阅读的,NMT 控制器同时使用基于内容的寻址和基于位置的寻址。 另一方面,MANN 控制器仅使用基于内容的寻址。 有两个原因。 原因之一是一次学习任务不需要基于位置的寻址。 在此任务中,对于给定的输入,控制器可能只需要执行两个操作,并且这两个操作都与内容有关,而与位置无关。 当输入与先前看到的输入非常相似时,将采取一种措施,在这种情况下,我们可以更新内存的当前内容。 当当前输入与以前看到的输入不相似时,将采取另一种操作,在这种情况下,我们不想覆盖最近的信息。 相反,我们写到使用最少的内存位置。 在这种情况下,该存储模块称为**最近最少使用的访问****LRUA**)模块。
# 阅读
......
......@@ -30,7 +30,7 @@
# 了解模型不可知的元学习
**与模型无关的元学习** **MAML** )尝试通过为每个新任务提供更好的权重初始化来解决梯度下降方法的缺点。 这种方法的关键思想是使用不同的数据集训练模型的参数。 当将其用于新任务时,该模型通过使用已初始化的参数通过一个或多个渐变步骤来微调体系结构,从而提供更好的性能。 从特征学习的角度来看,这种训练模型参数以使一些梯度步骤可以优化损失函数的方法也可以从构建内部表示的角度来看。 在这种方法中,我们选择通用模型的体系结构,以便可以将其用于各种任务。 MAML 的主要贡献是一种与模型和任务无关的简单快速学习算法。
**与模型无关的元学习****MAML**)尝试通过为每个新任务提供更好的权重初始化来解决梯度下降方法的缺点。 这种方法的关键思想是使用不同的数据集训练模型的参数。 当将其用于新任务时,该模型通过使用已初始化的参数通过一个或多个渐变步骤来微调体系结构,从而提供更好的性能。 从特征学习的角度来看,这种训练模型参数以使一些梯度步骤可以优化损失函数的方法也可以从构建内部表示的角度来看。 在这种方法中,我们选择通用模型的体系结构,以便可以将其用于各种任务。 MAML 的主要贡献是一种与模型和任务无关的简单快速学习算法。
# 了解 MAML 背后的逻辑
......@@ -47,8 +47,8 @@ MAML 的目的是为模型的参数提供良好的初始化,从而以较少的
要了解 MAML 的一次学习/几次学习,首先,我们需要学习某些术语。 这些类似于我们在匹配网络时学到的知识:
* **T** :这表示各种任务-例如,我们希望我们的模型学习识别猫,狗,马等,以及 **<sub>![](img/4fff6697-3b20-4978-a476-110d0d1434ed.png) </sub>** 代表一种识别猫的训练模型。 在此, <sub>![](img/8ea63037-a58c-442f-92f2-9d07e3a87639.png)</sub>
* **P****T** ):这表示所有任务之间的概率分布。 我们的目标是通过 MAML 学习 *P(T)*
* **L****T** ):这表示任务生成的损失函数 *T* 数据点。 对于分类,我们可以使用交叉熵损失:
* **P****T**):这表示所有任务之间的概率分布。 我们的目标是通过 MAML 学习 *P(T)*
* **L****T**):这表示任务生成的损失函数 *T* 数据点。 对于分类,我们可以使用交叉熵损失:
![](img/db9617c8-2ef5-4a11-8dec-bf17f01a1a38.png)
......@@ -76,7 +76,7 @@ MAML 的目的是为模型的参数提供良好的初始化,从而以较少的
结束`repeat`循环。
对于 Omniglot 和 mini-ImageNet 数据集,MAML 能够实现比暹罗网络,匹配网络和内存增强神经网络更好的性能。 由于事实证明 MAML 的性能更好,因此还有许多其他任务可以使用 MAML。 让我们来看一个这样的变体-**域自适应元学习** **DAML** )。
对于 Omniglot 和 mini-ImageNet 数据集,MAML 能够实现比暹罗网络,匹配网络和内存增强神经网络更好的性能。 由于事实证明 MAML 的性能更好,因此还有许多其他任务可以使用 MAML。 让我们来看一个这样的变体-**域自适应元学习****DAML**)。
# MAML 应用程序–领域自适应元学习
......@@ -99,7 +99,7 @@ LSTM 元学习器的关键思想是训练 LSTM 单元以*学习我们原始任
![](img/7f93507c-8eba-4a42-a6f5-8eb229b65be1.png)
LSTM 在各种门的帮助下存储信息历史记录,如上图所示。 我们还知道,**随机梯度下降** **SGD** )有多种变化形式,例如动量,RMSprop,Adam 等,它们实质上存储了有关过去学习的信息(在 渐变形式)以实现更好的优化。 因此,从逻辑上讲,可以将 LSTM 单元视为一种更好的优化策略,该策略使模型能够捕获特定任务的短期知识和公共长期知识。
LSTM 在各种门的帮助下存储信息历史记录,如上图所示。 我们还知道,**随机梯度下降****SGD**)有多种变化形式,例如动量,RMSprop,Adam 等,它们实质上存储了有关过去学习的信息(在 渐变形式)以实现更好的优化。 因此,从逻辑上讲,可以将 LSTM 单元视为一种更好的优化策略,该策略使模型能够捕获特定任务的短期知识和公共长期知识。
在下一部分中,我们将了解体系结构,LSTM 单元背后的逻辑以及权重更新算法。
......@@ -145,10 +145,10 @@ LSTM 在各种门的帮助下存储信息历史记录,如上图所示。 我
要开始理解 LSTM 元学习器,首先,我们需要了解某些术语:
* **基础学习者** **M** ):具有特定任务的主要目标,带有参数 <sub>![](img/3a869193-6666-428a-9b6a-c61e430a0a72.png)</sub> -例如,用于识别猫的分类器
* **元学习器** **R** ):LSTM 单元,带有参数,![](img/b72b74c6-cdc3-4fc1-bd73-fa86f86f29ad.png)
* **数据点** **X,Y** ):从 <sub>![](img/413e3fb6-3c9b-41de-942d-df2693286095.png)</sub> 采样的数据点
* **损失** **L** ):用于调整主要任务特定目标的损失函数,例如,二进制交叉熵损失
* **基础学习者****M**):具有特定任务的主要目标,带有参数 <sub>![](img/3a869193-6666-428a-9b6a-c61e430a0a72.png)</sub> -例如,用于识别猫的分类器
* **元学习器****R**):LSTM 单元,带有参数,![](img/b72b74c6-cdc3-4fc1-bd73-fa86f86f29ad.png)
* **数据点****X,Y**):从 <sub>![](img/413e3fb6-3c9b-41de-942d-df2693286095.png)</sub> 采样的数据点
* **损失****L**):用于调整主要任务特定目标的损失函数,例如,二进制交叉熵损失
让我们开始逐步学习 LSTM 元学习器算法:
......
......@@ -36,7 +36,7 @@
![](img/d5a1d317-b037-40b4-b612-10d2e168e328.png)
在非概率视图(也称为**期望最大化框架**)中,右侧等式中的术语 <sub>![](img/b2bc2505-5ae0-48b6-8e48-9e6b6f33452f.png)</sub><sub>![](img/eaf61a80-dcfc-4e84-9c97-4a61a0f3cf8e.png)</sub> ,分别成为损失函数和正则化。 在给定的概率设置中,相同的术语称为**可能性**(数据中,给定 ***θ*** )和**在先的**(先验信念) 在参数空间中)。 这种概率优化称为**最大 A ** **后验**( **MAP** )估计,因为我们正在从数据中最大化模型参数的后验分布。 但是,贝叶斯统计不相信 MAP 估计,因为它可能给我们有关最终学习参数的错误结果。 一个不同的数据集很有可能会给我们完全不同的学习参数,这些参数在参数空间中与从原始数据集中学习的参数相距甚远。 这就是贝叶斯学习试图解决的问题。 它显式地模拟参数空间中的不确定性。
在非概率视图(也称为**期望最大化框架**)中,右侧等式中的术语 <sub>![](img/b2bc2505-5ae0-48b6-8e48-9e6b6f33452f.png)</sub><sub>![](img/eaf61a80-dcfc-4e84-9c97-4a61a0f3cf8e.png)</sub> ,分别成为损失函数和正则化。 在给定的概率设置中,相同的术语称为**可能性**(数据中,给定 ***θ***)和**在先的**(先验信念) 在参数空间中)。 这种概率优化称为**最大 A ** **后验**(**MAP**)估计,因为我们正在从数据中最大化模型参数的后验分布。 但是,贝叶斯统计不相信 MAP 估计,因为它可能给我们有关最终学习参数的错误结果。 一个不同的数据集很有可能会给我们完全不同的学习参数,这些参数在参数空间中与从原始数据集中学习的参数相距甚远。 这就是贝叶斯学习试图解决的问题。 它显式地模拟参数空间中的不确定性。
考虑给定左撇子和右撇子人数据集的参数分布示例。 下图显示了分布:
......@@ -89,7 +89,7 @@
# 贝叶斯程序学习
**贝叶斯程序学习** **BPL** )进行三个步骤:
**贝叶斯程序学习****BPL**)进行三个步骤:
1. 第一步是生成模型,BPL 通过从*模型*部分的图的 A 侧部分组成(请参考 **iii)**来学习新概念,以学习新概念) ,下图 A 侧的子部分(请参见 **ii)**和它们在下图 A 侧的空间关系(请参见 **iv)**。 例如,它可以从零件和子零件中采样新类型的概念(在这种情况下为手写字符),并以新的方式将它们组合在一起。
2. 在第二步中,第一步中抽取的概念形成另一个较低层的生成模型,以产生新示例,如 A 侧的 **v)**部分所示。
......
......@@ -14,7 +14,7 @@
基于度量的学习是进行单次学习的较旧方法之一。 尽管该区域较旧,但仍在探索许多方面。 一个很好的例子是关于[《为短时学习重新研究基于局部描述符的图像到类度量》](https://arxiv.org/abs/1903.12290)主题的研究工作。 在本文中,作者提出了一种卷积神经网络体系结构,称为 **D4N****深最近邻神经网络**),该体系结构可提取图像级特征。 它与其他神经网络体系结构的主要区别是用基于局部描述符的图像到类度量替代了最后一层。
[《通过类别遍历查找与几次任务学习相关的任务相关特征》](https://arxiv.org/abs/1905.11116)也为改进度量学习方法做出了贡献,方法是引入 一个插件框架。 在本文中,作者讨论了众所周知的度量学习方法(例如暹罗网络和匹配网络)如何一次只关注一个任务,而不是整个学习所有任务。 **类别遍历模块** **CTM** )插件组件通过完成所有支持任务来学习重要的尺寸特征。 CTM 在集中器和投影仪单元的帮助下,为相似类别提取通用特征嵌入,并在不同类别中提取唯一特征。 使用 CTM 的输出,我们可以在元学习器之前添加一个强大的功能,这可以使我们更快更好地进行优化。 通过使用此框架,他们显示了基于度量的学习方法的显着改进。
[《通过类别遍历查找与几次任务学习相关的任务相关特征》](https://arxiv.org/abs/1905.11116)也为改进度量学习方法做出了贡献,方法是引入 一个插件框架。 在本文中,作者讨论了众所周知的度量学习方法(例如暹罗网络和匹配网络)如何一次只关注一个任务,而不是整个学习所有任务。 **类别遍历模块****CTM**)插件组件通过完成所有支持任务来学习重要的尺寸特征。 CTM 在集中器和投影仪单元的帮助下,为相似类别提取通用特征嵌入,并在不同类别中提取唯一特征。 使用 CTM 的输出,我们可以在元学习器之前添加一个强大的功能,这可以使我们更快更好地进行优化。 通过使用此框架,他们显示了基于度量的学习方法的显着改进。
在对象检测和语义分割领域也有一些显着贡献。 让我们讨论其中的两种方法。
......@@ -26,7 +26,7 @@
# 少数镜头域中的图像分割
研究工作[《CANet:具有迭代细化和专注的几次学习的类不可知分割网络》](https://arxiv.org/abs/1903.02351)证明了潜在的增长 医学影像行业。 在本文中,作者提出了一个用于语义分割的两级框架:**密集比较模块** **DCM** )和**迭代优化模块****IOM** )。 DCM 通过使用通用的 ResNet 架构提取特征,在训练集示例和测试集示例之间进行了密集的特征比较,而 IOM 通过残差块+ CNN 和**粗糙的空间金字塔池****ASPP** )模块。
研究工作[《CANet:具有迭代细化和专注的几次学习的类不可知分割网络》](https://arxiv.org/abs/1903.02351)证明了潜在的增长 医学影像行业。 在本文中,作者提出了一个用于语义分割的两级框架:**密集比较模块****DCM**)和**迭代优化模块****IOM**)。 DCM 通过使用通用的 ResNet 架构提取特征,在训练集示例和测试集示例之间进行了密集的特征比较,而 IOM 通过残差块+ CNN 和**粗糙的空间金字塔池****ASPP**)模块。
同样, [《PANet:具有原型对齐功能的几次语义分割》](https://arxiv.org/abs/1908.06391)通过以下方式解决了少数镜头分割问题: 度量学习方法。 本文还提出了一种对齐网络,以更好地利用从支持集中提取的信息。 在 PANet 中,最初,网络从特定嵌入空间内的一些支持图像中学习特定于类别的表示,然后通过将每个像素与学习到的特定于类别的表示进行匹配,对查询/目标图像执行分割。 通过使用这种方法,PANet 可以利用支持集中的重要见解,并在几次分割的情况下提供更可靠的概括。
......
# 前言
在互联网时代,每天从社交媒体和其他平台生成越来越多的文本数据,因此能够理解这些数据是一项至关重要的技能。 本书将帮助您为**自然语言处理** **NLP** )任务建立深度学习模型,这将帮助您从文本中提取有价值的见解。
在互联网时代,每天从社交媒体和其他平台生成越来越多的文本数据,因此能够理解这些数据是一项至关重要的技能。 本书将帮助您为**自然语言处理****NLP**)任务建立深度学习模型,这将帮助您从文本中提取有价值的见解。
我们将从了解如何安装 PyTorch 以及使用 CUDA 加快处理速度开始。 然后,您将通过实际示例探索 NLP 架构的工作方式。 后面的章节将指导您完成重要的原则,例如 PyTorch 中的单词嵌入,CBOW 和标记化。 然后,您将学习一些用于处理文本数据的技术,以及如何将深度学习用于 NLP 任务。 接下来,我们将演示如何实现深度学习和神经网络架构来构建模型,以使您能够对文本进行分类和翻译以及执行情感分析。 最后,您将学习如何构建高级 NLP 模型,例如会话聊天机器人。
......
......@@ -4,7 +4,7 @@
尽管我们作为人类的语言理解方式与模型或*人工智能*理解语言的方式明显不同,但通过阐明机器学习及其用途,我们可以开始理解 这些深度学习模型*理解*语言,以及模型从数据中学习时发生的根本变化。
在本书中,我们将探讨人工智能和深度学习对自然语言的这种应用。 通过使用 PyTorch,我们将逐步学习如何构建模型,使我们能够执行情感分析,文本分类和序列翻译,从而使我们构建一个基本的聊天机器人。 通过介绍这些模型背后的理论,并演示如何实际实现它们,我们将使**自然语言处理** **NLP** )的领域神秘化,并为您提供足够的背景知识 让您开始构建自己的模型。
在本书中,我们将探讨人工智能和深度学习对自然语言的这种应用。 通过使用 PyTorch,我们将逐步学习如何构建模型,使我们能够执行情感分析,文本分类和序列翻译,从而使我们构建一个基本的聊天机器人。 通过介绍这些模型背后的理论,并演示如何实际实现它们,我们将使**自然语言处理****NLP**)的领域神秘化,并为您提供足够的背景知识 让您开始构建自己的模型。
在第一章中,我们将探讨机器学习的一些基本概念。 然后,我们将通过研究深度学习,神经网络的基础知识以及深度学习方法相对于基本机器学习技术所具有的一些优势,将这一步骤进一步向前发展。 最后,我们将更深入地研究深度学习,特别是针对特定于 NLP 的任务,以及我们如何使用深度学习模型从自然语言中获得见解。 具体来说,我们将涵盖以下主题:
......
......@@ -98,7 +98,7 @@
# 使用 CUDA 启用 PyTorch 加速
PyTorch 的主要优点之一是它能够通过使用**图形处理单元** **GPU** )来实现加速。 深度学习是一种易于并行化的计算任务,这意味着可以将计算分解为较小的任务,并可以在许多较小的处理器中进行计算。 意味着无需在单个 CPU 上执行任务,而是在 GPU 上执行计算更为有效。
PyTorch 的主要优点之一是它能够通过使用**图形处理单元****GPU**)来实现加速。 深度学习是一种易于并行化的计算任务,这意味着可以将计算分解为较小的任务,并可以在许多较小的处理器中进行计算。 意味着无需在单个 CPU 上执行任务,而是在 GPU 上执行计算更为有效。
GPU 最初是为了有效地渲染图形而创建的,但是由于深度学习在的普及中得到了发展,因此 GPU 被广泛用于同时执行多种计算的能力。 传统的 CPU 可能包含大约四个或八个内核,而 GPU 则包含数百个较小的内核。 由于可以同时在所有这些内核上执行计算,因此 GPU 可以快速减少执行深度学习任务所需的时间。
......@@ -114,7 +114,7 @@ GPU 最初是为了有效地渲染图形而创建的,但是由于深度学习
图 2.8 –并行执行通行证的方法
**计算统一设备体系结构** **CUDA** )是 Nvidia GPU 特有的技术,可在 PyTorch 上实现硬件加速。 为了启用 CUDA,我们首先必须确保我们系统上的图形卡兼容 CUDA。 [可在此处找到 CUDA 兼容 GPU 的列表](https://developer.nvidia.com/cuda-gpus)。 如果您具有兼容 CUDA 的 GPU,[则可以从此链接安装 CUDA](https://developer.nvidia.com/cuda-downloads)。 我们将使用以下步骤激活它:
**计算统一设备体系结构****CUDA**)是 Nvidia GPU 特有的技术,可在 PyTorch 上实现硬件加速。 为了启用 CUDA,我们首先必须确保我们系统上的图形卡兼容 CUDA。 [可在此处找到 CUDA 兼容 GPU 的列表](https://developer.nvidia.com/cuda-gpus)。 如果您具有兼容 CUDA 的 GPU,[则可以从此链接安装 CUDA](https://developer.nvidia.com/cuda-downloads)。 我们将使用以下步骤激活它:
1. 首先,为了在 PyTorch 上实际启用 CUDA 支持,您将必须从源代码构建 PyTorch。 有关如何完成此操作的详细信息,请参见以下网址:https://github.com/pytorch/pytorch#from-source。
2. Then, to actually CUDA within our PyTorch code, we must type the following into our Python code:
......@@ -186,7 +186,7 @@ PyTorch 与其他深度学习框架之间的另一个主要区别是语法。 Py
train = train.drop(“ label”,axis = 1).values.reshape(len(train),1,28,28)
请注意,我们将输入重塑为[ **1,** **1,** **28,** **28** ),每个张量为 1,000 张图像 由 28x28 像素组成。
请注意,我们将输入重塑为[ **1,** **1,** **28,** **28**),每个张量为 1,000 张图像 由 28x28 像素组成。
2. Next, we convert our training data and training labels into PyTorch tensors so they can be fed into the neural network:
......
# *第 3 章*:NLP 和文本嵌入
在深度学习中,有许多种表示文本的方式。 虽然我们已经介绍了基本的**词袋** **BoW** )表示形式,但不足为奇的是,还有一种更为复杂的表示文本数据的方式称为嵌入。 BoW 向量仅充当句子中单词的计数,而嵌入有助于从数字上定义某些单词的实际含义。
在深度学习中,有许多种表示文本的方式。 虽然我们已经介绍了基本的**词袋****BoW**)表示形式,但不足为奇的是,还有一种更为复杂的表示文本数据的方式称为嵌入。 BoW 向量仅充当句子中单词的计数,而嵌入有助于从数字上定义某些单词的实际含义。
在本章中,我们将探讨文本嵌入,并学习如何使用连续 BoW 模型创建嵌入。 然后,我们将继续讨论 n 元语法以及如何在模型中使用它们。 我们还将介绍标记,分块和标记化可用于将 NLP 分成其各个组成部分的各种方式。 最后,我们将研究 TF-IDF 语言模型,以及它们如何对不经常出现的单词加权我们的模型。
......@@ -35,7 +35,7 @@
## GLoVe
我们可以下载一组预先计算的词嵌入,以演示它们如何工作。 为此,我们将使用**用于词表示的全局矢量** **GLoVe** )嵌入,[可以从此处下载](https://nlp.stanford.edu/projects/glove/)。 这些嵌入是在非常大的 NLP 数据集上计算的,并且在词共现矩阵上训练了。 这是基于这样的概念,即在一起出现的单词更有可能具有相似的含义。 例如,单词 *sun* 与单词 *hot* 相对于单词 *cold* 更有可能出现,因此 *太阳**热*被认为更相似。
我们可以下载一组预先计算的词嵌入,以演示它们如何工作。 为此,我们将使用**用于词表示的全局矢量****GLoVe**)嵌入,[可以从此处下载](https://nlp.stanford.edu/projects/glove/)。 这些嵌入是在非常大的 NLP 数据集上计算的,并且在词共现矩阵上训练了。 这是基于这样的概念,即在一起出现的单词更有可能具有相似的含义。 例如,单词 *sun* 与单词 *hot* 相对于单词 *cold* 更有可能出现,因此 *太阳**热*被认为更相似。
我们可以通过检查单个 GLoVe 向量来验证这是正确的:
......@@ -558,7 +558,7 @@ nltk.help.upenn_tagset(“ VBG”)
**Chunking** 在语音标记的初始部分扩展了,旨在将我们的句子分成小块,其中这些大块中的每一个都代表一小部分语音。
我们可能希望将文本拆分为**实体**,其中每个实体都是单独的对象或事物。 例如,*红皮书*不是指三个单独的实体,而是由三个单词描述的单个实体。 我们可以轻松地再次使用 NLTK 实现分块。 我们必须首先定义一个语法模式以使用正则表达式进行匹配。 问题中的模式查找**名词短语** **NP** ),其中名词短语定义为**确定词****DT** ),然后是**可选形容词****JJ** ),然后是**名词****NN** ):
我们可能希望将文本拆分为**实体**,其中每个实体都是单独的对象或事物。 例如,*红皮书*不是指三个单独的实体,而是由三个单词描述的单个实体。 我们可以轻松地再次使用 NLTK 实现分块。 我们必须首先定义一个语法模式以使用正则表达式进行匹配。 问题中的模式查找**名词短语****NP**),其中名词短语定义为**确定词****DT**),然后是**可选形容词****JJ**),然后是**名词****NN**):
表达式=('NP:{
......@@ -592,7 +592,7 @@ REchunkParser = nltk.RegexpParser(表达式)
图 3.28 –单词嵌入
但是,此方法为句子中的所有单词分配相等的权重。 您是否认为所有单词都对句子的含义有同等的贡献? **这个****a** 是英语中非常常见的单词,但是**长颈鹿**很少见。 因此,我们可能希望为稀有词分配更多权重。 这种方法被称为**术语频率-反向文档频率** **TD-IDF** )。 现在,我们将演示如何计算文档的 TF-IDF 权重。
但是,此方法为句子中的所有单词分配相等的权重。 您是否认为所有单词都对句子的含义有同等的贡献? **这个****a** 是英语中非常常见的单词,但是**长颈鹿**很少见。 因此,我们可能希望为稀有词分配更多权重。 这种方法被称为**术语频率-反向文档频率****TD-IDF**)。 现在,我们将演示如何计算文档的 TF-IDF 权重。
## 计算 TF-IDF
......
......@@ -97,7 +97,7 @@ print('Output:'+ output_text)
这表明标点符号已从输入句子中删除。
在某些情况下,我们可能不希望直接删除标点符号。 一个很好的例子是的使用和号( **&** ),在几乎每种情况下,它都与单词[**和**]互换使用。 因此,与其完全删除“&”号,不如选择直接用“ **和**”一词代替。 我们可以使用 **.replace()**函数在 Python 中轻松实现此功能:
在某些情况下,我们可能不希望直接删除标点符号。 一个很好的例子是的使用和号(**&**),在几乎每种情况下,它都与单词[**和**]互换使用。 因此,与其完全删除“&”号,不如选择直接用“ **和**”一词代替。 我们可以使用 **.replace()**函数在 Python 中轻松实现此功能:
input_text =“猫和狗”
......
# *第 5 章*:递归神经网络和情感分析
在本章中,我们将研究**递归神经网络** **RNN** ),这是 PyTorch 中基本前馈神经网络的变体,我们学习了如何在 [*中进行构建 ]第 1 章*](../Text/1.html#_idTextAnchor015) *,机器学习基础*。 通常,RNN 可用于任何可以将数据表示为序列的任务。 其中包括使用以序列表示的历史数据的时间序列进行股票价格预测之类的事情。 我们通常在 NLP 中使用 RNN,因为可以将文本视为单个单词的序列,并可以对其进行建模。 传统的神经网络将单个矢量作为模型的输入,而 RNN 可以采用整个矢量序列。 如果我们将文档中的每个单词表示为矢量嵌入,则可以将整个文档表示为矢量序列(或 3 阶张量)。 然后,我们可以使用 RNN(以及更复杂的 RNN 形式,称为**长短期记忆****LSTM** ))从我们的数据中学习。
在本章中,我们将研究**递归神经网络****RNN**),这是 PyTorch 中基本前馈神经网络的变体,我们学习了如何在 [*中进行构建 ]第 1 章*](../Text/1.html#_idTextAnchor015) *,机器学习基础*。 通常,RNN 可用于任何可以将数据表示为序列的任务。 其中包括使用以序列表示的历史数据的时间序列进行股票价格预测之类的事情。 我们通常在 NLP 中使用 RNN,因为可以将文本视为单个单词的序列,并可以对其进行建模。 传统的神经网络将单个矢量作为模型的输入,而 RNN 可以采用整个矢量序列。 如果我们将文档中的每个单词表示为矢量嵌入,则可以将整个文档表示为矢量序列(或 3 阶张量)。 然后,我们可以使用 RNN(以及更复杂的 RNN 形式,称为**长短期记忆****LSTM**))从我们的数据中学习。
在本章中,我们将介绍 RNN 的基础知识和更高级的 LSTM。 然后,我们将研究情绪分析,并通过一个实际的示例来研究如何使用 PyTorch 构建 LSTM 对文档进行分类。 最后,我们将在简单的云应用程序平台 Heroku 上托管我们的简单模型,这将使​​我们能够使用我们的模型进行预测。
......
# *第 6 章*:用于文本分类的卷积神经网络
在上一章中,我们展示了如何使用 RNN 为文本提供情感分类。 但是,RNN 并不是唯一可用于 NLP 分类任务的神经网络体系结构。 **卷积神经网络** **CNN** )是另一种这样的架构。
在上一章中,我们展示了如何使用 RNN 为文本提供情感分类。 但是,RNN 并不是唯一可用于 NLP 分类任务的神经网络体系结构。 **卷积神经网络****CNN**)是另一种这样的架构。
RNN 依赖顺序建模,保持隐藏状态,然后逐个单词顺序地遍历文本,并在每次迭代时更新状态。 CNN 不依赖于语言的顺序元素,而是尝试通过分别感知句子中的每个单词并了解其与句子中周围单词的关系来从文本中学习。
......@@ -339,7 +339,7 @@ dropout_pc = 0.5
模型= CNN(input_dimensions,embedding_dimensions,number_of_filters,filter_sizes,output_dimensions,dropout_pc,pad_index)
输入维度将始终是词汇量的长度,而输出维度将是我们希望预测的类的数量。 在这里,我们从六个不同的类别进行预测,因此我们的输出向量的长度为 **6** 。 我们的嵌入维数是 GLoVe 向量的长度(在这种情况下为 **200** )。 填充索引可以从我们的词汇表中手动获取。
输入维度将始终是词汇量的长度,而输出维度将是我们希望预测的类的数量。 在这里,我们从六个不同的类别进行预测,因此我们的输出向量的长度为 **6** 。 我们的嵌入维数是 GLoVe 向量的长度(在这种情况下为 **200**)。 填充索引可以从我们的词汇表中手动获取。
可以手动调整接下来的三个超参数,因此您不妨尝试选择不同的值,以了解这如何影响网络的最终输出。 我们传递了一个过滤器大小列表,以便我们的模型将使用大小为 **2****3****4** 的卷积训练卷积层。 我们将针对每种滤镜尺寸训练 100 个滤镜,因此总共将有 300 个滤镜。 我们还为我们的网络定义了 50%的辍学率,以确保其充分正规化。 如果模型似乎容易过拟合或过拟合,则可以升高/降低此值。 一般的经验法则是,如果模型拟合不足,则尝试降低辍学率;如果模型拟合过度,则尝试提高辍学率。
......@@ -355,7 +355,7 @@ model.embedding.weight.data.copy_(glove_embeddings)
图 6.16 –降低压差后的张量输出
接下来,我们需要定义模型如何处理我们的模型处理嵌入层中未包含的未知标记的实例,以及我们的模型如何将填充应用于我们的输入语句。 幸运的是,解决这两种情况的最简单方法是使用由全零组成的向量。 我们确保这些零值张量与嵌入向量的长度相同(在这种情况下为 **200** ):
接下来,我们需要定义模型如何处理我们的模型处理嵌入层中未包含的未知标记的实例,以及我们的模型如何将填充应用于我们的输入语句。 幸运的是,解决这两种情况的最简单方法是使用由全零组成的向量。 我们确保这些零值张量与嵌入向量的长度相同(在这种情况下为 **200**):
unknown_index = questions.vocab.stoi [questions.unk_token]
......
......@@ -123,7 +123,7 @@ corpus_name = "movie_corpus"
图 8.6 –检查数据集
首先,您会注意到我们的行与预期的一样,因为第一行的下半部分成为下一行的前半部分。 我们还可以注意到,每行的通话和响应半部分由制表符分隔符( **/ t** )分隔,我们的每行均由新的行分隔符( **/ n** )。 在处理数据集时,我们必须考虑到这一点。
首先,您会注意到我们的行与预期的一样,因为第一行的下半部分成为下一行的前半部分。 我们还可以注意到,每行的通话和响应半部分由制表符分隔符(**/ t**)分隔,我们的每行均由新的行分隔符(**/ n**)。 在处理数据集时,我们必须考虑到这一点。
第一步是创建一个词汇表或语料库,其中包含我们数据集中的所有唯一单词。
......@@ -547,7 +547,7 @@ corpus_name = "movie_corpus"
self.embeddding =嵌入
接下来,我们创建我们的**循环** **神经** **网络**( **RNN** )模块。 在此聊天机器人中,我们将使用**门控循环单元**( **GRU** )代替 **Long** **短期** **内存 我们之前看到的**( **LSTM** )模型。 尽管 GRU 仍然控制通过 RNN 的信息流,但其的复杂度比 LSTM 小,但它们没有像 LSTM 这样的单独的门和更新门。 我们在这种情况下使用 GRU 的原因有几个:
接下来,我们创建我们的**循环** **神经** **网络**(**RNN**)模块。 在此聊天机器人中,我们将使用**门控循环单元**(**GRU**)代替 **Long** **短期** **内存 我们之前看到的**(**LSTM**)模型。 尽管 GRU 仍然控制通过 RNN 的信息流,但其的复杂度比 LSTM 小,但它们没有像 LSTM 这样的单独的门和更新门。 我们在这种情况下使用 GRU 的原因有几个:
a)由于需要学习的参数较少,因此 GRU 已被证明具有更高的计算效率。 这意味着我们的模型使用 GRU 进行训练要比使用 LSTM 进行训练更快。
......
......@@ -506,7 +506,7 @@ Figure 9.20 – Bi-directional LSTM (SLING)
## 机器理解
到目前为止,在本书中,我们主要指的是 NLP,但是能够处理语言只是其中的一部分。 当您阅读一个句子时,我们不仅阅读,观察和处理单个单词,而且还对句子的实际含义建立了内在的理解。 NLP 的下一步无疑是能够训练不仅能理解句子而且还能形成对其中表达思想的理解的模型。 该字段的真正定义非常松散,但通常被称为机器理解或**自然语言理解** **NLU** )。
到目前为止,在本书中,我们主要指的是 NLP,但是能够处理语言只是其中的一部分。 当您阅读一个句子时,我们不仅阅读,观察和处理单个单词,而且还对句子的实际含义建立了内在的理解。 NLP 的下一步无疑是能够训练不仅能理解句子而且还能形成对其中表达思想的理解的模型。 该字段的真正定义非常松散,但通常被称为机器理解或**自然语言理解****NLU**)。
在学校,我们从小就被教导阅读理解。 您可能很久以前学会了此技能,现在您已将其视为理所当然。 通常,您可能甚至没有意识到正在执行此操作; 实际上,您现在就在做! 阅读理解仅仅是阅读文本,理解文本并能够回答有关文本的问题的行为。 例如,看一下以下文本:
......@@ -568,7 +568,7 @@ Figure 9.20 – Bi-directional LSTM (SLING)
图 9.25 –问题与答案之间的关系
真正的机器理解程序可以执行**问题生成** **QG** ),以及**问答****QA** )。 对于,最明显的解决方案是训练两个单独的模型,每个模型一个,并比较其结果。 从理论上讲,我们的 QG 模型的输出应等于我们的 QA 模型的输入,因此通过比较两者,我们可以提供同时评估:
真正的机器理解程序可以执行**问题生成****QG**),以及**问答****QA**)。 对于,最明显的解决方案是训练两个单独的模型,每个模型一个,并比较其结果。 从理论上讲,我们的 QG 模型的输出应等于我们的 QA 模型的输入,因此通过比较两者,我们可以提供同时评估:
![Figure 9.26 – Comparison between QG and QA models ](img/B12365_09_26.jpg)
......
# 第 1 节:适用于 NLP 的 PyTorch 1.x 的要点
在本节中,您将在**自然语言处理** **NLP** )的背景下了解 PyTorch 1.x 的基本概念。 您还将学习如何在计算机上安装 PyTorch 1.x,以及如何使用 CUDA 加快处理速度。
在本节中,您将在**自然语言处理****NLP**)的背景下了解 PyTorch 1.x 的基本概念。 您还将学习如何在计算机上安装 PyTorch 1.x,以及如何使用 CUDA 加快处理速度。
本节包含以下章节:
......
# 第 2 部分:自然语言处理基础
# 在本节中,您将学习构建**自然语言处理**( **NLP** )应用程序的基础知识。 您还将在本节中学习如何在 PyTorch 中使用各种 NLP 技术,例如单词嵌入,CBOW 和标记化。
# 在本节中,您将学习构建**自然语言处理**(**NLP**)应用程序的基础知识。 您还将在本节中学习如何在 PyTorch 中使用各种 NLP 技术,例如单词嵌入,CBOW 和标记化。
本节包含以下章节:
......
# 第 3 节:使用 PyTorch 1.x 的实际 NLP 应用程序
在本节中,我们将使用 PyTorch 中可用的各种**自然** **语言** **处理** **NLP** )技术来构建各种实际 -使用 PyTorch 的世界应用程序。 情感分析,文本摘要,文本分类以及使用 PyTorch 构建聊天机器人应用程序是本节将介绍的一些任务。
在本节中,我们将使用 PyTorch 中可用的各种**自然** **语言** **处理****NLP**)技术来构建各种实际 -使用 PyTorch 的世界应用程序。 情感分析,文本摘要,文本分类以及使用 PyTorch 构建聊天机器人应用程序是本节将介绍的一些任务。
本节包含以下章节:
......
# 前言
**人工** **智能** **AI** )继续流行并破坏了广泛的领域,但这是一个复杂而艰巨的话题。 在本书中,您将掌握构建深度学习应用程序的方法,以及如何使用 PyTorch 进行研究和解决实际问题。
**人工** **智能****AI**)继续流行并破坏了广泛的领域,但这是一个复杂而艰巨的话题。 在本书中,您将掌握构建深度学习应用程序的方法,以及如何使用 PyTorch 进行研究和解决实际问题。
本书从张量处理的基础开始,采用基于配方的方法,然后介绍了**卷积** **神经网络** **CNN** )和 PyTorch 中的**递归神经网络****RNN** )。 熟悉这些基本网络后,您将使用深度学习来构建医学图像分类器。 接下来,您将使用 TensorBoard 进行可视化。 您还将深入研究**生成性** **对抗性** **网络****GAN** )和**深度** **增强** **学习****DRL** ),然后最终将模型大规模部署到生产中。 您将发现针对机器学习,深度学习和强化学习中常见问题的解决方案。 您将学习如何在计算机视觉,**自然** **语言** **处理****NLP** )中实现 AI 任务并解决实际问题。 其他实际领域。
本书从张量处理的基础开始,采用基于配方的方法,然后介绍了**卷积** **神经网络****CNN**)和 PyTorch 中的**递归神经网络****RNN**)。 熟悉这些基本网络后,您将使用深度学习来构建医学图像分类器。 接下来,您将使用 TensorBoard 进行可视化。 您还将深入研究**生成性** **对抗性** **网络****GAN**)和**深度** **增强** **学习****DRL**),然后最终将模型大规模部署到生产中。 您将发现针对机器学习,深度学习和强化学习中常见问题的解决方案。 您将学习如何在计算机视觉,**自然** **语言** **处理****NLP**)中实现 AI 任务并解决实际问题。 其他实际领域。
到本书结尾,您将拥有使用 PyTorch 框架的 AI 中最重要且应用最广泛的技术的基础。
......
......@@ -4,7 +4,7 @@
PyTorch 是 Python 中的一个开源深度学习框架,它使我们能够从研究问题开始,提出原型解决方案,并在开发此解决方案的过程中一直进行到创建分布式计算集群为止。 它使您从研究到生产都可以覆盖。 PyTorch 改编自 Torch,后者是一个科学计算框架,广泛支持机器学习算法,使用 Lua 编写,可为您提供强大的功能(使用 GPU)。 那为什么要用 PyTorch?
PyTorch 与 Python 深度集成,具有命令式风格,使用类似 Python 的语法,并且在 Eager 模式下易于使用且灵活。 它的学习曲线很浅,可以让您专注于功能而不是框架的样板和语法。 Python 命令的纯命令执行将失去很多优化机会,因此,随着**即时** **JIT** )编译器的引入,PyTorch 允许过渡到图形 C ++运行时环境中用于速度,功能和优化的模式。 它得到了来自不同领域的专业人员的大力社区支持,并且与图书馆打交道。 它具有与框架互操作性的本地**开放神经网络交换****ONNX** )支持。 它是分布式的,可扩展到生产环境,与 TensorBoard 集成,并具有出色的文档和 API,您可以轻松编写针对 CPU 和 GPU 的自定义扩展。 我们将在接下来的章节中探索这些以及更多内容。
PyTorch 与 Python 深度集成,具有命令式风格,使用类似 Python 的语法,并且在 Eager 模式下易于使用且灵活。 它的学习曲线很浅,可以让您专注于功能而不是框架的样板和语法。 Python 命令的纯命令执行将失去很多优化机会,因此,随着**即时****JIT**)编译器的引入,PyTorch 允许过渡到图形 C ++运行时环境中用于速度,功能和优化的模式。 它得到了来自不同领域的专业人员的大力社区支持,并且与图书馆打交道。 它具有与框架互操作性的本地**开放神经网络交换****ONNX**)支持。 它是分布式的,可扩展到生产环境,与 TensorBoard 集成,并具有出色的文档和 API,您可以轻松编写针对 CPU 和 GPU 的自定义扩展。 我们将在接下来的章节中探索这些以及更多内容。
在本章中,我们将介绍以下食谱:
......
# 用于计算机视觉的卷积神经网络
在本章中,我们将学习**卷积神经网络** **CNN** )。 这是与前几章讨论的神经网络不同的一类。 CNN 在计算机视觉领域已经取得了巨大的成功,随着我们对它们的了解越来越多,我们将能够理解其中的原因。
在本章中,我们将学习**卷积神经网络****CNN**)。 这是与前几章讨论的神经网络不同的一类。 CNN 在计算机视觉领域已经取得了巨大的成功,随着我们对它们的了解越来越多,我们将能够理解其中的原因。
CNN 是一种特殊的网络,可以将图像作为张量接收。 彩色图像由红色,绿色和蓝色三个颜色通道组成,称为 RGB。 我们将这些二维矩阵通道堆叠起来以形成彩色图像; 每个通道的值变化会产生不同的颜色。 CNN 将图像作为三个独立的堆叠颜色层,一个层放在另一个层上。
......
# 用于 NLP 的递归神经网络
在本章中,我们将处理**递归神经网络** **RNNs** ),这是一种专门处理顺序数据或时变数据的神经网络。 利用卷积神经网络,我们处理在空间上彼此相关的数据点,其中一组像素值保存有关图像的信息。 但是请考虑一下节奏,节奏是由一段时间内一系列变化的声音信号形成的。 数据点彼此之间具有时间关系。 在递归神经网络中,神经元之间的连接在时间序列上形成有向图,表现出时间动态行为。 传统的前馈网络不存储先前的输入; 但是,RNN 使用存储单元来记住先前的输入,因此根据到目前为止的输入顺序来处理当前输入。
在本章中,我们将处理**递归神经网络****RNNs**),这是一种专门处理顺序数据或时变数据的神经网络。 利用卷积神经网络,我们处理在空间上彼此相关的数据点,其中一组像素值保存有关图像的信息。 但是请考虑一下节奏,节奏是由一段时间内一系列变化的声音信号形成的。 数据点彼此之间具有时间关系。 在递归神经网络中,神经元之间的连接在时间序列上形成有向图,表现出时间动态行为。 传统的前馈网络不存储先前的输入; 但是,RNN 使用存储单元来记住先前的输入,因此根据到目前为止的输入顺序来处理当前输入。
在本章中,我们将介绍以下食谱:
......@@ -39,7 +39,7 @@
图 3:LSTM
**长短期记忆** **LSTM** )网络是一种递归神经网络,是 RNN 之上的一种进步。
**长短期记忆****LSTM**)网络是一种递归神经网络,是 RNN 之上的一种进步。
这是双向 LSTM:
......@@ -371,7 +371,7 @@ TorchText 具有用于处理嵌入的`vocab`模块。 我们可以通过在此
# 建立 LSTM 网络
**长短期记忆** **LSTM** )网络是一种递归神经网络,具有内部门控,有助于更好地保持信息。 这些门是微小的神经网络,用于控制何时需要保存信息以及何时可以擦除或忘记信息。 RNN 受梯度消失和爆炸的影响,因此很难学习长期依赖关系。 LSTM 可以抵抗爆炸和消失的梯度,尽管在数学上仍然可行。
**长短期记忆****LSTM**)网络是一种递归神经网络,具有内部门控,有助于更好地保持信息。 这些门是微小的神经网络,用于控制何时需要保存信息以及何时可以擦除或忘记信息。 RNN 受梯度消失和爆炸的影响,因此很难学习长期依赖关系。 LSTM 可以抵抗爆炸和消失的梯度,尽管在数学上仍然可行。
# 怎么做...
......
# 转移学习和 TensorBoard
迁移学习是深度学习中的一个重要概念,它使我们可以将深度学习用于各种日常任务。 这是一种机器学习技术,其中针对任务训练的模型被重用以创建用于类似任务的新模型。 我们采用在大型数据集上训练的模型,并将其知识转移到较小的数据集。 对于具有**卷积神经网络** **CNN** )的计算机视觉任务,我们冻结了网络的早期卷积层,仅训练了最后几层。 早期的卷积层提取适用于整个图像的通用低级特征,以检测边缘,图案和渐变,而稍后的层识别图像中的特定特征,并且特定于数据集。
迁移学习是深度学习中的一个重要概念,它使我们可以将深度学习用于各种日常任务。 这是一种机器学习技术,其中针对任务训练的模型被重用以创建用于类似任务的新模型。 我们采用在大型数据集上训练的模型,并将其知识转移到较小的数据集。 对于具有**卷积神经网络****CNN**)的计算机视觉任务,我们冻结了网络的早期卷积层,仅训练了最后几层。 早期的卷积层提取适用于整个图像的通用低级特征,以检测边缘,图案和渐变,而稍后的层识别图像中的特定特征,并且特定于数据集。
在本章中,我们将训练图像分类器以区分正常患者和肺炎患者的胸部 X 光,并使用经过训练的 ResNet-50 模型进行转移学习。 我们将替换分类器,并有两个输出单元代表正常和肺炎分类。
......
# 探索生成对抗网络
**生成对抗网络** **GAN** )是一种机器学习技术,其中同时训练两种模型:一种专门用于创建伪造数据,另一种专门用于区分伪造数据和伪造数据。 真实数据。 术语*生成的*反映了以下事实:这些神经网络用于创建新数据,而术语*对抗性*来自以下事实:两个模型相互竞争,从而提高了质量 生成的数据。
**生成对抗网络****GAN**)是一种机器学习技术,其中同时训练两种模型:一种专门用于创建伪造数据,另一种专门用于区分伪造数据和伪造数据。 真实数据。 术语*生成的*反映了以下事实:这些神经网络用于创建新数据,而术语*对抗性*来自以下事实:两个模型相互竞争,从而提高了质量 生成的数据。
GAN 中的两个模型称为生成器和鉴别器,其中生成器负责创建数据,鉴别器接收数据并将其分类为真实数据或由生成器生成。 生成器的目标是创建与训练集中的真实数据没有区别的数据样本。
......@@ -656,7 +656,7 @@ pip install numpy
# 使用 PyTorch 集线器运行 PGGAN
在本食谱中,我们将研究**渐进 GAN** ( **PGGAN** ),与 DCGAN 相比它们是高级 GAN,并且能够生成逼真的图像。 PGGAN 分多个阶段训练 GAN 网络。 它具有 *z* 的潜在特征,并使用两个反卷积层生成 4×4 图像。 在鉴别器方面,网络使用两个卷积层训练生成的 4 x 4 图像。 网络稳定后,它会在鉴别器中再增加两个卷积层以将图像上采样到 8 x 8,再增加两个卷积层以对图像下采样。
在本食谱中,我们将研究**渐进 GAN**(**PGGAN**),与 DCGAN 相比它们是高级 GAN,并且能够生成逼真的图像。 PGGAN 分多个阶段训练 GAN 网络。 它具有 *z* 的潜在特征,并使用两个反卷积层生成 4×4 图像。 在鉴别器方面,网络使用两个卷积层训练生成的 4 x 4 图像。 网络稳定后,它会在鉴别器中再增加两个卷积层以将图像上采样到 8 x 8,再增加两个卷积层以对图像下采样。
经过 9 个这样的级数后,生成器将生成 1024 x 1024 个图像。 PGGAN 的渐进式训练策略相对于常规 GAN 具有优势,因为它可以加快并稳定训练。 之所以如此,是因为大多数训练都是在较低的分辨率下进行的,而在网络达到各个阶段的稳定性之后,会逐渐发展为较高的分辨率。
......
# 深度强化学习
在本章中,我们将探索**神经网络** **NNs** )在使用 PyTorch 进行**强化学习****RL** )上的应用。
在本章中,我们将探索**神经网络****NNs**)在使用 PyTorch 进行**强化学习****RL**)上的应用。
RL 是**人工智能** **AI** )的领域,与我们在前面各章中介绍的其他机器学习格式不同。 RL 是机器学习算法的子类,它通过最大化环境中的奖励来进行学习。 当问题涉及决策或采取行动时,这些算法很有用。
RL 是**人工智能****AI**)的领域,与我们在前面各章中介绍的其他机器学习格式不同。 RL 是机器学习算法的子类,它通过最大化环境中的奖励来进行学习。 当问题涉及决策或采取行动时,这些算法很有用。
在本章中,我们将介绍以下食谱:
......@@ -20,7 +20,7 @@ RL 是**人工智能**( **AI** )的领域,与我们在前面各章中介
**代理**是任何 RL 问题的核心。 它是 RL 算法的一部分,它处理输入信息以执行操作。 它探索和利用重复试验中的知识,以学习如何最大化奖励。 代理必须处理的场景称为**环境**,而**动作**是代理可以在给定环境中进行的动作。 采取行动后从环境中获得的回报称为**奖励**,代理根据当前状态决定使用下一行动的行动过程称为**策略**。 相对于短期奖励,带有折扣的预期长期回报称为**值****q** -**值**与该值相似,但具有附加的当前动作参数。
现在,我们已经了解了 RL 的上下文,让我们理解为什么我们应该使用**较深的 RL****DRL** )而不是 RL。 DRL 将 RL 与深度学习相结合,后者使用 NN 解决 RL 问题。
现在,我们已经了解了 RL 的上下文,让我们理解为什么我们应该使用**较深的 RL****DRL**)而不是 RL。 DRL 将 RL 与深度学习相结合,后者使用 NN 解决 RL 问题。
深度学习算法可以学习抽象出环境状态的细节,然后学习状态的重要特征。 由于深度学习算法仅具有有限数量的参数,因此我们可以使用它将可能的状态压缩为更少的状态,然后使用该新表示形式来选择一个动作。
......@@ -497,7 +497,7 @@ Rewards: 160.0
# Deep GA 简介
在本食谱中,我们将探讨**深层遗传算法** **Deep GA** ),并向您展示当将其应用于 RL 时,它是基于梯度方法的竞争替代品。 我们将使用一组随机生成的网络,而不是使用梯度下降来修改其权重的随机生成的网络,而是创建一个一代,然后对其在给定环境中的性能进行评估。 请注意,一代人中的某些网络将比其他人表现更好。 我们将选择性能最佳的网络,并将其保留给下一代网络。 然后,我们将通过复制它们来创建下一代并对其权重进行随机修改。 由于我们将选择权重较小的最佳网络,因此网络的整体性能将不断提高。
在本食谱中,我们将探讨**深层遗传算法****Deep GA**),并向您展示当将其应用于 RL 时,它是基于梯度方法的竞争替代品。 我们将使用一组随机生成的网络,而不是使用梯度下降来修改其权重的随机生成的网络,而是创建一个一代,然后对其在给定环境中的性能进行评估。 请注意,一代人中的某些网络将比其他人表现更好。 我们将选择性能最佳的网络,并将其保留给下一代网络。 然后,我们将通过复制它们来创建下一代并对其权重进行随机修改。 由于我们将选择权重较小的最佳网络,因此网络的整体性能将不断提高。
在本配方中,我们将定义模型的网络维度,该网络维度将用于预测给定状态时应采取的措施。
......
......@@ -426,7 +426,7 @@ my_cell = MyCell(MyDecisionGate())
# 汇出至 ONNX
在本食谱中,我们将介绍如何将 PyTorch 模型导出到**开放神经网络交换** **ONNX** ),该模型为深度学习和传统机器学习模型提供了一种开源格式。 它定义了一个可扩展的计算图模型,以及内置的运算符和标准数据类型。
在本食谱中,我们将介绍如何将 PyTorch 模型导出到**开放神经网络交换****ONNX**),该模型为深度学习和传统机器学习模型提供了一种开源格式。 它定义了一个可扩展的计算图模型,以及内置的运算符和标准数据类型。
ONNX 得到了广泛的支持,可以在许多框架,工具和硬件中找到,因为它可以实现不同框架之间的互操作性,并可以实现从研究到生产的过渡。
......
......@@ -16,7 +16,7 @@
[第 4 章](../Text/4.html "Chapter 4\. Computer Vision")*计算机视觉*是迄今为止深度学习最成功的结果,它讨论了成功背后的关键思想,并贯穿了使用最广泛的视觉算法– **卷积神经网络(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 章](../Text/5.html "Chapter 5\. Sequential Data Processing")*顺序数据处理*着眼于递归神经网络,它是目前最成功的顺序数据处理算法。 本章向您介绍主要的 RNN 组件,例如**长短期内存****LSTM**)网络和**门控循环单元****GRU**)。 然后,在探索递归神经网络之前,我们将经历 RNN 实现中的算法更改,例如双向 RNN,并增加层数。 为了理解递归网络,我们将使用斯坦福大学 NLP 小组的著名示例(堆栈增强的解析器-解释器神经网络(SPINN)),并将其在 PyTorch 中实现。
[第 6 章](../Text/6.html "Chapter 6\. Generative Networks")*生成网络,*简要讨论了生成网络的历史,然后解释了各种生成网络。 在这些不同的类别中,本章向我们介绍了自回归模型和 GAN。 我们将研究作为自动回归模型一部分的 PixelCNN 和 WaveNet 的实现细节,然后详细研究 GAN。
......
......@@ -20,11 +20,11 @@ Python 在深度学习社区中的广泛接受使一些研究人员和开发人
深度学习的前端开发人员发现符号图的概念很困难。 不幸的是,几乎所有的深度学习框架都是在此基础上构建的。 实际上,一些开发人员小组试图通过动态图来改变这种方法。 哈佛智能概率系统集团的 Autograd 是第一个这样做的流行框架。 然后,Twitter 上的 Torch 社区采纳了这个想法,并实施了 torch-autograd。
接下来,来自**卡内基梅隆大学** **CMU** )的研究小组提出了 DyNet,然后 Chainer 提出了动态图表的功能和可解释的开发环境。
接下来,来自**卡内基梅隆大学****CMU**)的研究小组提出了 DyNet,然后 Chainer 提出了动态图表的功能和可解释的开发环境。
所有这些事件都是启动惊人的框架 PyTorch 的巨大灵感,事实上,PyTorch 最初是 Chainer 的分支。 它最初是由 Torch 的核心开发人员 Soumith Chintala 领导的 Adam Paszke 的实习项目开始的。 然后,PyTorch 聘请了另外两名核心开发人员以及来自不同公司和大学的约 100 位 Alpha 测试人员。
整个团队在六个月内将链条拉到了一起,并于 2017 年 1 月向公众发布了该 Beta。尽管产品开发人员最初并未使用 PyTorch,但大部分研究社区都接受了 PyTorch。 一些大学开始在 PyTorch 上开设课程,包括**纽约大学** **NYU** ),牛津大学和其他一些欧洲大学。
整个团队在六个月内将链条拉到了一起,并于 2017 年 1 月向公众发布了该 Beta。尽管产品开发人员最初并未使用 PyTorch,但大部分研究社区都接受了 PyTorch。 一些大学开始在 PyTorch 上开设课程,包括**纽约大学****NYU**),牛津大学和其他一些欧洲大学。
## 什么是 PyTorch?
......@@ -62,7 +62,7 @@ PyTorch 允许用户定义 Python 在向前传递中允许他们执行的任何
在 Caffe2 发布之后,自社区宣布 PyTorch 模型向 Caffe2 的迁移策略以来,甚至产品开发人员也开始尝试 PyTorch。 Caffe2 是一个静态图形框架,即使在移动电话中也可以运行您的模型,因此使用 PyTorch 进行原型设计是一种双赢的方法。 构建网络时,您可以获得 PyTorch 的灵活性,并且可以将其传输到 Caffe2 并在任何生产环境中使用。 但是,在 1.0 版本说明中,PyTorch 团队从让人们学习两个框架(一个用于生产,一个用于研究)到学习在原型阶段具有动态图形功能并且可以突然转换为一个框架的巨大跃进。 需要速度和效率的静态优化图。 PyTorch 团队将 Caffe2 的后端与 PyTorch 的 Aten 后端合并在一起,这使用户可以决定是要运行优化程度较低但高度灵活的图形,还是运行优化程度较不灵活的图形而无需重写代码库。
ONNX 和 DLPack 是 AI 社区看到的下两个“大事情”。 微软和 Facebook 共同宣布了 **开放神经网络交换** **ONNX** )协议,该协议旨在帮助开发人员将任何模型从任何框架迁移到任何其他框架。 ONNX 与 PyTorch,Caffe2,TensorFlow,MXNet 和 CNTK 兼容,并且社区正在构建/改善对几乎所有流行框架的支持。
ONNX 和 DLPack 是 AI 社区看到的下两个“大事情”。 微软和 Facebook 共同宣布了 **开放神经网络交换****ONNX**)协议,该协议旨在帮助开发人员将任何模型从任何框架迁移到任何其他框架。 ONNX 与 PyTorch,Caffe2,TensorFlow,MXNet 和 CNTK 兼容,并且社区正在构建/改善对几乎所有流行框架的支持。
ONNX 内置在 PyTorch 的核心中,因此将模型迁移到 ONNX 表单不需要用户安装任何其他软件包或工具。 同时,DLPack 通过定义不同框架应遵循的标准数据结构,将互操作性提高到一个新水平,从而使张量在同一程序中从一个框架到另一个框架的迁移不需要用户序列化数据或 遵循任何其他解决方法。 例如,如果您有一个程序可以将训练有素的 TensorFlow 模型用于计算机视觉,而一个高效的 PyTorch 模型用于循环数据,则可以使用一个程序来处理视频中的每个三维帧, TensorFlow 模型并将 TensorFlow 模型的输出直接传递给 PyTorch 模型以预测视频中的动作。 如果您退后一步,看看深度学习社区,您会发现整个世界都趋向于一个单一的点,在这个点上,所有事物都可以与其他事物互操作,并尝试以类似方法解决问题。 那是我们大家都想生活的世界。
......@@ -167,7 +167,7 @@ with tf.Session() as sess:
势在必行的编程风格始终拥有较大的用户群,因为程序流程对于任何开发人员都是直观的。 动态能力是命令式图形构建的良好副作用。 与静态图不同,动态图体系结构不会在数据传递之前构建图。 程序将等待数据到达并在遍历数据时构建图形。 结果,每次数据迭代都会构建一个新的图实例,并在完成向后传递后销毁它。 由于图形是为每次迭代构建的,因此它不依赖于数据大小,长度或结构。 自然语言处理是需要这种方法的领域之一。
例如,如果您试图对成千上万的句子进行情感分析,则需要使用静态图形来破解并采取变通办法。 在普通的**递归神经网络** **RNN** )模型中,每个单词都经过一个 RNN 单元,该单元生成输出和隐藏状态。 该隐藏状态将提供给下一个 RNN,后者处理句子中的下一个单词。 由于您在构建静态图形时做了一个固定长度的插槽,因此您需要增加短句并减少长句。
例如,如果您试图对成千上万的句子进行情感分析,则需要使用静态图形来破解并采取变通办法。 在普通的**递归神经网络****RNN**)模型中,每个单词都经过一个 RNN 单元,该单元生成输出和隐藏状态。 该隐藏状态将提供给下一个 RNN,后者处理句子中的下一个单词。 由于您在构建静态图形时做了一个固定长度的插槽,因此您需要增加短句并减少长句。
![Using dynamic graphs](img/B09475_01_06.jpg)
......@@ -246,7 +246,7 @@ for epoch in range(epochs):
编码器和解码器可能是深度学习框架下的下一个最基本的体系结构。 所有网络都有一个或多个编码器-解码器层。 您可以将完全连接层中的隐藏层视为来自编码器的编码形式,而将输出层视为将隐藏层解码为输出的解码器。 通常,编码器将输入编码为中间状态,其中输入表示为向量,然后解码器网络将其解码为我们想要的输出形式。
编码器-解码器网络的一个典型示例是**序列到序列** **seq2seq** )网络,可以将其用作机器翻译。 用英语说的句子将被编码为中间向量表示,其中整个句子将以一些浮点数的形式进行分块,并且解码器从中间向量以另一种语言解码输出句子。
编码器-解码器网络的一个典型示例是**序列到序列****seq2seq**)网络,可以将其用作机器翻译。 用英语说的句子将被编码为中间向量表示,其中整个句子将以一些浮点数的形式进行分块,并且解码器从中间向量以另一种语言解码输出句子。
![Encoders and decoders](img/B09475_01_11.jpg)
......@@ -264,7 +264,7 @@ for epoch in range(epochs):
#### 递归神经网络
RNN 是最常见的深度学习算法之一,它们席卷全球。 我们现在在自然语言处理或理解中几乎拥有所有最先进的性能,这是由于 RNN 的变体。 在循环网络中,您尝试识别数据中的最小单位,并使数据成为这些单位的组。 在自然语言的示例中,最常见的方法是使一个单词成为一个单元,并在处理该句子时将其视为一组单词。 您展开整个句子的 RNN,然后一次处理一个单词。 RNN 具有适用于不同数据集的变体,有时,选择变体时可以考虑效率。 长**短期记忆** **LSTM** )和**门控循环单元****GRU** )细胞是最常见的 RNN 单元。
RNN 是最常见的深度学习算法之一,它们席卷全球。 我们现在在自然语言处理或理解中几乎拥有所有最先进的性能,这是由于 RNN 的变体。 在循环网络中,您尝试识别数据中的最小单位,并使数据成为这些单位的组。 在自然语言的示例中,最常见的方法是使一个单词成为一个单元,并在处理该句子时将其视为一组单词。 您展开整个句子的 RNN,然后一次处理一个单词。 RNN 具有适用于不同数据集的变体,有时,选择变体时可以考虑效率。 长**短期记忆****LSTM**)和**门控循环单元****GRU**)细胞是最常见的 RNN 单元。
![Recurrent neural networks](img/B09475_01_13.jpg)
......@@ -282,9 +282,9 @@ RNN 是最常见的深度学习算法之一,它们席卷全球。 我们现在
#### 卷积神经网络
**卷积神经网络** **CNN** )使我们能够在计算机视觉中获得超人的性能。 在的早期,我们达到了的人类准确性,并且我们仍在逐年提高准确性。
**卷积神经网络****CNN**)使我们能够在计算机视觉中获得超人的性能。 在的早期,我们达到了的人类准确性,并且我们仍在逐年提高准确性。
卷积网络是最易理解的网络,因为我们有可视化工具可以显示每一层的功能。 **Facebook AI Research****FAIR** )负责人 Yann LeCun 于 1990 年代发明了 CNN。 那时我们无法使用它们,因为我们没有足够的数据集和计算能力。 CNN 基本上像滑动窗口一样扫描您的输入并进行中间表示,然后在最终到达完全连接的层之前对其进行逐层抽象。 CNN 也成功地用于非图像数据集中。
卷积网络是最易理解的网络,因为我们有可视化工具可以显示每一层的功能。 **Facebook AI Research****FAIR**)负责人 Yann LeCun 于 1990 年代发明了 CNN。 那时我们无法使用它们,因为我们没有足够的数据集和计算能力。 CNN 基本上像滑动窗口一样扫描您的输入并进行中间表示,然后在最终到达完全连接的层之前对其进行逐层抽象。 CNN 也成功地用于非图像数据集中。
Facebook 研究团队发现了一种具有卷积网络的先进自然语言处理系统,该系统优于 RNN,RNN 被认为是任何序列数据集的首选架构。 尽管一些神经科学家和一些 AI 研究人员不喜欢 CNN,但是由于他们认为大脑不能像 CNN 那样工作,因此基于 CNN 的网络正在击败所有现有实现。
......@@ -294,7 +294,7 @@ Facebook 研究团队发现了一种具有卷积网络的先进自然语言处
#### 生成对抗网络
**生成对抗网络** **GAN** )由 Ian Goodfellow 于 2014 年发明,从那时起,它们使整个 AI 社区颠倒了。 它们是最简单,最明显的实现方式之一,但具有以其功能吸引世界的力量。 在 GAN 中,两个网络相互竞争并达到平衡,生成器网络可以生成数据,而鉴别器网络很难与实际图像区分开来。 一个真实的例子就是警察与假冒者之间的斗争。
**生成对抗网络****GAN**)由 Ian Goodfellow 于 2014 年发明,从那时起,它们使整个 AI 社区颠倒了。 它们是最简单,最明显的实现方式之一,但具有以其功能吸引世界的力量。 在 GAN 中,两个网络相互竞争并达到平衡,生成器网络可以生成数据,而鉴别器网络很难与实际图像区分开来。 一个真实的例子就是警察与假冒者之间的斗争。
造假者试图制造假币,而警察试图对其进行侦查。 最初,造假者知识不足,无法制作出看起来很原始的假币。 随着时间的流逝,造假者越来越擅长制作看起来更像原始货币的货币。 然后,警察开始无法识别假币,但最终他们会再次变得更好。 这一世代歧视过程最终导致了平衡。 GAN 的优势是巨大的,我们将在后面详细讨论。
......
......@@ -16,7 +16,7 @@
根据 Wikipedia 的说法,Fizz buzz [1]是一款针对儿童的小组文字游戏,可以教他们有关分裂的知识。 玩家轮流进行递增计数。 被三整除的任何数字[2]被单词 fizz 替换,被五整除的任何数字被 buzz 单词替换。 两者均分的数字成为嘶嘶声。
**艾伦人工智能研究所** **AI2** )的研究工程师之一乔尔·格鲁斯(Joel Grus)在一个有趣的示例中使用了 Fizz 嗡嗡声,而则在博客中发文[ 3]在 TensorFlow 上。 尽管该示例没有解决任何实际问题,但该博客文章颇具吸引力,很高兴看到神经网络如何学会从数字流中找到数学模式。
**艾伦人工智能研究所****AI2**)的研究工程师之一乔尔·格鲁斯(Joel Grus)在一个有趣的示例中使用了 Fizz 嗡嗡声,而则在博客中发文[ 3]在 TensorFlow 上。 尽管该示例没有解决任何实际问题,但该博客文章颇具吸引力,很高兴看到神经网络如何学会从数字流中找到数学模式。
## 数据集
......@@ -245,7 +245,7 @@ print(a2.grad, a2.grad_fn, a2)
##### 查找错误
是时候找出了,我们的模型在 Fizz 嗡嗡声中的预测效果如何。 我们使用最基本的回归损失,称为**均方误差** **MSE** )。 最初,我们发现批处理中每个元素的预测与输出之间的差异(还记得我们为每个输入数据点创建的大小为 4 的向量吗?)。 然后我们对所有差异求平方,并将所有差异求和在一起,以获得一个单一值。 如果您不熟悉损失函数,则不必担心被 2.0 除。 这样做是为了使数学在进行反向传播时保持整洁。
是时候找出了,我们的模型在 Fizz 嗡嗡声中的预测效果如何。 我们使用最基本的回归损失,称为**均方误差****MSE**)。 最初,我们发现批处理中每个元素的预测与输出之间的差异(还记得我们为每个输入数据点创建的大小为 4 的向量吗?)。 然后我们对所有差异求平方,并将所有差异求和在一起,以获得一个单一值。 如果您不熟悉损失函数,则不必担心被 2.0 除。 这样做是为了使数学在进行反向传播时保持整洁。
##### 反向传播
......@@ -261,7 +261,7 @@ print(a2.grad, a2.grad_fn, a2)
在拥有框架之前,这不是一个容易的过程。 实际上,找到每个参数的导数并进行更新是一项繁琐且容易出错的任务。 在 PyTorch 中,您要做的就是在最后一个节点上调用`backward`,它将反向传播并更新它。 具有渐变的`grad`属性。
PyTorch 的`backward`函数进行反向传播,并找到每个神经元的错误。 但是,我们需要基于此误差因子来更新神经元的权重。 更新发现的错误的过程通常称为优化,并且有不同的优化策略。 PyTorch 为我们提供了另一个名为`optim`的模块,用于实现不同的优化算法。 在先前的实现中,我们使用了基本且最受欢迎的优化算法,称为**随机梯度下降** **SGD** )。 当我们使用复杂的神经网络时,我们将在后面的章节中看到不同的优化算法。
PyTorch 的`backward`函数进行反向传播,并找到每个神经元的错误。 但是,我们需要基于此误差因子来更新神经元的权重。 更新发现的错误的过程通常称为优化,并且有不同的优化策略。 PyTorch 为我们提供了另一个名为`optim`的模块,用于实现不同的优化算法。 在先前的实现中,我们使用了基本且最受欢迎的优化算法,称为**随机梯度下降****SGD**)。 当我们使用复杂的神经网络时,我们将在后面的章节中看到不同的优化算法。
PyTorch 还通过将反向传播和优化分为不同的步骤,为我们提供了更大的灵活性。 请记住,反向传播会在`.grad`属性中累积渐变。 这是有帮助的,特别是在我们的项目更注重研究,或者想要深入研究权重-梯度关系,或者想要了解梯度的变化方式时。 有时,我们希望更新除特定神经元之外的所有参数,或者有时我们可能认为不需要更新特定层。 在需要对参数更新进行更多控制的情况下,具有显式的参数更新步骤会带来很大的好处。
......
......@@ -16,7 +16,7 @@ PyTorch 最初是由 Facebook 实习生作为研究框架开始的,现已发
## 构思和计划
通常,在组织中,产品团队会向工程团队显示问题陈述,希望知道他们是否可以解决。 这是构想阶段的开始。 在学术界,这可能是决策阶段,在此阶段,候选人必须为其论文找到问题。 在构思阶段,工程师们集思广益并找到了可能解决问题的理论方法。 除了将问题陈述转换为理论解决方案外,构想阶段还包括确定数据类型以及应使用哪些数据集来构建**概念证明** **POC [ **最低可行产品**( **MVP** )的**)。 在这个阶段,团队通过分析问题陈述的行为,现有的可用实现,可用的预先训练的模型等来决定采用哪种框架。
通常,在组织中,产品团队会向工程团队显示问题陈述,希望知道他们是否可以解决。 这是构想阶段的开始。 在学术界,这可能是决策阶段,在此阶段,候选人必须为其论文找到问题。 在构思阶段,工程师们集思广益并找到了可能解决问题的理论方法。 除了将问题陈述转换为理论解决方案外,构想阶段还包括确定数据类型以及应使用哪些数据集来构建**概念证明****POC [ **最低可行产品**(**MVP**)的**)。 在这个阶段,团队通过分析问题陈述的行为,现有的可用实现,可用的预先训练的模型等来决定采用哪种框架。
这个阶段在行业中很常见,我有成千上万个示例,其中计划周密的构思阶段帮助团队按时推出了可靠的产品,而计划外的构思阶段破坏了整个产品的创建。
......@@ -30,7 +30,7 @@ PyTorch 最初是由 Facebook 实习生作为研究框架开始的,现已发
不同类型的深度学习问题需要不同类型的数据集,并且每种类型的可能需要不同类型的预处理,具体取决于我们使用的神经网络架构。 这是深度学习管道构建中的核心问题之一。
尽管社区已经免费提供了用于不同任务的数据集,但是编写预处理脚本几乎总是很痛苦。 PyTorch 通过提供抽象类来编写自定义数据集和数据加载器来解决此问题。 这里给出的示例是一个简单的`dataset`类,用于加载我们在[第 2 章](../Text/2.html "Chapter 2\. A Simple Neural Network")*一个简单神经网络*中使用的`fizzbuzz`数据集,但是将其扩展为可以处理任何类型的数据集 非常简单。 PyTorch 的官方文档使用类似的方法对图像数据集进行预处理,然后再将其传递给复杂的**卷积神经网络** **CNN** )体系结构。
尽管社区已经免费提供了用于不同任务的数据集,但是编写预处理脚本几乎总是很痛苦。 PyTorch 通过提供抽象类来编写自定义数据集和数据加载器来解决此问题。 这里给出的示例是一个简单的`dataset`类,用于加载我们在[第 2 章](../Text/2.html "Chapter 2\. A Simple Neural Network")*一个简单神经网络*中使用的`fizzbuzz`数据集,但是将其扩展为可以处理任何类型的数据集 非常简单。 PyTorch 的官方文档使用类似的方法对图像数据集进行预处理,然后再将其传递给复杂的**卷积神经网络****CNN**)体系结构。
PyTorch 中的`dataset`类是高级抽象,可处理数据加载程序几乎需要的所有内容。 用户定义的自定义`dataset`类需要覆盖父类的`__len__`函数和`__getitem__`函数,其中数据加载程序正在使用`__len__`来确定数据集的长度,而`__getitem__` 数据加载器正在使用该物品来获取物品。 `__getitem__`函数希望用户将索引作为参数传递,并获取驻留在该索引上的项目:
......@@ -218,11 +218,11 @@ pip install torchtext
```
与其他两个实用程序包不同,`torchtext`保留自己的 API 结构,该结构与`torchvision``torchaudio`完全不同。 `torchtext`是一个非常强大的库,可以为**自然语言处理** **NLP** )数据集执行所需的预处理任务。 它带有一组用于常见 NLP 任务的数据集,但是与`torchvision`不同,它没有可供下载的预训练网络。
与其他两个实用程序包不同,`torchtext`保留自己的 API 结构,该结构与`torchvision``torchaudio`完全不同。 `torchtext`是一个非常强大的库,可以为**自然语言处理****NLP**)数据集执行所需的预处理任务。 它带有一组用于常见 NLP 任务的数据集,但是与`torchvision`不同,它没有可供下载的预训练网络。
`torchtext`可以插入输入或输出端的任何 Python 包中。 通常,spaCy 或 NLTK 是帮助`torchtext`进行预处理和词汇加载的好选择。 `torchtext`提供 Python 数据结构作为输出,因此可以连接到任何类型的输出框架,而不仅仅是 PyTorch。 由于`torchtext`的 API 与`torchvision``torchaudio`不相似,并且不如其他人简单明了,因此下一个部分将通过一个示例演示`torchtext`在 NLP 中的主要作用。
`torchtext`本身是一个包装器实用程序,而不是支持语言操作,因此这就是我在以下示例中使用 spaCy 的原因。 例如,我们使用**文本检索会议** **TREC** )数据集,它是一个问题分类器。
`torchtext`本身是一个包装器实用程序,而不是支持语言操作,因此这就是我在以下示例中使用 spaCy 的原因。 例如,我们使用**文本检索会议****TREC**)数据集,它是一个问题分类器。
<colgroup><col style="text-align: left"> <col style="text-align: left"></colgroup>
|
......@@ -308,7 +308,7 @@ print(next(iter(test_iter)))
`sort_key`使用我们传递的`lambda`函数对数据集进行排序。 在某些情况下,对数据集进行排序会有所帮助,而在大多数情况下,随机性会帮助网络学习一般情况。 `Iterator`足够聪明,可以使用通过参数传递的批处理大小来批处理输入数据集,但是它并不止于此。 它可以动态地将所有序列填充到每批最长序列的长度。 `Iterator`的输出(如`print`语句所示)为`TEXT`数据,其大小为`16x99`,其中`99`是我们为测试数据集传递的批处理大小,而 16 是该数据集的长度。 该特定批次中最长的序列。
如果`Iterator`类需要更巧妙地处理事情怎么办? 如果数据集用于语言建模,并且我们需要一个数据集来进行**在整个时间** **BPTT** )中的反向传播,那该怎么办? `torchtext`也为这些模块抽象了模块,这些模块继承自我们刚刚使用的`Iterator`类。 `BucketIterator`模块将序列进行更智能的分组,以便将具有相同长度的序列归为一组,并且此减少了将噪声引入数据集的不必要填充的长度。 `BucketIterator`还可以在每个时期对批次进行混洗,并在数据集中保持足够的随机性,从而使网络无法从数据集中的顺序中学习,这实际上并没有在教授任何现实世界的信息。
如果`Iterator`类需要更巧妙地处理事情怎么办? 如果数据集用于语言建模,并且我们需要一个数据集来进行**在整个时间****BPTT**)中的反向传播,那该怎么办? `torchtext`也为这些模块抽象了模块,这些模块继承自我们刚刚使用的`Iterator`类。 `BucketIterator`模块将序列进行更智能的分组,以便将具有相同长度的序列归为一组,并且此减少了将噪声引入数据集的不必要填充的长度。 `BucketIterator`还可以在每个时期对批次进行混洗,并在数据集中保持足够的随机性,从而使网络无法从数据集中的顺序中学习,这实际上并没有在教授任何现实世界的信息。
`BPTTIterator`是从`Iterator`类继承的另一个模块,可帮助语言建模数据集,并且需要为 *t* 的每个输入从 *t + 1* 获取标签。 *t* 是时间。 `BPTTIterator`接受输入数据的连续流和输出数据的连续流(在翻译网络的情况下,输入流和输出流可以不同,在语言建模网络的情况下,输入流和输出流可以相同)进行转换 它遵循前面描述的时间序列规则的迭代器。
......@@ -360,9 +360,9 @@ print(next(iter(test_iter)))
#### 火炬音频
音频实用程序可能是 PyTorch 所有实用程序包中最不成熟的程序包。 无法安装在`pip`之上的事实证明了这一主张。 但是,`torchaudio`涵盖了音频域中任何问题陈述的基本用例。 此外,PyTorch 还向内核添加了一些方便的功能,例如**逆快速傅里叶变换** **IFFT** )和**稀疏快速傅里叶变换****SFFT** ) ,显示 PyTorch 在音频领域的进步。
音频实用程序可能是 PyTorch 所有实用程序包中最不成熟的程序包。 无法安装在`pip`之上的事实证明了这一主张。 但是,`torchaudio`涵盖了音频域中任何问题陈述的基本用例。 此外,PyTorch 还向内核添加了一些方便的功能,例如**逆快速傅里叶变换****IFFT**)和**稀疏快速傅里叶变换****SFFT**) ,显示 PyTorch 在音频领域的进步。
`torchaudio`依赖于跨平台音频格式更改器**声音交换** **SoX** )。 一旦安装了依赖项,就可以使用 Python 设置文件从源文件中安装。
`torchaudio`依赖于跨平台音频格式更改器**声音交换****SoX**)。 一旦安装了依赖项,就可以使用 Python 设置文件从源文件中安装。
```py
python setup.py install
......@@ -504,7 +504,7 @@ trainer = Engine(training_loop)
这很聪明,但这并没有节省用户大量时间,也没有兑现承诺,例如删除样板。 它所做的只是删除两个`for`循环并添加`Engine`对象创建的另一行。 这并不是 Ignite 的真正目的。 Ignite 尝试同时使编码变得有趣且灵活,从而有助于避免重复样板。
Ignite 提供了一些常用功能,例如有监督的培训或有监督的评估,并且还使用户可以灵活地定义自己的培训功能,例如培训 GAN,**强化学习** **RL** )算法,依此类推。
Ignite 提供了一些常用功能,例如有监督的培训或有监督的评估,并且还使用户可以灵活地定义自己的培训功能,例如培训 GAN,**强化学习****RL**)算法,依此类推。
```py
from ignite.engine import create_supervised_trainer, create_supervised_evaluator
......
......@@ -2,7 +2,7 @@
计算机视觉是使计算机具有视觉效果的工程流。 它支持各种图像处理,例如 iPhone,Google Lens 等中的人脸识别。 计算机视觉已经存在了几十年,可能最好在人工智能的帮助下进行探索,这将在本章中进行演示。
几年前,我们在 ImageNet 挑战中达到了计算机视觉的人类准确性。 在过去的十年中,计算机视觉发生了巨大的变化,从以学术为导向的对象检测问题到在实际道路上自动驾驶汽车使用的分割问题。 尽管人们提出了许多不同的网络体系结构来解决计算机视觉问题,但是**卷积神经网络** **CNN** )击败了所有这些。
几年前,我们在 ImageNet 挑战中达到了计算机视觉的人类准确性。 在过去的十年中,计算机视觉发生了巨大的变化,从以学术为导向的对象检测问题到在实际道路上自动驾驶汽车使用的分割问题。 尽管人们提出了许多不同的网络体系结构来解决计算机视觉问题,但是**卷积神经网络****CNN**)击败了所有这些。
在本章中,我们将讨论基于 PyTorch 构建的基本 CNN,以及它们的变体,它们已经成功地应用于一些为大公司提供支持的最新模型中。
......@@ -257,7 +257,7 @@ trainloader, testloader = get_data()
在下一行中定义的损失函数也是`torch.nn.Module`的子类,它也具有`forward()`函数,该函数由`__call__()`和向后函数调用。 这使我们可以灵活地创建自定义损失函数。
在以后的章节中,我们将提供示例。 现在,我们将使用一个称为`CrossEntropyLoss()`的内置损失函数。 就像前面几章中的一样,我们将使用 PyTorch 优化程序包来获取预定义的优化程序。 对于此示例,我们将**随机梯度下降** **SGD** )用于示例,但与上一章不同,我们将使用带有动量的 SGD,这有助于我们向右加速梯度 方向。
在以后的章节中,我们将提供示例。 现在,我们将使用一个称为`CrossEntropyLoss()`的内置损失函数。 就像前面几章中的一样,我们将使用 PyTorch 优化程序包来获取预定义的优化程序。 对于此示例,我们将**随机梯度下降****SGD**)用于示例,但与上一章不同,我们将使用带有动量的 SGD,这有助于我们向右加速梯度 方向。
##### 注意
......
......@@ -2,15 +2,15 @@
神经网络今天试图解决的主要挑战是处理,理解,压缩和生成顺序数据。 顺序数据可以被模糊地描述为任何依赖于上一个数据点和下一个数据点的东西。 尽管可以概括基本方法,但是处理不同类型的顺序数据需要不同的技术。 我们将探讨顺序数据处理单元的基本构建模块,以及常见问题及其广泛接受的解决方案。
在本章中,我们将研究顺序数据。 人们用于顺序数据处理的规范数据是自然语言,尽管时间序列数据,音乐,声音和其他数据也被视为顺序数据。 **自然语言处理** **NLP** )和理解已被广泛探索,并且它是当前活跃的研究领域。 人类的语言异常复杂,我们整个词汇的可能组合超过了宇宙中原子的数量。 但是,深层网络通过使用诸如嵌入和注意之类的某些技术可以很好地处理此问题。
在本章中,我们将研究顺序数据。 人们用于顺序数据处理的规范数据是自然语言,尽管时间序列数据,音乐,声音和其他数据也被视为顺序数据。 **自然语言处理****NLP**)和理解已被广泛探索,并且它是当前活跃的研究领域。 人类的语言异常复杂,我们整个词汇的可能组合超过了宇宙中原子的数量。 但是,深层网络通过使用诸如嵌入和注意之类的某些技术可以很好地处理此问题。
## 递归神经网络简介
**递归神经网络** **RNN** )是顺序数据处理的实际实现。 顾名思义,RNN 重新遍历上一次运行中保存的信息的数据,并试图像人类一样找到序列的含义。
**递归神经网络****RNN**)是顺序数据处理的实际实现。 顾名思义,RNN 重新遍历上一次运行中保存的信息的数据,并试图像人类一样找到序列的含义。
尽管原始 RNN(在输入中为每个单元展开一个简单的 RNN 单元)是一个革命性的想法,但未能提供可用于生产的结果。 主要障碍是长期依赖问题。 当输入序列的长度增加时,网络到达最后一个单元时将无法从初始单位(单词,如果是自然语言)中记住信息。 我们将在接下来的部分中看到 RNN 单元包含的内容以及如何将其展开。
几次迭代和多年的研究得出了 RNN 架构设计的几种不同方法。 最新的模型现在使用**长短期内存** **LSTM** )实现或**门控循环单元****GRU** )。 这两种实现都将 RNN 单元内的门用于不同目的,例如忘记门,它使网络忘记不必要的信息。 这些体系结构具有香草 RNN 所存在的长期依赖性问题,因此使用门不仅要忘记不必要的信息,而且要记住在长距离移动到最后一个单元时所必需的信息。
几次迭代和多年的研究得出了 RNN 架构设计的几种不同方法。 最新的模型现在使用**长短期内存****LSTM**)实现或**门控循环单元****GRU**)。 这两种实现都将 RNN 单元内的门用于不同目的,例如忘记门,它使网络忘记不必要的信息。 这些体系结构具有香草 RNN 所存在的长期依赖性问题,因此使用门不仅要忘记不必要的信息,而且要记住在长距离移动到最后一个单元时所必需的信息。
注意是下一个重大发明,它可以帮助网络将注意力集中在输入的重要部分上,而不是搜索整个输入并试图找到答案。 实际上,来自 Google Brain 和多伦多大学的一个团队证明,注意力可以击败 LSTM 和 GRU 网络[1]。 但是,大多数实现都同时使用 LSTM / GRU 和注意力。
......@@ -18,7 +18,7 @@
数据处理是序列数据(尤其是自然语言)的主要挑战之一。 PyTorch 提供了一些实用程序包来处理该问题。 我们将使用预处理后的数据来简化实施,但是我们将遍历实用程序包以了解它们的工作原理。 与这些实用程序包一起,我们将使用`torchtext`,它消除了处理输入数据时将面临的许多困难。
尽管本章全都是关于顺序数据的,但我们将专注于顺序数据的一个子集,这是自然语言。 特定于自然语言的一些研究人员认为,我们使用 LSTM 或 GRU 处理输入的方式不是应该如何处理自然语言。 自然语言在单词之间保持树状的层次关系,我们应该加以利用。 **堆栈增强型解析器-解释器神经网络** **SPINN** )[2]是来自 Stanford NLP 组的一种此类实现。 这种处理树状结构序列数据的特殊类型的网络是*递归神经网络*(与递归神经网络不同)。 在本章的最后一部分中,我们将详细介绍 SPINN。
尽管本章全都是关于顺序数据的,但我们将专注于顺序数据的一个子集,这是自然语言。 特定于自然语言的一些研究人员认为,我们使用 LSTM 或 GRU 处理输入的方式不是应该如何处理自然语言。 自然语言在单词之间保持树状的层次关系,我们应该加以利用。 **堆栈增强型解析器-解释器神经网络****SPINN**)[2]是来自 Stanford NLP 组的一种此类实现。 这种处理树状结构序列数据的特殊类型的网络是*递归神经网络*(与递归神经网络不同)。 在本章的最后一部分中,我们将详细介绍 SPINN。
## 问题
......@@ -96,7 +96,7 @@ array([[O., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
使用自然语言(或由离散的单个单元组成的任何序列)的标准方法是将每个单词转换为一个热编码矢量,并将其用于网络的后期。 这种方法的明显缺点是,随着词汇量的增加,输入层的大小也会增加。
词嵌入是减少阵列或张量维数的数十年历史的想法。 **潜在 Dirichlet 分配** **LDA** )和**潜在语义分析****LSA** )是我们用来进行嵌入的两个此类示例。 但是,在 Facebook 研究科学家 Tomas Mikolov 和他的团队于 2013 年实施 word2vec 之后,就开始将嵌入视为前提。
词嵌入是减少阵列或张量维数的数十年历史的想法。 **潜在 Dirichlet 分配****LDA**)和**潜在语义分析****LSA**)是我们用来进行嵌入的两个此类示例。 但是,在 Facebook 研究科学家 Tomas Mikolov 和他的团队于 2013 年实施 word2vec 之后,就开始将嵌入视为前提。
Word2vec 是一种无监督的学习算法,在这种算法中,网络未经训练就进行嵌入。 这意味着您可以在一个英语数据集上训练 word2vec 模型,并使用它为另一模型生成嵌入。
......@@ -352,7 +352,7 @@ criterion = nn.CrossEntropyLoss()
opt = optim.Adam(model.parameters(), lr=lr)
```
尽管 PyTorch 会为用户进行反向传播,并且反向传播在概念上始终是相同的,但顺序网络的反向传播与我们在普通网络中看到的反向传播并不完全相似。 在这里,我们通过时间( **BPTT** )进行**反向传播。 为了了解 BPTT 的工作原理,我们必须假设 RNN 是相似 RNN 单元的长重复单元,而不是将相同的输入视为通过同一 RNN 单元传递。**
尽管 PyTorch 会为用户进行反向传播,并且反向传播在概念上始终是相同的,但顺序网络的反向传播与我们在普通网络中看到的反向传播并不完全相似。 在这里,我们通过时间(**BPTT**)进行**反向传播。 为了了解 BPTT 的工作原理,我们必须假设 RNN 是相似 RNN 单元的长重复单元,而不是将相同的输入视为通过同一 RNN 单元传递。**
如果我们在句子中有五个单词,则我们有五个 RNN 单元,但是所有单元的权重都相同,并且当我们更新一个 RNN 单元的权重时,我们将更新所有 RNN 单元的权重。 现在,如果将输入分为五个时间步,每个单词位于每个时间步,则我们应该能够轻松描绘每个单词如何通过每个 RNN 单元。 在进行反向传播时,我们将遍历每个 RNN 单元,并在每个时间步长累积梯度。 更新一个 RNN 单元的权重也会更新其他 RNN 单元的权重。 由于所有五个单元都具有渐变,并且每次更新都会更新所有五个单元的权重,因此我们最终将每个单元的权重更新了五次。 无需进行五次更新,而是将梯度累加在一起并更新一次。 这是 BPTT。
......@@ -411,7 +411,7 @@ class Encoder(nn.Module):
#### LSTM 和 GRU
虽然 PyTorch 允许访问粒度`LSTMCell``GRUCell` API,但它也可以处理用户不需要粒度的情况。 这在用户不需要更改 LSTM 工作原理的内部但性能最为重要的情况下特别有用,因为 Python 循环的速度很慢。 `torch.nn`模块具有用于 LSTM 和 GRU 网络的高级 API,这些 API 封装了`LSTMCell``GRUCell`,并使用 **cuDNN****CUDA 深度神经网络**)实现了有效执行。 LSTM 和 cuDNN GRU。
虽然 PyTorch 允许访问粒度`LSTMCell``GRUCell` API,但它也可以处理用户不需要粒度的情况。 这在用户不需要更改 LSTM 工作原理的内部但性能最为重要的情况下特别有用,因为 Python 循环的速度很慢。 `torch.nn`模块具有用于 LSTM 和 GRU 网络的高级 API,这些 API 封装了`LSTMCell``GRUCell`,并使用 **cuDNN****CUDA 深度神经网络**)实现了有效执行。 LSTM 和 cuDNN GRU。
```py
class Encoder(nn.Module):
......
......@@ -6,7 +6,7 @@
生成网络已经在不同的深度学习领域,特别是在计算机视觉领域显示出了可喜的成果。 去模糊或提高图像的分辨率,图像修补以填充缺失的片段,对音频片段进行降噪,从文本生成语音,自动回复消息以及从文本生成图像/视频是一些研究的活跃领域。
在本章中,我们将讨论一些主要的生成网络体系结构。 更准确地说,我们将看到一个自回归模型和一个**生成对抗网络** **GAN** )。 首先,我们将了解这两种体系结构的基本组成部分是什么,以及它们之间的区别。 除此说明外,我们还将介绍一些示例和 PyTorch 代码。
在本章中,我们将讨论一些主要的生成网络体系结构。 更准确地说,我们将看到一个自回归模型和一个**生成对抗网络****GAN**)。 首先,我们将了解这两种体系结构的基本组成部分是什么,以及它们之间的区别。 除此说明外,我们还将介绍一些示例和 PyTorch 代码。
## 定义方法
......@@ -31,7 +31,7 @@ GAN 的创建者 Ian Goodfellow 描述了几类生成网络:
* 自回归模型
*
自回归模型是从先前的值推断当前值的模型,正如我们在[第 5 章](../Text/5.html "Chapter 5\. Sequential Data Processing")*顺序数据处理*中使用 RNN 所讨论的那样。 **可变自动编码器** **VAE** )是自动编码器的一种变体,由编码器和解码器组成,其中编码器将输入编码为低维潜在空间矢量, 解码器解码潜矢量以生成类似于输入的输出。
自回归模型是从先前的值推断当前值的模型,正如我们在[第 5 章](../Text/5.html "Chapter 5\. Sequential Data Processing")*顺序数据处理*中使用 RNN 所讨论的那样。 **可变自动编码器****VAE**)是自动编码器的一种变体,由编码器和解码器组成,其中编码器将输入编码为低维潜在空间矢量, 解码器解码潜矢量以生成类似于输入的输出。
整个研究界都同意,GAN 是人工智能世界中的下一个重要事物之一。 GAN 具有生成网络和对抗网络,并且两者相互竞争以生成高质量的输出图像。 GAN 和自回归模型都基于不同的原理工作,但是每种方法都有其自身的优缺点。 在本章中,我们将使用这两种方法开发一个基本示例。
......@@ -45,7 +45,7 @@ GAN 的创建者 Ian Goodfellow 描述了几类生成网络:
自回归模型独立生成第一个输入,或者我们将其提供给网络。 例如,对于 RNN,我们将第一个单词提供给网络,而网络使用我们提供的第一个单词来假设第二个单词是什么。 然后,它使用第一个和第二个单词来预测第三个单词,依此类推。
尽管大多数生成任务都是在图像上完成的,但我们的自回归生成是在音频上。 我们将构建 WaveNet,它是 Google DeepMind 的研究成果,它是当前音频生成的最新实现,尤其是用于文本到语音处理。 通过这一过程,我们将探索什么是用于音频处理的 PyTorch API。 但是在查看 WaveNet 之前,我们需要实现 WaveNet 的基础模块 PixelCNN,它基于自回归**卷积神经网络** **CNN** )构建。
尽管大多数生成任务都是在图像上完成的,但我们的自回归生成是在音频上。 我们将构建 WaveNet,它是 Google DeepMind 的研究成果,它是当前音频生成的最新实现,尤其是用于文本到语音处理。 通过这一过程,我们将探索什么是用于音频处理的 PyTorch API。 但是在查看 WaveNet 之前,我们需要实现 WaveNet 的基础模块 PixelCNN,它基于自回归**卷积神经网络****CNN**)构建。
自回归模型已经被使用和探索了很多,因为每种流行的方法都有其自身的缺点。 自回归模型的主要缺点是它们的速度,因为它们顺序生成输出。 由于前向传递也是顺序的,因此在 PixelRNN 中情况变得更糟。
......
......@@ -80,7 +80,7 @@
## 马尔可夫决策过程
让我们通过学习称为**马尔可夫决策过程** **MDP** )的数学框架来完成对强化学习问题的定义。
让我们通过学习称为**马尔可夫决策过程****MDP**)的数学框架来完成对强化学习问题的定义。
MDP 定义有五件事:
......@@ -166,7 +166,7 @@ MDP 定义有五件事:
![Deep Q-learning](img/B09475_07_005.jpg)
我们可以通过考虑下一个状态的值来计算预期的 *Q* 。 我们可以通过考虑到目前为止的累积奖励来计算当前的 *Q* 。 在这些 Q 函数之间的差上使用**均方误差** **MSE** )可能是我们的损失。 研究人员建议的一项改进是,当误差较大时,使用平均绝对误差代替 MSE。 当 Q 函数的估计值非常嘈杂时,这使它对异常值更加健壮。 这种损失称为胡贝尔损失。
我们可以通过考虑下一个状态的值来计算预期的 *Q* 。 我们可以通过考虑到目前为止的累积奖励来计算当前的 *Q* 。 在这些 Q 函数之间的差上使用**均方误差****MSE**)可能是我们的损失。 研究人员建议的一项改进是,当误差较大时,使用平均绝对误差代替 MSE。 当 Q 函数的估计值非常嘈杂时,这使它对异常值更加健壮。 这种损失称为胡贝尔损失。
![Deep Q-learning](img/B09475_07_006.jpg)
......
......@@ -4,13 +4,13 @@
PyTorch 以其干净的框架而闻名,因此要获得研究所需的生产能力和灵活性是一项艰巨的任务。 我认为,将生产支持推向核心的主要障碍是摆脱 Python 的境界,并将 PyTorch 模型转移到具有多线程功能的更快的线程安全语言中。 但是随后,这违反了 PyTorch 当时所遵循的 Python 优先原则。
解决此问题的第一步是使**开放式神经网络交换** **ONNX** )格式稳定,并与所有流行的框架兼容(至少与具有良好功能的框架兼容) 模块)。 ONNX 定义了深度学习图所需的基本运算符和标准数据类型。 这引导了 ONNX 进入 PyTorch 核心的道路,并且它与 ONNX 转换器一起为流行的深度学习框架(例如 CNTK,MXNet,TensorFlow 等)构建。
解决此问题的第一步是使**开放式神经网络交换****ONNX**)格式稳定,并与所有流行的框架兼容(至少与具有良好功能的框架兼容) 模块)。 ONNX 定义了深度学习图所需的基本运算符和标准数据类型。 这引导了 ONNX 进入 PyTorch 核心的道路,并且它与 ONNX 转换器一起为流行的深度学习框架(例如 CNTK,MXNet,TensorFlow 等)构建。
ONNX 很棒,并且每个人都喜欢它,但是 ONNX 的主要缺点之一是其脚本模式。 也就是说,ONNX 运行一次图形以获取有关图形的信息,然后将其转换为 ONNX 格式。 因此,ONNX 无法迁移模型中的控制流(将`for`循环用于递归神经网络(RNN)模型的不同序列长度)。
生产 PyTorch 的第二种方法是在 PyTorch 本身中构建高性能后端。 Caffe2 的核心与 PyTorch 核心合并在一起,而不是从头开始构建一个,但 Python API 保持不变。 但是,这并不能解决 Python 语言所具有的问题。
接下来是 TorchScript 的引入,它可以将本机 Python 模型转换为可以在高性能 Universe 中加载的序列化形式,例如 C ++线程。 PyTorch 的后端 LibTorch 可以读取 TorchScript,这使 PyTorch 高效。 有了它,开发人员可以对模型进行原型设计,甚至可以使用 Python 本身对其进行训练。 训练后,可以将模型转换为到**中间表示** **IR** )。 目前,仅开发了 C ++后端,因此可以将 IR 作为 C ++对象加载,然后可以从 PyTorch 的 C ++ API 中读取。 TorchScript 甚至可以在 Python 程序中转换控制流,这在生产支持的情况下使其优于 ONNX 方法。 TorchScript 本身是 Python 语言中可能的操作的子集,因此不允许任何 Python 操作用 TorchScript 编写。 官方文档本身提供了非常详细的说明,并讨论了可能的情况和不可能的情况,以及许多示例[1]。
接下来是 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 网络。
......@@ -313,7 +313,7 @@ pip install model-archiver[onnx]
```
现在,我们可以安装 MXNet 模型服务器。 它基于 **Java 虚拟机** **JVM** )构建,因此从 JVM 调用了运行有我们模型实例的多个线程。 利用 JVM 支持的复杂性,可以将 MXNet 服务器扩展为处理数千个请求的多个进程。
现在,我们可以安装 MXNet 模型服务器。 它基于 **Java 虚拟机****JVM**)构建,因此从 JVM 调用了运行有我们模型实例的多个线程。 利用 JVM 支持的复杂性,可以将 MXNet 服务器扩展为处理数千个请求的多个进程。
MXNet 服务器带有管理 API,该 API 通过 HTTP 提供。 这有助于生产团队根据需要增加/减少资源。 除了处理工人规模之外,管理 API 还具有其他选项。 但是我们不会在这里深入探讨。 由于模型服务器在 JVM 上运行,因此我们需要安装 Java8。此外,MXNet 模型服务器在 Windows 上仍处于试验模式,但在 Linux 风味和 Mac 上稳定。
......
# 前言
**强化学习** **RL** )使您可以在业务环境中开发智能,快速且自学的系统。 这是培训您的学习型代理商并解决人工智能中各种问题的有效方法,从游戏,自动驾驶汽车和机器人到企业应用程序,其范围从数据中心节能(冷却数据中心)到智能仓储解决方案。
**强化学习****RL**)使您可以在业务环境中开发智能,快速且自学的系统。 这是培训您的学习型代理商并解决人工智能中各种问题的有效方法,从游戏,自动驾驶汽车和机器人到企业应用程序,其范围从数据中心节能(冷却数据中心)到智能仓储解决方案。
本书涵盖了通过将深度神经网络体系结构与强化学习相结合而在深度强化学习中取得的主要进步和成功。 该书还向读者介绍了强化学习的概念,它的优点以及为什么它如此受欢迎。 它讨论了 MDP,蒙特卡洛树搜索,策略和值迭代,时间差异学习(例如 Q 学习)和 SARSA。 您将使用 TensorFlow 和 OpenAI Gym 来构建简单的神经网络模型,以从自己的行为中学习。 您还将看到强化学习算法如何在游戏,图像处理和 NLP 中发挥作用。
......
......@@ -151,7 +151,7 @@ softmax 函数主要用于处理分类问题,并且最好在输出层中使用
# 整流线性单位功能
**整流线性单元**(更称为 **ReLU** )是使用最广泛的激活函数:
**整流线性单元**(更称为 **ReLU**)是使用最广泛的激活函数:
![](img/06cd6c36-3f74-4314-b132-e936dc4ddd03.png)
......@@ -439,7 +439,7 @@ Xavier 初始化是神经网络中权重的初始化,是遵循高斯分布的
设置好此结构后,我们必须重复执行这些优化步骤(更新![](img/1ac8a61d-f0cd-4875-bb19-8e24af95ab5b.png)和![](img/1dae3d1b-e4bc-4a91-b6f7-c05238e0f6f5.png)),以进行多次迭代以训练我们的神经网络。
这将我们带到了神经网络基础的结尾,它构成了任何浅或深的神经网络的基本构建块。 我们的下一个前沿将是了解一些著名的深度神经网络架构,例如**递归神经网络** **RNNs** )和**卷积神经网络****CNN** )。 除此之外,我们还将介绍基准的深度神经网络体系结构,例如 AlexNet,VGG-net 和 Inception。
这将我们带到了神经网络基础的结尾,它构成了任何浅或深的神经网络的基本构建块。 我们的下一个前沿将是了解一些著名的深度神经网络架构,例如**递归神经网络****RNNs**)和**卷积神经网络****CNN**)。 除此之外,我们还将介绍基准的深度神经网络体系结构,例如 AlexNet,VGG-net 和 Inception。
# 递归神经网络
......@@ -590,7 +590,7 @@ Hinton 等人从 ImageNet 分类到深度卷积神经网络的 AlexNet 架构。
# VGG-Net 模型
VGG-Net 由牛津大学**视觉几何组** **VGG** )的 Karen Simonyan 和 Andrew Zisserman 引入。 他们使用大小为 3 x 3 的小型卷积滤波器训练深度为 16 和 19 的网络。他们的团队分别在 ImageNet Challenge 2014 的本地化和分类任务中获得了第一和第二名。
VGG-Net 由牛津大学**视觉几何组****VGG**)的 Karen Simonyan 和 Andrew Zisserman 引入。 他们使用大小为 3 x 3 的小型卷积滤波器训练深度为 16 和 19 的网络。他们的团队分别在 ImageNet Challenge 2014 的本地化和分类任务中获得了第一和第二名。
通过向模型添加更多非线性来设计更深层的神经网络的想法导致合并了较小的滤波器,以确保网络没有太多参数。 在训练时,很难收敛模型,因此首先使用预先训练的简单神经网络模型来初始化较深架构的权重。 但是,现在我们可以直接使用 xavier 初始化方法,而无需训练神经网络来初始化权重。 由于模型的深度,训练起来很慢。
......@@ -734,7 +734,7 @@ Q 学习涉及的步骤:
为简化起见,我们可以说,给定状态 *s* 和动作 *a* 的 Q 值由当前奖励 *r* 以及新状态在其所有操作中的折现(![](img/5a4faa30-228a-416e-90cf-69810aca8cbd.png))最大 *Q* 最大值。 与当前奖励相比,折扣因子延迟了来自未来的奖励。 例如,今天的 100 奖励在将来的价值将超过 100。 同样,将来的 100 奖励必须今天价值不到 100。 因此,我们将折现未来的奖励。 连续重复此更新过程会导致 Q 表值收敛到给定状态下给定操作的预期未来奖励的准确度量。
当状态空间和动作空间的数量增加时,很难维护 Q 表。 在现实世界中,状态空间无限大。 因此,需要另一种无需 Q 表即可生成 *Q(s,a)*的方法。 一种解决方案是用功能替换 Q 表。 该函数将状态作为矢量形式的输入,并输出给定​​状态下所有动作的 Q 值矢量。 该函数逼近器可以由神经网络表示,以预测 Q 值。 因此,当状态和动作空间变大时,我们可以添加更多的层并适合于深度神经网络,以更好地预测 Q 值,这对于 Q 表来说似乎是不可能的。 这样就产生了 Q 网络,如果使用了更深层的神经网络(例如卷积神经网络),那么它会导致**深层 Q 网络** **DQN** )。
当状态空间和动作空间的数量增加时,很难维护 Q 表。 在现实世界中,状态空间无限大。 因此,需要另一种无需 Q 表即可生成 *Q(s,a)*的方法。 一种解决方案是用功能替换 Q 表。 该函数将状态作为矢量形式的输入,并输出给定​​状态下所有动作的 Q 值矢量。 该函数逼近器可以由神经网络表示,以预测 Q 值。 因此,当状态和动作空间变大时,我们可以添加更多的层并适合于深度神经网络,以更好地预测 Q 值,这对于 Q 表来说似乎是不可能的。 这样就产生了 Q 网络,如果使用了更深层的神经网络(例如卷积神经网络),那么它会导致**深层 Q 网络****DQN**)。
有关 Q 学习和深度 Q 网络的更多详细信息,将在[第 5 章](../Text/05.html)*Q 学习和深度 Q 网络*中进行介绍。
......@@ -742,7 +742,7 @@ Q 学习涉及的步骤:
A3C 算法由 Google DeepMind 和 MILA 的联合团队于 2016 年 6 月发布。 它更简单并且具有更轻的框架,该框架使用异步梯度下降来优化深度神经网络。 它速度更快,并且能够在多核 CPU 而非 GPU 上显示出良好的结果。 A3C 的一大优势是它可以在连续动作空间和离散动作空间上工作。 结果,它为许多具有复杂状态和动作空间的新挑战性难题打开了门户。
我们将在此处重点讨论,但是我们将在[第 6 章](../Text/06.html)*异步方法*中进行更深入的探讨。 让我们从名称开始,即**异步优势参与者批评者** **A3C** )算法,然后将其解压缩以获得该算法的基本概述:
我们将在此处重点讨论,但是我们将在[第 6 章](../Text/06.html)*异步方法*中进行更深入的探讨。 让我们从名称开始,即**异步优势参与者批评者****A3C**)算法,然后将其解压缩以获得该算法的基本概述:
* **异步**:在 DQN 中,您还记得我们将神经网络与我们的代理一起使用来预测动作。 这意味着只有一个代理,并且它正在与一个环境交互。 A3C 所做的是创建代理环境的多个副本,以使代理更有效地学习。 A3C 具有一个全球网络和多个工作人员代理,其中每个代理都有其自己的一组网络参数,并且每个参数都与其环境副本同时进行交互,而无需与另一个代理的环境进行交互。 它比单个代理更好的原因是每个代理的经验独立于其他代理的经验。 因此,所有工人代理人的总体经验导致了各种各样的培训。
* **Actor-critic** :Actor-critic 结合了价值迭代和策略迭代的优势。 因此,网络将为给定状态 s 估计值函数 V(s)和策略π(s)。 函数逼近器神经网络的顶部将有两个单独的全连接层,分别输出状态的值和状态策略。 代理使用值,该值充当批评者来更新策略,即,智能角色。
......
......@@ -570,4 +570,4 @@ Q 学习和 Q 网络都需要付出一定的稳定性。 在某些情况下,
在本章中,我们学习了 OpenAI Gym,包括安装各种重要功能以加载,渲染和理解环境状态操作空间。 我们了解了 Epsilon-Greedy 方法作为探索与开发难题的解决方案,并尝试实现基本的 Q 学习和 Q 网络算法,以训练增强学习代理从 OpenAI Gym 导航环境。
在下一章中,我们将介绍强化学习中最基本的概念,包括**马尔可夫决策过程****MDP** ),Bellman 方程和 Markov Chain Monte Carlo。
\ No newline at end of file
在下一章中,我们将介绍强化学习中最基本的概念,包括**马尔可夫决策过程****MDP**),Bellman 方程和 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 任务找到最佳策略。
......@@ -50,7 +50,7 @@ MDP 试图通过将网格划分为状态,动作,模型/转换模型和奖励
**动作**是代理可以在特定状态下执行或执行的操作。 换句话说,动作是允许代理在给定环境中执行的一组操作。 像状态一样,动作也可以是离散的或连续的。
考虑以下具有 12 个离散状态和 4 个离散动作( **UP****DOWN,RIGHT****LEFT** )的 gridworld 示例:
考虑以下具有 12 个离散状态和 4 个离散动作(**UP****DOWN,RIGHT****LEFT**)的 gridworld 示例:
![](img/0afe050d-5e8b-4dbf-82c0-be526f469140.png)
......@@ -368,7 +368,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* 观察值的可能性。
......
......@@ -163,7 +163,7 @@
# 时差规则
首先,**时间差** **TD** )是两个时间步之间的值估计值之差。 这与基于结果的蒙特卡洛方法不同,后者基于前瞻性的观点直到情节结束才完成,以更新学习参数。 在时间差异学习的情况下,仅需完成一个步骤,而下一步的状态值估计将用于更新当前状态的值估计。 因此,学习参数会不断更新。 进行时差学习的不同规则是 TD(1),TD(0)和 TD(![](img/d3a3ee65-880c-4e12-8cf6-1be47b234d13.png))规则。 所有方法中的基本概念是,下一步的值估计用于更新当前状态的值估计。
首先,**时间差****TD**)是两个时间步之间的值估计值之差。 这与基于结果的蒙特卡洛方法不同,后者基于前瞻性的观点直到情节结束才完成,以更新学习参数。 在时间差异学习的情况下,仅需完成一个步骤,而下一步的状态值估计将用于更新当前状态的值估计。 因此,学习参数会不断更新。 进行时差学习的不同规则是 TD(1),TD(0)和 TD(![](img/d3a3ee65-880c-4e12-8cf6-1be47b234d13.png))规则。 所有方法中的基本概念是,下一步的值估计用于更新当前状态的值估计。
# TD(1)规则
......@@ -348,7 +348,7 @@ end for
# 使用策略梯度的 Agent 学习 Pong
在本节中,我们将创建一个策略网络,该策略网络将使用来自 pong 环境的原始像素(来自 OpenAI 健身房的 **pong-v0** )作为输入。 策略网络是一个单独的隐藏层神经网络,它完全连接到输入层上 pong 的原始像素,还完全连接到包含单个节点的输出层,该单个节点返回了桨上升的可能性。 我要感谢 Andrej Karpathy 提出了一种使代理使用策略梯度进行学习的解决方案。 我们将尝试实现类似的方法。
在本节中,我们将创建一个策略网络,该策略网络将使用来自 pong 环境的原始像素(来自 OpenAI 健身房的 **pong-v0**)作为输入。 策略网络是一个单独的隐藏层神经网络,它完全连接到输入层上 pong 的原始像素,还完全连接到包含单个节点的输出层,该单个节点返回了桨上升的可能性。 我要感谢 Andrej Karpathy 提出了一种使代理使用策略梯度进行学习的解决方案。 我们将尝试实现类似的方法。
灰度大小为 80 * 80 的像素图像(我们将不使用 RGB,即 80 * 80 * 3)。 因此,我们有一个 80 * 80 的二进制网格,它告诉我们桨和球的位置,并将其作为输入输入到神经网络。 因此,神经网络将包含以下内容:
......@@ -607,6 +607,6 @@ while True:
# 概要
在本章中,我们介绍了强化学习中最著名的算法,策略梯度和参与者批评算法。 在制定政策梯度以加强学习中更好的基准测试方面,正在进行大量研究。 政策梯度的进一步研究包括**信任区域策略优化** **TRPO** ),**自然政策梯度****深度依赖策略梯度****DDPG** ),这些内容不在本书的讨论范围之内。
在本章中,我们介绍了强化学习中最著名的算法,策略梯度和参与者批评算法。 在制定政策梯度以加强学习中更好的基准测试方面,正在进行大量研究。 政策梯度的进一步研究包括**信任区域策略优化****TRPO**),**自然政策梯度****深度依赖策略梯度****DDPG**),这些内容不在本书的讨论范围之内。
在下一章中,我们将研究 Q 学习的基础知识,应用深度神经网络以及更多技术。
\ No newline at end of file
......@@ -334,9 +334,9 @@ Episode 10 completed with total reward 222.356805259 in 843 steps
让我们讨论游戏环境中的 Q 学习问题以及深度 Q 网络的发展。 考虑将 Q 学习应用于游戏环境,该状态将由玩家,障碍物,对手等的位置来定义,但这将是特定于游戏的,即使在我们创建时也不能在其他游戏环境中推广 一个以某种方式表示该游戏所有可能状态的 Q 表。
好吧,游戏环境有一个共同点,那就是全部由像素组成。 如果可以将像素输入可以映射到动作的模型中,则可以在所有游戏中将其推广。 DeepMind 的卷积神经网络实现具有游戏图像帧,其中输入和输出是该环境中每个可能动作的 Q 值。 卷积神经网络由三个卷积层和两个完全连接的层组成。 **卷积神经网络** **CNN** )的一个元素是池化层,在此已避免。 使用池化层的主要原因是在图像中进行对象检测的情况下,其中图像中对象的位置并不重要,而在此处,在游戏框架中对象的位置非常重要时,则不然。
好吧,游戏环境有一个共同点,那就是全部由像素组成。 如果可以将像素输入可以映射到动作的模型中,则可以在所有游戏中将其推广。 DeepMind 的卷积神经网络实现具有游戏图像帧,其中输入和输出是该环境中每个可能动作的 Q 值。 卷积神经网络由三个卷积层和两个完全连接的层组成。 **卷积神经网络****CNN**)的一个元素是池化层,在此已避免。 使用池化层的主要原因是在图像中进行对象检测的情况下,其中图像中对象的位置并不重要,而在此处,在游戏框架中对象的位置非常重要时,则不然。
因此,在游戏环境中,**深度 Q 网络** **DQN** )由连续的游戏帧组成,作为捕获动作的输入,并为游戏中所有可能的动作输出 Q 值。 游戏。 由于将深度神经网络用作 Q 函数的函数逼近器,因此此过程称为深度 Q 学习。
因此,在游戏环境中,**深度 Q 网络****DQN**)由连续的游戏帧组成,作为捕获动作的输入,并为游戏中所有可能的动作输出 Q 值。 游戏。 由于将深度神经网络用作 Q 函数的函数逼近器,因此此过程称为深度 Q 学习。
与 Q 网络相比,深度 Q 网络具有更强的泛化能力。 为了将 Q 网络转换为深度 Q 网络,我们需要进行以下改进:
......@@ -1282,7 +1282,7 @@ Episode 1003 with Reward : 1.0 at epsilon 0.0008856 in steps 232
# 蒙特卡罗树搜索算法
**蒙特卡洛树搜索** **MCTS** )是一种规划算法,是在出现人工窄智能问题时做出最佳决策的一种方法。 MCTS 致力于解决问题的预先规划方法。
**蒙特卡洛树搜索****MCTS**)是一种规划算法,是在出现人工窄智能问题时做出最佳决策的一种方法。 MCTS 致力于解决问题的预先规划方法。
在诸如 **minimax****游戏树**之类的早期算法未能显示出具有复杂问题的结果之后,MCTS 算法变得越来越重要。 那么,是什么使 MCTS 与过去的决策算法(例如 minimax)不同并且更好呢?
......@@ -1314,7 +1314,7 @@ MCTS 是独立于域的,不需要复杂的手写试探法。 因此,它是
# SARSA 算法
**状态-动作-奖励-状态-动作** **SARSA** )算法是一种基于策略的学习问题。 就像 Q 学习一样,SARSA 也是一个时差学习问题,也就是说,它会预测情节的下一步以估计未来的回报。 SARSA 和 Q 学习之间的主要区别在于,具有最大 Q 值的动作不用于更新当前状态动作对的 Q 值。 取而代之的是,选择作为当前策略结果的操作的 Q 值,或者由于采用诸如![](img/7c05c20a-2da5-422d-8b5e-78b2087f9585.png) -greedy 之类的探索步骤来更新当前状态操作对的 Q 值。 SARSA 之所以得名,是因为使用五元组 *Q(s,a,r,s',a')*完成了 Q 值更新,其中:
**状态-动作-奖励-状态-动作****SARSA**)算法是一种基于策略的学习问题。 就像 Q 学习一样,SARSA 也是一个时差学习问题,也就是说,它会预测情节的下一步以估计未来的回报。 SARSA 和 Q 学习之间的主要区别在于,具有最大 Q 值的动作不用于更新当前状态动作对的 Q 值。 取而代之的是,选择作为当前策略结果的操作的 Q 值,或者由于采用诸如![](img/7c05c20a-2da5-422d-8b5e-78b2087f9585.png) -greedy 之类的探索步骤来更新当前状态操作对的 Q 值。 SARSA 之所以得名,是因为使用五元组 *Q(s,a,r,s',a')*完成了 Q 值更新,其中:
* **s****和**:当前状态和操作
* **r** :采取行动后观察到的报酬 *a*
......@@ -1503,7 +1503,7 @@ Episode 10 completed with total reward 213.212231118 in 786 steps
# 概要
我们知道强化学习可以优化环境中智能体的回报,**马尔可夫决策过程** **MDP** )是一种环境表示和数学框架,用于使用状态对决策进行建模 ,动作和奖励。 在本章中,我们了解到 Q 学习是一种无需任何过渡模型即可为任何 MDP 找到最佳动作选择策略的方法。 另一方面,如果给出了转换模型,则值迭代会为任何 MDP 找到最佳的动作选择策略。
我们知道强化学习可以优化环境中智能体的回报,**马尔可夫决策过程****MDP**)是一种环境表示和数学框架,用于使用状态对决策进行建模 ,动作和奖励。 在本章中,我们了解到 Q 学习是一种无需任何过渡模型即可为任何 MDP 找到最佳动作选择策略的方法。 另一方面,如果给出了转换模型,则值迭代会为任何 MDP 找到最佳的动作选择策略。
我们还学习了另一个重要的话题,称为 Deep-Q 网络,这是一种经过改进的 Q 学习方法,它采用深度神经网络作为函数逼近器来在不同环境中进行泛化,这与特定于环境的 Q 表不同。 此外,我们还学会了在 OpenAI 体育馆环境中实施 Q 学习,深度 Q 网络和 SARSA 算法。 先前显示的大多数实现可能在具有更好的超参数值和更多训练集的情况下效果更好。
......
......@@ -50,7 +50,7 @@ Google DeepMind 和 MILA 的联合团队于 2016 年 6 月发布了用于深度
* 异步一站式 Q 学习
* 异步一步式 SARSA
* 异步 n 步 Q 学习
* **异步优势演员评论家** **A3C**
* **异步优势演员评论家****A3C**
将变体 A3C 应用于各种 Atari 2600 游戏时,在多核 CPU 上获得了更好的基准测试结果,相对于早期的深度强化学习算法而言,其结果所需的时间要短得多,后者需要在 GPU 驱动的机器上运行。 因此,由于依赖于昂贵的硬件资源(如 GPU)以及不同的复杂分布式体系结构,因此解决了该问题。 由于所有这些优点,A3C 学习代理是当前最先进的强化学习代理。
......
......@@ -12,7 +12,7 @@
# 实时策略游戏
Brett Sperry 首先使用术语**实时策略** **RTS** )作为宣传其游戏 Dune II 的标语。 实时策略游戏涉及玩家使用实时策略来增加资产,保存资产并利用它们来摧毁对手的资产。 它与需要在非常短的时间内做出的许多复杂的战术决策相关。
Brett Sperry 首先使用术语**实时策略****RTS**)作为宣传其游戏 Dune II 的标语。 实时策略游戏涉及玩家使用实时策略来增加资产,保存资产并利用它们来摧毁对手的资产。 它与需要在非常短的时间内做出的许多复杂的战术决策相关。
这与基于回合的策略游戏不同,在回合制策略游戏中,每个对手都有时间分析和采取行动,而其他对手则无法执行任何动作。 在实时策略游戏中,动作和反应都实时发生,因为环境中的其他实体(即对手)也很活跃,并且会同时执行动作。 在真实的策略游戏环境中,实体的形式多种多样,包括玩家,结构及其多样化的高维特征。 因此,目标是采取最佳措施在游戏环境中生存,直到您取得胜利为止,而环境中的一个或多个实体正在对您不利。
......
# AlphaGo –最好的强化学习
游戏为许多**人工智能** **AI** )算法提供了最佳的测试环境。 这些模拟环境具有成本效益,并且可以安全方式测试算法。 人工智能的主要目标是解决世界上最大的问题。 人工智能的主要全球目标是:
游戏为许多**人工智能****AI**)算法提供了最佳的测试环境。 这些模拟环境具有成本效益,并且可以安全方式测试算法。 人工智能的主要目标是解决世界上最大的问题。 人工智能的主要全球目标是:
* 消除贫困
* 消除饥饿
......@@ -21,7 +21,7 @@
如前所述,游戏是测试这些 AI 算法的最佳测试平台。 除了具有成本效益之外,没有两个游戏是相同的,因此能够使用从一个游戏中学到的知识并将其应用于另一个游戏,这是一般智慧的标志。 单个算法可以应用的游戏越多,它变得越通用。
我们第一次看到向**人工智能** **AGI** )迈出了巨大的一步,当时 DeepMind 证明了他们的 AI 可以击败许多 Atari 游戏,使其成为现存最通用的 AI 系统 。 DeepMind 在研究期刊 **Nature** 上发表了他们的论文[《通过深度强化学习进行人类级别控制》](http://www.davidqiu.com:8888/research/nature14236.pdf),由 Silver 等展示了他们的 AI 代理**深度 Q 学习器**,使用了深度强化学习算法,已成功应用于 50 种不同的 Atari 游戏,并在以下截图中显示了其中的 30 种,其性能均达到人类水平。 通用人工智能的发展方向是 Google 购买 DeepMind 的原因:
我们第一次看到向**人工智能****AGI**)迈出了巨大的一步,当时 DeepMind 证明了他们的 AI 可以击败许多 Atari 游戏,使其成为现存最通用的 AI 系统 。 DeepMind 在研究期刊 **Nature** 上发表了他们的论文[《通过深度强化学习进行人类级别控制》](http://www.davidqiu.com:8888/research/nature14236.pdf),由 Silver 等展示了他们的 AI 代理**深度 Q 学习器**,使用了深度强化学习算法,已成功应用于 50 种不同的 Atari 游戏,并在以下截图中显示了其中的 30 种,其性能均达到人类水平。 通用人工智能的发展方向是 Google 购买 DeepMind 的原因:
![](img/1ee7ccc9-af7f-42c3-85ed-94293d4cb9e2.jpg)
......@@ -86,7 +86,7 @@ DeepBlue 搜索国际象棋的游戏树到最低深度(因为不可能创建
在 Go 的情况下,基于搜索树覆盖所有可能位置的传统 AI 方法会失败。 原因是由于 2.08 x 10 <sup class="calibre205">170</sup> 可能的移动以及因此而难以评估每个可能的电路板位置的强度,因此搜索空间极其巨大。 因此,传统的蛮力方法在 Go 的巨大搜索空间中失败了。
因此,高级树搜索(例如具有深度神经网络的蒙特卡罗树搜索)被认为是捕捉人类用来玩围棋游戏的直觉的新颖方法。 这些神经网络是**卷积神经网络** **CNN** ),并为电路板拍摄图像,即电路板的描述,并通过一系列层激活它以找到最佳的 根据游戏的给定状态移动。
因此,高级树搜索(例如具有深度神经网络的蒙特卡罗树搜索)被认为是捕捉人类用来玩围棋游戏的直觉的新颖方法。 这些神经网络是**卷积神经网络****CNN**),并为电路板拍摄图像,即电路板的描述,并通过一系列层激活它以找到最佳的 根据游戏的给定状态移动。
AlphaGo 的体系结构中使用了两个神经网络,分别是:
......@@ -144,7 +144,7 @@ Silver et。的 Google DeepMind 在 AlphaGo in Nature(https://storage.googleap
Silver et。 等
让我们讨论前面详细显示的在 AlphaGo 中使用的**蒙特卡罗树搜索** **MCTS** ):
让我们讨论前面详细显示的在 AlphaGo 中使用的**蒙特卡罗树搜索****MCTS**):
* **a** :在每次仿真过程中,遍历树时选择了该边,该边具有作用值 *Q* 和值 *u(P)之和的最大值。 HTG5]是该边存储的先验概率 *P* 的函数。*
* **b** :扩展叶节点,即在策略网络![](img/401ce6a8-cd7f-48ee-8df4-f55cb8e8747b.png)之后处理新节点,并将每个操作的输出概率存储为先验概率 *P*
......
# 自动驾驶中的强化学习
在本章中,我们将介绍研究人员正在致力于使端到端自动驾驶成为可能的不同方法。 我们已经看到许多公司,例如 Google,特斯拉,Uber,梅赛德斯·奔驰,奥迪,沃尔沃,博世,还有更多公司进入自动驾驶汽车领域。 对于 AI 社区而言,端到端自动驾驶将是通往**人工智能** **AGI** )的下一个里程碑。
在本章中,我们将介绍研究人员正在致力于使端到端自动驾驶成为可能的不同方法。 我们已经看到许多公司,例如 Google,特斯拉,Uber,梅赛德斯·奔驰,奥迪,沃尔沃,博世,还有更多公司进入自动驾驶汽车领域。 对于 AI 社区而言,端到端自动驾驶将是通往**人工智能****AGI**)的下一个里程碑。
纵观汽车行业的当前趋势,我们看到以下几点:
......@@ -22,7 +22,7 @@
![](img/bad5916e-6b8d-4826-825e-0597efc5954d.png)
如上图所示,该过程的第一步是传感器数据的收集。 传感器包括摄像头,LIDAR,IMU,RADAR,GPS,CAN 和更多其他设备,这些设备可以以最佳方式捕获车辆状态以及周围环境。 收到这些感官信号后,将对它们进行预处理,汇总,然后准备发送到下一个过程,包括**机器学习** **ML** )和数据中心分析。 在准备好的感觉信号上执行 ML 的这一步骤是关键部分,它涉及从输入数据进行状态估计,从而对其进行建模,预测可能的未来动作,最后根据预测的输出进行计划,即哪个动作 从而使整体奖励最大化。
如上图所示,该过程的第一步是传感器数据的收集。 传感器包括摄像头,LIDAR,IMU,RADAR,GPS,CAN 和更多其他设备,这些设备可以以最佳方式捕获车辆状态以及周围环境。 收到这些感官信号后,将对它们进行预处理,汇总,然后准备发送到下一个过程,包括**机器学习****ML**)和数据中心分析。 在准备好的感觉信号上执行 ML 的这一步骤是关键部分,它涉及从输入数据进行状态估计,从而对其进行建模,预测可能的未来动作,最后根据预测的输出进行计划,即哪个动作 从而使整体奖励最大化。
涉及自动驾驶时,ML 可以用于不同的任务。 它们主要是以下内容:
......@@ -72,7 +72,7 @@
* **特工车辆正在接近距离**:负面奖励
* **特工车辆加速**:随着速度增加,正奖励减少,超过速度限制则负奖励
整合**递归神经网络** **RNN** )来整合时间序列信息将使汽车能够处理部分可观察的场景。 此外,使用注意力模型来关注相关信息还可以降低计算复杂度。 如前所述,AI 的下一个,当然是最大的里程碑之一是创建端到端自动驾驶汽车。
整合**递归神经网络****RNN**)来整合时间序列信息将使汽车能够处理部分可观察的场景。 此外,使用注意力模型来关注相关信息还可以降低计算复杂度。 如前所述,AI 的下一个,当然是最大的里程碑之一是创建端到端自动驾驶汽车。
# 创建自动驾驶代理
......@@ -80,8 +80,8 @@
![](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)中显示了对象跟踪方面的改进。
* 识别周围环境的组成部分,其中包括人行道,人,交通信号灯,任何建筑,道路边界,其他车辆等。 对于 AI,由于使用**卷积神经网络****CNN**)和**生成对抗网络****GAN**)。 CNN 和 GAN 的成功可用于自动驾驶环境要素的识别过程。
* **预测**环境的未来状态。 识别当前环境状态的环境的当前组成部分很重要,但是将其用作输入并预测未来环境状态对于计划下一步行动也很有必要。 解决此问题的基本方法之一是创建环境图。 此外,我们可以合并深度神经网络,例如递归神经网络的变体,例如**长短时记忆网络****LSTM**)或**门控循环单元**[ **GRU**),以整合和整合过去时间步长以及当前时间步长和预测未来中的数据。 正如我们在[第 1 章](../Text/01.html)*深度学习–体系结构和框架*中讨论的那样,由于长期依赖以及 LSTM 单元如何解决该问题,围绕梯度消失的问题仍然存在 RNN 的情况。 RNN 是集成时间序列数据的最新技术,它在 [DeepTracking](https://arxiv.org/pdf/1602.00991.pdf)中显示了对象跟踪方面的改进。
* **规划**是整个过程中最难的部分。 该任务包括将识别和预测的结果集成在一起,以计划将来的动作序列以及下一个驾驶动作集(向左或向右转向,加速等等),以使导航安全且成功。 这是一项艰巨的任务,因为整合和规划需要处理不可避免的情况才能安全到达目的地。 强化学习最适合此类控制计划任务。 我们已经了解了如何成功地部署强化学习来控制 50 场 Atari 游戏中的计划任务,以及 Google DeepMind 提供的最先进的 AlphaGo Zero。 在这些情况下,我们目睹了深度学习在进行表示学习的同时进行强化学习的规划。
......@@ -144,7 +144,7 @@
# 规划
先前的网络构成**深度 Q 网络** **DQN** )的一部分,该网络将状态信息作为输入并将体验存储在体验缓冲区中。 来自该经验缓冲区的样本数据用于训练 DQN 中使用的深度神经网络,该神经网络进而预测状态动作值。 状态操作值有助于得出最佳策略,即为给定状态规划最佳操作。
先前的网络构成**深度 Q 网络****DQN**)的一部分,该网络将状态信息作为输入并将体验存储在体验缓冲区中。 来自该经验缓冲区的样本数据用于训练 DQN 中使用的深度神经网络,该神经网络进而预测状态动作值。 状态操作值有助于得出最佳策略,即为给定状态规划最佳操作。
基于 DQN 的方法适用于连续状态空间,但它要求动作空间是离散的。 因此,在连续动作空间的情况下,首选参与者批评算法。 回顾[第 4 章](../Text/04.html)*策略梯度*的参与者评论算法,以下是参与者评论算法的示意图:
......
......@@ -79,11 +79,11 @@
# 介绍
所提出的强化学习框架的核心是**相同独立评估者** **EIIE** )拓扑。 在这里,EIIE 是一个神经网络,它将资产历史记录作为输入并评估未来资产的潜在增长。 每个资产的评估得分用于计算下一个交易期的投资组合权重。
所提出的强化学习框架的核心是**相同独立评估者****EIIE**)拓扑。 在这里,EIIE 是一个神经网络,它将资产历史记录作为输入并评估未来资产的潜在增长。 每个资产的评估得分用于计算下一个交易期的投资组合权重。
投资组合权重(我们将在后面讨论)实际上是由强化学习驱动的投资组合管理代理的市场行为。 将购买目标权重增加的资产,而目标权重减小的资产将被出售。 因此,最后交易期间的投资组合权重也作为 EIIE 的输入。 因此,每个期间的投资组合权重存储在**投资组合向量存储器** **PVM** )中。
投资组合权重(我们将在后面讨论)实际上是由强化学习驱动的投资组合管理代理的市场行为。 将购买目标权重增加的资产,而目标权重减小的资产将被出售。 因此,最后交易期间的投资组合权重也作为 EIIE 的输入。 因此,每个期间的投资组合权重存储在**投资组合向量存储器****PVM**)中。
EIIE 通过**在线随机批处理学习** **OSBL** )进行训练,其中强化学习框架的奖励函数是该时期的平均对数回报。 由于奖励功能是动态的,因此,随着训练是通过梯度上升进行的,EIIE 也在不断发展。 如前所述,EIIE 由一个神经网络组成,因此,对于当前框架,使用不同类型的神经网络测试了三种不同类型的 EIIE,即**卷积神经网络****CNN** ),**递归神经网络****RNN** )和**长短期记忆 neworks****LSTM** ),这是 RNN 单元。 这种类型的框架可以轻松扩展到不同的市场,而不仅限于一个。
EIIE 通过**在线随机批处理学习****OSBL**)进行训练,其中强化学习框架的奖励函数是该时期的平均对数回报。 由于奖励功能是动态的,因此,随着训练是通过梯度上升进行的,EIIE 也在不断发展。 如前所述,EIIE 由一个神经网络组成,因此,对于当前框架,使用不同类型的神经网络测试了三种不同类型的 EIIE,即**卷积神经网络****CNN**),**递归神经网络****RNN**)和**长短期记忆 neworks****LSTM**),这是 RNN 单元。 这种类型的框架可以轻松扩展到不同的市场,而不仅限于一个。
该提议框架的测试平台是一个名为 Poloniex 的加密货币交易市场。 实验之前,通过在一定时间间隔内的交易量排名来选择硬币。 实验在 30 分钟的交易时间内进行,并将 EIIE 的性能与前面提到的在线投资组合选择方法进行了比较。 EIIE 能够击败所有这些方法。
......
......@@ -8,9 +8,9 @@
研究人员试图在机器人技术中实现深层 Q 网络,但并未取得重大成功。 其背后的主要原因是机器人领域中的高维连续动作空间。 为了在连续的动作空间中实现 DQN,必须离散化它们,但是这种离散化会导致信息丢失,这对于诸如机器人之类的领域可能是非常危险的。
**离散动作空间** **DAS** )算法下,将处理离散动作空间域的算法归为一组。 诸如策略梯度之类的其他方法通过将状态空间作为输入来直接将状态空间与动作空间连接,并返回最佳策略作为输出,即采取的可行动作。 与基于值的方法(例如 Q 学习)相比,基于策略的方法的优势在于,它们解决了连续操作空间的处理问题,因为对于给定的状态输入,输出策略是跨不同可能操作的随机分布。
**离散动作空间****DAS**)算法下,将处理离散动作空间域的算法归为一组。 诸如策略梯度之类的其他方法通过将状态空间作为输入来直接将状态空间与动作空间连接,并返回最佳策略作为输出,即采取的可行动作。 与基于值的方法(例如 Q 学习)相比,基于策略的方法的优势在于,它们解决了连续操作空间的处理问题,因为对于给定的状态输入,输出策略是跨不同可能操作的随机分布。
诸如处理连续动作空间域的策略梯度之类的算法归为**连续动作空间** **CAS** )算法。 因此,在行动空间上提供随机表示的基于策略的方法解决了该问题,而不是 DAS 算法中的离散化。 CAS 算法最初是开发并用于低维状态空间,后来使用基于 CNN 的体系结构扩展到高维状态空间。 CAS 算法分为两个子类别:**随机连续动作空间****SCAS** )和**确定性连续动作空间****DCAS** )算法。 它们之间的主要区别在于复杂性,因为 SCAS 算法提供了更好的覆盖范围,因此需要大量的训练样本来学习更好的策略。 在现实世界的机器人应用中获取大量训练样本是非常不可行的,因此,仿真必须以尽可能最佳的方式表示现实世界,否则生成现实世界的数据将非常昂贵。
诸如处理连续动作空间域的策略梯度之类的算法归为**连续动作空间****CAS**)算法。 因此,在行动空间上提供随机表示的基于策略的方法解决了该问题,而不是 DAS 算法中的离散化。 CAS 算法最初是开发并用于低维状态空间,后来使用基于 CNN 的体系结构扩展到高维状态空间。 CAS 算法分为两个子类别:**随机连续动作空间****SCAS**)和**确定性连续动作空间****DCAS**)算法。 它们之间的主要区别在于复杂性,因为 SCAS 算法提供了更好的覆盖范围,因此需要大量的训练样本来学习更好的策略。 在现实世界的机器人应用中获取大量训练样本是非常不可行的,因此,仿真必须以尽可能最佳的方式表示现实世界,否则生成现实世界的数据将非常昂贵。
确定性策略梯度的发现超过了随机策略算法,如 [Silver 等人](http://proceedings.mlr.press/v32/silver14.pdf)所述,该技术已包含在[附录 A](../Text/15.html) 中, *强化学习*中的其他主题。 在本章中,我们将介绍机器人强化学习背后的挑战以及当前如何实施机器人强化学习。
......@@ -86,7 +86,7 @@ Perkins 和 Barto(2002)提出了一种基于 Lyapunov 函数构造强化学
* 实时创建学习模型以输出要采取的最佳措施
* 延迟接收动作信号和致动导致机器人中的机器运动
由于这些延迟,动作无法立即实施,从而导致延迟效果。 在诸如**马尔科夫决策过程** **MDP** )之类的强化学习算法中,假定动作会瞬间影响环境,而忽略了与现实世界相关的延迟。 可以通过汇总一些最近的操作并将其提供给州来解决此问题,但这也将导致尺寸的增加(在上一节中讨论的机器人强化学习中的挑战)。 解决该问题的另一种方法是增加时间步长,但这有两个缺点,一个缺点是妨碍了机器人的控制,第二个缺点是由于持续时间的变化而对系统的动态产生不利影响。
由于这些延迟,动作无法立即实施,从而导致延迟效果。 在诸如**马尔科夫决策过程****MDP**)之类的强化学习算法中,假定动作会瞬间影响环境,而忽略了与现实世界相关的延迟。 可以通过汇总一些最近的操作并将其提供给州来解决此问题,但这也将导致尺寸的增加(在上一节中讨论的机器人强化学习中的挑战)。 解决该问题的另一种方法是增加时间步长,但这有两个缺点,一个缺点是妨碍了机器人的控制,第二个缺点是由于持续时间的变化而对系统的动态产生不利影响。
因此,我们总结了如下讨论的实际挑战:
......
......@@ -33,9 +33,9 @@
* **CPM** :每千次展示费用
* 在这种类型的模型中,广告商为每千次展示支付固定金额,其中的展示次数可以是点击次数,观看次数等
* **每次点击费用**:每次点击费用,**每次点击付费** **PPC**
* **每次点击费用**:每次点击费用,**每次点击付费****PPC**
* 在这种类型的在线广告模型中,广告商向用户支付平台所有者对用户在广告链接上进行的每次点击操作的费用
* **每次转化费用**:每次操作费用/每次获取费用/ **每次获取费用** **PPA** )/每次转化费用
* **每次转化费用**:每次操作费用/每次获取费用/ **每次获取费用****PPA**)/每次转化费用
* 在这种类型的模型中,平台所有者(例如,运行广告的发布者)承担所有风险,而广告客户仅为已获得全部用户(换句话说,他们已经完成了可以 完成,注册订阅或进行购买交易
# 赞助搜索广告
......@@ -48,7 +48,7 @@
# Adwords
在所有广告客户将其每次点击费用的出价针对某些搜索查询进行出价后,平台会接收到数据,该数据包括不同广告客户的出价集以及每个广告客户的总预算,以及**点击的历史数据, 每个搜索查询的点击率** **CTR** )。
在所有广告客户将其每次点击费用的出价针对某些搜索查询进行出价后,平台会接收到数据,该数据包括不同广告客户的出价集以及每个广告客户的总预算,以及**点击的历史数据, 每个搜索查询的点击率****CTR**)。
主要目的是响应每个查询选择一组广告,以使搜索引擎(即拍卖商)获得的收益最大化。 就像拍卖师的收入最大化一样,广告商的利润最大化也很重要,并且包括各种出价策略。
......@@ -65,7 +65,7 @@
* 这些代理商将使用历史市场数据并直接与市场参与者进行交互,并根据此数据对自己的行为进行建模,从而帮助制定不同的决策策略
* 使用强化学习的机器学习方法
* 在[第 3 章](../Text/03.html)和 *Markov 决策过程*中可以看到**马尔可夫决策过程**( **MDP** )的框架,在该框架中,我们最大化了每个模型的预期效用 通过最大化预期奖励总和,最优化进入目标状态的路径的状态
* 在[第 3 章](../Text/03.html)和 *Markov 决策过程*中可以看到**马尔可夫决策过程**(**MDP**)的框架,在该框架中,我们最大化了每个模型的预期效用 通过最大化预期奖励总和,最优化进入目标状态的路径的状态
# 在展示广告中通过强化学习进行实时出价
......@@ -96,7 +96,7 @@
如上图所示,代理维护剩余的拍卖 *t* 和剩余的预算 b。 在每个时间步,代理都收到一个竞标请求以及拍卖 *x∈X* (特征向量空间),并且它必须确定竞标价格 a。
给定特征向量 *x* 的市场价格概率分布函数为 *m(δ,x)*,其中**δ**是市场价格, *m [* 是其概率。 因此,如果代理商以 *a≥δ*的价格出价,则它将赢得竞标并支付**δ**,剩余预算将变为 *b-δ*。 万一败诉,代理商从拍卖中得不到任何好处。 在此,如果将赢得拍卖视为预期奖励,则将**预测 CTR****pCTR** )表示为*θ(x)*。 在每次拍卖之后,剩余的拍卖数量减少 1。当 *t = 0* 时,也就是说,没有剩余的拍卖,则情节结束。 随着当前情节的结束,剩余的拍卖编号和预算都将分别重置为 *T**B*
给定特征向量 *x* 的市场价格概率分布函数为 *m(δ,x)*,其中**δ**是市场价格, *m [* 是其概率。 因此,如果代理商以 *a≥δ*的价格出价,则它将赢得竞标并支付**δ**,剩余预算将变为 *b-δ*。 万一败诉,代理商从拍卖中得不到任何好处。 在此,如果将赢得拍卖视为预期奖励,则将**预测 CTR****pCTR**)表示为*θ(x)*。 在每次拍卖之后,剩余的拍卖数量减少 1。当 *t = 0* 时,也就是说,没有剩余的拍卖,则情节结束。 随着当前情节的结束,剩余的拍卖编号和预算都将分别重置为 *T**B*
以下是前面的增强型学习框架要投标的实现的伪代码:
......
# 图像处理中的强化学习
在本章中,我们将介绍**人工智能** **AI** )社区(计算机视觉)中最著名的应用领域之一。 将 AI 应用于图像和视频已经持续了二十多年。 具有更好的计算能力,诸如**卷积神经网络****CNN** )及其变体的算法在对象检测任务中表现良好。 在自动图像字幕,糖尿病性视网膜病变,视频对象检测,字幕等方面,已经采取了高级措施。
在本章中,我们将介绍**人工智能****AI**)社区(计算机视觉)中最著名的应用领域之一。 将 AI 应用于图像和视频已经持续了二十多年。 具有更好的计算能力,诸如**卷积神经网络****CNN**)及其变体的算法在对象检测任务中表现良好。 在自动图像字幕,糖尿病性视网膜病变,视频对象检测,字幕等方面,已经采取了高级措施。
由于其令人鼓舞的结果和更通用的方法,将强化学习应用于计算机视觉成功地构成了研究人员的艰巨任务。 我们已经看到了 AlphaGo 和 AlphaGo Zero 如何胜过专业的人类围棋玩家,在每个步骤中,将深度强化学习方法应用于游戏板的图像。
......@@ -30,7 +30,7 @@
在较早的对象分类模型中,CNN 非常慢且计算量很大。 此外,作为分类问题的成功完全取决于准确性。 通过在每层的所有区域上滑动窗口来完成 CNN 中的运行卷积。 因此,更多的边界框(通过滑动窗口分析的不同区域的总数)意味着更高的计算成本。
**基于区域的卷积神经网络** **R-CNN** )是首次采用选择性搜索方法来减少输入分类器的边界框的数量。 此外,选择性搜索使用纹理,强度,颜色等特征来创建对象的可能盒子位置。 现在,这些盒子可以送入 CNN 模型。
**基于区域的卷积神经网络****R-CNN**)是首次采用选择性搜索方法来减少输入分类器的边界框的数量。 此外,选择性搜索使用纹理,强度,颜色等特征来创建对象的可能盒子位置。 现在,这些盒子可以送入 CNN 模型。
因此,R-CNN 的关键组件包括:
......@@ -43,7 +43,7 @@
通过消除对图像不必要区域的关注,R-CNN 的速度比普通 CNN 快,但 R-CNN 实际上仍然非常慢,因为 R-CNN 所关注的区域数量足够高,因此总体计算仍然很昂贵 。
**空间池金字塔网络** **SPP-net** )是解决此问题的首次尝试。 在 SSP-net 中,整个图像的 CNN 表示仅计算一次,然后进一步用于计算通过选择性搜索方法生成的每个盒子区域的 CNN 表示。 这是通过在卷积表示的对应于框区域的那部分上进行合并来完成的。 通过考虑中间层的下采样,通过将盒区域投影到卷积层上来计算对应于盒区域的卷积表示部分。
**空间池金字塔网络****SPP-net**)是解决此问题的首次尝试。 在 SSP-net 中,整个图像的 CNN 表示仅计算一次,然后进一步用于计算通过选择性搜索方法生成的每个盒子区域的 CNN 表示。 这是通过在卷积表示的对应于框区域的那部分上进行合并来完成的。 通过考虑中间层的下采样,通过将盒区域投影到卷积层上来计算对应于盒区域的卷积表示部分。
与传统 CNN 方法中的最大池化不同,空间池化是在 SPP-net 中的最后一个卷积层之后进行的。 该空间池化层将任意大小的盒子区域划分为固定数量的容器,并在每个容器上进行最大池化。
......@@ -57,7 +57,7 @@ SPP 网络的一大缺点是,只能微调网络的全连接层,而不能进
Ross Girshick 的 [Fast R-CNN](https://arxiv.org/pdf/1504.08083.pdf)
在 Fast R-CNN 中,将输入图像和多个感兴趣区域作为 CNN 的输入。 完成 RoI 的合并以获得固定大小的特征图,然后通过**全连接层** **FC** )发送以获得特征向量。 R-CNN 每个感兴趣区域具有两个输出向量,如下所示:
在 Fast R-CNN 中,将输入图像和多个感兴趣区域作为 CNN 的输入。 完成 RoI 的合并以获得固定大小的特征图,然后通过**全连接层****FC**)发送以获得特征向量。 R-CNN 每个感兴趣区域具有两个输出向量,如下所示:
* Softmax 概率
* 每类边界框回归偏移
......@@ -70,7 +70,7 @@ Ross Girshick 的 [Fast R-CNN](https://arxiv.org/pdf/1504.08083.pdf)
更快的 R-CNN 以其名字命名。 它比以前的 Fast R-CNN 更快。 这是通过用称为**区域提议网络**的非常小的卷积网络替换 Fast R-CNN 的最慢部分(感兴趣的生成框区域)的选择性搜索来执行相同的任务来生成的, 极有可能包含对象(感兴趣的区域)。
更快的 R-CNN 实现了锚框的概念,以处理宽高比和对象比例的变化。 对于每个区域,都有三个用于缩放比例和三个纵横比的锚点框。 因此,对于每个位置,我们有九个框被馈送到**区域提议网络** **RPN** ),以预测该区域是背景还是前景的可能性。 边界框回归用于改善每个此类区域的锚框。 因此,RPN 输出可变大小的边界框及其类概率。
更快的 R-CNN 实现了锚框的概念,以处理宽高比和对象比例的变化。 对于每个区域,都有三个用于缩放比例和三个纵横比的锚点框。 因此,对于每个位置,我们有九个框被馈送到**区域提议网络****RPN**),以预测该区域是背景还是前景的可能性。 边界框回归用于改善每个此类区域的锚框。 因此,RPN 输出可变大小的边界框及其类概率。
因此,RPN 给出了各种大小的边界框,每个边界的概率与每个类的对应概率相同,其余网络类似于 Fast-RCNN。 Faster-RCNN 的速度是 Fast-RCNN 的 10 倍,具有相似的精度,从而使其成为可用的最精确的对象检测模型之一。 下表显示了 R-CNN 不同变体的速度分析:
......@@ -89,7 +89,7 @@ YOLO 还可以预测训练中所有班级每个盒子的班级得分。 因此
# 单发探测器
**单发检测器** **SSD** )以其在速度和准确性之间的平衡而著称。 就像 YOLO 一样,SSD 仅在输入图像上运行一次 CNN 即可学习表示形式。 在此表示形式上运行一个小的 3x3 卷积核,以预测边界框和类概率。 为了处理比例,SSD 会在多个卷积层之后预测边界框。 由于每个卷积层以不同的比例运行,因此它能够检测各种比例的对象。
**单发检测器****SSD**)以其在速度和准确性之间的平衡而著称。 就像 YOLO 一样,SSD 仅在输入图像上运行一次 CNN 即可学习表示形式。 在此表示形式上运行一个小的 3x3 卷积核,以预测边界框和类概率。 为了处理比例,SSD 会在多个卷积层之后预测边界框。 由于每个卷积层以不同的比例运行,因此它能够检测各种比例的对象。
下图显示了 Fast R-CNN,Faster R-CNN,YOLO 和 SSD 的性能指标:
......@@ -97,7 +97,7 @@ YOLO 还可以预测训练中所有班级每个盒子的班级得分。 因此
# 分层对象检测模型
在这里,我们将尝试通过强化学习框架来实现对象检测问题,在强化学习框架中,强化学习代理将与环境图像进行交互,并且每步,代理将决定关注哪个区域,以实现目标。 以最少的时间步长找到对象。 问题陈述以**马尔可夫决策过程** **MDP** )框架表示,其不同参数讨论如下:
在这里,我们将尝试通过强化学习框架来实现对象检测问题,在强化学习框架中,强化学习代理将与环境图像进行交互,并且每步,代理将决定关注哪个区域,以实现目标。 以最少的时间步长找到对象。 问题陈述以**马尔可夫决策过程****MDP**)框架表示,其不同参数讨论如下:
# 州
......@@ -138,7 +138,7 @@ YOLO 还可以预测训练中所有班级每个盒子的班级得分。 因此
此处, *g* 是基本事实, *b* 是当前步骤中的区域, *b'*是下一步中的新区域,而 IoU 是 事实真相之间的交集。
联合上的**交集( **IoU** )是对象检测中的一个指标,其中有两个重叠的边界框。 首先,计算盒子的交点,即重叠的面积。 其次,计算重叠框的并集,将整个框的面积之和减去重叠面积。 然后将相交除以并集得到 IoU。**
联合上的**交集(**IoU**)是对象检测中的一个指标,其中有两个重叠的边界框。 首先,计算盒子的交点,即重叠的面积。 其次,计算重叠框的并集,将整个框的面积之和减去重叠面积。 然后将相交除以并集得到 IoU。**
对于移动动作,对于特定状态 *s* ,朝着区域 *b'*移动的动作将获得更好的回报,该区域的地面实况 g 大于 IoU *g* 与上一步中考虑的区域 *b* 的关系。 否则,行动将受到负面奖励。
......@@ -151,7 +151,7 @@ YOLO 还可以预测训练中所有班级每个盒子的班级得分。 因此
* ImageZooms 模型
* Pool45-作物模型
对于 Image-Zooms 模型,每个区域的大小调整为 224x224,并通过 Pool5 层馈入 VGG-16,以获得特征图。 对于 Pool45-Crops 模型,全分辨率的图像通过 Pool5 层输入到 VGG-16。 合并从整个图像中提取的所有**感兴趣区域** **ROI** )的特征图。
对于 Image-Zooms 模型,每个区域的大小调整为 224x224,并通过 Pool5 层馈入 VGG-16,以获得特征图。 对于 Pool45-Crops 模型,全分辨率的图像通过 Pool5 层输入到 VGG-16。 合并从整个图像中提取的所有**感兴趣区域****ROI**)的特征图。
这两个用于特征提取的模型输出 *7x7* 的特征图,该图被馈送到公共块中(如以下架构所示)。 这些特征图和存储向量(前面讨论过)被馈入由两个完全连接的层组成的深层 Q 网络,每个层各有 1024 个神经元。 每个完全连接的层都具有 ReLU 激活功能,并经过辍学训练:
......
# NLP 中的深度强化学习
大约一年前,在**自然语言处理** **NLP** )中进行强化学习成为人工智能界研究的热点。 2017 年下半年发布了大多数适合在 NLP 中使用强化学习的研究出版物。
大约一年前,在**自然语言处理****NLP**)中进行强化学习成为人工智能界研究的热点。 2017 年下半年发布了大多数适合在 NLP 中使用强化学习的研究出版物。
在任何领域中使用强化学习框架的最大原因在于,以状态的形式表示环境,详尽列出了环境中所有可能的动作,以及特定领域的奖励功能,通过该功能来实现目标。 最优化的行动路径。 因此,如果系统具有许多可能的动作,但是未给出正确的动作集,并且目标高度依赖于系统的不同选项(动作),则强化学习框架可以比现有的监督或非监督模型更好地对系统进行建模。
......@@ -35,7 +35,7 @@
在 CNN /每日邮件数据集的更大输入序列和输出摘要数据集上(Hermann 等,2015),Nallapati 等人提出了抽象摘要模型。 (2016)的应用,其中输入序列最多为 800 个令牌,而摘要最多为 100 个令牌。 对本实验的分析表明,与较大输入序列的基于注意力的编码器-解码器模型相关的问题是,它们通常会生成异常摘要,这些摘要通常由重复的短语组成。 这是因为仅通过监督学习方法进行训练的编码器解码器模型通常会遭受曝光偏差,即在训练过程中的每个时间步骤都提供了地面真相(实际文本)的假设。
在这里,我们将讨论 Paulus 等人的研究出版物*抽象摘要的深度强化模型*。 等 (2017 年 11 月),它向我们介绍了一种抽象摘要的新模型,该模型在 CNN /每日邮件数据集以及**纽约时报** **NYT** )数据集上都获得了强大的结果( Sandhaus,2008 年)。
在这里,我们将讨论 Paulus 等人的研究出版物*抽象摘要的深度强化模型*。 等 (2017 年 11 月),它向我们介绍了一种抽象摘要的新模型,该模型在 CNN /每日邮件数据集以及**纽约时报****NYT**)数据集上都获得了强大的结果( Sandhaus,2008 年)。
所提出的模型通过使用**神经内注模型****混合** **学习目标**来解决上述问题,从而获得了这些最新结果 重复短语:
......@@ -174,7 +174,7 @@ Paulus 等人(2017)在[《用于抽象摘要的深度强化模型》](https:
除了混合训练目标之外,还通过使用深度残差共同注意编码器建立输入的更好表示,对现有的动态共同注意注意网络进行了改进(Xiong 等人,2017 年)。
来自 **Stanford 问题解答数据集** **SQuAD** )(Rajpurkar 等人)的一些示例如下:
来自 **Stanford 问题解答数据集****SQuAD**)(Rajpurkar 等人)的一些示例如下:
```py
Context/Passage 1:
......@@ -207,7 +207,7 @@ Other than New York where did Tesla conduct experiments?
Ground Truth Answer: Colorado Springs
```
现有的最新**动态共同注意网络** **DCN** )将上下文/段落和问题视为两个不同的输入序列,并输出 上下文中的答案范围作为输入。 下图简要概述了 DCN:
现有的最新**动态共同注意网络****DCN**)将上下文/段落和问题视为两个不同的输入序列,并输出 上下文中的答案范围作为输入。 下图简要概述了 DCN:
![](img/51195a18-a5a6-4e7f-bd0e-e44d85094364.png)
......
......@@ -13,7 +13,7 @@
# 信任区域政策优化
**信任** **区域策略优化** **TRPO** )是一种用于优化策略的迭代方法。 TRPO 优化了大型非线性策略。 TRPO 通过对输出策略分布施加约束来限制策略搜索空间。 为此,对策略网络参数使用 KL 散度损失函数(![](img/f32e59af-ab87-4141-bb2b-830cc1d8451b.png))来惩罚这些参数。 新策略和旧策略之间的 KL 差异约束称为信任区域约束。 由于此约束,策略分布中不会发生大规模更改,从而导致策略网络尽早收敛。
**信任** **区域策略优化****TRPO**)是一种用于优化策略的迭代方法。 TRPO 优化了大型非线性策略。 TRPO 通过对输出策略分布施加约束来限制策略搜索空间。 为此,对策略网络参数使用 KL 散度损失函数(![](img/f32e59af-ab87-4141-bb2b-830cc1d8451b.png))来惩罚这些参数。 新策略和旧策略之间的 KL 差异约束称为信任区域约束。 由于此约束,策略分布中不会发生大规模更改,从而导致策略网络尽早收敛。
TRPO 由 Schulman 等(2017)发布在名为[《信任区域策略优化》](https://arxiv.org/pdf/1502.05477.pdf)的研究出版物中。 在这里,他们提到了一些实验,这些实验证明了 TRPO 在不同任务上的强大性能,例如学习模拟机器人游泳,玩 Atari 游戏等等。 [为了详细研究 TRPO,请访问出版物的 arXiv 链接](https://arxiv.org/pdf/1502.05477.pdf)
......@@ -131,7 +131,7 @@ BLEU 分数背后的动机是设计一种度量标准,该度量标准可以像
BP 称为简短惩罚。 如果机器生成的输出非常短,那么这个代价就会出现。 这是因为,在输出序列短的情况下,其中出现的大多数单词很有可能出现在人工生成的参考文献中。 因此,简洁性惩罚是一种调整因素,当该机器生成的文本短于该输入的最短人类生成的输出参考时,它便会对其进行惩罚。
**简短惩罚** **BP** )由以下公式给出:
**简短惩罚****BP**)由以下公式给出:
![](img/1a2d510c-1666-4ff0-bbd5-34014e5c5ea6.png)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册