动手学深度学习——5.卷积神经网络

1.卷积神经网络特征

现在,我们将上述想法总结一下,从而帮助我们设计适合于计算机视觉的神经网络架构。

  1. 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。

  2. 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。

卷积神经网络是包含卷积层的一类特殊的神经网络。 在深度学习研究社区中,𝑉被称为卷积核(convolution kernel)或者滤波器(filter),亦或简单地称之为该卷积层的权重,通常该权重是可学习的参数。 当图像处理的局部区域很小时,卷积神经网络与多层感知机的训练差异可能是巨大的:以前,多层感知机可能需要数十亿个参数来表示网络中的一层,而现在卷积神经网络通常只需要几百个参数,而且不需要改变输入或隐藏表示的维数。 参数大幅减少的代价是,我们的特征现在是平移不变的,并且当确定每个隐藏活性值时,每一层只包含局部的信息。 以上所有的权重学习都将依赖于归纳偏置。当这种偏置与现实相符时,我们就能得到样本有效的模型,并且这些模型能很好地泛化到未知数据中。 但如果这偏置与现实不符时,比如当图像不满足平移不变时,我们的模型可能难以拟合我们的训练数据。

2.多输入通道

当输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,以便与输入数据进行互相关运算。假设输入的通道数为𝑐𝑖,那么卷积核的输入通道数也需要为𝑐𝑖。如果卷积核的窗口形状是𝑘ℎ×𝑘𝑤,那么当𝑐𝑖=1时,我们可以把卷积核看作形状为𝑘ℎ×𝑘𝑤的二维张量。

然而,当𝑐𝑖>1时,我们卷积核的每个输入通道将包含形状为𝑘ℎ×𝑘𝑤的张量。将这些张量𝑐𝑖连结在一起可以得到形状为𝑐𝑖×𝑘ℎ×𝑘𝑤的卷积核。由于输入和卷积核都有𝑐𝑖个通道,我们可以对每个通道输入的二维张量和卷积核的二维张量进行互相关运算,再对通道求和(将𝑐𝑖的结果相加)得到二维张量。这是多通道输入和多输入通道卷积核之间进行二维互相关运算的结果。

3.多输出通道

到目前为止,不论有多少输入通道,我们还只有一个输出通道。然而,正如我们在 6.1.4.1节中所讨论的,每一层有多个输出通道是至关重要的。在最流行的神经网络架构中,随着神经网络层数的加深,我们常会增加输出通道的维数,通过减少空间分辨率以获得更大的通道深度。直观地说,我们可以将每个通道看作对不同特征的响应。而现实可能更为复杂一些,因为每个通道不是独立学习的,而是为了共同使用而优化的。因此,多输出通道并不仅是学习多个单通道的检测器。

用𝑐𝑖和𝑐𝑜分别表示输入和输出通道的数目,并让𝑘ℎ和𝑘𝑤为卷积核的高度和宽度。为了获得多个通道的输出,我们可以为每个输出通道创建一个形状为𝑐𝑖×𝑘ℎ×𝑘𝑤的卷积核张量,这样卷积核的形状是𝑐𝑜×𝑐𝑖×𝑘ℎ×𝑘𝑤。在互相关运算中,每个输出通道先获取所有输入通道,再以对应该输出通道的卷积核计算出结果。

4.1×1卷积层

1×1卷积,即𝑘ℎ=𝑘𝑤=1,看起来似乎没有多大意义。 毕竟,卷积的本质是有效提取相邻像素间的相关特征,而1×1卷积显然没有此作用。 尽管如此,1×1仍然十分流行,经常包含在复杂深层网络的设计中。下面,让我们详细地解读一下它的实际作用。

因为使用了最小窗口,1×1卷积失去了卷积层的特有能力——在高度和宽度维度上,识别相邻元素间相互作用的能力。 其实1×1卷积的唯一计算发生在通道上。

图展示了使用1×1卷积核与3个输入通道和2个输出通道的互相关计算。 这里输入和输出具有相同的高度和宽度,输出中的每个元素都是从输入图像中同一位置的元素的线性组合。 我们可以将1×1卷积层看作在每个像素位置应用的全连接层,以𝑐𝑖个输入值转换为𝑐𝑜个输出值。 因为这仍然是一个卷积层,所以跨像素的权重是一致的。 同时,1×1卷积层需要的权重维度为𝑐𝑜×𝑐𝑖,再额外加上一个偏置。

5.池化层

池化层具有双重目的:降低卷积层对位置的敏感性,同时降低对空间降采样表示的敏感性。

在处理多通道输入数据时,汇聚层在每个输入通道上单独运算,而不是像卷积层一样在通道上对输入进行汇总。 这意味着汇聚层的输出通道数与输入通道数相同。 下面,我们将在通道维度上连结张量XX + 1,以构建具有2个通道的输入。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 12:58:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 12:58:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 12:58:03       58 阅读
  4. Python语言-面向对象

    2024-07-18 12:58:03       69 阅读

热门阅读

  1. 新员工入职通识考试

    2024-07-18 12:58:03       20 阅读
  2. CSS文本样式:打造精美网页文字的艺术

    2024-07-18 12:58:03       21 阅读
  3. Python--print函数的end参数

    2024-07-18 12:58:03       23 阅读
  4. 《栈和队列学习笔记》

    2024-07-18 12:58:03       17 阅读
  5. js中使用箭头函数以及setTimeout时this的指向问题

    2024-07-18 12:58:03       21 阅读
  6. 快速排序算法的基本思想以及Python实现

    2024-07-18 12:58:03       23 阅读
  7. 【Go系列】Go语言的网络服务

    2024-07-18 12:58:03       27 阅读
  8. 处理UI卡死的技巧

    2024-07-18 12:58:03       22 阅读
  9. 在 Debian 12 上安装 budgie-extras-common 包

    2024-07-18 12:58:03       23 阅读