提交 7d97a2be 编写于 作者: W wizardforcel

2021-01-24 18:18:11

上级 4e1a24b2
......@@ -22,11 +22,11 @@ PyTorch 于 2017 年推出,其主要特点是它使用**图形处理单元**
尽管神经网络在几十年前就已经理论化了,但神经网络最近变得流行有两个主要原因:
* 神经网络需要并实际上利用大量标记数据来实现最佳解决方案。 这意味着,要使用该算法创建出色的模型,就需要成千上万甚至上百万个条目,其中包含特征和目标值。 例如,关于猫的图像识别,您拥有的图像越多,该模型能够检测的功能就越多,这使其变得更好。
* 神经网络需要并实际上利用大量标记数据来实现最佳解决方案。 这意味着,要使用该算法创建出色的模型,就需要成千上万甚至上百万个条目,其中包含特征和目标值。 例如,关于猫的图像识别,您拥有的图像越多,该模型能够检测的特征就越多,这使其变得更好。
注意
标记数据是指包含一组功能(描述实例的特征)和目标值(要实现的值)的数据; 例如,包含人口统计和财务信息的数据集,其目标特征确定一个人的工资。
标记数据是指包含一组特征(描述实例的特征)和目标值(要实现的值)的数据; 例如,包含人口统计和财务信息的数据集,其目标特征确定一个人的工资。
下图显示了在数据量方面深度学习相对于其他算法的表现:
......@@ -537,7 +537,7 @@ for i in range(100):
注意
建议使用Pandas的`read_csv`函数加载 CSV 文件。 要了解有关此功能的更多信息,请访问[这里](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html)。
建议使用Pandas的`read_csv`函数加载 CSV 文件。 要了解有关此函数的更多信息,请访问[这里](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html)。
3. 将输入特征与目标分开。 请注意,目标位于 CSV 文件的第一列中。 接下来,将值转换为张量,确保将值转换为浮点数。
......
......@@ -26,7 +26,7 @@
* **监督学习**:这是最简单的学习形式,因为它包含一个标记的数据集,其中神经网络会找到解释特征和目标之间关系的模式。 学习过程中的迭代旨在最小化预测值和基本事实之间的差异。 一个例子是根据植物的叶子属性对植物进行分类。
* **无监督学习**:与前面的方法相反,无监督学习包括使用未标记数据(意味着没有目标值)训练模型。 这样做的目的是为了更好地理解输入数据。 通常,网络获取输入数据,对其进行编码,然后从编码版本中重建内容,理想情况下保留相关信息。 例如,给定一个段落,神经网络可以映射单词,然后建议哪个单词对该段落最重要或最具描述性。 然后可以将它们用作标签。
* **强化学习**:这种方法包括从输入数据中学习,其主要目标是从长远来看最大化奖励功能。 这是通过从传入的数据中学习来实现的,而不是通过对静态数据进行训练(如在监督式学习中)来实现的。 因此,决策不是基于即时奖励,而是基于整个学习过程中累积的奖励。 这样的一个示例是一个模型,该模型将资源分配给不同的任务,其目的是最大程度地减少使总体表现变慢的瓶颈。
* **强化学习**:这种方法包括从输入数据中学习,其主要目标是从长远来看最大化奖励函数。 这是通过从传入的数据中学习来实现的,而不是通过对静态数据进行训练(如在监督式学习中)来实现的。 因此,决策不是基于即时奖励,而是基于整个学习过程中累积的奖励。 这样的一个示例是一个模型,该模型将资源分配给不同的任务,其目的是最大程度地减少使总体表现变慢的瓶颈。
注意
......@@ -266,7 +266,7 @@ Rosenblatt 还介绍了权重的概念(`w1`,`w2`,...,`wn`),这些数
1. **输入层**:这是网络的第一层,通常位于网络图形表示中最左侧。 在执行任何计算之前,它会接收输入数据,并完成第一组计算。 这是发现最普通模式的地方。
对于监督学习问题,输入数据包含一对特征和目标。 网络的工作是发现功能与目标之间的相关性或依赖性。
对于监督学习问题,输入数据包含一对特征和目标。 网络的工作是发现特征与目标之间的相关性或依赖性。
2. **隐藏层**:接下来,可以找到隐藏层。 神经网络可以具有许多隐藏层,这意味着在输入层和输出层之间可以有任意数量的层。 它具有的层越多,可以解决的数据问题就越复杂,但培训时间也将更长。 还有一些神经网络架构根本不包含隐藏层,单层网络就是这种情况。
......@@ -316,7 +316,7 @@ CNN 创建的模型使用神经元的子组来识别图像的不同方面。 这
图 2.21:卷积运算的进一步步骤
卷积层的一个重要概念是它们是不变的,因此每个滤波器都将具有特定的功能,该功能在训练过程中不会发生变化。 例如,负责检测耳朵的过滤器将仅在整个训练过程中专门用于该功能
卷积层的一个重要概念是它们是不变的,因此每个滤波器都将具有特定的函数,该函数在训练过程中不会发生变化。 例如,负责检测耳朵的过滤器将仅在整个训练过程中专门用于该函数
此外,考虑到所使用的滤镜,考虑到每个 CNN 都将专注于识别图像的特定特征或一组特征,因此 CNN 通常将具有多个卷积层。 通常,在两个卷积层之间有一个池化层。
......@@ -342,7 +342,7 @@ CNN 创建的模型使用神经元的子组来识别图像的不同方面。 这
在这里,使用`3 x 3`滤镜,我们得到 2.9,这是黄色部分(左上角)中所有数字的平均值,而 3.2 是橙色部分(右上角)中所有数字的平均值。 。
3. **全连接层**:最后,考虑到如果网络仅能够检测一组功能而不具有将其分类为类标签的能力,则该网络将无用,最后 CNN 使用全连接层采取前一层检测到的特征(称为特征图),并输出属于类别标签的那组特征的概率,用于进行最终预测。
3. **全连接层**:最后,考虑到如果网络仅能够检测一组特征而不具有将其分类为类标签的能力,则该网络将无用,最后 CNN 使用全连接层采取前一层检测到的特征(称为特征图),并输出属于类别标签的那组特征的概率,用于进行最终预测。
像人工神经网络一样,全连接层使用感知器根据给定的输入来计算输出。 此外,至关重要的是要提到 CNN 在架构的末尾通常具有不止一个全连接层。
......@@ -368,7 +368,7 @@ RNN 允许以输入序列,输出序列或什至同时以两种形式处理数
图 2.25:RNN 处理的数据序列
在此,每个框都是一个矩阵,箭头表示发生的功能。 底部的框是输入,顶部的框是输出,中间的框代表 RNN 在该点的状态,该状态保存网络的内存。
在此,每个框都是一个矩阵,箭头表示发生的函数。 底部的框是输入,顶部的框是输出,中间的框代表 RNN 在该点的状态,该状态保存网络的内存。
从左至右,上述各图可以解释如下:
......@@ -468,7 +468,7 @@ EDA 流程很有用,因为它有助于开发人员发现对于定义操作过
第一行生成数据集中所有列的列表。 接下来,包含数值的列也存储在变量中。 最后,通过从整个列列表中减去数字列,可以获得非数字列。
结果列表为空,表示没有分类功能要处理。
结果列表为空,表示没有分类特征要处理。
5. 使用 Python 的`isnull()``sum()`函数来查找数据集各列中是否缺少任何值:
......@@ -508,13 +508,13 @@ EDA 流程很有用,因为它有助于开发人员发现对于定义操作过
注意
请注意,只要将变量放在笔记本中单元格的末尾,Jupyter 笔记本便可以打印变量的值,而无需使用打印功能。 在任何其他编程平台或任何其他情况下,请确保使用打印功能
请注意,只要将变量放在笔记本中单元格的末尾,Jupyter 笔记本便可以打印变量的值,而无需使用打印函数。 在任何其他编程平台或任何其他情况下,请确保使用打印函数
例如,打印包含异常值的结果字典的等效方法(也是最佳实践)将使用`print`语句,如下所示:`print(outliers)`。 这样,在不同的编程平台上运行时,代码将具有相同的输出。
![Figure 2.28: Outlier participation in each feature ](img/B15778_02_28.jpg)
图 2.28:离群参与每个功能
图 2.28:离群参与每个特征
注意
......@@ -910,7 +910,7 @@ PyTorch 的构建考虑了该领域许多开发人员的意见,其优点是可
使用与上一活动相同的 Jupyter 笔记本。
1. 导入所需的库。
2. 从目标中为我们在上一个活动中创建的所有三组数据拆分功能。 将`DataFrame`转换为张量。
2. 从目标中为我们在上一个活动中创建的所有三组数据拆分函数。 将`DataFrame`转换为张量。
3. 定义网络的架构。 随意尝试层数和每层单位数的不同组合。
4. 定义损失函数和优化器算法。
5. 使用循环对训练网络进行 3,000 个迭代步骤。
......
......@@ -86,7 +86,7 @@
据此,本案例研究中使用的表现指标是**准确率**,其重点是使**正确分类的实例**最大化。 这是指任何类别标签正确分类的实例与实例总数的比率。
下表简要说明了数据集中存在的每个功能,这些功能可以帮助确定它们与研究目的的相关性,并确定一些需要执行的准备任务:
下表简要说明了数据集中存在的每个特征,这些特征可以帮助确定它们与研究目的的相关性,并确定一些需要执行的准备任务:
![Figure 3.1: A description of features from the DCCC dataset ](img/B15778_03_01.jpg)
......@@ -96,9 +96,9 @@
图 3.2:DCCC 数据集中的特征描述(续)
考虑到此信息,可以得出结论,在 25 个特征(包括目标特征)中,有 2 个需要从数据集中删除,因为它们与研究目的无关。 请记住,与这项研究无关的功能可能与其他研究有关。 例如,一项有关私密卫生产品的研究可能认为性别特征是相关的。
考虑到此信息,可以得出结论,在 25 个特征(包括目标特征)中,有 2 个需要从数据集中删除,因为它们与研究目的无关。 请记住,与这项研究无关的特征可能与其他研究有关。 例如,一项有关私密卫生产品的研究可能认为性别特征是相关的。
此外,所有功能都是定量的,这意味着无需转换其值。 我们需要做的就是调整它们的规模。 目标特征也已转换为其数字表示形式,其中下一笔付款违约的客户用 1 表示,而未下一笔付款的客户用 0 表示。
此外,所有特征都是定量的,这意味着无需转换其值。 我们需要做的就是调整它们的规模。 目标特征也已转换为其数字表示形式,其中下一笔付款违约的客户用 1 表示,而未下一笔付款的客户用 0 表示。
## 数据准备
......@@ -162,7 +162,7 @@ print("rows:",data.shape[0]," columns:", data.shape[1])
          keys=['Total', 'Percent']).transpose()
