前馈网络,或多层感知机 (MLPs),是功能强大的工具。然而,当处理图像等数据时,它们的标准结构会显现出明显的局限性。试想一下,当你将图像输入到MLP时会发生什么:通常,你会将图像矩阵展平(例如,一个28x28像素的图像变成一个784个元素的向量)。这种展平过程会立即丢弃重要的空间信息。在2D网格中相邻的像素,可能形成线条或纹理,在展平后被视为独立的输入。网络失去了数据的固有结构;它不能固有地理解像素(0,0)和(0,1)比像素(0,0)和(27,27)更接近且更可能相关。MLP必须从零开始学习这些空间关系,这效率很低。此外,高分辨率图像会导致庞大的输入向量。一个适中的224x224彩色图像有$224 \times 224 \times 3 = 150,528$个输入值。将这个输入层连接到MLP中哪怕是一个中等大小的首个隐藏层,都会导致参数(权重和偏置)数量暴增。训练这样的网络会计算成本高昂,并且需要大量数据以避免过拟合,因为相对于其试图学习的底层结构而言,模型容量过大。digraph G { rankdir=LR; node [shape=circle, style=filled, fillcolor="#a5d8ff", width=0.3, height=0.3, label=""]; edge [arrowhead=none]; subgraph cluster_0 { label = "输入像素 (展平)"; bgcolor="#e9ecef"; style=rounded; i1, i2, i3, i4, i5, i6, i7, i8, i9 [shape=point]; // 代表许多像素 i_dots [label="...", shape=plaintext]; i1 -> i2 -> i3 -> i4 -> i5 -> i_dots -> i6 -> i7 -> i8 -> i9 [style=invis]; // 布局 } subgraph cluster_1 { label = "MLP首个隐藏层"; bgcolor="#e9ecef"; style=rounded; h1, h2, h3 [fillcolor="#ffe066"]; h_dots [label="...", shape=plaintext]; h1 -> h2 -> h_dots -> h3 [style=invis]; // 布局 } // 全连接边 (示意) edge [color="#adb5bd"]; {i1, i2, i3, i4, i5, i6, i7, i8, i9} -> {h1, h2, h3}; }MLP通常将每个输入特征(展平后的像素)连接到第一个隐藏层中的每个神经元,忽略空间关系并导致大量参数。卷积神经网络 (CNNs) 专门为了解决这些不足而发展起来。它们被设计用来处理以多维数组形式存在的数据,例如由3D数组(高、宽、颜色通道)组成的彩色图像。CNN背后的核心动因源于三个主要思想,这些思想使其在涉及网格状数据的任务中非常有效:局部感受野: CNN不将每个输入神经元连接到每个隐藏神经元,而是采用只响应输入层中有限区域的神经元。这个区域被称为局部感受野。想象一个小的窗口(例如,3x3或5x5像素)在输入图像上滑动。下一层的神经元一次只处理该窗口内的信息。这直接运用了图像中存在的空间局部性;附近的像素可能相互关联,并有助于形成基本的视觉特征,如边缘或角点。参数共享: 这是一个强大的思想。在CNN中,同一组权重(通常称为滤波器或卷积核)应用于输入图像中的不同位置。如果一个滤波器被设计用于检测水平边缘,它会在整个图像上滑动,无论该边缘出现在何处,都能将其检测出来。与MLP相比,这大幅减少了参数的数量。CNN不是为在每个可能位置检测特征而学习单独的权重,而是为该特征检测器学习一组单一的权重。这使得网络效率高得多,并且更不容易过拟合。平移不变性(或等变性): 参数共享的一个直接结果是CNN具有一定程度的平移不变性(更准确地说,是等变性)。如果网络使用特定滤波器学习在图像的某一部分检测到一个模式(例如,猫的眼睛),那么如果该模式出现在不同的位置,它可以使用相同的滤波器检测到该模式。这对于物体识别和其他图像分析任务来说非常理想,因为物体的身份不会因其在画面中的位置而改变。digraph G { rankdir=LR; node [shape=square, style=filled, width=0.2, height=0.2, label=""]; edge [arrowhead=none]; subgraph cluster_0 { label = "输入图像块"; bgcolor="#e9ecef"; style=rounded; node [fillcolor="#a5d8ff"]; p11, p12, p13; p21, p22, p23; p31, p32, p33; {rank=same; p11->p12->p13}; {rank=same; p21->p22->p23}; {rank=same; p31->p32->p33}; p11->p21->p31; p12->p22->p32; p13->p23->p33; } subgraph cluster_1 { label = "CNN特征图神经元"; bgcolor="#e9ecef"; style=rounded; h1 [shape=circle, fillcolor="#ffe066", width=0.4, height=0.4]; } // 局部连接边 edge [color="#1c7ed6"]; {p11, p12, p13, p21, p22, p23, p31, p32, p33} -> h1; label="CNN连接方式 (单个滤波器位置)"; fontsize=10; labelloc=b; }特征图中的CNN神经元仅连接到输入的局部图像块(感受野)。定义此连接的权重(即滤波器)在不同空间位置共享。本质上,CNN是出于构建遵循图像数据空间层次结构的模型的需求而形成的。它们局部学习特征,高效共享参数,并从简单的部分构建复杂的表示,使其成为许多计算机视觉任务的标准方法。接下来的部分将详细说明实现这些特性的具体操作,如卷积和池化。