卷积神经网络基础结构详解
1. 卷积网络基础参数
1.1 填充与卷积后的尺寸变化
在卷积神经网络中,若原始图像的输入维度为 (L_q) 和 (B_q),经过填充后,输入体积的空间维度变为 (L_q + 2(F_q - 1)) 和 (B_q + 2(F_q - 1))。进行卷积操作后,第 ((q + 1)) 层的特征图维度分别变为 (L_q + F_q - 1) 和 (B_q + F_q - 1)。通常卷积会减小空间占用,但全填充会增加空间占用。有趣的是,全填充增加的空间维度值 ((F_q - 1)) 与无填充时减少的维度值相同。这并非巧合,因为可以通过在原始卷积的全填充输出上应用另一个卷积操作,使用相同大小的适当定义的内核来实现“反向”卷积。这种“反向”卷积在卷积神经网络的反向传播和自编码器算法中经常出现。全填充输入很有用,因为它增加了空间占用,这在几种类型的卷积自编码器中是必需的。
1.2 步长对卷积的影响
卷积还可以通过其他方式减少图像(或隐藏层)的空间占用。上述方法在特征图的空间位置的每个位置执行卷积,但并非必须在层的每个空间位置执行卷积。可以使用步长的概念来降低卷积的粒度。当步长为 1 时,卷积在每个位置进行。当在第 (q) 层使用步长 (S_q) 时,卷积沿着层的两个空间维度在位置 1、(S_q + 1)、(2S_q + 1) 等位置执行。执行此卷积后,输出的空间大小高度为 ((L_q - F_q)/S_q + 1),宽度为 ((B_q - F_q)/S_q + 1)。因此,步长的使用将使层的每个空间维度大约减少 (S_q) 倍,面积减少 (S_q^2) 倍,不过由于边缘效应,实际减少因子可能会有所不同。
步长的常见设置如下:
- 最常见的步长是 1,偶尔也会使用步长 2。在正常情况下,很少使用大于 2 的步长。例如,2012 年 ILSVRC 竞赛的获胜架构在输入层使用了步长 4,但次年的获胜作品将步长减小到 2 以提高准确性。
- 较大的步长在内存受限的情况下或当空间分辨率过高时有助于减少过拟合。步长会迅速增加隐藏层中每个特征的感受野,同时减少整个层的空间占用。增加感受野有助于在图像的更大空间区域中捕获复杂特征。近年来,较大的步长已被用于替代最大池化操作。
1.3 典型设置
- 步长 :在大多数情况下,步长大小通常为 1。即使使用步长,也通常使用大小为 2 的小步长。
- 图像形状 :通常希望处理正方形图像,即 (L_q = B_q)。如果输入图像不是正方形,则需要进行预处理以实现这一特性,例如提取图像的正方形补丁来创建训练数据。
- 滤波器数量 :每层中的滤波器数量通常是 2 的幂,因为这通常会导致更高效的处理,并且也会使隐藏层深度为 2 的幂。
- 滤波器大小 :滤波器空间范围(用 (F_q) 表示)的典型值为 3 或 5。一般来说,小滤波器尺寸通常能提供最佳结果,尽管使用过小的滤波器尺寸存在一些实际挑战。小滤波器尺寸通常会导致更深的网络(对于相同的参数占用),因此往往更强大。例如,VGG 首次在所有层中尝试使用空间滤波器维度仅为 (F_q = 3) 的方法,与较大的滤波器尺寸相比,该方法效果很好。
1.4 偏置的使用
和所有神经网络一样,也可以在正向操作中添加偏置。每层中的每个唯一滤波器都有其自己的偏置。因此,第 (q) 层中的第 (p) 个滤波器有偏置 (b(p,q))。当使用第 (q) 层中的第 (p) 个滤波器进行任何卷积时,(b(p,q)) 的值会加到点积上。偏置的使用只是使每个滤波器的参数数量增加 1,因此不是很大的开销。和所有其他参数一样,偏置在反向传播过程中学习。可以将偏置视为输入始终设置为 +1 的连接的权重。这个特殊输入在所有卷积中都使用,无论卷积的空间位置如何。因此,可以假设输入中出现一个值始终设置为 1 的特殊像素。所以,第 (q) 层的输入特征数量为 (1 + L_q × B_q × d_q)。这是在所有形式的机器学习中用于处理偏置的标准特征工程技巧。
2. 卷积网络中的特殊层
2.1 ReLU 层
卷积操作与池化和 ReLU 操作交织进行。ReLU 激活与在传统神经网络中的应用方式没有太大区别。对于层中的 (L_q × B_q × d_q) 个值,对每个值应用 ReLU 激活函数以创建 (L_q×B_q×d_q) 个阈值化值。然后将这些值传递到下一层。因此,应用 ReLU 不会改变层的维度,因为它是激活值的简单一对一映射。在传统神经网络中,激活函数与权重矩阵的线性变换相结合以创建下一层的激活。类似地,ReLU 通常跟随卷积操作(这大致相当于传统神经网络中的线性变换),并且在卷积神经网络架构的图示中,ReLU 层通常不明确显示。
值得注意的是,ReLU 激活函数的使用是神经网络设计的近期发展。早期,使用诸如 sigmoid 和 tanh 等饱和激活函数。但研究表明,ReLU 在速度和准确性方面都比这些激活函数有巨大优势。速度的提高也与准确性相关,因为它允许使用更深的模型并进行更长时间的训练。近年来,ReLU 激活函数在卷积神经网络设计中已取代了其他激活函数,在后续内容中,除非另有说明,将默认使用 ReLU 作为激活函数。
2.2 池化层
池化操作与卷积操作有很大不同。池化操作在每层的 (P_q × P_q) 小网格区域上进行,并生成具有相同深度(与滤波器不同)的另一层。对于每个 (d_q) 激活图中的 (P_q × P_q) 正方形区域,返回这些值中的最大值,这种方法称为最大池化。如果使用步长为 1,则会生成一个大小为 ((L_q - P_q + 1) × (B_q - P_q + 1) × d_q) 的新层。但更常见的是在池化中使用步长 (S_q > 1),在这种情况下,新层的长度为 ((L_q - P_q)/S_q + 1),宽度为 ((B_q - P_q)/S_q + 1)。因此,池化会大幅减少每个激活图的空间维度。
与卷积操作不同,池化是在每个激活图的层面上进行的。卷积操作同时使用所有 (d_q) 特征图与滤波器相结合以产生单个特征值,而池化独立地对每个特征图进行操作以产生另一个特征图。因此,池化操作不会改变特征图的数量,即使用池化创建的层的深度与执行池化操作的层的深度相同。
池化的常见设置如下:
-
区域大小
:通常进行池化的区域大小 (P_q) 为 (2×2)。
-
步长设置
:步长为 2 时,不同池化区域之间没有重叠,这种设置很常见。但有时建议在执行池化的空间单元之间至少有一些重叠,因为这会使方法不太可能过拟合。
其他类型的池化(如平均池化)也是可能的,但很少使用。在最早的卷积网络 LeNet - 5 中,使用了一种平均池化的变体,称为子采样。一般来说,最大池化比平均池化更受欢迎。最大池化层与卷积/ReLU 层交织,但在深度架构中,最大池化层通常出现的频率要低得多。这是因为池化会大幅减少特征图的空间大小,只需几次池化操作就可以将空间图缩小到一个小的恒定大小。
池化的作用主要有两个方面:
-
平移不变性
:池化导致(部分)平移不变性,因为稍微移动图像不会显著改变激活图。这种特性有助于对具有不同相对位置的相似形状的图像进行分类。
-
增加感受野
:池化通过使用大于 1 的步长增加了感受野的大小,同时减少了层的空间占用。较大的感受野有助于在后续层中捕获图像的更大区域内的复杂特征。近年来,有人认为池化并非总是必要的,可以设计仅包含卷积和 ReLU 操作的网络,并通过在卷积操作中使用较大的步长来实现感受野的扩展。但目前这一趋势尚未完全确立和验证,最大池化仍然有其优势,它引入了非线性和更大程度的平移不变性,这些效果不能完全由步长卷积复制。
2.3 全连接层
最终空间层中的每个特征都连接到第一个全连接层中的每个隐藏状态。这一层的功能与传统的前馈网络完全相同。在大多数情况下,可能会使用多个全连接层以增加计算能力。这些层之间的连接结构与传统的前馈网络完全相同。由于全连接层是密集连接的,绝大多数参数都位于全连接层中。例如,如果两个全连接层各有 4096 个隐藏单元,则它们之间的连接有超过 1600 万个权重。同样,从最后一个空间层到第一个全连接层的连接也会有大量参数。
尽管卷积层有更多的激活值(和更大的内存占用),但全连接层通常有更多的连接(和参数占用)。激活值对内存占用的影响更大,因为在反向传播的前向和反向传递中跟踪变量时,激活值的数量会乘以小批量大小。在根据特定类型的资源约束(例如数据与内存可用性)选择神经网络设计时,需要牢记这些权衡。
全连接层的性质可能因应用而异。例如,分类应用中的全连接层性质与分割应用中的全连接层性质有所不同。在分类应用中,卷积神经网络的输出层通常与倒数第二层的每个神经元完全连接,并具有相关的权重。可以根据应用的性质(例如分类或回归)使用逻辑、softmax 或线性激活函数。
一种替代使用全连接层的方法是在最终激活图的整个空间区域上进行平均池化以创建单个值。因此,最终空间层中创建的特征数量将恰好等于滤波器的数量。例如,如果最终激活图的大小为 (7 × 7 × 256),则将创建 256 个特征,每个特征是 49 个值的聚合结果。这种方法大大减少了全连接层的参数占用,并且在泛化能力方面有一些优势,例如在 GoogLeNet 中就使用了这种方法。在一些应用(如图像分割)中,每个像素都与一个类别标签相关联,不使用全连接层,而是使用具有 (1×1) 卷积的全卷积网络来创建输出空间图。
2.4 层间交织
卷积、池化和 ReLU 层通常在神经网络中交织,以增加网络的表达能力。ReLU 层通常跟随卷积层,就像传统神经网络中非线性激活函数通常跟随线性点积一样。因此,卷积层和 ReLU 层通常依次连接。在两到三组卷积 - ReLU 组合之后,可能会有一个最大池化层。以下是一些基本模式的示例:
- CRCRP
- CRCRCRP
其中,卷积层用 C 表示,ReLU 层用 R 表示,最大池化层用 P 表示。整个模式(包括最大池化层)可能会重复几次以创建深度神经网络。例如,如果上述第一个模式重复三次,然后跟随一个全连接层(用 F 表示),则得到的神经网络结构为:
CRCRPCRCRPCRCRPF
上述描述并不完整,还需要指定滤波器/池化层的数量、大小和填充情况。池化层是减少激活图空间占用的关键步骤,因为它使用大于 1 的步长。也可以使用步长卷积而不是最大池化来减少空间占用。这些网络通常很深,拥有超过 15 层的卷积网络并不罕见。近年来的架构还在层之间使用跳跃连接,随着网络深度的增加,跳跃连接变得越来越重要。
2.5 LeNet - 5 网络
早期的网络非常浅,LeNet - 5 是最早的神经网络之一。输入数据是灰度图像,只有一个颜色通道,输入假设是字符的 ASCII 表示。为了便于讨论,假设存在十种类型的字符(因此有 10 个输出),不过该方法可用于任意数量的类别。
LeNet - 5 网络包含两个卷积层、两个池化层和三个全连接层。但由于每层使用了多个滤波器,后续层包含多个特征图。该网络的第一个全连接层在原始工作中也被称为卷积层(标记为 C5),因为它有能力将其推广到更大输入图的空间特征。但 LeNet - 5 的具体实现实际上将 C5 用作全连接层,因为滤波器的空间大小与输入的空间大小相同。
LeNet - 5 有两个版本的架构图,原始工作中明确显示了子采样层,但像 AlexNet 等更深的架构图通常不明确显示子采样或最大池化层,以容纳大量的层。在 LeNet - 5 的原始工作中,sigmoid 激活函数在子采样操作之后立即出现,这种顺序在现代架构中相对不常见。在大多数现代架构中,子采样被最大池化取代,并且最大池化层出现的频率比卷积层低。此外,激活通常在每次卷积之后立即执行(而不是在每次最大池化之后)。
架构中的层数通常根据具有加权空间滤波器的层数和全连接层的数量来计算。换句话说,子采样/最大池化和激活函数层通常不单独计算。LeNet - 5 中的子采样使用 (2 × 2) 空间区域,步长为 2,与最大池化不同,它对值进行平均,用可训练的权重进行缩放,然后添加偏置。在现代架构中,线性缩放和偏置添加操作已被省去。
与现代标准相比,LeNet - 5 网络非常浅,但基本原理至今未变。主要区别在于当时 ReLU 激活函数尚未出现,早期架构经常使用 sigmoid 激活函数。此外,与最大池化相比,平均池化的使用在今天极为罕见。近年来,已经逐渐不再使用最大池化和子采样,步长卷积成为首选。LeNet - 5 还使用了十个径向基函数(RBF)。
3. 总结
本文详细介绍了卷积神经网络的基础结构,包括卷积操作中的填充、步长对特征图尺寸的影响,以及 ReLU 层、池化层、全连接层的特点和作用,还通过 LeNet - 5 网络展示了早期卷积网络的架构。在实际应用中,需要根据具体的任务需求和资源约束来选择合适的参数和层结构,以达到最佳的性能。
以下是一个简单的 mermaid 流程图,展示卷积神经网络的基本层间结构:
graph LR
A[输入层] --> B[卷积层]
B --> C[ReLU层]
C --> D{是否需要池化?}
D -- 是 --> E[池化层]
D -- 否 --> F[全连接层]
E --> F
F --> G[输出层]
同时,为了更清晰地对比不同层的特点,我们列出以下表格:
| 层类型 | 作用 | 对空间占用的影响 | 常见参数设置 |
| ---- | ---- | ---- | ---- |
| 卷积层 | 提取特征 | 可能减小(无填充)或增加(全填充) | 滤波器数量为 2 的幂,滤波器大小常见为 3 或 5 |
| ReLU 层 | 引入非线性 | 不改变 | - |
| 池化层 | 减少空间占用,增加感受野,实现平移不变性 | 大幅减小 | 区域大小 (2×2),步长 2 |
| 全连接层 | 进行最终的分类或回归 | - | 隐藏单元数量根据任务确定 |
4. 卷积神经网络参数与操作的深入分析
4.1 填充与步长的综合影响
填充和步长是卷积神经网络中影响特征图尺寸的两个重要因素。填充主要影响卷积操作前输入的空间维度,而步长则决定了卷积过程中滤波器的移动间隔。
当同时考虑填充和步长时,特征图的尺寸计算会变得更加复杂。假设原始图像的输入维度为 (L_q) 和 (B_q),滤波器大小为 (F_q),填充大小为 (P_q)(全填充时 (P_q = F_q - 1)),步长为 (S_q),则卷积后特征图的高度 (H_{q+1}) 和宽度 (W_{q+1}) 计算公式如下:
[H_{q+1} = \frac{L_q + 2P_q - F_q}{S_q} + 1]
[W_{q+1} = \frac{B_q + 2P_q - F_q}{S_q} + 1]
例如,当 (L_q = B_q = 28),(F_q = 3),(P_q = 1)(全填充),(S_q = 2) 时,计算可得:
[H_{q+1} = \frac{28 + 2\times1 - 3}{2} + 1 = 14]
[W_{q+1} = \frac{28 + 2\times1 - 3}{2} + 1 = 14]
4.2 激活函数的选择与性能差异
除了 ReLU 激活函数,还有其他几种常见的激活函数,如 sigmoid、tanh 等。它们在不同的场景下有着不同的性能表现。
| 激活函数 | 公式 | 优点 | 缺点 |
|---|---|---|---|
| ReLU | (f(x) = max(0, x)) | 计算简单,收敛速度快,能有效缓解梯度消失问题 | 存在死亡 ReLU 问题,即某些神经元可能永远不会被激活 |
| sigmoid | (f(x) = \frac{1}{1 + e^{-x}}) | 输出范围在 (0, 1) 之间,可用于表示概率 | 存在梯度消失问题,计算复杂度较高 |
| tanh | (f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}) | 输出范围在 (-1, 1) 之间,零中心化更好 | 同样存在梯度消失问题 |
在实际应用中,ReLU 由于其简单高效的特点,成为了卷积神经网络中最常用的激活函数。但在某些特殊场景下,如需要输出概率值时,sigmoid 函数可能更为合适。
4.3 池化操作的变体与效果
除了最大池化和平均池化,还有一些其他的池化变体,如随机池化和混合池化。
- 随机池化 :在池化区域内随机选择一个值作为输出。这种方法增加了模型的随机性,有助于提高模型的泛化能力。
- 混合池化 :结合了最大池化和平均池化的优点,例如可以在不同的通道上分别使用最大池化和平均池化。
以下是一个简单的 mermaid 流程图,展示不同池化操作的选择过程:
graph LR
A[输入特征图] --> B{选择池化类型?}
B -- 最大池化 --> C[最大池化层]
B -- 平均池化 --> D[平均池化层]
B -- 随机池化 --> E[随机池化层]
B -- 混合池化 --> F[混合池化层]
C --> G[输出特征图]
D --> G
E --> G
F --> G
5. 卷积神经网络架构设计的实践建议
5.1 根据任务选择合适的架构
不同的任务对卷积神经网络的架构有不同的要求。例如,图像分类任务通常需要一个能够有效提取特征并进行分类的架构,而图像分割任务则需要一个能够生成与输入图像相同尺寸的输出分割图的架构。
以下是一些常见任务对应的架构建议:
-
图像分类
:可以选择经典的架构如 VGG、ResNet 等。这些架构在 ImageNet 数据集上取得了很好的分类效果。
-
图像分割
:U - Net、SegNet 等架构更适合。它们通过编码器 - 解码器结构,能够有效地进行图像分割。
-
目标检测
:Faster R - CNN、YOLO 等架构是常用的选择。它们能够在图像中准确地检测出目标的位置和类别。
5.2 调整网络深度与宽度
网络的深度和宽度是影响卷积神经网络性能的重要因素。增加网络深度可以让模型学习到更复杂的特征,但也会增加训练的难度和计算量。增加网络宽度可以让模型学习到更多的特征,但同样会增加参数数量。
在实际设计中,可以遵循以下原则:
-
深度优先
:先尝试增加网络的深度,观察模型性能的变化。如果性能提升不明显,可以考虑增加网络的宽度。
-
逐层调整
:在增加网络深度或宽度时,可以逐层进行调整,观察每一层的变化对模型性能的影响。
5.3 优化训练过程
训练卷积神经网络时,需要注意以下几点:
-
选择合适的优化器
:常见的优化器有随机梯度下降(SGD)、Adagrad、Adadelta、Adam 等。不同的优化器适用于不同的场景,例如 Adam 优化器在大多数情况下都能取得较好的效果。
-
设置合适的学习率
:学习率决定了模型参数更新的步长。如果学习率过大,模型可能会跳过最优解;如果学习率过小,模型的收敛速度会很慢。可以使用学习率衰减策略,在训练过程中逐渐减小学习率。
-
使用数据增强
:数据增强可以增加训练数据的多样性,提高模型的泛化能力。常见的数据增强方法有随机裁剪、翻转、旋转等。
6. 卷积神经网络的未来发展趋势
6.1 轻量级网络架构
随着移动设备和嵌入式系统的发展,对轻量级卷积神经网络的需求越来越大。轻量级网络架构通常具有较少的参数和计算量,能够在资源受限的设备上快速运行。例如,MobileNet、ShuffleNet 等架构通过引入深度可分离卷积等技术,大大减少了模型的参数数量和计算量。
6.2 结合其他技术
卷积神经网络可以与其他技术相结合,以提高模型的性能。例如,将卷积神经网络与循环神经网络(RNN)结合,可以处理序列数据,如视频、语音等。将卷积神经网络与强化学习结合,可以实现智能决策和控制。
6.3 自动化架构设计
自动化架构设计是未来卷积神经网络发展的一个重要方向。通过使用进化算法、强化学习等技术,可以自动搜索最优的网络架构,减少人工设计的工作量和主观性。例如,AutoML 技术可以在大规模的架构空间中搜索最优的卷积神经网络架构。
7. 总结与展望
本文全面深入地介绍了卷积神经网络的基础结构、参数设置、层间操作以及架构设计等方面的内容。通过对填充、步长、激活函数、池化操作等关键因素的分析,我们了解了它们对特征图尺寸、模型性能的影响。同时,给出了根据不同任务选择合适架构、调整网络深度和宽度、优化训练过程等实践建议。
展望未来,卷积神经网络将朝着轻量级、结合其他技术和自动化架构设计等方向发展。这些发展趋势将进一步推动卷积神经网络在计算机视觉、自然语言处理等领域的广泛应用。在实际应用中,我们需要不断探索和创新,根据具体的任务需求和资源约束,设计出更加高效、准确的卷积神经网络模型。
为了更直观地展示卷积神经网络的发展历程和未来趋势,以下是一个简单的 mermaid 时间轴图:
timeline
title 卷积神经网络发展历程与未来趋势
1998: LeNet - 5 提出
2012: AlexNet 取得 ImageNet 竞赛冠军
2014: VGG、GoogLeNet 出现
2015: ResNet 提出
2017: MobileNet 发布
未来: 轻量级网络、结合其他技术、自动化架构设计
通过本文的学习,希望读者能够对卷积神经网络有更深入的理解,并在实际应用中能够灵活运用这些知识,设计出更优秀的模型。
超级会员免费看
1263

被折叠的 条评论
为什么被折叠?



