深度学习(CNN)
CNN是一种专门用于处理具有网格状拓扑结构数据(如图像、视频、语音)的深度学习架构。它在计算机视觉领域取得了革命性的成功,是当今图像识别、目标检测、图像分割等技术的核心。
为了让解释更清晰,我们将其分为几个核心部分:
-
为什么需要CNN?(传统神经网络的困境)
-
CNN的核心思想
-
CNN的核心构建模块(逐层详解)
-
一个完整的CNN架构示例
-
CNN的优势总结
1. 为什么需要CNN?
假设我们有一张 1000x1000 像素的彩色图片(3个通道:RGB)。如果将其直接展平输入到一个标准的全连接神经网络中:
-
输入层的神经元数量将是:1000 * 1000 * 3 = 3,000,000。
-
如果第一个隐藏层有1000个神经元,那么仅这一层就需要 3,000,000 * 1000 = 3,000,000,000 个权重参数。这个参数量是巨大的,会导致:
-
计算效率低下:训练和推理速度极慢。
-
容易过拟合:参数太多而数据量有限,模型会记住训练数据而不是学习通用特征。
-
更重要的是,全连接网络忽略了图像的空间结构信息。它将所有像素视为独立的个体,而图像中一个像素与其周围像素的关系(即局部特征,如边缘、角点)才是理解图像内容的关键。
2. CNN的核心思想
CNN通过以下三个关键思想来解决上述问题:
-
局部感知: 不像全连接网络那样每个神经元都看整个图像,CNN的神经元只关注输入的一个小区域(局部感受野)。这更接近生物视觉系统的工作原理(视网膜上的细胞只接收特定区域的刺激)。
-
参数共享: 同一个特征(例如,一个水平的边缘探测器)可能出现在图像的任何位置。CNN使用相同的滤波器(一组权重)在整个图像上滑动,来检测这个特征,无论它在哪里出现。这极大地减少了参数数量。
-
空间下采样: 在卷积层之后,通常会加入池化层来逐渐降低数据的空间尺寸(宽度和高度)。这不仅能进一步减少计算量,还能使网络对输入图像的小平移、旋转和变形保持一定的不变性。
3. CNN的核心构建模块(逐层详解)
一个典型的CNN由以下几种层堆叠而成:
A. 卷积层 - 核心特征提取器
这是CNN最核心的部分。
-
滤波器/卷积核: 这是一个小的权重矩阵(例如3x3, 5x5)。你可以把它想象成一个特征探测器。不同的滤波器用于检测不同的特征(如边缘、颜色、纹理)。
-
工作原理: 滤波器在输入图像或特征图上滑动(卷积操作)。在每个位置,它计算滤波器与对应局部区域的点积,并加上一个偏置项,生成一个单一的数值输出。
-
步长: 滤波器每次滑动的像素数。步长为1表示每次移动1个像素;步长为2表示每次移动2个像素,输出特征图会更小。
-
填充: 为了控制输出特征图的大小,有时会在输入数据的边缘填充一圈0(零填充)。这可以防止特征图尺寸缩小的太快。
-
-
输出: 所有滑动位置的结果组成一个新的二维数组,称为特征图或激活图。一个卷积层通常包含多个滤波器,因此会产生多个特征图,它们堆叠在一起形成输出体积(宽度 x 高度 x 深度/通道数)。
-
激活函数: 卷积计算出的线性结果会通过一个非线性的激活函数(如ReLU),这是为了让网络能够学习复杂的非线性模式。
直观理解:一个检测垂直边缘的滤波器,当它滑过一个物体的垂直边界时,会产生高数值的输出,从而在特征图上“点亮”那个位置。
B. 池化层 - 空间维度压缩和不变性
池化层通常跟在卷积层之后,用于对特征图进行下采样。
-
目的:
-
减少计算量和内存使用。
-
防止过拟合。
-
增加感受野:使后续的神经元能看到更广的输入区域。
-
提供一定程度的空间不变性:对输入的小变化不敏感。
-
-
类型:
-
最大池化: 在一个小窗口(如2x2)内取最大值。这是最常用的方法,因为它能保留最显著的特征。
-
平均池化: 在一个小窗口内取平均值。
-
-
参数: 像卷积一样,它有窗口大小(如2x2)和步长(通常是2)。使用2x2窗口,步长为2,会将特征图的尺寸减小到原来的一半。
C. 全连接层 - 最终分类器
在经过多次卷积和池化后,网络最后通常会连接一个或多个全连接层。
-
作用: 将学习到的分布式“高级特征”映射到最终的样本标签空间(例如,图片属于哪个类别)。它将前面卷积层输出的三维特征图展平成一个一维向量,然后进行传统的神经网络处理。
-
位置: 位于网络的末端。
D. 丢弃层
一种正则化技术,在训练期间随机“丢弃”(暂时禁用)一部分神经元。这可以强制网络不依赖于任何单个神经元,促进更鲁棒的特征学习,有效防止过拟合。
4. 一个完整的CNN架构示例:LeNet-5
以经典的LeNet-5(用于手写数字识别)为例,看这些层是如何组合的:
输入图像 (32x32x1)
➡ 卷积层1 (使用6个5x5滤波器,步长1) → 特征图 (28x28x6)
➡ 池化层1 (最大池化,2x2,步长2) → 特征图 (14x14x6)
➡ 卷积层2 (使用16个5x5滤波器,步长1) → 特征图 (10x10x16)
➡ 池化层2 (最大池化,2x2,步长2) → 特征图 (5x5x16)
➡ 展平 → 向量 (400)
➡ 全连接层1 (120个神经元)
➡ 全连接层2 (84个神经元)
➡ 输出层 (10个神经元,对应0-9数字) → Softmax激活函数得到概率
数据流动趋势:
-
空间尺寸: 逐渐减小(32 → 28 → 14 ... → 5 → 1)。
-
深度(通道数): 逐渐增加(1 → 6 → 16),表示学习到的特征越来越抽象和复杂。
-
特征抽象层次:
-
浅层: 检测边缘、角点、颜色等低级特征。
-
中层: 组合低级特征,形成纹理、部分物体(如眼睛、轮子)。
-
深层: 组合中级特征,形成整个物体的高级表示(如人脸、汽车)。
-
5. CNN的优势总结
-
参数稀疏连接与权值共享: 这是CNN参数效率高的根本原因,使其能够用更少的参数构建更深的网络。
-
平移不变性: 由于滤波器在整个图像上滑动,无论特征出现在哪里,都能被检测到。
-
层次化特征学习: 自动从低级到高级学习特征,无需人工设计特征。这使得CNN非常强大和通用。
-
强大的表示能力: 非常深的CNN(如ResNet, VGG)可以学习极其复杂的模式和表示。
现代CNN的发展
自LeNet以来,CNN架构经历了巨大的发展,出现了许多里程碑式的网络,如:
-
AlexNet (2012): 真正点燃深度学习热潮,证明了深度CNN的巨大潜力。
-
VGGNet (2014): 探索了网络深度,使用堆叠的小型3x3卷积核。
-
GoogLeNet/Inception (2014): 引入Inception模块,在单一层内使用多尺寸卷积核。
-
ResNet (2015): 引入残差连接,解决了极深网络的梯度消失和退化问题,使得构建数百甚至上千层的网络成为可能。
更多推荐
所有评论(0)