```
第一行对数据集的每个要素执行缺失值的总和。 接下来,我们计算每个功能缺失值的参与度。 最后,我们将先前计算的两个值连接起来,并将结果显示在表中。 结果如下:
第一行对数据集的每个要素执行缺失值的总和。 接下来,我们计算每个特征缺失值的参与度。 最后,我们将先前计算的两个值连接起来,并将结果显示在表中。 结果如下:
![Figure 3.5: The count of missing values in the DCCC dataset ](img/B15778_03_05.jpg)
......@@ -394,7 +394,7 @@ class Classifier(torch.nn.Module):
D_o = 2
```
3. 使用 PyTorch 的自定义模块,创建一个名为`Classifier`的类并定义模型的架构,使其具有两个线性层-第一个层是 **ReLU** 激活函数,第二层是 **Softmax** 激活功能
3. 使用 PyTorch 的自定义模块,创建一个名为`Classifier`的类并定义模型的架构,使其具有两个线性层-第一个层是 **ReLU** 激活函数,第二层是 **Softmax** 激活函数
```py
class Classifier(torch.nn.Module):
......@@ -555,7 +555,7 @@ batch_size = 100
3. 将特征与目标分开。
4. 使用 scikit-learn 的`train_test_split`函数,将数据集分为训练,验证和测试集。 使用 60:20:20 的分配比例。 将`random_state`设置为`0`
5. 考虑到要素矩阵应为浮点型,而目标矩阵则应为非浮点型,将验证和测试集转换为张量。 目前暂时不要转换训练集,因为它们将进行进一步的转换。
6. 构建用于定义网络层的自定义模块类。 包括一个前向功能,该功能指定将应用于每层输出的激活函数。 对于除输出之外的所有层,请使用 **ReLU**,在此处应使用`log_softmax`
6. 构建用于定义网络层的自定义模块类。 包括一个正向函数,该函数指定将应用于每层输出的激活函数。 对于除输出之外的所有层,请使用 **ReLU**,在此处应使用`log_softmax`
7. 实例化模型并定义训练模型所需的所有变量。 将时期数设置为`50`,并将批大小设置为`128`。 使用`0.001`的学习率。
8. 使用训练集的数据训练网络。 使用验证集来衡量表现。 为此,请保存每个时期中训练集和验证集的损失和准确率。
......@@ -768,7 +768,7 @@ prediction = traced_script(input)
**应用编程接口****API**)包含一个专门创建供其他程序使用的程序(与网站或界面相反,后者是由人为操纵的) 。 据此,API 在创建要在生产环境中使用的深度学习解决方案时使用,因为它们允许通过其他方式(例如网站)访问从运行模型(例如预测)获得的信息。
在本节中,我们将探讨 Web API(通过互联网与其他程序共享信息的 API)的创建。 该 API 的功能是加载先前保存的模型并根据一组给定的功能进行预测。 向 API 发出 HTTP 请求的程序可以访问此预测。
在本节中,我们将探讨 Web API(通过互联网与其他程序共享信息的 API)的创建。 该 API 的功能是加载先前保存的模型并根据一组给定的特征进行预测。 向 API 发出 HTTP 请求的程序可以访问此预测。
关键术语解释如下:
......@@ -778,7 +778,7 @@ prediction = traced_script(input)
`GET`:与`POST`方法相反,此方法将数据作为 URL 的一部分发送,这在发送大量数据时可能不方便。
* **Flask**:这是一个为 Python 开发的库,可让您创建 API(以及其他功能)。
* **Flask**:这是一个为 Python 开发的库,可让您创建 API(以及其他东西)。
要使用 Flask 创建简单的 Web API,请执行以下步骤:
......
......@@ -149,7 +149,7 @@ CNN 可以执行不同的任务,这些任务适用于所有监督学习问题
过滤器通常每层增加。 这意味着,尽管第一卷积层具有 8 个滤镜,但通常会创建第二个卷积层,使其具有两倍的数量(16),第三层使它具有两倍的数量(32),依此类推 。
但是,必须指出的是,在 PyTorch 中,就像在许多其他框架中一样,您应该仅定义要使用的滤镜数量,而不是滤镜的类型(例如,垂直边缘检测器)。 每种过滤器配置(检测特定功能所包含的数字)都是系统变量的一部分。
但是,必须指出的是,在 PyTorch 中,就像在许多其他框架中一样,您应该仅定义要使用的滤镜数量,而不是滤镜的类型(例如,垂直边缘检测器)。 每种过滤器配置(用于检测特定特征的所包含的数量)都是系统变量的一部分。
将向卷积层主题介绍两个附加概念,如下所示。
......@@ -217,7 +217,7 @@ CNN 可以执行不同的任务,这些任务适用于所有监督学习问题
每当值是**浮点型**时,都应四舍五入。 这基本上意味着输入的某些区域将被忽略,并且不会从中提取任何特征。
最后,一旦输入已通过所有滤波器,则将输出馈送到激活函数以破坏线性,这类似于传统神经网络的过程。 尽管在此步骤中可以应用多种激活函数,但是首选功能是 ReLU 功能,因为它在 CNN 中显示了出色的效果。 我们在此处获得的输出将成为后续层(通常是池化层)的输入。
最后,一旦输入已通过所有滤波器,则将输出馈送到激活函数以破坏线性,这类似于传统神经网络的过程。 尽管在此步骤中可以应用多种激活函数,但是首选函数是 ReLU 函数,因为它在 CNN 中显示了出色的效果。 我们在此处获得的输出将成为后续层(通常是池化层)的输入。
## 练习 4.01:计算卷积层的输出形状
......@@ -301,7 +301,7 @@ class CNN_network(nn.Module):
按照惯例,池化层是特征选择步骤的最后部分,这就是为什么池化层通常可以在卷积层之后找到的原因。 正如我们在前几章中所解释的那样,其思想是从图像的各个子部分中提取最相关的信息。 池化层的大小通常为 2,步幅等于其大小。
池化层通常将输入的高度和宽度减小一半。 考虑到要使卷积层找到图像中的所有特征,必须使用多个滤波器,并且此操作的输出可能变得太大,这意味着要考虑许多参数,这一点很重要。 池化层旨在通过保留最相关的功能来减少网络中的参数数量。 从图像的各个子部分中选择相关特征,可以通过获取最大数量或平均该区域中的数量来进行。
池化层通常将输入的高度和宽度减小一半。 考虑到要使卷积层找到图像中的所有特征,必须使用多个滤波器,并且此操作的输出可能变得太大,这意味着要考虑许多参数,这一点很重要。 池化层旨在通过保留最相关的特征来减少网络中的参数数量。 从图像的各个子部分中选择相关特征,可以通过获取最大数量或平均该区域中的数量来进行。
对于图像分类任务,最常见的是在平均池化层上使用最大池化层。 这是因为前者在保留最相关特征的任务中表现出更好的效果,而后者已被证明在诸如平滑图像等任务中表现更好。
......@@ -524,7 +524,7 @@ test_loader = torch.utils.data.DataLoader(test_data, \
                                          batch_size=batch_size)
```
`DataLoader()`函数用于为每组数据批量加载图像。 首先,将包含集合的变量作为参数传递,然后定义批量大小。 最后,我们在上一步中创建的采样器用于确保随机创建每次迭代中使用的批量,这有助于提高模型的表现。 此函数的结果变量(`train_loader``dev_loader``test_loader`)将分别包含功能部件和目标的值。
`DataLoader()`函数用于为每组数据批量加载图像。 首先,将包含集合的变量作为参数传递,然后定义批量大小。 最后,我们在上一步中创建的采样器用于确保随机创建每次迭代中使用的批量,这有助于提高模型的表现。 此函数的结果变量(`train_loader``dev_loader``test_loader`)将分别包含特征部分和目标的值。
注意
......@@ -610,7 +610,7 @@ test_loader = torch.utils.data.DataLoader(test_data, \
## PyTorch 数据扩充
使用`Torchvision`包在 PyTorch 中执行数据扩充非常容易。 该软件包除了包含流行的数据集和模型架构之外,还包含可以在数据集上执行的常见图像转换功能
使用`Torchvision`包在 PyTorch 中执行数据扩充非常容易。 该软件包除了包含流行的数据集和模型架构之外,还包含可以在数据集上执行的常见图像转换函数
注意
......@@ -700,7 +700,7 @@ test_data = datasets.CIFAR10('data', train=False, download=True, \
# 批量归一化
通常会标准化输入层,以尝试加快学习速度,并通过将所有功能重新缩放为相同比例来提高性能。 因此,问题是,如果模型受益于输入层的归一化,为什么不对所有隐藏层的输出进行归一化以进一步提高训练速度呢?
通常会标准化输入层,以尝试加快学习速度,并通过将所有特征重新缩放为相同比例来提高性能。 因此,问题是,如果模型受益于输入层的归一化,为什么不对所有隐藏层的输出进行归一化以进一步提高训练速度呢?
**批量归一化**顾名思义,是对隐藏层的输出进行归一化,以便减小每个层的方差,也称为协方差平移。 协方差偏移的这种减小是有用的,因为它使模型也可以在遵循与用于训练它的图像不同的分布的图像上很好地工作。
......
......@@ -47,7 +47,7 @@
因此,可以使用 PyTorch 的**模型**子包加载预训练的模型,以执行样式迁移任务,而无需训练大量图像的网络。
3. **确定层的功能**:鉴于手头有两项主要任务(识别图像的内容并区分另一幅图像的样式),不同的层将具有不同的功能来提取不同的特征。 对于样式图像,重点应该放在颜色和纹理上,对于内容图像,重点应该放在边缘和形状上。 在此步骤中,将不同的层分为不同的任务。
3. **确定层的函数**:鉴于手头有两项主要任务(识别图像的内容并区分另一幅图像的样式),不同的层将具有不同的函数来提取不同的特征。 对于样式图像,重点应该放在颜色和纹理上,对于内容图像,重点应该放在边缘和形状上。 在此步骤中,将不同的层分为不同的任务。
4. **定义优化问题**:与其他任何监督问题一样,有必要定义一个损失函数,该函数将负责测量输出和输入之间的差异。 与其他受监督的问题不同,样式迁移的任务要求您定义三个不同的损失函数,在训练过程中应将所有这些损失最小化。 这里介绍了三种损失函数:
**内容损失**:这仅在考虑与内容相关的特征的情况下测量内容图像与输出之间的距离。
......@@ -111,7 +111,7 @@ transforms.Compose([transforms.Normalize((-0.5/0.25, \
首先,张量被克隆,附加维被删除。 接下来,定义转换。
要了解恢复归一化的过程,请考虑使用所有尺寸的均值 0.5 和标准差 0.25 进行归一化的图像。 恢复标准化的方法是使用平均值的负值除以标准差作为平均值(-0.5 除以 0.25)。 新的标准差应等于一除以标准差(1 除以 0.25)。 定义用于加载和显示图像的功能可以帮助节省时间,并确保对内容图像和样式图像执行相同的过程。 在下面的练习中将扩展此过程。
要了解恢复归一化的过程,请考虑使用所有尺寸的均值 0.5 和标准差 0.25 进行归一化的图像。 恢复标准化的方法是使用平均值的负值除以标准差作为平均值(-0.5 除以 0.25)。 新的标准差应等于一除以标准差(1 除以 0.25)。 定义用于加载和显示图像的函数可以帮助节省时间,并确保对内容图像和样式图像执行相同的过程。 在下面的练习中将扩展此过程。
注意
......@@ -259,7 +259,7 @@ transforms.Compose([transforms.Normalize((-0.5/0.25, \
如前所述,用于执行样式迁移任务的架构是 19 层 VGG 网络的架构,也称为 VGG-19。 在`torchvision``model`子程序包下提​​供了预训练的模型。 在 PyTorch 中保存的模型分为两部分:
1. `vgg19.features`:这包括网络的所有卷积和池化层以及参数。 这些层负责从图像中提取特征。 有些层专门用于样式功能(例如颜色),而另一些层则专门用于内容功能(例如边缘)。
1. `vgg19.features`:这包括网络的所有卷积和池化层以及参数。 这些层负责从图像中提取特征。 有些层专门用于样式特征(例如颜色),而另一些层则专门用于内容特征(例如边缘)。
2. `vgg19.classifier`:这是指位于网络末端的线性层(也称为完全连接层),包括其参数。 这些层是将图像分类为标签类别之一的层,例如,识别图像中的动物类型。
注意
......@@ -467,19 +467,19 @@ style_features = features_extractor(style_img, model, \
### 内容损失
它由一个功能组成,该功能基于给定层获得的特征图来计算内容图像和目标图像之间的距离。 在 VGG-19 网络的情况下,仅根据`conv4_2`层的输出来计算内容损失。
它由一个函数组成,该函数基于给定层获得的特征图来计算内容图像和目标图像之间的距离。 在 VGG-19 网络的情况下,仅根据`conv4_2`层的输出来计算内容损失。
内容损失功能背后的主要思想是最小化内容图像和目标图像之间的距离,以便后者在内容方面与前者高度相似。
内容损失函数背后的主要思想是最小化内容图像和目标图像之间的距离,以便后者在内容方面与前者高度相似。
内容损失可以计算为相关层的内容和目标图像的特征图之间的均方差(`conv4_2`),可以使用以下公式实现:
![Figure 5.6: The content loss function ](img/B15778_05_06.jpg)
图 5.6:内容损失功能
图 5.6:内容损失函数
### 样式损失
与内容损失类似,样式损失是一项功能,可通过计算均方差来衡量样式特征(例如颜色和纹理)方面的样式与目标图像之间的距离。
与内容损失类似,样式损失是一项函数,可通过计算均方差来衡量样式特征(例如颜色和纹理)方面的样式与目标图像之间的距离。
与内容损失的情况相反,它不比较从不同层派生的特征图,而是比较根据样式和目标图像的特征图计算出的语法矩阵。
......@@ -511,7 +511,7 @@ style_features = features_extractor(style_img, model, \
与以前的神经网络的优化一样,以下是每次迭代中可以观察到的步骤:
1. 从目标图像获取内容和样式方面的功能。 在初始迭代中,此图像将是内容图像的精确副本。
1. 从目标图像获取内容和样式方面的特征。 在初始迭代中,此图像将是内容图像的精确副本。
2. 计算内容损失。 这是通过比较内容和目标图像的内容特征图来完成的。
3. 计算所有相关层的平均样式损失。 这是通过比较样式图像和目标图像所有层的 gram 矩阵来实现的。
4. 计算总损失。
......@@ -637,7 +637,7 @@ style_features = features_extractor(style_img, model, \
1. 导入所需的库。
2. 指定要对输入图像执行的转换。 确保将它们调整为相同的大小,将它们转换为张量,然后对其进行规范化。
3. 定义图像加载器功能。 这应该打开图像并对其进行转换。 调用图像加载器功能加载两个输入图像。
3. 定义图像加载器函数。 这应该打开图像并对其进行转换。 调用图像加载器函数加载两个输入图像。
4. 为了能够显示图像,请定义一组新的转换,以恢复图像的规范化并将张量转换为 PIL 图像。
5. 创建一个函数(`tensor2image`),该函数能够对张量执行先前的转换。 调用两个图像的函数并绘制结果。
6. 加载 VGG-19 模型。
......@@ -670,15 +670,15 @@ style_features = features_extractor(style_img, model, \
本章介绍了样式迁移,这是当今很流行的任务,可以使用 CNN 来执行。 它包括同时获取内容图像和样式图像作为输入,并返回新创建的图像作为输出,以保留其中一个图像的内容和另一个图像的样式。 它通常用于通过将随机的常规图像与伟大艺术家的绘画相结合来赋予图像艺术外观。
尽管使用 CNN 进行样式迁移,但是按常规训练网络并不能实现创建目标图像的过程。 本章介绍了如何使用经过预训练的网络来考虑一些相关层的输出,这些层尤其擅长识别某些功能
尽管使用 CNN 进行样式迁移,但是按常规训练网络并不能实现创建目标图像的过程。 本章介绍了如何使用经过预训练的网络来考虑一些相关层的输出,这些层尤其擅长识别某些特征
本章介绍了开发能够执行样式迁移任务的代码所需的每个步骤,其中第一步包括加载和显示输入。 正如我们前面提到的,模型有两个输入(内容和样式图像)。 每个图像都将经历一系列转换,目的是将图像调整为相等大小,将它们转换为张量,并对它们进行规范化,以使它们可以被网络正确处理。
接下来,加载预训练的模型。 如本章所述,VGG-19 是解决此类任务的最常用架构之一。 它由 19 个层组成,包括卷积层,池化层和全连接层,其中对于所讨论的任务,仅使用某些卷积层。 考虑到 PyTorch 提供了一个包含多个预训练网络架构的子包,加载预训练模型的过程非常简单。
一旦加载了网络,在检测某些对于样式迁移至关重要的功能时,网络的某些层将被识别为表现卓越的提供商。 尽管五个不同的层都具有提取与图像样式相关的特征(例如颜色和纹理)的能力,但是只有一层可以非常出色地提取内容特征(例如边缘和形状)。 因此,至关重要的是定义将用于从输入图像中提取信息以创建所需目标图像的那些层。
一旦加载了网络,在检测某些对于样式迁移至关重要的特征时,网络的某些层将被识别为表现卓越的提供商。 尽管五个不同的层都具有提取与图像样式相关的特征(例如颜色和纹理)的能力,但是只有一层可以非常出色地提取内容特征(例如边缘和形状)。 因此,至关重要的是定义将用于从输入图像中提取信息以创建所需目标图像的那些层。
最后,是时候对该迭代过程进行编码了,以用于创建具有所需功能的目标图像。 为此,计算了三种不同的损失。 有一个用于比较内容图像和目标图像之间的内容差异(内容损失),另一个用于比较样式图像和目标图像之间的风格差异(样式损失), 通过计算克矩阵实现。 最后,有一个结合了内容损失和样式损失(总损失)。
最后,是时候对该迭代过程进行编码了,以用于创建具有所需特征的目标图像。 为此,计算了三种不同的损失。 有一个用于比较内容图像和目标图像之间的内容差异(内容损失),另一个用于比较样式图像和目标图像之间的风格差异(样式损失), 通过计算克矩阵实现。 最后,有一个结合了内容损失和样式损失(总损失)。
通过最小化总损失的值来创建目标图像,这可以通过更新与目标图像有关的参数来完成。 尽管可以使用预先训练的网络,但获得理想目标图像的过程可能需要进行数千次迭代和相当多的时间。
......
......@@ -154,7 +154,7 @@
注意
提醒一下,在 Jupyter 笔记本中,无需打印功能即可打印变量的值。 在其他编程平台上,可能需要使用打印功能
提醒一下,在 Jupyter 笔记本中,无需打印函数即可打印变量的值。 在其他编程平台上,可能需要使用打印函数
结果数据帧如下:
......@@ -202,7 +202,7 @@
## PyTorch 中的 RNN
在 PyTorch 中,类似于任何其他层,循环层在一行代码中定义。 然后,将在网络的转发功能中调用此代码,如以下代码所示:
在 PyTorch 中,类似于任何其他层,循环层在一行代码中定义。 然后,将在网络的正向函数中调用此代码,如以下代码所示:
```py
class RNN(nn.Module):
......@@ -219,7 +219,7 @@ class RNN(nn.Module):
        return out, hidden
```
在这里,必须将循环层定义为采用输入中预期特征数的参数(`input_size`); 由用户定义的处于隐藏状态的功能部件数(`hidden_​​size`); 和循环层数(`num_layers`)。
在这里,必须将循环层定义为采用输入中预期特征数的参数(`input_size`); 由用户定义的处于隐藏状态的特征数(`hidden_​​size`); 和循环层数(`num_layers`)。
注意
......
......@@ -608,7 +608,7 @@
注意
请记住,此处显示的结果与您的结果不完全匹配。 这主要是由于训练网络时使用了改组功能
请记住,此处显示的结果与您的结果不完全匹配。 这主要是由于训练网络时使用了打乱函数
使用以下代码绘制损失:
......@@ -1295,7 +1295,7 @@
                                         (0.229, 0.224, 0.225))])
```
3. 定义一个图像加载器功能。它应该打开图像并加载它。调用图像加载器函数来加载两个输入图像。
3. 定义一个图像加载器函数。它应该打开图像并加载它。调用图像加载器函数来加载两个输入图像。
```py
def image_loader(image_name):
......
......@@ -42,7 +42,7 @@
![](img/47a48789-8ff8-42cf-a648-96d68b1df236.png)
在知道损失函数对神经网络有重大影响之后,每个人首先想到的是我们需要提出更好的损失函数。 如果您研究最新的研究,您会发现主要的发展是基于更改丢失功能的对象检测,图像分割,机器翻译等。 找出新的损失函数可能很棘手,原因有两个:
在知道损失函数对神经网络有重大影响之后,每个人首先想到的是我们需要提出更好的损失函数。 如果您研究最新的研究,您会发现主要的发展是基于更改损失函数的对象检测,图像分割,机器翻译等。 找出新的损失函数可能很棘手,原因有两个:
* 目标函数本质上必须是凸形的,才能满足随机梯度下降优化的要求。
* 通常,通过不同函数获得的最小值在数值上相同。
......
......@@ -323,7 +323,7 @@ TorchVision 的`datasets`模块附带了许多受欢迎的数据集; 如果机
# 实现优化器
在本秘籍中,我们将学习优化器。 在先前的秘籍“定义损失函数”中,我们谈到了误差和误差函数,并了解到,为了获得一个好的模型,我们需要最小化计算出的误差。 **反向传播**是神经网络从错误中学习的一种方法。 错误用于修改权重,以使错误最小化。 优化功能负责修改权重以减少误差。 优化函数计算相对于权重的误差的偏导数。 导数显示正斜率的方向,因此我们需要反转梯度的方向。 **优化器**函数将模型参数和损失函数结合在一起,以迭代方式修改模型参数以减少模型误差。 可以考虑将优化器摆在模型权重的基础上,根据模型与实际输出的预测差异来获得最佳模型,而损失函数则通过指示优化器是对还是错来充当指导。
在本秘籍中,我们将学习优化器。 在先前的秘籍“定义损失函数”中,我们谈到了误差和误差函数,并了解到,为了获得一个好的模型,我们需要最小化计算出的误差。 **反向传播**是神经网络从错误中学习的一种方法。 错误用于修改权重,以使错误最小化。 优化函数负责修改权重以减少误差。 优化函数计算相对于权重的误差的偏导数。 导数显示正斜率的方向,因此我们需要反转梯度的方向。 **优化器**函数将模型参数和损失函数结合在一起,以迭代方式修改模型参数以减少模型误差。 可以考虑将优化器摆在模型权重的基础上,根据模型与实际输出的预测差异来获得最佳模型,而损失函数则通过指示优化器是对还是错来充当指导。
学习速率是优化器的超参数,它控制权重的更新量。 学习速度确保了权重不会大量更新,从而使算法根本无法收敛,并且误差越来越大。 然而,与此同时,权重的更新不应太低,以至于永远需要花费成本函数/误差函数的最小值。
......@@ -331,7 +331,7 @@ TorchVision 的`datasets`模块附带了许多受欢迎的数据集; 如果机
![](img/ca32e442-d198-424e-bc49-52451f5a458b.png)
在本秘籍中,我们将学习如何在 PyTorch 中使用优化器功能,以及一些常见的优化功能以及如何处理学习率。
在本秘籍中,我们将学习如何在 PyTorch 中使用优化器函数,以及一些常见的优化函数以及如何处理学习率。
# 操作步骤
......@@ -467,7 +467,7 @@ Training loss: 0.2596
# 更多
我们可以使用称为`closure`的回调函数作为`.step(closure)`的参数来计算损失并通过传入函数作为参数来更新权重。 您还可以探索 PyTorch 提供的其他优化器功能,例如 Adadelta,Adagrad,SGD 等。
我们可以使用称为`closure`的回调函数作为`.step(closure)`的参数来计算损失并通过传入函数作为参数来更新权重。 您还可以探索 PyTorch 提供的其他优化器函数,例如 Adadelta,Adagrad,SGD 等。
# 另见
......
......@@ -178,7 +178,7 @@ Dataset MNIST
PyTorch 的 Python API 允许冻结用户决定使其不可训练的模型部分。 前面的代码中给出了一个示例。 循环访问`resnet18`的第 1 层参数的循环可访问每个参数的`requires_grad`属性,这是 Autograd 在反向传播以进行梯度更新时所寻找的。 将`requires_grad`设置为`False`会屏蔽`autograd`中的特定参数,并使权重保持冻结状态。
`torchvision``transforms`模块是另一个主要参与者,它具有用于数据预处理和数据扩充的工具模块。 `transforms`模块为常用的预处理功能(例如填充,裁切,灰度缩放,仿射变换,将图像转换为 PyTorch 张量等)提供了开箱即用的实现,以及一些实现数据扩充,例如翻转,随机裁剪和色彩抖动。 `Compose`工具将多个转换组合在一起,以形成一个管道对象。
`torchvision``transforms`模块是另一个主要参与者,它具有用于数据预处理和数据扩充的工具模块。 `transforms`模块为常用的预处理函数(例如填充,裁切,灰度缩放,仿射变换,将图像转换为 PyTorch 张量等)提供了开箱即用的实现,以及一些实现数据扩充,例如翻转,随机裁剪和色彩抖动。 `Compose`工具将多个转换组合在一起,以形成一个管道对象。
```py
transform = transforms.Compose(
......
......@@ -156,11 +156,11 @@ softmax 函数主要用于处理分类问题,并且最好在输出层中使用
![](img/06cd6c36-3f74-4314-b132-e936dc4ddd03.png)
ReLU 函数具有非线性的优势。 因此,反向传播很容易,因此可以堆叠由 ReLU 功能激活的多个隐藏层,其中对于`x <= 0``f(x) = 0`,对于`x > 0``f(x) = x`
ReLU 函数具有非线性的优势。 因此,反向传播很容易,因此可以堆叠由 ReLU 函数激活的多个隐藏层,其中对于`x <= 0``f(x) = 0`,对于`x > 0``f(x) = x`
![](img/a3b9045b-2a4e-4e1f-9414-8b330464d72a.png)
ReLU 功能相对于其他激活函数的主要优势在于,它不会同时激活所有神经元。 这可以从前面的 ReLU 函数图中观察到,在图中我们可以看到,如果输入为负,则输出零,而神经元不会激活。 这导致网络稀疏,并且计算快速简便。
ReLU 函数相对于其他激活函数的主要优势在于,它不会同时激活所有神经元。 这可以从前面的 ReLU 函数图中观察到,在图中我们可以看到,如果输入为负,则输出零,而神经元不会激活。 这导致网络稀疏,并且计算快速简便。
![](img/b6cdb514-2155-4640-a257-7b5a91ad8668.png)
......@@ -180,7 +180,7 @@ ReLU 的导数图,对于`x <= 0`,`f'(x) = 1`,对于`x > 0`,`f'(x) = 0`
* Sigmoid 函数在浅层网络和二分类器的情况下效果很好。 较深的网络可能会导致梯度消失。
* ReLU 功能是使用最广泛的功能,请尝试使用 Leaky ReLU 以避免神经元死亡的情况。 因此,从 ReLU 开始,如果 ReLU 无法提供良好的结果,则移至另一个激活函数。
* ReLU 函数是使用最广泛的功能,请尝试使用 Leaky ReLU 以避免神经元死亡的情况。 因此,从 ReLU 开始,如果 ReLU 无法提供良好的结果,则移至另一个激活函数。
* 在外层使用 softmax 进行多类分类。
......
......@@ -112,7 +112,7 @@ MDP 试图通过将网格划分为状态,动作,模型/转换模型和奖励
![](img/b8a7da56-da61-4a36-a9ff-098fc89c0451.png)
策略功能未考虑剩余时间。 如果是有限期的话,那么策略应该是
策略函数未考虑剩余时间。 如果是有限期的话,那么策略应该是
![](img/4eecac99-2630-4813-9c1f-df9712f7780b.png)
......
......@@ -11,7 +11,7 @@
![](img/5b448889-61bf-43ca-82f5-ce5d63662d33.png)
换句话说,演员的行为像孩子,而评论家的行为像父母,孩子探索多种行为,父母批评不良行为并补充良好行为。 因此,行动者批判算法既学习了策略功能,又学习了状态作用值函数。 像策略梯度一样,参与者评论算法也通过梯度上升来更新其参数。 在高维连续状态和动作空间的情况下,演员评论家方法非常有效。
换句话说,演员的行为像孩子,而评论家的行为像父母,孩子探索多种行为,父母批评不良行为并补充良好行为。 因此,行动者批判算法既学习了策略函数,又学习了状态作用值函数。 像策略梯度一样,参与者评论算法也通过梯度上升来更新其参数。 在高维连续状态和动作空间的情况下,演员评论家方法非常有效。
因此,让我们从 Google DeepMind 发布的深度强化学习中的异步方法开始,该方法在表现和计算效率方面都超过了 DQN。
......@@ -298,7 +298,7 @@ num_actions = env.action_space.n
tf.reset_default_graph()
```
输入状态图像预处理功能
输入状态图像预处理函数
```py
def preprocessing_image(obs): #where I is the single frame of the game as the input
......
......@@ -129,11 +129,11 @@ Brett Sperry 首先使用术语**实时策略**(**RTS**)作为宣传其游
但是,通过强化学习,不需要存储这些迹线,而且,高维和连续状态动作空间可以处理深度神经网络,该网络将其作为输入并输出最佳动作。 此外,如果状态作用空间很大,并且需要减小尺寸以进一步减少计算时间,那么使用如前所示的深层自编码器会将输入数据转换为紧凑的低维向量。
强化学习中的奖励功能必须与每个状态相关联,以使从开始状态开始的动作通过一系列中间状态导致达到目标状态,从而使预期的奖励总和最大化,从而产生最佳路径。
强化学习中的奖励函数必须与每个状态相关联,以使从开始状态开始的动作通过一系列中间状态导致达到目标状态,从而使预期的奖励总和最大化,从而产生最佳路径。
基本的强化学习算法,例如 Q 学习和 SARSA 算法(在第 5 章,“Q 学习和深度 Q 网络”中进行了解释),与早期的在线案例学习相比,在收敛时间和比率方面表现更好 。
此外,在深度强化学习领域中正在进行大量研究,该研究集中于使用图像进行智能体感知以在更复杂的领域中更好地工作。 以前的自编码器方法有助于将非常复杂的域转换为更简单的域。 此外,学习奖励功能和自编码器的其他变体,尤其是去噪堆叠式自编码器,将进一步改善结果。
此外,在深度强化学习领域中正在进行大量研究,该研究集中于使用图像进行智能体感知以在更复杂的领域中更好地工作。 以前的自编码器方法有助于将非常复杂的域转换为更简单的域。 此外,学习奖励函数和自编码器的其他变体,尤其是去噪堆叠式自编码器,将进一步改善结果。
此外,使用异步或分布式多主体强化学习方法(在第 6 章,“异步方法”中讨论),其中学习智能体与自己的环境副本并行工作,这将进一步减少收敛时间,并产生更好的结果。
......
......@@ -64,7 +64,7 @@
投资组合权重(我们将在后面讨论)实际上是由强化学习驱动的投资组合管理智能体的市场行为。 将购买目标权重增加的资产,而目标权重减小的资产将被出售。 因此,最后交易期间的投资组合权重也作为 EIIE 的输入。 因此,每个期间的投资组合权重存储在**投资组合向量存储器****PVM**)中。
EIIE 通过**在线随机批量学习****OSBL**)进行训练,其中强化学习框架的奖励函数是该时期的平均对数回报。 由于奖励功能是动态的,因此,随着训练是通过梯度上升进行的,EIIE 也在不断发展。 如前所述,EIIE 由一个神经网络组成,因此,对于当前框架,使用不同类型的神经网络测试了三种不同类型的 EIIE,即**卷积神经网络****CNN**),**循环神经网络****RNN**)和**长短期记忆网络****LSTM**),这是 RNN 单元。 这种类型的框架可以轻松扩展到不同的市场,而不仅限于一个。
EIIE 通过**在线随机批量学习****OSBL**)进行训练,其中强化学习框架的奖励函数是该时期的平均对数回报。 由于奖励函数是动态的,因此,随着训练是通过梯度上升进行的,EIIE 也在不断发展。 如前所述,EIIE 由一个神经网络组成,因此,对于当前框架,使用不同类型的神经网络测试了三种不同类型的 EIIE,即**卷积神经网络****CNN**),**循环神经网络****RNN**)和**长短期记忆网络****LSTM**),这是 RNN 单元。 这种类型的框架可以轻松扩展到不同的市场,而不仅限于一个。
该提议框架的测试平台是一个名为 Poloniex 的加密货币交易市场。 实验之前,通过在一定时间间隔内的交易量排名来选择硬币。 实验在 30 分钟的交易时间内进行,并将 EIIE 的表现与前面提到的在线投资组合选择方法进行了比较。 EIIE 能够击败所有这些方法。
......
......@@ -27,7 +27,7 @@
与机器人技术有关的任何任务都由高维,连续状态和动作空间表示。 环境状态不是完全可观察到的。 仅在模拟中学习不足以说强化学习智能体已经为现实世界做好了准备。 在使用机器人技术的情况下,强化学习智能体应该在现实世界中遇到不确定性,但是获取和复制起来既困难又昂贵。
鲁棒性是机器人技术的重中之重。 在常规分析或传统机器学习问题中,数据,预处理或算法中的细微错误会导致行为发生重大变化,尤其是对于动态任务。 因此,需要能够捕获实际细节的健壮算法。 机器人强化学习的下一个挑战是奖励功能。 由于奖励功能在优化学习中起着最重要的作用,因此需要生成特定领域的奖励功能,以帮助学习智能体尽快更好地适应现实世界。 因此,领域知识是设计好的奖励功能的关键,而这又是机器人机器学习中的艰巨任务。
鲁棒性是机器人技术的重中之重。 在常规分析或传统机器学习问题中,数据,预处理或算法中的细微错误会导致行为发生重大变化,尤其是对于动态任务。 因此,需要能够捕获实际细节的健壮算法。 机器人强化学习的下一个挑战是奖励函数。 由于奖励函数在优化学习中起着最重要的作用,因此需要生成特定领域的奖励函数,以帮助学习智能体尽快更好地适应现实世界。 因此,领域知识是设计好的奖励函数的关键,而这又是机器人机器学习中的艰巨任务。
在这里,将讨论通过我们在本书中研究的强化学习算法可以实现的机器人领域中的任务类型,并尝试将它们连接在一起以构建一种有前途的方法。
......@@ -49,7 +49,7 @@
* 操纵
* 自主机器控制
如前所述,为了使增强型学习智能体在现实世界中的任务中表现更好,它应该具有定义明确,特定领域的奖励功能,这很难实现。 通过使用学徒制学习等技术可以解决此问题。 解决奖励不确定性的另一种方法是根据状态不断更新奖励功能,以便生成最优化的策略。 这种方法称为逆强化学习。
如前所述,为了使增强型学习智能体在现实世界中的任务中表现更好,它应该具有定义明确,特定领域的奖励函数,这很难实现。 通过使用学徒制学习等技术可以解决此问题。 解决奖励不确定性的另一种方法是根据状态不断更新奖励函数,以便生成最优化的策略。 这种方法称为逆强化学习。
由于许多挑战,机器人强化学习是一个很难解决的问题。 第一个是连续的状态动作空间。 根据问题陈述,决定是采用 DAS 算法还是 CAS 算法。 这意味着机器人控制应处于何种粒度级别。 一大挑战是现实系统的复杂性,这导致执行时间,手动干预和维护的增加。 因此,需要一种可以实时运行并应对现实世界复杂性的算法。
......@@ -106,23 +106,23 @@ Perkins 和 Barto(2002)提出了一种基于 Lyapunov 函数构造强化学
# 机器人要实现的最终目标是什么?
奖励功能对于在机器人强化学习中指定学习智能体的目标至关重要。 如我们所知,对于强化学习算法,最终目标是使从开始状态到达到目标状态的预期奖励总和最大化。
奖励函数对于在机器人强化学习中指定学习智能体的目标至关重要。 如我们所知,对于强化学习算法,最终目标是使从开始状态到达到目标状态的预期奖励总和最大化。
在现实世界中,设计好的奖励功能是一个巨大的挑战。 因此,代表或指定目标是现实世界中的挑战。 现实世界中充满不确定性,因此,奖励函数应能够捕获与此类不确定性相关的积极状态。
在现实世界中,设计好的奖励函数是一个巨大的挑战。 因此,代表或指定目标是现实世界中的挑战。 现实世界中充满不确定性,因此,奖励函数应能够捕获与此类不确定性相关的积极状态。
一些领域在任务完成后获得奖励,不确定性较小,但在某些情况下,导致更好的最终结果的每个动作都具有不同的奖励。 这是由于每个状态的重要性,因为每个状态都像在现实情况中那样采取了行动。 因此,任务完成奖励机制不能在现实世界中实现,因为它不会捕获不确定性,也不会导致学习趋同,从而导致表现下降。
在我们遇到的大多数现有模拟中,我们看到了一种二元奖励机制,该机制仅捕获了学习智能体的成功和失败。 将中间奖励包含为奖励功能的一部分,将比二元奖励方法更好,从而导致更好的解决方案。 包括中间奖励在内,将捕获现实系统中从状态到状态转换的不确定性。
在我们遇到的大多数现有模拟中,我们看到了一种二元奖励机制,该机制仅捕获了学习智能体的成功和失败。 将中间奖励包含为奖励函数的一部分,将比二元奖励方法更好,从而导致更好的解决方案。 包括中间奖励在内,将捕获现实系统中从状态到状态转换的不确定性。
因此,奖励功能通常表示为状态动作对的函数。 如前所述,由于先前讨论的现实世界的挑战,该模拟不能准确地表示现实世界的状态。 但是,除了环境因素和时间滞后之外,由于具有良好的奖励功能,机器人加固智能体还可以学习优化时间和管理风险,并避免了实际系统设置和维护的成本。
因此,奖励函数通常表示为状态动作对的函数。 如前所述,由于先前讨论的现实世界的挑战,该模拟不能准确地表示现实世界的状态。 但是,除了环境因素和时间滞后之外,由于具有良好的奖励函数,机器人加固智能体还可以学习优化时间和管理风险,并避免了实际系统设置和维护的成本。
最近,已经进行了进一步的研究开发,以在简单模型的基础上构建复杂策略,以通过使用更好的参数化奖励函数来探索那些复杂策略来实现此目标。 在他们的研究中,Sorg 等人(2010 年)以及 Zucker 和 Bagnell(2012 年)通过调整奖励功能,通过策略搜索技术实现简单的最优控制,得出了复杂的策略。
最近,已经进行了进一步的研究开发,以在简单模型的基础上构建复杂策略,以通过使用更好的参数化奖励函数来探索那些复杂策略来实现此目标。 在他们的研究中,Sorg 等人(2010 年)以及 Zucker 和 Bagnell(2012 年)通过调整奖励函数,通过策略搜索技术实现简单的最优控制,得出了复杂的策略。
# 未解决的问题和实际挑战
根据强化学习算法的不同挑战,与监督学习相比,它们无法直接应用于机器人技术,后者在研究和更好的部署方面已经取得了重大的进步。
在风险不是很高的机器人技术中,可以为各种物理系统和控制任务引入强化学习。 其背后的原因是在现实世界系统中强化学习模型的稳定性问题。 所有学习过程都需要已实现的领域知识,以便更好地表示状态并设计准确的奖励功能。 这需要进一步的研究和开发。
在风险不是很高的机器人技术中,可以为各种物理系统和控制任务引入强化学习。 其背后的原因是在现实世界系统中强化学习模型的稳定性问题。 所有学习过程都需要已实现的领域知识,以便更好地表示状态并设计准确的奖励函数。 这需要进一步的研究和开发。
让我们讨论一些关于强化学习算法的开放性问题,这些问题在机器人强化学习领域中正在进行的和未来的研究中需要更多的关注。
......
......@@ -2,7 +2,7 @@
大约一年前,在**自然语言处理****NLP**)中进行强化学习成为人工智能界研究的热点。 2017 年下半年发布了大多数适合在 NLP 中使用强化学习的研究出版物。
在任何领域中使用强化学习框架的最大原因在于,以状态的形式表示环境,详尽列出了环境中所有可能的动作,以及特定领域的奖励功能,通过该功能来实现目标。 最优化的行动路径。 因此,如果系统具有许多可能的动作,但是未给出正确的动作集,并且目标高度依赖于系统的不同选项(动作),则强化学习框架可以比现有的监督或非监督模型更好地对系统进行建模。
在任何领域中使用强化学习框架的最大原因在于,以状态的形式表示环境,详尽列出了环境中所有可能的动作,以及特定领域的奖励函数,通过该功能来实现目标。 最优化的行动路径。 因此,如果系统具有许多可能的动作,但是未给出正确的动作集,并且目标高度依赖于系统的不同选项(动作),则强化学习框架可以比现有的监督或非监督模型更好地对系统进行建模。
为什么在 NLP 中使用强化学习?
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册