Skip to content

Commit

Permalink
[Terminology] Align terminology (d2l-ai#897)
Browse files Browse the repository at this point in the history
* 丢弃法 -> 暂退法

* revert

* 标记化 -> 词元化

* hyper-parameter -> hyperparameter

* 池化层->汇聚层
  • Loading branch information
goldmermaid authored Jul 9, 2021
1 parent 60e94f9 commit f4fb8f9
Show file tree
Hide file tree
Showing 26 changed files with 106 additions and 106 deletions.
4 changes: 2 additions & 2 deletions TERMINOLOGY.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@

批量,batch

平均池化层,average pooling layer
平均汇聚层,average pooling layer

齐普夫定律,Zipf's law

Expand Down Expand Up @@ -220,7 +220,7 @@ softmax回归,softmax regression

跳字模型,skip-gram model

调参,tune hyper-parameter
调参,tune hyperparameter

停用词,stop words

Expand Down
8 changes: 4 additions & 4 deletions chapter_attention-mechanisms/attention-cues.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@

自主的与非自主的提示解释了注意力展开的的方式,受这种提示的启发我们将在下文中描述用于设计注意力机制时的框架,框架中纳入了这两个注意力提示。

首先,考虑一个相对简单的状况,即只使用非自主提示。要想将选择偏向于感官输入,我们可以简单地使用参数化的全连接层,甚至是非参数化的最大池化层或平均池化层
首先,考虑一个相对简单的状况,即只使用非自主提示。要想将选择偏向于感官输入,我们可以简单地使用参数化的全连接层,甚至是非参数化的最大汇聚层或平均汇聚层

因此,通过包含自主提示将注意力机制与那些全连接层或池化层区别开来。在注意力机制的背景下,我们将自主提示称为 **查询**(Queries)。给定任何查询,注意力机制通过 **注意力池化**(attention pooling)将选择偏向于 **感官输入**(sensory inputs)(例如中间特征表示)。在注意力机制的背景下,这些感官输入被称为 ****(Values)。更通俗的解释,每个值都与一个 ****(Keys) 配对,这可以想象为该感官输入的非自主提示。如 :numref:`fig_qkv` 所示,我们可以设计注意力池,以便给定的查询(自主提示)可以与键(非自主提示)进行交互,这将指导选择偏向于值(感官输入)。
因此,通过包含自主提示将注意力机制与那些全连接层或汇聚层区别开来。在注意力机制的背景下,我们将自主提示称为 **查询**(Queries)。给定任何查询,注意力机制通过 **注意力池化**(attention pooling)将选择偏向于 **感官输入**(sensory inputs)(例如中间特征表示)。在注意力机制的背景下,这些感官输入被称为 ****(Values)。更通俗的解释,每个值都与一个 ****(Keys) 配对,这可以想象为该感官输入的非自主提示。如 :numref:`fig_qkv` 所示,我们可以设计注意力池,以便给定的查询(自主提示)可以与键(非自主提示)进行交互,这将指导选择偏向于值(感官输入)。

![注意力机制通过注意力池化将 **查询**(自主提示)和 ****(非自主提示)合并在一起实现对 ****(感官输入)的选择偏向。](../img/qkv.svg)
:label:`fig_qkv`
Expand All @@ -38,7 +38,7 @@

## 注意力的可视化

平均池化层可以被视为输入的加权平均值,其权重是均匀分布的。实际上,注意力池化得到的是加权平均的合计值,其中权重是在给定的查询和不同的键之间计算得出的。
平均汇聚层可以被视为输入的加权平均值,其权重是均匀分布的。实际上,注意力池化得到的是加权平均的合计值,其中权重是在给定的查询和不同的键之间计算得出的。

```{.python .input}
from d2l import mxnet as d2l
Expand Down Expand Up @@ -95,7 +95,7 @@ show_heatmaps(attention_weights, xlabel='Keys', ylabel='Queries')

* 人类的注意力是有限的、宝贵的和稀缺的资源。
* 受试者使用非自主的和自主的提示有选择性地引导注意力。前者基于突出性,后者则依赖于任务。
* 注意力机制与全连接层或者池化层的区别源于增加的自主提示
* 注意力机制与全连接层或者汇聚层的区别源于增加的自主提示
* 由于包含了自主提示,注意机制与全连接的层或池层不同。
* 注意力机制通过注意力池化使选择偏向于值(感官输入),其中包含查询(自主提示)和键(非自主提示)。键和值是成对的。
* 我们可以可视化查询和键之间的注意力权重。
Expand Down
6 changes: 3 additions & 3 deletions chapter_computational-performance/multiple-gpus-concise.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ from torch import nn

## [**简单网络**]

让我们使用一个比 :numref:`sec_multi_gpu` 的 LeNet 更有意义的网络,它依然能够容易地和快速地训练。我们选择的是 :cite:`He.Zhang.Ren.ea.2016` 中的 ResNet-18。因为输入的图像很小,所以稍微修改了一下。与 :numref:`sec_resnet` 的区别在于,我们在开始时使用了更小的卷积核、步长和填充,而且删除了最大池化层
让我们使用一个比 :numref:`sec_multi_gpu` 的 LeNet 更有意义的网络,它依然能够容易地和快速地训练。我们选择的是 :cite:`He.Zhang.Ren.ea.2016` 中的 ResNet-18。因为输入的图像很小,所以稍微修改了一下。与 :numref:`sec_resnet` 的区别在于,我们在开始时使用了更小的卷积核、步长和填充,而且删除了最大汇聚层

```{.python .input}
#@save
Expand All @@ -36,7 +36,7 @@ def resnet18(num_classes):
return blk
net = nn.Sequential()
# 该模型使用了更小的卷积核、步长和填充,而且删除了最大池化层
# 该模型使用了更小的卷积核、步长和填充,而且删除了最大汇聚层
net.add(nn.Conv2D(64, kernel_size=3, strides=1, padding=1),
nn.BatchNorm(), nn.Activation('relu'))
net.add(resnet_block(64, 2, first_block=True),
Expand All @@ -63,7 +63,7 @@ def resnet18(num_classes, in_channels=1):
blk.append(d2l.Residual(out_channels, out_channels))
return nn.Sequential(*blk)
# 该模型使用了更小的卷积核、步长和填充,而且删除了最大池化层
# 该模型使用了更小的卷积核、步长和填充,而且删除了最大汇聚层
net = nn.Sequential(
nn.Conv2d(in_channels, 64, kernel_size=3, stride=1, padding=1),
nn.BatchNorm2d(64),
Expand Down
2 changes: 1 addition & 1 deletion chapter_computational-performance/multiple-gpus.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
## 问题拆分

我们从一个简单的计算机视觉问题和一个稍稍过时的网络开始。
这个网络有多个卷积层和池化层,最后可能有几个全连接的层,看起来非常类似于 LeNet :cite:`LeCun.Bottou.Bengio.ea.1998` 或 AlexNet :cite:`Krizhevsky.Sutskever.Hinton.2012`
这个网络有多个卷积层和汇聚层,最后可能有几个全连接的层,看起来非常类似于 LeNet :cite:`LeCun.Bottou.Bengio.ea.1998` 或 AlexNet :cite:`Krizhevsky.Sutskever.Hinton.2012`
假设我们有多个 GPU(如果是桌面服务器则有 $2$ 个,AWS g4dn.12xlarge 上有 $4$ 个,p3.16xlarge 上有 $8$ 个,p2.16xlarge 上有 $16$ 个)。
我们希望以一种方式对训练进行拆分,为实现良好的加速比,还能同时受益于简单且可重复的设计选择。
毕竟,多个 GPU 同时增加了内存和计算能力。
Expand Down
4 changes: 2 additions & 2 deletions chapter_computer-vision/fcn.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ from torch.nn import functional as F
:label:`fig_fcn`

下面,我们[**使用在ImageNet数据集上预训练的ResNet-18模型来提取图像特征**],并将该网络实例记为`pretrained_net`
该模型的最后几层包括全局平均池化层和全连接层,然而全卷积网络中不需要它们。
该模型的最后几层包括全局平均汇聚层和全连接层,然而全卷积网络中不需要它们。

```{.python .input}
pretrained_net = gluon.model_zoo.vision.resnet18_v2(pretrained=True)
Expand All @@ -49,7 +49,7 @@ list(pretrained_net.children())[-3:]
```

接下来,我们[**创建一个全卷积网络实例`net`**]
它复制了Resnet-18中大部分的预训练层,但除去最终的全局平均池化层和最接近输出的全连接层
它复制了Resnet-18中大部分的预训练层,但除去最终的全局平均汇聚层和最接近输出的全连接层

```{.python .input}
net = nn.HybridSequential()
Expand Down
2 changes: 1 addition & 1 deletion chapter_computer-vision/image-augmentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ apply(img, torchvision.transforms.RandomVerticalFlip())
```

在我们使用的示例图像中,猫位于图像的中间,但并非所有图像都是这样。
在 :numref:`sec_pooling` 中,我们解释了池化层可以降低卷积层对目标位置的敏感性
在 :numref:`sec_pooling` 中,我们解释了汇聚层可以降低卷积层对目标位置的敏感性
另外,我们可以通过对图像进行随机裁剪,使物体以不同的比例出现在图像的不同位置。
这也可以降低模型对目标位置的敏感性。

Expand Down
18 changes: 9 additions & 9 deletions chapter_computer-vision/rcnn.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,21 +41,21 @@ R-CNN 的主要性能瓶颈在于,对每个提议区域,卷积神经网络
1. 通过全连接层将输出形状变换为$n \times d$,其中超参数$d$取决于模型设计。
1. 预测$n$个提议区域中每个区域的类别和边界框。更具体地说,在预测类别和边界框时,将全连接层的输出分别转换为形状为 $n \times q$($q$ 是类别的数量)的输出和形状为 $n \times 4$ 的输出。其中预测类别时使用 softmax 回归。

在Fast R-CNN 中提出的兴趣区域池化层与 :numref:`sec_pooling` 中介绍的池化层有所不同。在池化层中,我们通过设置池化窗口、填充和步幅的大小来间接控制输出形状。而兴趣区域池化层对每个区域的输出形状是可以直接指定的
在Fast R-CNN 中提出的兴趣区域汇聚层与 :numref:`sec_pooling` 中介绍的汇聚层有所不同。在汇聚层中,我们通过设置池化窗口、填充和步幅的大小来间接控制输出形状。而兴趣区域汇聚层对每个区域的输出形状是可以直接指定的

例如,指定每个区域输出的高和宽分别为 $h_2$ 和 $w_2$。
对于任何形状为 $h \times w$ 的兴趣区域窗口,该窗口将被划分为 $h_2 \times w_2$ 子窗口网格,其中每个子窗口的大小约为$(h/h_2) \times (w/w_2)$。
在实践中,任何子窗口的高度和宽度都应向上取整,其中的最大元素作为该子窗口的输出。
因此,兴趣区域池化层可从形状各异的兴趣区域中均抽取出形状相同的特征
因此,兴趣区域汇聚层可从形状各异的兴趣区域中均抽取出形状相同的特征

作为说明性示例, :numref:`fig_roi` 中提到,在$4 \times 4$的输入中,我们选取了左上角 $3\times 3$ 的兴趣区域。
对于该兴趣区域,我们通过 $2\times 2$ 的兴趣区域池化层得到一个 $2\times 2$ 的输出。
对于该兴趣区域,我们通过 $2\times 2$ 的兴趣区域汇聚层得到一个 $2\times 2$ 的输出。
请注意,四个划分后的子窗口中分别含有元素 0、1、4、5(5最大);2、6(6最大);8、9(9最大);以及10。

![一个 $2\times 2$ 的兴趣区域池化层](../img/roi.svg)
![一个 $2\times 2$ 的兴趣区域汇聚层](../img/roi.svg)
:label:`fig_roi`

下面,我们演示了兴趣区域池化层的计算方法
下面,我们演示了兴趣区域汇聚层的计算方法
假设卷积神经网络抽取的特征 `X` 的高度和宽度都是 4,且只有单通道。

```{.python .input}
Expand Down Expand Up @@ -90,7 +90,7 @@ rois = torch.Tensor([[0, 0, 0, 20, 20], [0, 0, 10, 30, 30]])

由于 `X` 的高和宽是输入图像高和宽的 $1/10$,因此,两个提议区域的坐标先按 `spatial_scale` 乘以 0.1。
然后,在 `X` 上分别标出这两个兴趣区域 `X[:, :, 1:4, 0:4]``X[:, :, 1:4, 0:4]`
最后,在 $2\times 2$ 的兴趣区域池化层中,每个兴趣区域被划分为子窗口网格,并进一步抽取相同形状 $2\times 2$ 的特征。
最后,在 $2\times 2$ 的兴趣区域汇聚层中,每个兴趣区域被划分为子窗口网格,并进一步抽取相同形状 $2\times 2$ 的特征。

```{.python .input}
npx.roi_pooling(X, rois, pooled_size=(2, 2), spatial_scale=0.1)
Expand All @@ -115,7 +115,7 @@ torchvision.ops.roi_pool(X, rois, output_size=(2, 2), spatial_scale=0.1)
1. 使用填充为1的 $3\times 3$ 的卷积层变换卷积神经网络的输出,并将输出通道数记为 $c$。这样,卷积神经网络为图像抽取的特征图中的每个单元均得到一个长度为 $c$ 的新特征。
1. 以特征图的每个像素为中心,生成多个不同大小和宽高比的锚框并标注它们。
1. 使用锚框中心单元长度为 $c$ 的特征,分别预测该锚框的二元类别(含目标还是背景)和边界框。
1. 使用非极大值抑制,从预测类别为目标的预测边界框中移除相似的结果。最终输出的预测边界框即是兴趣区域池化层所需的提议区域
1. 使用非极大值抑制,从预测类别为目标的预测边界框中移除相似的结果。最终输出的预测边界框即是兴趣区域汇聚层所需的提议区域

值得一提的是,区域提议网络作为 Faster R-CNN 模型的一部分,是和整个模型一起训练得到的。
换句话说,Faster R-CNN 的目标函数不仅包括目标检测中的类别和边界框预测,还包括区域提议网络中锚框的二元类别和边界框预测。
Expand All @@ -129,7 +129,7 @@ torchvision.ops.roi_pool(X, rois, output_size=(2, 2), spatial_scale=0.1)
:label:`fig_mask_r-cnn`

如 :numref:`fig_mask_r-cnn` 所示,Mask R-CNN 是基于 Faster R-CNN 修改而来的。
具体来说,Mask R-CNN 将兴趣区域池化层替换为了
具体来说,Mask R-CNN 将兴趣区域汇聚层替换为了
*兴趣区域 (RoI) 对齐* 层,使用 *双线性插值*(bilinear interpolation)来保留特征图上的空间信息,从而更适于像素级预测。
兴趣区域对齐层的输出包含了所有与兴趣区域的形状相同的特征图。
它们不仅被用于预测每个兴趣区域的类别和边界框,还通过额外的全卷积网络预测目标的像素级位置。
Expand All @@ -138,7 +138,7 @@ torchvision.ops.roi_pool(X, rois, output_size=(2, 2), spatial_scale=0.1)
## 小结

* R-CNN 对图像选取若干提议区域,使用卷积神经网络对每个提议区域执行前向计算以抽取其特征,然后再用这些特征来预测提议区域的类别和边界框。
* Fast R-CNN 对 R-CNN 的一个主要改进:只对整个图像做卷积神经网络的前向计算。它还引入了兴趣区域池化层,从而为具有不同形状的兴趣区域抽取相同形状的特征。
* Fast R-CNN 对 R-CNN 的一个主要改进:只对整个图像做卷积神经网络的前向计算。它还引入了兴趣区域汇聚层,从而为具有不同形状的兴趣区域抽取相同形状的特征。
* Faster R-CNN 将 Fast R-CNN 中使用的选择性搜索替换为参与训练的区域提议网络,这样后者可以在减少提议区域数量的情况下仍保证目标检测的精度。
* Mask R-CNN 在 Faster R-CNN 的基础上引入了一个全卷积网络,从而借助目标的像素级位置进一步提升目标检测的精度。

Expand Down
6 changes: 3 additions & 3 deletions chapter_computer-vision/ssd.md
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,8 @@ concat_preds([Y1, Y2]).shape

为了在多个尺度下检测目标,我们在下面定义了高和宽减半块 `down_sample_blk`,该模块将输入特征图的高度和宽度减半。
事实上,该块应用了在 :numref:`subsec_vgg-blocks` 中的 VGG 模块设计。
更具体地说,每个高和宽减半块由两个填充为 $1$ 的 $3\times3$ 的卷积层、以及步幅为 $2$ 的 $2\times2$ 最大池化层组成
我们知道,填充为 $1$ 的 $3\times3$ 卷积层不改变特征图的形状。但是,其后的 $2\times2$ 的最大池化层将输入特征图的高度和宽度减少了一半
更具体地说,每个高和宽减半块由两个填充为 $1$ 的 $3\times3$ 的卷积层、以及步幅为 $2$ 的 $2\times2$ 最大汇聚层组成
我们知道,填充为 $1$ 的 $3\times3$ 卷积层不改变特征图的形状。但是,其后的 $2\times2$ 的最大汇聚层将输入特征图的高度和宽度减少了一半
对于此高和宽减半块的输入和输出特征图,因为 $1\times 2+(3-1)+(3-1)=6$ ,所以输出中的每个单元在输入上都有一个 $6\times6$ 的感受野。因此,高和宽减半块会扩大每个单元在其输出特征图中的感受野。

```{.python .input}
Expand Down Expand Up @@ -349,7 +349,7 @@ class TinySSD(nn.Module):
我们[**创建一个模型实例,然后使用它**]对一个 $256 \times 256$ 像素的小批量图像 `X` (**执行前向计算**)。

如本节前面部分所示,第一个模块输出特征图的形状为 $32 \times 32$ 。
回想一下,第二到第四个模块为高和宽减半块,第五个模块为全局池化层
回想一下,第二到第四个模块为高和宽减半块,第五个模块为全局汇聚层
由于以特征图的每个单元为中心有 $4$ 个锚框生成,因此在所有五个尺度下,每个图像总共生成 $(32^2 + 16^2 + 8^2 + 4^2 + 1)\times 4 = 5444$ 个锚框。

```{.python .input}
Expand Down
2 changes: 1 addition & 1 deletion chapter_computer-vision/transposed-conv.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# 转置卷积
:label:`sec_transposed_conv`

到目前为止,我们所见到的卷积神经网络层,例如卷积层( :numref:`sec_conv_layer`和池化层( :numref:`sec_pooling`),通常会减少下采样输入图像的空间维度(高和宽)。
到目前为止,我们所见到的卷积神经网络层,例如卷积层( :numref:`sec_conv_layer`和汇聚层( :numref:`sec_pooling`),通常会减少下采样输入图像的空间维度(高和宽)。
然而如果输入和输出图像的空间维度相同,在以像素级分类的语义分割中将会很方便。
例如,输出像素所处的通道维可以保有输入像素在同一位置上的分类结果。

Expand Down
8 changes: 4 additions & 4 deletions chapter_convolutional-modern/alexnet.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ AlexNet由八层组成:五个卷积层、两个全连接隐藏层和一个全
在AlexNet的第一层,卷积窗口的形状是 $11\times11$。
由于ImageNet中大多数图像的宽和高比MNIST图像的多10倍以上,因此,需要一个更大的卷积窗口来捕获目标。
第二层中的卷积窗口形状被缩减为 $5\times5$,然后是 $3\times3$。
此外,在第一层、第二层和第五层卷积层之后,加入窗口形状为 $3\times3$、步幅为2的最大池化层
此外,在第一层、第二层和第五层卷积层之后,加入窗口形状为 $3\times3$、步幅为2的最大汇聚层
而且,AlexNet的卷积通道数目是LeNet的10倍。

在最后一个卷积层后有两个全连接层,分别有4096个输出。
Expand Down Expand Up @@ -126,7 +126,7 @@ net.add(
nn.MaxPool2D(pool_size=3, strides=2),
# 使用三个连续的卷积层和一个较小的卷积窗口。
# 除了最后的卷积层,输出通道的数量进一步增加。
# 前两个卷积层后不使用池化层来减小输入的高和宽
# 前两个卷积层后不使用汇聚层来减小输入的高和宽
nn.Conv2D(384, kernel_size=3, padding=1, activation='relu'),
nn.Conv2D(384, kernel_size=3, padding=1, activation='relu'),
nn.Conv2D(256, kernel_size=3, padding=1, activation='relu'),
Expand Down Expand Up @@ -155,7 +155,7 @@ net = nn.Sequential(
nn.MaxPool2d(kernel_size=3, stride=2),
# 使用三个连续的卷积层和较小的卷积窗口。
# 除了最后的卷积层,输出通道的数量进一步增加。
# 在前两个卷积层之后,池化层不用于减少输入的高度和宽度
# 在前两个卷积层之后,汇聚层不用于减少输入的高度和宽度
nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(),
nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(),
nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(),
Expand Down Expand Up @@ -189,7 +189,7 @@ def net():
tf.keras.layers.MaxPool2D(pool_size=3, strides=2),
# 使用三个连续的卷积层和较小的卷积窗口。
# 除了最后的卷积层,输出通道的数量进一步增加。
# 在前两个卷积层之后,池化层不用于减少输入的高度和宽度
# 在前两个卷积层之后,汇聚层不用于减少输入的高度和宽度
tf.keras.layers.Conv2D(filters=384, kernel_size=3, padding='same',
activation='relu'),
tf.keras.layers.Conv2D(filters=384, kernel_size=3, padding='same',
Expand Down
Loading

0 comments on commit f4fb8f9

Please sign in to comment.